diff --git a/Cargo.lock b/Cargo.lock index 51f06214..a406ab8b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7113,6 +7113,7 @@ dependencies = [ "hyper-util", "js-sys", "log", + "mime_guess", "native-tls", "percent-encoding", "pin-project-lite", diff --git a/adminui/assets/FormContext-Cvsbmzt5.js b/adminui/assets/FormContext-B5vgnUQy.js similarity index 77% rename from adminui/assets/FormContext-Cvsbmzt5.js rename to adminui/assets/FormContext-B5vgnUQy.js index f2bd3661..3872f76b 100644 --- a/adminui/assets/FormContext-Cvsbmzt5.js +++ b/adminui/assets/FormContext-B5vgnUQy.js @@ -1 +1 @@ -import{f as t}from"./vendor-react-j_G0Dyx0.js";import{af as r}from"./index-EC_gIQIi.js";const e=t.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:r,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function s(){return t.useContext(e)}export{s as u}; +import{f as t}from"./vendor-react-j_G0Dyx0.js";import{af as r}from"./index-C-i99XXF.js";const e=t.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:r,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function s(){return t.useContext(e)}export{s as u}; diff --git a/adminui/assets/admin-login-CBhSyL8o.js b/adminui/assets/admin-login-DEbthX6z.js similarity index 93% rename from adminui/assets/admin-login-CBhSyL8o.js rename to adminui/assets/admin-login-DEbthX6z.js index 275c51ab..87f66eb4 100644 --- a/adminui/assets/admin-login-CBhSyL8o.js +++ b/adminui/assets/admin-login-DEbthX6z.js @@ -1 +1 @@ -import{i as k,l as y,f as i,j as e}from"./vendor-react-j_G0Dyx0.js";import{b as S,u as _,o as E,s as p}from"./zod-YGny3e4W.js";import{bR as z,ci as C,aW as n,a8 as T,i as F,ao as I,bK as x}from"./index-EC_gIQIi.js";import{I as f}from"./input-D7bJWFUq.js";import{L as g}from"./label-BNi6V6qj.js";import{T as A}from"./theme-toggle-Bh88uk5d.js";import{C as P}from"./circle-alert-0_MkNfwO.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";const R=E({email:p().email(),password:p().min(1)});function O(){const l=k(),[h]=y(),j=z(),[m,d]=i.useState(!1),[b,v]=i.useState(!0),{t:r}=C(),w=h.get("expired")==="1";i.useEffect(()=>{n.send("/setup/status").then(s=>{s&&!s.has_admin&&l("/setup",{replace:!0})}).catch(()=>{}).finally(()=>v(!1))},[l]);const{register:c,handleSubmit:N,setValue:o,formState:{errors:t}}=S({resolver:_(R),defaultValues:{email:"",password:""}});if(i.useEffect(()=>{n.send("/info").then(s=>{var a,u;(a=s==null?void 0:s.demo)!=null&&a.email&&((u=s==null?void 0:s.demo)!=null&&u.password)&&(o("email",s.demo.email),o("password",s.demo.password))}).catch(()=>{})},[o]),b)return e.jsx("div",{className:"flex min-h-svh items-center justify-center",children:e.jsx("div",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-transparent"})});async function L(s){d(!0);try{const a=await n.auth.login(s.email,s.password);j.login({id:a.user.id,username:a.user.username,roles:a.user.roles,avatar:a.user.avatar,bio:a.user.bio??null,email:null},a.access_token,a.refresh_token),l("/")}catch(a){a instanceof I?x.error(a.message):x.error(r("adminLogin.error"))}finally{d(!1)}}return e.jsxs("div",{className:"relative flex min-h-svh flex-col items-center justify-center gap-6 p-4 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 z-0 metal-perforation",style:{maskImage:"radial-gradient(ellipse 70% 60% at 50% 50%, black 30%, transparent 70%)",WebkitMaskImage:"radial-gradient(ellipse 70% 60% at 50% 50%, black 30%, transparent 70%)"}}),e.jsxs("div",{className:"absolute right-4 top-4 z-10 flex items-center gap-1",children:[e.jsx(T,{}),e.jsx(A,{})]}),e.jsxs("div",{className:"relative z-10 flex w-full max-w-sm flex-col gap-6",children:[e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx("img",{src:"/admin/logo.png",alt:"RaisFast",className:"size-16"}),e.jsx("h1",{className:"text-xl font-semibold",children:r("adminLogin.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r("adminLogin.subtitle")})]}),e.jsxs("form",{onSubmit:N(L),className:"relative flex flex-col gap-4 rounded-xl border bg-card p-6 shadow-sm dark:shadow-[0_0_60px_-12px_oklch(0.63_0.22_30)] dark:border-primary/20",children:[w&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:[e.jsx(P,{className:"size-4 shrink-0"}),e.jsx("span",{children:r("adminLogin.sessionExpired")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(g,{htmlFor:"email",children:r("adminLogin.email")}),e.jsx(f,{id:"email",type:"email",required:!0,autoComplete:"email",placeholder:"you@example.com",...c("email")}),t.email&&e.jsx("p",{className:"text-sm text-destructive",children:t.email.message})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(g,{htmlFor:"password",children:r("adminLogin.password")}),e.jsx(f,{id:"password",type:"password",required:!0,minLength:1,autoComplete:"current-password",placeholder:"••••••••",...c("password")}),t.password&&e.jsx("p",{className:"text-sm text-destructive",children:t.password.message})]}),e.jsx(F,{type:"submit",className:"w-full mt-2",disabled:m,children:r(m?"adminLogin.loading":"adminLogin.submit")})]}),e.jsx("p",{className:"text-center text-xs text-muted-foreground",children:r("adminLogin.footer")})]})]})}export{O as default}; +import{i as k,l as y,f as i,j as e}from"./vendor-react-j_G0Dyx0.js";import{b as S,u as _,o as E,s as p}from"./zod-YGny3e4W.js";import{bR as z,ci as C,aW as n,a8 as T,i as F,ao as I,bK as x}from"./index-C-i99XXF.js";import{I as f}from"./input-CX4DHDvW.js";import{L as g}from"./label-YdsyMzds.js";import{T as A}from"./theme-toggle-DBriVhwx.js";import{C as P}from"./circle-alert-BhGUNGA_.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";const R=E({email:p().email(),password:p().min(1)});function O(){const l=k(),[h]=y(),j=z(),[m,d]=i.useState(!1),[b,v]=i.useState(!0),{t:r}=C(),w=h.get("expired")==="1";i.useEffect(()=>{n.send("/setup/status").then(s=>{s&&!s.has_admin&&l("/setup",{replace:!0})}).catch(()=>{}).finally(()=>v(!1))},[l]);const{register:c,handleSubmit:N,setValue:o,formState:{errors:t}}=S({resolver:_(R),defaultValues:{email:"",password:""}});if(i.useEffect(()=>{n.send("/info").then(s=>{var a,u;(a=s==null?void 0:s.demo)!=null&&a.email&&((u=s==null?void 0:s.demo)!=null&&u.password)&&(o("email",s.demo.email),o("password",s.demo.password))}).catch(()=>{})},[o]),b)return e.jsx("div",{className:"flex min-h-svh items-center justify-center",children:e.jsx("div",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-transparent"})});async function L(s){d(!0);try{const a=await n.auth.login(s.email,s.password);j.login({id:a.user.id,username:a.user.username,roles:a.user.roles,avatar:a.user.avatar,bio:a.user.bio??null,email:null},a.access_token,a.refresh_token),l("/")}catch(a){a instanceof I?x.error(a.message):x.error(r("adminLogin.error"))}finally{d(!1)}}return e.jsxs("div",{className:"relative flex min-h-svh flex-col items-center justify-center gap-6 p-4 overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 z-0 metal-perforation",style:{maskImage:"radial-gradient(ellipse 70% 60% at 50% 50%, black 30%, transparent 70%)",WebkitMaskImage:"radial-gradient(ellipse 70% 60% at 50% 50%, black 30%, transparent 70%)"}}),e.jsxs("div",{className:"absolute right-4 top-4 z-10 flex items-center gap-1",children:[e.jsx(T,{}),e.jsx(A,{})]}),e.jsxs("div",{className:"relative z-10 flex w-full max-w-sm flex-col gap-6",children:[e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx("img",{src:"/admin/logo.png",alt:"RaisFast",className:"size-16"}),e.jsx("h1",{className:"text-xl font-semibold",children:r("adminLogin.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r("adminLogin.subtitle")})]}),e.jsxs("form",{onSubmit:N(L),className:"relative flex flex-col gap-4 rounded-xl border bg-card p-6 shadow-sm dark:shadow-[0_0_60px_-12px_oklch(0.63_0.22_30)] dark:border-primary/20",children:[w&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:[e.jsx(P,{className:"size-4 shrink-0"}),e.jsx("span",{children:r("adminLogin.sessionExpired")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(g,{htmlFor:"email",children:r("adminLogin.email")}),e.jsx(f,{id:"email",type:"email",required:!0,autoComplete:"email",placeholder:"you@example.com",...c("email")}),t.email&&e.jsx("p",{className:"text-sm text-destructive",children:t.email.message})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(g,{htmlFor:"password",children:r("adminLogin.password")}),e.jsx(f,{id:"password",type:"password",required:!0,minLength:1,autoComplete:"current-password",placeholder:"••••••••",...c("password")}),t.password&&e.jsx("p",{className:"text-sm text-destructive",children:t.password.message})]}),e.jsx(F,{type:"submit",className:"w-full mt-2",disabled:m,children:r(m?"adminLogin.loading":"adminLogin.submit")})]}),e.jsx("p",{className:"text-center text-xs text-muted-foreground",children:r("adminLogin.footer")})]})]})}export{O as default}; diff --git a/adminui/assets/alert-dialog-BCjXQEnz.js b/adminui/assets/alert-dialog-CqlwlZ39.js similarity index 97% rename from adminui/assets/alert-dialog-BCjXQEnz.js rename to adminui/assets/alert-dialog-CqlwlZ39.js index 710662de..90db2ce1 100644 --- a/adminui/assets/alert-dialog-BCjXQEnz.js +++ b/adminui/assets/alert-dialog-CqlwlZ39.js @@ -1 +1 @@ -import{j as e}from"./vendor-react-j_G0Dyx0.js";import{cc as d,H as i,aX as o,K as n,G as g,F as u,i as r,I as c,E as f}from"./index-EC_gIQIi.js";function m(a){return d(a,"alert-dialog")}function z({...a}){return e.jsx(m,{"data-slot":"alert-dialog",...a})}function p({...a}){return e.jsx(c,{"data-slot":"alert-dialog-portal",...a})}function x({className:a,...t}){return e.jsx(f,{"data-slot":"alert-dialog-overlay",className:o("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",a),...t})}function b({className:a,size:t="default",...l}){return e.jsxs(p,{children:[e.jsx(x,{}),e.jsx(i,{"data-slot":"alert-dialog-content","data-size":t,className:o("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",a),...l})]})}function A({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:o("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",a),...t})}function h({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:o("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",a),...t})}function v({className:a,...t}){return e.jsx(n,{"data-slot":"alert-dialog-title",className:o("font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",a),...t})}function w({className:a,...t}){return e.jsx(g,{"data-slot":"alert-dialog-description",className:o("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",a),...t})}function N({className:a,...t}){return e.jsx(r,{"data-slot":"alert-dialog-action",className:o(a),...t})}function y({className:a,variant:t="outline",size:l="default",...s}){return e.jsx(u,{"data-slot":"alert-dialog-cancel",className:o(a),render:e.jsx(r,{variant:t,size:l}),...s})}export{z as A,N as a,y as b,b as c,w as d,h as e,A as f,v as g}; +import{j as e}from"./vendor-react-j_G0Dyx0.js";import{cc as d,H as i,aX as o,K as n,G as g,F as u,i as r,I as c,E as f}from"./index-C-i99XXF.js";function m(a){return d(a,"alert-dialog")}function z({...a}){return e.jsx(m,{"data-slot":"alert-dialog",...a})}function p({...a}){return e.jsx(c,{"data-slot":"alert-dialog-portal",...a})}function x({className:a,...t}){return e.jsx(f,{"data-slot":"alert-dialog-overlay",className:o("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",a),...t})}function b({className:a,size:t="default",...l}){return e.jsxs(p,{children:[e.jsx(x,{}),e.jsx(i,{"data-slot":"alert-dialog-content","data-size":t,className:o("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",a),...l})]})}function A({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-header",className:o("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",a),...t})}function h({className:a,...t}){return e.jsx("div",{"data-slot":"alert-dialog-footer",className:o("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",a),...t})}function v({className:a,...t}){return e.jsx(n,{"data-slot":"alert-dialog-title",className:o("font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",a),...t})}function w({className:a,...t}){return e.jsx(g,{"data-slot":"alert-dialog-description",className:o("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",a),...t})}function N({className:a,...t}){return e.jsx(r,{"data-slot":"alert-dialog-action",className:o(a),...t})}function y({className:a,variant:t="outline",size:l="default",...s}){return e.jsx(u,{"data-slot":"alert-dialog-cancel",className:o(a),render:e.jsx(r,{variant:t,size:l}),...s})}export{z as A,N as a,y as b,b as c,w as d,h as e,A as f,v as g}; diff --git a/adminui/assets/api-clients-BPQgZYAi.js b/adminui/assets/api-clients-BPQgZYAi.js new file mode 100644 index 00000000..bd3b6110 --- /dev/null +++ b/adminui/assets/api-clients-BPQgZYAi.js @@ -0,0 +1 @@ +import{f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as _e,c9 as Se,c8 as Z,i as j,ah as we,L as De,R as Ee,M as Oe,N as Q,bK as x,ao as k,aW as g}from"./index-C-i99XXF.js";import{u as T}from"./useMutation-CrSU7LrM.js";import{A as Ae,c as Pe,f as Fe,g as Me,d as ze,e as Ke,b as Le,a as qe}from"./alert-dialog-CqlwlZ39.js";import{B as A}from"./badge-BxazBb-3.js";import{C as le,a as re}from"./card-BwvuSgdv.js";import{D as R,f as He,a as B,d as V,e as U,c as W}from"./dialog-8LyJX3or.js";import{I as Y}from"./input-CX4DHDvW.js";import{L as c}from"./label-YdsyMzds.js";import{S as oe,e as ce,f as de,a as me,c as ue}from"./select-C7HHvgkd.js";import{S as xe}from"./switch-0loFRSXw.js";import{T as he,d as je,e as C,c as r,a as ge,b as l}from"./table-CCu_JPDD.js";import{T as Ie,b as Je,c as pe,a as fe}from"./tabs-CdDx4vU1.js";import{T as _}from"./textarea-DxF_RMjI.js";import{T as ye}from"./table-skeleton-W4NmdKYl.js";import{E as ve}from"./empty-state-v8u5VqOl.js";import{P as Qe}from"./plus-CwjdK202.js";import{E as Re}from"./ellipsis-vertical-xZQpERB7.js";import{P as Be}from"./pencil-BzoosANP.js";import{S as Ce}from"./send-B2zNs9sp.js";import{T as Ve}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";function E(n,a){const v=n.trim();if(v)try{return JSON.parse(v)}catch{return x.error(a("integration.invalidJson")),null}}const Ne={client_key:"",display_name:"",base_url:"",auth:"",credentials:"",rate_limit:"",ops:"",enabled:!0};function O(n){const a=n==null?void 0:n.ops;return!a||typeof a!="object"?[]:Object.keys(a)}function be(n){const a=n.auth;return(a==null?void 0:a.kind)??"none"}function Ue({clientId:n}){var y;const{t:a}=_e(),v=Z({queryKey:["oauth-status",n],queryFn:()=>g.admin.integration.oauthStatus(n)}),p=T({mutationFn:()=>g.admin.integration.oauthStart(n),onSuccess:o=>window.open(o.auth_url,"_blank"),onError:o=>x.error(o instanceof k?o.message:a("integration.oauthStartFailed"))}),f=((y=v.data)==null?void 0:y.authorized)===!0;return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(A,{variant:f?"default":"outline",className:"w-fit",children:a(f?"integration.oauthAuthorized":"integration.oauthNotAuthorized")}),e.jsx(j,{size:"sm",variant:"outline",onClick:()=>p.mutate(),disabled:p.isPending,children:a(f?"integration.oauthReauthorize":"integration.oauthAuthorize")})]})}function bs(){var ae;const{t:n}=_e(),a=Se(),[v,p]=d.useState(!1),[f,y]=d.useState(null),[o,P]=d.useState(null),[i,F]=d.useState(Ne),[m,M]=d.useState(null),[z,$]=d.useState(""),[G,X]=d.useState("{}"),[u,S]=d.useState(null),[K,ke]=d.useState(""),L=Z({queryKey:["admin-integration-api-clients"],queryFn:()=>g.admin.integration.listApiClients()}),w=d.useMemo(()=>L.data??[],[L.data]),ee=Z({queryKey:["admin-integration-egress-log",K],queryFn:()=>g.admin.integration.listEgressLog({client_key:K||void 0,limit:100})}),se=((ae=ee.data)==null?void 0:ae.items)??[],h=(s,t)=>F(N=>({...N,[s]:t}));function q(){F(Ne)}function Te(s){y(s),F({client_key:s.client_key,display_name:s.display_name,base_url:s.base_url,auth:s.auth?JSON.stringify(s.auth,null,2):"",credentials:"",rate_limit:s.rate_limit?JSON.stringify(s.rate_limit,null,2):"",ops:s.ops?JSON.stringify(s.ops,null,2):"",enabled:s.enabled})}function ne(){const s=E(i.auth,n);if(s===null)return null;const t=E(i.credentials,n);if(t===null)return null;const N=E(i.rate_limit,n);if(N===null)return null;const J=E(i.ops,n);if(J===null)return null;const b={base_url:i.base_url,enabled:i.enabled};return s!==void 0&&(b.auth=s),t!==void 0&&(b.credentials=t),N!==void 0&&(b.rate_limit=N),J!==void 0&&(b.ops=J),b}const H=T({mutationFn:()=>{const s=ne();return s?g.admin.integration.createApiClient({client_key:i.client_key,display_name:i.display_name||i.client_key,...s}):Promise.reject(new Error("invalid json"))},onSuccess:()=>{x.success(n("integration.clientCreated")),a.invalidateQueries({queryKey:["admin-integration-api-clients"]}),p(!1),q()},onError:s=>x.error(s instanceof k?s.message:n("integration.failedToCreate"))}),D=T({mutationFn:({id:s,body:t})=>g.admin.integration.updateApiClient(s,t),onSuccess:()=>{x.success(n("integration.clientUpdated")),a.invalidateQueries({queryKey:["admin-integration-api-clients"]}),y(null)},onError:s=>x.error(s instanceof k?s.message:n("integration.failedToUpdate"))}),te=T({mutationFn:s=>g.admin.integration.deleteApiClient(s),onSuccess:()=>{x.success(n("integration.clientDeleted")),a.invalidateQueries({queryKey:["admin-integration-api-clients"]}),P(null)},onError:s=>x.error(s instanceof k?s.message:n("integration.failedToDelete"))}),I=T({mutationFn:()=>{let s;try{s=JSON.parse(G||"{}")}catch{return Promise.reject(new Error("invalid json"))}return g.admin.integration.testCall((m==null?void 0:m.id)??"",{op:z,input:s})},onSuccess:s=>S(s),onError:s=>x.error(s instanceof k?s.message:n("integration.failedToTest"))});function ie(s){return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(c,{children:[n("integration.clientKey")," *"]}),e.jsx(Y,{value:i.client_key,onChange:t=>h("client_key",t.target.value),disabled:s,placeholder:"dify"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.displayName")}),e.jsx(Y,{value:i.display_name,onChange:t=>h("display_name",t.target.value)})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(c,{children:[n("integration.baseUrl")," *"]}),e.jsx(Y,{value:i.base_url,onChange:t=>h("base_url",t.target.value),placeholder:"https://api.example.com/v1"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.authConfig")}),e.jsx(_,{value:i.auth,onChange:t=>h("auth",t.target.value),rows:2,className:"font-mono text-xs",placeholder:'{"kind": "bearer"}'})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.credentials")}),e.jsx(_,{value:i.credentials,onChange:t=>h("credentials",t.target.value),rows:2,className:"font-mono text-xs",placeholder:s?n("integration.credentialsKeepHint"):'{"secret": "…"}'})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.rateLimit")}),e.jsx(_,{value:i.rate_limit,onChange:t=>h("rate_limit",t.target.value),rows:2,className:"font-mono text-xs",placeholder:'{"per_minute": 120}'})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.ops")}),e.jsx(_,{value:i.ops,onChange:t=>h("ops",t.target.value),rows:6,className:"font-mono text-xs",placeholder:'{"chat": {"method": "POST", "path": "/chat-messages"}}'})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(xe,{checked:i.enabled,onCheckedChange:t=>h("enabled",t)}),e.jsx(c,{className:"cursor-pointer",children:i.enabled?n("common.enabled"):n("common.disabled")})]})]})}return e.jsxs(Ie,{defaultValue:"clients",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(Je,{children:[e.jsx(pe,{value:"clients",children:n("integration.apiClients")}),e.jsx(pe,{value:"egress",children:n("integration.egressLog")})]}),e.jsxs(R,{open:v,onOpenChange:s=>{p(s),s||q()},children:[e.jsxs(He,{render:e.jsx(j,{}),children:[e.jsx(Qe,{className:"size-4"}),n("integration.newClient")]}),e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(V,{children:e.jsx(U,{children:n("integration.newClient")})}),ie(!1),e.jsxs(W,{children:[e.jsx(j,{variant:"outline",onClick:()=>{p(!1),q()},children:n("common.cancel")}),e.jsx(j,{onClick:()=>H.mutate(),disabled:H.isPending||!i.client_key||!i.base_url,children:H.isPending?n("common.creating"):n("common.create")})]})]})]})]}),e.jsx(fe,{value:"clients",children:e.jsx(le,{children:e.jsx(re,{className:"p-0",children:L.isLoading?e.jsx(ye,{cols:5}):e.jsxs(he,{children:[e.jsx(je,{children:e.jsxs(C,{children:[e.jsx(r,{children:n("integration.clientKey")}),e.jsx(r,{children:n("integration.baseUrl")}),e.jsx(r,{children:"Auth"}),e.jsx(r,{children:n("integration.opsCount")}),e.jsx(r,{children:n("common.status")}),e.jsx(r,{className:"text-end",children:n("common.actions")})]})}),e.jsx(ge,{children:w.length===0?e.jsx(C,{children:e.jsx(l,{colSpan:6,children:e.jsx(ve,{icon:we,title:n("integration.noClients"),description:n("integration.noClientsDesc"),action:{label:n("integration.newClient"),onClick:()=>p(!0)}})})}):w.map(s=>e.jsxs(C,{children:[e.jsx(l,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:s.display_name}),e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:s.client_key})]})}),e.jsx(l,{children:e.jsx("span",{className:"font-mono text-xs max-w-64 truncate inline-block align-bottom",children:s.base_url})}),e.jsxs(l,{children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(A,{variant:"outline",className:"font-mono",children:be(s)}),s.has_credentials&&e.jsx("span",{title:n("integration.hasCredentials"),children:"🔑"})]}),be(s)==="oauth2-auth-code"&&e.jsx("div",{className:"mt-2",children:e.jsx(Ue,{clientId:s.id})})]}),e.jsx(l,{children:e.jsx("span",{className:"font-mono text-xs",children:O(s).length})}),e.jsx(l,{children:e.jsx(xe,{checked:s.enabled,onCheckedChange:t=>D.mutate({id:s.id,body:{enabled:t}})})}),e.jsx(l,{className:"text-end",children:e.jsxs(De,{children:[e.jsx(Ee,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Re,{className:"size-4"})}),e.jsxs(Oe,{align:"end",children:[e.jsxs(Q,{onClick:()=>Te(s),children:[e.jsx(Be,{className:"size-4 me-2"}),n("common.edit")]}),e.jsxs(Q,{onClick:()=>{M(s),$(O(s)[0]??""),X("{}"),S(null)},children:[e.jsx(Ce,{className:"size-4 me-2"}),n("integration.testCall")]}),e.jsxs(Q,{onClick:()=>P(s),disabled:te.isPending,className:"text-destructive",children:[e.jsx(Ve,{className:"size-4 me-2"}),n("common.delete")]})]})]})})]},s.id))})]})})})}),e.jsxs(fe,{value:"egress",children:[e.jsx("div",{className:"flex items-center gap-2 mb-4",children:e.jsxs(oe,{value:K||void 0,onValueChange:s=>ke(s??""),items:Object.fromEntries(w.map(s=>[s.client_key,s.client_key])),children:[e.jsx(ce,{className:"w-44",children:e.jsx(de,{placeholder:n("integration.allClients")})}),e.jsx(me,{children:w.map(s=>e.jsx(ue,{value:s.client_key,children:s.client_key},s.id))})]})}),e.jsx(le,{children:e.jsx(re,{className:"p-0",children:ee.isLoading?e.jsx(ye,{cols:6}):e.jsxs(he,{children:[e.jsx(je,{children:e.jsxs(C,{children:[e.jsx(r,{children:"Trace ID"}),e.jsx(r,{children:"Client / Op"}),e.jsx(r,{children:n("common.status")}),e.jsx(r,{children:n("integration.latency")}),e.jsx(r,{children:"Tokens"}),e.jsx(r,{children:n("integration.createdAt")})]})}),e.jsx(ge,{children:se.length===0?e.jsx(C,{children:e.jsx(l,{colSpan:6,children:e.jsx(ve,{icon:Ce,title:n("integration.noEgress"),description:n("integration.noEgressDesc")})})}):se.map(s=>e.jsxs(C,{children:[e.jsx(l,{children:s.trace_id?e.jsx(We,{traceId:s.trace_id}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})}),e.jsx(l,{children:e.jsxs("span",{className:"font-mono text-xs",children:[s.client_key,".",s.op]})}),e.jsxs(l,{children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(A,{variant:s.status==="ok"?"default":"destructive",children:s.status}),s.http_status!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:["HTTP ",s.http_status]})]}),s.error&&e.jsx("p",{className:"text-xs text-destructive max-w-64 truncate",children:s.error})]}),e.jsx(l,{children:e.jsxs("span",{className:"font-mono text-xs",children:[s.latency_ms,"ms"]})}),e.jsx(l,{children:s.tokens_in!=null&&e.jsxs("span",{className:"font-mono text-xs text-muted-foreground",children:[s.tokens_in,"↑ ",s.tokens_out??0,"↓"]})}),e.jsx(l,{children:e.jsx("span",{className:"text-xs text-muted-foreground",children:new Date(s.created_at).toLocaleString()})})]},s.id))})]})})})]}),e.jsx(R,{open:!!f,onOpenChange:s=>{s||y(null)},children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(V,{children:e.jsx(U,{children:n("integration.editClient")})}),ie(!0),e.jsxs(W,{children:[e.jsx(j,{variant:"outline",onClick:()=>y(null),children:n("common.cancel")}),e.jsx(j,{onClick:()=>{if(!f)return;const s=ne();s&&(s.display_name=i.display_name||i.client_key,D.mutate({id:f.id,body:s}))},disabled:D.isPending,children:D.isPending?n("common.saving"):n("common.save")})]})]})}),e.jsx(R,{open:!!m,onOpenChange:s=>{s||(M(null),S(null))},children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(V,{children:e.jsxs(U,{children:[n("integration.testCall")," — ",m==null?void 0:m.client_key]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:"Op"}),e.jsxs(oe,{value:z||void 0,onValueChange:s=>$(s??""),items:Object.fromEntries(O(m).map(s=>[s,s])),children:[e.jsx(ce,{className:"w-full",children:e.jsx(de,{placeholder:n("integration.selectOp")})}),e.jsx(me,{children:O(m).map(s=>e.jsx(ue,{value:s,children:s},s))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.input")}),e.jsx(_,{value:G,onChange:s=>X(s.target.value),rows:6,className:"font-mono text-xs"})]}),u&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{children:n("integration.result")}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsxs(A,{variant:u.status<400?"default":"destructive",children:["HTTP ",u.status]}),u.tokens_in!=null&&e.jsxs("span",{className:"text-muted-foreground",children:[u.tokens_in,"↑ ",u.tokens_out??0,"↓"]}),u.model&&e.jsx("span",{className:"text-muted-foreground",children:u.model})]}),e.jsx("pre",{className:"rounded-md bg-muted p-3 text-xs font-mono overflow-auto max-h-64",children:JSON.stringify(u.output,null,2)})]})]}),e.jsxs(W,{children:[e.jsx(j,{variant:"outline",onClick:()=>{M(null),S(null)},children:n("common.close")}),e.jsx(j,{onClick:()=>I.mutate(),disabled:I.isPending||!z,children:I.isPending?n("common.loading"):n("integration.runTest")})]})]})}),e.jsx(Ae,{open:!!o,onOpenChange:s=>{s||P(null)},children:e.jsxs(Pe,{children:[e.jsxs(Fe,{children:[e.jsx(Me,{children:n("common.confirmDeleteTitle")}),e.jsx(ze,{children:n("integration.confirmDeleteClient",{key:(o==null?void 0:o.client_key)??""})})]}),e.jsxs(Ke,{children:[e.jsx(Le,{children:n("common.cancel")}),e.jsx(qe,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>o&&te.mutate(o.id),children:n("common.delete")})]})]})})]})}function We({traceId:n}){return e.jsx("a",{href:`/admin/receipts/${n}`,className:"font-mono text-xs text-primary underline-offset-2 hover:underline",children:n})}export{bs as default}; diff --git a/adminui/assets/api-clients-DH1_s7Dq.js b/adminui/assets/api-clients-DH1_s7Dq.js deleted file mode 100644 index b6767847..00000000 --- a/adminui/assets/api-clients-DH1_s7Dq.js +++ /dev/null @@ -1 +0,0 @@ -import{f as c,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as ke,c9 as Te,c8 as ae,i as h,ah as Se,L as De,R as we,M as Ee,N as Q,bK as x,ao as S,aW as p}from"./index-EC_gIQIi.js";import{u as D}from"./useMutation-C9eWISs8.js";import{A as Oe,c as Pe,f as Ae,g as Fe,d as Me,e as Le,b as Ke,a as Ie}from"./alert-dialog-BCjXQEnz.js";import{B as R}from"./badge-BrOOeG4p.js";import{C as le,a as re}from"./card-BhczRj8d.js";import{D as z,f as qe,a as B,d as V,e as U,c as W}from"./dialog-BvqDo2CN.js";import{I as Y}from"./input-D7bJWFUq.js";import{L as o}from"./label-BNi6V6qj.js";import{S as oe,e as ce,f as de,a as me,c as ue}from"./select-BSZ-0tY-.js";import{S as xe}from"./switch-DhX4UWWe.js";import{T as he,d as je,e as g,c as r,a as pe,b as a}from"./table-B0P46Gj-.js";import{T as He,b as Je,c as ge,a as fe}from"./tabs-tWGkJT8g.js";import{T as v}from"./textarea-CxSwwTO9.js";import{T as ye}from"./table-skeleton-CzRpAQZA.js";import{E as ve}from"./empty-state-DSPTmRGJ.js";import{P as Qe}from"./plus-BQJ6-Ehy.js";import{E as Re}from"./ellipsis-vertical-29muOhpK.js";import{P as ze}from"./pencil-9H2eFft0.js";import{S as Ce}from"./send-BSqicfMI.js";import{T as Be}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";function w(n,l){const C=n.trim();if(C)try{return JSON.parse(C)}catch{return x.error(l("integration.invalidJson")),null}}const Ne={client_key:"",display_name:"",base_url:"",auth:"",credentials:"",rate_limit:"",ops:"",enabled:!0};function E(n){const l=n==null?void 0:n.ops;return!l||typeof l!="object"?[]:Object.keys(l)}function Ve(n){const l=n.auth;return(l==null?void 0:l.kind)??"none"}function Ns(){var ie;const{t:n}=ke(),l=Te(),[C,N]=c.useState(!1),[O,b]=c.useState(null),[j,P]=c.useState(null),[i,A]=c.useState(Ne),[d,F]=c.useState(null),[M,Z]=c.useState(""),[$,G]=c.useState("{}"),[m,_]=c.useState(null),[L,be]=c.useState(""),K=ae({queryKey:["admin-integration-api-clients"],queryFn:()=>p.admin.integration.listApiClients()}),k=c.useMemo(()=>K.data??[],[K.data]),X=ae({queryKey:["admin-integration-egress-log",L],queryFn:()=>p.admin.integration.listEgressLog({client_key:L||void 0,limit:100})}),ee=((ie=X.data)==null?void 0:ie.items)??[],u=(s,t)=>A(f=>({...f,[s]:t}));function I(){A(Ne)}function _e(s){b(s),A({client_key:s.client_key,display_name:s.display_name,base_url:s.base_url,auth:s.auth?JSON.stringify(s.auth,null,2):"",credentials:"",rate_limit:s.rate_limit?JSON.stringify(s.rate_limit,null,2):"",ops:s.ops?JSON.stringify(s.ops,null,2):"",enabled:s.enabled})}function se(){const s=w(i.auth,n);if(s===null)return null;const t=w(i.credentials,n);if(t===null)return null;const f=w(i.rate_limit,n);if(f===null)return null;const J=w(i.ops,n);if(J===null)return null;const y={base_url:i.base_url,enabled:i.enabled};return s!==void 0&&(y.auth=s),t!==void 0&&(y.credentials=t),f!==void 0&&(y.rate_limit=f),J!==void 0&&(y.ops=J),y}const q=D({mutationFn:()=>{const s=se();return s?p.admin.integration.createApiClient({client_key:i.client_key,display_name:i.display_name||i.client_key,...s}):Promise.reject(new Error("invalid json"))},onSuccess:()=>{x.success(n("integration.clientCreated")),l.invalidateQueries({queryKey:["admin-integration-api-clients"]}),N(!1),I()},onError:s=>x.error(s instanceof S?s.message:n("integration.failedToCreate"))}),T=D({mutationFn:({id:s,body:t})=>p.admin.integration.updateApiClient(s,t),onSuccess:()=>{x.success(n("integration.clientUpdated")),l.invalidateQueries({queryKey:["admin-integration-api-clients"]}),b(null)},onError:s=>x.error(s instanceof S?s.message:n("integration.failedToUpdate"))}),ne=D({mutationFn:s=>p.admin.integration.deleteApiClient(s),onSuccess:()=>{x.success(n("integration.clientDeleted")),l.invalidateQueries({queryKey:["admin-integration-api-clients"]}),P(null)},onError:s=>x.error(s instanceof S?s.message:n("integration.failedToDelete"))}),H=D({mutationFn:()=>{let s;try{s=JSON.parse($||"{}")}catch{return Promise.reject(new Error("invalid json"))}return p.admin.integration.testCall((d==null?void 0:d.id)??"",{op:M,input:s})},onSuccess:s=>_(s),onError:s=>x.error(s instanceof S?s.message:n("integration.failedToTest"))});function te(s){return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(o,{children:[n("integration.clientKey")," *"]}),e.jsx(Y,{value:i.client_key,onChange:t=>u("client_key",t.target.value),disabled:s,placeholder:"dify"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.displayName")}),e.jsx(Y,{value:i.display_name,onChange:t=>u("display_name",t.target.value)})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(o,{children:[n("integration.baseUrl")," *"]}),e.jsx(Y,{value:i.base_url,onChange:t=>u("base_url",t.target.value),placeholder:"https://api.example.com/v1"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.authConfig")}),e.jsx(v,{value:i.auth,onChange:t=>u("auth",t.target.value),rows:2,className:"font-mono text-xs",placeholder:'{"kind": "bearer"}'})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.credentials")}),e.jsx(v,{value:i.credentials,onChange:t=>u("credentials",t.target.value),rows:2,className:"font-mono text-xs",placeholder:s?n("integration.credentialsKeepHint"):'{"secret": "…"}'})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.rateLimit")}),e.jsx(v,{value:i.rate_limit,onChange:t=>u("rate_limit",t.target.value),rows:2,className:"font-mono text-xs",placeholder:'{"per_minute": 120}'})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.ops")}),e.jsx(v,{value:i.ops,onChange:t=>u("ops",t.target.value),rows:6,className:"font-mono text-xs",placeholder:'{"chat": {"method": "POST", "path": "/chat-messages"}}'})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(xe,{checked:i.enabled,onCheckedChange:t=>u("enabled",t)}),e.jsx(o,{className:"cursor-pointer",children:i.enabled?n("common.enabled"):n("common.disabled")})]})]})}return e.jsxs(He,{defaultValue:"clients",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(Je,{children:[e.jsx(ge,{value:"clients",children:n("integration.apiClients")}),e.jsx(ge,{value:"egress",children:n("integration.egressLog")})]}),e.jsxs(z,{open:C,onOpenChange:s=>{N(s),s||I()},children:[e.jsxs(qe,{render:e.jsx(h,{}),children:[e.jsx(Qe,{className:"size-4"}),n("integration.newClient")]}),e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(V,{children:e.jsx(U,{children:n("integration.newClient")})}),te(!1),e.jsxs(W,{children:[e.jsx(h,{variant:"outline",onClick:()=>{N(!1),I()},children:n("common.cancel")}),e.jsx(h,{onClick:()=>q.mutate(),disabled:q.isPending||!i.client_key||!i.base_url,children:q.isPending?n("common.creating"):n("common.create")})]})]})]})]}),e.jsx(fe,{value:"clients",children:e.jsx(le,{children:e.jsx(re,{className:"p-0",children:K.isLoading?e.jsx(ye,{cols:5}):e.jsxs(he,{children:[e.jsx(je,{children:e.jsxs(g,{children:[e.jsx(r,{children:n("integration.clientKey")}),e.jsx(r,{children:n("integration.baseUrl")}),e.jsx(r,{children:"Auth"}),e.jsx(r,{children:n("integration.opsCount")}),e.jsx(r,{children:n("common.status")}),e.jsx(r,{className:"text-end",children:n("common.actions")})]})}),e.jsx(pe,{children:k.length===0?e.jsx(g,{children:e.jsx(a,{colSpan:6,children:e.jsx(ve,{icon:Se,title:n("integration.noClients"),description:n("integration.noClientsDesc"),action:{label:n("integration.newClient"),onClick:()=>N(!0)}})})}):k.map(s=>e.jsxs(g,{children:[e.jsx(a,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:s.display_name}),e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:s.client_key})]})}),e.jsx(a,{children:e.jsx("span",{className:"font-mono text-xs max-w-64 truncate inline-block align-bottom",children:s.base_url})}),e.jsx(a,{children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(R,{variant:"outline",className:"font-mono",children:Ve(s)}),s.has_credentials&&e.jsx("span",{title:n("integration.hasCredentials"),children:"🔑"})]})}),e.jsx(a,{children:e.jsx("span",{className:"font-mono text-xs",children:E(s).length})}),e.jsx(a,{children:e.jsx(xe,{checked:s.enabled,onCheckedChange:t=>T.mutate({id:s.id,body:{enabled:t}})})}),e.jsx(a,{className:"text-end",children:e.jsxs(De,{children:[e.jsx(we,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Re,{className:"size-4"})}),e.jsxs(Ee,{align:"end",children:[e.jsxs(Q,{onClick:()=>_e(s),children:[e.jsx(ze,{className:"size-4 me-2"}),n("common.edit")]}),e.jsxs(Q,{onClick:()=>{F(s),Z(E(s)[0]??""),G("{}"),_(null)},children:[e.jsx(Ce,{className:"size-4 me-2"}),n("integration.testCall")]}),e.jsxs(Q,{onClick:()=>P(s),disabled:ne.isPending,className:"text-destructive",children:[e.jsx(Be,{className:"size-4 me-2"}),n("common.delete")]})]})]})})]},s.id))})]})})})}),e.jsxs(fe,{value:"egress",children:[e.jsx("div",{className:"flex items-center gap-2 mb-4",children:e.jsxs(oe,{value:L||void 0,onValueChange:s=>be(s??""),items:Object.fromEntries(k.map(s=>[s.client_key,s.client_key])),children:[e.jsx(ce,{className:"w-44",children:e.jsx(de,{placeholder:n("integration.allClients")})}),e.jsx(me,{children:k.map(s=>e.jsx(ue,{value:s.client_key,children:s.client_key},s.id))})]})}),e.jsx(le,{children:e.jsx(re,{className:"p-0",children:X.isLoading?e.jsx(ye,{cols:6}):e.jsxs(he,{children:[e.jsx(je,{children:e.jsxs(g,{children:[e.jsx(r,{children:"Trace ID"}),e.jsx(r,{children:"Client / Op"}),e.jsx(r,{children:n("common.status")}),e.jsx(r,{children:n("integration.latency")}),e.jsx(r,{children:"Tokens"}),e.jsx(r,{children:n("integration.createdAt")})]})}),e.jsx(pe,{children:ee.length===0?e.jsx(g,{children:e.jsx(a,{colSpan:6,children:e.jsx(ve,{icon:Ce,title:n("integration.noEgress"),description:n("integration.noEgressDesc")})})}):ee.map(s=>e.jsxs(g,{children:[e.jsx(a,{children:s.trace_id?e.jsx(Ue,{traceId:s.trace_id}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})}),e.jsx(a,{children:e.jsxs("span",{className:"font-mono text-xs",children:[s.client_key,".",s.op]})}),e.jsxs(a,{children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(R,{variant:s.status==="ok"?"default":"destructive",children:s.status}),s.http_status!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:["HTTP ",s.http_status]})]}),s.error&&e.jsx("p",{className:"text-xs text-destructive max-w-64 truncate",children:s.error})]}),e.jsx(a,{children:e.jsxs("span",{className:"font-mono text-xs",children:[s.latency_ms,"ms"]})}),e.jsx(a,{children:s.tokens_in!=null&&e.jsxs("span",{className:"font-mono text-xs text-muted-foreground",children:[s.tokens_in,"↑ ",s.tokens_out??0,"↓"]})}),e.jsx(a,{children:e.jsx("span",{className:"text-xs text-muted-foreground",children:new Date(s.created_at).toLocaleString()})})]},s.id))})]})})})]}),e.jsx(z,{open:!!O,onOpenChange:s=>{s||b(null)},children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(V,{children:e.jsx(U,{children:n("integration.editClient")})}),te(!0),e.jsxs(W,{children:[e.jsx(h,{variant:"outline",onClick:()=>b(null),children:n("common.cancel")}),e.jsx(h,{onClick:()=>{if(!O)return;const s=se();s&&(s.display_name=i.display_name||i.client_key,T.mutate({id:O.id,body:s}))},disabled:T.isPending,children:T.isPending?n("common.saving"):n("common.save")})]})]})}),e.jsx(z,{open:!!d,onOpenChange:s=>{s||(F(null),_(null))},children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(V,{children:e.jsxs(U,{children:[n("integration.testCall")," — ",d==null?void 0:d.client_key]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"Op"}),e.jsxs(oe,{value:M||void 0,onValueChange:s=>Z(s??""),items:Object.fromEntries(E(d).map(s=>[s,s])),children:[e.jsx(ce,{className:"w-full",children:e.jsx(de,{placeholder:n("integration.selectOp")})}),e.jsx(me,{children:E(d).map(s=>e.jsx(ue,{value:s,children:s},s))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.input")}),e.jsx(v,{value:$,onChange:s=>G(s.target.value),rows:6,className:"font-mono text-xs"})]}),m&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:n("integration.result")}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsxs(R,{variant:m.status<400?"default":"destructive",children:["HTTP ",m.status]}),m.tokens_in!=null&&e.jsxs("span",{className:"text-muted-foreground",children:[m.tokens_in,"↑ ",m.tokens_out??0,"↓"]}),m.model&&e.jsx("span",{className:"text-muted-foreground",children:m.model})]}),e.jsx("pre",{className:"rounded-md bg-muted p-3 text-xs font-mono overflow-auto max-h-64",children:JSON.stringify(m.output,null,2)})]})]}),e.jsxs(W,{children:[e.jsx(h,{variant:"outline",onClick:()=>{F(null),_(null)},children:n("common.close")}),e.jsx(h,{onClick:()=>H.mutate(),disabled:H.isPending||!M,children:H.isPending?n("common.loading"):n("integration.runTest")})]})]})}),e.jsx(Oe,{open:!!j,onOpenChange:s=>{s||P(null)},children:e.jsxs(Pe,{children:[e.jsxs(Ae,{children:[e.jsx(Fe,{children:n("common.confirmDeleteTitle")}),e.jsx(Me,{children:n("integration.confirmDeleteClient",{key:(j==null?void 0:j.client_key)??""})})]}),e.jsxs(Le,{children:[e.jsx(Ke,{children:n("common.cancel")}),e.jsx(Ie,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>j&&ne.mutate(j.id),children:n("common.delete")})]})]})})]})}function Ue({traceId:n}){return e.jsx("a",{href:`/admin/receipts/${n}`,className:"font-mono text-xs text-primary underline-offset-2 hover:underline",children:n})}export{Ns as default}; diff --git a/adminui/assets/api-config-sheet-DYpATUBp.js b/adminui/assets/api-config-sheet-BK_N5Tdt.js similarity index 94% rename from adminui/assets/api-config-sheet-DYpATUBp.js rename to adminui/assets/api-config-sheet-BK_N5Tdt.js index 838490ad..bee2bd9b 100644 --- a/adminui/assets/api-config-sheet-DYpATUBp.js +++ b/adminui/assets/api-config-sheet-BK_N5Tdt.js @@ -1,4 +1,4 @@ -import{j as e,f as y}from"./vendor-react-j_G0Dyx0.js";import{a$ as k,ci as j,ar as N,as as S,av as C,aw as w,at as T,au as E,i as A,aG as $,aE as _,aH as P,aF as O,bK as g}from"./index-EC_gIQIi.js";import{I as f}from"./input-D7bJWFUq.js";import{S as D}from"./switch-DhX4UWWe.js";import{S as F,e as I,f as z,a as L,c as G}from"./select-BSZ-0tY-.js";import{S as M}from"./shield-CHlu31na.js";import{S as U}from"./save-z_0HtvcE.js";import{C as H}from"./check-iV9lQKhJ.js";import{C as K}from"./copy-Dc6vpmam.js";/** +import{j as e,f as y}from"./vendor-react-j_G0Dyx0.js";import{a$ as k,ci as j,ar as N,as as S,av as C,aw as w,at as T,au as E,i as A,aG as $,aE as _,aH as P,aF as O,bK as g}from"./index-C-i99XXF.js";import{I as f}from"./input-CX4DHDvW.js";import{S as D}from"./switch-0loFRSXw.js";import{S as F,e as I,f as z,a as L,c as G}from"./select-C7HHvgkd.js";import{S as M}from"./shield-Whu99Qe6.js";import{S as U}from"./save-LpbBFCdm.js";import{C as H}from"./check-DsFJjVO2.js";import{C as K}from"./copy-BNjpvh3F.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/archive-CN6ChZbz.js b/adminui/assets/archive-DbNEUzmX.js similarity index 89% rename from adminui/assets/archive-CN6ChZbz.js rename to adminui/assets/archive-DbNEUzmX.js index 13434082..1b6af47d 100644 --- a/adminui/assets/archive-CN6ChZbz.js +++ b/adminui/assets/archive-DbNEUzmX.js @@ -1,4 +1,4 @@ -import{a$ as e}from"./index-EC_gIQIi.js";/** +import{a$ as e}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/arrow-right-qNysmirn.js b/adminui/assets/arrow-right-BJVZqhFR.js similarity index 86% rename from adminui/assets/arrow-right-qNysmirn.js rename to adminui/assets/arrow-right-BJVZqhFR.js index 3c60ff41..2795ea0b 100644 --- a/adminui/assets/arrow-right-qNysmirn.js +++ b/adminui/assets/arrow-right-BJVZqhFR.js @@ -1,4 +1,4 @@ -import{a$ as o}from"./index-EC_gIQIi.js";/** +import{a$ as o}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/audit-CiyhR0m2.js b/adminui/assets/audit-ST_9ova9.js similarity index 98% rename from adminui/assets/audit-CiyhR0m2.js rename to adminui/assets/audit-ST_9ova9.js index 1d51e25a..69427924 100644 --- a/adminui/assets/audit-CiyhR0m2.js +++ b/adminui/assets/audit-ST_9ova9.js @@ -1,2 +1,2 @@ -import{j as t,f as w}from"./vendor-react-j_G0Dyx0.js";import{u as he}from"./use-url-state-BBO3na5E.js";import{b$ as fe,ai as ge,ak as be,i as $,aj as pe,ci as we,c8 as ve,aq as Pe,L as K,R as G,k as ye,M as Z,N as k,n as Me,ar as xe,as as je,av as $e,aw as We,aW as Se}from"./index-EC_gIQIi.js";import{C as De,a as Ne}from"./card-BhczRj8d.js";import{I as ke}from"./input-D7bJWFUq.js";import{L as ee}from"./label-BNi6V6qj.js";import{B as T}from"./badge-BrOOeG4p.js";import{S as Te,e as Ce,f as ze,a as He,c as j}from"./select-BSZ-0tY-.js";import{b as m,a as s,c as d,d as P,z as Ee,e as ie,C as Ve}from"./calendar-DJ5bqwJx.js";import{C as Le}from"./calendar-BVDFi2CJ.js";import{T as Xe,d as Ae,e as C,c as v,a as qe,b}from"./table-B0P46Gj-.js";import{T as Je}from"./table-skeleton-CzRpAQZA.js";import{E as Fe}from"./empty-state-DSPTmRGJ.js";import{P as _e}from"./pagination-bar-Dm-qkwNo.js";import{D as Oe}from"./download-krj7fN-F.js";import{E as Re}from"./ellipsis-vertical-29muOhpK.js";import{E as Qe}from"./eye-CKWvFGCT.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./FormContext-Cvsbmzt5.js";import"./chevron-left-iG3CNZoG.js";const Ye={lessThanXSeconds:{one:"أقل من ثانية",two:"أقل من ثانيتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانيتان",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتان",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريبا",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتان",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومان",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريبا",two:"أسبوعين تقريبا",threeToTen:"{{count}} أسابيع تقريبا",other:"{{count}} أسبوعا تقريبا"},xWeeks:{one:"أسبوع واحد",two:"أسبوعان",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوعا"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريبا",threeToTen:"{{count}} أشهر تقريبا",other:"{{count}} شهرا تقريباً"},xMonths:{one:"شهر واحد",two:"شهران",threeToTen:"{{count}} أشهر",other:"{{count}} شهرا"},aboutXYears:{one:"سنة واحدة تقريباً",two:"سنتين تقريبا",threeToTen:"{{count}} سنوات تقريباً",other:"{{count}} سنة تقريباً"},xYears:{one:"سنة واحد",two:"سنتان",threeToTen:"{{count}} سنوات",other:"{{count}} سنة"},overXYears:{one:"أكثر من سنة",two:"أكثر من سنتين",threeToTen:"أكثر من {{count}} سنوات",other:"أكثر من {{count}} سنة"},almostXYears:{one:"ما يقارب سنة واحدة",two:"ما يقارب سنتين",threeToTen:"ما يقارب {{count}} سنوات",other:"ما يقارب {{count}} سنة"}},Ie=(e,r,a)=>{const n=Ye[e];let o;return typeof n=="string"?o=n:r===1?o=n.one:r===2?o=n.two:r<=10?o=n.threeToTen.replace("{{count}}",String(r)):o=n.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"خلال "+o:"منذ "+o:o},Be={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"d MMM y",short:"dd/MM/yyyy"},Ue={full:"HH:mm:ss",long:"HH:mm:ss",medium:"HH:mm:ss",short:"HH:mm"},Ke={full:"{{date}} 'عند الساعة' {{time}}",long:"{{date}} 'عند الساعة' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ge={date:m({formats:Be,defaultWidth:"full"}),time:m({formats:Ue,defaultWidth:"full"}),dateTime:m({formats:Ke,defaultWidth:"full"})},Ze={lastWeek:"eeee 'الماضي عند الساعة' p",yesterday:"'الأمس عند الساعة' p",today:"'اليوم عند الساعة' p",tomorrow:"'غدا عند الساعة' p",nextWeek:"eeee 'القادم عند الساعة' p",other:"P"},et=e=>Ze[e],tt={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},at={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},nt={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},rt={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},ot={narrow:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"},abbreviated:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"},wide:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"}},it={narrow:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"},abbreviated:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"},wide:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"}},st=e=>String(e),dt={ordinalNumber:st,era:s({values:tt,defaultWidth:"wide"}),quarter:s({values:at,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:nt,defaultWidth:"wide"}),day:s({values:rt,defaultWidth:"wide"}),dayPeriod:s({values:ot,defaultWidth:"wide",formattingValues:it,defaultFormattingWidth:"wide"})},mt=/^(\d+)(th|st|nd|rd)?/i,ct=/\d+/i,ut={narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},lt={any:[/قبل/,/بعد/]},ht={narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},ft={any:[/1/i,/2/i,/3/i,/4/i]},gt={narrow:/^[أيفمسند]/,abbreviated:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},bt={narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^يناير/i,/^فبراير/i,/^مارس/i,/^أبريل/i,/^مايو/i,/^يونيو/i,/^يوليو/i,/^أغسطس/i,/^سبتمبر/i,/^أكتوبر/i,/^نوفمبر/i,/^ديسمبر/i]},pt={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},wt={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},vt={narrow:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,any:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/},Pt={any:{am:/^ص/,pm:/^م/,midnight:/منتصف الليل/,noon:/الظهر/,afternoon:/بعد الظهر/,morning:/في الصباح/,evening:/في المساء/,night:/في الليل/}},yt={ordinalNumber:P({matchPattern:mt,parsePattern:ct,valueCallback:e=>parseInt(e,10)}),era:d({matchPatterns:ut,defaultMatchWidth:"wide",parsePatterns:lt,defaultParseWidth:"any"}),quarter:d({matchPatterns:ht,defaultMatchWidth:"wide",parsePatterns:ft,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:gt,defaultMatchWidth:"wide",parsePatterns:bt,defaultParseWidth:"any"}),day:d({matchPatterns:pt,defaultMatchWidth:"wide",parsePatterns:wt,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:vt,defaultMatchWidth:"any",parsePatterns:Pt,defaultParseWidth:"any"})},Mt={code:"ar",formatDistance:Ie,formatLong:Ge,formatRelative:et,localize:dt,match:yt,options:{weekStartsOn:6,firstWeekContainsDate:1}},te={lessThanXSeconds:{standalone:{one:"weniger als 1 Sekunde",other:"weniger als {{count}} Sekunden"},withPreposition:{one:"weniger als 1 Sekunde",other:"weniger als {{count}} Sekunden"}},xSeconds:{standalone:{one:"1 Sekunde",other:"{{count}} Sekunden"},withPreposition:{one:"1 Sekunde",other:"{{count}} Sekunden"}},halfAMinute:{standalone:"eine halbe Minute",withPreposition:"einer halben Minute"},lessThanXMinutes:{standalone:{one:"weniger als 1 Minute",other:"weniger als {{count}} Minuten"},withPreposition:{one:"weniger als 1 Minute",other:"weniger als {{count}} Minuten"}},xMinutes:{standalone:{one:"1 Minute",other:"{{count}} Minuten"},withPreposition:{one:"1 Minute",other:"{{count}} Minuten"}},aboutXHours:{standalone:{one:"etwa 1 Stunde",other:"etwa {{count}} Stunden"},withPreposition:{one:"etwa 1 Stunde",other:"etwa {{count}} Stunden"}},xHours:{standalone:{one:"1 Stunde",other:"{{count}} Stunden"},withPreposition:{one:"1 Stunde",other:"{{count}} Stunden"}},xDays:{standalone:{one:"1 Tag",other:"{{count}} Tage"},withPreposition:{one:"1 Tag",other:"{{count}} Tagen"}},aboutXWeeks:{standalone:{one:"etwa 1 Woche",other:"etwa {{count}} Wochen"},withPreposition:{one:"etwa 1 Woche",other:"etwa {{count}} Wochen"}},xWeeks:{standalone:{one:"1 Woche",other:"{{count}} Wochen"},withPreposition:{one:"1 Woche",other:"{{count}} Wochen"}},aboutXMonths:{standalone:{one:"etwa 1 Monat",other:"etwa {{count}} Monate"},withPreposition:{one:"etwa 1 Monat",other:"etwa {{count}} Monaten"}},xMonths:{standalone:{one:"1 Monat",other:"{{count}} Monate"},withPreposition:{one:"1 Monat",other:"{{count}} Monaten"}},aboutXYears:{standalone:{one:"etwa 1 Jahr",other:"etwa {{count}} Jahre"},withPreposition:{one:"etwa 1 Jahr",other:"etwa {{count}} Jahren"}},xYears:{standalone:{one:"1 Jahr",other:"{{count}} Jahre"},withPreposition:{one:"1 Jahr",other:"{{count}} Jahren"}},overXYears:{standalone:{one:"mehr als 1 Jahr",other:"mehr als {{count}} Jahre"},withPreposition:{one:"mehr als 1 Jahr",other:"mehr als {{count}} Jahren"}},almostXYears:{standalone:{one:"fast 1 Jahr",other:"fast {{count}} Jahre"},withPreposition:{one:"fast 1 Jahr",other:"fast {{count}} Jahren"}}},xt=(e,r,a)=>{let n;const o=a!=null&&a.addSuffix?te[e].withPreposition:te[e].standalone;return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"in "+n:"vor "+n:n},jt={full:"EEEE, do MMMM y",long:"do MMMM y",medium:"do MMM y",short:"dd.MM.y"},$t={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},Wt={full:"{{date}} 'um' {{time}}",long:"{{date}} 'um' {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},St={date:m({formats:jt,defaultWidth:"full"}),time:m({formats:$t,defaultWidth:"full"}),dateTime:m({formats:Wt,defaultWidth:"full"})},Dt={lastWeek:"'letzten' eeee 'um' p",yesterday:"'gestern um' p",today:"'heute um' p",tomorrow:"'morgen um' p",nextWeek:"eeee 'um' p",other:"P"},Nt=(e,r,a,n)=>Dt[e],kt={narrow:["v.Chr.","n.Chr."],abbreviated:["v.Chr.","n.Chr."],wide:["vor Christus","nach Christus"]},Tt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"]},z={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],wide:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},Ct={narrow:z.narrow,abbreviated:["Jan.","Feb.","März","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."],wide:z.wide},zt={narrow:["S","M","D","M","D","F","S"],short:["So","Mo","Di","Mi","Do","Fr","Sa"],abbreviated:["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],wide:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},Ht={narrow:{am:"vm.",pm:"nm.",midnight:"Mitternacht",noon:"Mittag",morning:"Morgen",afternoon:"Nachm.",evening:"Abend",night:"Nacht"},abbreviated:{am:"vorm.",pm:"nachm.",midnight:"Mitternacht",noon:"Mittag",morning:"Morgen",afternoon:"Nachmittag",evening:"Abend",night:"Nacht"},wide:{am:"vormittags",pm:"nachmittags",midnight:"Mitternacht",noon:"Mittag",morning:"Morgen",afternoon:"Nachmittag",evening:"Abend",night:"Nacht"}},Et={narrow:{am:"vm.",pm:"nm.",midnight:"Mitternacht",noon:"Mittag",morning:"morgens",afternoon:"nachm.",evening:"abends",night:"nachts"},abbreviated:{am:"vorm.",pm:"nachm.",midnight:"Mitternacht",noon:"Mittag",morning:"morgens",afternoon:"nachmittags",evening:"abends",night:"nachts"},wide:{am:"vormittags",pm:"nachmittags",midnight:"Mitternacht",noon:"Mittag",morning:"morgens",afternoon:"nachmittags",evening:"abends",night:"nachts"}},Vt=e=>Number(e)+".",Lt={ordinalNumber:Vt,era:s({values:kt,defaultWidth:"wide"}),quarter:s({values:Tt,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:z,formattingValues:Ct,defaultWidth:"wide"}),day:s({values:zt,defaultWidth:"wide"}),dayPeriod:s({values:Ht,defaultWidth:"wide",formattingValues:Et,defaultFormattingWidth:"wide"})},Xt=/^(\d+)(\.)?/i,At=/\d+/i,qt={narrow:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,abbreviated:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,wide:/^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i},Jt={any:[/^v/i,/^n/i]},Ft={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](\.)? Quartal/i},_t={any:[/1/i,/2/i,/3/i,/4/i]},Ot={narrow:/^[jfmasond]/i,abbreviated:/^(j[aä]n|feb|mär[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\.?/i,wide:/^(jänner|januar|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)/i},Rt={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^j[aä]/i,/^f/i,/^mär/i,/^ap/i,/^mai/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Qt={narrow:/^[smdmf]/i,short:/^(so|mo|di|mi|do|fr|sa)/i,abbreviated:/^(son?|mon?|die?|mit?|don?|fre?|sam?)\.?/i,wide:/^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i},Yt={any:[/^so/i,/^mo/i,/^di/i,/^mi/i,/^do/i,/^f/i,/^sa/i]},It={narrow:/^(vm\.?|nm\.?|Mitternacht|Mittag|morgens|nachm\.?|abends|nachts)/i,abbreviated:/^(vorm\.?|nachm\.?|Mitternacht|Mittag|morgens|nachm\.?|abends|nachts)/i,wide:/^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i},Bt={any:{am:/^v/i,pm:/^n/i,midnight:/^Mitte/i,noon:/^Mitta/i,morning:/morgens/i,afternoon:/nachmittags/i,evening:/abends/i,night:/nachts/i}},Ut={ordinalNumber:P({matchPattern:Xt,parsePattern:At,valueCallback:e=>parseInt(e)}),era:d({matchPatterns:qt,defaultMatchWidth:"wide",parsePatterns:Jt,defaultParseWidth:"any"}),quarter:d({matchPatterns:Ft,defaultMatchWidth:"wide",parsePatterns:_t,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Ot,defaultMatchWidth:"wide",parsePatterns:Rt,defaultParseWidth:"any"}),day:d({matchPatterns:Qt,defaultMatchWidth:"wide",parsePatterns:Yt,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:It,defaultMatchWidth:"wide",parsePatterns:Bt,defaultParseWidth:"any"})},Kt={code:"de",formatDistance:xt,formatLong:St,formatRelative:Nt,localize:Lt,match:Ut,options:{weekStartsOn:1,firstWeekContainsDate:4}},Gt={lessThanXSeconds:{one:"menos de un segundo",other:"menos de {{count}} segundos"},xSeconds:{one:"1 segundo",other:"{{count}} segundos"},halfAMinute:"medio minuto",lessThanXMinutes:{one:"menos de un minuto",other:"menos de {{count}} minutos"},xMinutes:{one:"1 minuto",other:"{{count}} minutos"},aboutXHours:{one:"alrededor de 1 hora",other:"alrededor de {{count}} horas"},xHours:{one:"1 hora",other:"{{count}} horas"},xDays:{one:"1 día",other:"{{count}} días"},aboutXWeeks:{one:"alrededor de 1 semana",other:"alrededor de {{count}} semanas"},xWeeks:{one:"1 semana",other:"{{count}} semanas"},aboutXMonths:{one:"alrededor de 1 mes",other:"alrededor de {{count}} meses"},xMonths:{one:"1 mes",other:"{{count}} meses"},aboutXYears:{one:"alrededor de 1 año",other:"alrededor de {{count}} años"},xYears:{one:"1 año",other:"{{count}} años"},overXYears:{one:"más de 1 año",other:"más de {{count}} años"},almostXYears:{one:"casi 1 año",other:"casi {{count}} años"}},Zt=(e,r,a)=>{let n;const o=Gt[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",r.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"en "+n:"hace "+n:n},ea={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d MMM y",short:"dd/MM/y"},ta={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},aa={full:"{{date}} 'a las' {{time}}",long:"{{date}} 'a las' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},na={date:m({formats:ea,defaultWidth:"full"}),time:m({formats:ta,defaultWidth:"full"}),dateTime:m({formats:aa,defaultWidth:"full"})},ra={lastWeek:"'el' eeee 'pasado a la' p",yesterday:"'ayer a la' p",today:"'hoy a la' p",tomorrow:"'mañana a la' p",nextWeek:"eeee 'a la' p",other:"P"},oa={lastWeek:"'el' eeee 'pasado a las' p",yesterday:"'ayer a las' p",today:"'hoy a las' p",tomorrow:"'mañana a las' p",nextWeek:"eeee 'a las' p",other:"P"},ia=(e,r,a,n)=>r.getHours()!==1?oa[e]:ra[e],sa={narrow:["AC","DC"],abbreviated:["AC","DC"],wide:["antes de cristo","después de cristo"]},da={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},ma={narrow:["e","f","m","a","m","j","j","a","s","o","n","d"],abbreviated:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],wide:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"]},ca={narrow:["d","l","m","m","j","v","s"],short:["do","lu","ma","mi","ju","vi","sá"],abbreviated:["dom","lun","mar","mié","jue","vie","sáb"],wide:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"]},ua={narrow:{am:"a",pm:"p",midnight:"mn",noon:"md",morning:"mañana",afternoon:"tarde",evening:"tarde",night:"noche"},abbreviated:{am:"AM",pm:"PM",midnight:"medianoche",noon:"mediodia",morning:"mañana",afternoon:"tarde",evening:"tarde",night:"noche"},wide:{am:"a.m.",pm:"p.m.",midnight:"medianoche",noon:"mediodia",morning:"mañana",afternoon:"tarde",evening:"tarde",night:"noche"}},la={narrow:{am:"a",pm:"p",midnight:"mn",noon:"md",morning:"de la mañana",afternoon:"de la tarde",evening:"de la tarde",night:"de la noche"},abbreviated:{am:"AM",pm:"PM",midnight:"medianoche",noon:"mediodia",morning:"de la mañana",afternoon:"de la tarde",evening:"de la tarde",night:"de la noche"},wide:{am:"a.m.",pm:"p.m.",midnight:"medianoche",noon:"mediodia",morning:"de la mañana",afternoon:"de la tarde",evening:"de la tarde",night:"de la noche"}},ha=(e,r)=>Number(e)+"º",fa={ordinalNumber:ha,era:s({values:sa,defaultWidth:"wide"}),quarter:s({values:da,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:s({values:ma,defaultWidth:"wide"}),day:s({values:ca,defaultWidth:"wide"}),dayPeriod:s({values:ua,defaultWidth:"wide",formattingValues:la,defaultFormattingWidth:"wide"})},ga=/^(\d+)(º)?/i,ba=/\d+/i,pa={narrow:/^(ac|dc|a|d)/i,abbreviated:/^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,wide:/^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i},wa={any:[/^ac/i,/^dc/i],wide:[/^(antes de cristo|antes de la era com[uú]n)/i,/^(despu[eé]s de cristo|era com[uú]n)/i]},va={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º)? trimestre/i},Pa={any:[/1/i,/2/i,/3/i,/4/i]},ya={narrow:/^[efmajsond]/i,abbreviated:/^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,wide:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i},Ma={narrow:[/^e/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^en/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i]},xa={narrow:/^[dlmjvs]/i,short:/^(do|lu|ma|mi|ju|vi|s[áa])/i,abbreviated:/^(dom|lun|mar|mi[ée]|jue|vie|s[áa]b)/i,wide:/^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i},ja={narrow:[/^d/i,/^l/i,/^m/i,/^m/i,/^j/i,/^v/i,/^s/i],any:[/^do/i,/^lu/i,/^ma/i,/^mi/i,/^ju/i,/^vi/i,/^sa/i]},$a={narrow:/^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,any:/^([ap]\.?\s?m\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i},Wa={any:{am:/^a/i,pm:/^p/i,midnight:/^mn/i,noon:/^md/i,morning:/mañana/i,afternoon:/tarde/i,evening:/tarde/i,night:/noche/i}},Sa={ordinalNumber:P({matchPattern:ga,parsePattern:ba,valueCallback:function(e){return parseInt(e,10)}}),era:d({matchPatterns:pa,defaultMatchWidth:"wide",parsePatterns:wa,defaultParseWidth:"any"}),quarter:d({matchPatterns:va,defaultMatchWidth:"wide",parsePatterns:Pa,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:ya,defaultMatchWidth:"wide",parsePatterns:Ma,defaultParseWidth:"any"}),day:d({matchPatterns:xa,defaultMatchWidth:"wide",parsePatterns:ja,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:$a,defaultMatchWidth:"any",parsePatterns:Wa,defaultParseWidth:"any"})},Da={code:"es",formatDistance:Zt,formatLong:na,formatRelative:ia,localize:fa,match:Sa,options:{weekStartsOn:1,firstWeekContainsDate:1}},Na={lessThanXSeconds:{one:"moins d’une seconde",other:"moins de {{count}} secondes"},xSeconds:{one:"1 seconde",other:"{{count}} secondes"},halfAMinute:"30 secondes",lessThanXMinutes:{one:"moins d’une minute",other:"moins de {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"environ 1 heure",other:"environ {{count}} heures"},xHours:{one:"1 heure",other:"{{count}} heures"},xDays:{one:"1 jour",other:"{{count}} jours"},aboutXWeeks:{one:"environ 1 semaine",other:"environ {{count}} semaines"},xWeeks:{one:"1 semaine",other:"{{count}} semaines"},aboutXMonths:{one:"environ 1 mois",other:"environ {{count}} mois"},xMonths:{one:"1 mois",other:"{{count}} mois"},aboutXYears:{one:"environ 1 an",other:"environ {{count}} ans"},xYears:{one:"1 an",other:"{{count}} ans"},overXYears:{one:"plus d’un an",other:"plus de {{count}} ans"},almostXYears:{one:"presqu’un an",other:"presque {{count}} ans"}},ka=(e,r,a)=>{let n;const o=Na[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"dans "+n:"il y a "+n:n},Ta={full:"EEEE d MMMM y",long:"d MMMM y",medium:"d MMM y",short:"dd/MM/y"},Ca={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},za={full:"{{date}} 'à' {{time}}",long:"{{date}} 'à' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ha={date:m({formats:Ta,defaultWidth:"full"}),time:m({formats:Ca,defaultWidth:"full"}),dateTime:m({formats:za,defaultWidth:"full"})},Ea={lastWeek:"eeee 'dernier à' p",yesterday:"'hier à' p",today:"'aujourd’hui à' p",tomorrow:"'demain à' p'",nextWeek:"eeee 'prochain à' p",other:"P"},Va=(e,r,a,n)=>Ea[e],La={narrow:["av. J.-C","ap. J.-C"],abbreviated:["av. J.-C","ap. J.-C"],wide:["avant Jésus-Christ","après Jésus-Christ"]},Xa={narrow:["T1","T2","T3","T4"],abbreviated:["1er trim.","2ème trim.","3ème trim.","4ème trim."],wide:["1er trimestre","2ème trimestre","3ème trimestre","4ème trimestre"]},Aa={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],wide:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]},qa={narrow:["D","L","M","M","J","V","S"],short:["di","lu","ma","me","je","ve","sa"],abbreviated:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],wide:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},Ja={narrow:{am:"AM",pm:"PM",midnight:"minuit",noon:"midi",morning:"mat.",afternoon:"ap.m.",evening:"soir",night:"mat."},abbreviated:{am:"AM",pm:"PM",midnight:"minuit",noon:"midi",morning:"matin",afternoon:"après-midi",evening:"soir",night:"matin"},wide:{am:"AM",pm:"PM",midnight:"minuit",noon:"midi",morning:"du matin",afternoon:"de l’après-midi",evening:"du soir",night:"du matin"}},Fa=(e,r)=>{const a=Number(e),n=r==null?void 0:r.unit;if(a===0)return"0";const o=["year","week","hour","minute","second"];let u;return a===1?u=n&&o.includes(n)?"ère":"er":u="ème",a+u},_a=["MMM","MMMM"],Oa={preprocessor:(e,r)=>e.getDate()===1||!r.some(n=>n.isToken&&_a.includes(n.value))?r:r.map(n=>n.isToken&&n.value==="do"?{isToken:!0,value:"d"}:n),ordinalNumber:Fa,era:s({values:La,defaultWidth:"wide"}),quarter:s({values:Xa,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:Aa,defaultWidth:"wide"}),day:s({values:qa,defaultWidth:"wide"}),dayPeriod:s({values:Ja,defaultWidth:"wide"})},Ra=/^(\d+)(ième|ère|ème|er|e)?/i,Qa=/\d+/i,Ya={narrow:/^(av\.J\.C|ap\.J\.C|ap\.J\.-C)/i,abbreviated:/^(av\.J\.-C|av\.J-C|apr\.J\.-C|apr\.J-C|ap\.J-C)/i,wide:/^(avant Jésus-Christ|après Jésus-Christ)/i},Ia={any:[/^av/i,/^ap/i]},Ba={narrow:/^T?[1234]/i,abbreviated:/^[1234](er|ème|e)? trim\.?/i,wide:/^[1234](er|ème|e)? trimestre/i},Ua={any:[/1/i,/2/i,/3/i,/4/i]},Ka={narrow:/^[jfmasond]/i,abbreviated:/^(janv|févr|mars|avr|mai|juin|juill|juil|août|sept|oct|nov|déc)\.?/i,wide:/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i},Ga={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^av/i,/^ma/i,/^juin/i,/^juil/i,/^ao/i,/^s/i,/^o/i,/^n/i,/^d/i]},Za={narrow:/^[lmjvsd]/i,short:/^(di|lu|ma|me|je|ve|sa)/i,abbreviated:/^(dim|lun|mar|mer|jeu|ven|sam)\.?/i,wide:/^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i},en={narrow:[/^d/i,/^l/i,/^m/i,/^m/i,/^j/i,/^v/i,/^s/i],any:[/^di/i,/^lu/i,/^ma/i,/^me/i,/^je/i,/^ve/i,/^sa/i]},tn={narrow:/^(a|p|minuit|midi|mat\.?|ap\.?m\.?|soir|nuit)/i,any:/^([ap]\.?\s?m\.?|du matin|de l'après[-\s]midi|du soir|de la nuit)/i},an={any:{am:/^a/i,pm:/^p/i,midnight:/^min/i,noon:/^mid/i,morning:/mat/i,afternoon:/ap/i,evening:/soir/i,night:/nuit/i}},nn={ordinalNumber:P({matchPattern:Ra,parsePattern:Qa,valueCallback:e=>parseInt(e)}),era:d({matchPatterns:Ya,defaultMatchWidth:"wide",parsePatterns:Ia,defaultParseWidth:"any"}),quarter:d({matchPatterns:Ba,defaultMatchWidth:"wide",parsePatterns:Ua,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Ka,defaultMatchWidth:"wide",parsePatterns:Ga,defaultParseWidth:"any"}),day:d({matchPatterns:Za,defaultMatchWidth:"wide",parsePatterns:en,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:tn,defaultMatchWidth:"any",parsePatterns:an,defaultParseWidth:"any"})},rn={code:"fr",formatDistance:ka,formatLong:Ha,formatRelative:Va,localize:Oa,match:nn,options:{weekStartsOn:1,firstWeekContainsDate:4}},on={lessThanXSeconds:{one:"1秒未満",other:"{{count}}秒未満",oneWithSuffix:"約1秒",otherWithSuffix:"約{{count}}秒"},xSeconds:{one:"1秒",other:"{{count}}秒"},halfAMinute:"30秒",lessThanXMinutes:{one:"1分未満",other:"{{count}}分未満",oneWithSuffix:"約1分",otherWithSuffix:"約{{count}}分"},xMinutes:{one:"1分",other:"{{count}}分"},aboutXHours:{one:"約1時間",other:"約{{count}}時間"},xHours:{one:"1時間",other:"{{count}}時間"},xDays:{one:"1日",other:"{{count}}日"},aboutXWeeks:{one:"約1週間",other:"約{{count}}週間"},xWeeks:{one:"1週間",other:"{{count}}週間"},aboutXMonths:{one:"約1か月",other:"約{{count}}か月"},xMonths:{one:"1か月",other:"{{count}}か月"},aboutXYears:{one:"約1年",other:"約{{count}}年"},xYears:{one:"1年",other:"{{count}}年"},overXYears:{one:"1年以上",other:"{{count}}年以上"},almostXYears:{one:"1年近く",other:"{{count}}年近く"}},sn=(e,r,a)=>{a=a||{};let n;const o=on[e];return typeof o=="string"?n=o:r===1?a.addSuffix&&o.oneWithSuffix?n=o.oneWithSuffix:n=o.one:a.addSuffix&&o.otherWithSuffix?n=o.otherWithSuffix.replace("{{count}}",String(r)):n=o.other.replace("{{count}}",String(r)),a.addSuffix?a.comparison&&a.comparison>0?n+"後":n+"前":n},dn={full:"y年M月d日EEEE",long:"y年M月d日",medium:"y/MM/dd",short:"y/MM/dd"},mn={full:"H時mm分ss秒 zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},cn={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},un={date:m({formats:dn,defaultWidth:"full"}),time:m({formats:mn,defaultWidth:"full"}),dateTime:m({formats:cn,defaultWidth:"full"})},ln={lastWeek:"先週のeeeeのp",yesterday:"昨日のp",today:"今日のp",tomorrow:"明日のp",nextWeek:"翌週のeeeeのp",other:"P"},hn=(e,r,a,n)=>ln[e],fn={narrow:["BC","AC"],abbreviated:["紀元前","西暦"],wide:["紀元前","西暦"]},gn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["第1四半期","第2四半期","第3四半期","第4四半期"]},bn={narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]},pn={narrow:["日","月","火","水","木","金","土"],short:["日","月","火","水","木","金","土"],abbreviated:["日","月","火","水","木","金","土"],wide:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},wn={narrow:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},abbreviated:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},wide:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"}},vn={narrow:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},abbreviated:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},wide:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"}},Pn=(e,r)=>{const a=Number(e);switch(String(r==null?void 0:r.unit)){case"year":return`${a}年`;case"quarter":return`第${a}四半期`;case"month":return`${a}月`;case"week":return`第${a}週`;case"date":return`${a}日`;case"hour":return`${a}時`;case"minute":return`${a}分`;case"second":return`${a}秒`;default:return`${a}`}},yn={ordinalNumber:Pn,era:s({values:fn,defaultWidth:"wide"}),quarter:s({values:gn,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:s({values:bn,defaultWidth:"wide"}),day:s({values:pn,defaultWidth:"wide"}),dayPeriod:s({values:wn,defaultWidth:"wide",formattingValues:vn,defaultFormattingWidth:"wide"})},Mn=/^第?\d+(年|四半期|月|週|日|時|分|秒)?/i,xn=/\d+/i,jn={narrow:/^(B\.?C\.?|A\.?D\.?)/i,abbreviated:/^(紀元[前後]|西暦)/i,wide:/^(紀元[前後]|西暦)/i},$n={narrow:[/^B/i,/^A/i],any:[/^(紀元前)/i,/^(西暦|紀元後)/i]},Wn={narrow:/^[1234]/i,abbreviated:/^Q[1234]/i,wide:/^第[1234一二三四1234]四半期/i},Sn={any:[/(1|一|1)/i,/(2|二|2)/i,/(3|三|3)/i,/(4|四|4)/i]},Dn={narrow:/^([123456789]|1[012])/,abbreviated:/^([123456789]|1[012])月/i,wide:/^([123456789]|1[012])月/i},Nn={any:[/^1\D/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},kn={narrow:/^[日月火水木金土]/,short:/^[日月火水木金土]/,abbreviated:/^[日月火水木金土]/,wide:/^[日月火水木金土]曜日/},Tn={any:[/^日/,/^月/,/^火/,/^水/,/^木/,/^金/,/^土/]},Cn={any:/^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i},zn={any:{am:/^(A|午前)/i,pm:/^(P|午後)/i,midnight:/^深夜|真夜中/i,noon:/^正午/i,morning:/^朝/i,afternoon:/^午後/i,evening:/^夜/i,night:/^深夜/i}},Hn={ordinalNumber:P({matchPattern:Mn,parsePattern:xn,valueCallback:function(e){return parseInt(e,10)}}),era:d({matchPatterns:jn,defaultMatchWidth:"wide",parsePatterns:$n,defaultParseWidth:"any"}),quarter:d({matchPatterns:Wn,defaultMatchWidth:"wide",parsePatterns:Sn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Dn,defaultMatchWidth:"wide",parsePatterns:Nn,defaultParseWidth:"any"}),day:d({matchPatterns:kn,defaultMatchWidth:"wide",parsePatterns:Tn,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:Cn,defaultMatchWidth:"any",parsePatterns:zn,defaultParseWidth:"any"})},En={code:"ja",formatDistance:sn,formatLong:un,formatRelative:hn,localize:yn,match:Hn,options:{weekStartsOn:0,firstWeekContainsDate:1}},Vn={lessThanXSeconds:{one:"1초 미만",other:"{{count}}초 미만"},xSeconds:{one:"1초",other:"{{count}}초"},halfAMinute:"30초",lessThanXMinutes:{one:"1분 미만",other:"{{count}}분 미만"},xMinutes:{one:"1분",other:"{{count}}분"},aboutXHours:{one:"약 1시간",other:"약 {{count}}시간"},xHours:{one:"1시간",other:"{{count}}시간"},xDays:{one:"1일",other:"{{count}}일"},aboutXWeeks:{one:"약 1주",other:"약 {{count}}주"},xWeeks:{one:"1주",other:"{{count}}주"},aboutXMonths:{one:"약 1개월",other:"약 {{count}}개월"},xMonths:{one:"1개월",other:"{{count}}개월"},aboutXYears:{one:"약 1년",other:"약 {{count}}년"},xYears:{one:"1년",other:"{{count}}년"},overXYears:{one:"1년 이상",other:"{{count}}년 이상"},almostXYears:{one:"거의 1년",other:"거의 {{count}}년"}},Ln=(e,r,a)=>{let n;const o=Vn[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",r.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?n+" 후":n+" 전":n},Xn={full:"y년 M월 d일 EEEE",long:"y년 M월 d일",medium:"y.MM.dd",short:"y.MM.dd"},An={full:"a H시 mm분 ss초 zzzz",long:"a H:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},qn={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},Jn={date:m({formats:Xn,defaultWidth:"full"}),time:m({formats:An,defaultWidth:"full"}),dateTime:m({formats:qn,defaultWidth:"full"})},Fn={lastWeek:"'지난' eeee p",yesterday:"'어제' p",today:"'오늘' p",tomorrow:"'내일' p",nextWeek:"'다음' eeee p",other:"P"},_n=(e,r,a,n)=>Fn[e],On={narrow:["BC","AD"],abbreviated:["BC","AD"],wide:["기원전","서기"]},Rn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1분기","2분기","3분기","4분기"]},Qn={narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],wide:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},Yn={narrow:["일","월","화","수","목","금","토"],short:["일","월","화","수","목","금","토"],abbreviated:["일","월","화","수","목","금","토"],wide:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},In={narrow:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},abbreviated:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},wide:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"}},Bn={narrow:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},abbreviated:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},wide:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"}},Un=(e,r)=>{const a=Number(e);switch(String(r==null?void 0:r.unit)){case"minute":case"second":return String(a);case"date":return a+"일";default:return a+"번째"}},Kn={ordinalNumber:Un,era:s({values:On,defaultWidth:"wide"}),quarter:s({values:Rn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:Qn,defaultWidth:"wide"}),day:s({values:Yn,defaultWidth:"wide"}),dayPeriod:s({values:In,defaultWidth:"wide",formattingValues:Bn,defaultFormattingWidth:"wide"})},Gn=/^(\d+)(일|번째)?/i,Zn=/\d+/i,er={narrow:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(기원전|서기)/i},tr={any:[/^(bc|기원전)/i,/^(ad|서기)/i]},ar={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234]사?분기/i},nr={any:[/1/i,/2/i,/3/i,/4/i]},rr={narrow:/^(1[012]|[123456789])/,abbreviated:/^(1[012]|[123456789])월/i,wide:/^(1[012]|[123456789])월/i},or={any:[/^1월?$/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},ir={narrow:/^[일월화수목금토]/,short:/^[일월화수목금토]/,abbreviated:/^[일월화수목금토]/,wide:/^[일월화수목금토]요일/},sr={any:[/^일/,/^월/,/^화/,/^수/,/^목/,/^금/,/^토/]},dr={any:/^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i},mr={any:{am:/^(am|오전)/i,pm:/^(pm|오후)/i,midnight:/^자정/i,noon:/^정오/i,morning:/^아침/i,afternoon:/^오후/i,evening:/^저녁/i,night:/^밤/i}},cr={ordinalNumber:P({matchPattern:Gn,parsePattern:Zn,valueCallback:e=>parseInt(e,10)}),era:d({matchPatterns:er,defaultMatchWidth:"wide",parsePatterns:tr,defaultParseWidth:"any"}),quarter:d({matchPatterns:ar,defaultMatchWidth:"wide",parsePatterns:nr,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:rr,defaultMatchWidth:"wide",parsePatterns:or,defaultParseWidth:"any"}),day:d({matchPatterns:ir,defaultMatchWidth:"wide",parsePatterns:sr,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:dr,defaultMatchWidth:"any",parsePatterns:mr,defaultParseWidth:"any"})},ur={code:"ko",formatDistance:Ln,formatLong:Jn,formatRelative:_n,localize:Kn,match:cr,options:{weekStartsOn:0,firstWeekContainsDate:1}},lr={lessThanXSeconds:{one:"menos de um segundo",other:"menos de {{count}} segundos"},xSeconds:{one:"1 segundo",other:"{{count}} segundos"},halfAMinute:"meio minuto",lessThanXMinutes:{one:"menos de um minuto",other:"menos de {{count}} minutos"},xMinutes:{one:"1 minuto",other:"{{count}} minutos"},aboutXHours:{one:"aproximadamente 1 hora",other:"aproximadamente {{count}} horas"},xHours:{one:"1 hora",other:"{{count}} horas"},xDays:{one:"1 dia",other:"{{count}} dias"},aboutXWeeks:{one:"aproximadamente 1 semana",other:"aproximadamente {{count}} semanas"},xWeeks:{one:"1 semana",other:"{{count}} semanas"},aboutXMonths:{one:"aproximadamente 1 mês",other:"aproximadamente {{count}} meses"},xMonths:{one:"1 mês",other:"{{count}} meses"},aboutXYears:{one:"aproximadamente 1 ano",other:"aproximadamente {{count}} anos"},xYears:{one:"1 ano",other:"{{count}} anos"},overXYears:{one:"mais de 1 ano",other:"mais de {{count}} anos"},almostXYears:{one:"quase 1 ano",other:"quase {{count}} anos"}},hr=(e,r,a)=>{let n;const o=lr[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"daqui a "+n:"há "+n:n},fr={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d 'de' MMM 'de' y",short:"dd/MM/y"},gr={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},br={full:"{{date}} 'às' {{time}}",long:"{{date}} 'às' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},pr={date:m({formats:fr,defaultWidth:"full"}),time:m({formats:gr,defaultWidth:"full"}),dateTime:m({formats:br,defaultWidth:"full"})},wr={lastWeek:e=>{const r=e.getDay();return"'"+(r===0||r===6?"último":"última")+"' eeee 'às' p"},yesterday:"'ontem às' p",today:"'hoje às' p",tomorrow:"'amanhã às' p",nextWeek:"eeee 'às' p",other:"P"},vr=(e,r,a,n)=>{const o=wr[e];return typeof o=="function"?o(r):o},Pr={narrow:["aC","dC"],abbreviated:["a.C.","d.C."],wide:["antes de Cristo","depois de Cristo"]},yr={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},Mr={narrow:["j","f","m","a","m","j","j","a","s","o","n","d"],abbreviated:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],wide:["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},xr={narrow:["d","s","t","q","q","s","s"],short:["dom","seg","ter","qua","qui","sex","sáb"],abbreviated:["dom","seg","ter","qua","qui","sex","sáb"],wide:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},jr={narrow:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"noite",night:"madrugada"},abbreviated:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"noite",night:"madrugada"},wide:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"noite",night:"madrugada"}},$r={narrow:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da noite",night:"da madrugada"},abbreviated:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da noite",night:"da madrugada"},wide:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da noite",night:"da madrugada"}},Wr=(e,r)=>Number(e)+"º",Sr={ordinalNumber:Wr,era:s({values:Pr,defaultWidth:"wide"}),quarter:s({values:yr,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:Mr,defaultWidth:"wide"}),day:s({values:xr,defaultWidth:"wide"}),dayPeriod:s({values:jr,defaultWidth:"wide",formattingValues:$r,defaultFormattingWidth:"wide"})},Dr=/^(\d+)(º|ª)?/i,Nr=/\d+/i,kr={narrow:/^(ac|dc|a|d)/i,abbreviated:/^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,wide:/^(antes de cristo|antes da era comum|depois de cristo|era comum)/i},Tr={any:[/^ac/i,/^dc/i],wide:[/^(antes de cristo|antes da era comum)/i,/^(depois de cristo|era comum)/i]},Cr={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º|ª)? trimestre/i},zr={any:[/1/i,/2/i,/3/i,/4/i]},Hr={narrow:/^[jfmasond]/i,abbreviated:/^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,wide:/^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i},Er={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ab/i,/^mai/i,/^jun/i,/^jul/i,/^ag/i,/^s/i,/^o/i,/^n/i,/^d/i]},Vr={narrow:/^[dstq]/i,short:/^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,abbreviated:/^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,wide:/^(domingo|segunda-?\s?feira|terça-?\s?feira|quarta-?\s?feira|quinta-?\s?feira|sexta-?\s?feira|s[áa]bado)/i},Lr={narrow:[/^d/i,/^s/i,/^t/i,/^q/i,/^q/i,/^s/i,/^s/i],any:[/^d/i,/^seg/i,/^t/i,/^qua/i,/^qui/i,/^sex/i,/^s[áa]/i]},Xr={narrow:/^(a|p|meia-?\s?noite|meio-?\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i,any:/^([ap]\.?\s?m\.?|meia-?\s?noite|meio-?\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i},Ar={any:{am:/^a/i,pm:/^p/i,midnight:/^meia/i,noon:/^meio/i,morning:/manh[ãa]/i,afternoon:/tarde/i,evening:/noite/i,night:/madrugada/i}},qr={ordinalNumber:P({matchPattern:Dr,parsePattern:Nr,valueCallback:e=>parseInt(e,10)}),era:d({matchPatterns:kr,defaultMatchWidth:"wide",parsePatterns:Tr,defaultParseWidth:"any"}),quarter:d({matchPatterns:Cr,defaultMatchWidth:"wide",parsePatterns:zr,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Hr,defaultMatchWidth:"wide",parsePatterns:Er,defaultParseWidth:"any"}),day:d({matchPatterns:Vr,defaultMatchWidth:"wide",parsePatterns:Lr,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:Xr,defaultMatchWidth:"any",parsePatterns:Ar,defaultParseWidth:"any"})},Jr={code:"pt",formatDistance:hr,formatLong:pr,formatRelative:vr,localize:Sr,match:qr,options:{weekStartsOn:0,firstWeekContainsDate:4}},Fr={en:ie,zh:Ee,ja:En,ko:ur,es:Da,pt:Jr,de:Kt,fr:rn,ar:Mt};function _r(){const e=fe(r=>r.locale);return Fr[e]??ie}function ae(e){if(!e)return;const r=new Date(`${e}T00:00:00`);return Number.isNaN(r.getTime())?void 0:r}function ne(e){const r=e.getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${r}-${a}-${n}`}function Or({value:e,onChange:r,placeholder:a="Select date range"}){const n=_r(),o=e.from||e.to?{from:ae(e.from),to:ae(e.to)}:void 0;return t.jsxs(ge,{children:[t.jsx(be,{render:t.jsxs($,{type:"button",variant:"outline",size:"sm",className:"justify-start font-normal",children:[t.jsx(Le,{className:"size-4"}),e.from||e.to?`${e.from||"…"} ~ ${e.to||"…"}`:a]})}),t.jsx(pe,{className:"w-auto p-0",align:"start",children:t.jsx(Ve,{locale:n,mode:"range",selected:o,onSelect:u=>{u&&r({from:u.from?ne(u.from):e.from,to:u.to?ne(u.to):e.to})},numberOfMonths:2})})]})}const re={create:"default",update:"secondary",delete:"destructive",upload:"default",register:"outline",login:"secondary"};function M(){return new Date().toISOString().split("T")[0]}function oe(e){const r=new Date;return r.setDate(r.getDate()-e),r.toISOString().split("T")[0]}function bo(){var Q,Y,I;const{t:e}=we(),{getInt:r,set:a}=he(),n=r("page"),[o,u]=w.useState(""),[W,H]=w.useState(""),[S,y]=w.useState({from:"",to:""}),[E,V]=w.useState(""),[L,X]=w.useState(""),[A,q]=w.useState(""),[c,J]=w.useState(null),F=20,_=new URLSearchParams({page:String(n),page_size:String(F)});W&&_.set("action",W);const p=ve({queryKey:["audit",n,W],queryFn:()=>Se.send("/admin/audit",{query:Object.fromEntries(_.entries())})});function O(){H(o),X(S.from),q(S.to),a({page:1})}function se(){u(""),H(""),y({from:"",to:""}),V(""),X(""),q(""),a({page:1})}function de(i){V(i??""),i==="today"?y({from:M(),to:M()}):i==="7d"?y({from:oe(7),to:M()}):i==="30d"?y({from:oe(30),to:M()}):i||y({from:"",to:""})}function D(i){let l=i;if(L){const h=new Date(L);l=l.filter(f=>new Date(f.created_at)>=h)}if(A){const h=new Date(A);h.setHours(23,59,59,999),l=l.filter(f=>new Date(f.created_at)<=h)}return l}function me(){var U;const i=D(((U=p.data)==null?void 0:U.items)??[]),l="Time,Action,Subject,Subject ID,Actor ID,Actor Role,Detail,IP Address",h=i.map(g=>[g.created_at,g.action,g.subject,g.subject_id??"",g.actor_id??"system",g.actor_role??"",(g.detail??"").replace(/"/g,'""'),g.ip_address??""].map(le=>`"${le}"`).join(",")),f=[l,...h].join(` +import{j as t,f as w}from"./vendor-react-j_G0Dyx0.js";import{u as he}from"./use-url-state-BBO3na5E.js";import{b$ as fe,ai as ge,ak as be,i as $,aj as pe,ci as we,c8 as ve,aq as Pe,L as K,R as G,k as ye,M as Z,N as k,n as Me,ar as xe,as as je,av as $e,aw as We,aW as Se}from"./index-C-i99XXF.js";import{C as De,a as Ne}from"./card-BwvuSgdv.js";import{I as ke}from"./input-CX4DHDvW.js";import{L as ee}from"./label-YdsyMzds.js";import{B as T}from"./badge-BxazBb-3.js";import{S as Te,e as Ce,f as ze,a as He,c as j}from"./select-C7HHvgkd.js";import{b as m,a as s,c as d,d as P,z as Ee,e as ie,C as Ve}from"./calendar-4fvNnW21.js";import{C as Le}from"./calendar-Clkjlc7K.js";import{T as Xe,d as Ae,e as C,c as v,a as qe,b}from"./table-CCu_JPDD.js";import{T as Je}from"./table-skeleton-W4NmdKYl.js";import{E as Fe}from"./empty-state-v8u5VqOl.js";import{P as _e}from"./pagination-bar-B67t1a6P.js";import{D as Oe}from"./download-mMzV19JZ.js";import{E as Re}from"./ellipsis-vertical-xZQpERB7.js";import{E as Qe}from"./eye-CWoWLAtI.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./FormContext-B5vgnUQy.js";import"./chevron-left-Dxx6wreE.js";const Ye={lessThanXSeconds:{one:"أقل من ثانية",two:"أقل من ثانيتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانيتان",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتان",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريبا",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتان",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومان",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريبا",two:"أسبوعين تقريبا",threeToTen:"{{count}} أسابيع تقريبا",other:"{{count}} أسبوعا تقريبا"},xWeeks:{one:"أسبوع واحد",two:"أسبوعان",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوعا"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريبا",threeToTen:"{{count}} أشهر تقريبا",other:"{{count}} شهرا تقريباً"},xMonths:{one:"شهر واحد",two:"شهران",threeToTen:"{{count}} أشهر",other:"{{count}} شهرا"},aboutXYears:{one:"سنة واحدة تقريباً",two:"سنتين تقريبا",threeToTen:"{{count}} سنوات تقريباً",other:"{{count}} سنة تقريباً"},xYears:{one:"سنة واحد",two:"سنتان",threeToTen:"{{count}} سنوات",other:"{{count}} سنة"},overXYears:{one:"أكثر من سنة",two:"أكثر من سنتين",threeToTen:"أكثر من {{count}} سنوات",other:"أكثر من {{count}} سنة"},almostXYears:{one:"ما يقارب سنة واحدة",two:"ما يقارب سنتين",threeToTen:"ما يقارب {{count}} سنوات",other:"ما يقارب {{count}} سنة"}},Ie=(e,r,a)=>{const n=Ye[e];let o;return typeof n=="string"?o=n:r===1?o=n.one:r===2?o=n.two:r<=10?o=n.threeToTen.replace("{{count}}",String(r)):o=n.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"خلال "+o:"منذ "+o:o},Be={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"d MMM y",short:"dd/MM/yyyy"},Ue={full:"HH:mm:ss",long:"HH:mm:ss",medium:"HH:mm:ss",short:"HH:mm"},Ke={full:"{{date}} 'عند الساعة' {{time}}",long:"{{date}} 'عند الساعة' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ge={date:m({formats:Be,defaultWidth:"full"}),time:m({formats:Ue,defaultWidth:"full"}),dateTime:m({formats:Ke,defaultWidth:"full"})},Ze={lastWeek:"eeee 'الماضي عند الساعة' p",yesterday:"'الأمس عند الساعة' p",today:"'اليوم عند الساعة' p",tomorrow:"'غدا عند الساعة' p",nextWeek:"eeee 'القادم عند الساعة' p",other:"P"},et=e=>Ze[e],tt={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},at={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},nt={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},rt={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},ot={narrow:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"},abbreviated:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"},wide:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"}},it={narrow:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"},abbreviated:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"},wide:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"}},st=e=>String(e),dt={ordinalNumber:st,era:s({values:tt,defaultWidth:"wide"}),quarter:s({values:at,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:nt,defaultWidth:"wide"}),day:s({values:rt,defaultWidth:"wide"}),dayPeriod:s({values:ot,defaultWidth:"wide",formattingValues:it,defaultFormattingWidth:"wide"})},mt=/^(\d+)(th|st|nd|rd)?/i,ct=/\d+/i,ut={narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},lt={any:[/قبل/,/بعد/]},ht={narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},ft={any:[/1/i,/2/i,/3/i,/4/i]},gt={narrow:/^[أيفمسند]/,abbreviated:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},bt={narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^يناير/i,/^فبراير/i,/^مارس/i,/^أبريل/i,/^مايو/i,/^يونيو/i,/^يوليو/i,/^أغسطس/i,/^سبتمبر/i,/^أكتوبر/i,/^نوفمبر/i,/^ديسمبر/i]},pt={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},wt={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},vt={narrow:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,any:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/},Pt={any:{am:/^ص/,pm:/^م/,midnight:/منتصف الليل/,noon:/الظهر/,afternoon:/بعد الظهر/,morning:/في الصباح/,evening:/في المساء/,night:/في الليل/}},yt={ordinalNumber:P({matchPattern:mt,parsePattern:ct,valueCallback:e=>parseInt(e,10)}),era:d({matchPatterns:ut,defaultMatchWidth:"wide",parsePatterns:lt,defaultParseWidth:"any"}),quarter:d({matchPatterns:ht,defaultMatchWidth:"wide",parsePatterns:ft,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:gt,defaultMatchWidth:"wide",parsePatterns:bt,defaultParseWidth:"any"}),day:d({matchPatterns:pt,defaultMatchWidth:"wide",parsePatterns:wt,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:vt,defaultMatchWidth:"any",parsePatterns:Pt,defaultParseWidth:"any"})},Mt={code:"ar",formatDistance:Ie,formatLong:Ge,formatRelative:et,localize:dt,match:yt,options:{weekStartsOn:6,firstWeekContainsDate:1}},te={lessThanXSeconds:{standalone:{one:"weniger als 1 Sekunde",other:"weniger als {{count}} Sekunden"},withPreposition:{one:"weniger als 1 Sekunde",other:"weniger als {{count}} Sekunden"}},xSeconds:{standalone:{one:"1 Sekunde",other:"{{count}} Sekunden"},withPreposition:{one:"1 Sekunde",other:"{{count}} Sekunden"}},halfAMinute:{standalone:"eine halbe Minute",withPreposition:"einer halben Minute"},lessThanXMinutes:{standalone:{one:"weniger als 1 Minute",other:"weniger als {{count}} Minuten"},withPreposition:{one:"weniger als 1 Minute",other:"weniger als {{count}} Minuten"}},xMinutes:{standalone:{one:"1 Minute",other:"{{count}} Minuten"},withPreposition:{one:"1 Minute",other:"{{count}} Minuten"}},aboutXHours:{standalone:{one:"etwa 1 Stunde",other:"etwa {{count}} Stunden"},withPreposition:{one:"etwa 1 Stunde",other:"etwa {{count}} Stunden"}},xHours:{standalone:{one:"1 Stunde",other:"{{count}} Stunden"},withPreposition:{one:"1 Stunde",other:"{{count}} Stunden"}},xDays:{standalone:{one:"1 Tag",other:"{{count}} Tage"},withPreposition:{one:"1 Tag",other:"{{count}} Tagen"}},aboutXWeeks:{standalone:{one:"etwa 1 Woche",other:"etwa {{count}} Wochen"},withPreposition:{one:"etwa 1 Woche",other:"etwa {{count}} Wochen"}},xWeeks:{standalone:{one:"1 Woche",other:"{{count}} Wochen"},withPreposition:{one:"1 Woche",other:"{{count}} Wochen"}},aboutXMonths:{standalone:{one:"etwa 1 Monat",other:"etwa {{count}} Monate"},withPreposition:{one:"etwa 1 Monat",other:"etwa {{count}} Monaten"}},xMonths:{standalone:{one:"1 Monat",other:"{{count}} Monate"},withPreposition:{one:"1 Monat",other:"{{count}} Monaten"}},aboutXYears:{standalone:{one:"etwa 1 Jahr",other:"etwa {{count}} Jahre"},withPreposition:{one:"etwa 1 Jahr",other:"etwa {{count}} Jahren"}},xYears:{standalone:{one:"1 Jahr",other:"{{count}} Jahre"},withPreposition:{one:"1 Jahr",other:"{{count}} Jahren"}},overXYears:{standalone:{one:"mehr als 1 Jahr",other:"mehr als {{count}} Jahre"},withPreposition:{one:"mehr als 1 Jahr",other:"mehr als {{count}} Jahren"}},almostXYears:{standalone:{one:"fast 1 Jahr",other:"fast {{count}} Jahre"},withPreposition:{one:"fast 1 Jahr",other:"fast {{count}} Jahren"}}},xt=(e,r,a)=>{let n;const o=a!=null&&a.addSuffix?te[e].withPreposition:te[e].standalone;return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"in "+n:"vor "+n:n},jt={full:"EEEE, do MMMM y",long:"do MMMM y",medium:"do MMM y",short:"dd.MM.y"},$t={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},Wt={full:"{{date}} 'um' {{time}}",long:"{{date}} 'um' {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},St={date:m({formats:jt,defaultWidth:"full"}),time:m({formats:$t,defaultWidth:"full"}),dateTime:m({formats:Wt,defaultWidth:"full"})},Dt={lastWeek:"'letzten' eeee 'um' p",yesterday:"'gestern um' p",today:"'heute um' p",tomorrow:"'morgen um' p",nextWeek:"eeee 'um' p",other:"P"},Nt=(e,r,a,n)=>Dt[e],kt={narrow:["v.Chr.","n.Chr."],abbreviated:["v.Chr.","n.Chr."],wide:["vor Christus","nach Christus"]},Tt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"]},z={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],wide:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},Ct={narrow:z.narrow,abbreviated:["Jan.","Feb.","März","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."],wide:z.wide},zt={narrow:["S","M","D","M","D","F","S"],short:["So","Mo","Di","Mi","Do","Fr","Sa"],abbreviated:["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],wide:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},Ht={narrow:{am:"vm.",pm:"nm.",midnight:"Mitternacht",noon:"Mittag",morning:"Morgen",afternoon:"Nachm.",evening:"Abend",night:"Nacht"},abbreviated:{am:"vorm.",pm:"nachm.",midnight:"Mitternacht",noon:"Mittag",morning:"Morgen",afternoon:"Nachmittag",evening:"Abend",night:"Nacht"},wide:{am:"vormittags",pm:"nachmittags",midnight:"Mitternacht",noon:"Mittag",morning:"Morgen",afternoon:"Nachmittag",evening:"Abend",night:"Nacht"}},Et={narrow:{am:"vm.",pm:"nm.",midnight:"Mitternacht",noon:"Mittag",morning:"morgens",afternoon:"nachm.",evening:"abends",night:"nachts"},abbreviated:{am:"vorm.",pm:"nachm.",midnight:"Mitternacht",noon:"Mittag",morning:"morgens",afternoon:"nachmittags",evening:"abends",night:"nachts"},wide:{am:"vormittags",pm:"nachmittags",midnight:"Mitternacht",noon:"Mittag",morning:"morgens",afternoon:"nachmittags",evening:"abends",night:"nachts"}},Vt=e=>Number(e)+".",Lt={ordinalNumber:Vt,era:s({values:kt,defaultWidth:"wide"}),quarter:s({values:Tt,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:z,formattingValues:Ct,defaultWidth:"wide"}),day:s({values:zt,defaultWidth:"wide"}),dayPeriod:s({values:Ht,defaultWidth:"wide",formattingValues:Et,defaultFormattingWidth:"wide"})},Xt=/^(\d+)(\.)?/i,At=/\d+/i,qt={narrow:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,abbreviated:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,wide:/^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i},Jt={any:[/^v/i,/^n/i]},Ft={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](\.)? Quartal/i},_t={any:[/1/i,/2/i,/3/i,/4/i]},Ot={narrow:/^[jfmasond]/i,abbreviated:/^(j[aä]n|feb|mär[z]?|apr|mai|jun[i]?|jul[i]?|aug|sep|okt|nov|dez)\.?/i,wide:/^(jänner|januar|februar|märz|april|mai|juni|juli|august|september|oktober|november|dezember)/i},Rt={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^j[aä]/i,/^f/i,/^mär/i,/^ap/i,/^mai/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Qt={narrow:/^[smdmf]/i,short:/^(so|mo|di|mi|do|fr|sa)/i,abbreviated:/^(son?|mon?|die?|mit?|don?|fre?|sam?)\.?/i,wide:/^(sonntag|montag|dienstag|mittwoch|donnerstag|freitag|samstag)/i},Yt={any:[/^so/i,/^mo/i,/^di/i,/^mi/i,/^do/i,/^f/i,/^sa/i]},It={narrow:/^(vm\.?|nm\.?|Mitternacht|Mittag|morgens|nachm\.?|abends|nachts)/i,abbreviated:/^(vorm\.?|nachm\.?|Mitternacht|Mittag|morgens|nachm\.?|abends|nachts)/i,wide:/^(vormittags|nachmittags|Mitternacht|Mittag|morgens|nachmittags|abends|nachts)/i},Bt={any:{am:/^v/i,pm:/^n/i,midnight:/^Mitte/i,noon:/^Mitta/i,morning:/morgens/i,afternoon:/nachmittags/i,evening:/abends/i,night:/nachts/i}},Ut={ordinalNumber:P({matchPattern:Xt,parsePattern:At,valueCallback:e=>parseInt(e)}),era:d({matchPatterns:qt,defaultMatchWidth:"wide",parsePatterns:Jt,defaultParseWidth:"any"}),quarter:d({matchPatterns:Ft,defaultMatchWidth:"wide",parsePatterns:_t,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Ot,defaultMatchWidth:"wide",parsePatterns:Rt,defaultParseWidth:"any"}),day:d({matchPatterns:Qt,defaultMatchWidth:"wide",parsePatterns:Yt,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:It,defaultMatchWidth:"wide",parsePatterns:Bt,defaultParseWidth:"any"})},Kt={code:"de",formatDistance:xt,formatLong:St,formatRelative:Nt,localize:Lt,match:Ut,options:{weekStartsOn:1,firstWeekContainsDate:4}},Gt={lessThanXSeconds:{one:"menos de un segundo",other:"menos de {{count}} segundos"},xSeconds:{one:"1 segundo",other:"{{count}} segundos"},halfAMinute:"medio minuto",lessThanXMinutes:{one:"menos de un minuto",other:"menos de {{count}} minutos"},xMinutes:{one:"1 minuto",other:"{{count}} minutos"},aboutXHours:{one:"alrededor de 1 hora",other:"alrededor de {{count}} horas"},xHours:{one:"1 hora",other:"{{count}} horas"},xDays:{one:"1 día",other:"{{count}} días"},aboutXWeeks:{one:"alrededor de 1 semana",other:"alrededor de {{count}} semanas"},xWeeks:{one:"1 semana",other:"{{count}} semanas"},aboutXMonths:{one:"alrededor de 1 mes",other:"alrededor de {{count}} meses"},xMonths:{one:"1 mes",other:"{{count}} meses"},aboutXYears:{one:"alrededor de 1 año",other:"alrededor de {{count}} años"},xYears:{one:"1 año",other:"{{count}} años"},overXYears:{one:"más de 1 año",other:"más de {{count}} años"},almostXYears:{one:"casi 1 año",other:"casi {{count}} años"}},Zt=(e,r,a)=>{let n;const o=Gt[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",r.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"en "+n:"hace "+n:n},ea={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d MMM y",short:"dd/MM/y"},ta={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},aa={full:"{{date}} 'a las' {{time}}",long:"{{date}} 'a las' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},na={date:m({formats:ea,defaultWidth:"full"}),time:m({formats:ta,defaultWidth:"full"}),dateTime:m({formats:aa,defaultWidth:"full"})},ra={lastWeek:"'el' eeee 'pasado a la' p",yesterday:"'ayer a la' p",today:"'hoy a la' p",tomorrow:"'mañana a la' p",nextWeek:"eeee 'a la' p",other:"P"},oa={lastWeek:"'el' eeee 'pasado a las' p",yesterday:"'ayer a las' p",today:"'hoy a las' p",tomorrow:"'mañana a las' p",nextWeek:"eeee 'a las' p",other:"P"},ia=(e,r,a,n)=>r.getHours()!==1?oa[e]:ra[e],sa={narrow:["AC","DC"],abbreviated:["AC","DC"],wide:["antes de cristo","después de cristo"]},da={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},ma={narrow:["e","f","m","a","m","j","j","a","s","o","n","d"],abbreviated:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],wide:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"]},ca={narrow:["d","l","m","m","j","v","s"],short:["do","lu","ma","mi","ju","vi","sá"],abbreviated:["dom","lun","mar","mié","jue","vie","sáb"],wide:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"]},ua={narrow:{am:"a",pm:"p",midnight:"mn",noon:"md",morning:"mañana",afternoon:"tarde",evening:"tarde",night:"noche"},abbreviated:{am:"AM",pm:"PM",midnight:"medianoche",noon:"mediodia",morning:"mañana",afternoon:"tarde",evening:"tarde",night:"noche"},wide:{am:"a.m.",pm:"p.m.",midnight:"medianoche",noon:"mediodia",morning:"mañana",afternoon:"tarde",evening:"tarde",night:"noche"}},la={narrow:{am:"a",pm:"p",midnight:"mn",noon:"md",morning:"de la mañana",afternoon:"de la tarde",evening:"de la tarde",night:"de la noche"},abbreviated:{am:"AM",pm:"PM",midnight:"medianoche",noon:"mediodia",morning:"de la mañana",afternoon:"de la tarde",evening:"de la tarde",night:"de la noche"},wide:{am:"a.m.",pm:"p.m.",midnight:"medianoche",noon:"mediodia",morning:"de la mañana",afternoon:"de la tarde",evening:"de la tarde",night:"de la noche"}},ha=(e,r)=>Number(e)+"º",fa={ordinalNumber:ha,era:s({values:sa,defaultWidth:"wide"}),quarter:s({values:da,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:s({values:ma,defaultWidth:"wide"}),day:s({values:ca,defaultWidth:"wide"}),dayPeriod:s({values:ua,defaultWidth:"wide",formattingValues:la,defaultFormattingWidth:"wide"})},ga=/^(\d+)(º)?/i,ba=/\d+/i,pa={narrow:/^(ac|dc|a|d)/i,abbreviated:/^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,wide:/^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i},wa={any:[/^ac/i,/^dc/i],wide:[/^(antes de cristo|antes de la era com[uú]n)/i,/^(despu[eé]s de cristo|era com[uú]n)/i]},va={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º)? trimestre/i},Pa={any:[/1/i,/2/i,/3/i,/4/i]},ya={narrow:/^[efmajsond]/i,abbreviated:/^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,wide:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i},Ma={narrow:[/^e/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^en/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i]},xa={narrow:/^[dlmjvs]/i,short:/^(do|lu|ma|mi|ju|vi|s[áa])/i,abbreviated:/^(dom|lun|mar|mi[ée]|jue|vie|s[áa]b)/i,wide:/^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i},ja={narrow:[/^d/i,/^l/i,/^m/i,/^m/i,/^j/i,/^v/i,/^s/i],any:[/^do/i,/^lu/i,/^ma/i,/^mi/i,/^ju/i,/^vi/i,/^sa/i]},$a={narrow:/^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,any:/^([ap]\.?\s?m\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i},Wa={any:{am:/^a/i,pm:/^p/i,midnight:/^mn/i,noon:/^md/i,morning:/mañana/i,afternoon:/tarde/i,evening:/tarde/i,night:/noche/i}},Sa={ordinalNumber:P({matchPattern:ga,parsePattern:ba,valueCallback:function(e){return parseInt(e,10)}}),era:d({matchPatterns:pa,defaultMatchWidth:"wide",parsePatterns:wa,defaultParseWidth:"any"}),quarter:d({matchPatterns:va,defaultMatchWidth:"wide",parsePatterns:Pa,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:ya,defaultMatchWidth:"wide",parsePatterns:Ma,defaultParseWidth:"any"}),day:d({matchPatterns:xa,defaultMatchWidth:"wide",parsePatterns:ja,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:$a,defaultMatchWidth:"any",parsePatterns:Wa,defaultParseWidth:"any"})},Da={code:"es",formatDistance:Zt,formatLong:na,formatRelative:ia,localize:fa,match:Sa,options:{weekStartsOn:1,firstWeekContainsDate:1}},Na={lessThanXSeconds:{one:"moins d’une seconde",other:"moins de {{count}} secondes"},xSeconds:{one:"1 seconde",other:"{{count}} secondes"},halfAMinute:"30 secondes",lessThanXMinutes:{one:"moins d’une minute",other:"moins de {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"environ 1 heure",other:"environ {{count}} heures"},xHours:{one:"1 heure",other:"{{count}} heures"},xDays:{one:"1 jour",other:"{{count}} jours"},aboutXWeeks:{one:"environ 1 semaine",other:"environ {{count}} semaines"},xWeeks:{one:"1 semaine",other:"{{count}} semaines"},aboutXMonths:{one:"environ 1 mois",other:"environ {{count}} mois"},xMonths:{one:"1 mois",other:"{{count}} mois"},aboutXYears:{one:"environ 1 an",other:"environ {{count}} ans"},xYears:{one:"1 an",other:"{{count}} ans"},overXYears:{one:"plus d’un an",other:"plus de {{count}} ans"},almostXYears:{one:"presqu’un an",other:"presque {{count}} ans"}},ka=(e,r,a)=>{let n;const o=Na[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"dans "+n:"il y a "+n:n},Ta={full:"EEEE d MMMM y",long:"d MMMM y",medium:"d MMM y",short:"dd/MM/y"},Ca={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},za={full:"{{date}} 'à' {{time}}",long:"{{date}} 'à' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ha={date:m({formats:Ta,defaultWidth:"full"}),time:m({formats:Ca,defaultWidth:"full"}),dateTime:m({formats:za,defaultWidth:"full"})},Ea={lastWeek:"eeee 'dernier à' p",yesterday:"'hier à' p",today:"'aujourd’hui à' p",tomorrow:"'demain à' p'",nextWeek:"eeee 'prochain à' p",other:"P"},Va=(e,r,a,n)=>Ea[e],La={narrow:["av. J.-C","ap. J.-C"],abbreviated:["av. J.-C","ap. J.-C"],wide:["avant Jésus-Christ","après Jésus-Christ"]},Xa={narrow:["T1","T2","T3","T4"],abbreviated:["1er trim.","2ème trim.","3ème trim.","4ème trim."],wide:["1er trimestre","2ème trimestre","3ème trimestre","4ème trimestre"]},Aa={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],wide:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]},qa={narrow:["D","L","M","M","J","V","S"],short:["di","lu","ma","me","je","ve","sa"],abbreviated:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],wide:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},Ja={narrow:{am:"AM",pm:"PM",midnight:"minuit",noon:"midi",morning:"mat.",afternoon:"ap.m.",evening:"soir",night:"mat."},abbreviated:{am:"AM",pm:"PM",midnight:"minuit",noon:"midi",morning:"matin",afternoon:"après-midi",evening:"soir",night:"matin"},wide:{am:"AM",pm:"PM",midnight:"minuit",noon:"midi",morning:"du matin",afternoon:"de l’après-midi",evening:"du soir",night:"du matin"}},Fa=(e,r)=>{const a=Number(e),n=r==null?void 0:r.unit;if(a===0)return"0";const o=["year","week","hour","minute","second"];let u;return a===1?u=n&&o.includes(n)?"ère":"er":u="ème",a+u},_a=["MMM","MMMM"],Oa={preprocessor:(e,r)=>e.getDate()===1||!r.some(n=>n.isToken&&_a.includes(n.value))?r:r.map(n=>n.isToken&&n.value==="do"?{isToken:!0,value:"d"}:n),ordinalNumber:Fa,era:s({values:La,defaultWidth:"wide"}),quarter:s({values:Xa,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:Aa,defaultWidth:"wide"}),day:s({values:qa,defaultWidth:"wide"}),dayPeriod:s({values:Ja,defaultWidth:"wide"})},Ra=/^(\d+)(ième|ère|ème|er|e)?/i,Qa=/\d+/i,Ya={narrow:/^(av\.J\.C|ap\.J\.C|ap\.J\.-C)/i,abbreviated:/^(av\.J\.-C|av\.J-C|apr\.J\.-C|apr\.J-C|ap\.J-C)/i,wide:/^(avant Jésus-Christ|après Jésus-Christ)/i},Ia={any:[/^av/i,/^ap/i]},Ba={narrow:/^T?[1234]/i,abbreviated:/^[1234](er|ème|e)? trim\.?/i,wide:/^[1234](er|ème|e)? trimestre/i},Ua={any:[/1/i,/2/i,/3/i,/4/i]},Ka={narrow:/^[jfmasond]/i,abbreviated:/^(janv|févr|mars|avr|mai|juin|juill|juil|août|sept|oct|nov|déc)\.?/i,wide:/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i},Ga={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^av/i,/^ma/i,/^juin/i,/^juil/i,/^ao/i,/^s/i,/^o/i,/^n/i,/^d/i]},Za={narrow:/^[lmjvsd]/i,short:/^(di|lu|ma|me|je|ve|sa)/i,abbreviated:/^(dim|lun|mar|mer|jeu|ven|sam)\.?/i,wide:/^(dimanche|lundi|mardi|mercredi|jeudi|vendredi|samedi)/i},en={narrow:[/^d/i,/^l/i,/^m/i,/^m/i,/^j/i,/^v/i,/^s/i],any:[/^di/i,/^lu/i,/^ma/i,/^me/i,/^je/i,/^ve/i,/^sa/i]},tn={narrow:/^(a|p|minuit|midi|mat\.?|ap\.?m\.?|soir|nuit)/i,any:/^([ap]\.?\s?m\.?|du matin|de l'après[-\s]midi|du soir|de la nuit)/i},an={any:{am:/^a/i,pm:/^p/i,midnight:/^min/i,noon:/^mid/i,morning:/mat/i,afternoon:/ap/i,evening:/soir/i,night:/nuit/i}},nn={ordinalNumber:P({matchPattern:Ra,parsePattern:Qa,valueCallback:e=>parseInt(e)}),era:d({matchPatterns:Ya,defaultMatchWidth:"wide",parsePatterns:Ia,defaultParseWidth:"any"}),quarter:d({matchPatterns:Ba,defaultMatchWidth:"wide",parsePatterns:Ua,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Ka,defaultMatchWidth:"wide",parsePatterns:Ga,defaultParseWidth:"any"}),day:d({matchPatterns:Za,defaultMatchWidth:"wide",parsePatterns:en,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:tn,defaultMatchWidth:"any",parsePatterns:an,defaultParseWidth:"any"})},rn={code:"fr",formatDistance:ka,formatLong:Ha,formatRelative:Va,localize:Oa,match:nn,options:{weekStartsOn:1,firstWeekContainsDate:4}},on={lessThanXSeconds:{one:"1秒未満",other:"{{count}}秒未満",oneWithSuffix:"約1秒",otherWithSuffix:"約{{count}}秒"},xSeconds:{one:"1秒",other:"{{count}}秒"},halfAMinute:"30秒",lessThanXMinutes:{one:"1分未満",other:"{{count}}分未満",oneWithSuffix:"約1分",otherWithSuffix:"約{{count}}分"},xMinutes:{one:"1分",other:"{{count}}分"},aboutXHours:{one:"約1時間",other:"約{{count}}時間"},xHours:{one:"1時間",other:"{{count}}時間"},xDays:{one:"1日",other:"{{count}}日"},aboutXWeeks:{one:"約1週間",other:"約{{count}}週間"},xWeeks:{one:"1週間",other:"{{count}}週間"},aboutXMonths:{one:"約1か月",other:"約{{count}}か月"},xMonths:{one:"1か月",other:"{{count}}か月"},aboutXYears:{one:"約1年",other:"約{{count}}年"},xYears:{one:"1年",other:"{{count}}年"},overXYears:{one:"1年以上",other:"{{count}}年以上"},almostXYears:{one:"1年近く",other:"{{count}}年近く"}},sn=(e,r,a)=>{a=a||{};let n;const o=on[e];return typeof o=="string"?n=o:r===1?a.addSuffix&&o.oneWithSuffix?n=o.oneWithSuffix:n=o.one:a.addSuffix&&o.otherWithSuffix?n=o.otherWithSuffix.replace("{{count}}",String(r)):n=o.other.replace("{{count}}",String(r)),a.addSuffix?a.comparison&&a.comparison>0?n+"後":n+"前":n},dn={full:"y年M月d日EEEE",long:"y年M月d日",medium:"y/MM/dd",short:"y/MM/dd"},mn={full:"H時mm分ss秒 zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},cn={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},un={date:m({formats:dn,defaultWidth:"full"}),time:m({formats:mn,defaultWidth:"full"}),dateTime:m({formats:cn,defaultWidth:"full"})},ln={lastWeek:"先週のeeeeのp",yesterday:"昨日のp",today:"今日のp",tomorrow:"明日のp",nextWeek:"翌週のeeeeのp",other:"P"},hn=(e,r,a,n)=>ln[e],fn={narrow:["BC","AC"],abbreviated:["紀元前","西暦"],wide:["紀元前","西暦"]},gn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["第1四半期","第2四半期","第3四半期","第4四半期"]},bn={narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]},pn={narrow:["日","月","火","水","木","金","土"],short:["日","月","火","水","木","金","土"],abbreviated:["日","月","火","水","木","金","土"],wide:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},wn={narrow:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},abbreviated:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},wide:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"}},vn={narrow:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},abbreviated:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},wide:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"}},Pn=(e,r)=>{const a=Number(e);switch(String(r==null?void 0:r.unit)){case"year":return`${a}年`;case"quarter":return`第${a}四半期`;case"month":return`${a}月`;case"week":return`第${a}週`;case"date":return`${a}日`;case"hour":return`${a}時`;case"minute":return`${a}分`;case"second":return`${a}秒`;default:return`${a}`}},yn={ordinalNumber:Pn,era:s({values:fn,defaultWidth:"wide"}),quarter:s({values:gn,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:s({values:bn,defaultWidth:"wide"}),day:s({values:pn,defaultWidth:"wide"}),dayPeriod:s({values:wn,defaultWidth:"wide",formattingValues:vn,defaultFormattingWidth:"wide"})},Mn=/^第?\d+(年|四半期|月|週|日|時|分|秒)?/i,xn=/\d+/i,jn={narrow:/^(B\.?C\.?|A\.?D\.?)/i,abbreviated:/^(紀元[前後]|西暦)/i,wide:/^(紀元[前後]|西暦)/i},$n={narrow:[/^B/i,/^A/i],any:[/^(紀元前)/i,/^(西暦|紀元後)/i]},Wn={narrow:/^[1234]/i,abbreviated:/^Q[1234]/i,wide:/^第[1234一二三四1234]四半期/i},Sn={any:[/(1|一|1)/i,/(2|二|2)/i,/(3|三|3)/i,/(4|四|4)/i]},Dn={narrow:/^([123456789]|1[012])/,abbreviated:/^([123456789]|1[012])月/i,wide:/^([123456789]|1[012])月/i},Nn={any:[/^1\D/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},kn={narrow:/^[日月火水木金土]/,short:/^[日月火水木金土]/,abbreviated:/^[日月火水木金土]/,wide:/^[日月火水木金土]曜日/},Tn={any:[/^日/,/^月/,/^火/,/^水/,/^木/,/^金/,/^土/]},Cn={any:/^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i},zn={any:{am:/^(A|午前)/i,pm:/^(P|午後)/i,midnight:/^深夜|真夜中/i,noon:/^正午/i,morning:/^朝/i,afternoon:/^午後/i,evening:/^夜/i,night:/^深夜/i}},Hn={ordinalNumber:P({matchPattern:Mn,parsePattern:xn,valueCallback:function(e){return parseInt(e,10)}}),era:d({matchPatterns:jn,defaultMatchWidth:"wide",parsePatterns:$n,defaultParseWidth:"any"}),quarter:d({matchPatterns:Wn,defaultMatchWidth:"wide",parsePatterns:Sn,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Dn,defaultMatchWidth:"wide",parsePatterns:Nn,defaultParseWidth:"any"}),day:d({matchPatterns:kn,defaultMatchWidth:"wide",parsePatterns:Tn,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:Cn,defaultMatchWidth:"any",parsePatterns:zn,defaultParseWidth:"any"})},En={code:"ja",formatDistance:sn,formatLong:un,formatRelative:hn,localize:yn,match:Hn,options:{weekStartsOn:0,firstWeekContainsDate:1}},Vn={lessThanXSeconds:{one:"1초 미만",other:"{{count}}초 미만"},xSeconds:{one:"1초",other:"{{count}}초"},halfAMinute:"30초",lessThanXMinutes:{one:"1분 미만",other:"{{count}}분 미만"},xMinutes:{one:"1분",other:"{{count}}분"},aboutXHours:{one:"약 1시간",other:"약 {{count}}시간"},xHours:{one:"1시간",other:"{{count}}시간"},xDays:{one:"1일",other:"{{count}}일"},aboutXWeeks:{one:"약 1주",other:"약 {{count}}주"},xWeeks:{one:"1주",other:"{{count}}주"},aboutXMonths:{one:"약 1개월",other:"약 {{count}}개월"},xMonths:{one:"1개월",other:"{{count}}개월"},aboutXYears:{one:"약 1년",other:"약 {{count}}년"},xYears:{one:"1년",other:"{{count}}년"},overXYears:{one:"1년 이상",other:"{{count}}년 이상"},almostXYears:{one:"거의 1년",other:"거의 {{count}}년"}},Ln=(e,r,a)=>{let n;const o=Vn[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",r.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?n+" 후":n+" 전":n},Xn={full:"y년 M월 d일 EEEE",long:"y년 M월 d일",medium:"y.MM.dd",short:"y.MM.dd"},An={full:"a H시 mm분 ss초 zzzz",long:"a H:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},qn={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},Jn={date:m({formats:Xn,defaultWidth:"full"}),time:m({formats:An,defaultWidth:"full"}),dateTime:m({formats:qn,defaultWidth:"full"})},Fn={lastWeek:"'지난' eeee p",yesterday:"'어제' p",today:"'오늘' p",tomorrow:"'내일' p",nextWeek:"'다음' eeee p",other:"P"},_n=(e,r,a,n)=>Fn[e],On={narrow:["BC","AD"],abbreviated:["BC","AD"],wide:["기원전","서기"]},Rn={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1분기","2분기","3분기","4분기"]},Qn={narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],wide:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},Yn={narrow:["일","월","화","수","목","금","토"],short:["일","월","화","수","목","금","토"],abbreviated:["일","월","화","수","목","금","토"],wide:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},In={narrow:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},abbreviated:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},wide:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"}},Bn={narrow:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},abbreviated:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},wide:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"}},Un=(e,r)=>{const a=Number(e);switch(String(r==null?void 0:r.unit)){case"minute":case"second":return String(a);case"date":return a+"일";default:return a+"번째"}},Kn={ordinalNumber:Un,era:s({values:On,defaultWidth:"wide"}),quarter:s({values:Rn,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:Qn,defaultWidth:"wide"}),day:s({values:Yn,defaultWidth:"wide"}),dayPeriod:s({values:In,defaultWidth:"wide",formattingValues:Bn,defaultFormattingWidth:"wide"})},Gn=/^(\d+)(일|번째)?/i,Zn=/\d+/i,er={narrow:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(기원전|서기)/i},tr={any:[/^(bc|기원전)/i,/^(ad|서기)/i]},ar={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234]사?분기/i},nr={any:[/1/i,/2/i,/3/i,/4/i]},rr={narrow:/^(1[012]|[123456789])/,abbreviated:/^(1[012]|[123456789])월/i,wide:/^(1[012]|[123456789])월/i},or={any:[/^1월?$/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},ir={narrow:/^[일월화수목금토]/,short:/^[일월화수목금토]/,abbreviated:/^[일월화수목금토]/,wide:/^[일월화수목금토]요일/},sr={any:[/^일/,/^월/,/^화/,/^수/,/^목/,/^금/,/^토/]},dr={any:/^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i},mr={any:{am:/^(am|오전)/i,pm:/^(pm|오후)/i,midnight:/^자정/i,noon:/^정오/i,morning:/^아침/i,afternoon:/^오후/i,evening:/^저녁/i,night:/^밤/i}},cr={ordinalNumber:P({matchPattern:Gn,parsePattern:Zn,valueCallback:e=>parseInt(e,10)}),era:d({matchPatterns:er,defaultMatchWidth:"wide",parsePatterns:tr,defaultParseWidth:"any"}),quarter:d({matchPatterns:ar,defaultMatchWidth:"wide",parsePatterns:nr,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:rr,defaultMatchWidth:"wide",parsePatterns:or,defaultParseWidth:"any"}),day:d({matchPatterns:ir,defaultMatchWidth:"wide",parsePatterns:sr,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:dr,defaultMatchWidth:"any",parsePatterns:mr,defaultParseWidth:"any"})},ur={code:"ko",formatDistance:Ln,formatLong:Jn,formatRelative:_n,localize:Kn,match:cr,options:{weekStartsOn:0,firstWeekContainsDate:1}},lr={lessThanXSeconds:{one:"menos de um segundo",other:"menos de {{count}} segundos"},xSeconds:{one:"1 segundo",other:"{{count}} segundos"},halfAMinute:"meio minuto",lessThanXMinutes:{one:"menos de um minuto",other:"menos de {{count}} minutos"},xMinutes:{one:"1 minuto",other:"{{count}} minutos"},aboutXHours:{one:"aproximadamente 1 hora",other:"aproximadamente {{count}} horas"},xHours:{one:"1 hora",other:"{{count}} horas"},xDays:{one:"1 dia",other:"{{count}} dias"},aboutXWeeks:{one:"aproximadamente 1 semana",other:"aproximadamente {{count}} semanas"},xWeeks:{one:"1 semana",other:"{{count}} semanas"},aboutXMonths:{one:"aproximadamente 1 mês",other:"aproximadamente {{count}} meses"},xMonths:{one:"1 mês",other:"{{count}} meses"},aboutXYears:{one:"aproximadamente 1 ano",other:"aproximadamente {{count}} anos"},xYears:{one:"1 ano",other:"{{count}} anos"},overXYears:{one:"mais de 1 ano",other:"mais de {{count}} anos"},almostXYears:{one:"quase 1 ano",other:"quase {{count}} anos"}},hr=(e,r,a)=>{let n;const o=lr[e];return typeof o=="string"?n=o:r===1?n=o.one:n=o.other.replace("{{count}}",String(r)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"daqui a "+n:"há "+n:n},fr={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d 'de' MMM 'de' y",short:"dd/MM/y"},gr={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},br={full:"{{date}} 'às' {{time}}",long:"{{date}} 'às' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},pr={date:m({formats:fr,defaultWidth:"full"}),time:m({formats:gr,defaultWidth:"full"}),dateTime:m({formats:br,defaultWidth:"full"})},wr={lastWeek:e=>{const r=e.getDay();return"'"+(r===0||r===6?"último":"última")+"' eeee 'às' p"},yesterday:"'ontem às' p",today:"'hoje às' p",tomorrow:"'amanhã às' p",nextWeek:"eeee 'às' p",other:"P"},vr=(e,r,a,n)=>{const o=wr[e];return typeof o=="function"?o(r):o},Pr={narrow:["aC","dC"],abbreviated:["a.C.","d.C."],wide:["antes de Cristo","depois de Cristo"]},yr={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},Mr={narrow:["j","f","m","a","m","j","j","a","s","o","n","d"],abbreviated:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],wide:["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},xr={narrow:["d","s","t","q","q","s","s"],short:["dom","seg","ter","qua","qui","sex","sáb"],abbreviated:["dom","seg","ter","qua","qui","sex","sáb"],wide:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},jr={narrow:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"noite",night:"madrugada"},abbreviated:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"noite",night:"madrugada"},wide:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"noite",night:"madrugada"}},$r={narrow:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da noite",night:"da madrugada"},abbreviated:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da noite",night:"da madrugada"},wide:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da noite",night:"da madrugada"}},Wr=(e,r)=>Number(e)+"º",Sr={ordinalNumber:Wr,era:s({values:Pr,defaultWidth:"wide"}),quarter:s({values:yr,defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:Mr,defaultWidth:"wide"}),day:s({values:xr,defaultWidth:"wide"}),dayPeriod:s({values:jr,defaultWidth:"wide",formattingValues:$r,defaultFormattingWidth:"wide"})},Dr=/^(\d+)(º|ª)?/i,Nr=/\d+/i,kr={narrow:/^(ac|dc|a|d)/i,abbreviated:/^(a\.?\s?c\.?|a\.?\s?e\.?\s?c\.?|d\.?\s?c\.?|e\.?\s?c\.?)/i,wide:/^(antes de cristo|antes da era comum|depois de cristo|era comum)/i},Tr={any:[/^ac/i,/^dc/i],wide:[/^(antes de cristo|antes da era comum)/i,/^(depois de cristo|era comum)/i]},Cr={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º|ª)? trimestre/i},zr={any:[/1/i,/2/i,/3/i,/4/i]},Hr={narrow:/^[jfmasond]/i,abbreviated:/^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,wide:/^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i},Er={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ab/i,/^mai/i,/^jun/i,/^jul/i,/^ag/i,/^s/i,/^o/i,/^n/i,/^d/i]},Vr={narrow:/^[dstq]/i,short:/^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,abbreviated:/^(dom|seg|ter|qua|qui|sex|s[áa]b)/i,wide:/^(domingo|segunda-?\s?feira|terça-?\s?feira|quarta-?\s?feira|quinta-?\s?feira|sexta-?\s?feira|s[áa]bado)/i},Lr={narrow:[/^d/i,/^s/i,/^t/i,/^q/i,/^q/i,/^s/i,/^s/i],any:[/^d/i,/^seg/i,/^t/i,/^qua/i,/^qui/i,/^sex/i,/^s[áa]/i]},Xr={narrow:/^(a|p|meia-?\s?noite|meio-?\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i,any:/^([ap]\.?\s?m\.?|meia-?\s?noite|meio-?\s?dia|(da) (manh[ãa]|tarde|noite|madrugada))/i},Ar={any:{am:/^a/i,pm:/^p/i,midnight:/^meia/i,noon:/^meio/i,morning:/manh[ãa]/i,afternoon:/tarde/i,evening:/noite/i,night:/madrugada/i}},qr={ordinalNumber:P({matchPattern:Dr,parsePattern:Nr,valueCallback:e=>parseInt(e,10)}),era:d({matchPatterns:kr,defaultMatchWidth:"wide",parsePatterns:Tr,defaultParseWidth:"any"}),quarter:d({matchPatterns:Cr,defaultMatchWidth:"wide",parsePatterns:zr,defaultParseWidth:"any",valueCallback:e=>e+1}),month:d({matchPatterns:Hr,defaultMatchWidth:"wide",parsePatterns:Er,defaultParseWidth:"any"}),day:d({matchPatterns:Vr,defaultMatchWidth:"wide",parsePatterns:Lr,defaultParseWidth:"any"}),dayPeriod:d({matchPatterns:Xr,defaultMatchWidth:"any",parsePatterns:Ar,defaultParseWidth:"any"})},Jr={code:"pt",formatDistance:hr,formatLong:pr,formatRelative:vr,localize:Sr,match:qr,options:{weekStartsOn:0,firstWeekContainsDate:4}},Fr={en:ie,zh:Ee,ja:En,ko:ur,es:Da,pt:Jr,de:Kt,fr:rn,ar:Mt};function _r(){const e=fe(r=>r.locale);return Fr[e]??ie}function ae(e){if(!e)return;const r=new Date(`${e}T00:00:00`);return Number.isNaN(r.getTime())?void 0:r}function ne(e){const r=e.getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${r}-${a}-${n}`}function Or({value:e,onChange:r,placeholder:a="Select date range"}){const n=_r(),o=e.from||e.to?{from:ae(e.from),to:ae(e.to)}:void 0;return t.jsxs(ge,{children:[t.jsx(be,{render:t.jsxs($,{type:"button",variant:"outline",size:"sm",className:"justify-start font-normal",children:[t.jsx(Le,{className:"size-4"}),e.from||e.to?`${e.from||"…"} ~ ${e.to||"…"}`:a]})}),t.jsx(pe,{className:"w-auto p-0",align:"start",children:t.jsx(Ve,{locale:n,mode:"range",selected:o,onSelect:u=>{u&&r({from:u.from?ne(u.from):e.from,to:u.to?ne(u.to):e.to})},numberOfMonths:2})})]})}const re={create:"default",update:"secondary",delete:"destructive",upload:"default",register:"outline",login:"secondary"};function M(){return new Date().toISOString().split("T")[0]}function oe(e){const r=new Date;return r.setDate(r.getDate()-e),r.toISOString().split("T")[0]}function bo(){var Q,Y,I;const{t:e}=we(),{getInt:r,set:a}=he(),n=r("page"),[o,u]=w.useState(""),[W,H]=w.useState(""),[S,y]=w.useState({from:"",to:""}),[E,V]=w.useState(""),[L,X]=w.useState(""),[A,q]=w.useState(""),[c,J]=w.useState(null),F=20,_=new URLSearchParams({page:String(n),page_size:String(F)});W&&_.set("action",W);const p=ve({queryKey:["audit",n,W],queryFn:()=>Se.send("/admin/audit",{query:Object.fromEntries(_.entries())})});function O(){H(o),X(S.from),q(S.to),a({page:1})}function se(){u(""),H(""),y({from:"",to:""}),V(""),X(""),q(""),a({page:1})}function de(i){V(i??""),i==="today"?y({from:M(),to:M()}):i==="7d"?y({from:oe(7),to:M()}):i==="30d"?y({from:oe(30),to:M()}):i||y({from:"",to:""})}function D(i){let l=i;if(L){const h=new Date(L);l=l.filter(f=>new Date(f.created_at)>=h)}if(A){const h=new Date(A);h.setHours(23,59,59,999),l=l.filter(f=>new Date(f.created_at)<=h)}return l}function me(){var U;const i=D(((U=p.data)==null?void 0:U.items)??[]),l="Time,Action,Subject,Subject ID,Actor ID,Actor Role,Detail,IP Address",h=i.map(g=>[g.created_at,g.action,g.subject,g.subject_id??"",g.actor_id??"system",g.actor_role??"",(g.detail??"").replace(/"/g,'""'),g.ip_address??""].map(le=>`"${le}"`).join(",")),f=[l,...h].join(` `),x=new Blob([f],{type:"text/csv;charset=utf-8;"}),B=URL.createObjectURL(x),N=document.createElement("a");N.href=B,N.download=`audit-log-${M()}.csv`,N.click(),URL.revokeObjectURL(B)}function ce(){var x;const i=D(((x=p.data)==null?void 0:x.items)??[]),l=new Blob([JSON.stringify(i,null,2)],{type:"application/json"}),h=URL.createObjectURL(l),f=document.createElement("a");f.href=h,f.download=`audit-log-${M()}.json`,f.click(),URL.revokeObjectURL(h)}const R=D(((Q=p.data)==null?void 0:Q.items)??[]),ue=Math.ceil((((Y=p.data)==null?void 0:Y.total)??0)/F);return t.jsxs("div",{className:"space-y-6 pb-6",children:[t.jsxs("div",{className:"flex items-end gap-3 flex-wrap",children:[t.jsxs("div",{className:"space-y-1",children:[t.jsx(ee,{className:"text-xs",children:e("audit.action")}),t.jsx(ke,{placeholder:"create, delete, ...",value:o,onChange:i=>u(i.target.value),onKeyDown:i=>i.key==="Enter"&&O(),className:"w-48"})]}),t.jsx("div",{className:"flex items-end gap-2",children:t.jsxs("div",{className:"space-y-1",children:[t.jsx(ee,{className:"text-xs",children:e("audit.dateRange")}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs(Te,{value:E,onValueChange:de,children:[t.jsx(Ce,{className:"w-40",children:t.jsx(ze,{placeholder:e("audit.dateRange")})}),t.jsxs(He,{children:[t.jsx(j,{value:"today",children:e("audit.today")}),t.jsx(j,{value:"7d",children:"7d"}),t.jsx(j,{value:"30d",children:"30d"}),t.jsx(j,{value:"custom",children:e("audit.custom")})]})]}),E==="custom"&&t.jsx(Or,{value:S,onChange:i=>y(i),placeholder:e("audit.dateRange")})]})]})}),t.jsxs($,{variant:"outline",size:"sm",onClick:O,children:[t.jsx(Pe,{className:"size-4"}),e("audit.search")]}),t.jsx($,{variant:"ghost",size:"sm",onClick:se,children:e("audit.clear")}),t.jsx("div",{className:"ml-auto",children:t.jsxs(K,{children:[t.jsx(G,{render:t.jsxs($,{variant:"outline",size:"sm",children:[t.jsx(Oe,{className:"size-4"}),e("audit.export"),t.jsx(ye,{className:"size-4"})]})}),t.jsxs(Z,{align:"end",children:[t.jsx(k,{onClick:me,children:"CSV"}),t.jsx(k,{onClick:ce,children:"JSON"})]})]})})]}),p.error&&t.jsx("div",{className:"text-sm text-destructive bg-destructive/10 p-3 rounded-md",children:e("audit.failedToLoad")}),t.jsx(De,{children:t.jsx(Ne,{className:"p-0",children:p.isLoading?t.jsx(Je,{cols:6}):t.jsxs(Xe,{children:[t.jsx(Ae,{children:t.jsxs(C,{children:[t.jsx(v,{children:e("audit.timestamp")}),t.jsx(v,{children:e("audit.action")}),t.jsx(v,{children:e("audit.resource")}),t.jsx(v,{children:e("audit.subjectId")}),t.jsx(v,{children:e("audit.actor")}),t.jsx(v,{children:e("audit.detailCol")}),t.jsx(v,{className:"text-end",children:e("common.actions")})]})}),t.jsx(qe,{children:R.length===0?t.jsx(C,{children:t.jsx(b,{colSpan:7,children:t.jsx(Fe,{icon:Me,title:e("audit.noEntries"),description:e("audit.noEntriesDesc")})})}):R.map(i=>t.jsxs(C,{children:[t.jsx(b,{className:"text-xs text-muted-foreground whitespace-nowrap",children:new Date(i.created_at).toLocaleString()}),t.jsx(b,{children:t.jsx(T,{variant:re[i.action]??"outline",children:i.action})}),t.jsx(b,{className:"font-medium",children:i.subject}),t.jsx(b,{className:"font-mono text-xs max-w-32 truncate",children:i.subject_id?i.subject_id.slice(0,8)+"...":"—"}),t.jsxs(b,{className:"text-xs",children:[i.actor_id?t.jsx("span",{className:"font-mono",children:i.actor_id.slice(0,8)}):t.jsx("span",{className:"text-muted-foreground",children:e("audit.system")}),i.actor_role&&t.jsx(T,{variant:"outline",className:"ms-1 text-[10px] px-1",children:i.actor_role})]}),t.jsx(b,{className:"text-xs text-muted-foreground max-w-48 truncate",children:i.detail||"—"}),t.jsx(b,{className:"text-end",children:t.jsxs(K,{children:[t.jsx(G,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:t.jsx(Re,{className:"size-4"})}),t.jsx(Z,{align:"end",children:t.jsxs(k,{onClick:()=>J(i),children:[t.jsx(Qe,{className:"size-4 me-2"}),e("common.view")]})})]})})]},i.id))})]})})}),t.jsx(_e,{page:n,totalPages:ue,total:((I=p.data)==null?void 0:I.total)??0,onPageChange:i=>a({page:i})}),t.jsx(xe,{open:!!c,onOpenChange:i=>!i&&J(null),children:t.jsxs(je,{side:"right",className:"sm:max-w-md overflow-y-auto",children:[t.jsx($e,{children:t.jsx(We,{children:e("audit.viewEntry")})}),c&&t.jsxs("div",{className:"space-y-3 px-4 pb-4 text-sm",children:[t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.timestamp")}),t.jsx("div",{children:new Date(c.created_at).toLocaleString()})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.action")}),t.jsx(T,{variant:re[c.action]??"outline",children:c.action})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.resource")}),t.jsx("div",{children:c.subject})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.subjectId")}),t.jsx("div",{className:"font-mono text-xs break-all",children:c.subject_id||"—"})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.actor")}),t.jsx("div",{className:"font-mono text-xs break-all",children:c.actor_id?`${c.actor_id}${c.actor_role?` (${c.actor_role})`:""}`:e("audit.system")})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.ipAddress")}),t.jsx("div",{className:"font-mono text-xs break-all",children:c.ip_address||"—"})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.userAgent")}),t.jsx("div",{className:"text-xs break-all",children:c.user_agent||"—"})]}),t.jsxs("div",{className:"space-y-1",children:[t.jsx("div",{className:"text-xs text-muted-foreground",children:e("audit.detailCol")}),t.jsx("div",{className:"whitespace-pre-wrap break-words",children:c.detail||"—"})]})]})]})})]})}export{bo as default}; diff --git a/adminui/assets/badge-BrOOeG4p.js b/adminui/assets/badge-BxazBb-3.js similarity index 95% rename from adminui/assets/badge-BrOOeG4p.js rename to adminui/assets/badge-BxazBb-3.js index 33b67ce4..90c9eadb 100644 --- a/adminui/assets/badge-BrOOeG4p.js +++ b/adminui/assets/badge-BxazBb-3.js @@ -1 +1 @@ -import{cb as i,bv as n,aX as d,b1 as s}from"./index-EC_gIQIi.js";const o=s("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function v({className:r,variant:e="default",render:t,...a}){return i({defaultTagName:"span",props:n({className:d(o({variant:e}),r)},a),render:t,state:{slot:"badge",variant:e}})}export{v as B}; +import{cb as i,bv as n,aX as d,b1 as s}from"./index-C-i99XXF.js";const o=s("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function v({className:r,variant:e="default",render:t,...a}){return i({defaultTagName:"span",props:n({className:d(o({variant:e}),r)},a),render:t,state:{slot:"badge",variant:e}})}export{v as B}; diff --git a/adminui/assets/ban-BNncGoT4.js b/adminui/assets/ban-Cqa_f7YL.js similarity index 87% rename from adminui/assets/ban-BNncGoT4.js rename to adminui/assets/ban-Cqa_f7YL.js index 5c3bc8e8..0149d49b 100644 --- a/adminui/assets/ban-BNncGoT4.js +++ b/adminui/assets/ban-Cqa_f7YL.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/calendar-DJ5bqwJx.js b/adminui/assets/calendar-4fvNnW21.js similarity index 99% rename from adminui/assets/calendar-DJ5bqwJx.js rename to adminui/assets/calendar-4fvNnW21.js index e9503255..6af606d1 100644 --- a/adminui/assets/calendar-DJ5bqwJx.js +++ b/adminui/assets/calendar-4fvNnW21.js @@ -1 +1 @@ -import{R as y,f as E,j as se}from"./vendor-react-j_G0Dyx0.js";import{aX as T,l as pn,k as xn,aU as it,i as Pn}from"./index-EC_gIQIi.js";import{C as Tn}from"./chevron-left-iG3CNZoG.js";const Ot=6048e5,Yn=864e5,ut=Symbol.for("constructDateFrom");function z(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&ut in e?e[ut](t):e instanceof Date?new e.constructor(t):new Date(t)}function F(e,t){return z(t||e,e)}function Wt(e,t,n){const r=F(e,n==null?void 0:n.in);return isNaN(t)?z(e,NaN):(t&&r.setDate(r.getDate()+t),r)}function St(e,t,n){const r=F(e,n==null?void 0:n.in);if(isNaN(t))return z(e,NaN);if(!t)return r;const a=r.getDate(),o=z(e,r.getTime());o.setMonth(r.getMonth()+t+1,0);const s=o.getDate();return a>=s?o:(r.setFullYear(o.getFullYear(),o.getMonth(),a),r)}let _n={};function Ne(){return _n}function fe(e,t){var i,u,c,d;const n=Ne(),r=(t==null?void 0:t.weekStartsOn)??((u=(i=t==null?void 0:t.locale)==null?void 0:i.options)==null?void 0:u.weekStartsOn)??n.weekStartsOn??((d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.weekStartsOn)??0,a=F(e,t==null?void 0:t.in),o=a.getDay(),s=(o=o.getTime()?r+1:n.getTime()>=i.getTime()?r:r-1}function ct(e){const t=F(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function he(e,...t){const n=z.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Se(e,t){const n=F(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function Ve(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t),o=Se(r),s=Se(a),i=+o-ct(o),u=+s-ct(s);return Math.round((i-u)/Yn)}function En(e,t){const n=Nt(e,t),r=z(e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),We(r)}function Fn(e,t,n){return Wt(e,t*7,n)}function Bn(e,t,n){return St(e,t*12,n)}function In(e,t){let n,r=t==null?void 0:t.in;return e.forEach(a=>{!r&&typeof a=="object"&&(r=z.bind(null,a));const o=F(a,r);(!n||n{!r&&typeof a=="object"&&(r=z.bind(null,a));const o=F(a,r);(!n||n>o||isNaN(+o))&&(n=o)}),z(r,n||NaN)}function $n(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return+Se(r)==+Se(a)}function Ct(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function zn(e){return!(!Ct(e)&&typeof e!="number"||isNaN(+F(e)))}function pt(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t),o=r.getFullYear()-a.getFullYear(),s=r.getMonth()-a.getMonth();return o*12+s}function An(e,t){const n=F(e,t==null?void 0:t.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function xt(e,t){const[n,r]=he(e,t.start,t.end);return{start:n,end:r}}function qn(e,t){const{start:n,end:r}=xt(t==null?void 0:t.in,e);let a=+n>+r;const o=a?+n:+r,s=a?r:n;s.setHours(0,0,0,0),s.setDate(1);let i=1;const u=[];for(;+s<=o;)u.push(z(n,s)),s.setMonth(s.getMonth()+i);return a?u.reverse():u}function jn(e,t){const n=F(e,t==null?void 0:t.in);return n.setDate(1),n.setHours(0,0,0,0),n}function Rn(e,t){const n=F(e,t==null?void 0:t.in),r=n.getFullYear();return n.setFullYear(r+1,0,0),n.setHours(23,59,59,999),n}function Pt(e,t){const n=F(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function Gn(e,t){const{start:n,end:r}=xt(t==null?void 0:t.in,e);let a=+n>+r;const o=a?+n:+r,s=a?r:n;s.setHours(0,0,0,0),s.setMonth(0,1);let i=1;const u=[];for(;+s<=o;)u.push(z(n,s)),s.setFullYear(s.getFullYear()+i);return a?u.reverse():u}function Tt(e,t){var i,u,c,d;const n=Ne(),r=(t==null?void 0:t.weekStartsOn)??((u=(i=t==null?void 0:t.locale)==null?void 0:i.options)==null?void 0:u.weekStartsOn)??n.weekStartsOn??((d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.weekStartsOn)??0,a=F(e,t==null?void 0:t.in),o=a.getDay(),s=(o{let r;const a=Vn[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function be(e){return(t={})=>{const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const Un={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kn={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zn={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Jn={date:be({formats:Un,defaultWidth:"full"}),time:be({formats:Kn,defaultWidth:"full"}),dateTime:be({formats:Zn,defaultWidth:"full"})},Ln={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},er=(e,t,n,r)=>Ln[e];function te(e){return(t,n)=>{const r=n!=null&&n.context?String(n.context):"standalone";let a;if(r==="formatting"&&e.formattingValues){const s=e.defaultFormattingWidth||e.defaultWidth,i=n!=null&&n.width?String(n.width):s;a=e.formattingValues[i]||e.formattingValues[s]}else{const s=e.defaultWidth,i=n!=null&&n.width?String(n.width):e.defaultWidth;a=e.values[i]||e.values[s]}const o=e.argumentCallback?e.argumentCallback(t):t;return a[o]}}const tr={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nr={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rr={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ar={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},or={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sr={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ir=(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},ur={ordinalNumber:ir,era:te({values:tr,defaultWidth:"wide"}),quarter:te({values:nr,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rr,defaultWidth:"wide"}),day:te({values:ar,defaultWidth:"wide"}),dayPeriod:te({values:or,defaultWidth:"wide",formattingValues:sr,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{const r=n.width,a=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],o=t.match(a);if(!o)return null;const s=o[0],i=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],u=Array.isArray(i)?dr(i,l=>l.test(s)):cr(i,l=>l.test(s));let c;c=e.valueCallback?e.valueCallback(u):u,c=n.valueCallback?n.valueCallback(c):c;const d=t.slice(s.length);return{value:c,rest:d}}}function cr(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function dr(e,t){for(let n=0;n{const r=t.match(e.matchPattern);if(!r)return null;const a=r[0],o=t.match(e.parsePattern);if(!o)return null;let s=e.valueCallback?e.valueCallback(o[0]):o[0];s=n.valueCallback?n.valueCallback(s):s;const i=t.slice(a.length);return{value:s,rest:i}}}const fr=/^(\d+)(th|st|nd|rd)?/i,lr=/\d+/i,hr={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},mr={any:[/^b/i,/^(a|c)/i]},yr={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},gr={any:[/1/i,/2/i,/3/i,/4/i]},wr={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},br={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Mr={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},kr={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Dr={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},vr={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Or={ordinalNumber:Yt({matchPattern:fr,parsePattern:lr,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:hr,defaultMatchWidth:"wide",parsePatterns:mr,defaultParseWidth:"any"}),quarter:ne({matchPatterns:yr,defaultMatchWidth:"wide",parsePatterns:gr,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:wr,defaultMatchWidth:"wide",parsePatterns:br,defaultParseWidth:"any"}),day:ne({matchPatterns:Mr,defaultMatchWidth:"wide",parsePatterns:kr,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:Dr,defaultMatchWidth:"any",parsePatterns:vr,defaultParseWidth:"any"})},we={code:"en-US",formatDistance:Qn,formatLong:Jn,formatRelative:er,localize:ur,match:Or,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Wr(e,t){const n=F(e,t==null?void 0:t.in);return Ve(n,Pt(n))+1}function Qe(e,t){const n=F(e,t==null?void 0:t.in),r=+We(n)-+En(n);return Math.round(r/Ot)+1}function _t(e,t){var d,l,h,w;const n=F(e,t==null?void 0:t.in),r=n.getFullYear(),a=Ne(),o=(t==null?void 0:t.firstWeekContainsDate)??((l=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:l.firstWeekContainsDate)??a.firstWeekContainsDate??((w=(h=a.locale)==null?void 0:h.options)==null?void 0:w.firstWeekContainsDate)??1,s=z((t==null?void 0:t.in)||e,0);s.setFullYear(r+1,0,o),s.setHours(0,0,0,0);const i=fe(s,t),u=z((t==null?void 0:t.in)||e,0);u.setFullYear(r,0,o),u.setHours(0,0,0,0);const c=fe(u,t);return+n>=+i?r+1:+n>=+c?r:r-1}function Sr(e,t){var i,u,c,d;const n=Ne(),r=(t==null?void 0:t.firstWeekContainsDate)??((u=(i=t==null?void 0:t.locale)==null?void 0:i.options)==null?void 0:u.firstWeekContainsDate)??n.firstWeekContainsDate??((d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.firstWeekContainsDate)??1,a=_t(e,t),o=z((t==null?void 0:t.in)||e,0);return o.setFullYear(a,0,r),o.setHours(0,0,0,0),fe(o,t)}function Ue(e,t){const n=F(e,t==null?void 0:t.in),r=+fe(n,t)-+Sr(n,t);return Math.round(r/Ot)+1}function _(e,t){const n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}const de={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return _(t==="yy"?r%100:r,t.length)},M(e,t){const n=e.getMonth();return t==="M"?String(n+1):_(n+1,2)},d(e,t){return _(e.getDate(),t.length)},a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return _(e.getHours()%12||12,t.length)},H(e,t){return _(e.getHours(),t.length)},m(e,t){return _(e.getMinutes(),t.length)},s(e,t){return _(e.getSeconds(),t.length)},S(e,t){const n=t.length,r=e.getMilliseconds(),a=Math.trunc(r*Math.pow(10,n-3));return _(a,t.length)}},ye={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},dt={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){const r=e.getFullYear(),a=r>0?r:1-r;return n.ordinalNumber(a,{unit:"year"})}return de.y(e,t)},Y:function(e,t,n,r){const a=_t(e,r),o=a>0?a:1-a;if(t==="YY"){const s=o%100;return _(s,2)}return t==="Yo"?n.ordinalNumber(o,{unit:"year"}):_(o,t.length)},R:function(e,t){const n=Nt(e);return _(n,t.length)},u:function(e,t){const n=e.getFullYear();return _(n,t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return _(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return _(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return de.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return _(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const a=Ue(e,r);return t==="wo"?n.ordinalNumber(a,{unit:"week"}):_(a,t.length)},I:function(e,t,n){const r=Qe(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):_(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):de.d(e,t)},D:function(e,t,n){const r=Wr(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):_(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const a=e.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(o);case"ee":return _(o,2);case"eo":return n.ordinalNumber(o,{unit:"day"});case"eee":return n.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(a,{width:"short",context:"formatting"});case"eeee":default:return n.day(a,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const a=e.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(o);case"cc":return _(o,t.length);case"co":return n.ordinalNumber(o,{unit:"day"});case"ccc":return n.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(a,{width:"narrow",context:"standalone"});case"cccccc":return n.day(a,{width:"short",context:"standalone"});case"cccc":default:return n.day(a,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),a=r===0?7:r;switch(t){case"i":return String(a);case"ii":return _(a,t.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const a=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let a;switch(r===12?a=ye.noon:r===0?a=ye.midnight:a=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let a;switch(r>=17?a=ye.evening:r>=12?a=ye.afternoon:r>=4?a=ye.morning:a=ye.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return de.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):de.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):_(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):_(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):de.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):de.s(e,t)},S:function(e,t){return de.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return lt(r);case"XXXX":case"XX":return le(r);case"XXXXX":case"XXX":default:return le(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return lt(r);case"xxxx":case"xx":return le(r);case"xxxxx":case"xxx":default:return le(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ft(r,":");case"OOOO":default:return"GMT"+le(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ft(r,":");case"zzzz":default:return"GMT"+le(r,":")}},t:function(e,t,n){const r=Math.trunc(+e/1e3);return _(r,t.length)},T:function(e,t,n){return _(+e,t.length)}};function ft(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),a=Math.trunc(r/60),o=r%60;return o===0?n+String(a):n+String(a)+t+_(o,2)}function lt(e,t){return e%60===0?(e>0?"-":"+")+_(Math.abs(e)/60,2):le(e,t)}function le(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),a=_(Math.trunc(r/60),2),o=_(r%60,2);return n+a+t+o}const ht=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},Et=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Nr=(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],r=n[1],a=n[2];if(!a)return ht(e,t);let o;switch(r){case"P":o=t.dateTime({width:"short"});break;case"PP":o=t.dateTime({width:"medium"});break;case"PPP":o=t.dateTime({width:"long"});break;case"PPPP":default:o=t.dateTime({width:"full"});break}return o.replace("{{date}}",ht(r,t)).replace("{{time}}",Et(a,t))},Cr={p:Et,P:Nr},pr=/^D+$/,xr=/^Y+$/,Pr=["D","DD","YY","YYYY"];function Tr(e){return pr.test(e)}function Yr(e){return xr.test(e)}function _r(e,t,n){const r=Er(e,t,n);if(console.warn(r),Pr.includes(e))throw new RangeError(r)}function Er(e,t,n){const r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const Fr=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Br=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Ir=/^'([^]*?)'?$/,Hr=/''/g,$r=/[a-zA-Z]/;function ve(e,t,n){var d,l,h,w,D,O,v,C;const r=Ne(),a=(n==null?void 0:n.locale)??r.locale??we,o=(n==null?void 0:n.firstWeekContainsDate)??((l=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:l.firstWeekContainsDate)??r.firstWeekContainsDate??((w=(h=r.locale)==null?void 0:h.options)==null?void 0:w.firstWeekContainsDate)??1,s=(n==null?void 0:n.weekStartsOn)??((O=(D=n==null?void 0:n.locale)==null?void 0:D.options)==null?void 0:O.weekStartsOn)??r.weekStartsOn??((C=(v=r.locale)==null?void 0:v.options)==null?void 0:C.weekStartsOn)??0,i=F(e,n==null?void 0:n.in);if(!zn(i))throw new RangeError("Invalid time value");let u=t.match(Br).map(b=>{const g=b[0];if(g==="p"||g==="P"){const N=Cr[g];return N(b,a.formatLong)}return b}).join("").match(Fr).map(b=>{if(b==="''")return{isToken:!1,value:"'"};const g=b[0];if(g==="'")return{isToken:!1,value:zr(b)};if(dt[g])return{isToken:!0,value:b};if(g.match($r))throw new RangeError("Format string contains an unescaped latin alphabet character `"+g+"`");return{isToken:!1,value:b}});a.localize.preprocessor&&(u=a.localize.preprocessor(i,u));const c={firstWeekContainsDate:o,weekStartsOn:s,locale:a};return u.map(b=>{if(!b.isToken)return b.value;const g=b.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&Yr(g)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&Tr(g))&&_r(g,t,String(e));const N=dt[g[0]];return N(i,g,a.localize,c)}).join("")}function zr(e){const t=e.match(Ir);return t?t[1].replace(Hr,"'"):e}function Ar(e,t){const n=F(e,t==null?void 0:t.in),r=n.getFullYear(),a=n.getMonth(),o=z(n,0);return o.setFullYear(r,a+1,0),o.setHours(0,0,0,0),o.getDate()}function qr(e,t){return F(e,t==null?void 0:t.in).getMonth()}function jr(e,t){return F(e,t==null?void 0:t.in).getFullYear()}function Rr(e,t){return+F(e)>+F(t)}function Gr(e,t){return+F(e)<+F(t)}function Xr(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return+fe(r,n)==+fe(a,n)}function Vr(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return r.getFullYear()===a.getFullYear()&&r.getMonth()===a.getMonth()}function Qr(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return r.getFullYear()===a.getFullYear()}function Ur(e,t,n){const r=F(e,n==null?void 0:n.in),a=r.getFullYear(),o=r.getDate(),s=z(e,0);s.setFullYear(a,t,15),s.setHours(0,0,0,0);const i=Ar(s);return r.setMonth(t,Math.min(o,i)),r}function Kr(e,t,n){const r=F(e,n==null?void 0:n.in);return isNaN(+r)?z(e,NaN):(r.setFullYear(t),r)}const Zr={lessThanXSeconds:{one:"不到 1 秒",other:"不到 {{count}} 秒"},xSeconds:{one:"1 秒",other:"{{count}} 秒"},halfAMinute:"半分钟",lessThanXMinutes:{one:"不到 1 分钟",other:"不到 {{count}} 分钟"},xMinutes:{one:"1 分钟",other:"{{count}} 分钟"},xHours:{one:"1 小时",other:"{{count}} 小时"},aboutXHours:{one:"大约 1 小时",other:"大约 {{count}} 小时"},xDays:{one:"1 天",other:"{{count}} 天"},aboutXWeeks:{one:"大约 1 个星期",other:"大约 {{count}} 个星期"},xWeeks:{one:"1 个星期",other:"{{count}} 个星期"},aboutXMonths:{one:"大约 1 个月",other:"大约 {{count}} 个月"},xMonths:{one:"1 个月",other:"{{count}} 个月"},aboutXYears:{one:"大约 1 年",other:"大约 {{count}} 年"},xYears:{one:"1 年",other:"{{count}} 年"},overXYears:{one:"超过 1 年",other:"超过 {{count}} 年"},almostXYears:{one:"将近 1 年",other:"将近 {{count}} 年"}},Jr=(e,t,n)=>{let r;const a=Zr[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",String(t)),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?r+"内":r+"前":r},Lr={full:"y'年'M'月'd'日' EEEE",long:"y'年'M'月'd'日'",medium:"yyyy-MM-dd",short:"yy-MM-dd"},ea={full:"zzzz a h:mm:ss",long:"z a h:mm:ss",medium:"a h:mm:ss",short:"a h:mm"},ta={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},na={date:be({formats:Lr,defaultWidth:"full"}),time:be({formats:ea,defaultWidth:"full"}),dateTime:be({formats:ta,defaultWidth:"full"})};function mt(e,t,n){const r="eeee p";return Xr(e,t,n)?r:e.getTime()>t.getTime()?"'下个'"+r:"'上个'"+r}const ra={lastWeek:mt,yesterday:"'昨天' p",today:"'今天' p",tomorrow:"'明天' p",nextWeek:mt,other:"PP p"},aa=(e,t,n,r)=>{const a=ra[e];return typeof a=="function"?a(t,n,r):a},oa={narrow:["前","公元"],abbreviated:["前","公元"],wide:["公元前","公元"]},sa={narrow:["1","2","3","4"],abbreviated:["第一季","第二季","第三季","第四季"],wide:["第一季度","第二季度","第三季度","第四季度"]},ia={narrow:["一","二","三","四","五","六","七","八","九","十","十一","十二"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},ua={narrow:["日","一","二","三","四","五","六"],short:["日","一","二","三","四","五","六"],abbreviated:["周日","周一","周二","周三","周四","周五","周六"],wide:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},ca={narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},da={narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},fa=(e,t)=>{const n=Number(e);switch(t==null?void 0:t.unit){case"date":return n.toString()+"日";case"hour":return n.toString()+"时";case"minute":return n.toString()+"分";case"second":return n.toString()+"秒";default:return"第 "+n.toString()}},la={ordinalNumber:fa,era:te({values:oa,defaultWidth:"wide"}),quarter:te({values:sa,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:ia,defaultWidth:"wide"}),day:te({values:ua,defaultWidth:"wide"}),dayPeriod:te({values:ca,defaultWidth:"wide",formattingValues:da,defaultFormattingWidth:"wide"})},ha=/^(第\s*)?\d+(日|时|分|秒)?/i,ma=/\d+/i,ya={narrow:/^(前)/i,abbreviated:/^(前)/i,wide:/^(公元前|公元)/i},ga={any:[/^(前)/i,/^(公元)/i]},wa={narrow:/^[1234]/i,abbreviated:/^第[一二三四]刻/i,wide:/^第[一二三四]刻钟/i},ba={any:[/(1|一)/i,/(2|二)/i,/(3|三)/i,/(4|四)/i]},Ma={narrow:/^(一|二|三|四|五|六|七|八|九|十[二一]?)/i,abbreviated:/^(一|二|三|四|五|六|七|八|九|十[二一]?|\d|1[0-2])月/i,wide:/^(一|二|三|四|五|六|七|八|九|十[二一]?)月/i},ka={narrow:[/^一/i,/^二/i,/^三/i,/^四/i,/^五/i,/^六/i,/^七/i,/^八/i,/^九/i,/^十(?!(一|二))/i,/^十一/i,/^十二/i],any:[/^(一|1(?!\d))/i,/^(二|2)/i,/^(三|3)/i,/^(四|4)/i,/^(五|5)/i,/^(六|6)/i,/^(七|7)/i,/^(八|8)/i,/^(九|9)/i,/^(十(?!(一|二))|10)/i,/^(十一|11)/i,/^(十二|12)/i]},Da={narrow:/^[一二三四五六日]/i,short:/^[一二三四五六日]/i,abbreviated:/^周[一二三四五六日]/i,wide:/^星期[一二三四五六日]/i},va={any:[/日/i,/一/i,/二/i,/三/i,/四/i,/五/i,/六/i]},Oa={any:/^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i},Wa={any:{am:/^上午?/i,pm:/^下午?/i,midnight:/^午夜/i,noon:/^[中正]午/i,morning:/^早上/i,afternoon:/^下午/i,evening:/^晚上?/i,night:/^凌晨/i}},Sa={ordinalNumber:Yt({matchPattern:ha,parsePattern:ma,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:ya,defaultMatchWidth:"wide",parsePatterns:ga,defaultParseWidth:"any"}),quarter:ne({matchPatterns:wa,defaultMatchWidth:"wide",parsePatterns:ba,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:Ma,defaultMatchWidth:"wide",parsePatterns:ka,defaultParseWidth:"any"}),day:ne({matchPatterns:Da,defaultMatchWidth:"wide",parsePatterns:va,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:Oa,defaultMatchWidth:"any",parsePatterns:Wa,defaultParseWidth:"any"})},rs={code:"zh-CN",formatDistance:Jr,formatLong:na,formatRelative:aa,localize:la,match:Sa,options:{weekStartsOn:1,firstWeekContainsDate:4}};function Na(e,t,n="long"){return new Intl.DateTimeFormat("en-US",{hour:"numeric",timeZone:e,timeZoneName:n}).format(t).split(/\s/g).slice(2).join(" ")}const qe={},Oe={};function ie(e,t){try{const r=(qe[e]||(qe[e]=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"longOffset"}).format))(t).split("GMT")[1];return r in Oe?Oe[r]:yt(r,r.split(":"))}catch{if(e in Oe)return Oe[e];const n=e==null?void 0:e.match(Ca);return n?yt(e,n.slice(1)):NaN}}const Ca=/([+-]\d\d):?(\d\d)?/;function yt(e,t){const n=+(t[0]||0),r=+(t[1]||0),a=+(t[2]||0)/60;return Oe[e]=n*60+r>0?n*60+r+a:n*60-r-a}class re extends Date{constructor(...t){super(),t.length>1&&typeof t[t.length-1]=="string"&&(this.timeZone=t.pop()),this.internal=new Date,isNaN(ie(this.timeZone,this))?this.setTime(NaN):t.length?typeof t[0]=="number"&&(t.length===1||t.length===2&&typeof t[1]!="number")?this.setTime(t[0]):typeof t[0]=="string"?this.setTime(+new Date(t[0])):t[0]instanceof Date?this.setTime(+t[0]):(this.setTime(+new Date(...t)),Ft(this,t)):this.setTime(Date.now())}static tz(t,...n){return n.length?new re(...n,t):new re(Date.now(),t)}withTimeZone(t){return new re(+this,t)}getTimezoneOffset(){const t=-ie(this.timeZone,this);return t>0?Math.floor(t):Math.ceil(t)}setTime(t){return Date.prototype.setTime.apply(this,arguments),Te(this),+this}[Symbol.for("constructDateFrom")](t){return new re(+new Date(t),this.timeZone)}}const gt=/^(get|set)(?!UTC)/;Object.getOwnPropertyNames(Date.prototype).forEach(e=>{if(!gt.test(e))return;const t=e.replace(gt,"$1UTC");re.prototype[t]&&(e.startsWith("get")?re.prototype[e]=function(){return this.internal[t]()}:(re.prototype[e]=function(){return Date.prototype[t].apply(this.internal,arguments),pa(this),+this},re.prototype[t]=function(){return Date.prototype[t].apply(this,arguments),Te(this),+this}))});function Te(e){e.internal.setTime(+e),e.internal.setUTCSeconds(e.internal.getUTCSeconds()-Math.round(-ie(e.timeZone,e)*60))}function pa(e){Date.prototype.setFullYear.call(e,e.internal.getUTCFullYear(),e.internal.getUTCMonth(),e.internal.getUTCDate()),Date.prototype.setHours.call(e,e.internal.getUTCHours(),e.internal.getUTCMinutes(),e.internal.getUTCSeconds(),e.internal.getUTCMilliseconds()),Ft(e)}function Ft(e,t){const n=Array.isArray(t)?xa(t):+e.internal,r=ie(e.timeZone,e),a=r>0?Math.floor(r):Math.ceil(r),o=new Date(+e);o.setUTCHours(o.getUTCHours()-1);const s=-new Date(+e).getTimezoneOffset(),i=-new Date(+o).getTimezoneOffset(),u=s-i;let c=s;if(u&&s!==a){const I=Date.prototype.getHours.apply(e),B=Array.isArray(t)?t[3]||0:e.internal.getUTCHours();if(I!==B){const A=new Date(+e),Q=s-a;Q&&A.setUTCMinutes(A.getUTCMinutes()+Q);const j=ie(e.timeZone,A);(j>0?Math.floor(j):Math.ceil(j))===a&&(c=i)}}const d=c-a;d&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+d);const l=new Date(+e);l.setUTCSeconds(0);const h=s>0?l.getSeconds():(l.getSeconds()-60)%60,w=Math.round(-(ie(e.timeZone,e)*60))%60;(w||h)&&Date.prototype.setUTCSeconds.call(e,Date.prototype.getUTCSeconds.call(e)+w+h);const D=ie(e.timeZone,e),O=D>0?Math.floor(D):Math.ceil(D),C=-new Date(+e).getTimezoneOffset()-O,b=O!==a,g=C-d,N=O-a,M=n-O*60*1e3,f=N>0&&wt(e)-n===N*60*1e3&&wt(e,M)!==n;if(b&&g&&!f){Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+g);const I=ie(e.timeZone,e),B=I>0?Math.floor(I):Math.ceil(I),A=O-B;A&&g<0&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+A)}Te(e);const Y=(t?n:n+w*1e3)-+e.internal;Y&&Math.abs(Y)<1800*1e3&&(Date.prototype.setTime.call(e,+e+Y),Te(e))}function xa(e){return Date.UTC(e[0],e.length>1?e[1]:0,e.length>2?e[2]:1,...e.slice(3))}function wt(e,t){const n=new Date(t??+e);return n.setUTCSeconds(n.getUTCSeconds()-Math.round(-ie(e.timeZone,n)*60)),+n}class q extends re{static tz(t,...n){return n.length?new q(...n,t):new q(Date.now(),t)}toISOString(){const[t,n,r]=this.tzComponents(),a=`${t}${n}:${r}`;return this.internal.toISOString().slice(0,-1)+a}toString(){return`${this.toDateString()} ${this.toTimeString()}`}toDateString(){const[t,n,r,a]=this.internal.toUTCString().split(" ");return`${t==null?void 0:t.slice(0,-1)} ${r} ${n} ${a}`}toTimeString(){const t=this.internal.toUTCString().split(" ")[4],[n,r,a]=this.tzComponents();return`${t} GMT${n}${r}${a} (${Na(this.timeZone,this)})`}toLocaleString(t,n){return Date.prototype.toLocaleString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}toLocaleDateString(t,n){return Date.prototype.toLocaleDateString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}toLocaleTimeString(t,n){return Date.prototype.toLocaleTimeString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}tzComponents(){const t=this.getTimezoneOffset(),n=t>0?"-":"+",r=String(Math.floor(Math.abs(t)/60)).padStart(2,"0"),a=String(Math.abs(t)%60).padStart(2,"0");return[n,r,a]}withTimeZone(t){return new q(+this,t)}[Symbol.for("constructDateFrom")](t){return new q(+new Date(t),this.timeZone)}}const bt=5,Pa=4;function Ta(e,t){const n=t.startOfMonth(e),r=n.getDay()>0?n.getDay():7,a=t.addDays(e,-r+1),o=t.addDays(a,bt*7-1);return t.getMonth(e)===t.getMonth(o)?bt:Pa}function Bt(e,t){const n=t.startOfMonth(e),r=n.getDay();return r===1?n:r===0?t.addDays(n,-6):t.addDays(n,-1*(r-1))}function Ya(e,t){const n=Bt(e,t),r=Ta(e,t);return t.addDays(n,r*7-1)}const It={...we,labels:{labelDayButton:(e,t,n,r)=>{let a;r&&typeof r.format=="function"?a=r.format.bind(r):a=(s,i)=>ve(s,i,{locale:we,...n});let o=a(e,"PPPP");return t.today&&(o=`Today, ${o}`),t.selected&&(o=`${o}, selected`),o},labelMonthDropdown:"Choose the Month",labelNext:"Go to the Next Month",labelPrevious:"Go to the Previous Month",labelWeekNumber:e=>`Week ${e}`,labelYearDropdown:"Choose the Year",labelGrid:(e,t,n)=>{let r;return n&&typeof n.format=="function"?r=n.format.bind(n):r=(a,o)=>ve(a,o,{locale:we,...t}),r(e,"LLLL yyyy")},labelGridcell:(e,t,n,r)=>{let a;r&&typeof r.format=="function"?a=r.format.bind(r):a=(s,i)=>ve(s,i,{locale:we,...n});let o=a(e,"PPPP");return t!=null&&t.today&&(o=`Today, ${o}`),o},labelNav:"Navigation bar",labelWeekNumberHeader:"Week Number",labelWeekday:(e,t,n)=>{let r;return n&&typeof n.format=="function"?r=n.format.bind(n):r=(a,o)=>ve(a,o,{locale:we,...t}),r(e,"cccc")}}};class X{constructor(t,n){this.today=()=>{var a;if((a=this.overrides)!=null&&a.today)return this.overrides.today();if(this.options.timeZone)return q.tz(this.options.timeZone);const r=this.options.Date??Date;return new r},this.newDate=(r,a,o)=>{var s;return(s=this.overrides)!=null&&s.newDate?this.overrides.newDate(r,a,o):this.options.timeZone?new q(r,a,o,this.options.timeZone):new Date(r,a,o)},this.addDays=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addDays?this.overrides.addDays(r,a):Wt(r,a)},this.addMonths=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addMonths?this.overrides.addMonths(r,a):St(r,a)},this.addWeeks=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addWeeks?this.overrides.addWeeks(r,a):Fn(r,a)},this.addYears=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addYears?this.overrides.addYears(r,a):Bn(r,a)},this.differenceInCalendarDays=(r,a)=>{var o;return(o=this.overrides)!=null&&o.differenceInCalendarDays?this.overrides.differenceInCalendarDays(r,a):Ve(r,a)},this.differenceInCalendarMonths=(r,a)=>{var o;return(o=this.overrides)!=null&&o.differenceInCalendarMonths?this.overrides.differenceInCalendarMonths(r,a):pt(r,a)},this.eachMonthOfInterval=r=>{var a;return(a=this.overrides)!=null&&a.eachMonthOfInterval?this.overrides.eachMonthOfInterval(r):qn(r)},this.eachYearOfInterval=r=>{var i;const a=(i=this.overrides)!=null&&i.eachYearOfInterval?this.overrides.eachYearOfInterval(r):Gn(r),o=new Set(a.map(u=>this.getYear(u)));if(o.size===a.length)return a;const s=[];return o.forEach(u=>{s.push(new Date(u,0,1))}),s},this.endOfBroadcastWeek=r=>{var a;return(a=this.overrides)!=null&&a.endOfBroadcastWeek?this.overrides.endOfBroadcastWeek(r):Ya(r,this)},this.endOfISOWeek=r=>{var a;return(a=this.overrides)!=null&&a.endOfISOWeek?this.overrides.endOfISOWeek(r):Xn(r)},this.endOfMonth=r=>{var a;return(a=this.overrides)!=null&&a.endOfMonth?this.overrides.endOfMonth(r):An(r)},this.endOfWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.endOfWeek?this.overrides.endOfWeek(r,a):Tt(r,this.options)},this.endOfYear=r=>{var a;return(a=this.overrides)!=null&&a.endOfYear?this.overrides.endOfYear(r):Rn(r)},this.format=(r,a,o)=>{var i;const s=(i=this.overrides)!=null&&i.format?this.overrides.format(r,a,this.options):ve(r,a,this.options);return this.options.numerals&&this.options.numerals!=="latn"?this.replaceDigits(s):s},this.getISOWeek=r=>{var a;return(a=this.overrides)!=null&&a.getISOWeek?this.overrides.getISOWeek(r):Qe(r)},this.getMonth=(r,a)=>{var o;return(o=this.overrides)!=null&&o.getMonth?this.overrides.getMonth(r,this.options):qr(r,this.options)},this.getYear=(r,a)=>{var o;return(o=this.overrides)!=null&&o.getYear?this.overrides.getYear(r,this.options):jr(r,this.options)},this.getWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.getWeek?this.overrides.getWeek(r,this.options):Ue(r,this.options)},this.isAfter=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isAfter?this.overrides.isAfter(r,a):Rr(r,a)},this.isBefore=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isBefore?this.overrides.isBefore(r,a):Gr(r,a)},this.isDate=r=>{var a;return(a=this.overrides)!=null&&a.isDate?this.overrides.isDate(r):Ct(r)},this.isSameDay=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isSameDay?this.overrides.isSameDay(r,a):$n(r,a)},this.isSameMonth=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isSameMonth?this.overrides.isSameMonth(r,a):Vr(r,a)},this.isSameYear=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isSameYear?this.overrides.isSameYear(r,a):Qr(r,a)},this.max=r=>{var a;return(a=this.overrides)!=null&&a.max?this.overrides.max(r):In(r)},this.min=r=>{var a;return(a=this.overrides)!=null&&a.min?this.overrides.min(r):Hn(r)},this.setMonth=(r,a)=>{var o;return(o=this.overrides)!=null&&o.setMonth?this.overrides.setMonth(r,a):Ur(r,a)},this.setYear=(r,a)=>{var o;return(o=this.overrides)!=null&&o.setYear?this.overrides.setYear(r,a):Kr(r,a)},this.startOfBroadcastWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.startOfBroadcastWeek?this.overrides.startOfBroadcastWeek(r,this):Bt(r,this)},this.startOfDay=r=>{var a;return(a=this.overrides)!=null&&a.startOfDay?this.overrides.startOfDay(r):Se(r)},this.startOfISOWeek=r=>{var a;return(a=this.overrides)!=null&&a.startOfISOWeek?this.overrides.startOfISOWeek(r):We(r)},this.startOfMonth=r=>{var a;return(a=this.overrides)!=null&&a.startOfMonth?this.overrides.startOfMonth(r):jn(r)},this.startOfWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.startOfWeek?this.overrides.startOfWeek(r,this.options):fe(r,this.options)},this.startOfYear=r=>{var a;return(a=this.overrides)!=null&&a.startOfYear?this.overrides.startOfYear(r):Pt(r)},this.options={locale:It,...t},this.overrides=n}getDigitMap(){const{numerals:t="latn"}=this.options,n=new Intl.NumberFormat("en-US",{numberingSystem:t}),r={};for(let a=0;a<10;a++)r[a.toString()]=n.format(a);return r}replaceDigits(t){const n=this.getDigitMap();return t.replace(/\d/g,r=>n[r]||r)}formatNumber(t){return this.replaceDigits(t.toString())}getMonthYearOrder(){var n;const t=(n=this.options.locale)==null?void 0:n.code;return t&&X.yearFirstLocales.has(t)?"year-first":"month-first"}formatMonthYear(t){const{locale:n,timeZone:r,numerals:a}=this.options,o=n==null?void 0:n.code;if(o&&X.yearFirstLocales.has(o))try{return new Intl.DateTimeFormat(o,{month:"long",year:"numeric",timeZone:r,numberingSystem:a}).format(t)}catch{}const s=this.getMonthYearOrder()==="year-first"?"y LLLL":"LLLL y";return this.format(t,s)}}X.yearFirstLocales=new Set(["eu","hu","ja","ja-Hira","ja-JP","ko","ko-KR","lt","lt-LT","lv","lv-LV","mn","mn-MN","zh","zh-CN","zh-HK","zh-TW"]);const ae=new X;class Ht{constructor(t,n,r=ae){this.date=t,this.displayMonth=n,this.outside=!!(n&&!r.isSameMonth(t,n)),this.dateLib=r,this.isoDate=r.format(t,"yyyy-MM-dd"),this.displayMonthId=r.format(n,"yyyy-MM"),this.dateMonthId=r.format(t,"yyyy-MM")}isEqualTo(t){return this.dateLib.isSameDay(t.date,this.date)&&this.dateLib.isSameMonth(t.displayMonth,this.displayMonth)}}class _a{constructor(t,n){this.date=t,this.weeks=n}}class Ea{constructor(t,n){this.days=n,this.weekNumber=t}}function Fa(e){return y.createElement("span",{...e})}function Ba(e){const{size:t=24,orientation:n="left",className:r,style:a}=e;return y.createElement("svg",{className:r,style:a,width:t,height:t,viewBox:"0 0 24 24"},n==="up"&&y.createElement("polygon",{points:"6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28"}),n==="down"&&y.createElement("polygon",{points:"6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72"}),n==="left"&&y.createElement("polygon",{points:"16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20"}),n==="right"&&y.createElement("polygon",{points:"8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20"}))}function Ia(e){const{day:t,modifiers:n,...r}=e;return y.createElement("td",{...r})}function Ha(e){const{day:t,modifiers:n,...r}=e,a=y.useRef(null);return y.useEffect(()=>{var o;n.focused&&((o=a.current)==null||o.focus())},[n.focused]),y.createElement("button",{ref:a,...r})}var m;(function(e){e.Root="root",e.Chevron="chevron",e.Day="day",e.DayButton="day_button",e.CaptionLabel="caption_label",e.Dropdowns="dropdowns",e.Dropdown="dropdown",e.DropdownRoot="dropdown_root",e.Footer="footer",e.MonthGrid="month_grid",e.MonthCaption="month_caption",e.MonthsDropdown="months_dropdown",e.Month="month",e.Months="months",e.Nav="nav",e.NextMonthButton="button_next",e.PreviousMonthButton="button_previous",e.Week="week",e.Weeks="weeks",e.Weekday="weekday",e.Weekdays="weekdays",e.WeekNumber="week_number",e.WeekNumberHeader="week_number_header",e.YearsDropdown="years_dropdown"})(m||(m={}));var H;(function(e){e.disabled="disabled",e.hidden="hidden",e.outside="outside",e.focused="focused",e.today="today"})(H||(H={}));var J;(function(e){e.range_end="range_end",e.range_middle="range_middle",e.range_start="range_start",e.selected="selected"})(J||(J={}));var G;(function(e){e.weeks_before_enter="weeks_before_enter",e.weeks_before_exit="weeks_before_exit",e.weeks_after_enter="weeks_after_enter",e.weeks_after_exit="weeks_after_exit",e.caption_after_enter="caption_after_enter",e.caption_after_exit="caption_after_exit",e.caption_before_enter="caption_before_enter",e.caption_before_exit="caption_before_exit"})(G||(G={}));const $t=E.createContext(void 0);function Ye(){const e=E.useContext($t);if(e===void 0)throw new Error("useDayPicker() must be used within a custom component.");return e}function $a(e){const{options:t,className:n,...r}=e,{classNames:a,components:o,styles:s}=Ye(),i=[a[m.Dropdown],n].join(" "),u=t==null?void 0:t.find(({value:c})=>c===r.value);return y.createElement("span",{"data-disabled":r.disabled,className:a[m.DropdownRoot],style:s==null?void 0:s[m.DropdownRoot]},y.createElement(o.Select,{className:i,...r},t==null?void 0:t.map(({value:c,label:d,disabled:l})=>y.createElement(o.Option,{key:c,value:c,disabled:l},d))),y.createElement("span",{className:a[m.CaptionLabel],style:s==null?void 0:s[m.CaptionLabel],"aria-hidden":!0},u==null?void 0:u.label,y.createElement(o.Chevron,{orientation:"down",size:18,className:a[m.Chevron],style:s==null?void 0:s[m.Chevron]})))}function za(e){return y.createElement("div",{...e})}function Aa(e){return y.createElement("div",{...e})}function qa(e){const{calendarMonth:t,displayIndex:n,...r}=e;return y.createElement("div",{...r},e.children)}function ja(e){const{calendarMonth:t,displayIndex:n,...r}=e;return y.createElement("div",{...r})}function Ra(e){return y.createElement("table",{...e})}function Ga(e){return y.createElement("div",{...e})}function Xa(e){const{components:t}=Ye();return y.createElement(t.Dropdown,{...e})}function Va(e){const{onPreviousClick:t,onNextClick:n,previousMonth:r,nextMonth:a,...o}=e,{components:s,classNames:i,styles:u,labels:{labelPrevious:c,labelNext:d}}=Ye(),l=E.useCallback(w=>{a&&(n==null||n(w))},[a,n]),h=E.useCallback(w=>{r&&(t==null||t(w))},[r,t]);return y.createElement("nav",{...o},y.createElement(s.PreviousMonthButton,{type:"button",className:i[m.PreviousMonthButton],style:u==null?void 0:u[m.PreviousMonthButton],tabIndex:r?void 0:-1,"aria-disabled":r?void 0:!0,"aria-label":c(r),onClick:h},y.createElement(s.Chevron,{disabled:r?void 0:!0,className:i[m.Chevron],style:u==null?void 0:u[m.Chevron],orientation:"left"})),y.createElement(s.NextMonthButton,{type:"button",className:i[m.NextMonthButton],style:u==null?void 0:u[m.NextMonthButton],tabIndex:a?void 0:-1,"aria-disabled":a?void 0:!0,"aria-label":d(a),onClick:l},y.createElement(s.Chevron,{disabled:a?void 0:!0,orientation:"right",className:i[m.Chevron],style:u==null?void 0:u[m.Chevron]})))}function Qa(e){return y.createElement("button",{...e})}function Ua(e){return y.createElement("option",{...e})}function Ka(e){return y.createElement("button",{...e})}function Za(e){const{rootRef:t,...n}=e;return y.createElement("div",{...n,ref:t})}function Ja(e){return y.createElement("select",{...e})}function La(e){const{week:t,...n}=e;return y.createElement("tr",{...n})}function eo(e){return y.createElement("th",{...e})}function to(e){return y.createElement("thead",{"aria-hidden":!0},y.createElement("tr",{...e}))}function no(e){const{week:t,...n}=e;return y.createElement("th",{...n})}function ro(e){return y.createElement("th",{...e})}function ao(e){return y.createElement("tbody",{...e})}function oo(e){const{components:t}=Ye();return y.createElement(t.Dropdown,{...e})}const so=Object.freeze(Object.defineProperty({__proto__:null,CaptionLabel:Fa,Chevron:Ba,Day:Ia,DayButton:Ha,Dropdown:$a,DropdownNav:za,Footer:Aa,Month:qa,MonthCaption:ja,MonthGrid:Ra,Months:Ga,MonthsDropdown:Xa,Nav:Va,NextMonthButton:Qa,Option:Ua,PreviousMonthButton:Ka,Root:Za,Select:Ja,Week:La,WeekNumber:no,WeekNumberHeader:ro,Weekday:eo,Weekdays:to,Weeks:ao,YearsDropdown:oo},Symbol.toStringTag,{value:"Module"}));function ue(e,t,n=!1,r=ae){let{from:a,to:o}=e;const{differenceInCalendarDays:s,isSameDay:i}=r;return a&&o?(s(o,a)<0&&([a,o]=[o,a]),s(t,a)>=(n?1:0)&&s(o,t)>=(n?1:0)):!n&&o?i(o,t):!n&&a?i(a,t):!1}function Ke(e){return!!(e&&typeof e=="object"&&"before"in e&&"after"in e)}function _e(e){return!!(e&&typeof e=="object"&&"from"in e)}function Ze(e){return!!(e&&typeof e=="object"&&"after"in e)}function Je(e){return!!(e&&typeof e=="object"&&"before"in e)}function zt(e){return!!(e&&typeof e=="object"&&"dayOfWeek"in e)}function At(e,t){return Array.isArray(e)&&e.every(t.isDate)}function ce(e,t,n=ae){const r=Array.isArray(t)?t:[t],{isSameDay:a,differenceInCalendarDays:o,isAfter:s}=n;return r.some(i=>{if(typeof i=="boolean")return i;if(n.isDate(i))return a(e,i);if(At(i,n))return i.some(u=>a(e,u));if(_e(i))return ue(i,e,!1,n);if(zt(i))return Array.isArray(i.dayOfWeek)?i.dayOfWeek.includes(e.getDay()):i.dayOfWeek===e.getDay();if(Ke(i)){const u=o(i.before,e),c=o(i.after,e),d=u>0,l=c<0;return s(i.before,i.after)?l&&d:d||l}return Ze(i)?o(e,i.after)>0:Je(i)?o(i.before,e)>0:typeof i=="function"?i(e):!1})}function io(e,t,n,r,a){const{disabled:o,hidden:s,modifiers:i,showOutsideDays:u,broadcastCalendar:c,today:d=a.today()}=t,{isSameDay:l,isSameMonth:h,startOfMonth:w,isBefore:D,endOfMonth:O,isAfter:v}=a,C=n&&w(n),b=r&&O(r),g={[H.focused]:[],[H.outside]:[],[H.disabled]:[],[H.hidden]:[],[H.today]:[]},N={};for(const M of e){const{date:f,displayMonth:S}=M,Y=!!(S&&!h(f,S)),I=!!(C&&D(f,C)),B=!!(b&&v(f,b)),A=!!(o&&ce(f,o,a)),Q=!!(s&&ce(f,s,a))||I||B||!c&&!u&&Y||c&&u===!1&&Y,j=l(f,d);Y&&g.outside.push(M),A&&g.disabled.push(M),Q&&g.hidden.push(M),j&&g.today.push(M),i&&Object.keys(i).forEach(R=>{const me=i==null?void 0:i[R];me&&ce(f,me,a)&&(N[R]?N[R].push(M):N[R]=[M])})}return M=>{const f={[H.focused]:!1,[H.disabled]:!1,[H.hidden]:!1,[H.outside]:!1,[H.today]:!1},S={};for(const Y in g){const I=g[Y];f[Y]=I.some(B=>B===M)}for(const Y in N)S[Y]=N[Y].some(I=>I===M);return{...f,...S}}}function uo(e,t,n={}){return Object.entries(e).filter(([,a])=>a===!0).reduce((a,[o])=>(n[o]?a.push(n[o]):t[H[o]]?a.push(t[H[o]]):t[J[o]]&&a.push(t[J[o]]),a),[t[m.Day]])}function co(e){return{...so,...e}}function fo(e){const t={"data-mode":e.mode??void 0,"data-required":"required"in e?e.required:void 0,"data-multiple-months":e.numberOfMonths&&e.numberOfMonths>1||void 0,"data-week-numbers":e.showWeekNumber||void 0,"data-broadcast-calendar":e.broadcastCalendar||void 0,"data-nav-layout":e.navLayout||void 0};return Object.entries(e).forEach(([n,r])=>{n.startsWith("data-")&&(t[n]=r)}),t}function Le(){const e={};for(const t in m)e[m[t]]=`rdp-${m[t]}`;for(const t in H)e[H[t]]=`rdp-${H[t]}`;for(const t in J)e[J[t]]=`rdp-${J[t]}`;for(const t in G)e[G[t]]=`rdp-${G[t]}`;return e}function lo(e,t,n){return(n??new X(t)).formatMonthYear(e)}function ho(e,t,n){return(n??new X(t)).format(e,"d")}function mo(e,t=ae){return t.format(e,"LLLL")}function yo(e,t,n){return(n??new X(t)).format(e,"cccccc")}function go(e,t=ae){return e<10?t.formatNumber(`0${e.toLocaleString()}`):t.formatNumber(`${e.toLocaleString()}`)}function wo(){return""}function bo(e,t=ae){return t.format(e,"yyyy")}const Mo=Object.freeze(Object.defineProperty({__proto__:null,formatCaption:lo,formatDay:ho,formatMonthDropdown:mo,formatWeekNumber:go,formatWeekNumberHeader:wo,formatWeekdayName:yo,formatYearDropdown:bo},Symbol.toStringTag,{value:"Module"}));function ko(e){return{...Mo,...e}}function qt(e,t,n,r){let a=(r??new X(n)).format(e,"PPPP");return t.today&&(a=`Today, ${a}`),t.selected&&(a=`${a}, selected`),a}function jt(e,t,n){return(n??new X(t)).formatMonthYear(e)}function Rt(e,t,n,r){let a=(r??new X(n)).format(e,"PPPP");return t!=null&&t.today&&(a=`Today, ${a}`),a}function Gt(e){return"Choose the Month"}function Xt(){return""}const Do="Go to the Next Month";function Vt(e,t){return Do}function Qt(e){return"Go to the Previous Month"}function Ut(e,t,n){return(n??new X(t)).format(e,"cccc")}function Kt(e,t){return`Week ${e}`}function Zt(e){return"Week Number"}function Jt(e){return"Choose the Year"}const vo=Object.freeze(Object.defineProperty({__proto__:null,labelDayButton:qt,labelGrid:jt,labelGridcell:Rt,labelMonthDropdown:Gt,labelNav:Xt,labelNext:Vt,labelPrevious:Qt,labelWeekNumber:Kt,labelWeekNumberHeader:Zt,labelWeekday:Ut,labelYearDropdown:Jt},Symbol.toStringTag,{value:"Module"})),Z=(e,t,n)=>t||(n?typeof n=="function"?n:(...r)=>n:e);function Oo(e,t){var r;const n=((r=t.locale)==null?void 0:r.labels)??{};return{...vo,...e??{},labelDayButton:Z(qt,e==null?void 0:e.labelDayButton,n.labelDayButton),labelMonthDropdown:Z(Gt,e==null?void 0:e.labelMonthDropdown,n.labelMonthDropdown),labelNext:Z(Vt,e==null?void 0:e.labelNext,n.labelNext),labelPrevious:Z(Qt,e==null?void 0:e.labelPrevious,n.labelPrevious),labelWeekNumber:Z(Kt,e==null?void 0:e.labelWeekNumber,n.labelWeekNumber),labelYearDropdown:Z(Jt,e==null?void 0:e.labelYearDropdown,n.labelYearDropdown),labelGrid:Z(jt,e==null?void 0:e.labelGrid,n.labelGrid),labelGridcell:Z(Rt,e==null?void 0:e.labelGridcell,n.labelGridcell),labelNav:Z(Xt,e==null?void 0:e.labelNav,n.labelNav),labelWeekNumberHeader:Z(Zt,e==null?void 0:e.labelWeekNumberHeader,n.labelWeekNumberHeader),labelWeekday:Z(Ut,e==null?void 0:e.labelWeekday,n.labelWeekday)}}function Wo(e,t,n,r,a){const{startOfMonth:o,startOfYear:s,endOfYear:i,eachMonthOfInterval:u,getMonth:c}=a;return u({start:s(e),end:i(e)}).map(h=>{const w=r.formatMonthDropdown(h,a),D=c(h),O=t&&ho(n)||!1;return{value:D,label:w,disabled:O}})}function So(e,t={},n={}){let r={...t==null?void 0:t[m.Day]};return Object.entries(e).filter(([,a])=>a===!0).forEach(([a])=>{r={...r,...n==null?void 0:n[a]}}),r}function No(e,t,n,r){const a=r??e.today(),o=n?e.startOfBroadcastWeek(a,e):t?e.startOfISOWeek(a):e.startOfWeek(a),s=[];for(let i=0;i<7;i++){const u=e.addDays(o,i);s.push(u)}return s}function Co(e,t,n,r,a=!1){if(!e||!t)return;const{startOfYear:o,endOfYear:s,eachYearOfInterval:i,getYear:u}=r,c=o(e),d=s(t),l=i({start:c,end:d});return a&&l.reverse(),l.map(h=>{const w=n.formatYearDropdown(h,r);return{value:u(h),label:w,disabled:!1}})}function po(e,t={}){var i;const{weekStartsOn:n,locale:r}=t,a=n??((i=r==null?void 0:r.options)==null?void 0:i.weekStartsOn)??0,o=u=>{const c=typeof u=="number"||typeof u=="string"?new Date(u):u;return new q(c.getFullYear(),c.getMonth(),c.getDate(),12,0,0,e)},s=u=>{const c=o(u);return new Date(c.getFullYear(),c.getMonth(),c.getDate(),0,0,0,0)};return{today:()=>o(q.tz(e)),newDate:(u,c,d)=>new q(u,c,d,12,0,0,e),startOfDay:u=>o(u),startOfWeek:(u,c)=>{const d=o(u),l=(c==null?void 0:c.weekStartsOn)??a,h=(d.getDay()-l+7)%7;return d.setDate(d.getDate()-h),d},startOfISOWeek:u=>{const c=o(u),d=(c.getDay()-1+7)%7;return c.setDate(c.getDate()-d),c},startOfMonth:u=>{const c=o(u);return c.setDate(1),c},startOfYear:u=>{const c=o(u);return c.setMonth(0,1),c},endOfWeek:(u,c)=>{const d=o(u),w=((((c==null?void 0:c.weekStartsOn)??a)+6)%7-d.getDay()+7)%7;return d.setDate(d.getDate()+w),d},endOfISOWeek:u=>{const c=o(u),d=(7-c.getDay())%7;return c.setDate(c.getDate()+d),c},endOfMonth:u=>{const c=o(u);return c.setMonth(c.getMonth()+1,0),c},endOfYear:u=>{const c=o(u);return c.setMonth(11,31),c},eachMonthOfInterval:u=>{const c=o(u.start),d=o(u.end),l=[],h=new q(c.getFullYear(),c.getMonth(),1,12,0,0,e),w=d.getFullYear()*12+d.getMonth();for(;h.getFullYear()*12+h.getMonth()<=w;)l.push(new q(h,e)),h.setMonth(h.getMonth()+1,1);return l},addDays:(u,c)=>{const d=o(u);return d.setDate(d.getDate()+c),d},addWeeks:(u,c)=>{const d=o(u);return d.setDate(d.getDate()+c*7),d},addMonths:(u,c)=>{const d=o(u);return d.setMonth(d.getMonth()+c),d},addYears:(u,c)=>{const d=o(u);return d.setFullYear(d.getFullYear()+c),d},eachYearOfInterval:u=>{const c=o(u.start),d=o(u.end),l=[],h=new q(c.getFullYear(),0,1,12,0,0,e);for(;h.getFullYear()<=d.getFullYear();)l.push(new q(h,e)),h.setFullYear(h.getFullYear()+1,0,1);return l},getWeek:(u,c)=>{var l;const d=s(u);return Ue(d,{weekStartsOn:(c==null?void 0:c.weekStartsOn)??a,firstWeekContainsDate:(c==null?void 0:c.firstWeekContainsDate)??((l=r==null?void 0:r.options)==null?void 0:l.firstWeekContainsDate)??1})},getISOWeek:u=>{const c=s(u);return Qe(c)},differenceInCalendarDays:(u,c)=>{const d=s(u),l=s(c);return Ve(d,l)},differenceInCalendarMonths:(u,c)=>{const d=s(u),l=s(c);return pt(d,l)}}}const Ce=e=>e instanceof HTMLElement?e:null,je=e=>[...e.querySelectorAll("[data-animated-month]")??[]],xo=e=>Ce(e.querySelector("[data-animated-month]")),Re=e=>Ce(e.querySelector("[data-animated-caption]")),Ge=e=>Ce(e.querySelector("[data-animated-weeks]")),Po=e=>Ce(e.querySelector("[data-animated-nav]")),To=e=>Ce(e.querySelector("[data-animated-weekdays]"));function Yo(e,t,{classNames:n,months:r,focused:a,dateLib:o}){const s=E.useRef(null),i=E.useRef(r),u=E.useRef(!1);E.useLayoutEffect(()=>{const c=i.current;if(i.current=r,!t||!e.current||!(e.current instanceof HTMLElement)||r.length===0||c.length===0||r.length!==c.length)return;const d=o.isSameMonth(r[0].date,c[0].date),l=o.isAfter(r[0].date,c[0].date),h=l?n[G.caption_after_enter]:n[G.caption_before_enter],w=l?n[G.weeks_after_enter]:n[G.weeks_before_enter],D=s.current,O=e.current.cloneNode(!0);if(O instanceof HTMLElement?(je(O).forEach(g=>{if(!(g instanceof HTMLElement))return;const N=xo(g);N&&g.contains(N)&&g.removeChild(N);const M=Re(g);M&&M.classList.remove(h);const f=Ge(g);f&&f.classList.remove(w)}),s.current=O):s.current=null,u.current||d||a)return;const v=D instanceof HTMLElement?je(D):[],C=je(e.current);if(C!=null&&C.every(b=>b instanceof HTMLElement)&&(v!=null&&v.every(b=>b instanceof HTMLElement))){u.current=!0,e.current.style.isolation="isolate";const b=Po(e.current);b&&(b.style.zIndex="1"),C.forEach((g,N)=>{const M=v[N];if(!M)return;g.style.position="relative",g.style.overflow="hidden";const f=Re(g);f&&f.classList.add(h);const S=Ge(g);S&&S.classList.add(w);const Y=()=>{u.current=!1,e.current&&(e.current.style.isolation=""),b&&(b.style.zIndex=""),f&&f.classList.remove(h),S&&S.classList.remove(w),g.style.position="",g.style.overflow="",g.contains(M)&&g.removeChild(M)};M.style.pointerEvents="none",M.style.position="absolute",M.style.overflow="hidden",M.setAttribute("aria-hidden","true");const I=To(M);I&&(I.style.opacity="0");const B=Re(M);B&&(B.classList.add(l?n[G.caption_before_exit]:n[G.caption_after_exit]),B.addEventListener("animationend",Y));const A=Ge(M);A&&A.classList.add(l?n[G.weeks_before_exit]:n[G.weeks_after_exit]),g.insertBefore(M,g.firstChild)})}})}function _o(e,t,n,r){const a=e[0],o=e[e.length-1],{ISOWeek:s,fixedWeeks:i,broadcastCalendar:u}=n??{},{addDays:c,differenceInCalendarDays:d,differenceInCalendarMonths:l,endOfBroadcastWeek:h,endOfISOWeek:w,endOfMonth:D,endOfWeek:O,isAfter:v,startOfBroadcastWeek:C,startOfISOWeek:b,startOfWeek:g}=r,N=u?C(a,r):s?b(a):g(a),M=u?h(o):s?w(D(o)):O(D(o)),f=t&&(u?h(t):s?w(t):O(t)),S=f&&v(M,f)?f:M,Y=d(S,N),I=l(o,a)+1,B=[];for(let j=0;j<=Y;j++){const R=c(N,j);B.push(R)}const Q=(u?35:42)*I;if(i&&B.length{const a=r.weeks.reduce((o,s)=>o.concat(s.days.slice()),t.slice());return n.concat(a.slice())},t.slice())}function Fo(e,t,n,r){const{numberOfMonths:a=1}=n,o=[];for(let s=0;st)break;o.push(i)}return o}function Mt(e,t,n,r){const{month:a,defaultMonth:o,today:s=r.today(),numberOfMonths:i=1}=e;let u=a||o||s;const{differenceInCalendarMonths:c,addMonths:d,startOfMonth:l}=r;if(n&&c(n,u){const C=n.broadcastCalendar?l(v,r):n.ISOWeek?h(v):w(v),b=n.broadcastCalendar?o(v):n.ISOWeek?s(i(v)):u(i(v)),g=t.filter(S=>S>=C&&S<=b),N=n.broadcastCalendar?35:42;if(n.fixedWeeks&&g.length{const I=N-g.length;return Y>b&&Y<=a(b,I)});g.push(...S)}const M=g.reduce((S,Y)=>{const I=n.ISOWeek?c(Y):d(Y),B=S.find(Q=>Q.weekNumber===I),A=new Ht(Y,v,r);return B?B.days.push(A):S.push(new Ea(I,[A])),S},[]),f=new _a(v,M);return O.push(f),O},[]);return n.reverseMonths?D.reverse():D}function Io(e,t){let{startMonth:n,endMonth:r}=e;const{startOfYear:a,startOfDay:o,startOfMonth:s,endOfMonth:i,addYears:u,endOfYear:c,today:d}=t,l=e.captionLayout==="dropdown"||e.captionLayout==="dropdown-years";return n?n=s(n):!n&&l&&(n=a(u(e.today??d(),-100))),r?r=i(r):!r&&l&&(r=c(e.today??d())),[n&&o(n),r&&o(r)]}function Ho(e,t,n,r){if(n.disableNavigation)return;const{pagedNavigation:a,numberOfMonths:o=1}=n,{startOfMonth:s,addMonths:i,differenceInCalendarMonths:u}=r,c=a?o:1,d=s(e);if(!t)return i(d,c);if(!(u(t,e)n.concat(r.weeks.slice()),t.slice())}function Ee(e,t){const[n,r]=E.useState(e);return[t===void 0?n:t,r]}function Ao(e,t){var N;const[n,r]=Io(e,t),{startOfMonth:a,endOfMonth:o}=t,s=Mt(e,n,r,t),[i,u]=Ee(s,e.month?s:void 0);E.useEffect(()=>{const M=Mt(e,n,r,t);u(M)},[e.timeZone]);const{months:c,weeks:d,days:l,previousMonth:h,nextMonth:w}=E.useMemo(()=>{const M=Fo(i,r,{numberOfMonths:e.numberOfMonths},t),f=_o(M,e.endMonth?o(e.endMonth):void 0,{ISOWeek:e.ISOWeek,fixedWeeks:e.fixedWeeks,broadcastCalendar:e.broadcastCalendar},t),S=Bo(M,f,{broadcastCalendar:e.broadcastCalendar,fixedWeeks:e.fixedWeeks,ISOWeek:e.ISOWeek,reverseMonths:e.reverseMonths},t),Y=zo(S),I=Eo(S),B=$o(i,n,e,t),A=Ho(i,r,e,t);return{months:S,weeks:Y,days:I,previousMonth:B,nextMonth:A}},[t,i.getTime(),r==null?void 0:r.getTime(),n==null?void 0:n.getTime(),e.disableNavigation,e.broadcastCalendar,(N=e.endMonth)==null?void 0:N.getTime(),e.fixedWeeks,e.ISOWeek,e.numberOfMonths,e.pagedNavigation,e.reverseMonths]),{disableNavigation:D,onMonthChange:O}=e,v=M=>d.some(f=>f.days.some(S=>S.isEqualTo(M))),C=M=>{if(D)return;let f=a(M);n&&fa(r)&&(f=a(r)),u(f),O==null||O(f)};return{months:c,weeks:d,days:l,navStart:n,navEnd:r,previousMonth:h,nextMonth:w,goToMonth:C,goToDay:M=>{v(M)||C(M.date)}}}var ee;(function(e){e[e.Today=0]="Today",e[e.Selected=1]="Selected",e[e.LastFocused=2]="LastFocused",e[e.FocusedModifier=3]="FocusedModifier"})(ee||(ee={}));function kt(e){return!e[H.disabled]&&!e[H.hidden]&&!e[H.outside]}function qo(e,t,n,r){let a,o=-1;for(const s of e){const i=t(s);kt(i)&&(i[H.focused]&&okt(t(s)))),a}function jo(e,t,n,r,a,o,s){const{ISOWeek:i,broadcastCalendar:u}=o,{addDays:c,addMonths:d,addWeeks:l,addYears:h,endOfBroadcastWeek:w,endOfISOWeek:D,endOfWeek:O,max:v,min:C,startOfBroadcastWeek:b,startOfISOWeek:g,startOfWeek:N}=s;let f={day:c,week:l,month:d,year:h,startOfWeek:S=>u?b(S,s):i?g(S):N(S),endOfWeek:S=>u?w(S):i?D(S):O(S)}[e](n,t==="after"?1:-1);return t==="before"&&r?f=v([r,f]):t==="after"&&a&&(f=C([a,f])),f}function Lt(e,t,n,r,a,o,s,i=0){if(i>365)return;const u=jo(e,t,n.date,r,a,o,s),c=!!(o.disabled&&ce(u,o.disabled,s)),d=!!(o.hidden&&ce(u,o.hidden,s)),l=u,h=new Ht(u,l,s);return!c&&!d?h:Lt(e,t,h,r,a,o,s,i+1)}function Ro(e,t,n,r,a){const{autoFocus:o}=e,[s,i]=E.useState(),u=qo(t.days,n,r||(()=>!1),s),[c,d]=E.useState(o?u:void 0);return{isFocusTarget:O=>!!(u!=null&&u.isEqualTo(O)),setFocused:d,focused:c,blur:()=>{i(c),d(void 0)},moveFocus:(O,v)=>{if(!c)return;const C=Lt(O,v,c,t.navStart,t.navEnd,e,a);C&&(e.disableNavigation&&!t.days.some(g=>g.isEqualTo(C))||(t.goToDay(C),d(C)))}}}function Go(e,t){const{selected:n,required:r,onSelect:a}=e,[o,s]=Ee(n,a?n:void 0),i=a?n:o,{isSameDay:u}=t,c=w=>(i==null?void 0:i.some(D=>u(D,w)))??!1,{min:d,max:l}=e;return{selected:i,select:(w,D,O)=>{let v=[...i??[]];if(c(w)){if((i==null?void 0:i.length)===d||r&&(i==null?void 0:i.length)===1)return;v=i==null?void 0:i.filter(C=>!u(C,w))}else(i==null?void 0:i.length)===l?v=[w]:v=[...v,w];return a||s(v),a==null||a(v,w,D,O),v},isSelected:c}}function Xo(e,t,n=0,r=0,a=!1,o=ae){const{from:s,to:i}=t||{},{isSameDay:u,isAfter:c,isBefore:d}=o;let l;if(!s&&!i)l={from:e,to:n>0?void 0:e};else if(s&&!i)u(s,e)?n===0?l={from:s,to:e}:a?l={from:s,to:void 0}:l=void 0:d(e,s)?l={from:e,to:s}:l={from:s,to:e};else if(s&&i)if(u(s,e)&&u(i,e))a?l={from:s,to:i}:l=void 0;else if(u(s,e))l={from:s,to:n>0?void 0:e};else if(u(i,e))l={from:e,to:n>0?void 0:e};else if(d(e,s))l={from:e,to:i};else if(c(e,s))l={from:s,to:e};else if(c(e,i))l={from:s,to:e};else throw new Error("Invalid range");if(l!=null&&l.from&&(l!=null&&l.to)){const h=o.differenceInCalendarDays(l.to,l.from);r>0&&h>r?l={from:e,to:void 0}:n>1&&htypeof i!="function").some(i=>typeof i=="boolean"?i:n.isDate(i)?ue(e,i,!1,n):At(i,n)?i.some(u=>ue(e,u,!1,n)):_e(i)?i.from&&i.to?Dt(e,{from:i.from,to:i.to},n):!1:zt(i)?Vo(e,i.dayOfWeek,n):Ke(i)?n.isAfter(i.before,i.after)?Dt(e,{from:n.addDays(i.after,1),to:n.addDays(i.before,-1)},n):ce(e.from,i,n)||ce(e.to,i,n):Ze(i)||Je(i)?ce(e.from,i,n)||ce(e.to,i,n):!1))return!0;const s=r.filter(i=>typeof i=="function");if(s.length){let i=e.from;const u=n.differenceInCalendarDays(e.to,e.from);for(let c=0;c<=u;c++){if(s.some(d=>d(i)))return!0;i=n.addDays(i,1)}}return!1}function Uo(e,t){const{disabled:n,excludeDisabled:r,resetOnSelect:a,selected:o,required:s,onSelect:i}=e,[u,c]=Ee(o,i?o:void 0),d=i?o:u;return{selected:d,select:(w,D,O)=>{const{min:v,max:C}=e;let b;if(w){const g=d==null?void 0:d.from,N=d==null?void 0:d.to,M=!!g&&!!N,f=!!g&&!!N&&t.isSameDay(g,N)&&t.isSameDay(w,g);a&&(M||!(d!=null&&d.from))?!s&&f?b=void 0:b={from:w,to:void 0}:b=Xo(w,d,v,C,s,t)}return r&&n&&(b!=null&&b.from)&&b.to&&Qo({from:b.from,to:b.to},n,t)&&(b.from=w,b.to=void 0),i||c(b),i==null||i(b,w,D,O),b},isSelected:w=>d&&ue(d,w,!1,t)}}function Ko(e,t){const{selected:n,required:r,onSelect:a}=e,[o,s]=Ee(n,a?n:void 0),i=a?n:o,{isSameDay:u}=t;return{selected:i,select:(l,h,w)=>{let D=l;return!r&&i&&i&&u(l,i)&&(D=void 0),a||s(D),a==null||a(D,l,h,w),D},isSelected:l=>i?u(i,l):!1}}function Zo(e,t){const n=Ko(e,t),r=Go(e,t),a=Uo(e,t);switch(e.mode){case"single":return n;case"multiple":return r;case"range":return a;default:return}}function V(e,t){return e instanceof q&&e.timeZone===t?e:new q(e,t)}function ge(e,t,n){return V(e,t)}function vt(e,t,n){return typeof e=="boolean"||typeof e=="function"?e:e instanceof Date?ge(e,t):Array.isArray(e)?e.map(r=>r instanceof Date?ge(r,t):r):_e(e)?{...e,from:e.from?V(e.from,t):e.from,to:e.to?V(e.to,t):e.to}:Ke(e)?{before:ge(e.before,t),after:ge(e.after,t)}:Ze(e)?{after:ge(e.after,t)}:Je(e)?{before:ge(e.before,t)}:e}function Xe(e,t,n){return e&&(Array.isArray(e)?e.map(r=>vt(r,t)):vt(e,t))}function Jo(e){var st;let t=e;const n=t.timeZone;if(n&&(t={...e,timeZone:n},t.today&&(t.today=V(t.today,n)),t.month&&(t.month=V(t.month,n)),t.defaultMonth&&(t.defaultMonth=V(t.defaultMonth,n)),t.startMonth&&(t.startMonth=V(t.startMonth,n)),t.endMonth&&(t.endMonth=V(t.endMonth,n)),t.mode==="single"&&t.selected?t.selected=V(t.selected,n):t.mode==="multiple"&&t.selected?t.selected=(st=t.selected)==null?void 0:st.map(k=>V(k,n)):t.mode==="range"&&t.selected&&(t.selected={from:t.selected.from?V(t.selected.from,n):t.selected.from,to:t.selected.to?V(t.selected.to,n):t.selected.to}),t.disabled!==void 0&&(t.disabled=Xe(t.disabled,n)),t.hidden!==void 0&&(t.hidden=Xe(t.hidden,n)),t.modifiers)){const k={};Object.keys(t.modifiers).forEach(p=>{var W;k[p]=Xe((W=t.modifiers)==null?void 0:W[p],n)}),t.modifiers=k}const{components:r,formatters:a,labels:o,dateLib:s,locale:i,classNames:u}=E.useMemo(()=>{const k={...It,...t.locale},p=t.broadcastCalendar?1:t.weekStartsOn,W=t.noonSafe&&t.timeZone?po(t.timeZone,{weekStartsOn:p,locale:k}):void 0,$=t.dateLib&&W?{...W,...t.dateLib}:t.dateLib??W,P=new X({locale:k,weekStartsOn:p,firstWeekContainsDate:t.firstWeekContainsDate,useAdditionalWeekYearTokens:t.useAdditionalWeekYearTokens,useAdditionalDayOfYearTokens:t.useAdditionalDayOfYearTokens,timeZone:t.timeZone,numerals:t.numerals},$);return{dateLib:P,components:co(t.components),formatters:ko(t.formatters),labels:Oo(t.labels,P.options),locale:k,classNames:{...Le(),...t.classNames}}},[t.locale,t.broadcastCalendar,t.weekStartsOn,t.firstWeekContainsDate,t.useAdditionalWeekYearTokens,t.useAdditionalDayOfYearTokens,t.timeZone,t.numerals,t.dateLib,t.noonSafe,t.components,t.formatters,t.labels,t.classNames]);t.today||(t={...t,today:s.today()});const{captionLayout:c,mode:d,navLayout:l,numberOfMonths:h=1,onDayBlur:w,onDayClick:D,onDayFocus:O,onDayKeyDown:v,onDayMouseEnter:C,onDayMouseLeave:b,onNextClick:g,onPrevClick:N,showWeekNumber:M,styles:f}=t,{formatCaption:S,formatDay:Y,formatMonthDropdown:I,formatWeekNumber:B,formatWeekNumberHeader:A,formatWeekdayName:Q,formatYearDropdown:j}=a,R=Ao(t,s),{days:me,months:Me,navStart:Fe,navEnd:Be,previousMonth:U,nextMonth:K,goToMonth:oe}=R,Ie=io(me,t,Fe,Be,s),{isSelected:ke,select:De,selected:pe}=Zo(t,s)??{},{blur:et,focused:xe,isFocusTarget:en,moveFocus:tt,setFocused:Pe}=Ro(t,R,Ie,ke??(()=>!1),s),{labelDayButton:tn,labelGridcell:nn,labelGrid:rn,labelMonthDropdown:an,labelNav:nt,labelPrevious:on,labelNext:sn,labelWeekday:un,labelWeekNumber:cn,labelWeekNumberHeader:dn,labelYearDropdown:fn}=o,ln=E.useMemo(()=>No(s,t.ISOWeek,t.broadcastCalendar,t.today),[s,t.ISOWeek,t.broadcastCalendar,t.today]),rt=d!==void 0||D!==void 0,He=E.useCallback(()=>{U&&(oe(U),N==null||N(U))},[U,oe,N]),$e=E.useCallback(()=>{K&&(oe(K),g==null||g(K))},[oe,K,g]),hn=E.useCallback((k,p)=>W=>{W.preventDefault(),W.stopPropagation(),Pe(k),!p.disabled&&(De==null||De(k.date,p,W),D==null||D(k.date,p,W))},[De,D,Pe]),mn=E.useCallback((k,p)=>W=>{Pe(k),O==null||O(k.date,p,W)},[O,Pe]),yn=E.useCallback((k,p)=>W=>{et(),w==null||w(k.date,p,W)},[et,w]),gn=E.useCallback((k,p)=>W=>{const $={ArrowLeft:[W.shiftKey?"month":"day",t.dir==="rtl"?"after":"before"],ArrowRight:[W.shiftKey?"month":"day",t.dir==="rtl"?"before":"after"],ArrowDown:[W.shiftKey?"year":"week","after"],ArrowUp:[W.shiftKey?"year":"week","before"],PageUp:[W.shiftKey?"year":"month","before"],PageDown:[W.shiftKey?"year":"month","after"],Home:["startOfWeek","before"],End:["endOfWeek","after"]};if($[W.key]){W.preventDefault(),W.stopPropagation();const[P,L]=$[W.key];tt(P,L)}v==null||v(k.date,p,W)},[tt,v,t.dir]),wn=E.useCallback((k,p)=>W=>{C==null||C(k.date,p,W)},[C]),bn=E.useCallback((k,p)=>W=>{b==null||b(k.date,p,W)},[b]),Mn=E.useCallback((k,p)=>W=>{const $=Number(W.target.value),P=s.setMonth(s.startOfMonth(k),$);oe(s.addMonths(P,-p))},[s,oe]),kn=E.useCallback((k,p)=>W=>{const $=Number(W.target.value),P=s.setYear(s.startOfMonth(k),$);oe(s.addMonths(P,-p))},[s,oe]),{className:Dn,style:vn}=E.useMemo(()=>({className:[u[m.Root],t.className].filter(Boolean).join(" "),style:{...f==null?void 0:f[m.Root],...t.style}}),[u,t.className,t.style,f]),On=fo(t),at=k=>{const p=f==null?void 0:f[m.Dropdown],W=f==null?void 0:f[k];if(!(!p&&!W))return{...p,...W}},ot=E.useRef(null);Yo(ot,!!t.animate,{classNames:u,months:Me,focused:xe,dateLib:s});const Wn={dayPickerProps:t,selected:pe,select:De,isSelected:ke,months:Me,nextMonth:K,previousMonth:U,goToMonth:oe,getModifiers:Ie,components:r,classNames:u,styles:f,labels:o,formatters:a};return y.createElement($t.Provider,{value:Wn},y.createElement(r.Root,{rootRef:t.animate?ot:void 0,className:Dn,style:vn,dir:t.dir,id:t.id,lang:t.lang??i.code,nonce:t.nonce,title:t.title,role:t.role,"aria-label":t["aria-label"],"aria-labelledby":t["aria-labelledby"],...On},y.createElement(r.Months,{className:u[m.Months],style:f==null?void 0:f[m.Months]},!t.hideNavigation&&!l&&y.createElement(r.Nav,{"data-animated-nav":t.animate?"true":void 0,className:u[m.Nav],style:f==null?void 0:f[m.Nav],"aria-label":nt(),onPreviousClick:He,onNextClick:$e,previousMonth:U,nextMonth:K}),Me.map((k,p)=>{const W=t.reverseMonths?Me.length-1-p:p;return y.createElement(r.Month,{"data-animated-month":t.animate?"true":void 0,className:u[m.Month],style:f==null?void 0:f[m.Month],key:p,displayIndex:p,calendarMonth:k},l==="around"&&!t.hideNavigation&&p===0&&y.createElement(r.PreviousMonthButton,{type:"button",className:u[m.PreviousMonthButton],style:f==null?void 0:f[m.PreviousMonthButton],tabIndex:U?void 0:-1,"aria-disabled":U?void 0:!0,"aria-label":on(U),onClick:He,"data-animated-button":t.animate?"true":void 0},y.createElement(r.Chevron,{disabled:U?void 0:!0,className:u[m.Chevron],style:f==null?void 0:f[m.Chevron],orientation:t.dir==="rtl"?"right":"left"})),y.createElement(r.MonthCaption,{"data-animated-caption":t.animate?"true":void 0,className:u[m.MonthCaption],style:f==null?void 0:f[m.MonthCaption],calendarMonth:k,displayIndex:p},c!=null&&c.startsWith("dropdown")?y.createElement(r.DropdownNav,{className:u[m.Dropdowns],style:f==null?void 0:f[m.Dropdowns]},(()=>{const $=c==="dropdown"||c==="dropdown-months"?y.createElement(r.MonthsDropdown,{key:"month",className:u[m.MonthsDropdown],"aria-label":an(),disabled:!!t.disableNavigation,onChange:Mn(k.date,W),options:Wo(k.date,Fe,Be,a,s),style:at(m.MonthsDropdown),value:s.getMonth(k.date)}):y.createElement("span",{key:"month"},I(k.date,s)),P=c==="dropdown"||c==="dropdown-years"?y.createElement(r.YearsDropdown,{key:"year",className:u[m.YearsDropdown],"aria-label":fn(s.options),disabled:!!t.disableNavigation,onChange:kn(k.date,W),options:Co(Fe,Be,a,s,!!t.reverseYears),style:at(m.YearsDropdown),value:s.getYear(k.date)}):y.createElement("span",{key:"year"},j(k.date,s));return s.getMonthYearOrder()==="year-first"?[P,$]:[$,P]})(),y.createElement("span",{role:"status","aria-live":"polite",style:{border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap",wordWrap:"normal"}},S(k.date,s.options,s))):y.createElement(r.CaptionLabel,{className:u[m.CaptionLabel],style:f==null?void 0:f[m.CaptionLabel],role:"status","aria-live":"polite"},S(k.date,s.options,s))),l==="around"&&!t.hideNavigation&&p===h-1&&y.createElement(r.NextMonthButton,{type:"button",className:u[m.NextMonthButton],style:f==null?void 0:f[m.NextMonthButton],tabIndex:K?void 0:-1,"aria-disabled":K?void 0:!0,"aria-label":sn(K),onClick:$e,"data-animated-button":t.animate?"true":void 0},y.createElement(r.Chevron,{disabled:K?void 0:!0,className:u[m.Chevron],style:f==null?void 0:f[m.Chevron],orientation:t.dir==="rtl"?"left":"right"})),p===h-1&&l==="after"&&!t.hideNavigation&&y.createElement(r.Nav,{"data-animated-nav":t.animate?"true":void 0,className:u[m.Nav],style:f==null?void 0:f[m.Nav],"aria-label":nt(),onPreviousClick:He,onNextClick:$e,previousMonth:U,nextMonth:K}),y.createElement(r.MonthGrid,{role:"grid","aria-multiselectable":d==="multiple"||d==="range","aria-label":rn(k.date,s.options,s)||void 0,className:u[m.MonthGrid],style:f==null?void 0:f[m.MonthGrid]},!t.hideWeekdays&&y.createElement(r.Weekdays,{"data-animated-weekdays":t.animate?"true":void 0,className:u[m.Weekdays],style:f==null?void 0:f[m.Weekdays]},M&&y.createElement(r.WeekNumberHeader,{"aria-label":dn(s.options),className:u[m.WeekNumberHeader],style:f==null?void 0:f[m.WeekNumberHeader],scope:"col"},A()),ln.map($=>y.createElement(r.Weekday,{"aria-label":un($,s.options,s),className:u[m.Weekday],key:String($),style:f==null?void 0:f[m.Weekday],scope:"col"},Q($,s.options,s)))),y.createElement(r.Weeks,{"data-animated-weeks":t.animate?"true":void 0,className:u[m.Weeks],style:f==null?void 0:f[m.Weeks]},k.weeks.map($=>y.createElement(r.Week,{className:u[m.Week],key:$.weekNumber,style:f==null?void 0:f[m.Week],week:$},M&&y.createElement(r.WeekNumber,{week:$,style:f==null?void 0:f[m.WeekNumber],"aria-label":cn($.weekNumber,{locale:i}),className:u[m.WeekNumber],scope:"row",role:"rowheader"},B($.weekNumber,s)),$.days.map(P=>{const{date:L}=P,x=Ie(P);if(x[H.focused]=!x.hidden&&!!(xe!=null&&xe.isEqualTo(P)),x[J.selected]=(ke==null?void 0:ke(L))||x.selected,_e(pe)){const{from:ze,to:Ae}=pe;x[J.range_start]=!!(ze&&Ae&&s.isSameDay(L,ze)),x[J.range_end]=!!(ze&&Ae&&s.isSameDay(L,Ae)),x[J.range_middle]=ue(pe,L,!0,s)}const Sn=So(x,f,t.modifiersStyles),Nn=uo(x,u,t.modifiersClassNames),Cn=!rt&&!x.hidden?nn(L,x,s.options,s):void 0;return y.createElement(r.Day,{key:`${P.isoDate}_${P.displayMonthId}`,day:P,modifiers:x,className:Nn.join(" "),style:Sn,role:"gridcell","aria-selected":x.selected||void 0,"aria-label":Cn,"data-day":P.isoDate,"data-month":P.outside?P.dateMonthId:void 0,"data-selected":x.selected||void 0,"data-disabled":x.disabled||void 0,"data-hidden":x.hidden||void 0,"data-outside":P.outside||void 0,"data-focused":x.focused||void 0,"data-today":x.today||void 0},!x.hidden&&rt?y.createElement(r.DayButton,{className:u[m.DayButton],style:f==null?void 0:f[m.DayButton],type:"button",day:P,modifiers:x,disabled:!x.focused&&x.disabled||void 0,"aria-disabled":x.focused&&x.disabled||void 0,tabIndex:en(P)?0:-1,"aria-label":tn(L,x,s.options,s),onClick:hn(P,x),onBlur:yn(P,x),onFocus:mn(P,x),onKeyDown:gn(P,x),onMouseEnter:wn(P,x),onMouseLeave:bn(P,x)},Y(L,s.options,s)):!x.hidden&&Y(P.date,s.options,s))}))))))})),t.footer&&y.createElement(r.Footer,{className:u[m.Footer],style:f==null?void 0:f[m.Footer],role:"status","aria-live":"polite"},t.footer)))}function as({className:e,classNames:t,showOutsideDays:n=!0,captionLayout:r="label",buttonVariant:a="ghost",locale:o,formatters:s,components:i,...u}){const c=Le();return se.jsx(Jo,{showOutsideDays:n,className:T("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,e),captionLayout:r,locale:o,formatters:{formatMonthDropdown:d=>d.toLocaleString(o==null?void 0:o.code,{month:"short"}),...s},classNames:{root:T("w-fit",c.root),months:T("relative flex flex-col gap-4 md:flex-row",c.months),month:T("flex w-full flex-col gap-4",c.month),nav:T("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",c.nav),button_previous:T(it({variant:a}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",c.button_previous),button_next:T(it({variant:a}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",c.button_next),month_caption:T("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",c.month_caption),dropdowns:T("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",c.dropdowns),dropdown_root:T("relative rounded-(--cell-radius)",c.dropdown_root),dropdown:T("absolute inset-0 bg-popover opacity-0",c.dropdown),caption_label:T("font-medium select-none",r==="label"?"text-sm":"flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",c.caption_label),month_grid:T("w-full border-collapse",c.month_grid),weekdays:T("flex",c.weekdays),weekday:T("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",c.weekday),week:T("mt-2 flex w-full",c.week),week_number_header:T("w-(--cell-size) select-none",c.week_number_header),week_number:T("text-[0.8rem] text-muted-foreground select-none",c.week_number),day:T("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",u.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)":"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",c.day),range_start:T("relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",c.range_start),range_middle:T("rounded-none",c.range_middle),range_end:T("relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",c.range_end),today:T("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",c.today),outside:T("text-muted-foreground aria-selected:text-muted-foreground",c.outside),disabled:T("text-muted-foreground opacity-50",c.disabled),hidden:T("invisible",c.hidden),...t},components:{Root:({className:d,rootRef:l,...h})=>se.jsx("div",{"data-slot":"calendar",ref:l,className:T(d),...h}),Chevron:({className:d,orientation:l,...h})=>l==="left"?se.jsx(Tn,{className:T("size-4",d),...h}):l==="right"?se.jsx(pn,{className:T("size-4",d),...h}):se.jsx(xn,{className:T("size-4",d),...h}),DayButton:({...d})=>se.jsx(Lo,{locale:o,...d}),WeekNumber:({children:d,...l})=>se.jsx("td",{...l,children:se.jsx("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:d})}),...i},...u})}function Lo({className:e,day:t,modifiers:n,locale:r,...a}){const o=Le(),s=E.useRef(null);return E.useEffect(()=>{var i;n.focused&&((i=s.current)==null||i.focus())},[n.focused]),se.jsx(Pn,{variant:"ghost",size:"icon","data-day":t.date.toLocaleDateString(r==null?void 0:r.code),"data-selected-single":n.selected&&!n.range_start&&!n.range_end&&!n.range_middle,"data-range-start":n.range_start,"data-range-end":n.range_end,"data-range-middle":n.range_middle,className:T("relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",o.day,e),...a})}export{as as C,te as a,be as b,ne as c,Yt as d,we as e,ve as f,rs as z}; +import{R as y,f as E,j as se}from"./vendor-react-j_G0Dyx0.js";import{aX as T,l as pn,k as xn,aU as it,i as Pn}from"./index-C-i99XXF.js";import{C as Tn}from"./chevron-left-Dxx6wreE.js";const Ot=6048e5,Yn=864e5,ut=Symbol.for("constructDateFrom");function z(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&ut in e?e[ut](t):e instanceof Date?new e.constructor(t):new Date(t)}function F(e,t){return z(t||e,e)}function Wt(e,t,n){const r=F(e,n==null?void 0:n.in);return isNaN(t)?z(e,NaN):(t&&r.setDate(r.getDate()+t),r)}function St(e,t,n){const r=F(e,n==null?void 0:n.in);if(isNaN(t))return z(e,NaN);if(!t)return r;const a=r.getDate(),o=z(e,r.getTime());o.setMonth(r.getMonth()+t+1,0);const s=o.getDate();return a>=s?o:(r.setFullYear(o.getFullYear(),o.getMonth(),a),r)}let _n={};function Ne(){return _n}function fe(e,t){var i,u,c,d;const n=Ne(),r=(t==null?void 0:t.weekStartsOn)??((u=(i=t==null?void 0:t.locale)==null?void 0:i.options)==null?void 0:u.weekStartsOn)??n.weekStartsOn??((d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.weekStartsOn)??0,a=F(e,t==null?void 0:t.in),o=a.getDay(),s=(o=o.getTime()?r+1:n.getTime()>=i.getTime()?r:r-1}function ct(e){const t=F(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function he(e,...t){const n=z.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function Se(e,t){const n=F(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function Ve(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t),o=Se(r),s=Se(a),i=+o-ct(o),u=+s-ct(s);return Math.round((i-u)/Yn)}function En(e,t){const n=Nt(e,t),r=z(e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),We(r)}function Fn(e,t,n){return Wt(e,t*7,n)}function Bn(e,t,n){return St(e,t*12,n)}function In(e,t){let n,r=t==null?void 0:t.in;return e.forEach(a=>{!r&&typeof a=="object"&&(r=z.bind(null,a));const o=F(a,r);(!n||n{!r&&typeof a=="object"&&(r=z.bind(null,a));const o=F(a,r);(!n||n>o||isNaN(+o))&&(n=o)}),z(r,n||NaN)}function $n(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return+Se(r)==+Se(a)}function Ct(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function zn(e){return!(!Ct(e)&&typeof e!="number"||isNaN(+F(e)))}function pt(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t),o=r.getFullYear()-a.getFullYear(),s=r.getMonth()-a.getMonth();return o*12+s}function An(e,t){const n=F(e,t==null?void 0:t.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function xt(e,t){const[n,r]=he(e,t.start,t.end);return{start:n,end:r}}function qn(e,t){const{start:n,end:r}=xt(t==null?void 0:t.in,e);let a=+n>+r;const o=a?+n:+r,s=a?r:n;s.setHours(0,0,0,0),s.setDate(1);let i=1;const u=[];for(;+s<=o;)u.push(z(n,s)),s.setMonth(s.getMonth()+i);return a?u.reverse():u}function jn(e,t){const n=F(e,t==null?void 0:t.in);return n.setDate(1),n.setHours(0,0,0,0),n}function Rn(e,t){const n=F(e,t==null?void 0:t.in),r=n.getFullYear();return n.setFullYear(r+1,0,0),n.setHours(23,59,59,999),n}function Pt(e,t){const n=F(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function Gn(e,t){const{start:n,end:r}=xt(t==null?void 0:t.in,e);let a=+n>+r;const o=a?+n:+r,s=a?r:n;s.setHours(0,0,0,0),s.setMonth(0,1);let i=1;const u=[];for(;+s<=o;)u.push(z(n,s)),s.setFullYear(s.getFullYear()+i);return a?u.reverse():u}function Tt(e,t){var i,u,c,d;const n=Ne(),r=(t==null?void 0:t.weekStartsOn)??((u=(i=t==null?void 0:t.locale)==null?void 0:i.options)==null?void 0:u.weekStartsOn)??n.weekStartsOn??((d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.weekStartsOn)??0,a=F(e,t==null?void 0:t.in),o=a.getDay(),s=(o{let r;const a=Vn[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function be(e){return(t={})=>{const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const Un={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Kn={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Zn={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Jn={date:be({formats:Un,defaultWidth:"full"}),time:be({formats:Kn,defaultWidth:"full"}),dateTime:be({formats:Zn,defaultWidth:"full"})},Ln={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},er=(e,t,n,r)=>Ln[e];function te(e){return(t,n)=>{const r=n!=null&&n.context?String(n.context):"standalone";let a;if(r==="formatting"&&e.formattingValues){const s=e.defaultFormattingWidth||e.defaultWidth,i=n!=null&&n.width?String(n.width):s;a=e.formattingValues[i]||e.formattingValues[s]}else{const s=e.defaultWidth,i=n!=null&&n.width?String(n.width):e.defaultWidth;a=e.values[i]||e.values[s]}const o=e.argumentCallback?e.argumentCallback(t):t;return a[o]}}const tr={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},nr={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},rr={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ar={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},or={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},sr={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ir=(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},ur={ordinalNumber:ir,era:te({values:tr,defaultWidth:"wide"}),quarter:te({values:nr,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:rr,defaultWidth:"wide"}),day:te({values:ar,defaultWidth:"wide"}),dayPeriod:te({values:or,defaultWidth:"wide",formattingValues:sr,defaultFormattingWidth:"wide"})};function ne(e){return(t,n={})=>{const r=n.width,a=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],o=t.match(a);if(!o)return null;const s=o[0],i=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],u=Array.isArray(i)?dr(i,l=>l.test(s)):cr(i,l=>l.test(s));let c;c=e.valueCallback?e.valueCallback(u):u,c=n.valueCallback?n.valueCallback(c):c;const d=t.slice(s.length);return{value:c,rest:d}}}function cr(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function dr(e,t){for(let n=0;n{const r=t.match(e.matchPattern);if(!r)return null;const a=r[0],o=t.match(e.parsePattern);if(!o)return null;let s=e.valueCallback?e.valueCallback(o[0]):o[0];s=n.valueCallback?n.valueCallback(s):s;const i=t.slice(a.length);return{value:s,rest:i}}}const fr=/^(\d+)(th|st|nd|rd)?/i,lr=/\d+/i,hr={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},mr={any:[/^b/i,/^(a|c)/i]},yr={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},gr={any:[/1/i,/2/i,/3/i,/4/i]},wr={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},br={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Mr={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},kr={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Dr={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},vr={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Or={ordinalNumber:Yt({matchPattern:fr,parsePattern:lr,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:hr,defaultMatchWidth:"wide",parsePatterns:mr,defaultParseWidth:"any"}),quarter:ne({matchPatterns:yr,defaultMatchWidth:"wide",parsePatterns:gr,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:wr,defaultMatchWidth:"wide",parsePatterns:br,defaultParseWidth:"any"}),day:ne({matchPatterns:Mr,defaultMatchWidth:"wide",parsePatterns:kr,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:Dr,defaultMatchWidth:"any",parsePatterns:vr,defaultParseWidth:"any"})},we={code:"en-US",formatDistance:Qn,formatLong:Jn,formatRelative:er,localize:ur,match:Or,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Wr(e,t){const n=F(e,t==null?void 0:t.in);return Ve(n,Pt(n))+1}function Qe(e,t){const n=F(e,t==null?void 0:t.in),r=+We(n)-+En(n);return Math.round(r/Ot)+1}function _t(e,t){var d,l,h,w;const n=F(e,t==null?void 0:t.in),r=n.getFullYear(),a=Ne(),o=(t==null?void 0:t.firstWeekContainsDate)??((l=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:l.firstWeekContainsDate)??a.firstWeekContainsDate??((w=(h=a.locale)==null?void 0:h.options)==null?void 0:w.firstWeekContainsDate)??1,s=z((t==null?void 0:t.in)||e,0);s.setFullYear(r+1,0,o),s.setHours(0,0,0,0);const i=fe(s,t),u=z((t==null?void 0:t.in)||e,0);u.setFullYear(r,0,o),u.setHours(0,0,0,0);const c=fe(u,t);return+n>=+i?r+1:+n>=+c?r:r-1}function Sr(e,t){var i,u,c,d;const n=Ne(),r=(t==null?void 0:t.firstWeekContainsDate)??((u=(i=t==null?void 0:t.locale)==null?void 0:i.options)==null?void 0:u.firstWeekContainsDate)??n.firstWeekContainsDate??((d=(c=n.locale)==null?void 0:c.options)==null?void 0:d.firstWeekContainsDate)??1,a=_t(e,t),o=z((t==null?void 0:t.in)||e,0);return o.setFullYear(a,0,r),o.setHours(0,0,0,0),fe(o,t)}function Ue(e,t){const n=F(e,t==null?void 0:t.in),r=+fe(n,t)-+Sr(n,t);return Math.round(r/Ot)+1}function _(e,t){const n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}const de={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return _(t==="yy"?r%100:r,t.length)},M(e,t){const n=e.getMonth();return t==="M"?String(n+1):_(n+1,2)},d(e,t){return _(e.getDate(),t.length)},a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return _(e.getHours()%12||12,t.length)},H(e,t){return _(e.getHours(),t.length)},m(e,t){return _(e.getMinutes(),t.length)},s(e,t){return _(e.getSeconds(),t.length)},S(e,t){const n=t.length,r=e.getMilliseconds(),a=Math.trunc(r*Math.pow(10,n-3));return _(a,t.length)}},ye={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},dt={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){const r=e.getFullYear(),a=r>0?r:1-r;return n.ordinalNumber(a,{unit:"year"})}return de.y(e,t)},Y:function(e,t,n,r){const a=_t(e,r),o=a>0?a:1-a;if(t==="YY"){const s=o%100;return _(s,2)}return t==="Yo"?n.ordinalNumber(o,{unit:"year"}):_(o,t.length)},R:function(e,t){const n=Nt(e);return _(n,t.length)},u:function(e,t){const n=e.getFullYear();return _(n,t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return _(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return _(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return de.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return _(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const a=Ue(e,r);return t==="wo"?n.ordinalNumber(a,{unit:"week"}):_(a,t.length)},I:function(e,t,n){const r=Qe(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):_(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):de.d(e,t)},D:function(e,t,n){const r=Wr(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):_(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const a=e.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(o);case"ee":return _(o,2);case"eo":return n.ordinalNumber(o,{unit:"day"});case"eee":return n.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(a,{width:"short",context:"formatting"});case"eeee":default:return n.day(a,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const a=e.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(o);case"cc":return _(o,t.length);case"co":return n.ordinalNumber(o,{unit:"day"});case"ccc":return n.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(a,{width:"narrow",context:"standalone"});case"cccccc":return n.day(a,{width:"short",context:"standalone"});case"cccc":default:return n.day(a,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),a=r===0?7:r;switch(t){case"i":return String(a);case"ii":return _(a,t.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const a=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let a;switch(r===12?a=ye.noon:r===0?a=ye.midnight:a=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let a;switch(r>=17?a=ye.evening:r>=12?a=ye.afternoon:r>=4?a=ye.morning:a=ye.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return de.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):de.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):_(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):_(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):de.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):de.s(e,t)},S:function(e,t){return de.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return lt(r);case"XXXX":case"XX":return le(r);case"XXXXX":case"XXX":default:return le(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return lt(r);case"xxxx":case"xx":return le(r);case"xxxxx":case"xxx":default:return le(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ft(r,":");case"OOOO":default:return"GMT"+le(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ft(r,":");case"zzzz":default:return"GMT"+le(r,":")}},t:function(e,t,n){const r=Math.trunc(+e/1e3);return _(r,t.length)},T:function(e,t,n){return _(+e,t.length)}};function ft(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),a=Math.trunc(r/60),o=r%60;return o===0?n+String(a):n+String(a)+t+_(o,2)}function lt(e,t){return e%60===0?(e>0?"-":"+")+_(Math.abs(e)/60,2):le(e,t)}function le(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),a=_(Math.trunc(r/60),2),o=_(r%60,2);return n+a+t+o}const ht=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},Et=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},Nr=(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],r=n[1],a=n[2];if(!a)return ht(e,t);let o;switch(r){case"P":o=t.dateTime({width:"short"});break;case"PP":o=t.dateTime({width:"medium"});break;case"PPP":o=t.dateTime({width:"long"});break;case"PPPP":default:o=t.dateTime({width:"full"});break}return o.replace("{{date}}",ht(r,t)).replace("{{time}}",Et(a,t))},Cr={p:Et,P:Nr},pr=/^D+$/,xr=/^Y+$/,Pr=["D","DD","YY","YYYY"];function Tr(e){return pr.test(e)}function Yr(e){return xr.test(e)}function _r(e,t,n){const r=Er(e,t,n);if(console.warn(r),Pr.includes(e))throw new RangeError(r)}function Er(e,t,n){const r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const Fr=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Br=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Ir=/^'([^]*?)'?$/,Hr=/''/g,$r=/[a-zA-Z]/;function ve(e,t,n){var d,l,h,w,D,O,v,C;const r=Ne(),a=(n==null?void 0:n.locale)??r.locale??we,o=(n==null?void 0:n.firstWeekContainsDate)??((l=(d=n==null?void 0:n.locale)==null?void 0:d.options)==null?void 0:l.firstWeekContainsDate)??r.firstWeekContainsDate??((w=(h=r.locale)==null?void 0:h.options)==null?void 0:w.firstWeekContainsDate)??1,s=(n==null?void 0:n.weekStartsOn)??((O=(D=n==null?void 0:n.locale)==null?void 0:D.options)==null?void 0:O.weekStartsOn)??r.weekStartsOn??((C=(v=r.locale)==null?void 0:v.options)==null?void 0:C.weekStartsOn)??0,i=F(e,n==null?void 0:n.in);if(!zn(i))throw new RangeError("Invalid time value");let u=t.match(Br).map(b=>{const g=b[0];if(g==="p"||g==="P"){const N=Cr[g];return N(b,a.formatLong)}return b}).join("").match(Fr).map(b=>{if(b==="''")return{isToken:!1,value:"'"};const g=b[0];if(g==="'")return{isToken:!1,value:zr(b)};if(dt[g])return{isToken:!0,value:b};if(g.match($r))throw new RangeError("Format string contains an unescaped latin alphabet character `"+g+"`");return{isToken:!1,value:b}});a.localize.preprocessor&&(u=a.localize.preprocessor(i,u));const c={firstWeekContainsDate:o,weekStartsOn:s,locale:a};return u.map(b=>{if(!b.isToken)return b.value;const g=b.value;(!(n!=null&&n.useAdditionalWeekYearTokens)&&Yr(g)||!(n!=null&&n.useAdditionalDayOfYearTokens)&&Tr(g))&&_r(g,t,String(e));const N=dt[g[0]];return N(i,g,a.localize,c)}).join("")}function zr(e){const t=e.match(Ir);return t?t[1].replace(Hr,"'"):e}function Ar(e,t){const n=F(e,t==null?void 0:t.in),r=n.getFullYear(),a=n.getMonth(),o=z(n,0);return o.setFullYear(r,a+1,0),o.setHours(0,0,0,0),o.getDate()}function qr(e,t){return F(e,t==null?void 0:t.in).getMonth()}function jr(e,t){return F(e,t==null?void 0:t.in).getFullYear()}function Rr(e,t){return+F(e)>+F(t)}function Gr(e,t){return+F(e)<+F(t)}function Xr(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return+fe(r,n)==+fe(a,n)}function Vr(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return r.getFullYear()===a.getFullYear()&&r.getMonth()===a.getMonth()}function Qr(e,t,n){const[r,a]=he(n==null?void 0:n.in,e,t);return r.getFullYear()===a.getFullYear()}function Ur(e,t,n){const r=F(e,n==null?void 0:n.in),a=r.getFullYear(),o=r.getDate(),s=z(e,0);s.setFullYear(a,t,15),s.setHours(0,0,0,0);const i=Ar(s);return r.setMonth(t,Math.min(o,i)),r}function Kr(e,t,n){const r=F(e,n==null?void 0:n.in);return isNaN(+r)?z(e,NaN):(r.setFullYear(t),r)}const Zr={lessThanXSeconds:{one:"不到 1 秒",other:"不到 {{count}} 秒"},xSeconds:{one:"1 秒",other:"{{count}} 秒"},halfAMinute:"半分钟",lessThanXMinutes:{one:"不到 1 分钟",other:"不到 {{count}} 分钟"},xMinutes:{one:"1 分钟",other:"{{count}} 分钟"},xHours:{one:"1 小时",other:"{{count}} 小时"},aboutXHours:{one:"大约 1 小时",other:"大约 {{count}} 小时"},xDays:{one:"1 天",other:"{{count}} 天"},aboutXWeeks:{one:"大约 1 个星期",other:"大约 {{count}} 个星期"},xWeeks:{one:"1 个星期",other:"{{count}} 个星期"},aboutXMonths:{one:"大约 1 个月",other:"大约 {{count}} 个月"},xMonths:{one:"1 个月",other:"{{count}} 个月"},aboutXYears:{one:"大约 1 年",other:"大约 {{count}} 年"},xYears:{one:"1 年",other:"{{count}} 年"},overXYears:{one:"超过 1 年",other:"超过 {{count}} 年"},almostXYears:{one:"将近 1 年",other:"将近 {{count}} 年"}},Jr=(e,t,n)=>{let r;const a=Zr[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",String(t)),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?r+"内":r+"前":r},Lr={full:"y'年'M'月'd'日' EEEE",long:"y'年'M'月'd'日'",medium:"yyyy-MM-dd",short:"yy-MM-dd"},ea={full:"zzzz a h:mm:ss",long:"z a h:mm:ss",medium:"a h:mm:ss",short:"a h:mm"},ta={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},na={date:be({formats:Lr,defaultWidth:"full"}),time:be({formats:ea,defaultWidth:"full"}),dateTime:be({formats:ta,defaultWidth:"full"})};function mt(e,t,n){const r="eeee p";return Xr(e,t,n)?r:e.getTime()>t.getTime()?"'下个'"+r:"'上个'"+r}const ra={lastWeek:mt,yesterday:"'昨天' p",today:"'今天' p",tomorrow:"'明天' p",nextWeek:mt,other:"PP p"},aa=(e,t,n,r)=>{const a=ra[e];return typeof a=="function"?a(t,n,r):a},oa={narrow:["前","公元"],abbreviated:["前","公元"],wide:["公元前","公元"]},sa={narrow:["1","2","3","4"],abbreviated:["第一季","第二季","第三季","第四季"],wide:["第一季度","第二季度","第三季度","第四季度"]},ia={narrow:["一","二","三","四","五","六","七","八","九","十","十一","十二"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},ua={narrow:["日","一","二","三","四","五","六"],short:["日","一","二","三","四","五","六"],abbreviated:["周日","周一","周二","周三","周四","周五","周六"],wide:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},ca={narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},da={narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},fa=(e,t)=>{const n=Number(e);switch(t==null?void 0:t.unit){case"date":return n.toString()+"日";case"hour":return n.toString()+"时";case"minute":return n.toString()+"分";case"second":return n.toString()+"秒";default:return"第 "+n.toString()}},la={ordinalNumber:fa,era:te({values:oa,defaultWidth:"wide"}),quarter:te({values:sa,defaultWidth:"wide",argumentCallback:e=>e-1}),month:te({values:ia,defaultWidth:"wide"}),day:te({values:ua,defaultWidth:"wide"}),dayPeriod:te({values:ca,defaultWidth:"wide",formattingValues:da,defaultFormattingWidth:"wide"})},ha=/^(第\s*)?\d+(日|时|分|秒)?/i,ma=/\d+/i,ya={narrow:/^(前)/i,abbreviated:/^(前)/i,wide:/^(公元前|公元)/i},ga={any:[/^(前)/i,/^(公元)/i]},wa={narrow:/^[1234]/i,abbreviated:/^第[一二三四]刻/i,wide:/^第[一二三四]刻钟/i},ba={any:[/(1|一)/i,/(2|二)/i,/(3|三)/i,/(4|四)/i]},Ma={narrow:/^(一|二|三|四|五|六|七|八|九|十[二一]?)/i,abbreviated:/^(一|二|三|四|五|六|七|八|九|十[二一]?|\d|1[0-2])月/i,wide:/^(一|二|三|四|五|六|七|八|九|十[二一]?)月/i},ka={narrow:[/^一/i,/^二/i,/^三/i,/^四/i,/^五/i,/^六/i,/^七/i,/^八/i,/^九/i,/^十(?!(一|二))/i,/^十一/i,/^十二/i],any:[/^(一|1(?!\d))/i,/^(二|2)/i,/^(三|3)/i,/^(四|4)/i,/^(五|5)/i,/^(六|6)/i,/^(七|7)/i,/^(八|8)/i,/^(九|9)/i,/^(十(?!(一|二))|10)/i,/^(十一|11)/i,/^(十二|12)/i]},Da={narrow:/^[一二三四五六日]/i,short:/^[一二三四五六日]/i,abbreviated:/^周[一二三四五六日]/i,wide:/^星期[一二三四五六日]/i},va={any:[/日/i,/一/i,/二/i,/三/i,/四/i,/五/i,/六/i]},Oa={any:/^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i},Wa={any:{am:/^上午?/i,pm:/^下午?/i,midnight:/^午夜/i,noon:/^[中正]午/i,morning:/^早上/i,afternoon:/^下午/i,evening:/^晚上?/i,night:/^凌晨/i}},Sa={ordinalNumber:Yt({matchPattern:ha,parsePattern:ma,valueCallback:e=>parseInt(e,10)}),era:ne({matchPatterns:ya,defaultMatchWidth:"wide",parsePatterns:ga,defaultParseWidth:"any"}),quarter:ne({matchPatterns:wa,defaultMatchWidth:"wide",parsePatterns:ba,defaultParseWidth:"any",valueCallback:e=>e+1}),month:ne({matchPatterns:Ma,defaultMatchWidth:"wide",parsePatterns:ka,defaultParseWidth:"any"}),day:ne({matchPatterns:Da,defaultMatchWidth:"wide",parsePatterns:va,defaultParseWidth:"any"}),dayPeriod:ne({matchPatterns:Oa,defaultMatchWidth:"any",parsePatterns:Wa,defaultParseWidth:"any"})},rs={code:"zh-CN",formatDistance:Jr,formatLong:na,formatRelative:aa,localize:la,match:Sa,options:{weekStartsOn:1,firstWeekContainsDate:4}};function Na(e,t,n="long"){return new Intl.DateTimeFormat("en-US",{hour:"numeric",timeZone:e,timeZoneName:n}).format(t).split(/\s/g).slice(2).join(" ")}const qe={},Oe={};function ie(e,t){try{const r=(qe[e]||(qe[e]=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"longOffset"}).format))(t).split("GMT")[1];return r in Oe?Oe[r]:yt(r,r.split(":"))}catch{if(e in Oe)return Oe[e];const n=e==null?void 0:e.match(Ca);return n?yt(e,n.slice(1)):NaN}}const Ca=/([+-]\d\d):?(\d\d)?/;function yt(e,t){const n=+(t[0]||0),r=+(t[1]||0),a=+(t[2]||0)/60;return Oe[e]=n*60+r>0?n*60+r+a:n*60-r-a}class re extends Date{constructor(...t){super(),t.length>1&&typeof t[t.length-1]=="string"&&(this.timeZone=t.pop()),this.internal=new Date,isNaN(ie(this.timeZone,this))?this.setTime(NaN):t.length?typeof t[0]=="number"&&(t.length===1||t.length===2&&typeof t[1]!="number")?this.setTime(t[0]):typeof t[0]=="string"?this.setTime(+new Date(t[0])):t[0]instanceof Date?this.setTime(+t[0]):(this.setTime(+new Date(...t)),Ft(this,t)):this.setTime(Date.now())}static tz(t,...n){return n.length?new re(...n,t):new re(Date.now(),t)}withTimeZone(t){return new re(+this,t)}getTimezoneOffset(){const t=-ie(this.timeZone,this);return t>0?Math.floor(t):Math.ceil(t)}setTime(t){return Date.prototype.setTime.apply(this,arguments),Te(this),+this}[Symbol.for("constructDateFrom")](t){return new re(+new Date(t),this.timeZone)}}const gt=/^(get|set)(?!UTC)/;Object.getOwnPropertyNames(Date.prototype).forEach(e=>{if(!gt.test(e))return;const t=e.replace(gt,"$1UTC");re.prototype[t]&&(e.startsWith("get")?re.prototype[e]=function(){return this.internal[t]()}:(re.prototype[e]=function(){return Date.prototype[t].apply(this.internal,arguments),pa(this),+this},re.prototype[t]=function(){return Date.prototype[t].apply(this,arguments),Te(this),+this}))});function Te(e){e.internal.setTime(+e),e.internal.setUTCSeconds(e.internal.getUTCSeconds()-Math.round(-ie(e.timeZone,e)*60))}function pa(e){Date.prototype.setFullYear.call(e,e.internal.getUTCFullYear(),e.internal.getUTCMonth(),e.internal.getUTCDate()),Date.prototype.setHours.call(e,e.internal.getUTCHours(),e.internal.getUTCMinutes(),e.internal.getUTCSeconds(),e.internal.getUTCMilliseconds()),Ft(e)}function Ft(e,t){const n=Array.isArray(t)?xa(t):+e.internal,r=ie(e.timeZone,e),a=r>0?Math.floor(r):Math.ceil(r),o=new Date(+e);o.setUTCHours(o.getUTCHours()-1);const s=-new Date(+e).getTimezoneOffset(),i=-new Date(+o).getTimezoneOffset(),u=s-i;let c=s;if(u&&s!==a){const I=Date.prototype.getHours.apply(e),B=Array.isArray(t)?t[3]||0:e.internal.getUTCHours();if(I!==B){const A=new Date(+e),Q=s-a;Q&&A.setUTCMinutes(A.getUTCMinutes()+Q);const j=ie(e.timeZone,A);(j>0?Math.floor(j):Math.ceil(j))===a&&(c=i)}}const d=c-a;d&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+d);const l=new Date(+e);l.setUTCSeconds(0);const h=s>0?l.getSeconds():(l.getSeconds()-60)%60,w=Math.round(-(ie(e.timeZone,e)*60))%60;(w||h)&&Date.prototype.setUTCSeconds.call(e,Date.prototype.getUTCSeconds.call(e)+w+h);const D=ie(e.timeZone,e),O=D>0?Math.floor(D):Math.ceil(D),C=-new Date(+e).getTimezoneOffset()-O,b=O!==a,g=C-d,N=O-a,M=n-O*60*1e3,f=N>0&&wt(e)-n===N*60*1e3&&wt(e,M)!==n;if(b&&g&&!f){Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+g);const I=ie(e.timeZone,e),B=I>0?Math.floor(I):Math.ceil(I),A=O-B;A&&g<0&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+A)}Te(e);const Y=(t?n:n+w*1e3)-+e.internal;Y&&Math.abs(Y)<1800*1e3&&(Date.prototype.setTime.call(e,+e+Y),Te(e))}function xa(e){return Date.UTC(e[0],e.length>1?e[1]:0,e.length>2?e[2]:1,...e.slice(3))}function wt(e,t){const n=new Date(t??+e);return n.setUTCSeconds(n.getUTCSeconds()-Math.round(-ie(e.timeZone,n)*60)),+n}class q extends re{static tz(t,...n){return n.length?new q(...n,t):new q(Date.now(),t)}toISOString(){const[t,n,r]=this.tzComponents(),a=`${t}${n}:${r}`;return this.internal.toISOString().slice(0,-1)+a}toString(){return`${this.toDateString()} ${this.toTimeString()}`}toDateString(){const[t,n,r,a]=this.internal.toUTCString().split(" ");return`${t==null?void 0:t.slice(0,-1)} ${r} ${n} ${a}`}toTimeString(){const t=this.internal.toUTCString().split(" ")[4],[n,r,a]=this.tzComponents();return`${t} GMT${n}${r}${a} (${Na(this.timeZone,this)})`}toLocaleString(t,n){return Date.prototype.toLocaleString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}toLocaleDateString(t,n){return Date.prototype.toLocaleDateString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}toLocaleTimeString(t,n){return Date.prototype.toLocaleTimeString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}tzComponents(){const t=this.getTimezoneOffset(),n=t>0?"-":"+",r=String(Math.floor(Math.abs(t)/60)).padStart(2,"0"),a=String(Math.abs(t)%60).padStart(2,"0");return[n,r,a]}withTimeZone(t){return new q(+this,t)}[Symbol.for("constructDateFrom")](t){return new q(+new Date(t),this.timeZone)}}const bt=5,Pa=4;function Ta(e,t){const n=t.startOfMonth(e),r=n.getDay()>0?n.getDay():7,a=t.addDays(e,-r+1),o=t.addDays(a,bt*7-1);return t.getMonth(e)===t.getMonth(o)?bt:Pa}function Bt(e,t){const n=t.startOfMonth(e),r=n.getDay();return r===1?n:r===0?t.addDays(n,-6):t.addDays(n,-1*(r-1))}function Ya(e,t){const n=Bt(e,t),r=Ta(e,t);return t.addDays(n,r*7-1)}const It={...we,labels:{labelDayButton:(e,t,n,r)=>{let a;r&&typeof r.format=="function"?a=r.format.bind(r):a=(s,i)=>ve(s,i,{locale:we,...n});let o=a(e,"PPPP");return t.today&&(o=`Today, ${o}`),t.selected&&(o=`${o}, selected`),o},labelMonthDropdown:"Choose the Month",labelNext:"Go to the Next Month",labelPrevious:"Go to the Previous Month",labelWeekNumber:e=>`Week ${e}`,labelYearDropdown:"Choose the Year",labelGrid:(e,t,n)=>{let r;return n&&typeof n.format=="function"?r=n.format.bind(n):r=(a,o)=>ve(a,o,{locale:we,...t}),r(e,"LLLL yyyy")},labelGridcell:(e,t,n,r)=>{let a;r&&typeof r.format=="function"?a=r.format.bind(r):a=(s,i)=>ve(s,i,{locale:we,...n});let o=a(e,"PPPP");return t!=null&&t.today&&(o=`Today, ${o}`),o},labelNav:"Navigation bar",labelWeekNumberHeader:"Week Number",labelWeekday:(e,t,n)=>{let r;return n&&typeof n.format=="function"?r=n.format.bind(n):r=(a,o)=>ve(a,o,{locale:we,...t}),r(e,"cccc")}}};class X{constructor(t,n){this.today=()=>{var a;if((a=this.overrides)!=null&&a.today)return this.overrides.today();if(this.options.timeZone)return q.tz(this.options.timeZone);const r=this.options.Date??Date;return new r},this.newDate=(r,a,o)=>{var s;return(s=this.overrides)!=null&&s.newDate?this.overrides.newDate(r,a,o):this.options.timeZone?new q(r,a,o,this.options.timeZone):new Date(r,a,o)},this.addDays=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addDays?this.overrides.addDays(r,a):Wt(r,a)},this.addMonths=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addMonths?this.overrides.addMonths(r,a):St(r,a)},this.addWeeks=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addWeeks?this.overrides.addWeeks(r,a):Fn(r,a)},this.addYears=(r,a)=>{var o;return(o=this.overrides)!=null&&o.addYears?this.overrides.addYears(r,a):Bn(r,a)},this.differenceInCalendarDays=(r,a)=>{var o;return(o=this.overrides)!=null&&o.differenceInCalendarDays?this.overrides.differenceInCalendarDays(r,a):Ve(r,a)},this.differenceInCalendarMonths=(r,a)=>{var o;return(o=this.overrides)!=null&&o.differenceInCalendarMonths?this.overrides.differenceInCalendarMonths(r,a):pt(r,a)},this.eachMonthOfInterval=r=>{var a;return(a=this.overrides)!=null&&a.eachMonthOfInterval?this.overrides.eachMonthOfInterval(r):qn(r)},this.eachYearOfInterval=r=>{var i;const a=(i=this.overrides)!=null&&i.eachYearOfInterval?this.overrides.eachYearOfInterval(r):Gn(r),o=new Set(a.map(u=>this.getYear(u)));if(o.size===a.length)return a;const s=[];return o.forEach(u=>{s.push(new Date(u,0,1))}),s},this.endOfBroadcastWeek=r=>{var a;return(a=this.overrides)!=null&&a.endOfBroadcastWeek?this.overrides.endOfBroadcastWeek(r):Ya(r,this)},this.endOfISOWeek=r=>{var a;return(a=this.overrides)!=null&&a.endOfISOWeek?this.overrides.endOfISOWeek(r):Xn(r)},this.endOfMonth=r=>{var a;return(a=this.overrides)!=null&&a.endOfMonth?this.overrides.endOfMonth(r):An(r)},this.endOfWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.endOfWeek?this.overrides.endOfWeek(r,a):Tt(r,this.options)},this.endOfYear=r=>{var a;return(a=this.overrides)!=null&&a.endOfYear?this.overrides.endOfYear(r):Rn(r)},this.format=(r,a,o)=>{var i;const s=(i=this.overrides)!=null&&i.format?this.overrides.format(r,a,this.options):ve(r,a,this.options);return this.options.numerals&&this.options.numerals!=="latn"?this.replaceDigits(s):s},this.getISOWeek=r=>{var a;return(a=this.overrides)!=null&&a.getISOWeek?this.overrides.getISOWeek(r):Qe(r)},this.getMonth=(r,a)=>{var o;return(o=this.overrides)!=null&&o.getMonth?this.overrides.getMonth(r,this.options):qr(r,this.options)},this.getYear=(r,a)=>{var o;return(o=this.overrides)!=null&&o.getYear?this.overrides.getYear(r,this.options):jr(r,this.options)},this.getWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.getWeek?this.overrides.getWeek(r,this.options):Ue(r,this.options)},this.isAfter=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isAfter?this.overrides.isAfter(r,a):Rr(r,a)},this.isBefore=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isBefore?this.overrides.isBefore(r,a):Gr(r,a)},this.isDate=r=>{var a;return(a=this.overrides)!=null&&a.isDate?this.overrides.isDate(r):Ct(r)},this.isSameDay=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isSameDay?this.overrides.isSameDay(r,a):$n(r,a)},this.isSameMonth=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isSameMonth?this.overrides.isSameMonth(r,a):Vr(r,a)},this.isSameYear=(r,a)=>{var o;return(o=this.overrides)!=null&&o.isSameYear?this.overrides.isSameYear(r,a):Qr(r,a)},this.max=r=>{var a;return(a=this.overrides)!=null&&a.max?this.overrides.max(r):In(r)},this.min=r=>{var a;return(a=this.overrides)!=null&&a.min?this.overrides.min(r):Hn(r)},this.setMonth=(r,a)=>{var o;return(o=this.overrides)!=null&&o.setMonth?this.overrides.setMonth(r,a):Ur(r,a)},this.setYear=(r,a)=>{var o;return(o=this.overrides)!=null&&o.setYear?this.overrides.setYear(r,a):Kr(r,a)},this.startOfBroadcastWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.startOfBroadcastWeek?this.overrides.startOfBroadcastWeek(r,this):Bt(r,this)},this.startOfDay=r=>{var a;return(a=this.overrides)!=null&&a.startOfDay?this.overrides.startOfDay(r):Se(r)},this.startOfISOWeek=r=>{var a;return(a=this.overrides)!=null&&a.startOfISOWeek?this.overrides.startOfISOWeek(r):We(r)},this.startOfMonth=r=>{var a;return(a=this.overrides)!=null&&a.startOfMonth?this.overrides.startOfMonth(r):jn(r)},this.startOfWeek=(r,a)=>{var o;return(o=this.overrides)!=null&&o.startOfWeek?this.overrides.startOfWeek(r,this.options):fe(r,this.options)},this.startOfYear=r=>{var a;return(a=this.overrides)!=null&&a.startOfYear?this.overrides.startOfYear(r):Pt(r)},this.options={locale:It,...t},this.overrides=n}getDigitMap(){const{numerals:t="latn"}=this.options,n=new Intl.NumberFormat("en-US",{numberingSystem:t}),r={};for(let a=0;a<10;a++)r[a.toString()]=n.format(a);return r}replaceDigits(t){const n=this.getDigitMap();return t.replace(/\d/g,r=>n[r]||r)}formatNumber(t){return this.replaceDigits(t.toString())}getMonthYearOrder(){var n;const t=(n=this.options.locale)==null?void 0:n.code;return t&&X.yearFirstLocales.has(t)?"year-first":"month-first"}formatMonthYear(t){const{locale:n,timeZone:r,numerals:a}=this.options,o=n==null?void 0:n.code;if(o&&X.yearFirstLocales.has(o))try{return new Intl.DateTimeFormat(o,{month:"long",year:"numeric",timeZone:r,numberingSystem:a}).format(t)}catch{}const s=this.getMonthYearOrder()==="year-first"?"y LLLL":"LLLL y";return this.format(t,s)}}X.yearFirstLocales=new Set(["eu","hu","ja","ja-Hira","ja-JP","ko","ko-KR","lt","lt-LT","lv","lv-LV","mn","mn-MN","zh","zh-CN","zh-HK","zh-TW"]);const ae=new X;class Ht{constructor(t,n,r=ae){this.date=t,this.displayMonth=n,this.outside=!!(n&&!r.isSameMonth(t,n)),this.dateLib=r,this.isoDate=r.format(t,"yyyy-MM-dd"),this.displayMonthId=r.format(n,"yyyy-MM"),this.dateMonthId=r.format(t,"yyyy-MM")}isEqualTo(t){return this.dateLib.isSameDay(t.date,this.date)&&this.dateLib.isSameMonth(t.displayMonth,this.displayMonth)}}class _a{constructor(t,n){this.date=t,this.weeks=n}}class Ea{constructor(t,n){this.days=n,this.weekNumber=t}}function Fa(e){return y.createElement("span",{...e})}function Ba(e){const{size:t=24,orientation:n="left",className:r,style:a}=e;return y.createElement("svg",{className:r,style:a,width:t,height:t,viewBox:"0 0 24 24"},n==="up"&&y.createElement("polygon",{points:"6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28"}),n==="down"&&y.createElement("polygon",{points:"6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72"}),n==="left"&&y.createElement("polygon",{points:"16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20"}),n==="right"&&y.createElement("polygon",{points:"8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20"}))}function Ia(e){const{day:t,modifiers:n,...r}=e;return y.createElement("td",{...r})}function Ha(e){const{day:t,modifiers:n,...r}=e,a=y.useRef(null);return y.useEffect(()=>{var o;n.focused&&((o=a.current)==null||o.focus())},[n.focused]),y.createElement("button",{ref:a,...r})}var m;(function(e){e.Root="root",e.Chevron="chevron",e.Day="day",e.DayButton="day_button",e.CaptionLabel="caption_label",e.Dropdowns="dropdowns",e.Dropdown="dropdown",e.DropdownRoot="dropdown_root",e.Footer="footer",e.MonthGrid="month_grid",e.MonthCaption="month_caption",e.MonthsDropdown="months_dropdown",e.Month="month",e.Months="months",e.Nav="nav",e.NextMonthButton="button_next",e.PreviousMonthButton="button_previous",e.Week="week",e.Weeks="weeks",e.Weekday="weekday",e.Weekdays="weekdays",e.WeekNumber="week_number",e.WeekNumberHeader="week_number_header",e.YearsDropdown="years_dropdown"})(m||(m={}));var H;(function(e){e.disabled="disabled",e.hidden="hidden",e.outside="outside",e.focused="focused",e.today="today"})(H||(H={}));var J;(function(e){e.range_end="range_end",e.range_middle="range_middle",e.range_start="range_start",e.selected="selected"})(J||(J={}));var G;(function(e){e.weeks_before_enter="weeks_before_enter",e.weeks_before_exit="weeks_before_exit",e.weeks_after_enter="weeks_after_enter",e.weeks_after_exit="weeks_after_exit",e.caption_after_enter="caption_after_enter",e.caption_after_exit="caption_after_exit",e.caption_before_enter="caption_before_enter",e.caption_before_exit="caption_before_exit"})(G||(G={}));const $t=E.createContext(void 0);function Ye(){const e=E.useContext($t);if(e===void 0)throw new Error("useDayPicker() must be used within a custom component.");return e}function $a(e){const{options:t,className:n,...r}=e,{classNames:a,components:o,styles:s}=Ye(),i=[a[m.Dropdown],n].join(" "),u=t==null?void 0:t.find(({value:c})=>c===r.value);return y.createElement("span",{"data-disabled":r.disabled,className:a[m.DropdownRoot],style:s==null?void 0:s[m.DropdownRoot]},y.createElement(o.Select,{className:i,...r},t==null?void 0:t.map(({value:c,label:d,disabled:l})=>y.createElement(o.Option,{key:c,value:c,disabled:l},d))),y.createElement("span",{className:a[m.CaptionLabel],style:s==null?void 0:s[m.CaptionLabel],"aria-hidden":!0},u==null?void 0:u.label,y.createElement(o.Chevron,{orientation:"down",size:18,className:a[m.Chevron],style:s==null?void 0:s[m.Chevron]})))}function za(e){return y.createElement("div",{...e})}function Aa(e){return y.createElement("div",{...e})}function qa(e){const{calendarMonth:t,displayIndex:n,...r}=e;return y.createElement("div",{...r},e.children)}function ja(e){const{calendarMonth:t,displayIndex:n,...r}=e;return y.createElement("div",{...r})}function Ra(e){return y.createElement("table",{...e})}function Ga(e){return y.createElement("div",{...e})}function Xa(e){const{components:t}=Ye();return y.createElement(t.Dropdown,{...e})}function Va(e){const{onPreviousClick:t,onNextClick:n,previousMonth:r,nextMonth:a,...o}=e,{components:s,classNames:i,styles:u,labels:{labelPrevious:c,labelNext:d}}=Ye(),l=E.useCallback(w=>{a&&(n==null||n(w))},[a,n]),h=E.useCallback(w=>{r&&(t==null||t(w))},[r,t]);return y.createElement("nav",{...o},y.createElement(s.PreviousMonthButton,{type:"button",className:i[m.PreviousMonthButton],style:u==null?void 0:u[m.PreviousMonthButton],tabIndex:r?void 0:-1,"aria-disabled":r?void 0:!0,"aria-label":c(r),onClick:h},y.createElement(s.Chevron,{disabled:r?void 0:!0,className:i[m.Chevron],style:u==null?void 0:u[m.Chevron],orientation:"left"})),y.createElement(s.NextMonthButton,{type:"button",className:i[m.NextMonthButton],style:u==null?void 0:u[m.NextMonthButton],tabIndex:a?void 0:-1,"aria-disabled":a?void 0:!0,"aria-label":d(a),onClick:l},y.createElement(s.Chevron,{disabled:a?void 0:!0,orientation:"right",className:i[m.Chevron],style:u==null?void 0:u[m.Chevron]})))}function Qa(e){return y.createElement("button",{...e})}function Ua(e){return y.createElement("option",{...e})}function Ka(e){return y.createElement("button",{...e})}function Za(e){const{rootRef:t,...n}=e;return y.createElement("div",{...n,ref:t})}function Ja(e){return y.createElement("select",{...e})}function La(e){const{week:t,...n}=e;return y.createElement("tr",{...n})}function eo(e){return y.createElement("th",{...e})}function to(e){return y.createElement("thead",{"aria-hidden":!0},y.createElement("tr",{...e}))}function no(e){const{week:t,...n}=e;return y.createElement("th",{...n})}function ro(e){return y.createElement("th",{...e})}function ao(e){return y.createElement("tbody",{...e})}function oo(e){const{components:t}=Ye();return y.createElement(t.Dropdown,{...e})}const so=Object.freeze(Object.defineProperty({__proto__:null,CaptionLabel:Fa,Chevron:Ba,Day:Ia,DayButton:Ha,Dropdown:$a,DropdownNav:za,Footer:Aa,Month:qa,MonthCaption:ja,MonthGrid:Ra,Months:Ga,MonthsDropdown:Xa,Nav:Va,NextMonthButton:Qa,Option:Ua,PreviousMonthButton:Ka,Root:Za,Select:Ja,Week:La,WeekNumber:no,WeekNumberHeader:ro,Weekday:eo,Weekdays:to,Weeks:ao,YearsDropdown:oo},Symbol.toStringTag,{value:"Module"}));function ue(e,t,n=!1,r=ae){let{from:a,to:o}=e;const{differenceInCalendarDays:s,isSameDay:i}=r;return a&&o?(s(o,a)<0&&([a,o]=[o,a]),s(t,a)>=(n?1:0)&&s(o,t)>=(n?1:0)):!n&&o?i(o,t):!n&&a?i(a,t):!1}function Ke(e){return!!(e&&typeof e=="object"&&"before"in e&&"after"in e)}function _e(e){return!!(e&&typeof e=="object"&&"from"in e)}function Ze(e){return!!(e&&typeof e=="object"&&"after"in e)}function Je(e){return!!(e&&typeof e=="object"&&"before"in e)}function zt(e){return!!(e&&typeof e=="object"&&"dayOfWeek"in e)}function At(e,t){return Array.isArray(e)&&e.every(t.isDate)}function ce(e,t,n=ae){const r=Array.isArray(t)?t:[t],{isSameDay:a,differenceInCalendarDays:o,isAfter:s}=n;return r.some(i=>{if(typeof i=="boolean")return i;if(n.isDate(i))return a(e,i);if(At(i,n))return i.some(u=>a(e,u));if(_e(i))return ue(i,e,!1,n);if(zt(i))return Array.isArray(i.dayOfWeek)?i.dayOfWeek.includes(e.getDay()):i.dayOfWeek===e.getDay();if(Ke(i)){const u=o(i.before,e),c=o(i.after,e),d=u>0,l=c<0;return s(i.before,i.after)?l&&d:d||l}return Ze(i)?o(e,i.after)>0:Je(i)?o(i.before,e)>0:typeof i=="function"?i(e):!1})}function io(e,t,n,r,a){const{disabled:o,hidden:s,modifiers:i,showOutsideDays:u,broadcastCalendar:c,today:d=a.today()}=t,{isSameDay:l,isSameMonth:h,startOfMonth:w,isBefore:D,endOfMonth:O,isAfter:v}=a,C=n&&w(n),b=r&&O(r),g={[H.focused]:[],[H.outside]:[],[H.disabled]:[],[H.hidden]:[],[H.today]:[]},N={};for(const M of e){const{date:f,displayMonth:S}=M,Y=!!(S&&!h(f,S)),I=!!(C&&D(f,C)),B=!!(b&&v(f,b)),A=!!(o&&ce(f,o,a)),Q=!!(s&&ce(f,s,a))||I||B||!c&&!u&&Y||c&&u===!1&&Y,j=l(f,d);Y&&g.outside.push(M),A&&g.disabled.push(M),Q&&g.hidden.push(M),j&&g.today.push(M),i&&Object.keys(i).forEach(R=>{const me=i==null?void 0:i[R];me&&ce(f,me,a)&&(N[R]?N[R].push(M):N[R]=[M])})}return M=>{const f={[H.focused]:!1,[H.disabled]:!1,[H.hidden]:!1,[H.outside]:!1,[H.today]:!1},S={};for(const Y in g){const I=g[Y];f[Y]=I.some(B=>B===M)}for(const Y in N)S[Y]=N[Y].some(I=>I===M);return{...f,...S}}}function uo(e,t,n={}){return Object.entries(e).filter(([,a])=>a===!0).reduce((a,[o])=>(n[o]?a.push(n[o]):t[H[o]]?a.push(t[H[o]]):t[J[o]]&&a.push(t[J[o]]),a),[t[m.Day]])}function co(e){return{...so,...e}}function fo(e){const t={"data-mode":e.mode??void 0,"data-required":"required"in e?e.required:void 0,"data-multiple-months":e.numberOfMonths&&e.numberOfMonths>1||void 0,"data-week-numbers":e.showWeekNumber||void 0,"data-broadcast-calendar":e.broadcastCalendar||void 0,"data-nav-layout":e.navLayout||void 0};return Object.entries(e).forEach(([n,r])=>{n.startsWith("data-")&&(t[n]=r)}),t}function Le(){const e={};for(const t in m)e[m[t]]=`rdp-${m[t]}`;for(const t in H)e[H[t]]=`rdp-${H[t]}`;for(const t in J)e[J[t]]=`rdp-${J[t]}`;for(const t in G)e[G[t]]=`rdp-${G[t]}`;return e}function lo(e,t,n){return(n??new X(t)).formatMonthYear(e)}function ho(e,t,n){return(n??new X(t)).format(e,"d")}function mo(e,t=ae){return t.format(e,"LLLL")}function yo(e,t,n){return(n??new X(t)).format(e,"cccccc")}function go(e,t=ae){return e<10?t.formatNumber(`0${e.toLocaleString()}`):t.formatNumber(`${e.toLocaleString()}`)}function wo(){return""}function bo(e,t=ae){return t.format(e,"yyyy")}const Mo=Object.freeze(Object.defineProperty({__proto__:null,formatCaption:lo,formatDay:ho,formatMonthDropdown:mo,formatWeekNumber:go,formatWeekNumberHeader:wo,formatWeekdayName:yo,formatYearDropdown:bo},Symbol.toStringTag,{value:"Module"}));function ko(e){return{...Mo,...e}}function qt(e,t,n,r){let a=(r??new X(n)).format(e,"PPPP");return t.today&&(a=`Today, ${a}`),t.selected&&(a=`${a}, selected`),a}function jt(e,t,n){return(n??new X(t)).formatMonthYear(e)}function Rt(e,t,n,r){let a=(r??new X(n)).format(e,"PPPP");return t!=null&&t.today&&(a=`Today, ${a}`),a}function Gt(e){return"Choose the Month"}function Xt(){return""}const Do="Go to the Next Month";function Vt(e,t){return Do}function Qt(e){return"Go to the Previous Month"}function Ut(e,t,n){return(n??new X(t)).format(e,"cccc")}function Kt(e,t){return`Week ${e}`}function Zt(e){return"Week Number"}function Jt(e){return"Choose the Year"}const vo=Object.freeze(Object.defineProperty({__proto__:null,labelDayButton:qt,labelGrid:jt,labelGridcell:Rt,labelMonthDropdown:Gt,labelNav:Xt,labelNext:Vt,labelPrevious:Qt,labelWeekNumber:Kt,labelWeekNumberHeader:Zt,labelWeekday:Ut,labelYearDropdown:Jt},Symbol.toStringTag,{value:"Module"})),Z=(e,t,n)=>t||(n?typeof n=="function"?n:(...r)=>n:e);function Oo(e,t){var r;const n=((r=t.locale)==null?void 0:r.labels)??{};return{...vo,...e??{},labelDayButton:Z(qt,e==null?void 0:e.labelDayButton,n.labelDayButton),labelMonthDropdown:Z(Gt,e==null?void 0:e.labelMonthDropdown,n.labelMonthDropdown),labelNext:Z(Vt,e==null?void 0:e.labelNext,n.labelNext),labelPrevious:Z(Qt,e==null?void 0:e.labelPrevious,n.labelPrevious),labelWeekNumber:Z(Kt,e==null?void 0:e.labelWeekNumber,n.labelWeekNumber),labelYearDropdown:Z(Jt,e==null?void 0:e.labelYearDropdown,n.labelYearDropdown),labelGrid:Z(jt,e==null?void 0:e.labelGrid,n.labelGrid),labelGridcell:Z(Rt,e==null?void 0:e.labelGridcell,n.labelGridcell),labelNav:Z(Xt,e==null?void 0:e.labelNav,n.labelNav),labelWeekNumberHeader:Z(Zt,e==null?void 0:e.labelWeekNumberHeader,n.labelWeekNumberHeader),labelWeekday:Z(Ut,e==null?void 0:e.labelWeekday,n.labelWeekday)}}function Wo(e,t,n,r,a){const{startOfMonth:o,startOfYear:s,endOfYear:i,eachMonthOfInterval:u,getMonth:c}=a;return u({start:s(e),end:i(e)}).map(h=>{const w=r.formatMonthDropdown(h,a),D=c(h),O=t&&ho(n)||!1;return{value:D,label:w,disabled:O}})}function So(e,t={},n={}){let r={...t==null?void 0:t[m.Day]};return Object.entries(e).filter(([,a])=>a===!0).forEach(([a])=>{r={...r,...n==null?void 0:n[a]}}),r}function No(e,t,n,r){const a=r??e.today(),o=n?e.startOfBroadcastWeek(a,e):t?e.startOfISOWeek(a):e.startOfWeek(a),s=[];for(let i=0;i<7;i++){const u=e.addDays(o,i);s.push(u)}return s}function Co(e,t,n,r,a=!1){if(!e||!t)return;const{startOfYear:o,endOfYear:s,eachYearOfInterval:i,getYear:u}=r,c=o(e),d=s(t),l=i({start:c,end:d});return a&&l.reverse(),l.map(h=>{const w=n.formatYearDropdown(h,r);return{value:u(h),label:w,disabled:!1}})}function po(e,t={}){var i;const{weekStartsOn:n,locale:r}=t,a=n??((i=r==null?void 0:r.options)==null?void 0:i.weekStartsOn)??0,o=u=>{const c=typeof u=="number"||typeof u=="string"?new Date(u):u;return new q(c.getFullYear(),c.getMonth(),c.getDate(),12,0,0,e)},s=u=>{const c=o(u);return new Date(c.getFullYear(),c.getMonth(),c.getDate(),0,0,0,0)};return{today:()=>o(q.tz(e)),newDate:(u,c,d)=>new q(u,c,d,12,0,0,e),startOfDay:u=>o(u),startOfWeek:(u,c)=>{const d=o(u),l=(c==null?void 0:c.weekStartsOn)??a,h=(d.getDay()-l+7)%7;return d.setDate(d.getDate()-h),d},startOfISOWeek:u=>{const c=o(u),d=(c.getDay()-1+7)%7;return c.setDate(c.getDate()-d),c},startOfMonth:u=>{const c=o(u);return c.setDate(1),c},startOfYear:u=>{const c=o(u);return c.setMonth(0,1),c},endOfWeek:(u,c)=>{const d=o(u),w=((((c==null?void 0:c.weekStartsOn)??a)+6)%7-d.getDay()+7)%7;return d.setDate(d.getDate()+w),d},endOfISOWeek:u=>{const c=o(u),d=(7-c.getDay())%7;return c.setDate(c.getDate()+d),c},endOfMonth:u=>{const c=o(u);return c.setMonth(c.getMonth()+1,0),c},endOfYear:u=>{const c=o(u);return c.setMonth(11,31),c},eachMonthOfInterval:u=>{const c=o(u.start),d=o(u.end),l=[],h=new q(c.getFullYear(),c.getMonth(),1,12,0,0,e),w=d.getFullYear()*12+d.getMonth();for(;h.getFullYear()*12+h.getMonth()<=w;)l.push(new q(h,e)),h.setMonth(h.getMonth()+1,1);return l},addDays:(u,c)=>{const d=o(u);return d.setDate(d.getDate()+c),d},addWeeks:(u,c)=>{const d=o(u);return d.setDate(d.getDate()+c*7),d},addMonths:(u,c)=>{const d=o(u);return d.setMonth(d.getMonth()+c),d},addYears:(u,c)=>{const d=o(u);return d.setFullYear(d.getFullYear()+c),d},eachYearOfInterval:u=>{const c=o(u.start),d=o(u.end),l=[],h=new q(c.getFullYear(),0,1,12,0,0,e);for(;h.getFullYear()<=d.getFullYear();)l.push(new q(h,e)),h.setFullYear(h.getFullYear()+1,0,1);return l},getWeek:(u,c)=>{var l;const d=s(u);return Ue(d,{weekStartsOn:(c==null?void 0:c.weekStartsOn)??a,firstWeekContainsDate:(c==null?void 0:c.firstWeekContainsDate)??((l=r==null?void 0:r.options)==null?void 0:l.firstWeekContainsDate)??1})},getISOWeek:u=>{const c=s(u);return Qe(c)},differenceInCalendarDays:(u,c)=>{const d=s(u),l=s(c);return Ve(d,l)},differenceInCalendarMonths:(u,c)=>{const d=s(u),l=s(c);return pt(d,l)}}}const Ce=e=>e instanceof HTMLElement?e:null,je=e=>[...e.querySelectorAll("[data-animated-month]")??[]],xo=e=>Ce(e.querySelector("[data-animated-month]")),Re=e=>Ce(e.querySelector("[data-animated-caption]")),Ge=e=>Ce(e.querySelector("[data-animated-weeks]")),Po=e=>Ce(e.querySelector("[data-animated-nav]")),To=e=>Ce(e.querySelector("[data-animated-weekdays]"));function Yo(e,t,{classNames:n,months:r,focused:a,dateLib:o}){const s=E.useRef(null),i=E.useRef(r),u=E.useRef(!1);E.useLayoutEffect(()=>{const c=i.current;if(i.current=r,!t||!e.current||!(e.current instanceof HTMLElement)||r.length===0||c.length===0||r.length!==c.length)return;const d=o.isSameMonth(r[0].date,c[0].date),l=o.isAfter(r[0].date,c[0].date),h=l?n[G.caption_after_enter]:n[G.caption_before_enter],w=l?n[G.weeks_after_enter]:n[G.weeks_before_enter],D=s.current,O=e.current.cloneNode(!0);if(O instanceof HTMLElement?(je(O).forEach(g=>{if(!(g instanceof HTMLElement))return;const N=xo(g);N&&g.contains(N)&&g.removeChild(N);const M=Re(g);M&&M.classList.remove(h);const f=Ge(g);f&&f.classList.remove(w)}),s.current=O):s.current=null,u.current||d||a)return;const v=D instanceof HTMLElement?je(D):[],C=je(e.current);if(C!=null&&C.every(b=>b instanceof HTMLElement)&&(v!=null&&v.every(b=>b instanceof HTMLElement))){u.current=!0,e.current.style.isolation="isolate";const b=Po(e.current);b&&(b.style.zIndex="1"),C.forEach((g,N)=>{const M=v[N];if(!M)return;g.style.position="relative",g.style.overflow="hidden";const f=Re(g);f&&f.classList.add(h);const S=Ge(g);S&&S.classList.add(w);const Y=()=>{u.current=!1,e.current&&(e.current.style.isolation=""),b&&(b.style.zIndex=""),f&&f.classList.remove(h),S&&S.classList.remove(w),g.style.position="",g.style.overflow="",g.contains(M)&&g.removeChild(M)};M.style.pointerEvents="none",M.style.position="absolute",M.style.overflow="hidden",M.setAttribute("aria-hidden","true");const I=To(M);I&&(I.style.opacity="0");const B=Re(M);B&&(B.classList.add(l?n[G.caption_before_exit]:n[G.caption_after_exit]),B.addEventListener("animationend",Y));const A=Ge(M);A&&A.classList.add(l?n[G.weeks_before_exit]:n[G.weeks_after_exit]),g.insertBefore(M,g.firstChild)})}})}function _o(e,t,n,r){const a=e[0],o=e[e.length-1],{ISOWeek:s,fixedWeeks:i,broadcastCalendar:u}=n??{},{addDays:c,differenceInCalendarDays:d,differenceInCalendarMonths:l,endOfBroadcastWeek:h,endOfISOWeek:w,endOfMonth:D,endOfWeek:O,isAfter:v,startOfBroadcastWeek:C,startOfISOWeek:b,startOfWeek:g}=r,N=u?C(a,r):s?b(a):g(a),M=u?h(o):s?w(D(o)):O(D(o)),f=t&&(u?h(t):s?w(t):O(t)),S=f&&v(M,f)?f:M,Y=d(S,N),I=l(o,a)+1,B=[];for(let j=0;j<=Y;j++){const R=c(N,j);B.push(R)}const Q=(u?35:42)*I;if(i&&B.length{const a=r.weeks.reduce((o,s)=>o.concat(s.days.slice()),t.slice());return n.concat(a.slice())},t.slice())}function Fo(e,t,n,r){const{numberOfMonths:a=1}=n,o=[];for(let s=0;st)break;o.push(i)}return o}function Mt(e,t,n,r){const{month:a,defaultMonth:o,today:s=r.today(),numberOfMonths:i=1}=e;let u=a||o||s;const{differenceInCalendarMonths:c,addMonths:d,startOfMonth:l}=r;if(n&&c(n,u){const C=n.broadcastCalendar?l(v,r):n.ISOWeek?h(v):w(v),b=n.broadcastCalendar?o(v):n.ISOWeek?s(i(v)):u(i(v)),g=t.filter(S=>S>=C&&S<=b),N=n.broadcastCalendar?35:42;if(n.fixedWeeks&&g.length{const I=N-g.length;return Y>b&&Y<=a(b,I)});g.push(...S)}const M=g.reduce((S,Y)=>{const I=n.ISOWeek?c(Y):d(Y),B=S.find(Q=>Q.weekNumber===I),A=new Ht(Y,v,r);return B?B.days.push(A):S.push(new Ea(I,[A])),S},[]),f=new _a(v,M);return O.push(f),O},[]);return n.reverseMonths?D.reverse():D}function Io(e,t){let{startMonth:n,endMonth:r}=e;const{startOfYear:a,startOfDay:o,startOfMonth:s,endOfMonth:i,addYears:u,endOfYear:c,today:d}=t,l=e.captionLayout==="dropdown"||e.captionLayout==="dropdown-years";return n?n=s(n):!n&&l&&(n=a(u(e.today??d(),-100))),r?r=i(r):!r&&l&&(r=c(e.today??d())),[n&&o(n),r&&o(r)]}function Ho(e,t,n,r){if(n.disableNavigation)return;const{pagedNavigation:a,numberOfMonths:o=1}=n,{startOfMonth:s,addMonths:i,differenceInCalendarMonths:u}=r,c=a?o:1,d=s(e);if(!t)return i(d,c);if(!(u(t,e)n.concat(r.weeks.slice()),t.slice())}function Ee(e,t){const[n,r]=E.useState(e);return[t===void 0?n:t,r]}function Ao(e,t){var N;const[n,r]=Io(e,t),{startOfMonth:a,endOfMonth:o}=t,s=Mt(e,n,r,t),[i,u]=Ee(s,e.month?s:void 0);E.useEffect(()=>{const M=Mt(e,n,r,t);u(M)},[e.timeZone]);const{months:c,weeks:d,days:l,previousMonth:h,nextMonth:w}=E.useMemo(()=>{const M=Fo(i,r,{numberOfMonths:e.numberOfMonths},t),f=_o(M,e.endMonth?o(e.endMonth):void 0,{ISOWeek:e.ISOWeek,fixedWeeks:e.fixedWeeks,broadcastCalendar:e.broadcastCalendar},t),S=Bo(M,f,{broadcastCalendar:e.broadcastCalendar,fixedWeeks:e.fixedWeeks,ISOWeek:e.ISOWeek,reverseMonths:e.reverseMonths},t),Y=zo(S),I=Eo(S),B=$o(i,n,e,t),A=Ho(i,r,e,t);return{months:S,weeks:Y,days:I,previousMonth:B,nextMonth:A}},[t,i.getTime(),r==null?void 0:r.getTime(),n==null?void 0:n.getTime(),e.disableNavigation,e.broadcastCalendar,(N=e.endMonth)==null?void 0:N.getTime(),e.fixedWeeks,e.ISOWeek,e.numberOfMonths,e.pagedNavigation,e.reverseMonths]),{disableNavigation:D,onMonthChange:O}=e,v=M=>d.some(f=>f.days.some(S=>S.isEqualTo(M))),C=M=>{if(D)return;let f=a(M);n&&fa(r)&&(f=a(r)),u(f),O==null||O(f)};return{months:c,weeks:d,days:l,navStart:n,navEnd:r,previousMonth:h,nextMonth:w,goToMonth:C,goToDay:M=>{v(M)||C(M.date)}}}var ee;(function(e){e[e.Today=0]="Today",e[e.Selected=1]="Selected",e[e.LastFocused=2]="LastFocused",e[e.FocusedModifier=3]="FocusedModifier"})(ee||(ee={}));function kt(e){return!e[H.disabled]&&!e[H.hidden]&&!e[H.outside]}function qo(e,t,n,r){let a,o=-1;for(const s of e){const i=t(s);kt(i)&&(i[H.focused]&&okt(t(s)))),a}function jo(e,t,n,r,a,o,s){const{ISOWeek:i,broadcastCalendar:u}=o,{addDays:c,addMonths:d,addWeeks:l,addYears:h,endOfBroadcastWeek:w,endOfISOWeek:D,endOfWeek:O,max:v,min:C,startOfBroadcastWeek:b,startOfISOWeek:g,startOfWeek:N}=s;let f={day:c,week:l,month:d,year:h,startOfWeek:S=>u?b(S,s):i?g(S):N(S),endOfWeek:S=>u?w(S):i?D(S):O(S)}[e](n,t==="after"?1:-1);return t==="before"&&r?f=v([r,f]):t==="after"&&a&&(f=C([a,f])),f}function Lt(e,t,n,r,a,o,s,i=0){if(i>365)return;const u=jo(e,t,n.date,r,a,o,s),c=!!(o.disabled&&ce(u,o.disabled,s)),d=!!(o.hidden&&ce(u,o.hidden,s)),l=u,h=new Ht(u,l,s);return!c&&!d?h:Lt(e,t,h,r,a,o,s,i+1)}function Ro(e,t,n,r,a){const{autoFocus:o}=e,[s,i]=E.useState(),u=qo(t.days,n,r||(()=>!1),s),[c,d]=E.useState(o?u:void 0);return{isFocusTarget:O=>!!(u!=null&&u.isEqualTo(O)),setFocused:d,focused:c,blur:()=>{i(c),d(void 0)},moveFocus:(O,v)=>{if(!c)return;const C=Lt(O,v,c,t.navStart,t.navEnd,e,a);C&&(e.disableNavigation&&!t.days.some(g=>g.isEqualTo(C))||(t.goToDay(C),d(C)))}}}function Go(e,t){const{selected:n,required:r,onSelect:a}=e,[o,s]=Ee(n,a?n:void 0),i=a?n:o,{isSameDay:u}=t,c=w=>(i==null?void 0:i.some(D=>u(D,w)))??!1,{min:d,max:l}=e;return{selected:i,select:(w,D,O)=>{let v=[...i??[]];if(c(w)){if((i==null?void 0:i.length)===d||r&&(i==null?void 0:i.length)===1)return;v=i==null?void 0:i.filter(C=>!u(C,w))}else(i==null?void 0:i.length)===l?v=[w]:v=[...v,w];return a||s(v),a==null||a(v,w,D,O),v},isSelected:c}}function Xo(e,t,n=0,r=0,a=!1,o=ae){const{from:s,to:i}=t||{},{isSameDay:u,isAfter:c,isBefore:d}=o;let l;if(!s&&!i)l={from:e,to:n>0?void 0:e};else if(s&&!i)u(s,e)?n===0?l={from:s,to:e}:a?l={from:s,to:void 0}:l=void 0:d(e,s)?l={from:e,to:s}:l={from:s,to:e};else if(s&&i)if(u(s,e)&&u(i,e))a?l={from:s,to:i}:l=void 0;else if(u(s,e))l={from:s,to:n>0?void 0:e};else if(u(i,e))l={from:e,to:n>0?void 0:e};else if(d(e,s))l={from:e,to:i};else if(c(e,s))l={from:s,to:e};else if(c(e,i))l={from:s,to:e};else throw new Error("Invalid range");if(l!=null&&l.from&&(l!=null&&l.to)){const h=o.differenceInCalendarDays(l.to,l.from);r>0&&h>r?l={from:e,to:void 0}:n>1&&htypeof i!="function").some(i=>typeof i=="boolean"?i:n.isDate(i)?ue(e,i,!1,n):At(i,n)?i.some(u=>ue(e,u,!1,n)):_e(i)?i.from&&i.to?Dt(e,{from:i.from,to:i.to},n):!1:zt(i)?Vo(e,i.dayOfWeek,n):Ke(i)?n.isAfter(i.before,i.after)?Dt(e,{from:n.addDays(i.after,1),to:n.addDays(i.before,-1)},n):ce(e.from,i,n)||ce(e.to,i,n):Ze(i)||Je(i)?ce(e.from,i,n)||ce(e.to,i,n):!1))return!0;const s=r.filter(i=>typeof i=="function");if(s.length){let i=e.from;const u=n.differenceInCalendarDays(e.to,e.from);for(let c=0;c<=u;c++){if(s.some(d=>d(i)))return!0;i=n.addDays(i,1)}}return!1}function Uo(e,t){const{disabled:n,excludeDisabled:r,resetOnSelect:a,selected:o,required:s,onSelect:i}=e,[u,c]=Ee(o,i?o:void 0),d=i?o:u;return{selected:d,select:(w,D,O)=>{const{min:v,max:C}=e;let b;if(w){const g=d==null?void 0:d.from,N=d==null?void 0:d.to,M=!!g&&!!N,f=!!g&&!!N&&t.isSameDay(g,N)&&t.isSameDay(w,g);a&&(M||!(d!=null&&d.from))?!s&&f?b=void 0:b={from:w,to:void 0}:b=Xo(w,d,v,C,s,t)}return r&&n&&(b!=null&&b.from)&&b.to&&Qo({from:b.from,to:b.to},n,t)&&(b.from=w,b.to=void 0),i||c(b),i==null||i(b,w,D,O),b},isSelected:w=>d&&ue(d,w,!1,t)}}function Ko(e,t){const{selected:n,required:r,onSelect:a}=e,[o,s]=Ee(n,a?n:void 0),i=a?n:o,{isSameDay:u}=t;return{selected:i,select:(l,h,w)=>{let D=l;return!r&&i&&i&&u(l,i)&&(D=void 0),a||s(D),a==null||a(D,l,h,w),D},isSelected:l=>i?u(i,l):!1}}function Zo(e,t){const n=Ko(e,t),r=Go(e,t),a=Uo(e,t);switch(e.mode){case"single":return n;case"multiple":return r;case"range":return a;default:return}}function V(e,t){return e instanceof q&&e.timeZone===t?e:new q(e,t)}function ge(e,t,n){return V(e,t)}function vt(e,t,n){return typeof e=="boolean"||typeof e=="function"?e:e instanceof Date?ge(e,t):Array.isArray(e)?e.map(r=>r instanceof Date?ge(r,t):r):_e(e)?{...e,from:e.from?V(e.from,t):e.from,to:e.to?V(e.to,t):e.to}:Ke(e)?{before:ge(e.before,t),after:ge(e.after,t)}:Ze(e)?{after:ge(e.after,t)}:Je(e)?{before:ge(e.before,t)}:e}function Xe(e,t,n){return e&&(Array.isArray(e)?e.map(r=>vt(r,t)):vt(e,t))}function Jo(e){var st;let t=e;const n=t.timeZone;if(n&&(t={...e,timeZone:n},t.today&&(t.today=V(t.today,n)),t.month&&(t.month=V(t.month,n)),t.defaultMonth&&(t.defaultMonth=V(t.defaultMonth,n)),t.startMonth&&(t.startMonth=V(t.startMonth,n)),t.endMonth&&(t.endMonth=V(t.endMonth,n)),t.mode==="single"&&t.selected?t.selected=V(t.selected,n):t.mode==="multiple"&&t.selected?t.selected=(st=t.selected)==null?void 0:st.map(k=>V(k,n)):t.mode==="range"&&t.selected&&(t.selected={from:t.selected.from?V(t.selected.from,n):t.selected.from,to:t.selected.to?V(t.selected.to,n):t.selected.to}),t.disabled!==void 0&&(t.disabled=Xe(t.disabled,n)),t.hidden!==void 0&&(t.hidden=Xe(t.hidden,n)),t.modifiers)){const k={};Object.keys(t.modifiers).forEach(p=>{var W;k[p]=Xe((W=t.modifiers)==null?void 0:W[p],n)}),t.modifiers=k}const{components:r,formatters:a,labels:o,dateLib:s,locale:i,classNames:u}=E.useMemo(()=>{const k={...It,...t.locale},p=t.broadcastCalendar?1:t.weekStartsOn,W=t.noonSafe&&t.timeZone?po(t.timeZone,{weekStartsOn:p,locale:k}):void 0,$=t.dateLib&&W?{...W,...t.dateLib}:t.dateLib??W,P=new X({locale:k,weekStartsOn:p,firstWeekContainsDate:t.firstWeekContainsDate,useAdditionalWeekYearTokens:t.useAdditionalWeekYearTokens,useAdditionalDayOfYearTokens:t.useAdditionalDayOfYearTokens,timeZone:t.timeZone,numerals:t.numerals},$);return{dateLib:P,components:co(t.components),formatters:ko(t.formatters),labels:Oo(t.labels,P.options),locale:k,classNames:{...Le(),...t.classNames}}},[t.locale,t.broadcastCalendar,t.weekStartsOn,t.firstWeekContainsDate,t.useAdditionalWeekYearTokens,t.useAdditionalDayOfYearTokens,t.timeZone,t.numerals,t.dateLib,t.noonSafe,t.components,t.formatters,t.labels,t.classNames]);t.today||(t={...t,today:s.today()});const{captionLayout:c,mode:d,navLayout:l,numberOfMonths:h=1,onDayBlur:w,onDayClick:D,onDayFocus:O,onDayKeyDown:v,onDayMouseEnter:C,onDayMouseLeave:b,onNextClick:g,onPrevClick:N,showWeekNumber:M,styles:f}=t,{formatCaption:S,formatDay:Y,formatMonthDropdown:I,formatWeekNumber:B,formatWeekNumberHeader:A,formatWeekdayName:Q,formatYearDropdown:j}=a,R=Ao(t,s),{days:me,months:Me,navStart:Fe,navEnd:Be,previousMonth:U,nextMonth:K,goToMonth:oe}=R,Ie=io(me,t,Fe,Be,s),{isSelected:ke,select:De,selected:pe}=Zo(t,s)??{},{blur:et,focused:xe,isFocusTarget:en,moveFocus:tt,setFocused:Pe}=Ro(t,R,Ie,ke??(()=>!1),s),{labelDayButton:tn,labelGridcell:nn,labelGrid:rn,labelMonthDropdown:an,labelNav:nt,labelPrevious:on,labelNext:sn,labelWeekday:un,labelWeekNumber:cn,labelWeekNumberHeader:dn,labelYearDropdown:fn}=o,ln=E.useMemo(()=>No(s,t.ISOWeek,t.broadcastCalendar,t.today),[s,t.ISOWeek,t.broadcastCalendar,t.today]),rt=d!==void 0||D!==void 0,He=E.useCallback(()=>{U&&(oe(U),N==null||N(U))},[U,oe,N]),$e=E.useCallback(()=>{K&&(oe(K),g==null||g(K))},[oe,K,g]),hn=E.useCallback((k,p)=>W=>{W.preventDefault(),W.stopPropagation(),Pe(k),!p.disabled&&(De==null||De(k.date,p,W),D==null||D(k.date,p,W))},[De,D,Pe]),mn=E.useCallback((k,p)=>W=>{Pe(k),O==null||O(k.date,p,W)},[O,Pe]),yn=E.useCallback((k,p)=>W=>{et(),w==null||w(k.date,p,W)},[et,w]),gn=E.useCallback((k,p)=>W=>{const $={ArrowLeft:[W.shiftKey?"month":"day",t.dir==="rtl"?"after":"before"],ArrowRight:[W.shiftKey?"month":"day",t.dir==="rtl"?"before":"after"],ArrowDown:[W.shiftKey?"year":"week","after"],ArrowUp:[W.shiftKey?"year":"week","before"],PageUp:[W.shiftKey?"year":"month","before"],PageDown:[W.shiftKey?"year":"month","after"],Home:["startOfWeek","before"],End:["endOfWeek","after"]};if($[W.key]){W.preventDefault(),W.stopPropagation();const[P,L]=$[W.key];tt(P,L)}v==null||v(k.date,p,W)},[tt,v,t.dir]),wn=E.useCallback((k,p)=>W=>{C==null||C(k.date,p,W)},[C]),bn=E.useCallback((k,p)=>W=>{b==null||b(k.date,p,W)},[b]),Mn=E.useCallback((k,p)=>W=>{const $=Number(W.target.value),P=s.setMonth(s.startOfMonth(k),$);oe(s.addMonths(P,-p))},[s,oe]),kn=E.useCallback((k,p)=>W=>{const $=Number(W.target.value),P=s.setYear(s.startOfMonth(k),$);oe(s.addMonths(P,-p))},[s,oe]),{className:Dn,style:vn}=E.useMemo(()=>({className:[u[m.Root],t.className].filter(Boolean).join(" "),style:{...f==null?void 0:f[m.Root],...t.style}}),[u,t.className,t.style,f]),On=fo(t),at=k=>{const p=f==null?void 0:f[m.Dropdown],W=f==null?void 0:f[k];if(!(!p&&!W))return{...p,...W}},ot=E.useRef(null);Yo(ot,!!t.animate,{classNames:u,months:Me,focused:xe,dateLib:s});const Wn={dayPickerProps:t,selected:pe,select:De,isSelected:ke,months:Me,nextMonth:K,previousMonth:U,goToMonth:oe,getModifiers:Ie,components:r,classNames:u,styles:f,labels:o,formatters:a};return y.createElement($t.Provider,{value:Wn},y.createElement(r.Root,{rootRef:t.animate?ot:void 0,className:Dn,style:vn,dir:t.dir,id:t.id,lang:t.lang??i.code,nonce:t.nonce,title:t.title,role:t.role,"aria-label":t["aria-label"],"aria-labelledby":t["aria-labelledby"],...On},y.createElement(r.Months,{className:u[m.Months],style:f==null?void 0:f[m.Months]},!t.hideNavigation&&!l&&y.createElement(r.Nav,{"data-animated-nav":t.animate?"true":void 0,className:u[m.Nav],style:f==null?void 0:f[m.Nav],"aria-label":nt(),onPreviousClick:He,onNextClick:$e,previousMonth:U,nextMonth:K}),Me.map((k,p)=>{const W=t.reverseMonths?Me.length-1-p:p;return y.createElement(r.Month,{"data-animated-month":t.animate?"true":void 0,className:u[m.Month],style:f==null?void 0:f[m.Month],key:p,displayIndex:p,calendarMonth:k},l==="around"&&!t.hideNavigation&&p===0&&y.createElement(r.PreviousMonthButton,{type:"button",className:u[m.PreviousMonthButton],style:f==null?void 0:f[m.PreviousMonthButton],tabIndex:U?void 0:-1,"aria-disabled":U?void 0:!0,"aria-label":on(U),onClick:He,"data-animated-button":t.animate?"true":void 0},y.createElement(r.Chevron,{disabled:U?void 0:!0,className:u[m.Chevron],style:f==null?void 0:f[m.Chevron],orientation:t.dir==="rtl"?"right":"left"})),y.createElement(r.MonthCaption,{"data-animated-caption":t.animate?"true":void 0,className:u[m.MonthCaption],style:f==null?void 0:f[m.MonthCaption],calendarMonth:k,displayIndex:p},c!=null&&c.startsWith("dropdown")?y.createElement(r.DropdownNav,{className:u[m.Dropdowns],style:f==null?void 0:f[m.Dropdowns]},(()=>{const $=c==="dropdown"||c==="dropdown-months"?y.createElement(r.MonthsDropdown,{key:"month",className:u[m.MonthsDropdown],"aria-label":an(),disabled:!!t.disableNavigation,onChange:Mn(k.date,W),options:Wo(k.date,Fe,Be,a,s),style:at(m.MonthsDropdown),value:s.getMonth(k.date)}):y.createElement("span",{key:"month"},I(k.date,s)),P=c==="dropdown"||c==="dropdown-years"?y.createElement(r.YearsDropdown,{key:"year",className:u[m.YearsDropdown],"aria-label":fn(s.options),disabled:!!t.disableNavigation,onChange:kn(k.date,W),options:Co(Fe,Be,a,s,!!t.reverseYears),style:at(m.YearsDropdown),value:s.getYear(k.date)}):y.createElement("span",{key:"year"},j(k.date,s));return s.getMonthYearOrder()==="year-first"?[P,$]:[$,P]})(),y.createElement("span",{role:"status","aria-live":"polite",style:{border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap",wordWrap:"normal"}},S(k.date,s.options,s))):y.createElement(r.CaptionLabel,{className:u[m.CaptionLabel],style:f==null?void 0:f[m.CaptionLabel],role:"status","aria-live":"polite"},S(k.date,s.options,s))),l==="around"&&!t.hideNavigation&&p===h-1&&y.createElement(r.NextMonthButton,{type:"button",className:u[m.NextMonthButton],style:f==null?void 0:f[m.NextMonthButton],tabIndex:K?void 0:-1,"aria-disabled":K?void 0:!0,"aria-label":sn(K),onClick:$e,"data-animated-button":t.animate?"true":void 0},y.createElement(r.Chevron,{disabled:K?void 0:!0,className:u[m.Chevron],style:f==null?void 0:f[m.Chevron],orientation:t.dir==="rtl"?"left":"right"})),p===h-1&&l==="after"&&!t.hideNavigation&&y.createElement(r.Nav,{"data-animated-nav":t.animate?"true":void 0,className:u[m.Nav],style:f==null?void 0:f[m.Nav],"aria-label":nt(),onPreviousClick:He,onNextClick:$e,previousMonth:U,nextMonth:K}),y.createElement(r.MonthGrid,{role:"grid","aria-multiselectable":d==="multiple"||d==="range","aria-label":rn(k.date,s.options,s)||void 0,className:u[m.MonthGrid],style:f==null?void 0:f[m.MonthGrid]},!t.hideWeekdays&&y.createElement(r.Weekdays,{"data-animated-weekdays":t.animate?"true":void 0,className:u[m.Weekdays],style:f==null?void 0:f[m.Weekdays]},M&&y.createElement(r.WeekNumberHeader,{"aria-label":dn(s.options),className:u[m.WeekNumberHeader],style:f==null?void 0:f[m.WeekNumberHeader],scope:"col"},A()),ln.map($=>y.createElement(r.Weekday,{"aria-label":un($,s.options,s),className:u[m.Weekday],key:String($),style:f==null?void 0:f[m.Weekday],scope:"col"},Q($,s.options,s)))),y.createElement(r.Weeks,{"data-animated-weeks":t.animate?"true":void 0,className:u[m.Weeks],style:f==null?void 0:f[m.Weeks]},k.weeks.map($=>y.createElement(r.Week,{className:u[m.Week],key:$.weekNumber,style:f==null?void 0:f[m.Week],week:$},M&&y.createElement(r.WeekNumber,{week:$,style:f==null?void 0:f[m.WeekNumber],"aria-label":cn($.weekNumber,{locale:i}),className:u[m.WeekNumber],scope:"row",role:"rowheader"},B($.weekNumber,s)),$.days.map(P=>{const{date:L}=P,x=Ie(P);if(x[H.focused]=!x.hidden&&!!(xe!=null&&xe.isEqualTo(P)),x[J.selected]=(ke==null?void 0:ke(L))||x.selected,_e(pe)){const{from:ze,to:Ae}=pe;x[J.range_start]=!!(ze&&Ae&&s.isSameDay(L,ze)),x[J.range_end]=!!(ze&&Ae&&s.isSameDay(L,Ae)),x[J.range_middle]=ue(pe,L,!0,s)}const Sn=So(x,f,t.modifiersStyles),Nn=uo(x,u,t.modifiersClassNames),Cn=!rt&&!x.hidden?nn(L,x,s.options,s):void 0;return y.createElement(r.Day,{key:`${P.isoDate}_${P.displayMonthId}`,day:P,modifiers:x,className:Nn.join(" "),style:Sn,role:"gridcell","aria-selected":x.selected||void 0,"aria-label":Cn,"data-day":P.isoDate,"data-month":P.outside?P.dateMonthId:void 0,"data-selected":x.selected||void 0,"data-disabled":x.disabled||void 0,"data-hidden":x.hidden||void 0,"data-outside":P.outside||void 0,"data-focused":x.focused||void 0,"data-today":x.today||void 0},!x.hidden&&rt?y.createElement(r.DayButton,{className:u[m.DayButton],style:f==null?void 0:f[m.DayButton],type:"button",day:P,modifiers:x,disabled:!x.focused&&x.disabled||void 0,"aria-disabled":x.focused&&x.disabled||void 0,tabIndex:en(P)?0:-1,"aria-label":tn(L,x,s.options,s),onClick:hn(P,x),onBlur:yn(P,x),onFocus:mn(P,x),onKeyDown:gn(P,x),onMouseEnter:wn(P,x),onMouseLeave:bn(P,x)},Y(L,s.options,s)):!x.hidden&&Y(P.date,s.options,s))}))))))})),t.footer&&y.createElement(r.Footer,{className:u[m.Footer],style:f==null?void 0:f[m.Footer],role:"status","aria-live":"polite"},t.footer)))}function as({className:e,classNames:t,showOutsideDays:n=!0,captionLayout:r="label",buttonVariant:a="ghost",locale:o,formatters:s,components:i,...u}){const c=Le();return se.jsx(Jo,{showOutsideDays:n,className:T("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,e),captionLayout:r,locale:o,formatters:{formatMonthDropdown:d=>d.toLocaleString(o==null?void 0:o.code,{month:"short"}),...s},classNames:{root:T("w-fit",c.root),months:T("relative flex flex-col gap-4 md:flex-row",c.months),month:T("flex w-full flex-col gap-4",c.month),nav:T("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",c.nav),button_previous:T(it({variant:a}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",c.button_previous),button_next:T(it({variant:a}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",c.button_next),month_caption:T("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",c.month_caption),dropdowns:T("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",c.dropdowns),dropdown_root:T("relative rounded-(--cell-radius)",c.dropdown_root),dropdown:T("absolute inset-0 bg-popover opacity-0",c.dropdown),caption_label:T("font-medium select-none",r==="label"?"text-sm":"flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",c.caption_label),month_grid:T("w-full border-collapse",c.month_grid),weekdays:T("flex",c.weekdays),weekday:T("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",c.weekday),week:T("mt-2 flex w-full",c.week),week_number_header:T("w-(--cell-size) select-none",c.week_number_header),week_number:T("text-[0.8rem] text-muted-foreground select-none",c.week_number),day:T("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",u.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)":"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",c.day),range_start:T("relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",c.range_start),range_middle:T("rounded-none",c.range_middle),range_end:T("relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",c.range_end),today:T("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",c.today),outside:T("text-muted-foreground aria-selected:text-muted-foreground",c.outside),disabled:T("text-muted-foreground opacity-50",c.disabled),hidden:T("invisible",c.hidden),...t},components:{Root:({className:d,rootRef:l,...h})=>se.jsx("div",{"data-slot":"calendar",ref:l,className:T(d),...h}),Chevron:({className:d,orientation:l,...h})=>l==="left"?se.jsx(Tn,{className:T("size-4",d),...h}):l==="right"?se.jsx(pn,{className:T("size-4",d),...h}):se.jsx(xn,{className:T("size-4",d),...h}),DayButton:({...d})=>se.jsx(Lo,{locale:o,...d}),WeekNumber:({children:d,...l})=>se.jsx("td",{...l,children:se.jsx("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:d})}),...i},...u})}function Lo({className:e,day:t,modifiers:n,locale:r,...a}){const o=Le(),s=E.useRef(null);return E.useEffect(()=>{var i;n.focused&&((i=s.current)==null||i.focus())},[n.focused]),se.jsx(Pn,{variant:"ghost",size:"icon","data-day":t.date.toLocaleDateString(r==null?void 0:r.code),"data-selected-single":n.selected&&!n.range_start&&!n.range_end&&!n.range_middle,"data-range-start":n.range_start,"data-range-end":n.range_end,"data-range-middle":n.range_middle,className:T("relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",o.day,e),...a})}export{as as C,te as a,be as b,ne as c,Yt as d,we as e,ve as f,rs as z}; diff --git a/adminui/assets/calendar-BVDFi2CJ.js b/adminui/assets/calendar-Clkjlc7K.js similarity index 89% rename from adminui/assets/calendar-BVDFi2CJ.js rename to adminui/assets/calendar-Clkjlc7K.js index d364f67a..ae0d0ad7 100644 --- a/adminui/assets/calendar-BVDFi2CJ.js +++ b/adminui/assets/calendar-Clkjlc7K.js @@ -1,4 +1,4 @@ -import{a$ as e}from"./index-EC_gIQIi.js";/** +import{a$ as e}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/card-BhczRj8d.js b/adminui/assets/card-BwvuSgdv.js similarity index 95% rename from adminui/assets/card-BhczRj8d.js rename to adminui/assets/card-BwvuSgdv.js index 046d18f4..a9541f0d 100644 --- a/adminui/assets/card-BhczRj8d.js +++ b/adminui/assets/card-BwvuSgdv.js @@ -1 +1 @@ -import{j as d}from"./vendor-react-j_G0Dyx0.js";import{aX as r}from"./index-EC_gIQIi.js";function i({className:a,size:t="default",...s}){return d.jsx("div",{"data-slot":"card","data-size":t,className:r("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 has-data-[padless]:py-0 has-data-[padless]:gap-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...s})}function n({className:a,...t}){return d.jsx("div",{"data-slot":"card-header",className:r("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...t})}function c({className:a,...t}){return d.jsx("div",{"data-slot":"card-title",className:r("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...t})}function p({className:a,...t}){return d.jsx("div",{"data-slot":"card-description",className:r("text-sm text-muted-foreground",a),...t})}function u({className:a,...t}){const s=a==null?void 0:a.includes("p-0");return d.jsx("div",{"data-slot":"card-content",...s?{"data-padless":""}:{},className:r("px-4 group-data-[size=sm]/card:px-3",a),...t})}export{i as C,u as a,p as b,n as c,c as d}; +import{j as d}from"./vendor-react-j_G0Dyx0.js";import{aX as r}from"./index-C-i99XXF.js";function i({className:a,size:t="default",...s}){return d.jsx("div",{"data-slot":"card","data-size":t,className:r("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 has-data-[padless]:py-0 has-data-[padless]:gap-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...s})}function n({className:a,...t}){return d.jsx("div",{"data-slot":"card-header",className:r("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...t})}function c({className:a,...t}){return d.jsx("div",{"data-slot":"card-title",className:r("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...t})}function p({className:a,...t}){return d.jsx("div",{"data-slot":"card-description",className:r("text-sm text-muted-foreground",a),...t})}function u({className:a,...t}){const s=a==null?void 0:a.includes("p-0");return d.jsx("div",{"data-slot":"card-content",...s?{"data-padless":""}:{},className:r("px-4 group-data-[size=sm]/card:px-3",a),...t})}export{i as C,u as a,p as b,n as c,c as d}; diff --git a/adminui/assets/categories-B9OwsW23.js b/adminui/assets/categories-DBjI7GIi.js similarity index 95% rename from adminui/assets/categories-B9OwsW23.js rename to adminui/assets/categories-DBjI7GIi.js index 1dea0be1..bd50ef04 100644 --- a/adminui/assets/categories-B9OwsW23.js +++ b/adminui/assets/categories-DBjI7GIi.js @@ -1,4 +1,4 @@ -import{f as i,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as Ue,c9 as Ye,c8 as $e,i as h,az as Ve,_ as B,ar as We,as as Je,av as Pe,aw as Ae,at as Fe,bK as C,ao as q,aW as E,l as Xe,L as Ze,R as es,M as ss,N as K,k as ts}from"./index-EC_gIQIi.js";import{u as Q}from"./useMutation-C9eWISs8.js";import{I as p}from"./input-D7bJWFUq.js";import{L as o}from"./label-BNi6V6qj.js";import{T as H}from"./textarea-CxSwwTO9.js";import{A as as,c as is,f as rs,g as ns,d as ls,e as os,b as cs,a as ds}from"./alert-dialog-BCjXQEnz.js";import{a as ms,f as gs,C as Re}from"./category-tree-select-CjofdK3h.js";import{P}from"./plus-BQJ6-Ehy.js";import{T as us}from"./tree-CxnI6aKY.js";import{P as qe}from"./pencil-9H2eFft0.js";import{T as Ke}from"./trash-2-g-gZl4Oc.js";import{F as xs}from"./folder-open-Bfr94q9k.js";import{F as hs}from"./file-C64ivkyc.js";import{E as ps}from"./ellipsis-vertical-29muOhpK.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./vendor-md-editor-C0GoXAL0.js";function u({label:t,value:r,mono:c}){return e.jsxs("div",{className:"flex gap-3 py-2.5 border-b last:border-b-0",children:[e.jsx("span",{className:"text-xs text-muted-foreground w-24 shrink-0 pt-0.5",children:t}),e.jsx("span",{className:`text-sm flex-1 ${c?"font-mono":""}`,children:r})]})}function Ge({label:t,src:r}){return e.jsxs("div",{className:"flex gap-3 py-2.5 border-b last:border-b-0",children:[e.jsx("span",{className:"text-xs text-muted-foreground w-24 shrink-0 pt-1",children:t}),r?e.jsxs("a",{href:r,target:"_blank",rel:"noreferrer",className:"group relative inline-block",children:[e.jsx("img",{src:r,alt:t,className:"h-20 rounded-md border object-cover"}),e.jsx("div",{className:"absolute inset-0 rounded-md bg-black/0 group-hover:bg-black/10 transition-colors"})]}):e.jsx("span",{className:"text-sm text-muted-foreground",children:"—"})]})}function js(t){const{node:r,style:c,dragHandle:f,onSelect:w,selectedId:d,onEdit:S,onDelete:N,onAddChild:m,labels:g}=t,x=r.children!=null&&r.children.length>0,y=r.level??0;return e.jsxs("div",{ref:f,style:{...c,position:"relative"},onClick:()=>{x&&r.toggle(),w(r.data.id)},className:`group flex items-center gap-1 cursor-pointer rounded px-1.5 py-0.5 text-sm h-full transition-colors ${d===r.data.id?"bg-primary/10 text-primary font-medium":"hover:bg-muted text-foreground"}`,children:[Array.from({length:y},(b,j)=>e.jsx("span",{className:"absolute top-0 bottom-0 border-l border-border",style:{left:6+j*12}},j)),e.jsx("span",{className:"flex size-4 items-center justify-center transition-transform shrink-0",style:{transform:x&&r.isOpen?"rotate(90deg)":"rotate(0deg)",visibility:x?"visible":"hidden"},children:e.jsx(Xe,{className:"size-3"})}),x?r.isOpen?e.jsx(xs,{className:"size-3.5 shrink-0 text-amber-500"}):e.jsx(B,{className:"size-3.5 shrink-0 text-amber-500"}):e.jsx(hs,{className:"size-3.5 shrink-0 text-muted-foreground"}),e.jsx("span",{className:"truncate flex-1",children:r.data.name}),e.jsxs(Ze,{children:[e.jsx(es,{children:e.jsx("span",{className:"flex size-5 items-center justify-center rounded-sm opacity-0 group-hover:opacity-100 hover:bg-accent transition-opacity",onClick:b=>b.stopPropagation(),children:e.jsx(ps,{className:"size-3.5 text-muted-foreground"})})}),e.jsxs(ss,{align:"end",className:"min-w-[140px]",children:[e.jsxs(K,{onClick:()=>m(r.data.id),children:[e.jsx(P,{className:"size-4 me-2"}),g.addChild]}),e.jsxs(K,{onClick:()=>S(r.data.id),children:[e.jsx(qe,{className:"size-4 me-2"}),g.edit]}),e.jsxs(K,{className:"text-destructive",onClick:()=>N(r.data.id),children:[e.jsx(Ke,{className:"size-4 me-2"}),g.delete]})]})]})]})}function Le({slug:t,setSlug:r,desc:c,setDesc:f,coverImage:w,setCoverImage:d,metaTitle:S,setMetaTitle:N,metaDesc:m,setMetaDesc:g,ogTitle:x,setOgTitle:y,ogDesc:b,setOgDesc:j,ogImage:I,setOgImage:k,t:v}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:v("posts.slug")}),e.jsx(p,{value:t,onChange:l=>r(l.target.value),placeholder:v("posts.slugPlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:v("common.description")}),e.jsx(H,{value:c,onChange:l=>f(l.target.value),placeholder:v("categories.optionalDesc"),rows:3})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:v("categories.coverImage")}),e.jsx(p,{value:w,onChange:l=>d(l.target.value),placeholder:"https://..."})]}),e.jsxs("details",{children:[e.jsxs("summary",{className:"flex cursor-pointer items-center gap-1 text-sm font-medium select-none [&::-webkit-details-marker]:hidden",children:[e.jsx(ts,{className:"size-4 transition-transform [[open]>&]:rotate-180"}),"SEO"]}),e.jsxs("div",{className:"mt-4 space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"Meta Title"}),e.jsx(p,{value:S,onChange:l=>N(l.target.value),placeholder:"Meta Title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"Meta Description"}),e.jsx(H,{value:m,onChange:l=>g(l.target.value),placeholder:"Meta Description",rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"OG Title"}),e.jsx(p,{value:x,onChange:l=>y(l.target.value),placeholder:"OG Title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"OG Description"}),e.jsx(H,{value:b,onChange:l=>j(l.target.value),placeholder:"OG Description",rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"OG Image"}),e.jsx(p,{value:I,onChange:l=>k(l.target.value),placeholder:"https://..."})]})]})]})]})}function Fs(){var ze,Ee;const{t}=Ue(),r=Ye(),[c,f]=i.useState(null),[w,d]=i.useState(!1),[S,N]=i.useState("create"),[m,g]=i.useState(null),x=i.useRef(null),[y,b]=i.useState({w:280,h:400}),[j,I]=i.useState(""),[k,v]=i.useState(""),[l,U]=i.useState(""),[Y,$]=i.useState(0),[V,W]=i.useState(null),[J,X]=i.useState(""),[Z,ee]=i.useState(""),[se,te]=i.useState(""),[ae,ie]=i.useState(""),[re,ne]=i.useState(""),[le,oe]=i.useState(""),[A,ce]=i.useState(""),[de,me]=i.useState(""),[ge,ue]=i.useState(""),[xe,he]=i.useState(0),[pe,je]=i.useState(null),[ve,fe]=i.useState(""),[Ne,ye]=i.useState(""),[be,_e]=i.useState(""),[Ce,we]=i.useState(""),[Se,De]=i.useState(""),[Te,Oe]=i.useState(""),Ie=$e({queryKey:["categories-all"],queryFn:()=>E.admin.categories.list(1,9999)}),_=((ze=Ie.data)==null?void 0:ze.items)??[],D=i.useMemo(()=>ms(_),[_]),F=i.useMemo(()=>gs(D),[D]);i.useEffect(()=>{const s=x.current;if(!s)return;const a=new ResizeObserver(([O])=>{b({w:O.contentRect.width,h:O.contentRect.height})});return a.observe(s),()=>a.disconnect()},[]);const n=i.useMemo(()=>_.find(s=>s.id===c)??null,[_,c]),M=Q({mutationFn:({id:s,data:a})=>E.admin.categories.update(s,{name:a.name??null,slug:a.slug||null,description:a.description??null,sort_order:a.sort_order!=null?BigInt(a.sort_order):null,parent_id:a.parent_id??null,cover_image:a.cover_image||null,meta_title:a.meta_title||null,meta_description:a.meta_description||null,og_title:a.og_title||null,og_description:a.og_description||null,og_image:a.og_image||null}),onSuccess:()=>{C.success(t("categories.categoryUpdated")),r.invalidateQueries({queryKey:["categories-all"]}),d(!1)},onError:s=>{C.error(s instanceof q?s.message:t("categories.failedToUpdate"))}}),R=Q({mutationFn:s=>E.admin.categories.create({name:s.name,slug:s.slug||null,description:s.description??null,sort_order:s.sort_order!=null?BigInt(s.sort_order):null,parent_id:s.parent_id??null,cover_image:s.cover_image||null,meta_title:s.meta_title||null,meta_description:s.meta_description||null,og_title:s.og_title||null,og_description:s.og_description||null,og_image:s.og_image||null}),onSuccess:()=>{C.success(t("categories.categoryCreated")),r.invalidateQueries({queryKey:["categories-all"]}),d(!1)},onError:s=>{C.error(s instanceof q?s.message:t("categories.failedToCreate"))}}),G=Q({mutationFn:s=>E.admin.categories.delete(s),onSuccess:()=>{C.success(t("categories.categoryDeleted")),r.invalidateQueries({queryKey:["categories-all"]}),c===G.variables&&f(null)},onError:s=>{C.error(s instanceof q?s.message:t("categories.failedToDelete"))}});function ke(s){const a=s??n;a&&(N("edit"),I(a.name),v(a.slug),U(a.description??""),$(Number(a.sort_order)),W(a.parent_id??null),X(a.cover_image??""),ee(a.meta_title??""),te(a.meta_description??""),ie(a.og_title??""),ne(a.og_description??""),oe(a.og_image??""),d(!0))}function z(s){N("create"),je(s??null),ce(""),me(""),ue(""),he(0),fe(""),ye(""),_e(""),we(""),De(""),Oe(""),d(!0)}const T=i.useMemo(()=>m?F.find(s=>s.id===m)??null:null,[m,F]),L=T?T.children.length>0:!1,Qe=(T==null?void 0:T.children.length)??0,Me=i.useCallback(s=>{f(a=>a===s?a:s)},[]),He=R.isPending||M.isPending;return e.jsxs("div",{className:"flex overflow-hidden",style:{height:"calc(100vh - 10rem)"},children:[e.jsxs("div",{className:"flex flex-col shrink-0 min-h-0",children:[e.jsx("div",{className:"mb-3",children:e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>z(),children:[e.jsx(P,{className:"size-3.5 me-1"}),t("categories.newCategory")]})}),e.jsx("div",{ref:x,className:"flex-1 min-h-0 w-fit max-w-[50%] min-w-[280px]",children:Ie.isLoading?e.jsx("div",{className:"space-y-2 p-2",children:Array.from({length:5}).map((s,a)=>e.jsx(Ve,{className:"h-6 w-full"},a))}):F.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center py-10",children:[e.jsx(B,{className:"size-8 text-muted-foreground mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("categories.noCategories")}),e.jsxs(h,{size:"sm",variant:"outline",className:"mt-3",onClick:()=>z(),children:[e.jsx(P,{className:"size-3.5 me-1"}),t("categories.newCategory")]})]}):e.jsx(us,{data:D,openByDefault:!1,width:y.w,height:y.h,rowHeight:24,indent:12,rowClassName:"tree-row-animate",onSelect:s=>{s.length>0&&Me(s[0].data.id)},selection:c??void 0,children:s=>e.jsx(js,{...s,onSelect:Me,selectedId:c,onEdit:a=>{const O=_.find(Be=>Be.id===a);O&&ke(O)},onDelete:a=>g(a),onAddChild:a=>z(a),labels:{addChild:t("categories.addChild"),edit:t("common.edit"),delete:t("common.delete")}})})})]}),e.jsx("div",{className:"w-px bg-border shrink-0 mx-6"}),e.jsx("div",{className:"flex-1 min-w-0 min-h-0 overflow-y-auto py-1 pr-2",children:n?e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-end shrink-0 pb-3 gap-2",children:[e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>ke(),children:[e.jsx(qe,{className:"size-3.5 me-1"}),t("common.edit")]}),e.jsxs(h,{size:"sm",variant:"outline",className:"text-destructive hover:text-destructive",onClick:()=>g(n.id),disabled:G.isPending,children:[e.jsx(Ke,{className:"size-3.5 me-1"}),t("common.delete")]}),e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>z(n.id),children:[e.jsx(P,{className:"size-3.5 me-1"}),t("categories.addChild")]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto space-y-0",children:[e.jsx(u,{label:t("common.name"),value:n.name}),e.jsx(u,{label:t("categories.slug"),value:n.slug,mono:!0}),e.jsx(u,{label:t("categories.parent"),value:n.parent_id?((Ee=_.find(s=>s.id===n.parent_id))==null?void 0:Ee.name)??"—":t("categories.noParent")}),e.jsx(u,{label:t("categories.sortOrder"),value:String(Number(n.sort_order))}),e.jsx(u,{label:t("common.description"),value:n.description||"—"}),e.jsx(Ge,{label:t("categories.coverImage"),src:n.cover_image}),e.jsx(u,{label:t("orders.createdAt"),value:new Date(n.created_at).toLocaleString()}),e.jsx("div",{className:"pt-5 pb-2",children:e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:"SEO"})}),e.jsx(u,{label:"Meta Title",value:n.meta_title||"—"}),e.jsx(u,{label:"Meta Description",value:n.meta_description||"—"}),e.jsx(Ge,{label:"OG Image",src:n.og_image}),e.jsx(u,{label:"OG Title",value:n.og_title||"—"}),e.jsx(u,{label:"OG Description",value:n.og_description||"—"})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center",children:[e.jsx(B,{className:"size-8 text-muted-foreground mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("categories.selectCategory")})]})}),e.jsx("style",{children:` +import{f as i,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as Ue,c9 as Ye,c8 as $e,i as h,az as Ve,_ as B,ar as We,as as Je,av as Pe,aw as Ae,at as Fe,bK as C,ao as q,aW as E,l as Xe,L as Ze,R as es,M as ss,N as K,k as ts}from"./index-C-i99XXF.js";import{u as Q}from"./useMutation-CrSU7LrM.js";import{I as p}from"./input-CX4DHDvW.js";import{L as o}from"./label-YdsyMzds.js";import{T as H}from"./textarea-DxF_RMjI.js";import{A as as,c as is,f as rs,g as ns,d as ls,e as os,b as cs,a as ds}from"./alert-dialog-CqlwlZ39.js";import{a as ms,f as gs,C as Re}from"./category-tree-select-1eIAo9lb.js";import{P}from"./plus-CwjdK202.js";import{T as us}from"./tree-CczKEFdn.js";import{P as qe}from"./pencil-BzoosANP.js";import{T as Ke}from"./trash-2-Cxpx5avJ.js";import{F as xs}from"./folder-open-CvTrdI2M.js";import{F as hs}from"./file-CwTg0Lel.js";import{E as ps}from"./ellipsis-vertical-xZQpERB7.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./vendor-md-editor-C0GoXAL0.js";function u({label:t,value:r,mono:c}){return e.jsxs("div",{className:"flex gap-3 py-2.5 border-b last:border-b-0",children:[e.jsx("span",{className:"text-xs text-muted-foreground w-24 shrink-0 pt-0.5",children:t}),e.jsx("span",{className:`text-sm flex-1 ${c?"font-mono":""}`,children:r})]})}function Ge({label:t,src:r}){return e.jsxs("div",{className:"flex gap-3 py-2.5 border-b last:border-b-0",children:[e.jsx("span",{className:"text-xs text-muted-foreground w-24 shrink-0 pt-1",children:t}),r?e.jsxs("a",{href:r,target:"_blank",rel:"noreferrer",className:"group relative inline-block",children:[e.jsx("img",{src:r,alt:t,className:"h-20 rounded-md border object-cover"}),e.jsx("div",{className:"absolute inset-0 rounded-md bg-black/0 group-hover:bg-black/10 transition-colors"})]}):e.jsx("span",{className:"text-sm text-muted-foreground",children:"—"})]})}function js(t){const{node:r,style:c,dragHandle:f,onSelect:w,selectedId:d,onEdit:S,onDelete:N,onAddChild:m,labels:g}=t,x=r.children!=null&&r.children.length>0,y=r.level??0;return e.jsxs("div",{ref:f,style:{...c,position:"relative"},onClick:()=>{x&&r.toggle(),w(r.data.id)},className:`group flex items-center gap-1 cursor-pointer rounded px-1.5 py-0.5 text-sm h-full transition-colors ${d===r.data.id?"bg-primary/10 text-primary font-medium":"hover:bg-muted text-foreground"}`,children:[Array.from({length:y},(b,j)=>e.jsx("span",{className:"absolute top-0 bottom-0 border-l border-border",style:{left:6+j*12}},j)),e.jsx("span",{className:"flex size-4 items-center justify-center transition-transform shrink-0",style:{transform:x&&r.isOpen?"rotate(90deg)":"rotate(0deg)",visibility:x?"visible":"hidden"},children:e.jsx(Xe,{className:"size-3"})}),x?r.isOpen?e.jsx(xs,{className:"size-3.5 shrink-0 text-amber-500"}):e.jsx(B,{className:"size-3.5 shrink-0 text-amber-500"}):e.jsx(hs,{className:"size-3.5 shrink-0 text-muted-foreground"}),e.jsx("span",{className:"truncate flex-1",children:r.data.name}),e.jsxs(Ze,{children:[e.jsx(es,{children:e.jsx("span",{className:"flex size-5 items-center justify-center rounded-sm opacity-0 group-hover:opacity-100 hover:bg-accent transition-opacity",onClick:b=>b.stopPropagation(),children:e.jsx(ps,{className:"size-3.5 text-muted-foreground"})})}),e.jsxs(ss,{align:"end",className:"min-w-[140px]",children:[e.jsxs(K,{onClick:()=>m(r.data.id),children:[e.jsx(P,{className:"size-4 me-2"}),g.addChild]}),e.jsxs(K,{onClick:()=>S(r.data.id),children:[e.jsx(qe,{className:"size-4 me-2"}),g.edit]}),e.jsxs(K,{className:"text-destructive",onClick:()=>N(r.data.id),children:[e.jsx(Ke,{className:"size-4 me-2"}),g.delete]})]})]})]})}function Le({slug:t,setSlug:r,desc:c,setDesc:f,coverImage:w,setCoverImage:d,metaTitle:S,setMetaTitle:N,metaDesc:m,setMetaDesc:g,ogTitle:x,setOgTitle:y,ogDesc:b,setOgDesc:j,ogImage:I,setOgImage:k,t:v}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:v("posts.slug")}),e.jsx(p,{value:t,onChange:l=>r(l.target.value),placeholder:v("posts.slugPlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:v("common.description")}),e.jsx(H,{value:c,onChange:l=>f(l.target.value),placeholder:v("categories.optionalDesc"),rows:3})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:v("categories.coverImage")}),e.jsx(p,{value:w,onChange:l=>d(l.target.value),placeholder:"https://..."})]}),e.jsxs("details",{children:[e.jsxs("summary",{className:"flex cursor-pointer items-center gap-1 text-sm font-medium select-none [&::-webkit-details-marker]:hidden",children:[e.jsx(ts,{className:"size-4 transition-transform [[open]>&]:rotate-180"}),"SEO"]}),e.jsxs("div",{className:"mt-4 space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"Meta Title"}),e.jsx(p,{value:S,onChange:l=>N(l.target.value),placeholder:"Meta Title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"Meta Description"}),e.jsx(H,{value:m,onChange:l=>g(l.target.value),placeholder:"Meta Description",rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"OG Title"}),e.jsx(p,{value:x,onChange:l=>y(l.target.value),placeholder:"OG Title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"OG Description"}),e.jsx(H,{value:b,onChange:l=>j(l.target.value),placeholder:"OG Description",rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:"OG Image"}),e.jsx(p,{value:I,onChange:l=>k(l.target.value),placeholder:"https://..."})]})]})]})]})}function Fs(){var ze,Ee;const{t}=Ue(),r=Ye(),[c,f]=i.useState(null),[w,d]=i.useState(!1),[S,N]=i.useState("create"),[m,g]=i.useState(null),x=i.useRef(null),[y,b]=i.useState({w:280,h:400}),[j,I]=i.useState(""),[k,v]=i.useState(""),[l,U]=i.useState(""),[Y,$]=i.useState(0),[V,W]=i.useState(null),[J,X]=i.useState(""),[Z,ee]=i.useState(""),[se,te]=i.useState(""),[ae,ie]=i.useState(""),[re,ne]=i.useState(""),[le,oe]=i.useState(""),[A,ce]=i.useState(""),[de,me]=i.useState(""),[ge,ue]=i.useState(""),[xe,he]=i.useState(0),[pe,je]=i.useState(null),[ve,fe]=i.useState(""),[Ne,ye]=i.useState(""),[be,_e]=i.useState(""),[Ce,we]=i.useState(""),[Se,De]=i.useState(""),[Te,Oe]=i.useState(""),Ie=$e({queryKey:["categories-all"],queryFn:()=>E.admin.categories.list(1,9999)}),_=((ze=Ie.data)==null?void 0:ze.items)??[],D=i.useMemo(()=>ms(_),[_]),F=i.useMemo(()=>gs(D),[D]);i.useEffect(()=>{const s=x.current;if(!s)return;const a=new ResizeObserver(([O])=>{b({w:O.contentRect.width,h:O.contentRect.height})});return a.observe(s),()=>a.disconnect()},[]);const n=i.useMemo(()=>_.find(s=>s.id===c)??null,[_,c]),M=Q({mutationFn:({id:s,data:a})=>E.admin.categories.update(s,{name:a.name??null,slug:a.slug||null,description:a.description??null,sort_order:a.sort_order!=null?BigInt(a.sort_order):null,parent_id:a.parent_id??null,cover_image:a.cover_image||null,meta_title:a.meta_title||null,meta_description:a.meta_description||null,og_title:a.og_title||null,og_description:a.og_description||null,og_image:a.og_image||null}),onSuccess:()=>{C.success(t("categories.categoryUpdated")),r.invalidateQueries({queryKey:["categories-all"]}),d(!1)},onError:s=>{C.error(s instanceof q?s.message:t("categories.failedToUpdate"))}}),R=Q({mutationFn:s=>E.admin.categories.create({name:s.name,slug:s.slug||null,description:s.description??null,sort_order:s.sort_order!=null?BigInt(s.sort_order):null,parent_id:s.parent_id??null,cover_image:s.cover_image||null,meta_title:s.meta_title||null,meta_description:s.meta_description||null,og_title:s.og_title||null,og_description:s.og_description||null,og_image:s.og_image||null}),onSuccess:()=>{C.success(t("categories.categoryCreated")),r.invalidateQueries({queryKey:["categories-all"]}),d(!1)},onError:s=>{C.error(s instanceof q?s.message:t("categories.failedToCreate"))}}),G=Q({mutationFn:s=>E.admin.categories.delete(s),onSuccess:()=>{C.success(t("categories.categoryDeleted")),r.invalidateQueries({queryKey:["categories-all"]}),c===G.variables&&f(null)},onError:s=>{C.error(s instanceof q?s.message:t("categories.failedToDelete"))}});function ke(s){const a=s??n;a&&(N("edit"),I(a.name),v(a.slug),U(a.description??""),$(Number(a.sort_order)),W(a.parent_id??null),X(a.cover_image??""),ee(a.meta_title??""),te(a.meta_description??""),ie(a.og_title??""),ne(a.og_description??""),oe(a.og_image??""),d(!0))}function z(s){N("create"),je(s??null),ce(""),me(""),ue(""),he(0),fe(""),ye(""),_e(""),we(""),De(""),Oe(""),d(!0)}const T=i.useMemo(()=>m?F.find(s=>s.id===m)??null:null,[m,F]),L=T?T.children.length>0:!1,Qe=(T==null?void 0:T.children.length)??0,Me=i.useCallback(s=>{f(a=>a===s?a:s)},[]),He=R.isPending||M.isPending;return e.jsxs("div",{className:"flex overflow-hidden",style:{height:"calc(100vh - 10rem)"},children:[e.jsxs("div",{className:"flex flex-col shrink-0 min-h-0",children:[e.jsx("div",{className:"mb-3",children:e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>z(),children:[e.jsx(P,{className:"size-3.5 me-1"}),t("categories.newCategory")]})}),e.jsx("div",{ref:x,className:"flex-1 min-h-0 w-fit max-w-[50%] min-w-[280px]",children:Ie.isLoading?e.jsx("div",{className:"space-y-2 p-2",children:Array.from({length:5}).map((s,a)=>e.jsx(Ve,{className:"h-6 w-full"},a))}):F.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center py-10",children:[e.jsx(B,{className:"size-8 text-muted-foreground mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("categories.noCategories")}),e.jsxs(h,{size:"sm",variant:"outline",className:"mt-3",onClick:()=>z(),children:[e.jsx(P,{className:"size-3.5 me-1"}),t("categories.newCategory")]})]}):e.jsx(us,{data:D,openByDefault:!1,width:y.w,height:y.h,rowHeight:24,indent:12,rowClassName:"tree-row-animate",onSelect:s=>{s.length>0&&Me(s[0].data.id)},selection:c??void 0,children:s=>e.jsx(js,{...s,onSelect:Me,selectedId:c,onEdit:a=>{const O=_.find(Be=>Be.id===a);O&&ke(O)},onDelete:a=>g(a),onAddChild:a=>z(a),labels:{addChild:t("categories.addChild"),edit:t("common.edit"),delete:t("common.delete")}})})})]}),e.jsx("div",{className:"w-px bg-border shrink-0 mx-6"}),e.jsx("div",{className:"flex-1 min-w-0 min-h-0 overflow-y-auto py-1 pr-2",children:n?e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-end shrink-0 pb-3 gap-2",children:[e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>ke(),children:[e.jsx(qe,{className:"size-3.5 me-1"}),t("common.edit")]}),e.jsxs(h,{size:"sm",variant:"outline",className:"text-destructive hover:text-destructive",onClick:()=>g(n.id),disabled:G.isPending,children:[e.jsx(Ke,{className:"size-3.5 me-1"}),t("common.delete")]}),e.jsxs(h,{size:"sm",variant:"outline",onClick:()=>z(n.id),children:[e.jsx(P,{className:"size-3.5 me-1"}),t("categories.addChild")]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto space-y-0",children:[e.jsx(u,{label:t("common.name"),value:n.name}),e.jsx(u,{label:t("categories.slug"),value:n.slug,mono:!0}),e.jsx(u,{label:t("categories.parent"),value:n.parent_id?((Ee=_.find(s=>s.id===n.parent_id))==null?void 0:Ee.name)??"—":t("categories.noParent")}),e.jsx(u,{label:t("categories.sortOrder"),value:String(Number(n.sort_order))}),e.jsx(u,{label:t("common.description"),value:n.description||"—"}),e.jsx(Ge,{label:t("categories.coverImage"),src:n.cover_image}),e.jsx(u,{label:t("orders.createdAt"),value:new Date(n.created_at).toLocaleString()}),e.jsx("div",{className:"pt-5 pb-2",children:e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:"SEO"})}),e.jsx(u,{label:"Meta Title",value:n.meta_title||"—"}),e.jsx(u,{label:"Meta Description",value:n.meta_description||"—"}),e.jsx(Ge,{label:"OG Image",src:n.og_image}),e.jsx(u,{label:"OG Title",value:n.og_title||"—"}),e.jsx(u,{label:"OG Description",value:n.og_description||"—"})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center",children:[e.jsx(B,{className:"size-8 text-muted-foreground mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("categories.selectCategory")})]})}),e.jsx("style",{children:` .tree-row-animate { animation: treeRowIn 0.18s ease-out both; } diff --git a/adminui/assets/category-tree-select-CjofdK3h.js b/adminui/assets/category-tree-select-1eIAo9lb.js similarity index 96% rename from adminui/assets/category-tree-select-CjofdK3h.js rename to adminui/assets/category-tree-select-1eIAo9lb.js index ff801626..8c74e7d4 100644 --- a/adminui/assets/category-tree-select-CjofdK3h.js +++ b/adminui/assets/category-tree-select-1eIAo9lb.js @@ -1 +1 @@ -import{j as n,f as x}from"./vendor-react-j_G0Dyx0.js";import{aQ as F,k as O,aq as E,l as R,_ as L}from"./index-EC_gIQIi.js";import{F as $}from"./folder-open-Bfr94q9k.js";import{F as P}from"./file-C64ivkyc.js";function G(t){const e=new Map,a=new Map,r=[];for(const o of t){const s={id:o.id,name:o.name,children:[]};e.set(o.id,s),o.parent_id?a.set(o.parent_id,[...a.get(o.parent_id)??[],o.id]):r.push(o.id)}function i(o){const s=e.get(o),u=a.get(o)??[];return u.sort((f,l)=>{var d,h;return Number(((d=e.get(f))==null?void 0:d.sort_order)??0)-Number(((h=e.get(l))==null?void 0:h.sort_order)??0)}),s.children=u.map(i),s}return r.sort((o,s)=>{var u,f;return Number(((u=e.get(o))==null?void 0:u.sort_order)??0)-Number(((f=e.get(s))==null?void 0:f.sort_order)??0)}),r.map(i)}function D(t){const e=[];function a(r){for(const i of r)e.push(i),a(i.children)}return a(t),e}function J(t,e){if(!t)return"";const a=new Map(e.map(s=>[s.id,s])),r=[];let i=t,o=0;for(;i&&o++<32;){const s=a.get(i);if(!s)break;r.unshift(s.name),i=s.parent_id??null}return r.join(" > ")}function q(t,e){const a=e.toLowerCase(),r=new Set;function i(o){for(const s of o)s.name.toLowerCase().includes(a)&&r.add(s.id),i(s.children)}return i(t),r}function A(t,e){const a=[];function r(i){for(const o of i){if(o.id===e)return!0;if(o.children.length>0){if(a.push(o.id),r(o.children))return!0;a.pop()}}return!1}return r(t),a}function K(t){const e=t.multiple===!0,a=e?t.selectedIds:t.selectedId?[t.selectedId]:[],r=e?t.onSelect:i=>{t.onSelect(i[0]??null)};return n.jsx(H,{...t,isMultiple:e,selectedIds:a,onSelect:r})}function H({tree:t,selectedIds:e,excludeId:a,onSelect:r,noParentLabel:i,placeholder:o,isMultiple:s}){const[u,f]=x.useState(!1),[l,d]=x.useState(""),[h,N]=x.useState(new Set),j=x.useRef(null),y=x.useRef(null),w=x.useMemo(()=>D(t),[t]);x.useEffect(()=>{function c(m){j.current&&!j.current.contains(m.target)&&(f(!1),d(""))}return u&&(document.addEventListener("mousedown",c),setTimeout(()=>{var m;return(m=y.current)==null?void 0:m.focus()},0)),()=>document.removeEventListener("mousedown",c)},[u]);const g=l?q(t,l):null;x.useEffect(()=>{if(g){const c=new Set(h);for(const m of g)for(const p of A(t,m))c.add(p);N(c)}},[l]);function S(c){N(m=>{const p=new Set(m);return p.has(c)?p.delete(c):p.add(c),p})}function z(c){if(s){const m=e.includes(c)?e.filter(p=>p!==c):[...e,c];r(m)}else r([c]),f(!1),d("")}function _(c){c.stopPropagation(),r(s?[]:[])}const b=e.length>0,T=x.useMemo(()=>{var c;return e.length===0?"":e.length===1?((c=w.find(m=>m.id===e[0]))==null?void 0:c.name)??"":`${e.length} selected`},[e,w]);return n.jsxs("div",{className:"relative",ref:j,children:[n.jsxs("button",{type:"button",onClick:()=>f(!u),className:"flex h-8 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors hover:bg-muted",children:[n.jsx("span",{className:b?"text-foreground":"text-muted-foreground",children:b?T:o??(s?"Select categories...":i??"Select...")}),n.jsxs("span",{className:"flex items-center gap-1",children:[b&&n.jsx("span",{onClick:_,className:"flex size-4 items-center justify-center rounded-sm hover:bg-muted-foreground/20",children:n.jsx(F,{className:"size-3"})}),n.jsx(O,{className:`size-4 text-muted-foreground transition-transform ${u?"rotate-180":""}`})]})]}),u&&n.jsxs("div",{className:"absolute z-50 mt-1 w-full rounded-md border bg-popover shadow-md animate-in fade-in-0 zoom-in-95",children:[n.jsxs("div",{className:"flex items-center border-b px-2",children:[n.jsx(E,{className:"size-4 shrink-0 text-muted-foreground"}),n.jsx("input",{ref:y,value:l,onChange:c=>d(c.target.value),placeholder:"Search...",className:"flex h-8 w-full bg-transparent px-2 text-sm outline-none placeholder:text-muted-foreground"})]}),n.jsxs("div",{className:"max-h-60 overflow-auto p-1",children:[!s&&n.jsx(k,{node:{id:"__none__",name:i??"No Parent",children:[]},depth:0,isOpen:!1,hasChildren:!1,isSelected:e.length===0,isMultiple:s,matched:g,onToggle:()=>{},onSelect:()=>{r([]),f(!1),d("")},openIds:h}),n.jsx(v,{nodes:t,depth:0,openIds:h,matchedIds:g,excludeId:a,selectedIds:e,isMultiple:s,onToggle:S,onSelect:z})]})]})]})}function v({nodes:t,depth:e,openIds:a,matchedIds:r,excludeId:i,selectedIds:o,isMultiple:s,onToggle:u,onSelect:f}){return n.jsx(n.Fragment,{children:t.filter(l=>l.id!==i).filter(l=>!r||r.has(l.id)?!0:C(l,r)).map(l=>{const d=l.children.length>0,h=a.has(l.id);return n.jsx(k,{node:l,depth:e,isOpen:h,hasChildren:d,isSelected:o.includes(l.id),isMultiple:s,matched:r,onToggle:u,onSelect:f,openIds:a,children:d&&h&&n.jsx(v,{nodes:l.children,depth:e+1,openIds:a,matchedIds:r,excludeId:i,selectedIds:o,isMultiple:s,onToggle:u,onSelect:f})},l.id)})})}function k({node:t,depth:e,isOpen:a,hasChildren:r,isSelected:i,isMultiple:o,matched:s,onToggle:u,onSelect:f,children:l}){const d=(s==null?void 0:s.has(t.id))??!1;return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"flex items-center gap-1 rounded-sm px-1 py-1 text-sm hover:bg-accent cursor-pointer",style:{paddingLeft:`${e*20+4}px`},children:[n.jsx("span",{className:"flex size-4 shrink-0 items-center justify-center",onClick:h=>{h.stopPropagation(),r&&u(t.id)},style:{visibility:r?"visible":"hidden"},children:n.jsx(R,{className:"size-3 transition-transform",style:{transform:a?"rotate(90deg)":"rotate(0deg)"}})}),n.jsxs("span",{className:"flex items-center gap-1.5 flex-1",onClick:()=>f(t.id),children:[o?n.jsx("span",{className:`flex size-4 shrink-0 items-center justify-center rounded-[4px] border ${i?"border-primary bg-primary text-primary-foreground":"border-input"}`,children:i&&n.jsx("span",{className:"text-current text-xs",children:"✓"})}):n.jsx("span",{className:`flex size-4 shrink-0 items-center justify-center rounded-full border ${i?"border-primary":"border-input"}`,children:i&&n.jsx("span",{className:"size-2 rounded-full bg-primary"})}),r?a?n.jsx($,{className:"size-3.5 shrink-0 text-amber-500"}):n.jsx(L,{className:"size-3.5 shrink-0 text-amber-500"}):n.jsx(P,{className:"size-3.5 shrink-0 text-muted-foreground"}),n.jsx("span",{className:d?"font-medium text-primary":"",children:t.name})]})]}),l]})}function C(t,e){if(e.has(t.id))return!0;for(const a of t.children)if(C(a,e))return!0;return!1}export{K as C,G as a,J as b,D as f}; +import{j as n,f as x}from"./vendor-react-j_G0Dyx0.js";import{aQ as F,k as O,aq as E,l as R,_ as L}from"./index-C-i99XXF.js";import{F as $}from"./folder-open-CvTrdI2M.js";import{F as P}from"./file-CwTg0Lel.js";function G(t){const e=new Map,a=new Map,r=[];for(const o of t){const s={id:o.id,name:o.name,children:[]};e.set(o.id,s),o.parent_id?a.set(o.parent_id,[...a.get(o.parent_id)??[],o.id]):r.push(o.id)}function i(o){const s=e.get(o),u=a.get(o)??[];return u.sort((f,l)=>{var d,h;return Number(((d=e.get(f))==null?void 0:d.sort_order)??0)-Number(((h=e.get(l))==null?void 0:h.sort_order)??0)}),s.children=u.map(i),s}return r.sort((o,s)=>{var u,f;return Number(((u=e.get(o))==null?void 0:u.sort_order)??0)-Number(((f=e.get(s))==null?void 0:f.sort_order)??0)}),r.map(i)}function D(t){const e=[];function a(r){for(const i of r)e.push(i),a(i.children)}return a(t),e}function J(t,e){if(!t)return"";const a=new Map(e.map(s=>[s.id,s])),r=[];let i=t,o=0;for(;i&&o++<32;){const s=a.get(i);if(!s)break;r.unshift(s.name),i=s.parent_id??null}return r.join(" > ")}function q(t,e){const a=e.toLowerCase(),r=new Set;function i(o){for(const s of o)s.name.toLowerCase().includes(a)&&r.add(s.id),i(s.children)}return i(t),r}function A(t,e){const a=[];function r(i){for(const o of i){if(o.id===e)return!0;if(o.children.length>0){if(a.push(o.id),r(o.children))return!0;a.pop()}}return!1}return r(t),a}function K(t){const e=t.multiple===!0,a=e?t.selectedIds:t.selectedId?[t.selectedId]:[],r=e?t.onSelect:i=>{t.onSelect(i[0]??null)};return n.jsx(H,{...t,isMultiple:e,selectedIds:a,onSelect:r})}function H({tree:t,selectedIds:e,excludeId:a,onSelect:r,noParentLabel:i,placeholder:o,isMultiple:s}){const[u,f]=x.useState(!1),[l,d]=x.useState(""),[h,N]=x.useState(new Set),j=x.useRef(null),y=x.useRef(null),w=x.useMemo(()=>D(t),[t]);x.useEffect(()=>{function c(m){j.current&&!j.current.contains(m.target)&&(f(!1),d(""))}return u&&(document.addEventListener("mousedown",c),setTimeout(()=>{var m;return(m=y.current)==null?void 0:m.focus()},0)),()=>document.removeEventListener("mousedown",c)},[u]);const g=l?q(t,l):null;x.useEffect(()=>{if(g){const c=new Set(h);for(const m of g)for(const p of A(t,m))c.add(p);N(c)}},[l]);function S(c){N(m=>{const p=new Set(m);return p.has(c)?p.delete(c):p.add(c),p})}function z(c){if(s){const m=e.includes(c)?e.filter(p=>p!==c):[...e,c];r(m)}else r([c]),f(!1),d("")}function _(c){c.stopPropagation(),r(s?[]:[])}const b=e.length>0,T=x.useMemo(()=>{var c;return e.length===0?"":e.length===1?((c=w.find(m=>m.id===e[0]))==null?void 0:c.name)??"":`${e.length} selected`},[e,w]);return n.jsxs("div",{className:"relative",ref:j,children:[n.jsxs("button",{type:"button",onClick:()=>f(!u),className:"flex h-8 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors hover:bg-muted",children:[n.jsx("span",{className:b?"text-foreground":"text-muted-foreground",children:b?T:o??(s?"Select categories...":i??"Select...")}),n.jsxs("span",{className:"flex items-center gap-1",children:[b&&n.jsx("span",{onClick:_,className:"flex size-4 items-center justify-center rounded-sm hover:bg-muted-foreground/20",children:n.jsx(F,{className:"size-3"})}),n.jsx(O,{className:`size-4 text-muted-foreground transition-transform ${u?"rotate-180":""}`})]})]}),u&&n.jsxs("div",{className:"absolute z-50 mt-1 w-full rounded-md border bg-popover shadow-md animate-in fade-in-0 zoom-in-95",children:[n.jsxs("div",{className:"flex items-center border-b px-2",children:[n.jsx(E,{className:"size-4 shrink-0 text-muted-foreground"}),n.jsx("input",{ref:y,value:l,onChange:c=>d(c.target.value),placeholder:"Search...",className:"flex h-8 w-full bg-transparent px-2 text-sm outline-none placeholder:text-muted-foreground"})]}),n.jsxs("div",{className:"max-h-60 overflow-auto p-1",children:[!s&&n.jsx(k,{node:{id:"__none__",name:i??"No Parent",children:[]},depth:0,isOpen:!1,hasChildren:!1,isSelected:e.length===0,isMultiple:s,matched:g,onToggle:()=>{},onSelect:()=>{r([]),f(!1),d("")},openIds:h}),n.jsx(v,{nodes:t,depth:0,openIds:h,matchedIds:g,excludeId:a,selectedIds:e,isMultiple:s,onToggle:S,onSelect:z})]})]})]})}function v({nodes:t,depth:e,openIds:a,matchedIds:r,excludeId:i,selectedIds:o,isMultiple:s,onToggle:u,onSelect:f}){return n.jsx(n.Fragment,{children:t.filter(l=>l.id!==i).filter(l=>!r||r.has(l.id)?!0:C(l,r)).map(l=>{const d=l.children.length>0,h=a.has(l.id);return n.jsx(k,{node:l,depth:e,isOpen:h,hasChildren:d,isSelected:o.includes(l.id),isMultiple:s,matched:r,onToggle:u,onSelect:f,openIds:a,children:d&&h&&n.jsx(v,{nodes:l.children,depth:e+1,openIds:a,matchedIds:r,excludeId:i,selectedIds:o,isMultiple:s,onToggle:u,onSelect:f})},l.id)})})}function k({node:t,depth:e,isOpen:a,hasChildren:r,isSelected:i,isMultiple:o,matched:s,onToggle:u,onSelect:f,children:l}){const d=(s==null?void 0:s.has(t.id))??!1;return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"flex items-center gap-1 rounded-sm px-1 py-1 text-sm hover:bg-accent cursor-pointer",style:{paddingLeft:`${e*20+4}px`},children:[n.jsx("span",{className:"flex size-4 shrink-0 items-center justify-center",onClick:h=>{h.stopPropagation(),r&&u(t.id)},style:{visibility:r?"visible":"hidden"},children:n.jsx(R,{className:"size-3 transition-transform",style:{transform:a?"rotate(90deg)":"rotate(0deg)"}})}),n.jsxs("span",{className:"flex items-center gap-1.5 flex-1",onClick:()=>f(t.id),children:[o?n.jsx("span",{className:`flex size-4 shrink-0 items-center justify-center rounded-[4px] border ${i?"border-primary bg-primary text-primary-foreground":"border-input"}`,children:i&&n.jsx("span",{className:"text-current text-xs",children:"✓"})}):n.jsx("span",{className:`flex size-4 shrink-0 items-center justify-center rounded-full border ${i?"border-primary":"border-input"}`,children:i&&n.jsx("span",{className:"size-2 rounded-full bg-primary"})}),r?a?n.jsx($,{className:"size-3.5 shrink-0 text-amber-500"}):n.jsx(L,{className:"size-3.5 shrink-0 text-amber-500"}):n.jsx(P,{className:"size-3.5 shrink-0 text-muted-foreground"}),n.jsx("span",{className:d?"font-medium text-primary":"",children:t.name})]})]}),l]})}function C(t,e){if(e.has(t.id))return!0;for(const a of t.children)if(C(a,e))return!0;return!1}export{K as C,G as a,J as b,D as f}; diff --git a/adminui/assets/channel-form-D5xba1vF.js b/adminui/assets/channel-form-Y_q73Dkt.js similarity index 96% rename from adminui/assets/channel-form-D5xba1vF.js rename to adminui/assets/channel-form-Y_q73Dkt.js index 386a487d..693e9fbb 100644 --- a/adminui/assets/channel-form-D5xba1vF.js +++ b/adminui/assets/channel-form-Y_q73Dkt.js @@ -1,4 +1,4 @@ -import{k as Q,f as F,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as G,ce as W,c9 as X,c8 as Z,bK as k,i as Y,ao as q,aW as P,aX as ee}from"./index-EC_gIQIi.js";import{u as J}from"./useMutation-C9eWISs8.js";import{C as _,c as v,d as j,a as b}from"./card-BhczRj8d.js";import{I as f}from"./input-D7bJWFUq.js";import{L as r}from"./label-BNi6V6qj.js";import{S as $,e as O,f as w,a as A,c as I}from"./select-BSZ-0tY-.js";import{S as ne}from"./switch-DhX4UWWe.js";import{C as ie}from"./code-editor-3wDd6_W8.js";import{S as ae}from"./save-z_0HtvcE.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./vendor-md-editor-C0GoXAL0.js";const t=i=>JSON.stringify(i,null,2),T=[{id:"generic",labelKey:"integration.presetGeneric",descKey:"integration.presetGenericDesc",channelKey:"my-webhook",provider:"generic",displayName:"",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"none",verifyConfig:null,credentials:null,mapping:t({external_id:"$.id",payload:{body:"$.text"}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"hmac",labelKey:"integration.presetHmac",descKey:"integration.presetHmacDesc",channelKey:"my-secured-webhook",provider:"generic-hmac",displayName:"",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"hmac-sha256",verifyConfig:t({header:"x-signature",encoding:"hex"}),credentials:t({secret:"YOUR_SECRET"}),mapping:t({external_id:"$.id",payload:{body:"$.text"}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"github",labelKey:"integration.presetGithub",descKey:"integration.presetGithubDesc",channelKey:"github",provider:"github",displayName:"GitHub Webhook",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"hmac-sha256",verifyConfig:t({header:"x-hub-signature-256",scheme:"sha256=",encoding:"hex"}),credentials:t({secret:"YOUR_GITHUB_WEBHOOK_SECRET"}),mapping:t({external_id:"$._headers.x-github-delivery",payload:{body:'$.action | default("ping")'}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"shopify",labelKey:"integration.presetShopify",descKey:"integration.presetShopifyDesc",channelKey:"shopify",provider:"shopify",displayName:"Shopify Webhook",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"hmac-sha256",verifyConfig:t({header:"x-shopify-hmac-sha256",encoding:"base64"}),credentials:t({secret:"YOUR_SHOPIFY_API_SECRET"}),mapping:t({external_id:"$._headers.x-shopify-webhook-id",payload:{body:'$.note | default("order event")'}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"dingtalk",labelKey:"integration.presetDingtalk",descKey:"integration.presetDingtalkDesc",channelKey:"dingtalk",provider:"dingtalk",displayName:"钉钉机器人",mode:"stream",transport:"ws",framing:"dispatch",endpoint:"wss://placeholder.invalid",verifyKind:"none",verifyConfig:null,credentials:t({grant:{clientId:"YOUR_APP_KEY",clientSecret:"YOUR_APP_SECRET"}}),mapping:t({external_id:"$.headers.messageId",sender:"$.data | as_json($.senderStaffId)",payload:{body:"$.data | as_json($.text.content)"}}),pullConfig:null,streamConfig:t({pre_connect:{url:"https://api.dingtalk.com/v1.0/gateway/connections/open",body:{clientId:"{{clientId}}",clientSecret:"{{clientSecret}}",subscriptions:[{type:"CALLBACK",topic:"/v1.0/im/bot/messages/get"}],ua:"dingtalk-sdk-python/v0.20-union",localIp:"127.0.0.1"},headers:{Accept:"application/json"},url_template:"{{endpoint}}?ticket={{ticket}}"},ws_keepalive:!0,heartbeat_secs:60,events:{match:{path:"$.type",equals:"CALLBACK"},payload_path:"$"},ack_reply:{code:200,headers:{messageId:"{{id}}"},message:"ok",data:"{}"},ack_reply_id_path:"$.headers.messageId"}),targetType:"chat/chat_messages"},{id:"feishu",labelKey:"integration.presetFeishu",descKey:"integration.presetFeishuDesc",channelKey:"feishu",provider:"feishu",displayName:"飞书机器人",mode:"stream",transport:"ws",framing:"pb-frame",endpoint:"wss://placeholder.invalid",verifyKind:"none",verifyConfig:null,credentials:t({AppID:"YOUR_APP_ID",AppSecret:"YOUR_APP_SECRET"}),mapping:t({external_id:"$.header.event_id",sender:"$.event.sender.sender_id.open_id",payload:{body:"$.event.message.content | as_json($.text)"}}),pullConfig:null,streamConfig:t({pre_connect:{url:"https://open.feishu.cn/callback/ws/endpoint",body:{AppID:"{{AppID}}",AppSecret:"{{AppSecret}}"},headers:{"User-Agent":"oapi-sdk-python/v1.7.3",locale:"zh"},code_path:"$.code",ok_code:0,url_path:"$.data.URL"},pb_frame:{ping_interval_secs:25,events:{equals:"event"},fragment:{id_header:"message_id",sum_header:"sum",seq_header:"seq"},ack:!0,ack_code:200}}),targetType:"chat/chat_messages"},{id:"http-pull",labelKey:"integration.presetPull",descKey:"integration.presetPullDesc",channelKey:"my-poll",provider:"generic",displayName:"",mode:"pull",transport:"http1",framing:"raw",endpoint:"https://api.example.com/items",verifyKind:"none",verifyConfig:null,credentials:t({bearer:"YOUR_TOKEN"}),mapping:t({external_id:"$.id",payload:{body:"$.name"}}),pullConfig:t({list_path:"$.items",id_field:"id",param:"since_id",page_size:50}),streamConfig:null,targetType:"ingress_note"},{id:"imap",labelKey:"integration.presetImap",descKey:"integration.presetImapDesc",channelKey:"support-inbox",provider:"imap",displayName:"客服邮箱",mode:"pull",transport:"imap",framing:"mime",endpoint:"imaps://imap.example.com:993",verifyKind:"none",verifyConfig:null,credentials:t({username:"support@example.com",password:"YOUR_APP_PASSWORD"}),mapping:t({external_id:"$.message_id",sender:"$.from.address",payload:{body:"$.text_body",subject:"$.subject"}}),pullConfig:t({folder:"INBOX",ssl:!0,batch:50,idle_secs:1700}),streamConfig:null,targetType:"conversation_message"}],L={push:["http1","http2"],pull:["http1","http2","imap"],stream:["ws","mqtt"],listen:["tcp"]},M=["push","pull","stream","listen"],B=["raw","json-rpc","dispatch","pb-frame"],z=["hmac-sha256","token","challenge","wechat-aes","jwt-widget","none"],te={channel_key:"",app_id:"",display_name:"",provider:"generic-hmac",mode:"push",transport:"http1",framing:"raw",endpoint:"",target_type:"",verify_kind:"hmac-sha256",verify_config:"",credentials:"",mapping:"",pull_config:"",stream_config:"",route_extra:"",redelivery_max:"5",enabled:!0};function C(i,m){const h=i.trim();if(h)try{return JSON.parse(h)}catch{return k.error(m("common.invalidJson")),null}}function se(i){const m=i.trim();if(!m)return"empty";try{return JSON.parse(m),"valid"}catch{return"invalid"}}function N({value:i,onChange:m,placeholder:h,minHeight:u="120px",example:o,fill:a=!1}){const{t:y}=G(),g=se(i);return e.jsxs("div",{className:ee("flex flex-col gap-1.5",a&&"flex-1 min-h-0"),children:[e.jsx("div",{className:a?"flex-1 min-h-0":void 0,children:e.jsx(ie,{value:i,onChange:m,language:"js",placeholder:h,minHeight:u,fill:a})}),e.jsxs("div",{className:"flex items-center justify-between gap-2 min-h-5",children:[e.jsx("span",{className:g==="invalid"?"text-xs text-destructive":g==="valid"?"text-xs text-emerald-500":"text-xs text-muted-foreground/60",children:g==="invalid"?y("integration.jsonInvalid"):g==="valid"?"JSON ✓":""}),o&&e.jsx("button",{type:"button",className:"text-xs text-primary underline-offset-2 hover:underline cursor-pointer",onClick:()=>m(o),children:y("integration.insertExample")})]})]})}function x({children:i}){return e.jsx("p",{className:"text-[11px] leading-4 text-muted-foreground/80 font-mono",children:i})}const d={verifyConfig:`{ +import{k as Q,f as F,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as G,ce as W,c9 as X,c8 as Z,bK as k,i as Y,ao as q,aW as P,aX as ee}from"./index-C-i99XXF.js";import{u as J}from"./useMutation-CrSU7LrM.js";import{C as _,c as v,d as j,a as b}from"./card-BwvuSgdv.js";import{I as f}from"./input-CX4DHDvW.js";import{L as r}from"./label-YdsyMzds.js";import{S as $,e as O,f as w,a as A,c as I}from"./select-C7HHvgkd.js";import{S as ne}from"./switch-0loFRSXw.js";import{C as ie}from"./code-editor-KdP2kfsd.js";import{S as ae}from"./save-LpbBFCdm.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./vendor-md-editor-C0GoXAL0.js";const t=i=>JSON.stringify(i,null,2),T=[{id:"generic",labelKey:"integration.presetGeneric",descKey:"integration.presetGenericDesc",channelKey:"my-webhook",provider:"generic",displayName:"",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"none",verifyConfig:null,credentials:null,mapping:t({external_id:"$.id",payload:{body:"$.text"}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"hmac",labelKey:"integration.presetHmac",descKey:"integration.presetHmacDesc",channelKey:"my-secured-webhook",provider:"generic-hmac",displayName:"",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"hmac-sha256",verifyConfig:t({header:"x-signature",encoding:"hex"}),credentials:t({secret:"YOUR_SECRET"}),mapping:t({external_id:"$.id",payload:{body:"$.text"}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"github",labelKey:"integration.presetGithub",descKey:"integration.presetGithubDesc",channelKey:"github",provider:"github",displayName:"GitHub Webhook",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"hmac-sha256",verifyConfig:t({header:"x-hub-signature-256",scheme:"sha256=",encoding:"hex"}),credentials:t({secret:"YOUR_GITHUB_WEBHOOK_SECRET"}),mapping:t({external_id:"$._headers.x-github-delivery",payload:{body:'$.action | default("ping")'}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"shopify",labelKey:"integration.presetShopify",descKey:"integration.presetShopifyDesc",channelKey:"shopify",provider:"shopify",displayName:"Shopify Webhook",mode:"push",transport:"http1",framing:"raw",endpoint:"",verifyKind:"hmac-sha256",verifyConfig:t({header:"x-shopify-hmac-sha256",encoding:"base64"}),credentials:t({secret:"YOUR_SHOPIFY_API_SECRET"}),mapping:t({external_id:"$._headers.x-shopify-webhook-id",payload:{body:'$.note | default("order event")'}}),pullConfig:null,streamConfig:null,targetType:"ingress_note"},{id:"dingtalk",labelKey:"integration.presetDingtalk",descKey:"integration.presetDingtalkDesc",channelKey:"dingtalk",provider:"dingtalk",displayName:"钉钉机器人",mode:"stream",transport:"ws",framing:"dispatch",endpoint:"wss://placeholder.invalid",verifyKind:"none",verifyConfig:null,credentials:t({grant:{clientId:"YOUR_APP_KEY",clientSecret:"YOUR_APP_SECRET"}}),mapping:t({external_id:"$.headers.messageId",sender:"$.data | as_json($.senderStaffId)",payload:{body:"$.data | as_json($.text.content)"}}),pullConfig:null,streamConfig:t({pre_connect:{url:"https://api.dingtalk.com/v1.0/gateway/connections/open",body:{clientId:"{{clientId}}",clientSecret:"{{clientSecret}}",subscriptions:[{type:"CALLBACK",topic:"/v1.0/im/bot/messages/get"}],ua:"dingtalk-sdk-python/v0.20-union",localIp:"127.0.0.1"},headers:{Accept:"application/json"},url_template:"{{endpoint}}?ticket={{ticket}}"},ws_keepalive:!0,heartbeat_secs:60,events:{match:{path:"$.type",equals:"CALLBACK"},payload_path:"$"},ack_reply:{code:200,headers:{messageId:"{{id}}"},message:"ok",data:"{}"},ack_reply_id_path:"$.headers.messageId"}),targetType:"chat/chat_messages"},{id:"feishu",labelKey:"integration.presetFeishu",descKey:"integration.presetFeishuDesc",channelKey:"feishu",provider:"feishu",displayName:"飞书机器人",mode:"stream",transport:"ws",framing:"pb-frame",endpoint:"wss://placeholder.invalid",verifyKind:"none",verifyConfig:null,credentials:t({AppID:"YOUR_APP_ID",AppSecret:"YOUR_APP_SECRET"}),mapping:t({external_id:"$.header.event_id",sender:"$.event.sender.sender_id.open_id",payload:{body:"$.event.message.content | as_json($.text)"}}),pullConfig:null,streamConfig:t({pre_connect:{url:"https://open.feishu.cn/callback/ws/endpoint",body:{AppID:"{{AppID}}",AppSecret:"{{AppSecret}}"},headers:{"User-Agent":"oapi-sdk-python/v1.7.3",locale:"zh"},code_path:"$.code",ok_code:0,url_path:"$.data.URL"},pb_frame:{ping_interval_secs:25,events:{equals:"event"},fragment:{id_header:"message_id",sum_header:"sum",seq_header:"seq"},ack:!0,ack_code:200}}),targetType:"chat/chat_messages"},{id:"http-pull",labelKey:"integration.presetPull",descKey:"integration.presetPullDesc",channelKey:"my-poll",provider:"generic",displayName:"",mode:"pull",transport:"http1",framing:"raw",endpoint:"https://api.example.com/items",verifyKind:"none",verifyConfig:null,credentials:t({bearer:"YOUR_TOKEN"}),mapping:t({external_id:"$.id",payload:{body:"$.name"}}),pullConfig:t({list_path:"$.items",id_field:"id",param:"since_id",page_size:50}),streamConfig:null,targetType:"ingress_note"},{id:"imap",labelKey:"integration.presetImap",descKey:"integration.presetImapDesc",channelKey:"support-inbox",provider:"imap",displayName:"客服邮箱",mode:"pull",transport:"imap",framing:"mime",endpoint:"imaps://imap.example.com:993",verifyKind:"none",verifyConfig:null,credentials:t({username:"support@example.com",password:"YOUR_APP_PASSWORD"}),mapping:t({external_id:"$.message_id",sender:"$.from.address",payload:{body:"$.text_body",subject:"$.subject"}}),pullConfig:t({folder:"INBOX",ssl:!0,batch:50,idle_secs:1700}),streamConfig:null,targetType:"conversation_message"}],L={push:["http1","http2"],pull:["http1","http2","imap"],stream:["ws","mqtt"],listen:["tcp"]},M=["push","pull","stream","listen"],B=["raw","json-rpc","dispatch","pb-frame"],z=["hmac-sha256","token","challenge","wechat-aes","jwt-widget","none"],te={channel_key:"",app_id:"",display_name:"",provider:"generic-hmac",mode:"push",transport:"http1",framing:"raw",endpoint:"",target_type:"",verify_kind:"hmac-sha256",verify_config:"",credentials:"",mapping:"",pull_config:"",stream_config:"",route_extra:"",redelivery_max:"5",enabled:!0};function C(i,m){const h=i.trim();if(h)try{return JSON.parse(h)}catch{return k.error(m("common.invalidJson")),null}}function se(i){const m=i.trim();if(!m)return"empty";try{return JSON.parse(m),"valid"}catch{return"invalid"}}function N({value:i,onChange:m,placeholder:h,minHeight:u="120px",example:o,fill:a=!1}){const{t:y}=G(),g=se(i);return e.jsxs("div",{className:ee("flex flex-col gap-1.5",a&&"flex-1 min-h-0"),children:[e.jsx("div",{className:a?"flex-1 min-h-0":void 0,children:e.jsx(ie,{value:i,onChange:m,language:"js",placeholder:h,minHeight:u,fill:a})}),e.jsxs("div",{className:"flex items-center justify-between gap-2 min-h-5",children:[e.jsx("span",{className:g==="invalid"?"text-xs text-destructive":g==="valid"?"text-xs text-emerald-500":"text-xs text-muted-foreground/60",children:g==="invalid"?y("integration.jsonInvalid"):g==="valid"?"JSON ✓":""}),o&&e.jsx("button",{type:"button",className:"text-xs text-primary underline-offset-2 hover:underline cursor-pointer",onClick:()=>m(o),children:y("integration.insertExample")})]})]})}function x({children:i}){return e.jsx("p",{className:"text-[11px] leading-4 text-muted-foreground/80 font-mono",children:i})}const d={verifyConfig:`{ "header": "x-signature", "scheme": "sha256=", "encoding": "hex" diff --git a/adminui/assets/channels-D7bgfzb1.js b/adminui/assets/channels-Dom5hTtX.js similarity index 83% rename from adminui/assets/channels-D7bgfzb1.js rename to adminui/assets/channels-Dom5hTtX.js index c9c1ef7d..23a3c526 100644 --- a/adminui/assets/channels-D7bgfzb1.js +++ b/adminui/assets/channels-Dom5hTtX.js @@ -1 +1 @@ -import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as L,ce as O,c9 as R,c8 as q,i as y,am as z,L as B,R as Q,M as H,N,bK as p,ao as b,aW as u}from"./index-EC_gIQIi.js";import{u as D}from"./useMutation-C9eWISs8.js";import{A as V,c as I,f as W,g as Z,d as J,e as U,b as $,a as G}from"./alert-dialog-BCjXQEnz.js";import{B as w}from"./badge-BrOOeG4p.js";import{C as X,a as Y}from"./card-BhczRj8d.js";import{D as ee,a as ne,d as se,e as ae,c as te}from"./dialog-BvqDo2CN.js";import{S as ie,e as re,f as oe,a as le,c as _}from"./select-BSZ-0tY-.js";import{S as de}from"./switch-DhX4UWWe.js";import{T as ce,d as me,e as S,c as o,a as xe,b as a}from"./table-B0P46Gj-.js";import{L as E}from"./label-BNi6V6qj.js";import{T as pe}from"./textarea-CxSwwTO9.js";import{T as ue}from"./table-skeleton-CzRpAQZA.js";import{E as he}from"./empty-state-DSPTmRGJ.js";import{P as ge}from"./plus-BQJ6-Ehy.js";import{E as je}from"./ellipsis-vertical-29muOhpK.js";import{P as fe}from"./pencil-9H2eFft0.js";import{Z as ve}from"./zap-XD-Ba7g-.js";import{T as Ce}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";function ye(s){switch(s){case"connected":case"delivered":return"default";case"degraded":case"retrying":case"connecting":return"secondary";case"error":case"dead":return"destructive";default:return"outline"}}const h="__all__";function Je(){const{t:s}=L(),g=O(),T=R(),[l,j]=r.useState(null),[t,f]=r.useState(null),[v,k]=r.useState(""),[i,m]=r.useState(null),[x,P]=r.useState(h),d=q({queryKey:["admin-integration-channels",x],queryFn:()=>u.admin.integration.listChannels(x===h?void 0:{app:x})}),M=r.useMemo(()=>d.data??[],[d.data]),F=r.useMemo(()=>{const n=new Set;for(const c of d.data??[])n.add(c.app_id??"none");return[...n].sort()},[d.data]),K=D({mutationFn:({id:n,body:c})=>u.admin.integration.updateChannel(n,c),onSuccess:()=>{T.invalidateQueries({queryKey:["admin-integration-channels"]})},onError:n=>p.error(n instanceof b?n.message:s("integration.failedToUpdate"))}),A=D({mutationFn:n=>u.admin.integration.deleteChannel(n),onSuccess:()=>{p.success(s("integration.channelDeleted")),T.invalidateQueries({queryKey:["admin-integration-channels"]}),j(null)},onError:n=>p.error(n instanceof b?n.message:s("integration.failedToDelete"))}),C=D({mutationFn:()=>u.admin.integration.testMapping((t==null?void 0:t.id)??"",{sample:v}),onSuccess:n=>m(n),onError:n=>p.error(n instanceof b?n.message:s("integration.failedToTest"))});return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsxs(ie,{value:x,onValueChange:n=>P(n??h),children:[e.jsx(re,{className:"w-48",children:e.jsx(oe,{placeholder:s("integration.ownerAppAll")})}),e.jsxs(le,{children:[e.jsx(_,{value:h,children:s("integration.ownerAppAll")}),F.map(n=>e.jsx(_,{value:n,children:n==="none"?s("integration.ownerAppNone"):n},n))]})]}),e.jsxs(y,{onClick:()=>g.push("/channels/new"),children:[e.jsx(ge,{className:"size-4"}),s("integration.newChannel")]})]}),e.jsx(X,{children:e.jsx(Y,{className:"p-0",children:d.isLoading?e.jsx(ue,{cols:7}):e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(S,{children:[e.jsx(o,{children:s("integration.channelKey")}),e.jsx(o,{children:s("integration.ownerApp")}),e.jsx(o,{children:s("integration.provider")}),e.jsx(o,{children:s("integration.stack")}),e.jsx(o,{children:s("integration.targetType")}),e.jsx(o,{children:s("common.status")}),e.jsx(o,{className:"text-end",children:s("common.actions")})]})}),e.jsx(xe,{children:M.length===0?e.jsx(S,{children:e.jsx(a,{colSpan:7,children:e.jsx(he,{icon:z,title:s("integration.noChannels"),description:s("integration.noChannelsDesc"),action:{label:s("integration.newChannel"),onClick:()=>g.push("/channels/new")}})})}):M.map(n=>e.jsxs(S,{children:[e.jsx(a,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:n.display_name}),e.jsxs("span",{className:"font-mono text-xs text-muted-foreground",children:["/ingress/",n.channel_key]})]})}),e.jsx(a,{children:n.app_id?e.jsx(w,{variant:"outline",className:"font-mono",children:n.app_id}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})}),e.jsx(a,{children:e.jsx(w,{variant:"outline",className:"font-mono",children:n.provider})}),e.jsx(a,{children:e.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:[n.mode,"/",n.transport,"/",n.framing]})}),e.jsx(a,{children:e.jsx("span",{className:"font-mono text-xs",children:n.target_type})}),e.jsx(a,{children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(de,{checked:n.enabled,onCheckedChange:c=>K.mutate({id:n.id,body:{enabled:c}})}),e.jsx(w,{variant:ye(n.enabled?n.status:"disabled"),children:n.enabled?n.status:"disabled"}),n.has_credentials&&e.jsx("span",{className:"text-xs text-muted-foreground",title:s("integration.hasCredentials"),children:"🔑"})]})}),e.jsx(a,{className:"text-end",children:e.jsxs(B,{children:[e.jsx(Q,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(je,{className:"size-4"})}),e.jsxs(H,{align:"end",children:[e.jsxs(N,{onClick:()=>g.push(`/channels/${n.id}/edit`),children:[e.jsx(fe,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(N,{onClick:()=>{f(n),k(""),m(null)},disabled:!n.mapping,children:[e.jsx(ve,{className:"size-4 me-2"}),s("integration.testMapping")]}),e.jsxs(N,{onClick:()=>j(n),disabled:A.isPending,className:"text-destructive",children:[e.jsx(Ce,{className:"size-4 me-2"}),s("common.delete")]})]})]})})]},n.id))})]})})}),e.jsx(ee,{open:!!t,onOpenChange:n=>{n||(f(null),m(null))},children:e.jsxs(ne,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(se,{children:e.jsxs(ae,{children:[s("integration.testMapping")," — ",t==null?void 0:t.channel_key]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(E,{children:s("integration.sampleBody")}),e.jsx(pe,{value:v,onChange:n=>k(n.target.value),rows:6,className:"font-mono text-xs",placeholder:'{"id": "evt-1", "text": "hello"}'})]}),i&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(E,{children:s("integration.preview")}),i.matched?e.jsx("pre",{className:"rounded-md bg-muted p-3 text-xs font-mono overflow-auto max-h-64",children:JSON.stringify({external_id:i.external_id,sender:i.sender,kind:i.kind,payload:i.payload},null,2)}):e.jsx("p",{className:"text-sm text-muted-foreground",children:i.reason})]})]}),e.jsxs(te,{children:[e.jsx(y,{variant:"outline",onClick:()=>{f(null),m(null)},children:s("common.close")}),e.jsx(y,{onClick:()=>C.mutate(),disabled:C.isPending||!v.trim(),children:C.isPending?s("common.loading"):s("integration.runTest")})]})]})}),e.jsx(V,{open:!!l,onOpenChange:n=>{n||j(null)},children:e.jsxs(I,{children:[e.jsxs(W,{children:[e.jsx(Z,{children:s("common.confirmDeleteTitle")}),e.jsx(J,{children:s("integration.confirmDeleteChannel",{key:(l==null?void 0:l.channel_key)??""})})]}),e.jsxs(U,{children:[e.jsx($,{children:s("common.cancel")}),e.jsx(G,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>l&&A.mutate(l.id),children:s("common.delete")})]})]})})]})}export{Je as default}; +import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as L,ce as O,c9 as R,c8 as q,i as y,am as z,L as B,R as Q,M as H,N,bK as p,ao as b,aW as u}from"./index-C-i99XXF.js";import{u as D}from"./useMutation-CrSU7LrM.js";import{A as V,c as I,f as W,g as Z,d as J,e as U,b as $,a as G}from"./alert-dialog-CqlwlZ39.js";import{B as w}from"./badge-BxazBb-3.js";import{C as X,a as Y}from"./card-BwvuSgdv.js";import{D as ee,a as ne,d as se,e as ae,c as te}from"./dialog-8LyJX3or.js";import{S as ie,e as re,f as oe,a as le,c as _}from"./select-C7HHvgkd.js";import{S as de}from"./switch-0loFRSXw.js";import{T as ce,d as me,e as S,c as o,a as xe,b as a}from"./table-CCu_JPDD.js";import{L as E}from"./label-YdsyMzds.js";import{T as pe}from"./textarea-DxF_RMjI.js";import{T as ue}from"./table-skeleton-W4NmdKYl.js";import{E as he}from"./empty-state-v8u5VqOl.js";import{P as ge}from"./plus-CwjdK202.js";import{E as je}from"./ellipsis-vertical-xZQpERB7.js";import{P as fe}from"./pencil-BzoosANP.js";import{Z as ve}from"./zap-DM3H89Nx.js";import{T as Ce}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";function ye(s){switch(s){case"connected":case"delivered":return"default";case"degraded":case"retrying":case"connecting":return"secondary";case"error":case"dead":return"destructive";default:return"outline"}}const h="__all__";function Je(){const{t:s}=L(),g=O(),T=R(),[l,j]=r.useState(null),[t,f]=r.useState(null),[v,k]=r.useState(""),[i,m]=r.useState(null),[x,P]=r.useState(h),d=q({queryKey:["admin-integration-channels",x],queryFn:()=>u.admin.integration.listChannels(x===h?void 0:{app:x})}),M=r.useMemo(()=>d.data??[],[d.data]),F=r.useMemo(()=>{const n=new Set;for(const c of d.data??[])n.add(c.app_id??"none");return[...n].sort()},[d.data]),K=D({mutationFn:({id:n,body:c})=>u.admin.integration.updateChannel(n,c),onSuccess:()=>{T.invalidateQueries({queryKey:["admin-integration-channels"]})},onError:n=>p.error(n instanceof b?n.message:s("integration.failedToUpdate"))}),A=D({mutationFn:n=>u.admin.integration.deleteChannel(n),onSuccess:()=>{p.success(s("integration.channelDeleted")),T.invalidateQueries({queryKey:["admin-integration-channels"]}),j(null)},onError:n=>p.error(n instanceof b?n.message:s("integration.failedToDelete"))}),C=D({mutationFn:()=>u.admin.integration.testMapping((t==null?void 0:t.id)??"",{sample:v}),onSuccess:n=>m(n),onError:n=>p.error(n instanceof b?n.message:s("integration.failedToTest"))});return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsxs(ie,{value:x,onValueChange:n=>P(n??h),children:[e.jsx(re,{className:"w-48",children:e.jsx(oe,{placeholder:s("integration.ownerAppAll")})}),e.jsxs(le,{children:[e.jsx(_,{value:h,children:s("integration.ownerAppAll")}),F.map(n=>e.jsx(_,{value:n,children:n==="none"?s("integration.ownerAppNone"):n},n))]})]}),e.jsxs(y,{onClick:()=>g.push("/channels/new"),children:[e.jsx(ge,{className:"size-4"}),s("integration.newChannel")]})]}),e.jsx(X,{children:e.jsx(Y,{className:"p-0",children:d.isLoading?e.jsx(ue,{cols:7}):e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(S,{children:[e.jsx(o,{children:s("integration.channelKey")}),e.jsx(o,{children:s("integration.ownerApp")}),e.jsx(o,{children:s("integration.provider")}),e.jsx(o,{children:s("integration.stack")}),e.jsx(o,{children:s("integration.targetType")}),e.jsx(o,{children:s("common.status")}),e.jsx(o,{className:"text-end",children:s("common.actions")})]})}),e.jsx(xe,{children:M.length===0?e.jsx(S,{children:e.jsx(a,{colSpan:7,children:e.jsx(he,{icon:z,title:s("integration.noChannels"),description:s("integration.noChannelsDesc"),action:{label:s("integration.newChannel"),onClick:()=>g.push("/channels/new")}})})}):M.map(n=>e.jsxs(S,{children:[e.jsx(a,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:n.display_name}),e.jsxs("span",{className:"font-mono text-xs text-muted-foreground",children:["/ingress/",n.channel_key]})]})}),e.jsx(a,{children:n.app_id?e.jsx(w,{variant:"outline",className:"font-mono",children:n.app_id}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})}),e.jsx(a,{children:e.jsx(w,{variant:"outline",className:"font-mono",children:n.provider})}),e.jsx(a,{children:e.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:[n.mode,"/",n.transport,"/",n.framing]})}),e.jsx(a,{children:e.jsx("span",{className:"font-mono text-xs",children:n.target_type})}),e.jsx(a,{children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(de,{checked:n.enabled,onCheckedChange:c=>K.mutate({id:n.id,body:{enabled:c}})}),e.jsx(w,{variant:ye(n.enabled?n.status:"disabled"),children:n.enabled?n.status:"disabled"}),n.has_credentials&&e.jsx("span",{className:"text-xs text-muted-foreground",title:s("integration.hasCredentials"),children:"🔑"})]})}),e.jsx(a,{className:"text-end",children:e.jsxs(B,{children:[e.jsx(Q,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(je,{className:"size-4"})}),e.jsxs(H,{align:"end",children:[e.jsxs(N,{onClick:()=>g.push(`/channels/${n.id}/edit`),children:[e.jsx(fe,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(N,{onClick:()=>{f(n),k(""),m(null)},disabled:!n.mapping,children:[e.jsx(ve,{className:"size-4 me-2"}),s("integration.testMapping")]}),e.jsxs(N,{onClick:()=>j(n),disabled:A.isPending,className:"text-destructive",children:[e.jsx(Ce,{className:"size-4 me-2"}),s("common.delete")]})]})]})})]},n.id))})]})})}),e.jsx(ee,{open:!!t,onOpenChange:n=>{n||(f(null),m(null))},children:e.jsxs(ne,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(se,{children:e.jsxs(ae,{children:[s("integration.testMapping")," — ",t==null?void 0:t.channel_key]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(E,{children:s("integration.sampleBody")}),e.jsx(pe,{value:v,onChange:n=>k(n.target.value),rows:6,className:"font-mono text-xs",placeholder:'{"id": "evt-1", "text": "hello"}'})]}),i&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(E,{children:s("integration.preview")}),i.matched?e.jsx("pre",{className:"rounded-md bg-muted p-3 text-xs font-mono overflow-auto max-h-64",children:JSON.stringify({external_id:i.external_id,sender:i.sender,kind:i.kind,payload:i.payload},null,2)}):e.jsx("p",{className:"text-sm text-muted-foreground",children:i.reason})]})]}),e.jsxs(te,{children:[e.jsx(y,{variant:"outline",onClick:()=>{f(null),m(null)},children:s("common.close")}),e.jsx(y,{onClick:()=>C.mutate(),disabled:C.isPending||!v.trim(),children:C.isPending?s("common.loading"):s("integration.runTest")})]})]})}),e.jsx(V,{open:!!l,onOpenChange:n=>{n||j(null)},children:e.jsxs(I,{children:[e.jsxs(W,{children:[e.jsx(Z,{children:s("common.confirmDeleteTitle")}),e.jsx(J,{children:s("integration.confirmDeleteChannel",{key:(l==null?void 0:l.channel_key)??""})})]}),e.jsxs(U,{children:[e.jsx($,{children:s("common.cancel")}),e.jsx(G,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>l&&A.mutate(l.id),children:s("common.delete")})]})]})})]})}export{Je as default}; diff --git a/adminui/assets/check-iV9lQKhJ.js b/adminui/assets/check-DsFJjVO2.js similarity index 84% rename from adminui/assets/check-iV9lQKhJ.js rename to adminui/assets/check-DsFJjVO2.js index c482326a..3607a82a 100644 --- a/adminui/assets/check-iV9lQKhJ.js +++ b/adminui/assets/check-DsFJjVO2.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/checkbox-C7H6TTIF.js b/adminui/assets/checkbox-COY1I8--.js similarity index 96% rename from adminui/assets/checkbox-C7H6TTIF.js rename to adminui/assets/checkbox-COY1I8--.js index bbd18667..a39bbcc6 100644 --- a/adminui/assets/checkbox-C7H6TTIF.js +++ b/adminui/assets/checkbox-COY1I8--.js @@ -1 +1 @@ -import{f as r,j as E}from"./vendor-react-j_G0Dyx0.js";import{b9 as ue,bS as se,ca as qe,bT as Le,c0 as oe,af as de,c2 as He,cp as Ue,bv as We,T as ze,cd as fe,bk as ce,cr as Xe,cq as _e,aZ as $e,bx as Je,cl as Ye,c4 as Ze,bL as Qe,aX as Ae}from"./index-EC_gIQIi.js";import{C as et}from"./check-iV9lQKhJ.js";import{f as pe,a as tt,b as nt,u as rt,c as at}from"./useRegisterFieldControl-szO_hZLb.js";import{u as it}from"./FormContext-Cvsbmzt5.js";import{u as st}from"./useAriaLabelledBy-DwidVp0f.js";const ot=r.createContext({disabled:!1});function dt(){return r.useContext(ot)}const ct=r.createContext(void 0);function lt(n=!0){const a=r.useContext(ct);if(a===void 0&&!n)throw new Error(ue(3));return a}function ut(n){if(!n)return null;for(const a of n.elements){const v=a.tagName;if(v==="BUTTON"||v==="INPUT"){const I=a;if(I.type==="submit")return I}}return null}let le=(function(n){return n.checked="data-checked",n.unchecked="data-unchecked",n.indeterminate="data-indeterminate",n.disabled="data-disabled",n.readonly="data-readonly",n.required="data-required",n.valid="data-valid",n.invalid="data-invalid",n.touched="data-touched",n.dirty="data-dirty",n.filled="data-filled",n.focused="data-focused",n})({});function me(n){return r.useMemo(()=>({checked(a){return n.indeterminate?{}:a?{[le.checked]:""}:{[le.unchecked]:""}},...pe}),[n.indeterminate])}const ve=r.createContext(void 0);function ft(){const n=r.useContext(ve);if(n===void 0)throw new Error(ue(14));return n}const pt="data-parent",mt=r.forwardRef(function(a,v){const{checked:I,className:he,defaultChecked:_=!1,"aria-labelledby":K,disabled:j=!1,form:c,id:h,indeterminate:R=!1,inputRef:D,name:G,onCheckedChange:b,parent:o=!1,readOnly:k=!1,render:$,required:y=!1,uncheckedValue:V,value:B,nativeButton:T=!1,style:ht,...be}=a,{clearErrors:ke}=it(),{disabled:ye,name:ge,setDirty:xe,setFilled:O,setFocused:J,setTouched:Pe,state:Y,validationMode:Ce,validityData:Ee,shouldValidateOnChange:Ie,validation:Re}=tt(),Se=dt(),{labelId:Me,controlId:Ve,registerControlId:g,getDescriptionProps:Z}=nt(),t=lt(),S=t==null?void 0:t.parent,M=S&&t.allValues,l=ye||Se.disabled||(t==null?void 0:t.disabled)||j,x=ge??G,i=B??x,Q=se(),Be=se();let u=Ve;M?u=o?Be:`${S.id}-${i}`:h&&(u=h);let q={};M&&(o?q=t.parent.getParentProps():i&&(q=t.parent.getChildProps(i)));const{checked:A=I,indeterminate:N=R,onCheckedChange:L,...Te}=q,P=t==null?void 0:t.value,ee=t==null?void 0:t.setValue,te=t==null?void 0:t.defaultValue,H=r.useRef(null),w=qe(()=>Symbol("checkbox-control")),U=r.useRef(!1),{getButtonProps:Ne,buttonRef:we}=Le({disabled:l,native:T}),f=(t==null?void 0:t.validation)??Re,[s,Fe]=rt({controlled:i&&P&&!o?P.includes(i):A,default:i&&te&&!o?te.includes(i):_,name:"Checkbox",state:"checked"});oe(()=>{g!==de&&(U.current=!0,g(w.current,u))},[u,g,w]),r.useEffect(()=>{const e=w.current;return()=>{!U.current||g===de||(U.current=!1,g(e,void 0))}},[g,w]),at(H,Q,s,void 0,!t);const p=r.useRef(null),Ke=He(D,p,f.inputRef),je=st(K,Me,p,!T,u??void 0);oe(()=>{p.current&&(p.current.indeterminate=N,s&&O(!0))},[s,N,O]),Ue(s,()=>{t&&!o||(ke(x),O(s),xe(s!==Ee.initialValue),Ie()?f.commit(s):f.commit(s,!0))});const De=We({checked:s,disabled:l,form:c,name:o?void 0:x,id:T?void 0:u??void 0,required:y,ref:Ke,style:x?Xe:_e,tabIndex:-1,type:"checkbox","aria-hidden":!0,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(k){e.preventDefault();return}const d=e.currentTarget.checked,C=$e(Je,e.nativeEvent);if(L==null||L(d,C),b==null||b(d,C),!C.isCanceled&&(Fe(d),i&&P&&ee&&!o&&!M)){const m=d?[...P,i]:P.filter(F=>F!==i);ee(m,C)}},onFocus(){var e;(e=H.current)==null||e.focus()}},B!==void 0?{value:(t?s&&B:B)||""}:ze,Z,t?f.getValidationProps:f.getInputValidationProps),ne=M?!!A:s,re=M&&N||R;r.useEffect(()=>{if(!S||!i)return;const e=S.disabledStatesRef.current;return e.set(i,l),()=>{e.delete(i)}},[S,l,i]);const W=r.useMemo(()=>({...Y,checked:ne,disabled:l,readOnly:k,required:y,indeterminate:re}),[Y,ne,l,k,y,re]),Ge=me(W),Oe=fe("span",a,{state:W,ref:[we,H,v,t==null?void 0:t.registerControlRef],props:[{id:T?u??void 0:Q,role:"checkbox","aria-checked":N?"mixed":s,"aria-readonly":k||void 0,"aria-required":y||void 0,"aria-labelledby":je,[pt]:o?"":void 0,onFocus(){J(!0)},onBlur(){const e=p.current;e&&(Pe(!0),J(!1),Ce==="onBlur"&&f.commit(t?P:e.checked))},onKeyDown(e){var ae;if(e.key!=="Enter"||(e.preventBaseUIHandler(),e.defaultPrevented))return;const d=((ae=p.current)==null?void 0:ae.form)??null,C=e.currentTarget,m=e.nativeEvent,F=e.preventDefault,z=m.preventDefault;let X=!1;e.preventDefault=()=>{X=!0,F.call(e)},m.preventDefault=()=>{X=!0,z.call(m)},z.call(m),ce(C).queueMicrotask(()=>{var ie;e.preventDefault=F,m.preventDefault=z,X||(ie=ut(d))==null||ie.click()})},onClick(e){if(k||l)return;e.preventDefault();const d=p.current;d&&d.dispatchEvent(new(ce(d)).PointerEvent("click",{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey}))}},Z,f.getValidationProps,be,Te,Ne],stateAttributesMapping:Ge});return E.jsxs(ve.Provider,{value:W,children:[Oe,!s&&!t&&x&&!o&&V!==void 0&&E.jsx("input",{type:"hidden",form:c,name:x,value:V}),E.jsx("input",{...De,suppressHydrationWarning:!0})]})}),vt=r.forwardRef(function(a,v){const{render:I,className:he,style:_,keepMounted:K=!1,...j}=a,c=ft(),h=c.checked||c.indeterminate,{mounted:R,transitionStatus:D,setMounted:G}=Ye(h),b=r.useRef(null),o={...c,transitionStatus:D};Ze({open:h,ref:b,onComplete(){h||G(!1)}});const $={...me(c),...Qe,...pe},y=K||R,V=fe("span",a,{ref:[v,b],state:o,stateAttributesMapping:$,props:j});return y?V:null});function Ct({className:n,...a}){return E.jsx(mt,{"data-slot":"checkbox",className:Ae("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",n),...a,children:E.jsx(vt,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:E.jsx(et,{})})})}export{Ct as C}; +import{f as r,j as E}from"./vendor-react-j_G0Dyx0.js";import{b9 as ue,bS as se,ca as qe,bT as Le,c0 as oe,af as de,c2 as He,cp as Ue,bv as We,T as ze,cd as fe,bk as ce,cr as Xe,cq as _e,aZ as $e,bx as Je,cl as Ye,c4 as Ze,bL as Qe,aX as Ae}from"./index-C-i99XXF.js";import{C as et}from"./check-DsFJjVO2.js";import{f as pe,a as tt,b as nt,u as rt,c as at}from"./useRegisterFieldControl-BK92wKok.js";import{u as it}from"./FormContext-B5vgnUQy.js";import{u as st}from"./useAriaLabelledBy-k6ps6B67.js";const ot=r.createContext({disabled:!1});function dt(){return r.useContext(ot)}const ct=r.createContext(void 0);function lt(n=!0){const a=r.useContext(ct);if(a===void 0&&!n)throw new Error(ue(3));return a}function ut(n){if(!n)return null;for(const a of n.elements){const v=a.tagName;if(v==="BUTTON"||v==="INPUT"){const I=a;if(I.type==="submit")return I}}return null}let le=(function(n){return n.checked="data-checked",n.unchecked="data-unchecked",n.indeterminate="data-indeterminate",n.disabled="data-disabled",n.readonly="data-readonly",n.required="data-required",n.valid="data-valid",n.invalid="data-invalid",n.touched="data-touched",n.dirty="data-dirty",n.filled="data-filled",n.focused="data-focused",n})({});function me(n){return r.useMemo(()=>({checked(a){return n.indeterminate?{}:a?{[le.checked]:""}:{[le.unchecked]:""}},...pe}),[n.indeterminate])}const ve=r.createContext(void 0);function ft(){const n=r.useContext(ve);if(n===void 0)throw new Error(ue(14));return n}const pt="data-parent",mt=r.forwardRef(function(a,v){const{checked:I,className:he,defaultChecked:_=!1,"aria-labelledby":K,disabled:j=!1,form:c,id:h,indeterminate:R=!1,inputRef:D,name:G,onCheckedChange:b,parent:o=!1,readOnly:k=!1,render:$,required:y=!1,uncheckedValue:V,value:B,nativeButton:T=!1,style:ht,...be}=a,{clearErrors:ke}=it(),{disabled:ye,name:ge,setDirty:xe,setFilled:O,setFocused:J,setTouched:Pe,state:Y,validationMode:Ce,validityData:Ee,shouldValidateOnChange:Ie,validation:Re}=tt(),Se=dt(),{labelId:Me,controlId:Ve,registerControlId:g,getDescriptionProps:Z}=nt(),t=lt(),S=t==null?void 0:t.parent,M=S&&t.allValues,l=ye||Se.disabled||(t==null?void 0:t.disabled)||j,x=ge??G,i=B??x,Q=se(),Be=se();let u=Ve;M?u=o?Be:`${S.id}-${i}`:h&&(u=h);let q={};M&&(o?q=t.parent.getParentProps():i&&(q=t.parent.getChildProps(i)));const{checked:A=I,indeterminate:N=R,onCheckedChange:L,...Te}=q,P=t==null?void 0:t.value,ee=t==null?void 0:t.setValue,te=t==null?void 0:t.defaultValue,H=r.useRef(null),w=qe(()=>Symbol("checkbox-control")),U=r.useRef(!1),{getButtonProps:Ne,buttonRef:we}=Le({disabled:l,native:T}),f=(t==null?void 0:t.validation)??Re,[s,Fe]=rt({controlled:i&&P&&!o?P.includes(i):A,default:i&&te&&!o?te.includes(i):_,name:"Checkbox",state:"checked"});oe(()=>{g!==de&&(U.current=!0,g(w.current,u))},[u,g,w]),r.useEffect(()=>{const e=w.current;return()=>{!U.current||g===de||(U.current=!1,g(e,void 0))}},[g,w]),at(H,Q,s,void 0,!t);const p=r.useRef(null),Ke=He(D,p,f.inputRef),je=st(K,Me,p,!T,u??void 0);oe(()=>{p.current&&(p.current.indeterminate=N,s&&O(!0))},[s,N,O]),Ue(s,()=>{t&&!o||(ke(x),O(s),xe(s!==Ee.initialValue),Ie()?f.commit(s):f.commit(s,!0))});const De=We({checked:s,disabled:l,form:c,name:o?void 0:x,id:T?void 0:u??void 0,required:y,ref:Ke,style:x?Xe:_e,tabIndex:-1,type:"checkbox","aria-hidden":!0,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(k){e.preventDefault();return}const d=e.currentTarget.checked,C=$e(Je,e.nativeEvent);if(L==null||L(d,C),b==null||b(d,C),!C.isCanceled&&(Fe(d),i&&P&&ee&&!o&&!M)){const m=d?[...P,i]:P.filter(F=>F!==i);ee(m,C)}},onFocus(){var e;(e=H.current)==null||e.focus()}},B!==void 0?{value:(t?s&&B:B)||""}:ze,Z,t?f.getValidationProps:f.getInputValidationProps),ne=M?!!A:s,re=M&&N||R;r.useEffect(()=>{if(!S||!i)return;const e=S.disabledStatesRef.current;return e.set(i,l),()=>{e.delete(i)}},[S,l,i]);const W=r.useMemo(()=>({...Y,checked:ne,disabled:l,readOnly:k,required:y,indeterminate:re}),[Y,ne,l,k,y,re]),Ge=me(W),Oe=fe("span",a,{state:W,ref:[we,H,v,t==null?void 0:t.registerControlRef],props:[{id:T?u??void 0:Q,role:"checkbox","aria-checked":N?"mixed":s,"aria-readonly":k||void 0,"aria-required":y||void 0,"aria-labelledby":je,[pt]:o?"":void 0,onFocus(){J(!0)},onBlur(){const e=p.current;e&&(Pe(!0),J(!1),Ce==="onBlur"&&f.commit(t?P:e.checked))},onKeyDown(e){var ae;if(e.key!=="Enter"||(e.preventBaseUIHandler(),e.defaultPrevented))return;const d=((ae=p.current)==null?void 0:ae.form)??null,C=e.currentTarget,m=e.nativeEvent,F=e.preventDefault,z=m.preventDefault;let X=!1;e.preventDefault=()=>{X=!0,F.call(e)},m.preventDefault=()=>{X=!0,z.call(m)},z.call(m),ce(C).queueMicrotask(()=>{var ie;e.preventDefault=F,m.preventDefault=z,X||(ie=ut(d))==null||ie.click()})},onClick(e){if(k||l)return;e.preventDefault();const d=p.current;d&&d.dispatchEvent(new(ce(d)).PointerEvent("click",{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey}))}},Z,f.getValidationProps,be,Te,Ne],stateAttributesMapping:Ge});return E.jsxs(ve.Provider,{value:W,children:[Oe,!s&&!t&&x&&!o&&V!==void 0&&E.jsx("input",{type:"hidden",form:c,name:x,value:V}),E.jsx("input",{...De,suppressHydrationWarning:!0})]})}),vt=r.forwardRef(function(a,v){const{render:I,className:he,style:_,keepMounted:K=!1,...j}=a,c=ft(),h=c.checked||c.indeterminate,{mounted:R,transitionStatus:D,setMounted:G}=Ye(h),b=r.useRef(null),o={...c,transitionStatus:D};Ze({open:h,ref:b,onComplete(){h||G(!1)}});const $={...me(c),...Qe,...pe},y=K||R,V=fe("span",a,{ref:[v,b],state:o,stateAttributesMapping:$,props:j});return y?V:null});function Ct({className:n,...a}){return E.jsx(mt,{"data-slot":"checkbox",className:Ae("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",n),...a,children:E.jsx(vt,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:E.jsx(et,{})})})}export{Ct as C}; diff --git a/adminui/assets/chevron-left-iG3CNZoG.js b/adminui/assets/chevron-left-Dxx6wreE.js similarity index 85% rename from adminui/assets/chevron-left-iG3CNZoG.js rename to adminui/assets/chevron-left-Dxx6wreE.js index 078ff1fa..febb7cd4 100644 --- a/adminui/assets/chevron-left-iG3CNZoG.js +++ b/adminui/assets/chevron-left-Dxx6wreE.js @@ -1,4 +1,4 @@ -import{a$ as e}from"./index-EC_gIQIi.js";/** +import{a$ as e}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/chevron-up-nN7PIzPd.js b/adminui/assets/chevron-up-F9cYTMff.js similarity index 85% rename from adminui/assets/chevron-up-nN7PIzPd.js rename to adminui/assets/chevron-up-F9cYTMff.js index 7f8d51b1..b24ee532 100644 --- a/adminui/assets/chevron-up-nN7PIzPd.js +++ b/adminui/assets/chevron-up-F9cYTMff.js @@ -1,4 +1,4 @@ -import{a$ as o}from"./index-EC_gIQIi.js";/** +import{a$ as o}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/circle-alert-0_MkNfwO.js b/adminui/assets/circle-alert-BhGUNGA_.js similarity index 89% rename from adminui/assets/circle-alert-0_MkNfwO.js rename to adminui/assets/circle-alert-BhGUNGA_.js index 2c5d8fdc..52e8a0d5 100644 --- a/adminui/assets/circle-alert-0_MkNfwO.js +++ b/adminui/assets/circle-alert-BhGUNGA_.js @@ -1,4 +1,4 @@ -import{a$ as e}from"./index-EC_gIQIi.js";/** +import{a$ as e}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/circle-check-big-Bv9fC9q8.js b/adminui/assets/circle-check-big-DeL5JaWu.js similarity index 87% rename from adminui/assets/circle-check-big-Bv9fC9q8.js rename to adminui/assets/circle-check-big-DeL5JaWu.js index e0fbba03..bd0a7d25 100644 --- a/adminui/assets/circle-check-big-Bv9fC9q8.js +++ b/adminui/assets/circle-check-big-DeL5JaWu.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/circle-x-h9c8HLLF.js b/adminui/assets/circle-x-Dmohp54U.js similarity index 88% rename from adminui/assets/circle-x-h9c8HLLF.js rename to adminui/assets/circle-x-Dmohp54U.js index b6951cb6..7a3a95ff 100644 --- a/adminui/assets/circle-x-h9c8HLLF.js +++ b/adminui/assets/circle-x-Dmohp54U.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/code-editor-3wDd6_W8.js b/adminui/assets/code-editor-KdP2kfsd.js similarity index 99% rename from adminui/assets/code-editor-3wDd6_W8.js rename to adminui/assets/code-editor-KdP2kfsd.js index 200a973c..ec5d686f 100644 --- a/adminui/assets/code-editor-3wDd6_W8.js +++ b/adminui/assets/code-editor-KdP2kfsd.js @@ -1,4 +1,4 @@ -import{f as me,j as wr}from"./vendor-react-j_G0Dyx0.js";import{a as Vu,_ as qu}from"./vendor-md-editor-C0GoXAL0.js";import{ct as ju,aX as Nu}from"./index-EC_gIQIi.js";let vr=[],wh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=wh[i])e=i+1;else return!0;if(e==t)return!1}}function gl(n){return n>=127462&&n<=127487}const bl=8205;function Uu(n,e,t=!0,i=!0){return(t?vh:Fu)(n,e,i)}function vh(n,e,t){if(e==n.length)return e;e&&$h(n.charCodeAt(e))&&Ph(n.charCodeAt(e-1))&&e--;let i=Ys(n,e);for(e+=yl(i);e=0&&gl(Ys(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Fu(n,e,t){for(;e>1;){let i=vh(n,e-2,t);if(i=56320&&n<57344}function Ph(n){return n>=55296&&n<56320}function yl(n){return n<65536?1:2}class B{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ui(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),it.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ui(this,e,t);let i=[];return this.decompose(e,t,i,0),it.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Li(this),r=new Li(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Li(this,e)}iterRange(e,t=this.length){return new Th(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ch(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?B.empty:e.length<=32?new ie(e):it.from(ie.split(e,[]))}}class ie extends B{constructor(e,t=Hu(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Ku(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new ie(xl(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=In(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new ie(l,o.length+r.length));else{let a=l.length>>1;i.push(new ie(l.slice(0,a)),new ie(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof ie))return super.replace(e,t,i);[e,t]=ui(this,e,t);let s=In(this.text,In(i.text,xl(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new ie(s,r):it.from(ie.split(s,[]),r)}sliceString(e,t=this.length,i=` +import{f as me,j as wr}from"./vendor-react-j_G0Dyx0.js";import{a as Vu,_ as qu}from"./vendor-md-editor-C0GoXAL0.js";import{ct as ju,aX as Nu}from"./index-C-i99XXF.js";let vr=[],wh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=wh[i])e=i+1;else return!0;if(e==t)return!1}}function gl(n){return n>=127462&&n<=127487}const bl=8205;function Uu(n,e,t=!0,i=!0){return(t?vh:Fu)(n,e,i)}function vh(n,e,t){if(e==n.length)return e;e&&$h(n.charCodeAt(e))&&Ph(n.charCodeAt(e-1))&&e--;let i=Ys(n,e);for(e+=yl(i);e=0&&gl(Ys(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Fu(n,e,t){for(;e>1;){let i=vh(n,e-2,t);if(i=56320&&n<57344}function Ph(n){return n>=55296&&n<56320}function yl(n){return n<65536?1:2}class B{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ui(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),it.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ui(this,e,t);let i=[];return this.decompose(e,t,i,0),it.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Li(this),r=new Li(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Li(this,e)}iterRange(e,t=this.length){return new Th(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ch(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?B.empty:e.length<=32?new ie(e):it.from(ie.split(e,[]))}}class ie extends B{constructor(e,t=Hu(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Ku(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new ie(xl(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=In(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new ie(l,o.length+r.length));else{let a=l.length>>1;i.push(new ie(l.slice(0,a)),new ie(l.slice(a)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof ie))return super.replace(e,t,i);[e,t]=ui(this,e,t);let s=In(this.text,In(i.text,xl(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new ie(s,r):it.from(ie.split(s,[]),r)}sliceString(e,t=this.length,i=` `){[e,t]=ui(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=l.slice(Math.max(0,e-r),t-r)),r=a+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new ie(i,s)),i=[],s=-1);return s>-1&&t.push(new ie(i,s)),t}}class it extends B{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=a+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let h=s&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=ui(this,e,t),i.lines=r&&t<=l){let a=o.replace(e-r,t-r,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let c=this.children.slice();return c[s]=a,new it(c,this.length-(t-e)+i.length)}return super.replace(r,l,a)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` `){[e,t]=ui(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=l.sliceString(e-o,t-o,i)),o=a+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof it))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let a=this.children[s],h=e.children[r];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let O of e)O.flatten(d);return new ie(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],a=0,h=-1,c=[];function f(d){let O;if(d.lines>r&&d instanceof it)for(let p of d.children)f(p);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof ie&&a&&(O=c[c.length-1])instanceof ie&&d.lines+O.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new ie(O.text.concat(d.text),O.length+1+d.length)):(a+d.lines>s&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:it.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new it(l,t)}}B.empty=new ie([""],0);function Hu(n){let e=-1;for(let t of n)e+=t.length+1;return e}function In(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(a>i&&(l=l.slice(0,i-s)),s0?1:(e instanceof ie?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof ie?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` `,this;e--}else if(s instanceof ie){let a=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=s.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ie?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Th{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Li(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Ch{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(B.prototype[Symbol.iterator]=function(){return this.iter()},Li.prototype[Symbol.iterator]=Th.prototype[Symbol.iterator]=Ch.prototype[Symbol.iterator]=function(){return this});class Ku{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function ui(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function ae(n,e,t=!0,i=!0){return Uu(n,e,t,i)}function Ju(n){return n>=56320&&n<57344}function ed(n){return n>=55296&&n<56320}function $e(n,e){let t=n.charCodeAt(e);if(!ed(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Ju(i)?(t-55296<<10)+(i-56320)+65536:t}function ko(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function nt(n){return n<65536?1:2}const $r=/\r\n?|\n/;var de=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(de||(de={}));class ht{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=l}else{if(i!=de.Simple&&h>=e&&(i==de.TrackDel&&se||i==de.TrackBefore&&se))return null;if(h>e||h==e&&t<0&&!l)return e==s||t<0?r:r+a;r+=a}s=h}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&l>=e)return st?"cover":!0;s=l}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new ht(e)}static create(e){return new ht(e)}}class se extends ht{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Pr(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Tr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=l,t[s+1]=o;let a=s>>1;for(;i.length0&&kt(i,t,r.text),r.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,l=null;function a(c=!1){if(!c&&!s.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let O=d?typeof d=="string"?B.of(d.split(i||$r)):d:B.empty,p=O.length;if(f==u&&p==0)return;fo&&ge(s,f-o,-1),ge(s,u-f,p),kt(r,s,O),o=u}}return h(e),a(!l),l}static empty(e){return new se(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function kt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(s,h,r,c,f),s=h,r=c}}}function Tr(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Ii(n),l=new Ii(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ge(s,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),r.forward2(a),o.forward(a)}}}}class Ii{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?B.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?B.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class xt{constructor(e,t,i,s){this.from=e,this.to=t,this.flags=i,this.goalColumn=s}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new xt(i,s,this.flags,this.goalColumn)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return y.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return y.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return y.range(e.anchor,e.head)}static create(e,t,i,s){return new xt(e,t,i,s)}}class y{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:y.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new y(e.ranges.map(t=>xt.fromJSON(t)),e.main)}static single(e,t=e){return new y([y.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?y.range(a,l):y.range(l,a))}}return new y(e,t)}}function Ah(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let Qo=0;class T{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=Qo++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new T(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:wo),!!e.static,e.enables)}of(e){return new Vn([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Vn(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Vn(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function wo(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class Vn{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=Qo++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Cr(f,c)){let d=i(f);if(l?!Sl(d,f.values[o],s):!s(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,O=u.config.address[r];if(O!=null){let p=Jn(u,O);if(this.dependencies.every(g=>g instanceof T?u.facet(g)===f.facet(g):g instanceof pe?u.field(g,!1)==f.field(g,!1):!0)||(l?Sl(d=i(f),p,s):s(d=i(f),p)))return f.values[o]=p,0}else d=i(f);return f.values[o]=d,1}}}get extension(){return this}}function Sl(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),s=t.map(a=>a.type),r=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(xn).find(i=>i.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(xn),o=s.facet(xn),l;return(l=r.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,xn.of({field:this,create:e})]}get extension(){return this}}const Wt={lowest:4,low:3,default:2,high:1,highest:0};function vi(n){return e=>new Mh(e,n)}const At={highest:vi(Wt.highest),high:vi(Wt.high),default:vi(Wt.default),low:vi(Wt.low),lowest:vi(Wt.lowest)};class Mh{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class ws{of(e){return new Zr(this,e)}reconfigure(e){return ws.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Zr{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class Kn{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let u of id(e,t,o))u instanceof pe?s.push(u):(r[u.facet.id]||(r[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of s)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i==null?void 0:i.config.facets;for(let u in r){let d=r[u],O=d[0].facet,p=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[O.id]=a.length<<1|1,wo(p,d))a.push(i.facet(O));else{let g=O.combine(d.map(b=>b.value));a.push(i&&O.compare(g,i.facet(O))?i.facet(O):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(b=>g.dynamicSlot(b)));l[O.id]=h.length<<1,h.push(g=>td(g,O,d))}}let f=h.map(u=>u(l));return new Kn(e,o,f,l,a,r)}}function id(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,l){let a=s.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof Zr&&t.delete(o.compartment)}if(s.set(o,l),Array.isArray(o))for(let h of o)r(h,l);else if(o instanceof Zr){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),r(h,l)}else if(o instanceof Mh)r(o.inner,o.prec);else if(o instanceof pe)i[l].push(o),o.provides&&r(o.provides,l);else if(o instanceof Vn)i[l].push(o),o.facet.extensions&&r(o.facet.extensions,Wt.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}).`);if(h==o)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(h,l)}}return r(n,Wt.default),i.reduce((o,l)=>o.concat(l))}function Di(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Jn(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const Rh=T.define(),Ar=T.define({combine:n=>n.some(e=>e),static:!0}),Xh=T.define({combine:n=>n.length?n[0]:void 0,static:!0}),Lh=T.define(),Dh=T.define(),Eh=T.define(),Wh=T.define({combine:n=>n.length?n[0]:!1});class ct{constructor(e,t){this.type=e,this.value=t}static define(){return new nd}}class nd{of(e){return new ct(this,e)}}class sd{constructor(e){this.map=e}of(e){return new R(this,e)}}class R{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new R(this.type,t)}is(e){return this.type==e}static define(e={}){return new sd(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}R.reconfigure=R.define();R.appendConfig=R.define();class ne{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&Ah(i,t.newLength),r.some(l=>l.type==ne.time)||(this.annotations=r.concat(ne.time.of(Date.now())))}static create(e,t,i,s,r,o){return new ne(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(ne.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}ne.time=ct.define();ne.userEvent=ct.define();ne.addToHistory=ct.define();ne.remote=ct.define();function rd(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof ne?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof ne?n=r[0]:n=_h(e,ri(r),!1)}return n}function ld(n){let e=n.startState,t=e.facet(Eh),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=zh(i,Mr(e,r,n.changes.newLength),!0))}return i==n?n:ne.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const ad=[];function ri(n){return n==null?ad:Array.isArray(n)?n:[n]}var F=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(F||(F={}));const hd=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let Rr;try{Rr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function cd(n){if(Rr)return Rr.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||hd.test(t)))return!0}return!1}function fd(n){return e=>{if(!/\S/.test(e))return F.Space;if(cd(e))return F.Word;for(let t=0;t-1)return F.Word;return F.Other}}class _{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let l=0;ls.set(h,a)),t=null),s.set(l.value.compartment,l.value.extension)):l.is(R.reconfigure)?(t=null,i=l.value):l.is(R.appendConfig)&&(t=null,i=ri(i).concat(l.value));let r;t?r=e.startState.values.slice():(t=Kn.resolve(i,s,this),r=new _(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Ar)?e.newSelection:e.newSelection.asSingle();new _(t,e.newDoc,o,r,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:y.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=ri(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return _.create({doc:e.doc,selection:y.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=Kn.resolve(e.extensions||[],new Map),i=e.doc instanceof B?e.doc:B.of((e.doc||"").split(t.staticFacet(_.lineSeparator)||$r)),s=e.selection?e.selection instanceof y?e.selection:y.single(e.selection.anchor,e.selection.head):y.single(0);return Ah(s,i.length),t.staticFacet(Ar)||(s=s.asSingle()),new _(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(_.tabSize)}get lineBreak(){return this.facet(_.lineSeparator)||` diff --git a/adminui/assets/comments-DjqrWPF8.js b/adminui/assets/comments-BvXaQcCR.js similarity index 89% rename from adminui/assets/comments-DjqrWPF8.js rename to adminui/assets/comments-BvXaQcCR.js index 5201acab..cd51e6ee 100644 --- a/adminui/assets/comments-DjqrWPF8.js +++ b/adminui/assets/comments-BvXaQcCR.js @@ -1,4 +1,4 @@ -import{f as k,j as s}from"./vendor-react-j_G0Dyx0.js";import{u as oe}from"./use-url-state-BBO3na5E.js";import{a$ as ie,ci as re,bR as ce,c9 as le,c8 as me,ad as K,aa as de,i as g,L as ue,R as pe,M as he,N,ao as f,bK as i,aW as h}from"./index-EC_gIQIi.js";import{u as j}from"./useMutation-C9eWISs8.js";import{B as xe}from"./badge-BrOOeG4p.js";import{C as ge,a as fe}from"./card-BhczRj8d.js";import{C as L}from"./checkbox-C7H6TTIF.js";import{T as je,d as be,e as w,c as m,a as Se,b as l}from"./table-B0P46Gj-.js";import{A as O,c as U,f as H,g as I,d as R,e as V,b as $,a as W}from"./alert-dialog-BCjXQEnz.js";import{C as o}from"./types-C-xO67t8.js";import{P as ve}from"./pagination-bar-Dm-qkwNo.js";import{T as ye}from"./table-skeleton-CzRpAQZA.js";import{E as Ce}from"./empty-state-DSPTmRGJ.js";import{E as De}from"./ellipsis-vertical-29muOhpK.js";import{C as ke}from"./circle-check-big-Bv9fC9q8.js";import{C as Ne}from"./circle-x-h9c8HLLF.js";import{T as we}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-iV9lQKhJ.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./chevron-left-iG3CNZoG.js";/** +import{f as k,j as s}from"./vendor-react-j_G0Dyx0.js";import{u as oe}from"./use-url-state-BBO3na5E.js";import{a$ as ie,ci as re,bR as ce,c9 as le,c8 as me,ad as K,aa as de,i as g,L as ue,R as pe,M as he,N,ao as f,bK as i,aW as h}from"./index-C-i99XXF.js";import{u as j}from"./useMutation-CrSU7LrM.js";import{B as xe}from"./badge-BxazBb-3.js";import{C as ge,a as fe}from"./card-BwvuSgdv.js";import{C as L}from"./checkbox-COY1I8--.js";import{T as je,d as be,e as w,c as m,a as Se,b as l}from"./table-CCu_JPDD.js";import{A as O,c as U,f as H,g as I,d as R,e as V,b as $,a as W}from"./alert-dialog-CqlwlZ39.js";import{C as o}from"./types-C-xO67t8.js";import{P as ve}from"./pagination-bar-B67t1a6P.js";import{T as ye}from"./table-skeleton-W4NmdKYl.js";import{E as Ce}from"./empty-state-v8u5VqOl.js";import{E as De}from"./ellipsis-vertical-xZQpERB7.js";import{C as ke}from"./circle-check-big-DeL5JaWu.js";import{C as Ne}from"./circle-x-Dmohp54U.js";import{T as we}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-DsFJjVO2.js";import"./useRegisterFieldControl-BK92wKok.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./chevron-left-Dxx6wreE.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/content-types-BQ9hs0Sm.js b/adminui/assets/content-types-DILysgph.js similarity index 87% rename from adminui/assets/content-types-BQ9hs0Sm.js rename to adminui/assets/content-types-DILysgph.js index 163f680f..95a914ed 100644 --- a/adminui/assets/content-types-BQ9hs0Sm.js +++ b/adminui/assets/content-types-DILysgph.js @@ -1 +1 @@ -import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{ce as ee,ci as se,c9 as te,c8 as R,az as ne,aa as v,i as w,a9 as k,aq as oe,l as ae,k as re,L as ie,R as le,M as ce,N as d,O as de,Q as pe,P as me,ao as S,bK as u,aW as j,b3 as ue}from"./index-EC_gIQIi.js";import{u as K}from"./useMutation-C9eWISs8.js";import{u as xe}from"./use-url-state-BBO3na5E.js";import{L as he}from"./list-filter-BbdaGfbJ.js";import{B as Q}from"./badge-BrOOeG4p.js";import{C as b,a as A,c as fe,d as ge,b as ye}from"./card-BhczRj8d.js";import{A as je,c as Ne,f as Ce,g as Te,d as De,e as ve,b as we,a as ke}from"./alert-dialog-BCjXQEnz.js";import{d as Se,A as be,b as Ae,a as Pe}from"./api-config-sheet-DYpATUBp.js";import{P}from"./plus-BQJ6-Ehy.js";import{F as ze}from"./folder-open-Bfr94q9k.js";import{E as $e}from"./ellipsis-vertical-29muOhpK.js";import{S as Me}from"./shield-CHlu31na.js";import{L as Fe}from"./list-qSUwiUjh.js";import{P as Le}from"./pencil-9H2eFft0.js";import{D as qe}from"./download-krj7fN-F.js";import{T as Ee}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./input-D7bJWFUq.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./select-BSZ-0tY-.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./FormContext-Cvsbmzt5.js";import"./switch-DhX4UWWe.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./save-z_0HtvcE.js";import"./copy-Dc6vpmam.js";function N(l){return l.group?`${l.group}/${l.singular}`:l.singular}function Oe(l,t){return l||t("contentTypes.ungrouped")}function xs(){const l=ee(),{t}=se(),z=te(),[f,C]=x.useState(null),[_,B]=x.useState(new Set),{get:G,set:$}=xe(),g=G("keyword"),[H,T]=x.useState(!1),[p,I]=x.useState(null),[M,F]=x.useState(Se),D=R({queryKey:["content-types"],queryFn:()=>j.send("/admin/content-types")}),L=K({mutationFn:s=>j.admin.contentTypes.delete(s),onSuccess:()=>{u.success(t("contentTypes.contentTypeDeleted")),z.invalidateQueries({queryKey:["content-types"]})},onError:s=>{s instanceof S?u.error(s.message):u.error(t("contentTypes.failedToDelete"))}}),q=K({mutationFn:async()=>{p&&await j.admin.contentTypes.update(N(p),{api:Ae(M)})},onSuccess:()=>{u.success(t("contentTypes.apiSaved")),T(!1),z.invalidateQueries({queryKey:["content-types"]})},onError:s=>{u.error(s instanceof S?s.message:t("contentTypes.apiSaveFailed"))}});function U(s){I(s),F(Pe(s.api)),T(!0)}function V(s,o){s.preventDefault(),s.stopPropagation(),C(o)}async function y(s,o){try{const n=s.group?`${s.group}/${s.plural}`:s.plural,i=new Date().toISOString().slice(0,10),r=`${s.plural}-${i}.${o}`,{size:c}=await ue(`/admin/cms/${n}/export`,o,r);if(c===0){u.info(t("contentTypes.exportEmpty"));return}u.success(t("contentTypes.exportDataSuccess"))}catch(n){u.error(n instanceof S?n.message:t("contentTypes.exportDataFailed"))}}function J(){f&&(L.mutate(f),C(null))}function W(s){B(o=>{const n=new Set(o);return n.has(s)?n.delete(s):n.add(s),n})}const h=x.useMemo(()=>D.data??[],[D.data]),X=[{type:"search",key:"keyword",placeholder:t("contentTypes.searchTypes")}];function Y(s){$({keyword:s.keyword??""})}const E=x.useMemo(()=>{const s=g.trim().toLowerCase(),o=new Map;for(const n of h){if(s&&![n.name,n.singular,n.plural,n.table].join(" ").toLowerCase().includes(s))continue;const i=n.group||"",r=o.get(i)??[];r.push(n),o.set(i,r)}return[...o.entries()].sort((n,i)=>n[0]===""&&i[0]!==""?-1:n[0]!==""&&i[0]===""?1:n[0].localeCompare(i[0]))},[h,g]),Z=R({queryKey:["content-type-counts",h.map(s=>s.plural).join(",")],queryFn:async()=>{const s=new Map;return await Promise.all(h.map(async o=>{try{const n=o.group?`${o.group}/${o.plural}`:o.plural,i=await j.send(`/admin/cms/${n}`,{query:{page:"1",page_size:"1"}});s.set(N(o),i.total)}catch{s.set(N(o),0)}})),s},enabled:h.length>0});return D.isLoading?e.jsx("div",{className:"space-y-6",children:e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Array.from({length:3}).map((s,o)=>e.jsx(ne,{className:"h-32"},o))})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(he,{filters:X,values:{keyword:g},onChange:Y}),e.jsx(v,{href:"/content-types/builder",children:e.jsxs(w,{children:[e.jsx(P,{className:"size-4 me-1"}),t("contentTypes.createContentType")]})})]}),h.length===0?e.jsx(b,{children:e.jsxs(A,{className:"py-12 text-center space-y-4",children:[e.jsx(k,{className:"size-12 mx-auto text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium",children:t("contentTypes.noContentTypes")}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t("contentTypes.noContentTypesDesc")})]}),e.jsx(v,{href:"/content-types/builder",children:e.jsxs(w,{children:[e.jsx(P,{className:"size-4"}),t("contentTypes.createContentType")]})})]})}):E.length===0?e.jsx(b,{children:e.jsxs(A,{className:"py-12 text-center space-y-4",children:[e.jsx(oe,{className:"size-12 mx-auto text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium",children:t("contentTypes.noSearchResults")}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t("contentTypes.noSearchResultsDesc",{keyword:g})})]}),e.jsx(w,{variant:"outline",onClick:()=>$({keyword:""}),children:t("common.clear")})]})}):e.jsx("div",{className:"space-y-6 pb-6",children:E.map(([s,o])=>{const n=Oe(s,t),i=_.has(s);return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>W(s),className:"flex items-center gap-2 w-full hover:bg-muted/50 rounded-md px-2 py-2 transition-colors",children:[i?e.jsx(ae,{className:"size-4 text-muted-foreground"}):e.jsx(re,{className:"size-4 text-muted-foreground"}),s?e.jsx(ze,{className:"size-4 text-muted-foreground"}):e.jsx(k,{className:"size-4 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-semibold",children:n}),e.jsx(Q,{variant:"secondary",className:"text-xs",children:o.length})]}),!i&&e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 pt-2",children:o.map(r=>{var O;const c=N(r),m=r.color&&/^#[0-9a-fA-F]{6}$/.test(r.color)?r.color:null;return e.jsx(v,{href:`/content-types/${c}`,children:e.jsxs(b,{className:"hover:-translate-y-0.5 hover:shadow-md transition-all cursor-pointer h-full group",style:m?{backgroundColor:`${m}0D`,"--tw-ring-color":`${m}59`}:void 0,children:[e.jsxs(fe,{className:"flex-1 flex! flex-col",children:[e.jsxs("div",{className:"flex w-full items-center gap-2",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg",style:m?{backgroundColor:`${m}1A`,color:m}:void 0,children:e.jsx(k,{className:"size-5"})}),e.jsx(ge,{className:"truncate",style:m?{color:m}:void 0,children:r.name})]}),e.jsx("div",{className:"shrink-0",children:e.jsxs(ie,{children:[e.jsx(le,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",onClick:a=>{a.stopPropagation(),a.preventDefault()},children:e.jsx($e,{className:"size-4"})}),e.jsxs(ce,{align:"end",children:[e.jsxs(d,{onClick:a=>{a.stopPropagation(),U(r)},children:[e.jsx(Me,{className:"size-4 me-2"}),t("contentTypes.api")]}),e.jsxs(d,{onClick:a=>{a.stopPropagation(),l.push(`/content-types/${c}/new`)},children:[e.jsx(P,{className:"size-4 me-2"}),t("contentTypes.addRecord")]}),e.jsxs(d,{onClick:a=>{a.stopPropagation(),l.push(`/content-types/${c}`)},children:[e.jsx(Fe,{className:"size-4 me-2"}),t("contentTypes.browseRecords")]}),e.jsxs(d,{onClick:a=>{a.stopPropagation(),l.push(`/content-types/builder?edit=${c}`)},children:[e.jsx(Le,{className:"size-4 me-2"}),t("common.edit")]}),e.jsxs(de,{children:[e.jsxs(pe,{onClick:a=>a.stopPropagation(),children:[e.jsx(qe,{className:"size-4 me-2"}),t("contentTypes.exportData")]}),e.jsxs(me,{children:[e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"sql")},children:"SQL"}),e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"json")},children:"JSON"}),e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"csv")},children:"CSV"}),e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"xlsx")},children:"Excel"})]})]}),e.jsxs(d,{className:"text-destructive",onClick:a=>V(a,c),disabled:L.isPending,children:[e.jsx(Ee,{className:"size-4 me-2"}),t("common.delete")]})]})]})})]}),e.jsx(ye,{className:"flex-1 min-h-0 line-clamp-3",children:r.description||" "})]}),e.jsx(A,{children:e.jsxs("div",{className:"flex items-center justify-between text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsxs(Q,{variant:"secondary",className:"text-[10px] font-normal px-1.5 shrink-0",children:[r.fields.length," ",t("contentTypes.fieldsLabel")]}),e.jsx("span",{className:"font-mono text-xs truncate",children:r.table})]}),e.jsx("span",{className:"shrink-0",children:t("contentTypes.totalRecords",{count:((O=Z.data)==null?void 0:O.get(c))??"—"})})]})})]})},c)})})]},s||"__ungrouped__")})})]}),e.jsx(je,{open:!!f,onOpenChange:s=>{s||C(null)},children:e.jsxs(Ne,{children:[e.jsxs(Ce,{children:[e.jsx(Te,{children:t("common.confirmDeleteTitle")}),e.jsx(De,{children:t("contentTypes.confirmDelete",{singular:f??""})})]}),e.jsxs(ve,{children:[e.jsx(we,{children:t("common.cancel")}),e.jsx(ke,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:J,children:t("common.delete")})]})]})}),e.jsx(be,{open:H,onOpenChange:T,api:M,onChange:F,plural:(p==null?void 0:p.plural)??"",group:(p==null?void 0:p.group)??"",onSave:q.mutateAsync,saving:q.isPending})]})}export{xs as default}; +import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{ce as ee,ci as se,c9 as te,c8 as R,az as ne,aa as v,i as w,a9 as k,aq as oe,l as ae,k as re,L as ie,R as le,M as ce,N as d,O as de,Q as pe,P as me,ao as S,bK as u,aW as j,b3 as ue}from"./index-C-i99XXF.js";import{u as K}from"./useMutation-CrSU7LrM.js";import{u as xe}from"./use-url-state-BBO3na5E.js";import{L as he}from"./list-filter-B4W1P91H.js";import{B as Q}from"./badge-BxazBb-3.js";import{C as b,a as A,c as fe,d as ge,b as ye}from"./card-BwvuSgdv.js";import{A as je,c as Ne,f as Ce,g as Te,d as De,e as ve,b as we,a as ke}from"./alert-dialog-CqlwlZ39.js";import{d as Se,A as be,b as Ae,a as Pe}from"./api-config-sheet-BK_N5Tdt.js";import{P}from"./plus-CwjdK202.js";import{F as ze}from"./folder-open-CvTrdI2M.js";import{E as $e}from"./ellipsis-vertical-xZQpERB7.js";import{S as Me}from"./shield-Whu99Qe6.js";import{L as Fe}from"./list-BlZqMnAk.js";import{P as Le}from"./pencil-BzoosANP.js";import{D as qe}from"./download-mMzV19JZ.js";import{T as Ee}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./input-CX4DHDvW.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./select-C7HHvgkd.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./FormContext-B5vgnUQy.js";import"./switch-0loFRSXw.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./save-LpbBFCdm.js";import"./copy-BNjpvh3F.js";function N(l){return l.group?`${l.group}/${l.singular}`:l.singular}function Oe(l,t){return l||t("contentTypes.ungrouped")}function xs(){const l=ee(),{t}=se(),z=te(),[f,C]=x.useState(null),[_,B]=x.useState(new Set),{get:G,set:$}=xe(),g=G("keyword"),[H,T]=x.useState(!1),[p,I]=x.useState(null),[M,F]=x.useState(Se),D=R({queryKey:["content-types"],queryFn:()=>j.send("/admin/content-types")}),L=K({mutationFn:s=>j.admin.contentTypes.delete(s),onSuccess:()=>{u.success(t("contentTypes.contentTypeDeleted")),z.invalidateQueries({queryKey:["content-types"]})},onError:s=>{s instanceof S?u.error(s.message):u.error(t("contentTypes.failedToDelete"))}}),q=K({mutationFn:async()=>{p&&await j.admin.contentTypes.update(N(p),{api:Ae(M)})},onSuccess:()=>{u.success(t("contentTypes.apiSaved")),T(!1),z.invalidateQueries({queryKey:["content-types"]})},onError:s=>{u.error(s instanceof S?s.message:t("contentTypes.apiSaveFailed"))}});function U(s){I(s),F(Pe(s.api)),T(!0)}function V(s,o){s.preventDefault(),s.stopPropagation(),C(o)}async function y(s,o){try{const n=s.group?`${s.group}/${s.plural}`:s.plural,i=new Date().toISOString().slice(0,10),r=`${s.plural}-${i}.${o}`,{size:c}=await ue(`/admin/cms/${n}/export`,o,r);if(c===0){u.info(t("contentTypes.exportEmpty"));return}u.success(t("contentTypes.exportDataSuccess"))}catch(n){u.error(n instanceof S?n.message:t("contentTypes.exportDataFailed"))}}function J(){f&&(L.mutate(f),C(null))}function W(s){B(o=>{const n=new Set(o);return n.has(s)?n.delete(s):n.add(s),n})}const h=x.useMemo(()=>D.data??[],[D.data]),X=[{type:"search",key:"keyword",placeholder:t("contentTypes.searchTypes")}];function Y(s){$({keyword:s.keyword??""})}const E=x.useMemo(()=>{const s=g.trim().toLowerCase(),o=new Map;for(const n of h){if(s&&![n.name,n.singular,n.plural,n.table].join(" ").toLowerCase().includes(s))continue;const i=n.group||"",r=o.get(i)??[];r.push(n),o.set(i,r)}return[...o.entries()].sort((n,i)=>n[0]===""&&i[0]!==""?-1:n[0]!==""&&i[0]===""?1:n[0].localeCompare(i[0]))},[h,g]),Z=R({queryKey:["content-type-counts",h.map(s=>s.plural).join(",")],queryFn:async()=>{const s=new Map;return await Promise.all(h.map(async o=>{try{const n=o.group?`${o.group}/${o.plural}`:o.plural,i=await j.send(`/admin/cms/${n}`,{query:{page:"1",page_size:"1"}});s.set(N(o),i.total)}catch{s.set(N(o),0)}})),s},enabled:h.length>0});return D.isLoading?e.jsx("div",{className:"space-y-6",children:e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Array.from({length:3}).map((s,o)=>e.jsx(ne,{className:"h-32"},o))})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsx(he,{filters:X,values:{keyword:g},onChange:Y}),e.jsx(v,{href:"/content-types/builder",children:e.jsxs(w,{children:[e.jsx(P,{className:"size-4 me-1"}),t("contentTypes.createContentType")]})})]}),h.length===0?e.jsx(b,{children:e.jsxs(A,{className:"py-12 text-center space-y-4",children:[e.jsx(k,{className:"size-12 mx-auto text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium",children:t("contentTypes.noContentTypes")}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t("contentTypes.noContentTypesDesc")})]}),e.jsx(v,{href:"/content-types/builder",children:e.jsxs(w,{children:[e.jsx(P,{className:"size-4"}),t("contentTypes.createContentType")]})})]})}):E.length===0?e.jsx(b,{children:e.jsxs(A,{className:"py-12 text-center space-y-4",children:[e.jsx(oe,{className:"size-12 mx-auto text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium",children:t("contentTypes.noSearchResults")}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t("contentTypes.noSearchResultsDesc",{keyword:g})})]}),e.jsx(w,{variant:"outline",onClick:()=>$({keyword:""}),children:t("common.clear")})]})}):e.jsx("div",{className:"space-y-6 pb-6",children:E.map(([s,o])=>{const n=Oe(s,t),i=_.has(s);return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>W(s),className:"flex items-center gap-2 w-full hover:bg-muted/50 rounded-md px-2 py-2 transition-colors",children:[i?e.jsx(ae,{className:"size-4 text-muted-foreground"}):e.jsx(re,{className:"size-4 text-muted-foreground"}),s?e.jsx(ze,{className:"size-4 text-muted-foreground"}):e.jsx(k,{className:"size-4 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-semibold",children:n}),e.jsx(Q,{variant:"secondary",className:"text-xs",children:o.length})]}),!i&&e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 pt-2",children:o.map(r=>{var O;const c=N(r),m=r.color&&/^#[0-9a-fA-F]{6}$/.test(r.color)?r.color:null;return e.jsx(v,{href:`/content-types/${c}`,children:e.jsxs(b,{className:"hover:-translate-y-0.5 hover:shadow-md transition-all cursor-pointer h-full group",style:m?{backgroundColor:`${m}0D`,"--tw-ring-color":`${m}59`}:void 0,children:[e.jsxs(fe,{className:"flex-1 flex! flex-col",children:[e.jsxs("div",{className:"flex w-full items-center gap-2",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg",style:m?{backgroundColor:`${m}1A`,color:m}:void 0,children:e.jsx(k,{className:"size-5"})}),e.jsx(ge,{className:"truncate",style:m?{color:m}:void 0,children:r.name})]}),e.jsx("div",{className:"shrink-0",children:e.jsxs(ie,{children:[e.jsx(le,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",onClick:a=>{a.stopPropagation(),a.preventDefault()},children:e.jsx($e,{className:"size-4"})}),e.jsxs(ce,{align:"end",children:[e.jsxs(d,{onClick:a=>{a.stopPropagation(),U(r)},children:[e.jsx(Me,{className:"size-4 me-2"}),t("contentTypes.api")]}),e.jsxs(d,{onClick:a=>{a.stopPropagation(),l.push(`/content-types/${c}/new`)},children:[e.jsx(P,{className:"size-4 me-2"}),t("contentTypes.addRecord")]}),e.jsxs(d,{onClick:a=>{a.stopPropagation(),l.push(`/content-types/${c}`)},children:[e.jsx(Fe,{className:"size-4 me-2"}),t("contentTypes.browseRecords")]}),e.jsxs(d,{onClick:a=>{a.stopPropagation(),l.push(`/content-types/builder?edit=${c}`)},children:[e.jsx(Le,{className:"size-4 me-2"}),t("common.edit")]}),e.jsxs(de,{children:[e.jsxs(pe,{onClick:a=>a.stopPropagation(),children:[e.jsx(qe,{className:"size-4 me-2"}),t("contentTypes.exportData")]}),e.jsxs(me,{children:[e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"sql")},children:"SQL"}),e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"json")},children:"JSON"}),e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"csv")},children:"CSV"}),e.jsx(d,{onClick:a=>{a.stopPropagation(),y(r,"xlsx")},children:"Excel"})]})]}),e.jsxs(d,{className:"text-destructive",onClick:a=>V(a,c),disabled:L.isPending,children:[e.jsx(Ee,{className:"size-4 me-2"}),t("common.delete")]})]})]})})]}),e.jsx(ye,{className:"flex-1 min-h-0 line-clamp-3",children:r.description||" "})]}),e.jsx(A,{children:e.jsxs("div",{className:"flex items-center justify-between text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsxs(Q,{variant:"secondary",className:"text-[10px] font-normal px-1.5 shrink-0",children:[r.fields.length," ",t("contentTypes.fieldsLabel")]}),e.jsx("span",{className:"font-mono text-xs truncate",children:r.table})]}),e.jsx("span",{className:"shrink-0",children:t("contentTypes.totalRecords",{count:((O=Z.data)==null?void 0:O.get(c))??"—"})})]})})]})},c)})})]},s||"__ungrouped__")})})]}),e.jsx(je,{open:!!f,onOpenChange:s=>{s||C(null)},children:e.jsxs(Ne,{children:[e.jsxs(Ce,{children:[e.jsx(Te,{children:t("common.confirmDeleteTitle")}),e.jsx(De,{children:t("contentTypes.confirmDelete",{singular:f??""})})]}),e.jsxs(ve,{children:[e.jsx(we,{children:t("common.cancel")}),e.jsx(ke,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:J,children:t("common.delete")})]})]})}),e.jsx(be,{open:H,onOpenChange:T,api:M,onChange:F,plural:(p==null?void 0:p.plural)??"",group:(p==null?void 0:p.group)??"",onSave:q.mutateAsync,saving:q.isPending})]})}export{xs as default}; diff --git a/adminui/assets/content-types-builder-Bf6GI96D.js b/adminui/assets/content-types-builder-eSlZrngY.js similarity index 95% rename from adminui/assets/content-types-builder-Bf6GI96D.js rename to adminui/assets/content-types-builder-eSlZrngY.js index a59b71a2..007a31df 100644 --- a/adminui/assets/content-types-builder-Bf6GI96D.js +++ b/adminui/assets/content-types-builder-eSlZrngY.js @@ -1,4 +1,4 @@ -import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as S,ci as $,ce as _e,cf as Ce,c9 as ke,c8 as Se,a9 as we,k as Te,i as C,aQ as Me,X as qe,o as De,a4 as Fe,ar as Ae,as as Oe,av as ze,aw as $e,at as Le,ao as W,bK as _,aW as B,aG as ie,aE as ne,aH as re,aF as oe,aX as Pe,ai as Ee,ak as Ie,aj as Re,aq as Be}from"./index-EC_gIQIi.js";import{u as ce}from"./useMutation-C9eWISs8.js";import{C as X,c as Y,d as Z,a as U}from"./card-BhczRj8d.js";import{I as v}from"./input-D7bJWFUq.js";import{L as y}from"./label-BNi6V6qj.js";import{T as He}from"./textarea-CxSwwTO9.js";import{S as Qe,e as Ve,f as Ge,a as Ke,c as H}from"./select-BSZ-0tY-.js";import{D as We,a as Je,d as Xe,e as Ye,b as Ze}from"./dialog-BvqDo2CN.js";import{S as M}from"./separator-CYWP0N8k.js";import{A as Ue,c as et,f as tt,g as at,d as st,e as lt,b as it,a as nt}from"./alert-dialog-BCjXQEnz.js";import{B as A}from"./badge-BrOOeG4p.js";import{C as w}from"./checkbox-C7H6TTIF.js";import{S as rt}from"./save-status-DA0tvKRp.js";import{M as ot}from"./types-C-xO67t8.js";import{d as ct,a as dt,A as mt,b as J,C as ut}from"./api-config-sheet-DYpATUBp.js";import{b as V,T as pt,k as Q,F as xt,c as ht}from"./media-utils-Bk0fYNzf.js";import{C as gt}from"./chevron-up-nN7PIzPd.js";import{P as de}from"./plus-BQJ6-Ehy.js";import{C as ft,L as yt}from"./link-C8_P29JW.js";import{S as bt}from"./shield-CHlu31na.js";import{S as jt}from"./save-z_0HtvcE.js";import{L as vt}from"./lock-CT7oh3Ri.js";import{D as Nt}from"./dollar-sign-D3xsZw5z.js";import{T as _t}from"./trending-up-Dxn5YkG1.js";import{C as Ct}from"./calendar-BVDFi2CJ.js";import{L as kt}from"./list-qSUwiUjh.js";import{C as St}from"./check-iV9lQKhJ.js";import{C as wt}from"./copy-Dc6vpmam.js";import{T as Tt}from"./trash-2-g-gZl4Oc.js";import{F as Mt}from"./file-C64ivkyc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./circle-alert-0_MkNfwO.js";import"./switch-DhX4UWWe.js";import"./archive-CN6ChZbz.js";/** +import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as S,ci as $,ce as _e,cf as Ce,c9 as ke,c8 as Se,a9 as we,k as Te,i as C,aQ as Me,X as qe,o as De,a4 as Fe,ar as Ae,as as Oe,av as ze,aw as $e,at as Le,ao as W,bK as _,aW as B,aG as ie,aE as ne,aH as re,aF as oe,aX as Pe,ai as Ee,ak as Ie,aj as Re,aq as Be}from"./index-C-i99XXF.js";import{u as ce}from"./useMutation-CrSU7LrM.js";import{C as X,c as Y,d as Z,a as U}from"./card-BwvuSgdv.js";import{I as v}from"./input-CX4DHDvW.js";import{L as y}from"./label-YdsyMzds.js";import{T as He}from"./textarea-DxF_RMjI.js";import{S as Qe,e as Ve,f as Ge,a as Ke,c as H}from"./select-C7HHvgkd.js";import{D as We,a as Je,d as Xe,e as Ye,b as Ze}from"./dialog-8LyJX3or.js";import{S as M}from"./separator-BbBsCOyd.js";import{A as Ue,c as et,f as tt,g as at,d as st,e as lt,b as it,a as nt}from"./alert-dialog-CqlwlZ39.js";import{B as A}from"./badge-BxazBb-3.js";import{C as w}from"./checkbox-COY1I8--.js";import{S as rt}from"./save-status-Blflq74K.js";import{M as ot}from"./types-C-xO67t8.js";import{d as ct,a as dt,A as mt,b as J,C as ut}from"./api-config-sheet-BK_N5Tdt.js";import{b as V,T as pt,k as Q,F as xt,c as ht}from"./media-utils-Dl5crNGr.js";import{C as gt}from"./chevron-up-F9cYTMff.js";import{P as de}from"./plus-CwjdK202.js";import{C as ft,L as yt}from"./link-CrjG9QDb.js";import{S as bt}from"./shield-Whu99Qe6.js";import{S as jt}from"./save-LpbBFCdm.js";import{L as vt}from"./lock-BGNDkCgL.js";import{D as Nt}from"./dollar-sign-CHi9stcd.js";import{T as _t}from"./trending-up-D4uytIMO.js";import{C as Ct}from"./calendar-Clkjlc7K.js";import{L as kt}from"./list-BlZqMnAk.js";import{C as St}from"./check-DsFJjVO2.js";import{C as wt}from"./copy-BNjpvh3F.js";import{T as Tt}from"./trash-2-Cxpx5avJ.js";import{F as Mt}from"./file-CwTg0Lel.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./circle-alert-BhGUNGA_.js";import"./switch-0loFRSXw.js";import"./archive-DbNEUzmX.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/content-types-edit-BjRl11pz.js b/adminui/assets/content-types-edit-kZwcjzpq.js similarity index 77% rename from adminui/assets/content-types-edit-BjRl11pz.js rename to adminui/assets/content-types-edit-kZwcjzpq.js index 8f1daaaa..f341e59f 100644 --- a/adminui/assets/content-types-edit-BjRl11pz.js +++ b/adminui/assets/content-types-edit-kZwcjzpq.js @@ -1 +1 @@ -import{k as K,f as u,j as e}from"./vendor-react-j_G0Dyx0.js";import{ce as R,ci as z,c8 as C,az as F,aa as B,i as $,ao as I,bK as f,aW as h}from"./index-EC_gIQIi.js";import{u as M}from"./useMutation-C9eWISs8.js";import{C as k,a as E}from"./card-BhczRj8d.js";import{B as O}from"./badge-BrOOeG4p.js";import{L as Q}from"./label-BNi6V6qj.js";import{S as J,e as V,f as U,a as W,c as x}from"./select-BSZ-0tY-.js";import{b as m}from"./types-C-xO67t8.js";import{a as A,h as G,c as H}from"./field-renderer-7U0JEnRX.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./FormContext-Cvsbmzt5.js";import"./input-D7bJWFUq.js";import"./textarea-CxSwwTO9.js";import"./multi-media-upload-C_rG1LSF.js";import"./vendor-md-editor-C0GoXAL0.js";import"./dialog-BvqDo2CN.js";import"./media-utils-Bk0fYNzf.js";import"./archive-CN6ChZbz.js";import"./file-C64ivkyc.js";import"./link-C8_P29JW.js";import"./list-qSUwiUjh.js";import"./chevron-left-iG3CNZoG.js";import"./upload-DGewhSDK.js";import"./grip-vertical-CK5uDx11.js";import"./arrow-right-qNysmirn.js";import"./download-krj7fN-F.js";function P(i){return i.fields.filter(n=>!(n.private||n.name==="id"||n.name==="status"||n.name==="created_at"||n.name==="updated_at"))}function ke(){const i=K(),n=i.group?`${i.group}/${i.singular}`:i.ctPath??"",l=i.id??"",q=R(),{t:r}=z(),g=C({queryKey:["content-type",n],queryFn:()=>h.send(`/admin/content-types/${n}`)}),s=g.data,j=C({queryKey:["cms-item",s==null?void 0:s.plural,l],queryFn:()=>{if(!s)return null;const t=s.group?`${s.group}/${s.plural}`:s.plural;return h.send(`/admin/cms/${t}/${l}`)},enabled:!!s&&!!l}),d=j.data,[o,y]=u.useState({}),[w,v]=u.useState({}),[b,L]=u.useState(!1);u.useEffect(()=>{if(d&&!b){L(!0);const t={};for(const[a,c]of Object.entries(d))a!=="id"&&a!=="created_at"&&a!=="updated_at"&&(t[a]=c);y(t)}},[d,b]);const p=M({mutationFn:t=>{const a=s.group?`${s.group}/${s.plural}`:s.plural;return h.adminCt(a).update(l,t)},onSuccess:()=>{f.success(r("common.updated",{name:s.name})),q.push(`/content-types/${n}`)},onError:t=>{t instanceof I?f.error(t.message):f.error(r("common.failedToUpdate",{name:s.name}))}});function N(t,a){y(c=>({...c,[t]:a})),v(c=>{const S={...c};return delete S[t],S})}function T(){if(!s)return!1;const t={};for(const a of P(s))if(a.required&&(o[a.name]==null||o[a.name]==="")&&(t[a.name]=r("common.isRequired",{field:H(a)})),a.field_type==="json"&&o[a.name]&&typeof o[a.name]=="string")try{JSON.parse(o[a.name])}catch{t[a.name]=r("common.invalidJson")}return v(t),Object.keys(t).length===0}function _(t){t.preventDefault(),T()&&p.mutate(o)}const D=s?P(s):[];return g.isLoading||j.isLoading?e.jsxs("div",{className:"space-y-6",children:[e.jsx(F,{className:"h-8 w-32"}),e.jsx(F,{className:"h-64 w-full"})]}):!s||!d?e.jsx("div",{className:"space-y-6",children:e.jsx(k,{children:e.jsx(E,{className:"py-8 text-center text-muted-foreground",children:s?r("contentTypes.itemNotFound"):r("contentTypes.notFoundMsg",{singular:n})})})}):e.jsxs("div",{className:"space-y-6 -m-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 px-6 pt-6",children:[s.group&&e.jsx(O,{variant:"secondary",children:s.group}),e.jsx("span",{className:"font-medium",children:s.name}),s.description&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:["·"," ",s.description]})]}),e.jsxs("form",{onSubmit:_,className:"space-y-6 p-6 pt-0",children:[e.jsx(k,{children:e.jsxs(E,{className:"pt-6 space-y-5",children:[D.map(t=>e.jsx(A,{field:t,value:o[t.name],onChange:a=>N(t.name,a),error:w[t.name]},t.name)),G(s,"statusable")&&e.jsxs("div",{className:"grid grid-cols-1 gap-x-6 sm:grid-cols-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1.5 sm:col-span-2",children:[e.jsx(Q,{children:r("common.status")}),e.jsxs(J,{value:o.status||m.draft,onValueChange:t=>{t&&N("status",t)},items:{[m.draft]:r("common.draft"),[m.published]:r("common.published"),archived:r("common.archived")},children:[e.jsx(V,{className:"w-full",children:e.jsx(U,{placeholder:r("common.selectStatus")})}),e.jsxs(W,{children:[e.jsx(x,{value:m.draft,children:r("common.draft")}),e.jsx(x,{value:m.published,children:r("common.published")}),e.jsx(x,{value:"archived",children:r("common.archived")})]})]})]}),e.jsx("div",{className:"hidden sm:block pt-[30px]"})]})]})}),e.jsxs("div",{className:"sticky bottom-0 flex items-center justify-end gap-3 border-t bg-background/95 px-6 py-3 backdrop-blur",children:[e.jsx(B,{href:`/content-types/${n}`,children:e.jsx($,{type:"button",variant:"outline",children:r("common.cancel")})}),e.jsx($,{type:"submit",disabled:p.isPending,children:p.isPending?r("common.saving"):r("posts.saveChanges")})]})]})]})}export{ke as default}; +import{k as K,f as u,j as e}from"./vendor-react-j_G0Dyx0.js";import{ce as R,ci as z,c8 as C,az as F,aa as B,i as $,ao as I,bK as f,aW as h}from"./index-C-i99XXF.js";import{u as M}from"./useMutation-CrSU7LrM.js";import{C as k,a as E}from"./card-BwvuSgdv.js";import{B as O}from"./badge-BxazBb-3.js";import{L as Q}from"./label-YdsyMzds.js";import{S as J,e as V,f as U,a as W,c as x}from"./select-C7HHvgkd.js";import{b as m}from"./types-C-xO67t8.js";import{a as A,h as G,c as H}from"./field-renderer-BCQDmn_5.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./FormContext-B5vgnUQy.js";import"./input-CX4DHDvW.js";import"./textarea-DxF_RMjI.js";import"./multi-media-upload-_Ew8n5h0.js";import"./vendor-md-editor-C0GoXAL0.js";import"./dialog-8LyJX3or.js";import"./media-utils-Dl5crNGr.js";import"./archive-DbNEUzmX.js";import"./file-CwTg0Lel.js";import"./link-CrjG9QDb.js";import"./list-BlZqMnAk.js";import"./chevron-left-Dxx6wreE.js";import"./upload-InJCWqAU.js";import"./grip-vertical-B_S2B2GU.js";import"./arrow-right-BJVZqhFR.js";import"./download-mMzV19JZ.js";function P(i){return i.fields.filter(n=>!(n.private||n.name==="id"||n.name==="status"||n.name==="created_at"||n.name==="updated_at"))}function ke(){const i=K(),n=i.group?`${i.group}/${i.singular}`:i.ctPath??"",l=i.id??"",q=R(),{t:r}=z(),g=C({queryKey:["content-type",n],queryFn:()=>h.send(`/admin/content-types/${n}`)}),s=g.data,j=C({queryKey:["cms-item",s==null?void 0:s.plural,l],queryFn:()=>{if(!s)return null;const t=s.group?`${s.group}/${s.plural}`:s.plural;return h.send(`/admin/cms/${t}/${l}`)},enabled:!!s&&!!l}),d=j.data,[o,y]=u.useState({}),[w,v]=u.useState({}),[b,L]=u.useState(!1);u.useEffect(()=>{if(d&&!b){L(!0);const t={};for(const[a,c]of Object.entries(d))a!=="id"&&a!=="created_at"&&a!=="updated_at"&&(t[a]=c);y(t)}},[d,b]);const p=M({mutationFn:t=>{const a=s.group?`${s.group}/${s.plural}`:s.plural;return h.adminCt(a).update(l,t)},onSuccess:()=>{f.success(r("common.updated",{name:s.name})),q.push(`/content-types/${n}`)},onError:t=>{t instanceof I?f.error(t.message):f.error(r("common.failedToUpdate",{name:s.name}))}});function N(t,a){y(c=>({...c,[t]:a})),v(c=>{const S={...c};return delete S[t],S})}function T(){if(!s)return!1;const t={};for(const a of P(s))if(a.required&&(o[a.name]==null||o[a.name]==="")&&(t[a.name]=r("common.isRequired",{field:H(a)})),a.field_type==="json"&&o[a.name]&&typeof o[a.name]=="string")try{JSON.parse(o[a.name])}catch{t[a.name]=r("common.invalidJson")}return v(t),Object.keys(t).length===0}function _(t){t.preventDefault(),T()&&p.mutate(o)}const D=s?P(s):[];return g.isLoading||j.isLoading?e.jsxs("div",{className:"space-y-6",children:[e.jsx(F,{className:"h-8 w-32"}),e.jsx(F,{className:"h-64 w-full"})]}):!s||!d?e.jsx("div",{className:"space-y-6",children:e.jsx(k,{children:e.jsx(E,{className:"py-8 text-center text-muted-foreground",children:s?r("contentTypes.itemNotFound"):r("contentTypes.notFoundMsg",{singular:n})})})}):e.jsxs("div",{className:"space-y-6 -m-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 px-6 pt-6",children:[s.group&&e.jsx(O,{variant:"secondary",children:s.group}),e.jsx("span",{className:"font-medium",children:s.name}),s.description&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:["·"," ",s.description]})]}),e.jsxs("form",{onSubmit:_,className:"space-y-6 p-6 pt-0",children:[e.jsx(k,{children:e.jsxs(E,{className:"pt-6 space-y-5",children:[D.map(t=>e.jsx(A,{field:t,value:o[t.name],onChange:a=>N(t.name,a),error:w[t.name]},t.name)),G(s,"statusable")&&e.jsxs("div",{className:"grid grid-cols-1 gap-x-6 sm:grid-cols-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1.5 sm:col-span-2",children:[e.jsx(Q,{children:r("common.status")}),e.jsxs(J,{value:o.status||m.draft,onValueChange:t=>{t&&N("status",t)},items:{[m.draft]:r("common.draft"),[m.published]:r("common.published"),archived:r("common.archived")},children:[e.jsx(V,{className:"w-full",children:e.jsx(U,{placeholder:r("common.selectStatus")})}),e.jsxs(W,{children:[e.jsx(x,{value:m.draft,children:r("common.draft")}),e.jsx(x,{value:m.published,children:r("common.published")}),e.jsx(x,{value:"archived",children:r("common.archived")})]})]})]}),e.jsx("div",{className:"hidden sm:block pt-[30px]"})]})]})}),e.jsxs("div",{className:"sticky bottom-0 flex items-center justify-end gap-3 border-t bg-background/95 px-6 py-3 backdrop-blur",children:[e.jsx(B,{href:`/content-types/${n}`,children:e.jsx($,{type:"button",variant:"outline",children:r("common.cancel")})}),e.jsx($,{type:"submit",disabled:p.isPending,children:p.isPending?r("common.saving"):r("posts.saveChanges")})]})]})]})}export{ke as default}; diff --git a/adminui/assets/content-types-list-UjKS0R8F.js b/adminui/assets/content-types-list-iPgaOFXk.js similarity index 85% rename from adminui/assets/content-types-list-UjKS0R8F.js rename to adminui/assets/content-types-list-iPgaOFXk.js index edc2528c..8d7fc0d6 100644 --- a/adminui/assets/content-types-list-UjKS0R8F.js +++ b/adminui/assets/content-types-list-iPgaOFXk.js @@ -1,4 +1,4 @@ -import{k as Qe,f as l,j as t}from"./vendor-react-j_G0Dyx0.js";import{u as Be}from"./use-url-state-BBO3na5E.js";import{a$ as Re,ci as Ue,ce as He,c9 as Ve,c8 as ae,az as ie,L as O,R as Q,i as j,M as B,N as p,aa as ce,k as Je,a9 as We,ao as k,bK as i,aW as C,b6 as Ge,b4 as Xe,b5 as Ye,bN as Ze}from"./index-EC_gIQIi.js";import{u as w}from"./useMutation-C9eWISs8.js";import{C as le,a as de}from"./card-BhczRj8d.js";import{C as pe}from"./checkbox-C7H6TTIF.js";import{T as et}from"./table-skeleton-CzRpAQZA.js";import{P as tt}from"./pagination-bar-Dm-qkwNo.js";import{T as st,d as nt,e as R,c as U,a as rt,b as $}from"./table-B0P46Gj-.js";import{A as me,c as ue,f as xe,g as fe,d as he,e as ge,b as je,a as ye}from"./alert-dialog-BCjXQEnz.js";import{b as Se}from"./types-C-xO67t8.js";import{L as ot}from"./list-filter-BbdaGfbJ.js";import{g as at,h as Te,b as Ce,F as it,c as ct}from"./field-renderer-7U0JEnRX.js";import{E as lt}from"./empty-state-DSPTmRGJ.js";import{d as dt,A as pt,b as mt,a as ut}from"./api-config-sheet-DYpATUBp.js";import{D as xt}from"./download-krj7fN-F.js";import{T as be}from"./trash-2-g-gZl4Oc.js";import{U as ft}from"./upload-DGewhSDK.js";import{S as ht}from"./shield-CHlu31na.js";import{P as gt}from"./plus-BQJ6-Ehy.js";import{C as jt}from"./chevron-up-nN7PIzPd.js";import{E as yt}from"./ellipsis-vertical-29muOhpK.js";import{P as St}from"./pencil-9H2eFft0.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-iV9lQKhJ.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./chevron-left-iG3CNZoG.js";import"./input-D7bJWFUq.js";import"./useLabelableId-CBddAn5B.js";import"./select-BSZ-0tY-.js";import"./textarea-CxSwwTO9.js";import"./label-BNi6V6qj.js";import"./badge-BrOOeG4p.js";import"./multi-media-upload-C_rG1LSF.js";import"./vendor-md-editor-C0GoXAL0.js";import"./dialog-BvqDo2CN.js";import"./media-utils-Bk0fYNzf.js";import"./archive-CN6ChZbz.js";import"./file-C64ivkyc.js";import"./link-C8_P29JW.js";import"./list-qSUwiUjh.js";import"./grip-vertical-CK5uDx11.js";import"./arrow-right-qNysmirn.js";import"./switch-DhX4UWWe.js";import"./save-z_0HtvcE.js";import"./copy-Dc6vpmam.js";/** +import{k as Qe,f as l,j as t}from"./vendor-react-j_G0Dyx0.js";import{u as Be}from"./use-url-state-BBO3na5E.js";import{a$ as Re,ci as Ue,ce as He,c9 as Ve,c8 as ae,az as ie,L as O,R as Q,i as j,M as B,N as p,aa as ce,k as Je,a9 as We,ao as k,bK as i,aW as C,b6 as Ge,b4 as Xe,b5 as Ye,bN as Ze}from"./index-C-i99XXF.js";import{u as w}from"./useMutation-CrSU7LrM.js";import{C as le,a as de}from"./card-BwvuSgdv.js";import{C as pe}from"./checkbox-COY1I8--.js";import{T as et}from"./table-skeleton-W4NmdKYl.js";import{P as tt}from"./pagination-bar-B67t1a6P.js";import{T as st,d as nt,e as R,c as U,a as rt,b as $}from"./table-CCu_JPDD.js";import{A as me,c as ue,f as xe,g as fe,d as he,e as ge,b as je,a as ye}from"./alert-dialog-CqlwlZ39.js";import{b as Se}from"./types-C-xO67t8.js";import{L as ot}from"./list-filter-B4W1P91H.js";import{g as at,h as Te,b as Ce,F as it,c as ct}from"./field-renderer-BCQDmn_5.js";import{E as lt}from"./empty-state-v8u5VqOl.js";import{d as dt,A as pt,b as mt,a as ut}from"./api-config-sheet-BK_N5Tdt.js";import{D as xt}from"./download-mMzV19JZ.js";import{T as be}from"./trash-2-Cxpx5avJ.js";import{U as ft}from"./upload-InJCWqAU.js";import{S as ht}from"./shield-Whu99Qe6.js";import{P as gt}from"./plus-CwjdK202.js";import{C as jt}from"./chevron-up-F9cYTMff.js";import{E as yt}from"./ellipsis-vertical-xZQpERB7.js";import{P as St}from"./pencil-BzoosANP.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-DsFJjVO2.js";import"./useRegisterFieldControl-BK92wKok.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./chevron-left-Dxx6wreE.js";import"./input-CX4DHDvW.js";import"./useLabelableId-bx9DAHAI.js";import"./select-C7HHvgkd.js";import"./textarea-DxF_RMjI.js";import"./label-YdsyMzds.js";import"./badge-BxazBb-3.js";import"./multi-media-upload-_Ew8n5h0.js";import"./vendor-md-editor-C0GoXAL0.js";import"./dialog-8LyJX3or.js";import"./media-utils-Dl5crNGr.js";import"./archive-DbNEUzmX.js";import"./file-CwTg0Lel.js";import"./link-CrjG9QDb.js";import"./list-BlZqMnAk.js";import"./grip-vertical-B_S2B2GU.js";import"./arrow-right-BJVZqhFR.js";import"./switch-0loFRSXw.js";import"./save-LpbBFCdm.js";import"./copy-BNjpvh3F.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/content-types-new-D5sPZgWq.js b/adminui/assets/content-types-new-DZB3QOJs.js similarity index 76% rename from adminui/assets/content-types-new-D5sPZgWq.js rename to adminui/assets/content-types-new-DZB3QOJs.js index fc7e3fe2..c582eaf0 100644 --- a/adminui/assets/content-types-new-D5sPZgWq.js +++ b/adminui/assets/content-types-new-DZB3QOJs.js @@ -1 +1 @@ -import{k as T,f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{ce as q,ci as R,c8 as z,az as b,aa as B,i as N,ao as I,bK as p,aW as v}from"./index-EC_gIQIi.js";import{u as K}from"./useMutation-C9eWISs8.js";import{C as S,a as C}from"./card-BhczRj8d.js";import{B as M}from"./badge-BrOOeG4p.js";import{L as _}from"./label-BNi6V6qj.js";import{S as J,e as O,f as Q,a as V,c as F}from"./select-BSZ-0tY-.js";import{b as m}from"./types-C-xO67t8.js";import{a as W,h as k,c as A}from"./field-renderer-7U0JEnRX.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./FormContext-Cvsbmzt5.js";import"./input-D7bJWFUq.js";import"./textarea-CxSwwTO9.js";import"./multi-media-upload-C_rG1LSF.js";import"./vendor-md-editor-C0GoXAL0.js";import"./dialog-BvqDo2CN.js";import"./media-utils-Bk0fYNzf.js";import"./archive-CN6ChZbz.js";import"./file-C64ivkyc.js";import"./link-C8_P29JW.js";import"./list-qSUwiUjh.js";import"./chevron-left-iG3CNZoG.js";import"./upload-DGewhSDK.js";import"./grip-vertical-CK5uDx11.js";import"./arrow-right-qNysmirn.js";import"./download-krj7fN-F.js";function $(o){return o.fields.filter(r=>!(r.private||r.name==="id"||r.name==="status"||r.name==="created_at"||r.name==="updated_at"))}function G(o){const r={};for(const c of o.fields)c.default!==void 0&&c.default!==null&&(r[c.name]=c.default);return k(o,"statusable")&&(r.status=m.draft),r}function Fe(){const o=T(),r=o.group?`${o.group}/${o.singular}`:o.ctPath??"",c=q(),{t:n}=R(),f=z({queryKey:["content-type",r],queryFn:()=>v.send(`/admin/content-types/${r}`)}),s=f.data,[i,x]=d.useState({}),[w,h]=d.useState({}),[E,P]=d.useState(!1);s&&!E&&(x(G(s)),P(!0));const l=K({mutationFn:t=>{const a=s.group?`${s.group}/${s.plural}`:s.plural;return v.adminCt(a).create(t)},onSuccess:()=>{p.success(n("common.created",{name:s.name})),c.push(`/content-types/${r}`)},onError:t=>{t instanceof I?p.error(t.message):(console.error("create failed:",t),p.error(`${n("common.failedToCreate",{name:s.name})}: ${t instanceof Error?t.message:String(t)}`))}});function g(t,a){x(u=>({...u,[t]:a})),h(u=>{const y={...u};return delete y[t],y})}function D(){if(!s)return!1;const t={};for(const a of $(s))if(a.required&&(i[a.name]==null||i[a.name]==="")&&(t[a.name]=n("common.isRequired",{field:A(a)})),a.field_type==="json"&&i[a.name]&&typeof i[a.name]=="string")try{JSON.parse(i[a.name])}catch{t[a.name]=n("common.invalidJson")}return h(t),Object.keys(t).length===0}function L(t){t.preventDefault(),D()&&l.mutate(i)}const j=s?$(s):[];return f.isLoading?e.jsxs("div",{className:"space-y-6",children:[e.jsx(b,{className:"h-8 w-32"}),e.jsx(b,{className:"h-64 w-full"})]}):s?e.jsxs("div",{className:"space-y-6 -m-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 px-6 pt-6",children:[s.group&&e.jsx(M,{variant:"secondary",children:s.group}),e.jsx("span",{className:"font-medium",children:s.name}),s.description&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:["·"," ",s.description]})]}),e.jsxs("form",{onSubmit:L,className:"space-y-6 p-6 pt-0",children:[e.jsx(S,{children:e.jsxs(C,{className:"pt-6 space-y-5",children:[j.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-4 text-center",children:n("contentTypes.noFields")}):j.map(t=>e.jsx(W,{field:t,value:i[t.name],onChange:a=>g(t.name,a),error:w[t.name]},t.name)),k(s,"statusable")&&e.jsxs("div",{className:"grid grid-cols-1 gap-x-6 sm:grid-cols-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1.5 sm:col-span-2",children:[e.jsx(_,{children:n("common.status")}),e.jsxs(J,{value:i.status||m.draft,onValueChange:t=>{t&&g("status",t)},items:{[m.draft]:n("common.draft"),[m.published]:n("common.published")},children:[e.jsx(O,{className:"w-full",children:e.jsx(Q,{placeholder:n("common.selectStatus")})}),e.jsxs(V,{children:[e.jsx(F,{value:m.draft,children:n("common.draft")}),e.jsx(F,{value:m.published,children:n("common.published")})]})]})]}),e.jsx("div",{className:"hidden sm:block pt-[30px]"})]})]})}),e.jsxs("div",{className:"sticky bottom-0 flex items-center justify-end gap-3 border-t bg-background/95 px-6 py-3 backdrop-blur",children:[e.jsx(B,{href:`/content-types/${r}`,children:e.jsx(N,{type:"button",variant:"outline",children:n("common.cancel")})}),e.jsx(N,{type:"submit",disabled:l.isPending,children:l.isPending?n("common.creating"):n("common.create")})]})]})]}):e.jsx("div",{className:"space-y-6",children:e.jsx(S,{children:e.jsx(C,{className:"py-8 text-center text-muted-foreground",children:n("contentTypes.notFoundMsg",{singular:r})})})})}export{Fe as default}; +import{k as T,f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{ce as q,ci as R,c8 as z,az as b,aa as B,i as N,ao as I,bK as p,aW as v}from"./index-C-i99XXF.js";import{u as K}from"./useMutation-CrSU7LrM.js";import{C as S,a as C}from"./card-BwvuSgdv.js";import{B as M}from"./badge-BxazBb-3.js";import{L as _}from"./label-YdsyMzds.js";import{S as J,e as O,f as Q,a as V,c as F}from"./select-C7HHvgkd.js";import{b as m}from"./types-C-xO67t8.js";import{a as W,h as k,c as A}from"./field-renderer-BCQDmn_5.js";import"./vendor-xyflow-D6gjNkZe.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./FormContext-B5vgnUQy.js";import"./input-CX4DHDvW.js";import"./textarea-DxF_RMjI.js";import"./multi-media-upload-_Ew8n5h0.js";import"./vendor-md-editor-C0GoXAL0.js";import"./dialog-8LyJX3or.js";import"./media-utils-Dl5crNGr.js";import"./archive-DbNEUzmX.js";import"./file-CwTg0Lel.js";import"./link-CrjG9QDb.js";import"./list-BlZqMnAk.js";import"./chevron-left-Dxx6wreE.js";import"./upload-InJCWqAU.js";import"./grip-vertical-B_S2B2GU.js";import"./arrow-right-BJVZqhFR.js";import"./download-mMzV19JZ.js";function $(o){return o.fields.filter(r=>!(r.private||r.name==="id"||r.name==="status"||r.name==="created_at"||r.name==="updated_at"))}function G(o){const r={};for(const c of o.fields)c.default!==void 0&&c.default!==null&&(r[c.name]=c.default);return k(o,"statusable")&&(r.status=m.draft),r}function Fe(){const o=T(),r=o.group?`${o.group}/${o.singular}`:o.ctPath??"",c=q(),{t:n}=R(),f=z({queryKey:["content-type",r],queryFn:()=>v.send(`/admin/content-types/${r}`)}),s=f.data,[i,x]=d.useState({}),[w,h]=d.useState({}),[E,P]=d.useState(!1);s&&!E&&(x(G(s)),P(!0));const l=K({mutationFn:t=>{const a=s.group?`${s.group}/${s.plural}`:s.plural;return v.adminCt(a).create(t)},onSuccess:()=>{p.success(n("common.created",{name:s.name})),c.push(`/content-types/${r}`)},onError:t=>{t instanceof I?p.error(t.message):(console.error("create failed:",t),p.error(`${n("common.failedToCreate",{name:s.name})}: ${t instanceof Error?t.message:String(t)}`))}});function g(t,a){x(u=>({...u,[t]:a})),h(u=>{const y={...u};return delete y[t],y})}function D(){if(!s)return!1;const t={};for(const a of $(s))if(a.required&&(i[a.name]==null||i[a.name]==="")&&(t[a.name]=n("common.isRequired",{field:A(a)})),a.field_type==="json"&&i[a.name]&&typeof i[a.name]=="string")try{JSON.parse(i[a.name])}catch{t[a.name]=n("common.invalidJson")}return h(t),Object.keys(t).length===0}function L(t){t.preventDefault(),D()&&l.mutate(i)}const j=s?$(s):[];return f.isLoading?e.jsxs("div",{className:"space-y-6",children:[e.jsx(b,{className:"h-8 w-32"}),e.jsx(b,{className:"h-64 w-full"})]}):s?e.jsxs("div",{className:"space-y-6 -m-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 px-6 pt-6",children:[s.group&&e.jsx(M,{variant:"secondary",children:s.group}),e.jsx("span",{className:"font-medium",children:s.name}),s.description&&e.jsxs("span",{className:"text-sm text-muted-foreground",children:["·"," ",s.description]})]}),e.jsxs("form",{onSubmit:L,className:"space-y-6 p-6 pt-0",children:[e.jsx(S,{children:e.jsxs(C,{className:"pt-6 space-y-5",children:[j.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-4 text-center",children:n("contentTypes.noFields")}):j.map(t=>e.jsx(W,{field:t,value:i[t.name],onChange:a=>g(t.name,a),error:w[t.name]},t.name)),k(s,"statusable")&&e.jsxs("div",{className:"grid grid-cols-1 gap-x-6 sm:grid-cols-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1.5 sm:col-span-2",children:[e.jsx(_,{children:n("common.status")}),e.jsxs(J,{value:i.status||m.draft,onValueChange:t=>{t&&g("status",t)},items:{[m.draft]:n("common.draft"),[m.published]:n("common.published")},children:[e.jsx(O,{className:"w-full",children:e.jsx(Q,{placeholder:n("common.selectStatus")})}),e.jsxs(V,{children:[e.jsx(F,{value:m.draft,children:n("common.draft")}),e.jsx(F,{value:m.published,children:n("common.published")})]})]})]}),e.jsx("div",{className:"hidden sm:block pt-[30px]"})]})]})}),e.jsxs("div",{className:"sticky bottom-0 flex items-center justify-end gap-3 border-t bg-background/95 px-6 py-3 backdrop-blur",children:[e.jsx(B,{href:`/content-types/${r}`,children:e.jsx(N,{type:"button",variant:"outline",children:n("common.cancel")})}),e.jsx(N,{type:"submit",disabled:l.isPending,children:l.isPending?n("common.creating"):n("common.create")})]})]})]}):e.jsx("div",{className:"space-y-6",children:e.jsx(S,{children:e.jsx(C,{className:"py-8 text-center text-muted-foreground",children:n("contentTypes.notFoundMsg",{singular:r})})})})}export{Fe as default}; diff --git a/adminui/assets/copy-Dc6vpmam.js b/adminui/assets/copy-BNjpvh3F.js similarity index 88% rename from adminui/assets/copy-Dc6vpmam.js rename to adminui/assets/copy-BNjpvh3F.js index 2d01ca17..76a25924 100644 --- a/adminui/assets/copy-Dc6vpmam.js +++ b/adminui/assets/copy-BNjpvh3F.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/coupons-Bauwlna-.js b/adminui/assets/coupons-SbgEQKK0.js similarity index 89% rename from adminui/assets/coupons-Bauwlna-.js rename to adminui/assets/coupons-SbgEQKK0.js index 1da4a659..c7f44a9b 100644 --- a/adminui/assets/coupons-Bauwlna-.js +++ b/adminui/assets/coupons-SbgEQKK0.js @@ -1 +1 @@ -import{f as m,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as W}from"./use-url-state-BBO3na5E.js";import{ci as $,c9 as G,c8 as J,i as C,aD as X,L as Y,R as Z,M as ee,N as K,bK as l,ao as D,aW as x}from"./index-EC_gIQIi.js";import{u as N}from"./useMutation-C9eWISs8.js";import{B as Q}from"./badge-BrOOeG4p.js";import{C as se,a as ae}from"./card-BhczRj8d.js";import{I as c}from"./input-D7bJWFUq.js";import{L as r}from"./label-BNi6V6qj.js";import{D as oe,a as ne,d as te,e as re,c as ie}from"./dialog-BvqDo2CN.js";import{A as le,c as ce,f as de,g as ue,d as pe,e as me,b as xe,a as he}from"./alert-dialog-BCjXQEnz.js";import{T as ge,d as je,e as b,c as d,a as _e,b as i}from"./table-B0P46Gj-.js";import{P as ve}from"./pagination-bar-Dm-qkwNo.js";import{T as fe}from"./table-skeleton-CzRpAQZA.js";import{E as ye}from"./empty-state-DSPTmRGJ.js";import{P as Ce}from"./plus-BQJ6-Ehy.js";import{E as De}from"./ellipsis-vertical-29muOhpK.js";import{P as Ne}from"./pencil-9H2eFft0.js";import{T as be}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./chevron-left-iG3CNZoG.js";const T={title:"",code:"",coupon_type:"percentage",value:"",min_order_amount:"",max_uses:"",max_uses_per_user:"",starts_at:"",expires_at:""};function $e(){var M,k,q;const{t:a}=$(),h=G(),{getInt:U,set:z}=W(),g=U("page"),[j,_]=m.useState(null),S=20,[B,u]=m.useState(!1),[v,f]=m.useState(null),[o,t]=m.useState(T),p=J({queryKey:["admin-coupons",g],queryFn:()=>x.admin.coupons.list(g,S)}),A=N({mutationFn:()=>x.admin.coupons.create({title:o.title,code:o.code||void 0,coupon_type:o.coupon_type,value:parseFloat(o.value),min_order_amount:o.min_order_amount?parseFloat(o.min_order_amount):void 0,max_uses:o.max_uses?parseInt(o.max_uses):void 0,max_uses_per_user:o.max_uses_per_user?parseInt(o.max_uses_per_user):void 0,starts_at:o.starts_at||void 0,expires_at:o.expires_at||void 0}),onSuccess:()=>{l.success(a("coupons.couponCreated")),h.invalidateQueries({queryKey:["admin-coupons"]}),y()},onError:s=>{l.error(s instanceof D?s.message:a("coupons.failedToCreate"))}}),E=N({mutationFn:()=>x.admin.coupons.update(v,{title:o.title,code:o.code||void 0,coupon_type:o.coupon_type,value:parseFloat(o.value),min_order_amount:o.min_order_amount?parseFloat(o.min_order_amount):void 0,max_uses:o.max_uses?parseInt(o.max_uses):void 0,max_uses_per_user:o.max_uses_per_user?parseInt(o.max_uses_per_user):void 0,starts_at:o.starts_at||void 0,expires_at:o.expires_at||void 0}),onSuccess:()=>{l.success(a("coupons.couponUpdated")),h.invalidateQueries({queryKey:["admin-coupons"]}),y()},onError:s=>{l.error(s instanceof D?s.message:a("coupons.failedToUpdate"))}}),F=N({mutationFn:s=>x.admin.coupons.delete(s),onSuccess:()=>{l.success(a("coupons.couponDeleted")),h.invalidateQueries({queryKey:["admin-coupons"]})},onError:s=>{l.error(s instanceof D?s.message:a("coupons.failedToDelete"))}});function P(){f(null),t(T),u(!0)}function O(s){f(s.id),t({title:s.title??"",code:s.code??"",coupon_type:s.coupon_type??"percentage",value:String(s.value??""),min_order_amount:String(s.min_order??""),max_uses:String(s.max_uses??""),max_uses_per_user:String(s.max_uses_per_user??""),starts_at:s.starts_at??"",expires_at:s.expires_at??""}),u(!0)}function y(){u(!1),f(null),t(T)}function H(){if(!o.title.trim()){l.error(a("common.titleRequired"));return}v?E.mutate():A.mutate()}function L(s){_(s)}function R(){j&&(F.mutate(j),_(null))}const w=((M=p.data)==null?void 0:M.items)??[],V=Math.ceil((((k=p.data)==null?void 0:k.total)??0)/S),I=A.isPending||E.isPending;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("div",{}),e.jsxs(C,{onClick:P,children:[e.jsx(Ce,{className:"size-4"}),a("coupons.newCoupon")]})]}),e.jsx(se,{children:e.jsx(ae,{className:"p-0",children:p.isLoading?e.jsx(fe,{cols:7}):e.jsxs(ge,{children:[e.jsx(je,{children:e.jsxs(b,{children:[e.jsx(d,{children:a("coupons.title")}),e.jsx(d,{children:a("coupons.code")}),e.jsx(d,{children:a("coupons.type")}),e.jsx(d,{children:a("coupons.value")}),e.jsx(d,{children:a("common.status")}),e.jsx(d,{children:a("coupons.usedCount")}),e.jsx(d,{className:"text-end",children:a("common.actions")})]})}),e.jsx(_e,{children:w.length===0?e.jsx(b,{children:e.jsx(i,{colSpan:7,children:e.jsx(ye,{icon:X,title:a("coupons.noCoupons"),description:a("coupons.noCouponsDesc"),action:{label:a("coupons.newCoupon"),onClick:P}})})}):w.map(s=>e.jsxs(b,{children:[e.jsx(i,{className:"font-medium",children:s.title}),e.jsx(i,{children:e.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:s.code})}),e.jsx(i,{children:e.jsx(Q,{variant:"outline",children:s.coupon_type==="percentage"?"%":"$"})}),e.jsxs(i,{children:[s.value,s.coupon_type==="percentage"?"%":""]}),e.jsx(i,{children:e.jsx(Q,{variant:s.status==="active"?"default":"secondary",children:s.status})}),e.jsx(i,{children:s.used_count}),e.jsx(i,{className:"text-end",children:e.jsxs(Y,{children:[e.jsx(Z,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(De,{className:"size-4"})}),e.jsxs(ee,{align:"end",children:[e.jsxs(K,{onClick:()=>O(s),children:[e.jsx(Ne,{className:"size-4 me-2"}),a("common.edit")]}),e.jsxs(K,{className:"text-destructive",onClick:()=>L(s.id),disabled:F.isPending,children:[e.jsx(be,{className:"size-4 me-2"}),a("common.delete")]})]})]})})]},s.id))})]})})}),e.jsx(ve,{page:g,totalPages:V,total:((q=p.data)==null?void 0:q.total)??0,onPageChange:s=>z({page:s})}),e.jsx(oe,{open:B,onOpenChange:u,children:e.jsxs(ne,{className:"max-w-lg",children:[e.jsx(te,{children:e.jsx(re,{children:a(v?"coupons.editCoupon":"coupons.newCoupon")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.title")}),e.jsx(c,{value:o.title,onChange:s=>t(n=>({...n,title:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.code")}),e.jsx(c,{value:o.code,onChange:s=>t(n=>({...n,code:s.target.value.toUpperCase()})),placeholder:"SAVE20"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.type")}),e.jsxs("select",{value:o.coupon_type,onChange:s=>t(n=>({...n,coupon_type:s.target.value})),className:"flex h-9 w-full rounded-md border border-input bg-background px-3 text-sm",children:[e.jsx("option",{value:"percentage",children:a("coupons.percentage")}),e.jsx("option",{value:"fixed",children:a("coupons.fixed")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.value")}),e.jsx(c,{type:"number",step:"0.01",value:o.value,onChange:s=>t(n=>({...n,value:s.target.value}))})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.minOrder")}),e.jsx(c,{type:"number",step:"0.01",value:o.min_order_amount,onChange:s=>t(n=>({...n,min_order_amount:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.maxUses")}),e.jsx(c,{type:"number",value:o.max_uses,onChange:s=>t(n=>({...n,max_uses:s.target.value}))})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.startsAt")}),e.jsx(c,{type:"datetime-local",value:o.starts_at,onChange:s=>t(n=>({...n,starts_at:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.expiresAt")}),e.jsx(c,{type:"datetime-local",value:o.expires_at,onChange:s=>t(n=>({...n,expires_at:s.target.value}))})]})]})]}),e.jsxs(ie,{children:[e.jsx(C,{variant:"outline",onClick:y,children:a("common.cancel")}),e.jsx(C,{onClick:H,disabled:I,children:a(I?"common.saving":"common.save")})]})]})})]}),e.jsx(le,{open:!!j,onOpenChange:s=>{s||_(null)},children:e.jsxs(ce,{children:[e.jsxs(de,{children:[e.jsx(ue,{children:a("common.confirmDeleteTitle")}),e.jsx(pe,{children:a("coupons.confirmDelete")})]}),e.jsxs(me,{children:[e.jsx(xe,{children:a("common.cancel")}),e.jsx(he,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:R,children:a("common.delete")})]})]})})]})}export{$e as default}; +import{f as m,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as W}from"./use-url-state-BBO3na5E.js";import{ci as $,c9 as G,c8 as J,i as C,aD as X,L as Y,R as Z,M as ee,N as K,bK as l,ao as D,aW as x}from"./index-C-i99XXF.js";import{u as N}from"./useMutation-CrSU7LrM.js";import{B as Q}from"./badge-BxazBb-3.js";import{C as se,a as ae}from"./card-BwvuSgdv.js";import{I as c}from"./input-CX4DHDvW.js";import{L as r}from"./label-YdsyMzds.js";import{D as oe,a as ne,d as te,e as re,c as ie}from"./dialog-8LyJX3or.js";import{A as le,c as ce,f as de,g as ue,d as pe,e as me,b as xe,a as he}from"./alert-dialog-CqlwlZ39.js";import{T as ge,d as je,e as b,c as d,a as _e,b as i}from"./table-CCu_JPDD.js";import{P as ve}from"./pagination-bar-B67t1a6P.js";import{T as fe}from"./table-skeleton-W4NmdKYl.js";import{E as ye}from"./empty-state-v8u5VqOl.js";import{P as Ce}from"./plus-CwjdK202.js";import{E as De}from"./ellipsis-vertical-xZQpERB7.js";import{P as Ne}from"./pencil-BzoosANP.js";import{T as be}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./chevron-left-Dxx6wreE.js";const T={title:"",code:"",coupon_type:"percentage",value:"",min_order_amount:"",max_uses:"",max_uses_per_user:"",starts_at:"",expires_at:""};function $e(){var M,k,q;const{t:a}=$(),h=G(),{getInt:U,set:z}=W(),g=U("page"),[j,_]=m.useState(null),S=20,[B,u]=m.useState(!1),[v,f]=m.useState(null),[o,t]=m.useState(T),p=J({queryKey:["admin-coupons",g],queryFn:()=>x.admin.coupons.list(g,S)}),A=N({mutationFn:()=>x.admin.coupons.create({title:o.title,code:o.code||void 0,coupon_type:o.coupon_type,value:parseFloat(o.value),min_order_amount:o.min_order_amount?parseFloat(o.min_order_amount):void 0,max_uses:o.max_uses?parseInt(o.max_uses):void 0,max_uses_per_user:o.max_uses_per_user?parseInt(o.max_uses_per_user):void 0,starts_at:o.starts_at||void 0,expires_at:o.expires_at||void 0}),onSuccess:()=>{l.success(a("coupons.couponCreated")),h.invalidateQueries({queryKey:["admin-coupons"]}),y()},onError:s=>{l.error(s instanceof D?s.message:a("coupons.failedToCreate"))}}),E=N({mutationFn:()=>x.admin.coupons.update(v,{title:o.title,code:o.code||void 0,coupon_type:o.coupon_type,value:parseFloat(o.value),min_order_amount:o.min_order_amount?parseFloat(o.min_order_amount):void 0,max_uses:o.max_uses?parseInt(o.max_uses):void 0,max_uses_per_user:o.max_uses_per_user?parseInt(o.max_uses_per_user):void 0,starts_at:o.starts_at||void 0,expires_at:o.expires_at||void 0}),onSuccess:()=>{l.success(a("coupons.couponUpdated")),h.invalidateQueries({queryKey:["admin-coupons"]}),y()},onError:s=>{l.error(s instanceof D?s.message:a("coupons.failedToUpdate"))}}),F=N({mutationFn:s=>x.admin.coupons.delete(s),onSuccess:()=>{l.success(a("coupons.couponDeleted")),h.invalidateQueries({queryKey:["admin-coupons"]})},onError:s=>{l.error(s instanceof D?s.message:a("coupons.failedToDelete"))}});function P(){f(null),t(T),u(!0)}function O(s){f(s.id),t({title:s.title??"",code:s.code??"",coupon_type:s.coupon_type??"percentage",value:String(s.value??""),min_order_amount:String(s.min_order??""),max_uses:String(s.max_uses??""),max_uses_per_user:String(s.max_uses_per_user??""),starts_at:s.starts_at??"",expires_at:s.expires_at??""}),u(!0)}function y(){u(!1),f(null),t(T)}function H(){if(!o.title.trim()){l.error(a("common.titleRequired"));return}v?E.mutate():A.mutate()}function L(s){_(s)}function R(){j&&(F.mutate(j),_(null))}const w=((M=p.data)==null?void 0:M.items)??[],V=Math.ceil((((k=p.data)==null?void 0:k.total)??0)/S),I=A.isPending||E.isPending;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("div",{}),e.jsxs(C,{onClick:P,children:[e.jsx(Ce,{className:"size-4"}),a("coupons.newCoupon")]})]}),e.jsx(se,{children:e.jsx(ae,{className:"p-0",children:p.isLoading?e.jsx(fe,{cols:7}):e.jsxs(ge,{children:[e.jsx(je,{children:e.jsxs(b,{children:[e.jsx(d,{children:a("coupons.title")}),e.jsx(d,{children:a("coupons.code")}),e.jsx(d,{children:a("coupons.type")}),e.jsx(d,{children:a("coupons.value")}),e.jsx(d,{children:a("common.status")}),e.jsx(d,{children:a("coupons.usedCount")}),e.jsx(d,{className:"text-end",children:a("common.actions")})]})}),e.jsx(_e,{children:w.length===0?e.jsx(b,{children:e.jsx(i,{colSpan:7,children:e.jsx(ye,{icon:X,title:a("coupons.noCoupons"),description:a("coupons.noCouponsDesc"),action:{label:a("coupons.newCoupon"),onClick:P}})})}):w.map(s=>e.jsxs(b,{children:[e.jsx(i,{className:"font-medium",children:s.title}),e.jsx(i,{children:e.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:s.code})}),e.jsx(i,{children:e.jsx(Q,{variant:"outline",children:s.coupon_type==="percentage"?"%":"$"})}),e.jsxs(i,{children:[s.value,s.coupon_type==="percentage"?"%":""]}),e.jsx(i,{children:e.jsx(Q,{variant:s.status==="active"?"default":"secondary",children:s.status})}),e.jsx(i,{children:s.used_count}),e.jsx(i,{className:"text-end",children:e.jsxs(Y,{children:[e.jsx(Z,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(De,{className:"size-4"})}),e.jsxs(ee,{align:"end",children:[e.jsxs(K,{onClick:()=>O(s),children:[e.jsx(Ne,{className:"size-4 me-2"}),a("common.edit")]}),e.jsxs(K,{className:"text-destructive",onClick:()=>L(s.id),disabled:F.isPending,children:[e.jsx(be,{className:"size-4 me-2"}),a("common.delete")]})]})]})})]},s.id))})]})})}),e.jsx(ve,{page:g,totalPages:V,total:((q=p.data)==null?void 0:q.total)??0,onPageChange:s=>z({page:s})}),e.jsx(oe,{open:B,onOpenChange:u,children:e.jsxs(ne,{className:"max-w-lg",children:[e.jsx(te,{children:e.jsx(re,{children:a(v?"coupons.editCoupon":"coupons.newCoupon")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.title")}),e.jsx(c,{value:o.title,onChange:s=>t(n=>({...n,title:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.code")}),e.jsx(c,{value:o.code,onChange:s=>t(n=>({...n,code:s.target.value.toUpperCase()})),placeholder:"SAVE20"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.type")}),e.jsxs("select",{value:o.coupon_type,onChange:s=>t(n=>({...n,coupon_type:s.target.value})),className:"flex h-9 w-full rounded-md border border-input bg-background px-3 text-sm",children:[e.jsx("option",{value:"percentage",children:a("coupons.percentage")}),e.jsx("option",{value:"fixed",children:a("coupons.fixed")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.value")}),e.jsx(c,{type:"number",step:"0.01",value:o.value,onChange:s=>t(n=>({...n,value:s.target.value}))})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.minOrder")}),e.jsx(c,{type:"number",step:"0.01",value:o.min_order_amount,onChange:s=>t(n=>({...n,min_order_amount:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.maxUses")}),e.jsx(c,{type:"number",value:o.max_uses,onChange:s=>t(n=>({...n,max_uses:s.target.value}))})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.startsAt")}),e.jsx(c,{type:"datetime-local",value:o.starts_at,onChange:s=>t(n=>({...n,starts_at:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:a("coupons.expiresAt")}),e.jsx(c,{type:"datetime-local",value:o.expires_at,onChange:s=>t(n=>({...n,expires_at:s.target.value}))})]})]})]}),e.jsxs(ie,{children:[e.jsx(C,{variant:"outline",onClick:y,children:a("common.cancel")}),e.jsx(C,{onClick:H,disabled:I,children:a(I?"common.saving":"common.save")})]})]})})]}),e.jsx(le,{open:!!j,onOpenChange:s=>{s||_(null)},children:e.jsxs(ce,{children:[e.jsxs(de,{children:[e.jsx(ue,{children:a("common.confirmDeleteTitle")}),e.jsx(pe,{children:a("coupons.confirmDelete")})]}),e.jsxs(me,{children:[e.jsx(xe,{children:a("common.cancel")}),e.jsx(he,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:R,children:a("common.delete")})]})]})})]})}export{$e as default}; diff --git a/adminui/assets/cron-detail-DSwKC3J1.js b/adminui/assets/cron-detail-CIxWpenY.js similarity index 92% rename from adminui/assets/cron-detail-DSwKC3J1.js rename to adminui/assets/cron-detail-CIxWpenY.js index 09ecf463..9c246d11 100644 --- a/adminui/assets/cron-detail-DSwKC3J1.js +++ b/adminui/assets/cron-detail-CIxWpenY.js @@ -1,4 +1,4 @@ -import{k as $,f as V,j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as X,ci as J,ce as W,c9 as G,c8 as q,aa as z,i,az as f,o as L,ao as N,X as Y,aE as Z,aH as ee,aF as se,bK as m,aW as u,ab as I}from"./index-EC_gIQIi.js";import{u as T}from"./useMutation-C9eWISs8.js";import{u as ae}from"./use-url-state-BBO3na5E.js";import{P as ne}from"./pagination-bar-Dm-qkwNo.js";import{B as t}from"./badge-BrOOeG4p.js";import{C as S,a as _}from"./card-BhczRj8d.js";import{S as y}from"./separator-CYWP0N8k.js";import{T as re,d as te,e as b,c as h,a as ce,b as d}from"./table-B0P46Gj-.js";import{A as le,c as ie,f as oe,g as de,d as me,e as xe,b as ue,a as he}from"./alert-dialog-BCjXQEnz.js";import{P as je}from"./pencil-9H2eFft0.js";import{a as pe,P as ge,A as E}from"./power-ChJINlLf.js";import{T as fe}from"./trash-2-g-gZl4Oc.js";import{C as U}from"./circle-x-h9c8HLLF.js";import{C as Ne}from"./circle-check-big-Bv9fC9q8.js";import"./vendor-xyflow-D6gjNkZe.js";import"./chevron-left-iG3CNZoG.js";/** +import{k as $,f as V,j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as X,ci as J,ce as W,c9 as G,c8 as q,aa as z,i,az as f,o as L,ao as N,X as Y,aE as Z,aH as ee,aF as se,bK as m,aW as u,ab as I}from"./index-C-i99XXF.js";import{u as T}from"./useMutation-CrSU7LrM.js";import{u as ae}from"./use-url-state-BBO3na5E.js";import{P as ne}from"./pagination-bar-B67t1a6P.js";import{B as t}from"./badge-BxazBb-3.js";import{C as S,a as _}from"./card-BwvuSgdv.js";import{S as y}from"./separator-BbBsCOyd.js";import{T as re,d as te,e as b,c as h,a as ce,b as d}from"./table-CCu_JPDD.js";import{A as le,c as ie,f as oe,g as de,d as me,e as xe,b as ue,a as he}from"./alert-dialog-CqlwlZ39.js";import{P as je}from"./pencil-BzoosANP.js";import{a as pe,P as ge,A as E}from"./power-B03uf1kg.js";import{T as fe}from"./trash-2-Cxpx5avJ.js";import{C as U}from"./circle-x-Dmohp54U.js";import{C as Ne}from"./circle-check-big-DeL5JaWu.js";import"./vendor-xyflow-D6gjNkZe.js";import"./chevron-left-Dxx6wreE.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/cron-form-C49pcNBv.js b/adminui/assets/cron-form-C_WGfkzU.js similarity index 94% rename from adminui/assets/cron-form-C49pcNBv.js rename to adminui/assets/cron-form-C_WGfkzU.js index efb5509a..b05a55f6 100644 --- a/adminui/assets/cron-form-C49pcNBv.js +++ b/adminui/assets/cron-form-C_WGfkzU.js @@ -1,4 +1,4 @@ -import{k as ie,f as y,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as ce,ce as oe,c9 as de,c8 as z,i as J,bK as E,ao as Y,aW as w}from"./index-EC_gIQIi.js";import{u as X}from"./useMutation-C9eWISs8.js";import{C as Z,a as ee}from"./card-BhczRj8d.js";import{I as k}from"./input-D7bJWFUq.js";import{T as ue}from"./textarea-CxSwwTO9.js";import{L as f}from"./label-BNi6V6qj.js";import{S as me}from"./switch-DhX4UWWe.js";import{T as pe,b as he,c as H,a as I}from"./tabs-tWGkJT8g.js";import{S as q,e as K,f as Q,a as G,b as F,d as M,c as h}from"./select-BSZ-0tY-.js";import{C as se}from"./code-editor-3wDd6_W8.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./check-iV9lQKhJ.js";import"./chevron-up-nN7PIzPd.js";import"./vendor-md-editor-C0GoXAL0.js";const xe=[{label:"second",min:0,max:59},{label:"minute",min:0,max:59},{label:"hour",min:0,max:23},{label:"day-of-month",min:1,max:31},{label:"month",min:1,max:12,aliases:{jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12}},{label:"day-of-week",min:0,max:6,aliases:{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}}];function re(s,t){if(s==="*")return null;const u=/^(\*)\/(\d+)$/.exec(s);if(u){const c=Number(u[2]);return c<1||c>t.max?`step ${c} out of range for ${t.label} (1-${t.max})`:null}if(s.includes(",")){for(const c of s.split(",")){const i=re(c,t);if(i)return i}return null}const d=/^(\w+)-(\w+)(?:\/(\d+))?$/.exec(s);if(d){const c=V(d[1],t),i=V(d[2],t),x=d[3]?Number(d[3]):1;return c===null?`invalid value "${d[1]}" for ${t.label}`:i===null?`invalid value "${d[2]}" for ${t.label}`:c>i?`${t.label} range ${c}-${i}: start > end`:ct.max?`${t.label} range ${c}-${i} out of allowed range (${t.min}-${t.max})`:x<1||x>t.max?`step ${x} out of range for ${t.label} (1-${t.max})`:null}const l=V(s,t);return l===null?`invalid value "${s}" for ${t.label} (allowed ${t.min}-${t.max})`:lt.max?`${t.label} value ${l} out of allowed range (${t.min}-${t.max})`:null}function V(s,t){const u=s.toLowerCase();if(t.aliases&&u in t.aliases)return t.aliases[u];const d=Number(s);return Number.isInteger(d)?d:null}function fe(s){const t=s.trim();if(!t)return{ok:!1,error:"expression is empty"};const u=t.split(/\s+/),d=u.length;if(d!==6)return{ok:!1,error:`expected 6 fields (sec min hour day month weekday), got ${d}`};for(let l=0;lawait w.send("/admin/cron-handlers",{method:"GET"}),staleTime:1/0}),S=z({queryKey:["cron",l],queryFn:async()=>await w.send(`/admin/crons/${l}`,{method:"GET"}),enabled:c});y.useEffect(()=>{if(!S.data)return;const r=S.data,n=r.exec_kind,o=r.handler_id,m=r.script_lang,j=r.script_source,C=r.script_entry,_=r.params;x(n==="script"?"script":n==="system"?"system":"builtin"),v(W(r.cron_expr));let T={};if(typeof _=="string"&&_)try{T=JSON.parse(_)}catch{T={}}else _&&typeof _=="object"&&(T=_);const te=r.use_shell,U=r.timeout_secs;if(o&&b.data){const le=b.data.categories.flatMap(D=>D.handlers).find(D=>D.id===o)??null;L(le)}p({label:r.label,handler_id:o??"",params:T,cron_expr:r.cron_expr,enabled:r.enabled,script_lang:m??"js",script_source:j??"",script_entry:C??"on_cron_tick",use_shell:te??!0,timeout_secs:U!=null?String(U):""})},[S.data]),y.useEffect(()=>{if(!b.data||!a.handler_id)return;const r=b.data.categories.flatMap(n=>n.handlers).find(n=>n.id===a.handler_id)??null;L(r)},[b.data,a.handler_id]);const A=X({mutationFn:r=>w.send("/admin/crons",{method:"POST",body:r}),onSuccess:()=>{E.success(s("cron.scheduleCreated")),u.invalidateQueries({queryKey:["crons"]}),t.push("/crons")},onError:r=>{E.error(r instanceof Y?r.message:s("cron.failedToCreate"))}}),O=X({mutationFn:r=>w.send(`/admin/crons/${l}`,{method:"PUT",body:r}),onSuccess:()=>{E.success(s("cron.scheduleUpdated")),u.invalidateQueries({queryKey:["crons"]}),u.invalidateQueries({queryKey:["cron",l]}),t.push(`/crons/${l}`)},onError:r=>{E.error(r instanceof Y?r.message:s("cron.failedToCreate"))}}),ne=a.label&&a.cron_expr&&N===null&&(i==="builtin"?!!a.handler_id:!!a.script_source.trim()),R=A.isPending||O.isPending;function ae(){let r;i==="script"?r={label:a.label,cron_expr:a.cron_expr,enabled:a.enabled,exec_kind:"script",script_lang:a.script_lang,script_source:a.script_source,script_entry:a.script_entry}:i==="system"?r={label:a.label,cron_expr:a.cron_expr,enabled:a.enabled,exec_kind:"system",script_source:a.script_source,use_shell:a.use_shell,timeout_secs:a.timeout_secs?Number(a.timeout_secs):void 0}:r={label:a.label,cron_expr:a.cron_expr,enabled:a.enabled,exec_kind:"builtin",handler_id:a.handler_id,params:a.params},c?O.mutate(r):A.mutate(r)}return c&&S.isLoading?e.jsx("div",{className:"flex items-center justify-center py-20 text-muted-foreground",children:s("common.loading")}):e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-3",children:[e.jsx(Z,{className:"lg:col-span-2",children:e.jsxs(ee,{className:"space-y-6 pt-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"label",children:[s("cron.labelField")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(k,{id:"label",value:a.label,onChange:r=>p(n=>({...n,label:r.target.value})),placeholder:"e.g. Daily Backup"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"cron_expr",children:[s("cron.cronExpression")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(k,{id:"cron_expr",value:a.cron_expr,className:N?"border-red-500":"",onChange:r=>{const n=r.target.value;p(m=>({...m,cron_expr:n}));const o=fe(n);n.trim()?o.ok?($(null),v(W(n))):($(o.error),v(null)):($(null),v(null))},placeholder:"0 0 */6 * * * (every 6 hours)"}),e.jsxs(q,{value:"",onValueChange:r=>{r&&(p(n=>({...n,cron_expr:r})),$(null),v(W(r)))},children:[e.jsx(K,{className:"w-[160px] shrink-0",children:e.jsx(Q,{placeholder:s("cron.presetHint")})}),e.jsxs(G,{children:[e.jsxs(F,{children:[e.jsx(M,{children:s("cron.presetGroupMinute")}),e.jsx(h,{value:"0 */1 * * * *",children:s("cron.presetEveryMinute")}),e.jsx(h,{value:"0 */5 * * * *",children:s("cron.presetEvery5Min")}),e.jsx(h,{value:"0 */15 * * * *",children:s("cron.presetEvery15Min")}),e.jsx(h,{value:"0 */30 * * * *",children:s("cron.presetEvery30Min")})]}),e.jsxs(F,{children:[e.jsx(M,{children:s("cron.presetGroupHour")}),e.jsx(h,{value:"0 0 */1 * * *",children:s("cron.presetHourly")}),e.jsx(h,{value:"0 0 */6 * * *",children:s("cron.presetEvery6Hours")}),e.jsx(h,{value:"0 0 */12 * * *",children:s("cron.presetEvery12Hours")})]}),e.jsxs(F,{children:[e.jsx(M,{children:s("cron.presetGroupDay")}),e.jsx(h,{value:"0 0 0 * * *",children:s("cron.presetDailyMidnight")}),e.jsx(h,{value:"0 0 3 * * *",children:s("cron.presetDaily3am")}),e.jsx(h,{value:"0 0 3 * * 1",children:s("cron.presetWeekly")}),e.jsx(h,{value:"0 0 3 * * 0",children:s("cron.presetWeeklySun")}),e.jsx(h,{value:"0 0 1 * * *",children:s("cron.presetMonthly")})]})]})]})]}),N?e.jsx("p",{className:"text-xs text-red-500",children:N}):P?e.jsx("p",{className:"text-xs text-green-600",children:P}):e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cron.format")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(f,{children:s("cron.executionType")}),e.jsxs(pe,{value:i,onValueChange:r=>x(r),children:[e.jsxs(he,{className:"grid w-full grid-cols-3",children:[e.jsx(H,{value:"builtin",children:s("cron.builtinTab")}),e.jsx(H,{value:"script",children:s("cron.scriptTab")}),e.jsx(H,{value:"system",children:s("cron.systemTab")})]}),e.jsxs(I,{value:"builtin",className:"space-y-4 mt-4",children:[e.jsx("div",{className:"space-y-2",children:e.jsxs(q,{value:a.handler_id||void 0,onValueChange:r=>{var o;if(!r)return;const n=((o=b.data)==null?void 0:o.categories.flatMap(m=>m.handlers).find(m=>m.id===r))??null;L(n),p(m=>({...m,handler_id:r,params:je((n==null?void 0:n.params_schema)??null)}))},children:[e.jsx(K,{className:"w-full",children:e.jsx(Q,{placeholder:s("cron.jobTypeHint")})}),e.jsx(G,{children:(B=b.data)==null?void 0:B.categories.map(r=>e.jsxs(F,{children:[e.jsx(M,{children:r.category}),r.handlers.map(n=>e.jsx(h,{value:n.id,children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{children:n.display_name}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n.description})]})},n.id))]},r.category))})]})}),(g==null?void 0:g.params_schema)&&(()=>{const r=g.params_schema.properties??{};return Object.entries(r).map(([n,o])=>e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx(f,{htmlFor:`param-${n}`,children:o.title??n}),o.description&&e.jsx("p",{className:"text-xs text-muted-foreground",children:o.description})]}),o.enum?e.jsxs(q,{value:String(a.params[n]??o.default??""),onValueChange:m=>p(j=>({...j,params:{...j.params,[n]:m}})),children:[e.jsx(K,{className:"w-full",children:e.jsx(Q,{placeholder:o.title??n})}),e.jsx(G,{children:o.enum.map(m=>e.jsx(h,{value:m,children:m},m))})]}):o.type==="string"?e.jsx(ue,{id:`param-${n}`,value:String(a.params[n]??o.default??""),onChange:m=>p(j=>({...j,params:{...j.params,[n]:m.target.value}})),placeholder:String(o.default??""),rows:3}):e.jsx(k,{id:`param-${n}`,type:o.type==="integer"?"number":"text",value:String(a.params[n]??o.default??""),onChange:m=>{const j=o.type==="integer"?Number(m.target.value):m.target.value;p(C=>({...C,params:{...C.params,[n]:j}}))},placeholder:String(o.default??"")})]},n))})()]}),e.jsxs(I,{value:"script",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{children:s("cron.scriptLang")}),e.jsx("div",{className:"flex gap-4",children:["js","lua","rhai"].map(r=>e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer text-sm",children:[e.jsx("input",{type:"radio",name:"script_lang",value:r,checked:a.script_lang===r,onChange:()=>p(n=>({...n,script_lang:r})),className:"size-4"}),r==="js"?"JavaScript":r==="lua"?"Lua":"Rhai"]},r))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"script_source",children:s("cron.scriptSource")}),e.jsx(se,{value:a.script_source,onChange:r=>p(n=>({...n,script_source:r})),language:a.script_lang,placeholder:a.script_lang==="js"?`export function on_cron_tick(payload) { +import{k as ie,f as y,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as ce,ce as oe,c9 as de,c8 as z,i as J,bK as E,ao as Y,aW as w}from"./index-C-i99XXF.js";import{u as X}from"./useMutation-CrSU7LrM.js";import{C as Z,a as ee}from"./card-BwvuSgdv.js";import{I as k}from"./input-CX4DHDvW.js";import{T as ue}from"./textarea-DxF_RMjI.js";import{L as f}from"./label-YdsyMzds.js";import{S as me}from"./switch-0loFRSXw.js";import{T as pe,b as he,c as H,a as I}from"./tabs-CdDx4vU1.js";import{S as q,e as K,f as Q,a as G,b as F,d as M,c as h}from"./select-C7HHvgkd.js";import{C as se}from"./code-editor-KdP2kfsd.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./check-DsFJjVO2.js";import"./chevron-up-F9cYTMff.js";import"./vendor-md-editor-C0GoXAL0.js";const xe=[{label:"second",min:0,max:59},{label:"minute",min:0,max:59},{label:"hour",min:0,max:23},{label:"day-of-month",min:1,max:31},{label:"month",min:1,max:12,aliases:{jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12}},{label:"day-of-week",min:0,max:6,aliases:{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}}];function re(s,t){if(s==="*")return null;const u=/^(\*)\/(\d+)$/.exec(s);if(u){const c=Number(u[2]);return c<1||c>t.max?`step ${c} out of range for ${t.label} (1-${t.max})`:null}if(s.includes(",")){for(const c of s.split(",")){const i=re(c,t);if(i)return i}return null}const d=/^(\w+)-(\w+)(?:\/(\d+))?$/.exec(s);if(d){const c=V(d[1],t),i=V(d[2],t),x=d[3]?Number(d[3]):1;return c===null?`invalid value "${d[1]}" for ${t.label}`:i===null?`invalid value "${d[2]}" for ${t.label}`:c>i?`${t.label} range ${c}-${i}: start > end`:ct.max?`${t.label} range ${c}-${i} out of allowed range (${t.min}-${t.max})`:x<1||x>t.max?`step ${x} out of range for ${t.label} (1-${t.max})`:null}const l=V(s,t);return l===null?`invalid value "${s}" for ${t.label} (allowed ${t.min}-${t.max})`:lt.max?`${t.label} value ${l} out of allowed range (${t.min}-${t.max})`:null}function V(s,t){const u=s.toLowerCase();if(t.aliases&&u in t.aliases)return t.aliases[u];const d=Number(s);return Number.isInteger(d)?d:null}function fe(s){const t=s.trim();if(!t)return{ok:!1,error:"expression is empty"};const u=t.split(/\s+/),d=u.length;if(d!==6)return{ok:!1,error:`expected 6 fields (sec min hour day month weekday), got ${d}`};for(let l=0;lawait w.send("/admin/cron-handlers",{method:"GET"}),staleTime:1/0}),S=z({queryKey:["cron",l],queryFn:async()=>await w.send(`/admin/crons/${l}`,{method:"GET"}),enabled:c});y.useEffect(()=>{if(!S.data)return;const r=S.data,n=r.exec_kind,o=r.handler_id,m=r.script_lang,j=r.script_source,C=r.script_entry,_=r.params;x(n==="script"?"script":n==="system"?"system":"builtin"),v(W(r.cron_expr));let T={};if(typeof _=="string"&&_)try{T=JSON.parse(_)}catch{T={}}else _&&typeof _=="object"&&(T=_);const te=r.use_shell,U=r.timeout_secs;if(o&&b.data){const le=b.data.categories.flatMap(D=>D.handlers).find(D=>D.id===o)??null;L(le)}p({label:r.label,handler_id:o??"",params:T,cron_expr:r.cron_expr,enabled:r.enabled,script_lang:m??"js",script_source:j??"",script_entry:C??"on_cron_tick",use_shell:te??!0,timeout_secs:U!=null?String(U):""})},[S.data]),y.useEffect(()=>{if(!b.data||!a.handler_id)return;const r=b.data.categories.flatMap(n=>n.handlers).find(n=>n.id===a.handler_id)??null;L(r)},[b.data,a.handler_id]);const A=X({mutationFn:r=>w.send("/admin/crons",{method:"POST",body:r}),onSuccess:()=>{E.success(s("cron.scheduleCreated")),u.invalidateQueries({queryKey:["crons"]}),t.push("/crons")},onError:r=>{E.error(r instanceof Y?r.message:s("cron.failedToCreate"))}}),O=X({mutationFn:r=>w.send(`/admin/crons/${l}`,{method:"PUT",body:r}),onSuccess:()=>{E.success(s("cron.scheduleUpdated")),u.invalidateQueries({queryKey:["crons"]}),u.invalidateQueries({queryKey:["cron",l]}),t.push(`/crons/${l}`)},onError:r=>{E.error(r instanceof Y?r.message:s("cron.failedToCreate"))}}),ne=a.label&&a.cron_expr&&N===null&&(i==="builtin"?!!a.handler_id:!!a.script_source.trim()),R=A.isPending||O.isPending;function ae(){let r;i==="script"?r={label:a.label,cron_expr:a.cron_expr,enabled:a.enabled,exec_kind:"script",script_lang:a.script_lang,script_source:a.script_source,script_entry:a.script_entry}:i==="system"?r={label:a.label,cron_expr:a.cron_expr,enabled:a.enabled,exec_kind:"system",script_source:a.script_source,use_shell:a.use_shell,timeout_secs:a.timeout_secs?Number(a.timeout_secs):void 0}:r={label:a.label,cron_expr:a.cron_expr,enabled:a.enabled,exec_kind:"builtin",handler_id:a.handler_id,params:a.params},c?O.mutate(r):A.mutate(r)}return c&&S.isLoading?e.jsx("div",{className:"flex items-center justify-center py-20 text-muted-foreground",children:s("common.loading")}):e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-3",children:[e.jsx(Z,{className:"lg:col-span-2",children:e.jsxs(ee,{className:"space-y-6 pt-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"label",children:[s("cron.labelField")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(k,{id:"label",value:a.label,onChange:r=>p(n=>({...n,label:r.target.value})),placeholder:"e.g. Daily Backup"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"cron_expr",children:[s("cron.cronExpression")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(k,{id:"cron_expr",value:a.cron_expr,className:N?"border-red-500":"",onChange:r=>{const n=r.target.value;p(m=>({...m,cron_expr:n}));const o=fe(n);n.trim()?o.ok?($(null),v(W(n))):($(o.error),v(null)):($(null),v(null))},placeholder:"0 0 */6 * * * (every 6 hours)"}),e.jsxs(q,{value:"",onValueChange:r=>{r&&(p(n=>({...n,cron_expr:r})),$(null),v(W(r)))},children:[e.jsx(K,{className:"w-[160px] shrink-0",children:e.jsx(Q,{placeholder:s("cron.presetHint")})}),e.jsxs(G,{children:[e.jsxs(F,{children:[e.jsx(M,{children:s("cron.presetGroupMinute")}),e.jsx(h,{value:"0 */1 * * * *",children:s("cron.presetEveryMinute")}),e.jsx(h,{value:"0 */5 * * * *",children:s("cron.presetEvery5Min")}),e.jsx(h,{value:"0 */15 * * * *",children:s("cron.presetEvery15Min")}),e.jsx(h,{value:"0 */30 * * * *",children:s("cron.presetEvery30Min")})]}),e.jsxs(F,{children:[e.jsx(M,{children:s("cron.presetGroupHour")}),e.jsx(h,{value:"0 0 */1 * * *",children:s("cron.presetHourly")}),e.jsx(h,{value:"0 0 */6 * * *",children:s("cron.presetEvery6Hours")}),e.jsx(h,{value:"0 0 */12 * * *",children:s("cron.presetEvery12Hours")})]}),e.jsxs(F,{children:[e.jsx(M,{children:s("cron.presetGroupDay")}),e.jsx(h,{value:"0 0 0 * * *",children:s("cron.presetDailyMidnight")}),e.jsx(h,{value:"0 0 3 * * *",children:s("cron.presetDaily3am")}),e.jsx(h,{value:"0 0 3 * * 1",children:s("cron.presetWeekly")}),e.jsx(h,{value:"0 0 3 * * 0",children:s("cron.presetWeeklySun")}),e.jsx(h,{value:"0 0 1 * * *",children:s("cron.presetMonthly")})]})]})]})]}),N?e.jsx("p",{className:"text-xs text-red-500",children:N}):P?e.jsx("p",{className:"text-xs text-green-600",children:P}):e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cron.format")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(f,{children:s("cron.executionType")}),e.jsxs(pe,{value:i,onValueChange:r=>x(r),children:[e.jsxs(he,{className:"grid w-full grid-cols-3",children:[e.jsx(H,{value:"builtin",children:s("cron.builtinTab")}),e.jsx(H,{value:"script",children:s("cron.scriptTab")}),e.jsx(H,{value:"system",children:s("cron.systemTab")})]}),e.jsxs(I,{value:"builtin",className:"space-y-4 mt-4",children:[e.jsx("div",{className:"space-y-2",children:e.jsxs(q,{value:a.handler_id||void 0,onValueChange:r=>{var o;if(!r)return;const n=((o=b.data)==null?void 0:o.categories.flatMap(m=>m.handlers).find(m=>m.id===r))??null;L(n),p(m=>({...m,handler_id:r,params:je((n==null?void 0:n.params_schema)??null)}))},children:[e.jsx(K,{className:"w-full",children:e.jsx(Q,{placeholder:s("cron.jobTypeHint")})}),e.jsx(G,{children:(B=b.data)==null?void 0:B.categories.map(r=>e.jsxs(F,{children:[e.jsx(M,{children:r.category}),r.handlers.map(n=>e.jsx(h,{value:n.id,children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{children:n.display_name}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n.description})]})},n.id))]},r.category))})]})}),(g==null?void 0:g.params_schema)&&(()=>{const r=g.params_schema.properties??{};return Object.entries(r).map(([n,o])=>e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx(f,{htmlFor:`param-${n}`,children:o.title??n}),o.description&&e.jsx("p",{className:"text-xs text-muted-foreground",children:o.description})]}),o.enum?e.jsxs(q,{value:String(a.params[n]??o.default??""),onValueChange:m=>p(j=>({...j,params:{...j.params,[n]:m}})),children:[e.jsx(K,{className:"w-full",children:e.jsx(Q,{placeholder:o.title??n})}),e.jsx(G,{children:o.enum.map(m=>e.jsx(h,{value:m,children:m},m))})]}):o.type==="string"?e.jsx(ue,{id:`param-${n}`,value:String(a.params[n]??o.default??""),onChange:m=>p(j=>({...j,params:{...j.params,[n]:m.target.value}})),placeholder:String(o.default??""),rows:3}):e.jsx(k,{id:`param-${n}`,type:o.type==="integer"?"number":"text",value:String(a.params[n]??o.default??""),onChange:m=>{const j=o.type==="integer"?Number(m.target.value):m.target.value;p(C=>({...C,params:{...C.params,[n]:j}}))},placeholder:String(o.default??"")})]},n))})()]}),e.jsxs(I,{value:"script",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{children:s("cron.scriptLang")}),e.jsx("div",{className:"flex gap-4",children:["js","lua","rhai"].map(r=>e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer text-sm",children:[e.jsx("input",{type:"radio",name:"script_lang",value:r,checked:a.script_lang===r,onChange:()=>p(n=>({...n,script_lang:r})),className:"size-4"}),r==="js"?"JavaScript":r==="lua"?"Lua":"Rhai"]},r))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"script_source",children:s("cron.scriptSource")}),e.jsx(se,{value:a.script_source,onChange:r=>p(n=>({...n,script_source:r})),language:a.script_lang,placeholder:a.script_lang==="js"?`export function on_cron_tick(payload) { host.log("info", "hello from cron"); }`:a.script_lang==="lua"?`function Plugin:on_cron_tick(payload) host.log("info", "hello from cron") diff --git a/adminui/assets/crons-DZKDWA5R.js b/adminui/assets/crons-D8uDQ60o.js similarity index 83% rename from adminui/assets/crons-DZKDWA5R.js rename to adminui/assets/crons-D8uDQ60o.js index 791be828..e7ee8745 100644 --- a/adminui/assets/crons-DZKDWA5R.js +++ b/adminui/assets/crons-D8uDQ60o.js @@ -1 +1 @@ -import{f as P,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as A}from"./use-url-state-BBO3na5E.js";import{ci as _,ce as M,c9 as R,c8 as z,i as F,o as H,aa as L,aE as $,aH as q,aF as B,L as I,R as K,M as Q,N as x,V as U,bK as m,ao as v,aW as h}from"./index-EC_gIQIi.js";import{u as S}from"./useMutation-C9eWISs8.js";import{P as V}from"./pagination-bar-Dm-qkwNo.js";import{B as O}from"./badge-BrOOeG4p.js";import{C as W,a as G}from"./card-BhczRj8d.js";import{T as J,d as X,e as p,c as i,a as Y,b as o}from"./table-B0P46Gj-.js";import{S as Z}from"./switch-DhX4UWWe.js";import{T as ee}from"./table-skeleton-CzRpAQZA.js";import{E as se}from"./empty-state-DSPTmRGJ.js";import{A as ne,c as te,f as re,g as oe,d as ae,e as ie,b as le,a as ce}from"./alert-dialog-BCjXQEnz.js";import{P as de}from"./plus-BQJ6-Ehy.js";import{E as me}from"./ellipsis-vertical-29muOhpK.js";import{P as ue}from"./pencil-9H2eFft0.js";import{T as xe}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./chevron-left-iG3CNZoG.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";import"./useLabelableId-CBddAn5B.js";function E(n){if(!n)return"-";try{return new Date(n).toLocaleString()}catch{return n}}function he(n){const t=n.trim().split(/\s+/);if(t.length<6)return n;const[,r,a]=t;return r.includes("*/")&&a==="*"?`Every ${r.replace("*/","")} min`:r==="0"&&a.includes("*/")?`Every ${a.replace("*/","")}h`:r==="0"&&a==="0"&&t[3]==="*"?"Daily at midnight":r==="0"&&a==="0"&&t[3].includes("*/")?`Every ${t[3].replace("*/","")} days`:n}function He(){var y,D,T;const{t:n}=_(),t=M(),r=R(),{getInt:a,set:k}=A(),j=a("page"),g=20,[l,u]=P.useState(null),d=z({queryKey:["crons",j],queryFn:async()=>{const s=await h.admin.crons.list(),c=(s.items??[]).map(N=>({...N,id:String(N.id)}));return{items:c,total:s.total??c.length,page:1,page_size:g}}}),f=S({mutationFn:({id:s,enabled:c})=>h.admin.crons.toggle(s,c),onSuccess:()=>{m.success(n("cron.scheduleToggled")),r.invalidateQueries({queryKey:["crons"]})},onError:s=>{m.error(s instanceof v?s.message:n("cron.failedToCreate"))}}),C=S({mutationFn:s=>h.admin.crons.delete(s),onSuccess:()=>{m.success(n("cron.scheduleDeleted")),r.invalidateQueries({queryKey:["crons"]})},onError:s=>{m.error(s instanceof v?s.message:n("cron.failedToDelete"))}}),b=((y=d.data)==null?void 0:y.items)??[],w=Math.ceil((((D=d.data)==null?void 0:D.total)??0)/g);return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(F,{size:"sm",onClick:()=>t.push("/crons/new"),children:[e.jsx(de,{className:"size-4"}),n("cron.newSchedule")]})}),e.jsx(W,{children:e.jsx(G,{className:"p-0",children:d.isLoading?e.jsx(ee,{cols:7}):e.jsxs(J,{children:[e.jsx(X,{children:e.jsxs(p,{children:[e.jsx(i,{children:n("cron.labelField")}),e.jsx(i,{children:n("cron.jobType")}),e.jsx(i,{children:n("cron.schedule")}),e.jsx(i,{children:n("cron.lastRun")}),e.jsx(i,{children:n("cron.nextRun")}),e.jsx(i,{children:n("common.status")}),e.jsx(i,{className:"text-end",children:n("common.actions")})]})}),e.jsx(Y,{children:b.length===0?e.jsx(p,{children:e.jsx(o,{colSpan:7,children:e.jsx(se,{icon:H,title:n("cron.noCrons"),description:n("cron.seedHint"),action:{label:n("cron.newSchedule"),onClick:()=>t.push("/crons/new")}})})}):b.map(s=>e.jsxs(p,{children:[e.jsx(o,{children:e.jsxs(L,{href:`/crons/${encodeURIComponent(s.id)}`,className:"block group",children:[e.jsx("div",{className:"font-medium group-hover:underline",children:s.label}),s.plugin_id&&e.jsxs("div",{className:"text-xs text-muted-foreground",children:[n("cron.pluginCol"),": ",s.plugin_id]})]})}),e.jsx(o,{children:e.jsx(O,{variant:"ghost",className:"font-mono text-xs",children:s.job_type})}),e.jsx(o,{children:e.jsxs($,{children:[e.jsx(q,{children:e.jsx("span",{className:"text-sm font-mono",children:he(s.cron_expr)})}),e.jsx(B,{children:e.jsx("code",{className:"text-xs",children:s.cron_expr})})]})}),e.jsx(o,{className:"text-sm text-muted-foreground",children:E(s.last_run_at)}),e.jsx(o,{className:"text-sm",children:E(s.next_run_at)}),e.jsx(o,{children:e.jsx(Z,{checked:s.enabled,disabled:f.isPending,onCheckedChange:c=>f.mutate({id:s.id,enabled:c})})}),e.jsx(o,{className:"text-end",children:e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(I,{children:[e.jsx(K,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(me,{className:"size-4"})}),e.jsxs(Q,{align:"end",children:[e.jsxs(x,{onClick:()=>t.push(`/crons/${encodeURIComponent(s.id)}/edit`),children:[e.jsx(ue,{className:"size-4 me-2"}),"Edit"]}),e.jsxs(x,{onClick:()=>t.push(`/crons/${encodeURIComponent(s.id)}`),children:[e.jsx(U,{className:"size-4 me-2"}),"Logs"]}),e.jsxs(x,{disabled:C.isPending,onClick:()=>u({id:s.id,label:s.label}),children:[e.jsx(xe,{className:"size-4 me-2 text-destructive"}),"Delete"]})]})]})})})]},s.id))})]})})}),e.jsx(V,{page:j,totalPages:w,total:((T=d.data)==null?void 0:T.total)??0,onPageChange:s=>k({page:s})}),e.jsx(ne,{open:!!l,onOpenChange:s=>{s||u(null)},children:e.jsxs(te,{children:[e.jsxs(re,{children:[e.jsx(oe,{children:"Delete"}),e.jsx(ae,{children:n("cron.confirmDeleteSchedule",{name:(l==null?void 0:l.label)??""})})]}),e.jsxs(ie,{children:[e.jsx(le,{children:n("common.cancel")}),e.jsx(ce,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{l&&C.mutate(l.id),u(null)},children:"Delete"})]})]})})]})}export{He as default}; +import{f as P,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as A}from"./use-url-state-BBO3na5E.js";import{ci as _,ce as M,c9 as R,c8 as z,i as F,o as H,aa as L,aE as $,aH as q,aF as B,L as I,R as K,M as Q,N as x,V as U,bK as m,ao as v,aW as h}from"./index-C-i99XXF.js";import{u as S}from"./useMutation-CrSU7LrM.js";import{P as V}from"./pagination-bar-B67t1a6P.js";import{B as O}from"./badge-BxazBb-3.js";import{C as W,a as G}from"./card-BwvuSgdv.js";import{T as J,d as X,e as p,c as i,a as Y,b as o}from"./table-CCu_JPDD.js";import{S as Z}from"./switch-0loFRSXw.js";import{T as ee}from"./table-skeleton-W4NmdKYl.js";import{E as se}from"./empty-state-v8u5VqOl.js";import{A as ne,c as te,f as re,g as oe,d as ae,e as ie,b as le,a as ce}from"./alert-dialog-CqlwlZ39.js";import{P as de}from"./plus-CwjdK202.js";import{E as me}from"./ellipsis-vertical-xZQpERB7.js";import{P as ue}from"./pencil-BzoosANP.js";import{T as xe}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./chevron-left-Dxx6wreE.js";import"./useRegisterFieldControl-BK92wKok.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";import"./useLabelableId-bx9DAHAI.js";function E(n){if(!n)return"-";try{return new Date(n).toLocaleString()}catch{return n}}function he(n){const t=n.trim().split(/\s+/);if(t.length<6)return n;const[,r,a]=t;return r.includes("*/")&&a==="*"?`Every ${r.replace("*/","")} min`:r==="0"&&a.includes("*/")?`Every ${a.replace("*/","")}h`:r==="0"&&a==="0"&&t[3]==="*"?"Daily at midnight":r==="0"&&a==="0"&&t[3].includes("*/")?`Every ${t[3].replace("*/","")} days`:n}function He(){var y,D,T;const{t:n}=_(),t=M(),r=R(),{getInt:a,set:k}=A(),j=a("page"),g=20,[l,u]=P.useState(null),d=z({queryKey:["crons",j],queryFn:async()=>{const s=await h.admin.crons.list(),c=(s.items??[]).map(N=>({...N,id:String(N.id)}));return{items:c,total:s.total??c.length,page:1,page_size:g}}}),f=S({mutationFn:({id:s,enabled:c})=>h.admin.crons.toggle(s,c),onSuccess:()=>{m.success(n("cron.scheduleToggled")),r.invalidateQueries({queryKey:["crons"]})},onError:s=>{m.error(s instanceof v?s.message:n("cron.failedToCreate"))}}),C=S({mutationFn:s=>h.admin.crons.delete(s),onSuccess:()=>{m.success(n("cron.scheduleDeleted")),r.invalidateQueries({queryKey:["crons"]})},onError:s=>{m.error(s instanceof v?s.message:n("cron.failedToDelete"))}}),b=((y=d.data)==null?void 0:y.items)??[],w=Math.ceil((((D=d.data)==null?void 0:D.total)??0)/g);return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(F,{size:"sm",onClick:()=>t.push("/crons/new"),children:[e.jsx(de,{className:"size-4"}),n("cron.newSchedule")]})}),e.jsx(W,{children:e.jsx(G,{className:"p-0",children:d.isLoading?e.jsx(ee,{cols:7}):e.jsxs(J,{children:[e.jsx(X,{children:e.jsxs(p,{children:[e.jsx(i,{children:n("cron.labelField")}),e.jsx(i,{children:n("cron.jobType")}),e.jsx(i,{children:n("cron.schedule")}),e.jsx(i,{children:n("cron.lastRun")}),e.jsx(i,{children:n("cron.nextRun")}),e.jsx(i,{children:n("common.status")}),e.jsx(i,{className:"text-end",children:n("common.actions")})]})}),e.jsx(Y,{children:b.length===0?e.jsx(p,{children:e.jsx(o,{colSpan:7,children:e.jsx(se,{icon:H,title:n("cron.noCrons"),description:n("cron.seedHint"),action:{label:n("cron.newSchedule"),onClick:()=>t.push("/crons/new")}})})}):b.map(s=>e.jsxs(p,{children:[e.jsx(o,{children:e.jsxs(L,{href:`/crons/${encodeURIComponent(s.id)}`,className:"block group",children:[e.jsx("div",{className:"font-medium group-hover:underline",children:s.label}),s.plugin_id&&e.jsxs("div",{className:"text-xs text-muted-foreground",children:[n("cron.pluginCol"),": ",s.plugin_id]})]})}),e.jsx(o,{children:e.jsx(O,{variant:"ghost",className:"font-mono text-xs",children:s.job_type})}),e.jsx(o,{children:e.jsxs($,{children:[e.jsx(q,{children:e.jsx("span",{className:"text-sm font-mono",children:he(s.cron_expr)})}),e.jsx(B,{children:e.jsx("code",{className:"text-xs",children:s.cron_expr})})]})}),e.jsx(o,{className:"text-sm text-muted-foreground",children:E(s.last_run_at)}),e.jsx(o,{className:"text-sm",children:E(s.next_run_at)}),e.jsx(o,{children:e.jsx(Z,{checked:s.enabled,disabled:f.isPending,onCheckedChange:c=>f.mutate({id:s.id,enabled:c})})}),e.jsx(o,{className:"text-end",children:e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(I,{children:[e.jsx(K,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(me,{className:"size-4"})}),e.jsxs(Q,{align:"end",children:[e.jsxs(x,{onClick:()=>t.push(`/crons/${encodeURIComponent(s.id)}/edit`),children:[e.jsx(ue,{className:"size-4 me-2"}),"Edit"]}),e.jsxs(x,{onClick:()=>t.push(`/crons/${encodeURIComponent(s.id)}`),children:[e.jsx(U,{className:"size-4 me-2"}),"Logs"]}),e.jsxs(x,{disabled:C.isPending,onClick:()=>u({id:s.id,label:s.label}),children:[e.jsx(xe,{className:"size-4 me-2 text-destructive"}),"Delete"]})]})]})})})]},s.id))})]})})}),e.jsx(V,{page:j,totalPages:w,total:((T=d.data)==null?void 0:T.total)??0,onPageChange:s=>k({page:s})}),e.jsx(ne,{open:!!l,onOpenChange:s=>{s||u(null)},children:e.jsxs(te,{children:[e.jsxs(re,{children:[e.jsx(oe,{children:"Delete"}),e.jsx(ae,{children:n("cron.confirmDeleteSchedule",{name:(l==null?void 0:l.label)??""})})]}),e.jsxs(ie,{children:[e.jsx(le,{children:n("common.cancel")}),e.jsx(ce,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{l&&C.mutate(l.id),u(null)},children:"Delete"})]})]})})]})}export{He as default}; diff --git a/adminui/assets/currencies-Bt-luwW6.js b/adminui/assets/currencies-DViD13hV.js similarity index 85% rename from adminui/assets/currencies-Bt-luwW6.js rename to adminui/assets/currencies-DViD13hV.js index 23c69158..e46923f9 100644 --- a/adminui/assets/currencies-Bt-luwW6.js +++ b/adminui/assets/currencies-DViD13hV.js @@ -1 +1 @@ -import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as G,c9 as J,c8 as X,i,p as Z,L as $,R as ee,M as se,N as R,aW as v,bK as t,ao as N}from"./index-EC_gIQIi.js";import{C as ne,a as re}from"./card-BhczRj8d.js";import{I as o}from"./input-D7bJWFUq.js";import{L as a}from"./label-BNi6V6qj.js";import{S as _}from"./switch-DhX4UWWe.js";import{T as ce,d as ie,e as b,c as d,a as ae,b as l}from"./table-B0P46Gj-.js";import{D,f as te,a as S,d as T,e as k,c as w}from"./dialog-BvqDo2CN.js";import{B as E}from"./badge-BrOOeG4p.js";import{T as le}from"./table-skeleton-CzRpAQZA.js";import{E as oe}from"./empty-state-DSPTmRGJ.js";import{P as de}from"./plus-BQJ6-Ehy.js";import{E as me}from"./ellipsis-vertical-29muOhpK.js";import{P as ue}from"./pencil-9H2eFft0.js";import{T as xe}from"./trash-2-g-gZl4Oc.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-szO_hZLb.js";import"./useLabelableId-CBddAn5B.js";import"./FormContext-Cvsbmzt5.js";import"./useAriaLabelledBy-DwidVp0f.js";function Be(){const{t:s}=G(),C=J(),[H,m]=r.useState(!1),[c,u]=r.useState(null),[x,h]=r.useState(null),[j,F]=r.useState(""),[p,q]=r.useState(""),[K,Q]=r.useState("2"),[B,I]=r.useState(!0),[y,M]=r.useState(!1),[f,O]=r.useState(""),[P,U]=r.useState(!0),[g,z]=r.useState(!1);async function V(){if(!(!j||!p||y)){M(!0);try{await v.admin.currencies.create({code:j.toUpperCase(),name:p,decimals:BigInt(parseInt(K)||2),is_active:B}),t.success(s("currencies.currencyCreated")),C.invalidateQueries({queryKey:["admin-currencies"]}),m(!1),F(""),q(""),Q("2"),I(!0)}catch(n){t.error(n instanceof N?n.message:s("currencies.failedToCreate"))}finally{M(!1)}}}async function W(){if(!(!c||!f||g)){z(!0);try{await v.admin.currencies.update(c.code,{name:f,is_active:P}),t.success(s("currencies.currencyUpdated")),C.invalidateQueries({queryKey:["admin-currencies"]}),u(null)}catch(n){t.error(n instanceof N?n.message:s("currencies.failedToUpdate"))}finally{z(!1)}}}async function Y(){if(x)try{await v.admin.currencies.delete(x),t.success(s("currencies.currencyDeleted")),C.invalidateQueries({queryKey:["admin-currencies"]})}catch(n){t.error(n instanceof N?n.message:"Failed to delete currency")}finally{h(null)}}const A=X({queryKey:["admin-currencies"],queryFn:()=>v.admin.currencies.list()}),L=A.data??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(D,{open:H,onOpenChange:m,children:[e.jsxs(te,{render:e.jsx(i,{}),children:[e.jsx(de,{className:"size-4"}),s("currencies.newCurrency")]}),e.jsxs(S,{children:[e.jsx(T,{children:e.jsx(k,{children:s("currencies.newCurrency")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.code")}),e.jsx(o,{value:j,onChange:n=>F(n.target.value),placeholder:"USD, CNY, EUR...",className:"uppercase"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.name")}),e.jsx(o,{value:p,onChange:n=>q(n.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.decimals")}),e.jsx(o,{type:"number",min:"0",max:"8",value:K,onChange:n=>Q(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{children:s("common.status")}),e.jsx(_,{checked:B,onCheckedChange:I})]})]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>m(!1),children:s("common.cancel")}),e.jsx(i,{onClick:V,disabled:y||!j||!p,children:s(y?"common.creating":"common.create")})]})]})]})}),e.jsx(ne,{children:e.jsx(re,{className:"p-0",children:A.isLoading?e.jsx(le,{cols:5}):e.jsxs(ce,{children:[e.jsx(ie,{children:e.jsxs(b,{children:[e.jsx(d,{children:s("currencies.code")}),e.jsx(d,{children:s("currencies.name")}),e.jsx(d,{children:s("currencies.decimals")}),e.jsx(d,{children:s("common.status")}),e.jsx(d,{className:"w-10"})]})}),e.jsx(ae,{children:L.length===0?e.jsx(b,{children:e.jsx(l,{colSpan:5,children:e.jsx(oe,{icon:Z,title:s("currencies.noCurrencies"),description:s("currencies.noCurrenciesDesc"),action:{label:s("currencies.newCurrency"),onClick:()=>m(!0)}})})}):L.map(n=>e.jsxs(b,{children:[e.jsx(l,{children:e.jsx(E,{variant:"outline",className:"font-mono",children:n.code})}),e.jsx(l,{children:n.name}),e.jsx(l,{children:Number(n.decimals)}),e.jsx(l,{children:n.is_active?e.jsx(E,{variant:"default",children:s("common.enabled")}):e.jsx(E,{variant:"destructive",children:s("common.disabled")})}),e.jsx(l,{children:e.jsxs($,{children:[e.jsx(ee,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(me,{className:"size-4"})}),e.jsxs(se,{align:"end",children:[e.jsxs(R,{onClick:()=>{u(n),O(n.name),U(n.is_active)},children:[e.jsx(ue,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(R,{onClick:()=>h(n.code),className:"text-destructive",children:[e.jsx(xe,{className:"size-4 me-2"}),s("common.delete")]})]})]})})]},n.code))})]})})}),e.jsx(D,{open:!!c,onOpenChange:n=>{n||u(null)},children:e.jsxs(S,{children:[e.jsx(T,{children:e.jsxs(k,{children:[s("common.edit")," — ",c==null?void 0:c.code]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.code")}),e.jsx(o,{value:(c==null?void 0:c.code)??"",disabled:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.name")}),e.jsx(o,{value:f,onChange:n=>O(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{children:s("common.status")}),e.jsx(_,{checked:P,onCheckedChange:U})]})]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>u(null),children:s("common.cancel")}),e.jsx(i,{onClick:W,disabled:g||!f,children:s(g?"common.saving":"common.save")})]})]})}),e.jsx(D,{open:!!x,onOpenChange:n=>{n||h(null)},children:e.jsxs(S,{children:[e.jsx(T,{children:e.jsx(k,{children:s("common.confirmDelete")})}),e.jsxs("p",{children:["Delete currency ",e.jsx("strong",{children:x}),"?"]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>h(null),children:s("common.cancel")}),e.jsx(i,{variant:"destructive",onClick:Y,children:s("common.delete")})]})]})})]})}export{Be as default}; +import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{ci as G,c9 as J,c8 as X,i,p as Z,L as $,R as ee,M as se,N as R,aW as v,bK as t,ao as N}from"./index-C-i99XXF.js";import{C as ne,a as re}from"./card-BwvuSgdv.js";import{I as o}from"./input-CX4DHDvW.js";import{L as a}from"./label-YdsyMzds.js";import{S as _}from"./switch-0loFRSXw.js";import{T as ce,d as ie,e as b,c as d,a as ae,b as l}from"./table-CCu_JPDD.js";import{D,f as te,a as S,d as T,e as k,c as w}from"./dialog-8LyJX3or.js";import{B as E}from"./badge-BxazBb-3.js";import{T as le}from"./table-skeleton-W4NmdKYl.js";import{E as oe}from"./empty-state-v8u5VqOl.js";import{P as de}from"./plus-CwjdK202.js";import{E as me}from"./ellipsis-vertical-xZQpERB7.js";import{P as ue}from"./pencil-BzoosANP.js";import{T as xe}from"./trash-2-Cxpx5avJ.js";import"./vendor-xyflow-D6gjNkZe.js";import"./useRegisterFieldControl-BK92wKok.js";import"./useLabelableId-bx9DAHAI.js";import"./FormContext-B5vgnUQy.js";import"./useAriaLabelledBy-k6ps6B67.js";function Be(){const{t:s}=G(),C=J(),[H,m]=r.useState(!1),[c,u]=r.useState(null),[x,h]=r.useState(null),[j,F]=r.useState(""),[p,q]=r.useState(""),[K,Q]=r.useState("2"),[B,I]=r.useState(!0),[y,M]=r.useState(!1),[f,O]=r.useState(""),[P,U]=r.useState(!0),[g,z]=r.useState(!1);async function V(){if(!(!j||!p||y)){M(!0);try{await v.admin.currencies.create({code:j.toUpperCase(),name:p,decimals:BigInt(parseInt(K)||2),is_active:B}),t.success(s("currencies.currencyCreated")),C.invalidateQueries({queryKey:["admin-currencies"]}),m(!1),F(""),q(""),Q("2"),I(!0)}catch(n){t.error(n instanceof N?n.message:s("currencies.failedToCreate"))}finally{M(!1)}}}async function W(){if(!(!c||!f||g)){z(!0);try{await v.admin.currencies.update(c.code,{name:f,is_active:P}),t.success(s("currencies.currencyUpdated")),C.invalidateQueries({queryKey:["admin-currencies"]}),u(null)}catch(n){t.error(n instanceof N?n.message:s("currencies.failedToUpdate"))}finally{z(!1)}}}async function Y(){if(x)try{await v.admin.currencies.delete(x),t.success(s("currencies.currencyDeleted")),C.invalidateQueries({queryKey:["admin-currencies"]})}catch(n){t.error(n instanceof N?n.message:"Failed to delete currency")}finally{h(null)}}const A=X({queryKey:["admin-currencies"],queryFn:()=>v.admin.currencies.list()}),L=A.data??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(D,{open:H,onOpenChange:m,children:[e.jsxs(te,{render:e.jsx(i,{}),children:[e.jsx(de,{className:"size-4"}),s("currencies.newCurrency")]}),e.jsxs(S,{children:[e.jsx(T,{children:e.jsx(k,{children:s("currencies.newCurrency")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.code")}),e.jsx(o,{value:j,onChange:n=>F(n.target.value),placeholder:"USD, CNY, EUR...",className:"uppercase"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.name")}),e.jsx(o,{value:p,onChange:n=>q(n.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.decimals")}),e.jsx(o,{type:"number",min:"0",max:"8",value:K,onChange:n=>Q(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{children:s("common.status")}),e.jsx(_,{checked:B,onCheckedChange:I})]})]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>m(!1),children:s("common.cancel")}),e.jsx(i,{onClick:V,disabled:y||!j||!p,children:s(y?"common.creating":"common.create")})]})]})]})}),e.jsx(ne,{children:e.jsx(re,{className:"p-0",children:A.isLoading?e.jsx(le,{cols:5}):e.jsxs(ce,{children:[e.jsx(ie,{children:e.jsxs(b,{children:[e.jsx(d,{children:s("currencies.code")}),e.jsx(d,{children:s("currencies.name")}),e.jsx(d,{children:s("currencies.decimals")}),e.jsx(d,{children:s("common.status")}),e.jsx(d,{className:"w-10"})]})}),e.jsx(ae,{children:L.length===0?e.jsx(b,{children:e.jsx(l,{colSpan:5,children:e.jsx(oe,{icon:Z,title:s("currencies.noCurrencies"),description:s("currencies.noCurrenciesDesc"),action:{label:s("currencies.newCurrency"),onClick:()=>m(!0)}})})}):L.map(n=>e.jsxs(b,{children:[e.jsx(l,{children:e.jsx(E,{variant:"outline",className:"font-mono",children:n.code})}),e.jsx(l,{children:n.name}),e.jsx(l,{children:Number(n.decimals)}),e.jsx(l,{children:n.is_active?e.jsx(E,{variant:"default",children:s("common.enabled")}):e.jsx(E,{variant:"destructive",children:s("common.disabled")})}),e.jsx(l,{children:e.jsxs($,{children:[e.jsx(ee,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(me,{className:"size-4"})}),e.jsxs(se,{align:"end",children:[e.jsxs(R,{onClick:()=>{u(n),O(n.name),U(n.is_active)},children:[e.jsx(ue,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(R,{onClick:()=>h(n.code),className:"text-destructive",children:[e.jsx(xe,{className:"size-4 me-2"}),s("common.delete")]})]})]})})]},n.code))})]})})}),e.jsx(D,{open:!!c,onOpenChange:n=>{n||u(null)},children:e.jsxs(S,{children:[e.jsx(T,{children:e.jsxs(k,{children:[s("common.edit")," — ",c==null?void 0:c.code]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.code")}),e.jsx(o,{value:(c==null?void 0:c.code)??"",disabled:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a,{children:s("currencies.name")}),e.jsx(o,{value:f,onChange:n=>O(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{children:s("common.status")}),e.jsx(_,{checked:P,onCheckedChange:U})]})]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>u(null),children:s("common.cancel")}),e.jsx(i,{onClick:W,disabled:g||!f,children:s(g?"common.saving":"common.save")})]})]})}),e.jsx(D,{open:!!x,onOpenChange:n=>{n||h(null)},children:e.jsxs(S,{children:[e.jsx(T,{children:e.jsx(k,{children:s("common.confirmDelete")})}),e.jsxs("p",{children:["Delete currency ",e.jsx("strong",{children:x}),"?"]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>h(null),children:s("common.cancel")}),e.jsx(i,{variant:"destructive",onClick:Y,children:s("common.delete")})]})]})})]})}export{Be as default}; diff --git a/adminui/assets/dashboard-DYv3GJpR.js b/adminui/assets/dashboard-CyKPvS67.js similarity index 97% rename from adminui/assets/dashboard-DYv3GJpR.js rename to adminui/assets/dashboard-CyKPvS67.js index e5819cc7..28e01b90 100644 --- a/adminui/assets/dashboard-DYv3GJpR.js +++ b/adminui/assets/dashboard-CyKPvS67.js @@ -1,4 +1,4 @@ -import{f as L,j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as F,bR as I,ci as P,c8 as j,az as h,X as Q,ag as W,ay as H,aL as Y,ad as U,i as M,aa as p,_ as Z,aD as V,a4 as X,aW as y}from"./index-EC_gIQIi.js";import{B as G,D as J,b as ee,C as se,c as ae,a as te,A as re,P as oe,L as de,p as le,i as ne}from"./vendor-charts-D2B8BB4s.js";import{C as x,a as g}from"./card-BhczRj8d.js";import{T as ce,d as ie,e as z,c as N,a as me,b as C}from"./table-B0P46Gj-.js";import{D as ue}from"./dollar-sign-D3xsZw5z.js";import{T as xe}from"./trending-up-Dxn5YkG1.js";import"./vendor-xyflow-D6gjNkZe.js";/** +import{f as L,j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as F,bR as I,ci as P,c8 as j,az as h,X as Q,ag as W,ay as H,aL as Y,ad as U,i as M,aa as p,_ as Z,aD as V,a4 as X,aW as y}from"./index-C-i99XXF.js";import{B as G,D as J,b as ee,C as se,c as ae,a as te,A as re,P as oe,L as de,p as le,i as ne}from"./vendor-charts-D2B8BB4s.js";import{C as x,a as g}from"./card-BwvuSgdv.js";import{T as ce,d as ie,e as z,c as N,a as me,b as C}from"./table-CCu_JPDD.js";import{D as ue}from"./dollar-sign-CHi9stcd.js";import{T as xe}from"./trending-up-D4uytIMO.js";import"./vendor-xyflow-D6gjNkZe.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/dialog-BvqDo2CN.js b/adminui/assets/dialog-8LyJX3or.js similarity index 97% rename from adminui/assets/dialog-BvqDo2CN.js rename to adminui/assets/dialog-8LyJX3or.js index fe211998..864bd93b 100644 --- a/adminui/assets/dialog-BvqDo2CN.js +++ b/adminui/assets/dialog-8LyJX3or.js @@ -1 +1 @@ -import{f,j as t}from"./vendor-react-j_G0Dyx0.js";import{bX as w,b9 as M,bS as k,cm as S,bT as z,bU as O,c6 as F,cd as $,C as G,bM as X,J as H,H as K,F as x,aQ as U,i as m,aX as s,K as _,G as A,I as J,E as L}from"./index-EC_gIQIi.js";const Q=f.forwardRef(function(a,r){const{render:n,className:W,style:Y,disabled:g=!1,nativeButton:b=!0,id:D,payload:j,handle:l,...T}=a,d=w(!0),o=(l==null?void 0:l.store)??(d==null?void 0:d.store);if(!o)throw new Error(M(79));const i=k(D),u=o.useState("floatingRootContext"),c=o.useState("isOpenedByTrigger",i),h=o.useState("triggerPopupId",i),p=f.useRef(null),{registerTrigger:v,isMountedByThisTrigger:y}=S(i,p,o,{payload:j}),{getButtonProps:R,buttonRef:C}=z({disabled:g,native:b}),E=O(u,{enabled:u!=null}),I=F(()=>o.select("open"),B=>{o.set("openMethod",B)}),N={disabled:g,open:c},P=o.useState("triggerProps",y);return $("button",a,{state:N,ref:[C,r,v,p],props:[E.reference,P,I,{[G]:"",id:i,"aria-haspopup":"dialog","aria-expanded":c,"aria-controls":h},T,R],stateAttributesMapping:X})});function te({...e}){return t.jsx(H,{"data-slot":"dialog",...e})}function ae({...e}){return t.jsx(Q,{"data-slot":"dialog-trigger",...e})}function q({...e}){return t.jsx(J,{"data-slot":"dialog-portal",...e})}function V({className:e,...a}){return t.jsx(L,{"data-slot":"dialog-overlay",className:s("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",e),...a})}function oe({className:e,children:a,showCloseButton:r=!0,...n}){return t.jsxs(q,{children:[t.jsx(V,{}),t.jsxs(K,{"data-slot":"dialog-content",className:s("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...n,children:[a,r&&t.jsxs(x,{"data-slot":"dialog-close",render:t.jsx(m,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[t.jsx(U,{}),t.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function se({className:e,...a}){return t.jsx("div",{"data-slot":"dialog-header",className:s("flex flex-col gap-2",e),...a})}function re({className:e,showCloseButton:a=!1,children:r,...n}){return t.jsxs("div",{"data-slot":"dialog-footer",className:s("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",e),...n,children:[r,a&&t.jsx(x,{render:t.jsx(m,{variant:"outline"}),children:"Close"})]})}function ne({className:e,...a}){return t.jsx(_,{"data-slot":"dialog-title",className:s("font-heading text-base leading-none font-medium",e),...a})}function ie({className:e,...a}){return t.jsx(A,{"data-slot":"dialog-description",className:s("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",e),...a})}export{te as D,oe as a,ie as b,re as c,se as d,ne as e,ae as f}; +import{f,j as t}from"./vendor-react-j_G0Dyx0.js";import{bX as w,b9 as M,bS as k,cm as S,bT as z,bU as O,c6 as F,cd as $,C as G,bM as X,J as H,H as K,F as x,aQ as U,i as m,aX as s,K as _,G as A,I as J,E as L}from"./index-C-i99XXF.js";const Q=f.forwardRef(function(a,r){const{render:n,className:W,style:Y,disabled:g=!1,nativeButton:b=!0,id:D,payload:j,handle:l,...T}=a,d=w(!0),o=(l==null?void 0:l.store)??(d==null?void 0:d.store);if(!o)throw new Error(M(79));const i=k(D),u=o.useState("floatingRootContext"),c=o.useState("isOpenedByTrigger",i),h=o.useState("triggerPopupId",i),p=f.useRef(null),{registerTrigger:v,isMountedByThisTrigger:y}=S(i,p,o,{payload:j}),{getButtonProps:R,buttonRef:C}=z({disabled:g,native:b}),E=O(u,{enabled:u!=null}),I=F(()=>o.select("open"),B=>{o.set("openMethod",B)}),N={disabled:g,open:c},P=o.useState("triggerProps",y);return $("button",a,{state:N,ref:[C,r,v,p],props:[E.reference,P,I,{[G]:"",id:i,"aria-haspopup":"dialog","aria-expanded":c,"aria-controls":h},T,R],stateAttributesMapping:X})});function te({...e}){return t.jsx(H,{"data-slot":"dialog",...e})}function ae({...e}){return t.jsx(Q,{"data-slot":"dialog-trigger",...e})}function q({...e}){return t.jsx(J,{"data-slot":"dialog-portal",...e})}function V({className:e,...a}){return t.jsx(L,{"data-slot":"dialog-overlay",className:s("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",e),...a})}function oe({className:e,children:a,showCloseButton:r=!0,...n}){return t.jsxs(q,{children:[t.jsx(V,{}),t.jsxs(K,{"data-slot":"dialog-content",className:s("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...n,children:[a,r&&t.jsxs(x,{"data-slot":"dialog-close",render:t.jsx(m,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[t.jsx(U,{}),t.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function se({className:e,...a}){return t.jsx("div",{"data-slot":"dialog-header",className:s("flex flex-col gap-2",e),...a})}function re({className:e,showCloseButton:a=!1,children:r,...n}){return t.jsxs("div",{"data-slot":"dialog-footer",className:s("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",e),...n,children:[r,a&&t.jsx(x,{render:t.jsx(m,{variant:"outline"}),children:"Close"})]})}function ne({className:e,...a}){return t.jsx(_,{"data-slot":"dialog-title",className:s("font-heading text-base leading-none font-medium",e),...a})}function ie({className:e,...a}){return t.jsx(A,{"data-slot":"dialog-description",className:s("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",e),...a})}export{te as D,oe as a,ie as b,re as c,se as d,ne as e,ae as f}; diff --git a/adminui/assets/dollar-sign-D3xsZw5z.js b/adminui/assets/dollar-sign-CHi9stcd.js similarity index 88% rename from adminui/assets/dollar-sign-D3xsZw5z.js rename to adminui/assets/dollar-sign-CHi9stcd.js index 3d0c0f8a..4e8e4a97 100644 --- a/adminui/assets/dollar-sign-D3xsZw5z.js +++ b/adminui/assets/dollar-sign-CHi9stcd.js @@ -1,4 +1,4 @@ -import{a$ as o}from"./index-EC_gIQIi.js";/** +import{a$ as o}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/download-krj7fN-F.js b/adminui/assets/download-mMzV19JZ.js similarity index 88% rename from adminui/assets/download-krj7fN-F.js rename to adminui/assets/download-mMzV19JZ.js index 9c1cd9d8..c28e53c7 100644 --- a/adminui/assets/download-krj7fN-F.js +++ b/adminui/assets/download-mMzV19JZ.js @@ -1,4 +1,4 @@ -import{a$ as o}from"./index-EC_gIQIi.js";/** +import{a$ as o}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/ellipsis-vertical-29muOhpK.js b/adminui/assets/ellipsis-vertical-xZQpERB7.js similarity index 88% rename from adminui/assets/ellipsis-vertical-29muOhpK.js rename to adminui/assets/ellipsis-vertical-xZQpERB7.js index c602c313..00ddbec3 100644 --- a/adminui/assets/ellipsis-vertical-29muOhpK.js +++ b/adminui/assets/ellipsis-vertical-xZQpERB7.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/empty-state-DSPTmRGJ.js b/adminui/assets/empty-state-v8u5VqOl.js similarity index 96% rename from adminui/assets/empty-state-DSPTmRGJ.js rename to adminui/assets/empty-state-v8u5VqOl.js index be6981a0..0a79c7f7 100644 --- a/adminui/assets/empty-state-DSPTmRGJ.js +++ b/adminui/assets/empty-state-v8u5VqOl.js @@ -1,4 +1,4 @@ -import{j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as c,i as r,aX as i}from"./index-EC_gIQIi.js";/** +import{j as e}from"./vendor-react-j_G0Dyx0.js";import{a$ as c,i as r,aX as i}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/eye-CKWvFGCT.js b/adminui/assets/eye-CWoWLAtI.js similarity index 89% rename from adminui/assets/eye-CKWvFGCT.js rename to adminui/assets/eye-CWoWLAtI.js index 2a37c79a..c1feb1f1 100644 --- a/adminui/assets/eye-CKWvFGCT.js +++ b/adminui/assets/eye-CWoWLAtI.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/eye-off-DVsAgCdC.js b/adminui/assets/eye-off-2kPcbyGD.js similarity index 92% rename from adminui/assets/eye-off-DVsAgCdC.js rename to adminui/assets/eye-off-2kPcbyGD.js index 2d72c6dd..d62a2e98 100644 --- a/adminui/assets/eye-off-DVsAgCdC.js +++ b/adminui/assets/eye-off-2kPcbyGD.js @@ -1,4 +1,4 @@ -import{a$ as e}from"./index-EC_gIQIi.js";/** +import{a$ as e}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/field-renderer-7U0JEnRX.js b/adminui/assets/field-renderer-BCQDmn_5.js similarity index 95% rename from adminui/assets/field-renderer-7U0JEnRX.js rename to adminui/assets/field-renderer-BCQDmn_5.js index 951b1290..09fe99c3 100644 --- a/adminui/assets/field-renderer-7U0JEnRX.js +++ b/adminui/assets/field-renderer-BCQDmn_5.js @@ -1,4 +1,4 @@ -import{j as t,f as _}from"./vendor-react-j_G0Dyx0.js";import{I as g}from"./input-D7bJWFUq.js";import{T}from"./textarea-CxSwwTO9.js";import{L as B}from"./label-BNi6V6qj.js";import{B as w}from"./badge-BrOOeG4p.js";import{a$ as k,ci as M,aQ as R,aE as $,aH as v,aF as z,aW as I,i as N}from"./index-EC_gIQIi.js";import{M as O,a as A}from"./multi-media-upload-C_rG1LSF.js";import{k as F}from"./media-utils-Bk0fYNzf.js";import{S as D,e as C,f as U,a as V,c as P}from"./select-BSZ-0tY-.js";import{a as H}from"./types-C-xO67t8.js";import{C as W}from"./check-iV9lQKhJ.js";import{A as q}from"./arrow-right-qNysmirn.js";import{F as Y}from"./file-C64ivkyc.js";import{D as G}from"./download-krj7fN-F.js";import{U as J}from"./upload-DGewhSDK.js";/** +import{j as t,f as _}from"./vendor-react-j_G0Dyx0.js";import{I as g}from"./input-CX4DHDvW.js";import{T}from"./textarea-DxF_RMjI.js";import{L as B}from"./label-YdsyMzds.js";import{B as w}from"./badge-BxazBb-3.js";import{a$ as k,ci as M,aQ as R,aE as $,aH as v,aF as z,aW as I,i as N}from"./index-C-i99XXF.js";import{M as O,a as A}from"./multi-media-upload-_Ew8n5h0.js";import{k as F}from"./media-utils-Dl5crNGr.js";import{S as D,e as C,f as U,a as V,c as P}from"./select-C7HHvgkd.js";import{a as H}from"./types-C-xO67t8.js";import{C as W}from"./check-DsFJjVO2.js";import{A as q}from"./arrow-right-BJVZqhFR.js";import{F as Y}from"./file-CwTg0Lel.js";import{D as G}from"./download-mMzV19JZ.js";import{U as J}from"./upload-InJCWqAU.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/file-C64ivkyc.js b/adminui/assets/file-CwTg0Lel.js similarity index 89% rename from adminui/assets/file-C64ivkyc.js rename to adminui/assets/file-CwTg0Lel.js index 99701f1a..d787a022 100644 --- a/adminui/assets/file-C64ivkyc.js +++ b/adminui/assets/file-CwTg0Lel.js @@ -1,4 +1,4 @@ -import{a$ as a}from"./index-EC_gIQIi.js";/** +import{a$ as a}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/folder-open-Bfr94q9k.js b/adminui/assets/folder-open-CvTrdI2M.js similarity index 90% rename from adminui/assets/folder-open-Bfr94q9k.js rename to adminui/assets/folder-open-CvTrdI2M.js index 6d87cbf2..b75c55f0 100644 --- a/adminui/assets/folder-open-Bfr94q9k.js +++ b/adminui/assets/folder-open-CvTrdI2M.js @@ -1,4 +1,4 @@ -import{a$ as a}from"./index-EC_gIQIi.js";/** +import{a$ as a}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/grip-vertical-CK5uDx11.js b/adminui/assets/grip-vertical-B_S2B2GU.js similarity index 91% rename from adminui/assets/grip-vertical-CK5uDx11.js rename to adminui/assets/grip-vertical-B_S2B2GU.js index b4e4d7a6..cf7c66f0 100644 --- a/adminui/assets/grip-vertical-CK5uDx11.js +++ b/adminui/assets/grip-vertical-B_S2B2GU.js @@ -1,4 +1,4 @@ -import{a$ as c}from"./index-EC_gIQIi.js";/** +import{a$ as c}from"./index-C-i99XXF.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/index-EC_gIQIi.js b/adminui/assets/index-C-i99XXF.js similarity index 51% rename from adminui/assets/index-EC_gIQIi.js rename to adminui/assets/index-C-i99XXF.js index cd9da487..2fb8e366 100644 --- a/adminui/assets/index-EC_gIQIi.js +++ b/adminui/assets/index-C-i99XXF.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/login-Dd-BSiO7.js","assets/vendor-react-j_G0Dyx0.js","assets/zod-YGny3e4W.js","assets/card-BhczRj8d.js","assets/input-D7bJWFUq.js","assets/useRegisterFieldControl-szO_hZLb.js","assets/useLabelableId-CBddAn5B.js","assets/label-BNi6V6qj.js","assets/sms-login-form-CPzLFHjS.js","assets/separator-CYWP0N8k.js","assets/vendor-xyflow-D6gjNkZe.js","assets/vendor-xyflow-BZV40eAE.css","assets/admin-login-CBhSyL8o.js","assets/theme-toggle-Bh88uk5d.js","assets/circle-alert-0_MkNfwO.js","assets/setup-C6cT2IPA.js","assets/tabs-tWGkJT8g.js","assets/eye-off-DVsAgCdC.js","assets/eye-CKWvFGCT.js","assets/register-t_ZpE39j.js","assets/dashboard-DYv3GJpR.js","assets/vendor-charts-D2B8BB4s.js","assets/table-B0P46Gj-.js","assets/dollar-sign-D3xsZw5z.js","assets/trending-up-Dxn5YkG1.js","assets/posts-BdY_OofD.js","assets/use-url-state-BBO3na5E.js","assets/useMutation-C9eWISs8.js","assets/badge-BrOOeG4p.js","assets/checkbox-C7H6TTIF.js","assets/check-iV9lQKhJ.js","assets/FormContext-Cvsbmzt5.js","assets/useAriaLabelledBy-DwidVp0f.js","assets/types-C-xO67t8.js","assets/alert-dialog-BCjXQEnz.js","assets/pagination-bar-Dm-qkwNo.js","assets/chevron-left-iG3CNZoG.js","assets/table-skeleton-CzRpAQZA.js","assets/empty-state-DSPTmRGJ.js","assets/list-filter-BbdaGfbJ.js","assets/select-BSZ-0tY-.js","assets/chevron-up-nN7PIzPd.js","assets/send-BSqicfMI.js","assets/archive-CN6ChZbz.js","assets/trash-2-g-gZl4Oc.js","assets/plus-BQJ6-Ehy.js","assets/ellipsis-vertical-29muOhpK.js","assets/pencil-9H2eFft0.js","assets/categories-B9OwsW23.js","assets/textarea-CxSwwTO9.js","assets/category-tree-select-CjofdK3h.js","assets/folder-open-Bfr94q9k.js","assets/file-C64ivkyc.js","assets/tree-CxnI6aKY.js","assets/vendor-md-editor-C0GoXAL0.js","assets/vendor-md-editor-5RsN_0Ue.css","assets/tags-B3aPdAWD.js","assets/dialog-BvqDo2CN.js","assets/comments-DjqrWPF8.js","assets/circle-check-big-Bv9fC9q8.js","assets/circle-x-h9c8HLLF.js","assets/media-DdY7Cy47.js","assets/media-utils-Bk0fYNzf.js","assets/upload-DGewhSDK.js","assets/copy-Dc6vpmam.js","assets/download-krj7fN-F.js","assets/list-qSUwiUjh.js","assets/pages-DF5SXMmR.js","assets/page-DoizoRZ0.js","assets/content-types-BQ9hs0Sm.js","assets/api-config-sheet-DYpATUBp.js","assets/switch-DhX4UWWe.js","assets/shield-CHlu31na.js","assets/save-z_0HtvcE.js","assets/content-types-builder-Bf6GI96D.js","assets/save-status-DA0tvKRp.js","assets/link-C8_P29JW.js","assets/lock-CT7oh3Ri.js","assets/calendar-BVDFi2CJ.js","assets/content-types-list-UjKS0R8F.js","assets/field-renderer-7U0JEnRX.js","assets/multi-media-upload-C_rG1LSF.js","assets/grip-vertical-CK5uDx11.js","assets/arrow-right-qNysmirn.js","assets/users-Dde_USl_.js","assets/user-detail-uC6cLgA6.js","assets/plugins-6GQrNAek.js","assets/power-ChJINlLf.js","assets/refresh-cw-BrEQ8euV.js","assets/plugin-detail-C1CHGvxW.js","assets/zap-XD-Ba7g-.js","assets/rbac-BgA1vNdA.js","assets/use-resources-DByQInnG.js","assets/crons-DZKDWA5R.js","assets/cron-form-C49pcNBv.js","assets/code-editor-3wDd6_W8.js","assets/cron-detail-DSwKC3J1.js","assets/tenants-CC7u0xIZ.js","assets/webhooks-e418g9v8.js","assets/tokens-l4gibeK6.js","assets/calendar-DJ5bqwJx.js","assets/workflows-BWxurcR6.js","assets/workflow-instances-DkgpFpTw.js","assets/audit-CiyhR0m2.js","assets/options-oVhiz2oQ.js","assets/rotate-ccw-DQQkg8pn.js","assets/reusable-blocks-DZA6bj3g.js","assets/products-C6fjaKZl.js","assets/product-categories-5f7JKQhn.js","assets/orders-TQFGq08R.js","assets/ban-BNncGoT4.js","assets/orders-detail-DwRQy0H6.js","assets/payments-Brr9VP4u.js","assets/payment-orders-koM98e6L.js","assets/payment-transactions-D2rV2pjc.js","assets/currencies-Bt-luwW6.js","assets/wallets-DgvYgyR7.js","assets/product-comments-Bm1ITS7s.js","assets/coupons-Bauwlna-.js","assets/shipping-templates-D_EfVC42.js","assets/plans-BYIxTE9k.js","assets/channels-D7bgfzb1.js","assets/channel-form-D5xba1vF.js","assets/receipts-BQmRpWcc.js","assets/receipt-detail-BW43A0lP.js","assets/api-clients-DH1_s7Dq.js","assets/posts-new-D3ckWKsv.js","assets/tag-input-B_GmTjH-.js","assets/posts-edit-B0Q7IM85.js","assets/pages-new-BHSSb1GZ.js","assets/index-BAC674s0.js","assets/pages-edit-BsuuifZS.js","assets/content-types-new-D5sPZgWq.js","assets/content-types-edit-BjRl11pz.js","assets/workflow-editor-CmGOZn_u.js","assets/products-new-CGR6rh2_.js","assets/products-edit-BLhG1fcu.js","assets/product-categories-new-Cuo4JftH.js","assets/product-categories-edit-DHo5kMHX.js","assets/profile-B9eAzJ84.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/login-DL7dfg5O.js","assets/vendor-react-j_G0Dyx0.js","assets/zod-YGny3e4W.js","assets/card-BwvuSgdv.js","assets/input-CX4DHDvW.js","assets/useRegisterFieldControl-BK92wKok.js","assets/useLabelableId-bx9DAHAI.js","assets/label-YdsyMzds.js","assets/sms-login-form-UIcl_DCA.js","assets/separator-BbBsCOyd.js","assets/vendor-xyflow-D6gjNkZe.js","assets/vendor-xyflow-BZV40eAE.css","assets/admin-login-DEbthX6z.js","assets/theme-toggle-DBriVhwx.js","assets/circle-alert-BhGUNGA_.js","assets/setup-CBBbl7GF.js","assets/tabs-CdDx4vU1.js","assets/eye-off-2kPcbyGD.js","assets/eye-CWoWLAtI.js","assets/register-CYRfUZTa.js","assets/dashboard-CyKPvS67.js","assets/vendor-charts-D2B8BB4s.js","assets/table-CCu_JPDD.js","assets/dollar-sign-CHi9stcd.js","assets/trending-up-D4uytIMO.js","assets/posts-ChaB6GOr.js","assets/use-url-state-BBO3na5E.js","assets/useMutation-CrSU7LrM.js","assets/badge-BxazBb-3.js","assets/checkbox-COY1I8--.js","assets/check-DsFJjVO2.js","assets/FormContext-B5vgnUQy.js","assets/useAriaLabelledBy-k6ps6B67.js","assets/types-C-xO67t8.js","assets/alert-dialog-CqlwlZ39.js","assets/pagination-bar-B67t1a6P.js","assets/chevron-left-Dxx6wreE.js","assets/table-skeleton-W4NmdKYl.js","assets/empty-state-v8u5VqOl.js","assets/list-filter-B4W1P91H.js","assets/select-C7HHvgkd.js","assets/chevron-up-F9cYTMff.js","assets/send-B2zNs9sp.js","assets/archive-DbNEUzmX.js","assets/trash-2-Cxpx5avJ.js","assets/plus-CwjdK202.js","assets/ellipsis-vertical-xZQpERB7.js","assets/pencil-BzoosANP.js","assets/categories-DBjI7GIi.js","assets/textarea-DxF_RMjI.js","assets/category-tree-select-1eIAo9lb.js","assets/folder-open-CvTrdI2M.js","assets/file-CwTg0Lel.js","assets/tree-CczKEFdn.js","assets/vendor-md-editor-C0GoXAL0.js","assets/vendor-md-editor-5RsN_0Ue.css","assets/tags-jWnCuhDZ.js","assets/dialog-8LyJX3or.js","assets/comments-BvXaQcCR.js","assets/circle-check-big-DeL5JaWu.js","assets/circle-x-Dmohp54U.js","assets/media-aANvj7B8.js","assets/media-utils-Dl5crNGr.js","assets/upload-InJCWqAU.js","assets/copy-BNjpvh3F.js","assets/download-mMzV19JZ.js","assets/list-BlZqMnAk.js","assets/pages-LcDefmWW.js","assets/page-BUBQ76AX.js","assets/content-types-DILysgph.js","assets/api-config-sheet-BK_N5Tdt.js","assets/switch-0loFRSXw.js","assets/shield-Whu99Qe6.js","assets/save-LpbBFCdm.js","assets/content-types-builder-eSlZrngY.js","assets/save-status-Blflq74K.js","assets/link-CrjG9QDb.js","assets/lock-BGNDkCgL.js","assets/calendar-Clkjlc7K.js","assets/content-types-list-iPgaOFXk.js","assets/field-renderer-BCQDmn_5.js","assets/multi-media-upload-_Ew8n5h0.js","assets/grip-vertical-B_S2B2GU.js","assets/arrow-right-BJVZqhFR.js","assets/users-C_3fiQg_.js","assets/user-detail-BUSVnphT.js","assets/plugins-BqzU0uOX.js","assets/power-B03uf1kg.js","assets/refresh-cw-C66hlIrU.js","assets/plugin-detail-D46c1aVZ.js","assets/zap-DM3H89Nx.js","assets/rbac-Bg2HN3Sc.js","assets/use-resources-DatFpnFS.js","assets/crons-D8uDQ60o.js","assets/cron-form-C_WGfkzU.js","assets/code-editor-KdP2kfsd.js","assets/cron-detail-CIxWpenY.js","assets/tenants-CJfPRL0D.js","assets/webhooks-C_OCrXUn.js","assets/tokens-D0I7l900.js","assets/calendar-4fvNnW21.js","assets/workflows-DA5YXNWV.js","assets/workflow-instances-DdMQxxP2.js","assets/audit-ST_9ova9.js","assets/options-MWz1iXUA.js","assets/rotate-ccw-Bpc_QVqo.js","assets/reusable-blocks-BorNd0TD.js","assets/products-C2lp7ZGt.js","assets/product-categories-RrliYsxc.js","assets/orders-CVfld8JL.js","assets/ban-Cqa_f7YL.js","assets/orders-detail-BGlVqIvE.js","assets/payments-COqRtzX0.js","assets/payment-orders-D10nnlZh.js","assets/payment-transactions-CUBFa_Hw.js","assets/currencies-DViD13hV.js","assets/wallets-RZNaXply.js","assets/product-comments-ByOz7Rgg.js","assets/coupons-SbgEQKK0.js","assets/shipping-templates-CWPZW_D9.js","assets/plans-Bw46kQ-c.js","assets/channels-Dom5hTtX.js","assets/channel-form-Y_q73Dkt.js","assets/receipts-D1sRxBOO.js","assets/receipt-detail-DTyb0g3h.js","assets/api-clients-BPQgZYAi.js","assets/posts-new-CDHmSZjk.js","assets/tag-input-UhB7H9-3.js","assets/posts-edit-BUpdPur7.js","assets/pages-new-Cvl2A4YP.js","assets/index-Da6tVWfj.js","assets/pages-edit-B59xfcVk.js","assets/content-types-new-DZB3QOJs.js","assets/content-types-edit-kZwcjzpq.js","assets/workflow-editor-BKsx3AN8.js","assets/products-new-Dq0joBFy.js","assets/products-edit-B0M4UmSE.js","assets/product-categories-new-CCw1wAei.js","assets/product-categories-edit-CuNI_9s9.js","assets/profile-l-3ao0oX.js"])))=>i.map(i=>d[i]); var yf=Object.defineProperty;var _l=t=>{throw TypeError(t)};var wf=(t,e,o)=>e in t?yf(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var _e=(t,e,o)=>wf(t,typeof e!="symbol"?e+"":e,o),Zs=(t,e,o)=>e.has(t)||_l("Cannot "+o);var E=(t,e,o)=>(Zs(t,e,"read from private field"),o?o.call(t):e.get(t)),ve=(t,e,o)=>e.has(t)?_l("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,o),ne=(t,e,o,n)=>(Zs(t,e,"write to private field"),n?n.call(t,o):e.set(t,o),o),Me=(t,e,o)=>(Zs(t,e,"access private method"),o);var jr=(t,e,o,n)=>({set _(r){ne(t,e,r,o)},get _(){return E(t,e,n)}});import{f as l,j as u,R as X,b as Pd,a as Ds,r as _t,i as vf,l as Cf,u as Tf,L as kf,N as Aa,O as Sf,e as xf,d as re,c as Df,B as Pf}from"./vendor-react-j_G0Dyx0.js";import{r as Rf,w as Ef}from"./vendor-xyflow-D6gjNkZe.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function o(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(r){if(r.ep)return;r.ep=!0;const s=o(r);fetch(r.href,s)}})();const Af="modulepreload",Nf=function(t){return"/admin/"+t},zl={},pe=function(e,o,n){let r=Promise.resolve();if(o&&o.length>0){let a=function(d){return Promise.all(d.map(c=>Promise.resolve(c).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),m=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=a(o.map(d=>{if(d=Nf(d),d in zl)return;zl[d]=!0;const c=d.endsWith(".css"),p=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${p}`))return;const h=document.createElement("link");if(h.rel=c?"stylesheet":Af,c||(h.as="script"),h.crossOrigin="",h.href=d,m&&h.setAttribute("nonce",m),document.head.appendChild(h),c)return new Promise((y,g)=>{h.addEventListener("load",y),h.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${d}`)))})}))}function s(a){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=a,window.dispatchEvent(i),!i.defaultPrevented)throw a}return r.then(a=>{for(const i of a||[])i.status==="rejected"&&s(i.reason);return e().catch(s)})};var xr=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Zo,Co,Mn,bd,If=(bd=class extends xr{constructor(){super();ve(this,Zo);ve(this,Co);ve(this,Mn);ne(this,Mn,e=>{if(typeof window<"u"&&window.addEventListener){const o=()=>e();return window.addEventListener("visibilitychange",o,!1),()=>{window.removeEventListener("visibilitychange",o)}}})}onSubscribe(){E(this,Co)||this.setEventListener(E(this,Mn))}onUnsubscribe(){var e;this.hasListeners()||((e=E(this,Co))==null||e.call(this),ne(this,Co,void 0))}setEventListener(e){var o;ne(this,Mn,e),(o=E(this,Co))==null||o.call(this),ne(this,Co,e(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()}))}setFocused(e){E(this,Zo)!==e&&(ne(this,Zo,e),this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(o=>{o(e)})}isFocused(){var e;return typeof E(this,Zo)=="boolean"?E(this,Zo):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},Zo=new WeakMap,Co=new WeakMap,Mn=new WeakMap,bd),gi=new If,Of={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t),setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)},To,hi,yd,Ff=(yd=class{constructor(){ve(this,To,Of);ve(this,hi,!1)}setTimeoutProvider(t){ne(this,To,t)}setTimeout(t,e){return E(this,To).setTimeout(t,e)}clearTimeout(t){E(this,To).clearTimeout(t)}setInterval(t,e){return E(this,To).setInterval(t,e)}clearInterval(t){E(this,To).clearInterval(t)}},To=new WeakMap,hi=new WeakMap,yd),Go=new Ff;function Mf(t){setTimeout(t,0)}var Uf=typeof window>"u"||"Deno"in globalThis;function wt(){}function Lf(t,e){return typeof t=="function"?t(e):t}function Na(t){return typeof t=="number"&&t>=0&&t!==1/0}function Rd(t,e){return Math.max(t+(e||0)-Date.now(),0)}function Ao(t,e){return typeof t=="function"?t(e):t}function Rt(t,e){return typeof t=="function"?t(e):t}function Bl(t,e){const{type:o="all",exact:n,fetchStatus:r,predicate:s,queryKey:a,stale:i}=t;if(a){if(n){if(e.queryHash!==bi(a,e.options))return!1}else if(!pr(e.queryKey,a))return!1}if(o!=="all"){const m=e.isActive();if(o==="active"&&!m||o==="inactive"&&m)return!1}return!(typeof i=="boolean"&&e.isStale()!==i||r&&r!==e.state.fetchStatus||s&&!s(e))}function Vl(t,e){const{exact:o,status:n,predicate:r,mutationKey:s}=t;if(s){if(!e.options.mutationKey)return!1;if(o){if(ur(e.options.mutationKey)!==ur(s))return!1}else if(!pr(e.options.mutationKey,s))return!1}return!(n&&e.state.status!==n||r&&!r(e))}function bi(t,e){return((e==null?void 0:e.queryKeyHashFn)||ur)(t)}function ur(t){return JSON.stringify(t,(e,o)=>Oa(o)?Object.keys(o).sort().reduce((n,r)=>(n[r]=o[r],n),{}):o)}function pr(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(e).every(o=>pr(t[o],e[o])):!1}var jf=Object.prototype.hasOwnProperty;function Ed(t,e,o=0){if(t===e)return t;if(o>500)return e;const n=Wl(t)&&Wl(e);if(!n&&!(Oa(t)&&Oa(e)))return e;const s=(n?t:Object.keys(t)).length,a=n?e:Object.keys(e),i=a.length,m=n?new Array(i):{};let d=0;for(let c=0;c{Go.setTimeout(e,t)})}function Fa(t,e,o){return typeof o.structuralSharing=="function"?o.structuralSharing(t,e):o.structuralSharing!==!1?Ed(t,e):e}function zf(t,e,o=0){const n=[...t,e];return o&&n.length>o?n.slice(1):n}function Bf(t,e,o=0){const n=[e,...t];return o&&n.length>o?n.slice(0,-1):n}var yi=Symbol();function Ad(t,e){return!t.queryFn&&(e!=null&&e.initialPromise)?()=>e.initialPromise:!t.queryFn||t.queryFn===yi?()=>Promise.reject(new Error(`Missing queryFn: '${t.queryHash}'`)):t.queryFn}function Nd(t,e){return typeof t=="function"?t(...e):!!t}function Vf(t,e,o){let n=!1,r;return Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(r??(r=e()),n||(n=!0,r.aborted?o():r.addEventListener("abort",o,{once:!0})),r)}),t}var mr=(()=>{let t=()=>Uf;return{isServer(){return t()},setIsServer(e){t=e}}})();function Ma(){let t,e;const o=new Promise((r,s)=>{t=r,e=s});o.status="pending",o.catch(()=>{});function n(r){Object.assign(o,r),delete o.resolve,delete o.reject}return o.resolve=r=>{n({status:"fulfilled",value:r}),t(r)},o.reject=r=>{n({status:"rejected",reason:r}),e(r)},o}var Wf=Mf;function qf(){let t=[],e=0,o=i=>{i()},n=i=>{i()},r=Wf;const s=i=>{e?t.push(i):r(()=>{o(i)})},a=()=>{const i=t;t=[],i.length&&r(()=>{n(()=>{i.forEach(m=>{o(m)})})})};return{batch:i=>{let m;e++;try{m=i()}finally{e--,e||a()}return m},batchCalls:i=>(...m)=>{s(()=>{i(...m)})},schedule:s,setNotifyFunction:i=>{o=i},setBatchNotifyFunction:i=>{n=i},setScheduler:i=>{r=i}}}var lt=qf(),Un,ko,Ln,wd,Hf=(wd=class extends xr{constructor(){super();ve(this,Un,!0);ve(this,ko);ve(this,Ln);ne(this,Ln,e=>{if(typeof window<"u"&&window.addEventListener){const o=()=>e(!0),n=()=>e(!1);return window.addEventListener("online",o,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",o),window.removeEventListener("offline",n)}}})}onSubscribe(){E(this,ko)||this.setEventListener(E(this,Ln))}onUnsubscribe(){var e;this.hasListeners()||((e=E(this,ko))==null||e.call(this),ne(this,ko,void 0))}setEventListener(e){var o;ne(this,Ln,e),(o=E(this,ko))==null||o.call(this),ne(this,ko,e(this.setOnline.bind(this)))}setOnline(e){E(this,Un)!==e&&(ne(this,Un,e),this.listeners.forEach(n=>{n(e)}))}isOnline(){return E(this,Un)}},Un=new WeakMap,ko=new WeakMap,Ln=new WeakMap,wd),ds=new Hf;function $f(t){return Math.min(1e3*2**t,3e4)}function Id(t){return(t??"online")==="online"?ds.isOnline():!0}var Ua=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function Od(t){let e=!1,o=0,n;const r=Ma(),s=()=>r.status!=="pending",a=b=>{var f;if(!s()){const w=new Ua(b);h(w),(f=t.onCancel)==null||f.call(t,w)}},i=()=>{e=!0},m=()=>{e=!1},d=()=>gi.isFocused()&&(t.networkMode==="always"||ds.isOnline())&&t.canRun(),c=()=>Id(t.networkMode)&&t.canRun(),p=b=>{s()||(n==null||n(),r.resolve(b))},h=b=>{s()||(n==null||n(),r.reject(b))},y=()=>new Promise(b=>{var f;n=w=>{(s()||d())&&b(w)},(f=t.onPause)==null||f.call(t)}).then(()=>{var b;n=void 0,s()||(b=t.onContinue)==null||b.call(t)}),g=()=>{if(s())return;let b;const f=o===0?t.initialPromise:void 0;try{b=f??t.fn()}catch(w){b=Promise.reject(w)}Promise.resolve(b).then(p).catch(w=>{var k;if(s())return;const T=t.retry??(mr.isServer()?0:3),v=t.retryDelay??$f,C=typeof v=="function"?v(o,w):v,S=T===!0||typeof T=="number"&&od()?void 0:y()).then(()=>{e?h(w):g()})})};return{promise:r,status:()=>r.status,cancel:a,continue:()=>(n==null||n(),r),cancelRetry:i,continueRetry:m,canStart:c,start:()=>(c()?g():y().then(g),r)}}var en,vd,Fd=(vd=class{constructor(){ve(this,en)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Na(this.gcTime)&&ne(this,en,Go.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(mr.isServer()?1/0:300*1e3))}clearGcTimeout(){E(this,en)!==void 0&&(Go.clearTimeout(E(this,en)),ne(this,en,void 0))}},en=new WeakMap,vd);function Kf(t){return{onFetch:(e,o)=>{var c,p,h,y,g;const n=e.options,r=(h=(p=(c=e.fetchOptions)==null?void 0:c.meta)==null?void 0:p.fetchMore)==null?void 0:h.direction,s=((y=e.state.data)==null?void 0:y.pages)||[],a=((g=e.state.data)==null?void 0:g.pageParams)||[];let i={pages:[],pageParams:[]},m=0;const d=async()=>{let b=!1;const f=v=>{Vf(v,()=>e.signal,()=>b=!0)},w=Ad(e.options,e.fetchOptions),T=async(v,C,S)=>{if(b)return Promise.reject(e.signal.reason);if(C==null&&v.pages.length)return Promise.resolve(v);const P=(()=>{const z={client:e.client,queryKey:e.queryKey,pageParam:C,direction:S?"backward":"forward",meta:e.options.meta};return f(z),z})(),D=await w(P),{maxPages:I}=e.options,N=S?Bf:zf;return{pages:N(v.pages,D,I),pageParams:N(v.pageParams,C,I)}};if(r&&s.length){const v=r==="backward",C=v?Jf:Hl,S={pages:s,pageParams:a},k=C(n,S);i=await T(S,k,v)}else{const v=t??s.length;do{const C=m===0?a[0]??n.initialPageParam:Hl(n,i);if(m>0&&C==null)break;i=await T(i,C),m++}while(m{var b,f;return(f=(b=e.options).persister)==null?void 0:f.call(b,d,{client:e.client,queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},o)}:e.fetchFn=d}}}function Hl(t,{pages:e,pageParams:o}){const n=e.length-1;return e.length>0?t.getNextPageParam(e[n],e,o[n],o):void 0}function Jf(t,{pages:e,pageParams:o}){var n;return e.length>0?(n=t.getPreviousPageParam)==null?void 0:n.call(t,e[0],e,o[0],o):void 0}var jn,tn,_n,Ot,on,at,vr,nn,Pt,Md,so,Cd,Gf=(Cd=class extends Fd{constructor(e){super();ve(this,Pt);ve(this,jn);ve(this,tn);ve(this,_n);ve(this,Ot);ve(this,on);ve(this,at);ve(this,vr);ve(this,nn);ne(this,nn,!1),ne(this,vr,e.defaultOptions),this.setOptions(e.options),this.observers=[],ne(this,on,e.client),ne(this,Ot,E(this,on).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,ne(this,tn,Kl(this.options)),this.state=e.state??E(this,tn),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return E(this,jn)}get promise(){var e;return(e=E(this,at))==null?void 0:e.promise}setOptions(e){if(this.options={...E(this,vr),...e},e!=null&&e._type&&ne(this,jn,e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const o=Kl(this.options);o.data!==void 0&&(this.setState($l(o.data,o.dataUpdatedAt)),ne(this,tn,o))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&E(this,Ot).remove(this)}setData(e,o){const n=Fa(this.state.data,e,this.options);return Me(this,Pt,so).call(this,{data:n,type:"success",dataUpdatedAt:o==null?void 0:o.updatedAt,manual:o==null?void 0:o.manual}),n}setState(e){Me(this,Pt,so).call(this,{type:"setState",state:e})}cancel(e){var n,r;const o=(n=E(this,at))==null?void 0:n.promise;return(r=E(this,at))==null||r.cancel(e),o?o.then(wt).catch(wt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return E(this,tn)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>Rt(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===yi||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>Ao(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!Rd(this.state.dataUpdatedAt,e)}onFocus(){var o;const e=this.observers.find(n=>n.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(o=E(this,at))==null||o.continue()}onOnline(){var o;const e=this.observers.find(n=>n.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(o=E(this,at))==null||o.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),E(this,Ot).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(o=>o!==e),this.observers.length||(E(this,at)&&(E(this,nn)||Me(this,Pt,Md).call(this)?E(this,at).cancel({revert:!0}):E(this,at).cancelRetry()),this.scheduleGc()),E(this,Ot).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Me(this,Pt,so).call(this,{type:"invalidate"})}async fetch(e,o){var d,c,p,h,y,g,b,f,w,T,v;if(this.state.fetchStatus!=="idle"&&((d=E(this,at))==null?void 0:d.status())!=="rejected"){if(this.state.data!==void 0&&(o!=null&&o.cancelRefetch))this.cancel({silent:!0});else if(E(this,at))return E(this,at).continueRetry(),E(this,at).promise}if(e&&this.setOptions(e),!this.options.queryFn){const C=this.observers.find(S=>S.options.queryFn);C&&this.setOptions(C.options)}const n=new AbortController,r=C=>{Object.defineProperty(C,"signal",{enumerable:!0,get:()=>(ne(this,nn,!0),n.signal)})},s=()=>{const C=Ad(this.options,o),k=(()=>{const P={client:E(this,on),queryKey:this.queryKey,meta:this.meta};return r(P),P})();return ne(this,nn,!1),this.options.persister?this.options.persister(C,k,this):C(k)},i=(()=>{const C={fetchOptions:o,options:this.options,queryKey:this.queryKey,client:E(this,on),state:this.state,fetchFn:s};return r(C),C})(),m=E(this,jn)==="infinite"?Kf(this.options.pages):this.options.behavior;m==null||m.onFetch(i,this),ne(this,_n,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((c=i.fetchOptions)==null?void 0:c.meta))&&Me(this,Pt,so).call(this,{type:"fetch",meta:(p=i.fetchOptions)==null?void 0:p.meta}),ne(this,at,Od({initialPromise:o==null?void 0:o.initialPromise,fn:i.fetchFn,onCancel:C=>{C instanceof Ua&&C.revert&&this.setState({...E(this,_n),fetchStatus:"idle"}),n.abort()},onFail:(C,S)=>{Me(this,Pt,so).call(this,{type:"failed",failureCount:C,error:S})},onPause:()=>{Me(this,Pt,so).call(this,{type:"pause"})},onContinue:()=>{Me(this,Pt,so).call(this,{type:"continue"})},retry:i.options.retry,retryDelay:i.options.retryDelay,networkMode:i.options.networkMode,canRun:()=>!0}));try{const C=await E(this,at).start();if(C===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(C),(y=(h=E(this,Ot).config).onSuccess)==null||y.call(h,C,this),(b=(g=E(this,Ot).config).onSettled)==null||b.call(g,C,this.state.error,this),C}catch(C){if(C instanceof Ua){if(C.silent)return E(this,at).promise;if(C.revert){if(this.state.data===void 0)throw C;return this.state.data}}throw Me(this,Pt,so).call(this,{type:"error",error:C}),(w=(f=E(this,Ot).config).onError)==null||w.call(f,C,this),(v=(T=E(this,Ot).config).onSettled)==null||v.call(T,this.state.data,C,this),C}finally{this.scheduleGc()}}},jn=new WeakMap,tn=new WeakMap,_n=new WeakMap,Ot=new WeakMap,on=new WeakMap,at=new WeakMap,vr=new WeakMap,nn=new WeakMap,Pt=new WeakSet,Md=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},so=function(e){const o=n=>{switch(e.type){case"failed":return{...n,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...Ud(n.data,this.options),fetchMeta:e.meta??null};case"success":const r={...n,...$l(e.data,e.dataUpdatedAt),dataUpdateCount:n.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return ne(this,_n,e.manual?r:void 0),r;case"error":const s=e.error;return{...n,error:s,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:s,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...e.state}}};this.state=o(this.state),lt.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),E(this,Ot).notify({query:this,type:"updated",action:e})})},Cd);function Ud(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Id(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function $l(t,e){return{data:t,dataUpdatedAt:e??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Kl(t){const e=typeof t.initialData=="function"?t.initialData():t.initialData,o=e!==void 0,n=o?typeof t.initialDataUpdatedAt=="function"?t.initialDataUpdatedAt():t.initialDataUpdatedAt:0;return{data:e,dataUpdateCount:0,dataUpdatedAt:o?n??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:o?"success":"pending",fetchStatus:"idle"}}var bt,Ue,Cr,mt,rn,zn,io,So,Tr,Bn,Vn,sn,an,xo,Wn,Be,ir,La,ja,_a,za,Ba,Va,Wa,Ld,Td,Yf=(Td=class extends xr{constructor(e,o){super();ve(this,Be);ve(this,bt);ve(this,Ue);ve(this,Cr);ve(this,mt);ve(this,rn);ve(this,zn);ve(this,io);ve(this,So);ve(this,Tr);ve(this,Bn);ve(this,Vn);ve(this,sn);ve(this,an);ve(this,xo);ve(this,Wn,new Set);this.options=o,ne(this,bt,e),ne(this,So,null),ne(this,io,Ma()),this.bindMethods(),this.setOptions(o)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(E(this,Ue).addObserver(this),Jl(E(this,Ue),this.options)?Me(this,Be,ir).call(this):this.updateResult(),Me(this,Be,za).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return qa(E(this,Ue),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return qa(E(this,Ue),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Me(this,Be,Ba).call(this),Me(this,Be,Va).call(this),E(this,Ue).removeObserver(this)}setOptions(e){const o=this.options,n=E(this,Ue);if(this.options=E(this,bt).defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Rt(this.options.enabled,E(this,Ue))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Me(this,Be,Wa).call(this),E(this,Ue).setOptions(this.options),o._defaulted&&!Ia(this.options,o)&&E(this,bt).getQueryCache().notify({type:"observerOptionsUpdated",query:E(this,Ue),observer:this});const r=this.hasListeners();r&&Gl(E(this,Ue),n,this.options,o)&&Me(this,Be,ir).call(this),this.updateResult(),r&&(E(this,Ue)!==n||Rt(this.options.enabled,E(this,Ue))!==Rt(o.enabled,E(this,Ue))||Ao(this.options.staleTime,E(this,Ue))!==Ao(o.staleTime,E(this,Ue)))&&Me(this,Be,La).call(this);const s=Me(this,Be,ja).call(this);r&&(E(this,Ue)!==n||Rt(this.options.enabled,E(this,Ue))!==Rt(o.enabled,E(this,Ue))||s!==E(this,xo))&&Me(this,Be,_a).call(this,s)}getOptimisticResult(e){const o=E(this,bt).getQueryCache().build(E(this,bt),e),n=this.createResult(o,e);return Xf(this,n)&&(ne(this,mt,n),ne(this,zn,this.options),ne(this,rn,E(this,Ue).state)),n}getCurrentResult(){return E(this,mt)}trackResult(e,o){return new Proxy(e,{get:(n,r)=>(this.trackProp(r),o==null||o(r),r==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&E(this,io).status==="pending"&&E(this,io).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(n,r))})}trackProp(e){E(this,Wn).add(e)}getCurrentQuery(){return E(this,Ue)}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const o=E(this,bt).defaultQueryOptions(e),n=E(this,bt).getQueryCache().build(E(this,bt),o);return n.fetch().then(()=>this.createResult(n,o))}fetch(e){return Me(this,Be,ir).call(this,{...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),E(this,mt)))}createResult(e,o){var I;const n=E(this,Ue),r=this.options,s=E(this,mt),a=E(this,rn),i=E(this,zn),d=e!==n?e.state:E(this,Cr),{state:c}=e;let p={...c},h=!1,y;if(o._optimisticResults){const N=this.hasListeners(),z=!N&&Jl(e,o),U=N&&Gl(e,n,o,r);(z||U)&&(p={...p,...Ud(c.data,e.options)}),o._optimisticResults==="isRestoring"&&(p.fetchStatus="idle")}let{error:g,errorUpdatedAt:b,status:f}=p;y=p.data;let w=!1;if(o.placeholderData!==void 0&&y===void 0&&f==="pending"){let N;s!=null&&s.isPlaceholderData&&o.placeholderData===(i==null?void 0:i.placeholderData)?(N=s.data,w=!0):N=typeof o.placeholderData=="function"?o.placeholderData((I=E(this,Vn))==null?void 0:I.state.data,E(this,Vn)):o.placeholderData,N!==void 0&&(f="success",y=Fa(s==null?void 0:s.data,N,o),h=!0)}if(o.select&&y!==void 0&&!w)if(s&&y===(a==null?void 0:a.data)&&o.select===E(this,Tr))y=E(this,Bn);else try{ne(this,Tr,o.select),y=o.select(y),y=Fa(s==null?void 0:s.data,y,o),ne(this,Bn,y),ne(this,So,null)}catch(N){ne(this,So,N)}E(this,So)&&(g=E(this,So),y=E(this,Bn),b=Date.now(),f="error");const T=p.fetchStatus==="fetching",v=f==="pending",C=f==="error",S=v&&T,k=y!==void 0,D={status:f,fetchStatus:p.fetchStatus,isPending:v,isSuccess:f==="success",isError:C,isInitialLoading:S,isLoading:S,data:y,dataUpdatedAt:p.dataUpdatedAt,error:g,errorUpdatedAt:b,failureCount:p.fetchFailureCount,failureReason:p.fetchFailureReason,errorUpdateCount:p.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:p.dataUpdateCount>d.dataUpdateCount||p.errorUpdateCount>d.errorUpdateCount,isFetching:T,isRefetching:T&&!v,isLoadingError:C&&!k,isPaused:p.fetchStatus==="paused",isPlaceholderData:h,isRefetchError:C&&k,isStale:wi(e,o),refetch:this.refetch,promise:E(this,io),isEnabled:Rt(o.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const N=D.data!==void 0,z=D.status==="error"&&!N,U=O=>{z?O.reject(D.error):N&&O.resolve(D.data)},R=()=>{const O=ne(this,io,D.promise=Ma());U(O)},W=E(this,io);switch(W.status){case"pending":e.queryHash===n.queryHash&&U(W);break;case"fulfilled":(z||D.data!==W.value)&&R();break;case"rejected":(!z||D.error!==W.reason)&&R();break}}return D}updateResult(){const e=E(this,mt),o=this.createResult(E(this,Ue),this.options);if(ne(this,rn,E(this,Ue).state),ne(this,zn,this.options),E(this,rn).data!==void 0&&ne(this,Vn,E(this,Ue)),Ia(o,e))return;ne(this,mt,o);const n=()=>{if(!e)return!0;const{notifyOnChangeProps:r}=this.options,s=typeof r=="function"?r():r;if(s==="all"||!s&&!E(this,Wn).size)return!0;const a=new Set(s??E(this,Wn));return this.options.throwOnError&&a.add("error"),Object.keys(E(this,mt)).some(i=>{const m=i;return E(this,mt)[m]!==e[m]&&a.has(m)})};Me(this,Be,Ld).call(this,{listeners:n()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Me(this,Be,za).call(this)}},bt=new WeakMap,Ue=new WeakMap,Cr=new WeakMap,mt=new WeakMap,rn=new WeakMap,zn=new WeakMap,io=new WeakMap,So=new WeakMap,Tr=new WeakMap,Bn=new WeakMap,Vn=new WeakMap,sn=new WeakMap,an=new WeakMap,xo=new WeakMap,Wn=new WeakMap,Be=new WeakSet,ir=function(e){Me(this,Be,Wa).call(this);let o=E(this,Ue).fetch(this.options,e);return e!=null&&e.throwOnError||(o=o.catch(wt)),o},La=function(){Me(this,Be,Ba).call(this);const e=Ao(this.options.staleTime,E(this,Ue));if(mr.isServer()||E(this,mt).isStale||!Na(e))return;const n=Rd(E(this,mt).dataUpdatedAt,e)+1;ne(this,sn,Go.setTimeout(()=>{E(this,mt).isStale||this.updateResult()},n))},ja=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(E(this,Ue)):this.options.refetchInterval)??!1},_a=function(e){Me(this,Be,Va).call(this),ne(this,xo,e),!(mr.isServer()||Rt(this.options.enabled,E(this,Ue))===!1||!Na(E(this,xo))||E(this,xo)===0)&&ne(this,an,Go.setInterval(()=>{(this.options.refetchIntervalInBackground||gi.isFocused())&&Me(this,Be,ir).call(this)},E(this,xo)))},za=function(){Me(this,Be,La).call(this),Me(this,Be,_a).call(this,Me(this,Be,ja).call(this))},Ba=function(){E(this,sn)!==void 0&&(Go.clearTimeout(E(this,sn)),ne(this,sn,void 0))},Va=function(){E(this,an)!==void 0&&(Go.clearInterval(E(this,an)),ne(this,an,void 0))},Wa=function(){const e=E(this,bt).getQueryCache().build(E(this,bt),this.options);if(e===E(this,Ue))return;const o=E(this,Ue);ne(this,Ue,e),ne(this,Cr,e.state),this.hasListeners()&&(o==null||o.removeObserver(this),e.addObserver(this))},Ld=function(e){lt.batch(()=>{e.listeners&&this.listeners.forEach(o=>{o(E(this,mt))}),E(this,bt).getQueryCache().notify({query:E(this,Ue),type:"observerResultsUpdated"})})},Td);function Qf(t,e){return Rt(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&Rt(e.retryOnMount,t)===!1)}function Jl(t,e){return Qf(t,e)||t.state.data!==void 0&&qa(t,e,e.refetchOnMount)}function qa(t,e,o){if(Rt(e.enabled,t)!==!1&&Ao(e.staleTime,t)!=="static"){const n=typeof o=="function"?o(t):o;return n==="always"||n!==!1&&wi(t,e)}return!1}function Gl(t,e,o,n){return(t!==e||Rt(n.enabled,t)===!1)&&(!o.suspense||t.state.status!=="error")&&wi(t,o)}function wi(t,e){return Rt(e.enabled,t)!==!1&&t.isStaleByTime(Ao(e.staleTime,t))}function Xf(t,e){return!Ia(t.getCurrentResult(),e)}var kr,$t,dt,ln,Kt,yo,kd,Zf=(kd=class extends Fd{constructor(e){super();ve(this,Kt);ve(this,kr);ve(this,$t);ve(this,dt);ve(this,ln);ne(this,kr,e.client),this.mutationId=e.mutationId,ne(this,dt,e.mutationCache),ne(this,$t,[]),this.state=e.state||eh(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){E(this,$t).includes(e)||(E(this,$t).push(e),this.clearGcTimeout(),E(this,dt).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){ne(this,$t,E(this,$t).filter(o=>o!==e)),this.scheduleGc(),E(this,dt).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){E(this,$t).length||(this.state.status==="pending"?this.scheduleGc():E(this,dt).remove(this))}continue(){var e;return((e=E(this,ln))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var a,i,m,d,c,p,h,y,g,b,f,w,T,v,C,S,k,P;const o=()=>{Me(this,Kt,yo).call(this,{type:"continue"})},n={client:E(this,kr),meta:this.options.meta,mutationKey:this.options.mutationKey};ne(this,ln,Od({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(new Error("No mutationFn found")),onFail:(D,I)=>{Me(this,Kt,yo).call(this,{type:"failed",failureCount:D,error:I})},onPause:()=>{Me(this,Kt,yo).call(this,{type:"pause"})},onContinue:o,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>E(this,dt).canRun(this)}));const r=this.state.status==="pending",s=!E(this,ln).canStart();try{if(r)o();else{Me(this,Kt,yo).call(this,{type:"pending",variables:e,isPaused:s}),E(this,dt).config.onMutate&&await E(this,dt).config.onMutate(e,this,n);const I=await((i=(a=this.options).onMutate)==null?void 0:i.call(a,e,n));I!==this.state.context&&Me(this,Kt,yo).call(this,{type:"pending",context:I,variables:e,isPaused:s})}const D=await E(this,ln).start();return await((d=(m=E(this,dt).config).onSuccess)==null?void 0:d.call(m,D,e,this.state.context,this,n)),await((p=(c=this.options).onSuccess)==null?void 0:p.call(c,D,e,this.state.context,n)),await((y=(h=E(this,dt).config).onSettled)==null?void 0:y.call(h,D,null,this.state.variables,this.state.context,this,n)),await((b=(g=this.options).onSettled)==null?void 0:b.call(g,D,null,e,this.state.context,n)),Me(this,Kt,yo).call(this,{type:"success",data:D}),D}catch(D){try{await((w=(f=E(this,dt).config).onError)==null?void 0:w.call(f,D,e,this.state.context,this,n))}catch(I){Promise.reject(I)}try{await((v=(T=this.options).onError)==null?void 0:v.call(T,D,e,this.state.context,n))}catch(I){Promise.reject(I)}try{await((S=(C=E(this,dt).config).onSettled)==null?void 0:S.call(C,void 0,D,this.state.variables,this.state.context,this,n))}catch(I){Promise.reject(I)}try{await((P=(k=this.options).onSettled)==null?void 0:P.call(k,void 0,D,e,this.state.context,n))}catch(I){Promise.reject(I)}throw Me(this,Kt,yo).call(this,{type:"error",error:D}),D}finally{E(this,dt).runNext(this)}}},kr=new WeakMap,$t=new WeakMap,dt=new WeakMap,ln=new WeakMap,Kt=new WeakSet,yo=function(e){const o=n=>{switch(e.type){case"failed":return{...n,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...n,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:e.error,failureCount:n.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=o(this.state),lt.batch(()=>{E(this,$t).forEach(n=>{n.onMutationUpdate(e)}),E(this,dt).notify({mutation:this,type:"updated",action:e})})},kd);function eh(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var lo,Lt,Sr,Sd,th=(Sd=class extends xr{constructor(e={}){super();ve(this,lo);ve(this,Lt);ve(this,Sr);this.config=e,ne(this,lo,new Set),ne(this,Lt,new Map),ne(this,Sr,0)}build(e,o,n){const r=new Zf({client:e,mutationCache:this,mutationId:++jr(this,Sr)._,options:e.defaultMutationOptions(o),state:n});return this.add(r),r}add(e){E(this,lo).add(e);const o=_r(e);if(typeof o=="string"){const n=E(this,Lt).get(o);n?n.push(e):E(this,Lt).set(o,[e])}this.notify({type:"added",mutation:e})}remove(e){if(E(this,lo).delete(e)){const o=_r(e);if(typeof o=="string"){const n=E(this,Lt).get(o);if(n)if(n.length>1){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}else n[0]===e&&E(this,Lt).delete(o)}}this.notify({type:"removed",mutation:e})}canRun(e){const o=_r(e);if(typeof o=="string"){const n=E(this,Lt).get(o),r=n==null?void 0:n.find(s=>s.state.status==="pending");return!r||r===e}else return!0}runNext(e){var n;const o=_r(e);if(typeof o=="string"){const r=(n=E(this,Lt).get(o))==null?void 0:n.find(s=>s!==e&&s.state.isPaused);return(r==null?void 0:r.continue())??Promise.resolve()}else return Promise.resolve()}clear(){lt.batch(()=>{E(this,lo).forEach(e=>{this.notify({type:"removed",mutation:e})}),E(this,lo).clear(),E(this,Lt).clear()})}getAll(){return Array.from(E(this,lo))}find(e){const o={exact:!0,...e};return this.getAll().find(n=>Vl(o,n))}findAll(e={}){return this.getAll().filter(o=>Vl(e,o))}notify(e){lt.batch(()=>{this.listeners.forEach(o=>{o(e)})})}resumePausedMutations(){const e=this.getAll().filter(o=>o.state.isPaused);return lt.batch(()=>Promise.all(e.map(o=>o.continue().catch(wt))))}},lo=new WeakMap,Lt=new WeakMap,Sr=new WeakMap,Sd);function _r(t){var e;return(e=t.options.scope)==null?void 0:e.id}var Jt,xd,oh=(xd=class extends xr{constructor(e={}){super();ve(this,Jt);this.config=e,ne(this,Jt,new Map)}build(e,o,n){const r=o.queryKey,s=o.queryHash??bi(r,o);let a=this.get(s);return a||(a=new Gf({client:e,queryKey:r,queryHash:s,options:e.defaultQueryOptions(o),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){E(this,Jt).has(e.queryHash)||(E(this,Jt).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const o=E(this,Jt).get(e.queryHash);o&&(e.destroy(),o===e&&E(this,Jt).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){lt.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return E(this,Jt).get(e)}getAll(){return[...E(this,Jt).values()]}find(e){const o={exact:!0,...e};return this.getAll().find(n=>Bl(o,n))}findAll(e={}){const o=this.getAll();return Object.keys(e).length>0?o.filter(n=>Bl(e,n)):o}notify(e){lt.batch(()=>{this.listeners.forEach(o=>{o(e)})})}onFocus(){lt.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){lt.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Jt=new WeakMap,xd),Qe,Do,Po,qn,Hn,Ro,$n,Kn,Dd,nh=(Dd=class{constructor(t={}){ve(this,Qe);ve(this,Do);ve(this,Po);ve(this,qn);ve(this,Hn);ve(this,Ro);ve(this,$n);ve(this,Kn);ne(this,Qe,t.queryCache||new oh),ne(this,Do,t.mutationCache||new th),ne(this,Po,t.defaultOptions||{}),ne(this,qn,new Map),ne(this,Hn,new Map),ne(this,Ro,0)}mount(){jr(this,Ro)._++,E(this,Ro)===1&&(ne(this,$n,gi.subscribe(async t=>{t&&(await this.resumePausedMutations(),E(this,Qe).onFocus())})),ne(this,Kn,ds.subscribe(async t=>{t&&(await this.resumePausedMutations(),E(this,Qe).onOnline())})))}unmount(){var t,e;jr(this,Ro)._--,E(this,Ro)===0&&((t=E(this,$n))==null||t.call(this),ne(this,$n,void 0),(e=E(this,Kn))==null||e.call(this),ne(this,Kn,void 0))}isFetching(t){return E(this,Qe).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return E(this,Do).findAll({...t,status:"pending"}).length}getQueryData(t){var o;const e=this.defaultQueryOptions({queryKey:t});return(o=E(this,Qe).get(e.queryHash))==null?void 0:o.state.data}ensureQueryData(t){const e=this.defaultQueryOptions(t),o=E(this,Qe).build(this,e),n=o.state.data;return n===void 0?this.fetchQuery(t):(t.revalidateIfStale&&o.isStaleByTime(Ao(e.staleTime,o))&&this.prefetchQuery(e),Promise.resolve(n))}getQueriesData(t){return E(this,Qe).findAll(t).map(({queryKey:e,state:o})=>{const n=o.data;return[e,n]})}setQueryData(t,e,o){const n=this.defaultQueryOptions({queryKey:t}),r=E(this,Qe).get(n.queryHash),s=r==null?void 0:r.state.data,a=Lf(e,s);if(a!==void 0)return E(this,Qe).build(this,n).setData(a,{...o,manual:!0})}setQueriesData(t,e,o){return lt.batch(()=>E(this,Qe).findAll(t).map(({queryKey:n})=>[n,this.setQueryData(n,e,o)]))}getQueryState(t){var o;const e=this.defaultQueryOptions({queryKey:t});return(o=E(this,Qe).get(e.queryHash))==null?void 0:o.state}removeQueries(t){const e=E(this,Qe);lt.batch(()=>{e.findAll(t).forEach(o=>{e.remove(o)})})}resetQueries(t,e){const o=E(this,Qe);return lt.batch(()=>(o.findAll(t).forEach(n=>{n.reset()}),this.refetchQueries({type:"active",...t},e)))}cancelQueries(t,e={}){const o={revert:!0,...e},n=lt.batch(()=>E(this,Qe).findAll(t).map(r=>r.cancel(o)));return Promise.all(n).then(wt).catch(wt)}invalidateQueries(t,e={}){return lt.batch(()=>(E(this,Qe).findAll(t).forEach(o=>{o.invalidate()}),(t==null?void 0:t.refetchType)==="none"?Promise.resolve():this.refetchQueries({...t,type:(t==null?void 0:t.refetchType)??(t==null?void 0:t.type)??"active"},e)))}refetchQueries(t,e={}){const o={...e,cancelRefetch:e.cancelRefetch??!0},n=lt.batch(()=>E(this,Qe).findAll(t).filter(r=>!r.isDisabled()&&!r.isStatic()).map(r=>{let s=r.fetch(void 0,o);return o.throwOnError||(s=s.catch(wt)),r.state.fetchStatus==="paused"?Promise.resolve():s}));return Promise.all(n).then(wt)}fetchQuery(t){const e=this.defaultQueryOptions(t);e.retry===void 0&&(e.retry=!1);const o=E(this,Qe).build(this,e);return o.isStaleByTime(Ao(e.staleTime,o))?o.fetch(e):Promise.resolve(o.state.data)}prefetchQuery(t){return this.fetchQuery(t).then(wt).catch(wt)}fetchInfiniteQuery(t){return t._type="infinite",this.fetchQuery(t)}prefetchInfiniteQuery(t){return this.fetchInfiniteQuery(t).then(wt).catch(wt)}ensureInfiniteQueryData(t){return t._type="infinite",this.ensureQueryData(t)}resumePausedMutations(){return ds.isOnline()?E(this,Do).resumePausedMutations():Promise.resolve()}getQueryCache(){return E(this,Qe)}getMutationCache(){return E(this,Do)}getDefaultOptions(){return E(this,Po)}setDefaultOptions(t){ne(this,Po,t)}setQueryDefaults(t,e){E(this,qn).set(ur(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...E(this,qn).values()],o={};return e.forEach(n=>{pr(t,n.queryKey)&&Object.assign(o,n.defaultOptions)}),o}setMutationDefaults(t,e){E(this,Hn).set(ur(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...E(this,Hn).values()],o={};return e.forEach(n=>{pr(t,n.mutationKey)&&Object.assign(o,n.defaultOptions)}),o}defaultQueryOptions(t){if(t._defaulted)return t;const e={...E(this,Po).queries,...this.getQueryDefaults(t.queryKey),...t,_defaulted:!0};return e.queryHash||(e.queryHash=bi(e.queryKey,e)),e.refetchOnReconnect===void 0&&(e.refetchOnReconnect=e.networkMode!=="always"),e.throwOnError===void 0&&(e.throwOnError=!!e.suspense),!e.networkMode&&e.persister&&(e.networkMode="offlineFirst"),e.queryFn===yi&&(e.enabled=!1),e}defaultMutationOptions(t){return t!=null&&t._defaulted?t:{...E(this,Po).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){E(this,Qe).clear(),E(this,Do).clear()}},Qe=new WeakMap,Do=new WeakMap,Po=new WeakMap,qn=new WeakMap,Hn=new WeakMap,Ro=new WeakMap,$n=new WeakMap,Kn=new WeakMap,Dd),jd=l.createContext(void 0),_d=t=>{const e=l.useContext(jd);if(!e)throw new Error("No QueryClient set, use QueryClientProvider to set one");return e},rh=({client:t,children:e})=>(l.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),u.jsx(jd.Provider,{value:t,children:e})),zd=l.createContext(!1),sh=()=>l.useContext(zd);zd.Provider;function ah(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var ih=l.createContext(ah()),lh=()=>l.useContext(ih),ch=(t,e,o)=>{const n=o!=null&&o.state.error&&typeof t.throwOnError=="function"?Nd(t.throwOnError,[o.state.error,o]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||n)&&(e.isReset()||(t.retryOnMount=!1))},dh=t=>{l.useEffect(()=>{t.clearReset()},[t])},uh=({result:t,errorResetBoundary:e,throwOnError:o,query:n,suspense:r})=>t.isError&&!e.isReset()&&!t.isFetching&&n&&(r&&t.data===void 0||Nd(o,[t.error,n])),ph=t=>{if(t.suspense){const o=r=>r==="static"?r:Math.max(r??1e3,1e3),n=t.staleTime;t.staleTime=typeof n=="function"?(...r)=>o(n(...r)):o(n),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},mh=(t,e)=>t.isLoading&&t.isFetching&&!e,fh=(t,e)=>(t==null?void 0:t.suspense)&&e.isPending,Yl=(t,e,o)=>e.fetchOptimistic(t).catch(()=>{o.clearReset()});function hh(t,e,o){var y,g,b,f;const n=sh(),r=lh(),s=_d(),a=s.defaultQueryOptions(t);(g=(y=s.getDefaultOptions().queries)==null?void 0:y._experimental_beforeQuery)==null||g.call(y,a);const i=s.getQueryCache().get(a.queryHash),m=t.subscribed!==!1;a._optimisticResults=n?"isRestoring":m?"optimistic":void 0,ph(a),ch(a,r,i),dh(r);const d=!s.getQueryCache().get(a.queryHash),[c]=l.useState(()=>new e(s,a)),p=c.getOptimisticResult(a),h=!n&&m;if(l.useSyncExternalStore(l.useCallback(w=>{const T=h?c.subscribe(lt.batchCalls(w)):wt;return c.updateResult(),T},[c,h]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),l.useEffect(()=>{c.setOptions(a)},[a,c]),fh(a,p))throw Yl(a,c,r);if(uh({result:p,errorResetBoundary:r,throwOnError:a.throwOnError,query:i,suspense:a.suspense}))throw p.error;if((f=(b=s.getDefaultOptions().queries)==null?void 0:b._experimental_afterQuery)==null||f.call(b,a,p),a.experimental_prefetchInRender&&!mr.isServer()&&mh(p,n)){const w=d?Yl(a,c,r):i==null?void 0:i.promise;w==null||w.catch(wt).finally(()=>{c.updateResult()})}return a.notifyOnChangeProps?p:c.trackResult(p)}function Ha(t,e){return hh(t,Yf)}var gh=(t,e,o,n,r,s,a,i)=>{let m=document.documentElement,d=["light","dark"];function c(y){(Array.isArray(t)?t:[t]).forEach(g=>{let b=g==="class",f=b&&s?r.map(w=>s[w]||w):r;b?(m.classList.remove(...f),m.classList.add(s&&s[y]?s[y]:y)):m.setAttribute(g,y)}),p(y)}function p(y){i&&d.includes(y)&&(m.style.colorScheme=y)}function h(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(n)c(n);else try{let y=localStorage.getItem(e)||o,g=a&&y==="system"?h():y;c(g)}catch{}},Ql=["light","dark"],Bd="(prefers-color-scheme: dark)",bh=typeof window>"u",vi=l.createContext(void 0),yh={setTheme:t=>{},themes:[]},Ci=()=>{var t;return(t=l.useContext(vi))!=null?t:yh},wh=t=>l.useContext(vi)?l.createElement(l.Fragment,null,t.children):l.createElement(Ch,{...t}),vh=["light","dark"],Ch=({forcedTheme:t,disableTransitionOnChange:e=!1,enableSystem:o=!0,enableColorScheme:n=!0,storageKey:r="theme",themes:s=vh,defaultTheme:a=o?"system":"light",attribute:i="data-theme",value:m,children:d,nonce:c,scriptProps:p})=>{let[h,y]=l.useState(()=>kh(r,a)),[g,b]=l.useState(()=>h==="system"?ea():h),f=m?Object.values(m):s,w=l.useCallback(S=>{let k=S;if(!k)return;S==="system"&&o&&(k=ea());let P=m?m[k]:k,D=e?Sh(c):null,I=document.documentElement,N=z=>{z==="class"?(I.classList.remove(...f),P&&I.classList.add(P)):z.startsWith("data-")&&(P?I.setAttribute(z,P):I.removeAttribute(z))};if(Array.isArray(i)?i.forEach(N):N(i),n){let z=Ql.includes(a)?a:null,U=Ql.includes(k)?k:z;I.style.colorScheme=U}D==null||D()},[c]),T=l.useCallback(S=>{let k=typeof S=="function"?S(h):S;y(k);try{localStorage.setItem(r,k)}catch{}},[h]),v=l.useCallback(S=>{let k=ea(S);b(k),h==="system"&&o&&!t&&w("system")},[h,t]);l.useEffect(()=>{let S=window.matchMedia(Bd);return S.addListener(v),v(S),()=>S.removeListener(v)},[v]),l.useEffect(()=>{let S=k=>{k.key===r&&(k.newValue?y(k.newValue):T(a))};return window.addEventListener("storage",S),()=>window.removeEventListener("storage",S)},[T]),l.useEffect(()=>{w(t??h)},[t,h]);let C=l.useMemo(()=>({theme:h,setTheme:T,forcedTheme:t,resolvedTheme:h==="system"?g:h,themes:o?[...s,"system"]:s,systemTheme:o?g:void 0}),[h,T,t,g,o,s]);return l.createElement(vi.Provider,{value:C},l.createElement(Th,{forcedTheme:t,storageKey:r,attribute:i,enableSystem:o,enableColorScheme:n,defaultTheme:a,value:m,themes:s,nonce:c,scriptProps:p}),d)},Th=l.memo(({forcedTheme:t,storageKey:e,attribute:o,enableSystem:n,enableColorScheme:r,defaultTheme:s,value:a,themes:i,nonce:m,scriptProps:d})=>{let c=JSON.stringify([o,e,s,t,i,a,n,r]).slice(1,-1);return l.createElement("script",{...d,suppressHydrationWarning:!0,nonce:typeof window>"u"?m:"",dangerouslySetInnerHTML:{__html:`(${gh.toString()})(${c})`}})}),kh=(t,e)=>{if(bh)return;let o;try{o=localStorage.getItem(t)||void 0}catch{}return o||e},Sh=t=>{let e=document.createElement("style");return t&&e.setAttribute("nonce",t),e.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(e),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(e)},1)}},ea=t=>(t||(t=window.matchMedia(Bd)),t.matches?"dark":"light");function xh(t){if(typeof document>"u")return;let e=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",e.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}const Dh=t=>{switch(t){case"success":return Eh;case"info":return Nh;case"warning":return Ah;case"error":return Ih;default:return null}},Ph=Array(12).fill(0),Rh=({visible:t,className:e})=>X.createElement("div",{className:["sonner-loading-wrapper",e].filter(Boolean).join(" "),"data-visible":t},X.createElement("div",{className:"sonner-spinner"},Ph.map((o,n)=>X.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),Eh=X.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},X.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Ah=X.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},X.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Nh=X.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},X.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Ih=X.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},X.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),Oh=X.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},X.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),X.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Fh=()=>{const[t,e]=X.useState(document.hidden);return X.useEffect(()=>{const o=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",o),()=>window.removeEventListener("visibilitychange",o)},[]),t};let $a=1;class Mh{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{const o=this.subscribers.indexOf(e);this.subscribers.splice(o,1)}),this.publish=e=>{this.subscribers.forEach(o=>o(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var o;const{message:n,...r}=e,s=typeof(e==null?void 0:e.id)=="number"||((o=e.id)==null?void 0:o.length)>0?e.id:$a++,a=this.toasts.find(m=>m.id===s),i=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(s)&&this.dismissedToasts.delete(s),a?this.toasts=this.toasts.map(m=>m.id===s?(this.publish({...m,...e,id:s,title:n}),{...m,...e,id:s,dismissible:i,title:n}):m):this.addToast({title:n,...r,dismissible:i,id:s}),s},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(o=>o({id:e,dismiss:!0})))):this.toasts.forEach(o=>{this.subscribers.forEach(n=>n({id:o.id,dismiss:!0}))}),e),this.message=(e,o)=>this.create({...o,message:e}),this.error=(e,o)=>this.create({...o,message:e,type:"error"}),this.success=(e,o)=>this.create({...o,type:"success",message:e}),this.info=(e,o)=>this.create({...o,type:"info",message:e}),this.warning=(e,o)=>this.create({...o,type:"warning",message:e}),this.loading=(e,o)=>this.create({...o,type:"loading",message:e}),this.promise=(e,o)=>{if(!o)return;let n;o.loading!==void 0&&(n=this.create({...o,promise:e,type:"loading",message:o.loading,description:typeof o.description!="function"?o.description:void 0}));const r=Promise.resolve(e instanceof Function?e():e);let s=n!==void 0,a;const i=r.then(async d=>{if(a=["resolve",d],X.isValidElement(d))s=!1,this.create({id:n,type:"default",message:d});else if(Lh(d)&&!d.ok){s=!1;const p=typeof o.error=="function"?await o.error(`HTTP error! status: ${d.status}`):o.error,h=typeof o.description=="function"?await o.description(`HTTP error! status: ${d.status}`):o.description,g=typeof p=="object"&&!X.isValidElement(p)?p:{message:p};this.create({id:n,type:"error",description:h,...g})}else if(d instanceof Error){s=!1;const p=typeof o.error=="function"?await o.error(d):o.error,h=typeof o.description=="function"?await o.description(d):o.description,g=typeof p=="object"&&!X.isValidElement(p)?p:{message:p};this.create({id:n,type:"error",description:h,...g})}else if(o.success!==void 0){s=!1;const p=typeof o.success=="function"?await o.success(d):o.success,h=typeof o.description=="function"?await o.description(d):o.description,g=typeof p=="object"&&!X.isValidElement(p)?p:{message:p};this.create({id:n,type:"success",description:h,...g})}}).catch(async d=>{if(a=["reject",d],o.error!==void 0){s=!1;const c=typeof o.error=="function"?await o.error(d):o.error,p=typeof o.description=="function"?await o.description(d):o.description,y=typeof c=="object"&&!X.isValidElement(c)?c:{message:c};this.create({id:n,type:"error",description:p,...y})}}).finally(()=>{s&&(this.dismiss(n),n=void 0),o.finally==null||o.finally.call(o)}),m=()=>new Promise((d,c)=>i.then(()=>a[0]==="reject"?c(a[1]):d(a[1])).catch(c));return typeof n!="string"&&typeof n!="number"?{unwrap:m}:Object.assign(n,{unwrap:m})},this.custom=(e,o)=>{const n=(o==null?void 0:o.id)||$a++;return this.create({jsx:e(n),id:n,...o}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const yt=new Mh,Uh=(t,e)=>{const o=(e==null?void 0:e.id)||$a++;return yt.addToast({title:t,...e,id:o}),o},Lh=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",jh=Uh,_h=()=>yt.toasts,zh=()=>yt.getActiveToasts(),i0=Object.assign(jh,{success:yt.success,info:yt.info,warning:yt.warning,error:yt.error,custom:yt.custom,message:yt.message,promise:yt.promise,dismiss:yt.dismiss,loading:yt.loading},{getHistory:_h,getToasts:zh});xh("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function zr(t){return t.label!==void 0}const Bh=3,Vh="24px",Wh="16px",Xl=4e3,qh=356,Hh=14,$h=45,Kh=200;function qt(...t){return t.filter(Boolean).join(" ")}function Jh(t){const[e,o]=t.split("-"),n=[];return e&&n.push(e),o&&n.push(o),n}const Gh=t=>{var e,o,n,r,s,a,i,m,d;const{invert:c,toast:p,unstyled:h,interacting:y,setHeights:g,visibleToasts:b,heights:f,index:w,toasts:T,expanded:v,removeToast:C,defaultRichColors:S,closeButton:k,style:P,cancelButtonStyle:D,actionButtonStyle:I,className:N="",descriptionClassName:z="",duration:U,position:R,gap:W,expandByDefault:O,classNames:j,icons:x,closeButtonAriaLabel:F="Close toast"}=t,[H,A]=X.useState(null),[Q,M]=X.useState(null),[L,V]=X.useState(!1),[_,B]=X.useState(!1),[Y,q]=X.useState(!1),[J,Te]=X.useState(!1),[Re,K]=X.useState(!1),[de,le]=X.useState(0),[De,me]=X.useState(0),fe=X.useRef(p.duration||U||Xl),Se=X.useRef(null),Z=X.useRef(null),Fe=w===0,we=w+1<=b,he=p.type,Pe=p.dismissible!==!1,se=p.className||"",$=p.descriptionClassName||"",ee=X.useMemo(()=>f.findIndex(be=>be.toastId===p.id)||0,[f,p.id]),te=X.useMemo(()=>{var be;return(be=p.closeButton)!=null?be:k},[p.closeButton,k]),G=X.useMemo(()=>p.duration||U||Xl,[p.duration,U]),ge=X.useRef(0),xe=X.useRef(0),Ke=X.useRef(0),ze=X.useRef(null),[Ge,it]=R.split("-"),It=X.useMemo(()=>f.reduce((be,We,qe)=>qe>=ee?be:be+We.height,0),[f,ee]),Bt=Fh(),Vt=p.invert||c,ho=he==="loading";xe.current=X.useMemo(()=>ee*W+It,[ee,It]),X.useEffect(()=>{fe.current=G},[G]),X.useEffect(()=>{V(!0)},[]),X.useEffect(()=>{const be=Z.current;if(be){const We=be.getBoundingClientRect().height;return me(We),g(qe=>[{toastId:p.id,height:We,position:p.position},...qe]),()=>g(qe=>qe.filter(et=>et.toastId!==p.id))}},[g,p.id]),X.useLayoutEffect(()=>{if(!L)return;const be=Z.current,We=be.style.height;be.style.height="auto";const qe=be.getBoundingClientRect().height;be.style.height=We,me(qe),g(et=>et.find($e=>$e.toastId===p.id)?et.map($e=>$e.toastId===p.id?{...$e,height:qe}:$e):[{toastId:p.id,height:qe,position:p.position},...et])},[L,p.title,p.description,g,p.id,p.jsx,p.action,p.cancel]);const St=X.useCallback(()=>{B(!0),le(xe.current),g(be=>be.filter(We=>We.toastId!==p.id)),setTimeout(()=>{C(p)},Kh)},[p,C,g,xe]);X.useEffect(()=>{if(p.promise&&he==="loading"||p.duration===1/0||p.type==="loading")return;let be;return v||y||Bt?(()=>{if(Ke.current{fe.current!==1/0&&(ge.current=new Date().getTime(),be=setTimeout(()=>{p.onAutoClose==null||p.onAutoClose.call(p,p),St()},fe.current))})(),()=>clearTimeout(be)},[v,y,p,he,Bt,St]),X.useEffect(()=>{p.delete&&(St(),p.onDismiss==null||p.onDismiss.call(p,p))},[St,p.delete]);function Tn(){var be;if(x!=null&&x.loading){var We;return X.createElement("div",{className:qt(j==null?void 0:j.loader,p==null||(We=p.classNames)==null?void 0:We.loader,"sonner-loader"),"data-visible":he==="loading"},x.loading)}return X.createElement(Rh,{className:qt(j==null?void 0:j.loader,p==null||(be=p.classNames)==null?void 0:be.loader),visible:he==="loading"})}const je=p.icon||(x==null?void 0:x[he])||Dh(he);var tt,xt;return X.createElement("li",{tabIndex:0,ref:Z,className:qt(N,se,j==null?void 0:j.toast,p==null||(e=p.classNames)==null?void 0:e.toast,j==null?void 0:j.default,j==null?void 0:j[he],p==null||(o=p.classNames)==null?void 0:o[he]),"data-sonner-toast":"","data-rich-colors":(tt=p.richColors)!=null?tt:S,"data-styled":!(p.jsx||p.unstyled||h),"data-mounted":L,"data-promise":!!p.promise,"data-swiped":Re,"data-removed":_,"data-visible":we,"data-y-position":Ge,"data-x-position":it,"data-index":w,"data-front":Fe,"data-swiping":Y,"data-dismissible":Pe,"data-type":he,"data-invert":Vt,"data-swipe-out":J,"data-swipe-direction":Q,"data-expanded":!!(v||O&&L),"data-testid":p.testId,style:{"--index":w,"--toasts-before":w,"--z-index":T.length-w,"--offset":`${_?de:xe.current}px`,"--initial-height":O?"auto":`${De}px`,...P,...p.style},onDragEnd:()=>{q(!1),A(null),ze.current=null},onPointerDown:be=>{be.button!==2&&(ho||!Pe||(Se.current=new Date,le(xe.current),be.target.setPointerCapture(be.pointerId),be.target.tagName!=="BUTTON"&&(q(!0),ze.current={x:be.clientX,y:be.clientY})))},onPointerUp:()=>{var be,We,qe;if(J||!Pe)return;ze.current=null;const et=Number(((be=Z.current)==null?void 0:be.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Ut=Number(((We=Z.current)==null?void 0:We.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),$e=new Date().getTime()-((qe=Se.current)==null?void 0:qe.getTime()),ct=H==="x"?et:Ut,go=Math.abs(ct)/$e;if(Math.abs(ct)>=$h||go>.11){le(xe.current),p.onDismiss==null||p.onDismiss.call(p,p),M(H==="x"?et>0?"right":"left":Ut>0?"down":"up"),St(),Te(!0);return}else{var pt,Dt;(pt=Z.current)==null||pt.style.setProperty("--swipe-amount-x","0px"),(Dt=Z.current)==null||Dt.style.setProperty("--swipe-amount-y","0px")}K(!1),q(!1),A(null)},onPointerMove:be=>{var We,qe,et;if(!ze.current||!Pe||((We=window.getSelection())==null?void 0:We.toString().length)>0)return;const $e=be.clientY-ze.current.y,ct=be.clientX-ze.current.x;var go;const pt=(go=t.swipeDirections)!=null?go:Jh(R);!H&&(Math.abs(ct)>1||Math.abs($e)>1)&&A(Math.abs(ct)>Math.abs($e)?"x":"y");let Dt={x:0,y:0};const kn=Wt=>1/(1.5+Math.abs(Wt)/20);if(H==="y"){if(pt.includes("top")||pt.includes("bottom"))if(pt.includes("top")&&$e<0||pt.includes("bottom")&&$e>0)Dt.y=$e;else{const Wt=$e*kn($e);Dt.y=Math.abs(Wt)0)Dt.x=ct;else{const Wt=ct*kn(ct);Dt.x=Math.abs(Wt)0||Math.abs(Dt.y)>0)&&K(!0),(qe=Z.current)==null||qe.style.setProperty("--swipe-amount-x",`${Dt.x}px`),(et=Z.current)==null||et.style.setProperty("--swipe-amount-y",`${Dt.y}px`)}},te&&!p.jsx&&he!=="loading"?X.createElement("button",{"aria-label":F,"data-disabled":ho,"data-close-button":!0,onClick:ho||!Pe?()=>{}:()=>{St(),p.onDismiss==null||p.onDismiss.call(p,p)},className:qt(j==null?void 0:j.closeButton,p==null||(n=p.classNames)==null?void 0:n.closeButton)},(xt=x==null?void 0:x.close)!=null?xt:Oh):null,(he||p.icon||p.promise)&&p.icon!==null&&((x==null?void 0:x[he])!==null||p.icon)?X.createElement("div",{"data-icon":"",className:qt(j==null?void 0:j.icon,p==null||(r=p.classNames)==null?void 0:r.icon)},p.promise||p.type==="loading"&&!p.icon?p.icon||Tn():null,p.type!=="loading"?je:null):null,X.createElement("div",{"data-content":"",className:qt(j==null?void 0:j.content,p==null||(s=p.classNames)==null?void 0:s.content)},X.createElement("div",{"data-title":"",className:qt(j==null?void 0:j.title,p==null||(a=p.classNames)==null?void 0:a.title)},p.jsx?p.jsx:typeof p.title=="function"?p.title():p.title),p.description?X.createElement("div",{"data-description":"",className:qt(z,$,j==null?void 0:j.description,p==null||(i=p.classNames)==null?void 0:i.description)},typeof p.description=="function"?p.description():p.description):null),X.isValidElement(p.cancel)?p.cancel:p.cancel&&zr(p.cancel)?X.createElement("button",{"data-button":!0,"data-cancel":!0,style:p.cancelButtonStyle||D,onClick:be=>{zr(p.cancel)&&Pe&&(p.cancel.onClick==null||p.cancel.onClick.call(p.cancel,be),St())},className:qt(j==null?void 0:j.cancelButton,p==null||(m=p.classNames)==null?void 0:m.cancelButton)},p.cancel.label):null,X.isValidElement(p.action)?p.action:p.action&&zr(p.action)?X.createElement("button",{"data-button":!0,"data-action":!0,style:p.actionButtonStyle||I,onClick:be=>{zr(p.action)&&(p.action.onClick==null||p.action.onClick.call(p.action,be),!be.defaultPrevented&&St())},className:qt(j==null?void 0:j.actionButton,p==null||(d=p.classNames)==null?void 0:d.actionButton)},p.action.label):null)};function Zl(){if(typeof window>"u"||typeof document>"u")return"ltr";const t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}function Yh(t,e){const o={};return[t,e].forEach((n,r)=>{const s=r===1,a=s?"--mobile-offset":"--offset",i=s?Wh:Vh;function m(d){["top","right","bottom","left"].forEach(c=>{o[`${a}-${c}`]=typeof d=="number"?`${d}px`:d})}typeof n=="number"||typeof n=="string"?m(n):typeof n=="object"?["top","right","bottom","left"].forEach(d=>{n[d]===void 0?o[`${a}-${d}`]=i:o[`${a}-${d}`]=typeof n[d]=="number"?`${n[d]}px`:n[d]}):m(i)}),o}const Qh=X.forwardRef(function(e,o){const{id:n,invert:r,position:s="bottom-right",hotkey:a=["altKey","KeyT"],expand:i,closeButton:m,className:d,offset:c,mobileOffset:p,theme:h="light",richColors:y,duration:g,style:b,visibleToasts:f=Bh,toastOptions:w,dir:T=Zl(),gap:v=Hh,icons:C,containerAriaLabel:S="Notifications"}=e,[k,P]=X.useState([]),D=X.useMemo(()=>n?k.filter(L=>L.toasterId===n):k.filter(L=>!L.toasterId),[k,n]),I=X.useMemo(()=>Array.from(new Set([s].concat(D.filter(L=>L.position).map(L=>L.position)))),[D,s]),[N,z]=X.useState([]),[U,R]=X.useState(!1),[W,O]=X.useState(!1),[j,x]=X.useState(h!=="system"?h:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),F=X.useRef(null),H=a.join("+").replace(/Key/g,"").replace(/Digit/g,""),A=X.useRef(null),Q=X.useRef(!1),M=X.useCallback(L=>{P(V=>{var _;return(_=V.find(B=>B.id===L.id))!=null&&_.delete||yt.dismiss(L.id),V.filter(({id:B})=>B!==L.id)})},[]);return X.useEffect(()=>yt.subscribe(L=>{if(L.dismiss){requestAnimationFrame(()=>{P(V=>V.map(_=>_.id===L.id?{..._,delete:!0}:_))});return}setTimeout(()=>{Pd.flushSync(()=>{P(V=>{const _=V.findIndex(B=>B.id===L.id);return _!==-1?[...V.slice(0,_),{...V[_],...L},...V.slice(_+1)]:[L,...V]})})})}),[k]),X.useEffect(()=>{if(h!=="system"){x(h);return}if(h==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?x("dark"):x("light")),typeof window>"u")return;const L=window.matchMedia("(prefers-color-scheme: dark)");try{L.addEventListener("change",({matches:V})=>{x(V?"dark":"light")})}catch{L.addListener(({matches:_})=>{try{x(_?"dark":"light")}catch(B){console.error(B)}})}},[h]),X.useEffect(()=>{k.length<=1&&R(!1)},[k]),X.useEffect(()=>{const L=V=>{var _;if(a.every(q=>V[q]||V.code===q)){var Y;R(!0),(Y=F.current)==null||Y.focus()}V.code==="Escape"&&(document.activeElement===F.current||(_=F.current)!=null&&_.contains(document.activeElement))&&R(!1)};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[a]),X.useEffect(()=>{if(F.current)return()=>{A.current&&(A.current.focus({preventScroll:!0}),A.current=null,Q.current=!1)}},[F.current]),X.createElement("section",{ref:o,"aria-label":`${S} ${H}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},I.map((L,V)=>{var _;const[B,Y]=L.split("-");return D.length?X.createElement("ol",{key:L,dir:T==="auto"?Zl():T,tabIndex:-1,ref:F,className:d,"data-sonner-toaster":!0,"data-sonner-theme":j,"data-y-position":B,"data-x-position":Y,style:{"--front-toast-height":`${((_=N[0])==null?void 0:_.height)||0}px`,"--width":`${qh}px`,"--gap":`${v}px`,...b,...Yh(c,p)},onBlur:q=>{Q.current&&!q.currentTarget.contains(q.relatedTarget)&&(Q.current=!1,A.current&&(A.current.focus({preventScroll:!0}),A.current=null))},onFocus:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||Q.current||(Q.current=!0,A.current=q.relatedTarget)},onMouseEnter:()=>R(!0),onMouseMove:()=>R(!0),onMouseLeave:()=>{W||R(!1)},onDragEnd:()=>R(!1),onPointerDown:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||O(!0)},onPointerUp:()=>O(!1)},D.filter(q=>!q.position&&V===0||q.position===L).map((q,J)=>{var Te,Re;return X.createElement(Gh,{key:q.id,icons:C,index:J,toast:q,defaultRichColors:y,duration:(Te=w==null?void 0:w.duration)!=null?Te:g,className:w==null?void 0:w.className,descriptionClassName:w==null?void 0:w.descriptionClassName,invert:r,visibleToasts:f,closeButton:(Re=w==null?void 0:w.closeButton)!=null?Re:m,interacting:W,position:L,style:w==null?void 0:w.style,unstyled:w==null?void 0:w.unstyled,classNames:w==null?void 0:w.classNames,cancelButtonStyle:w==null?void 0:w.cancelButtonStyle,actionButtonStyle:w==null?void 0:w.actionButtonStyle,closeButtonAriaLabel:w==null?void 0:w.closeButtonAriaLabel,removeToast:M,toasts:D.filter(K=>K.position==q.position),heights:N.filter(K=>K.position==q.position),setHeights:z,expandByDefault:i,gap:v,expanded:U,swipeDirections:e.swipeDirections})})):null}))});/** * @license lucide-react v1.17.0 - ISC * @@ -299,7 +299,7 @@ var yf=Object.defineProperty;var _l=t=>{throw TypeError(t)};var wf=(t,e,o)=>e in * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Pb=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],du=ye("x",Pb),Rb=({...t})=>{const{theme:e="system"}=Ci();return u.jsx(Qh,{theme:e,richColors:!0,className:"toaster group",icons:{success:u.jsx(bg,{className:"size-4"}),info:u.jsx(Ug,{className:"size-4"}),warning:u.jsx(wb,{className:"size-4"}),error:u.jsx(Qg,{className:"size-4"}),loading:u.jsx(eu,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...t})},nc={};function Nt(t,e){const o=l.useRef(nc);return o.current===nc&&(o.current=t(e)),o}const Ka=[];let Ja;function Eb(){return Ja}function Ab(t){Ka.push(t)}function Di(t){const e=(o,n)=>{const r=Nt(Nb).current;let s;try{Ja=r;for(const a of Ka)a.before(r);s=t(o,n);for(const a of Ka)a.after(r);r.didInitialize=!0}finally{Ja=void 0}return s};return e.displayName=t.displayName||t.name,e}function uu(t){return l.forwardRef(Di(t))}function Nb(){return{didInitialize:!1}}function Ps(t){const e=l.useRef(!0);e.current&&(e.current=!1,t())}const Ib=()=>{},ue=typeof document<"u"?l.useLayoutEffect:Ib;function Ob(t,e){return function(n,...r){const s=new URL(t);return s.searchParams.set("code",n.toString()),r.forEach(a=>s.searchParams.append("args[]",a)),`${e} error #${n}; visit ${s} for the full message.`}}const rt=Ob("https://base-ui.com/production-error","Base UI"),pu=l.createContext(void 0);function Dr(t){const e=l.useContext(pu);if(e===void 0&&!t)throw new Error(rt(72));return e}const Fb=[];function Pi(t){l.useEffect(t,Fb)}const or=0;class Mt{constructor(){_e(this,"currentId",or);_e(this,"clear",()=>{this.currentId!==or&&(clearTimeout(this.currentId),this.currentId=or)});_e(this,"disposeEffect",()=>this.clear)}static create(){return new Mt}start(e,o){this.clear(),this.currentId=setTimeout(()=>{this.currentId=or,o()},e)}isStarted(){return this.currentId!==or}}function gt(){const t=Nt(Mt.create).current;return Pi(t.disposeEffect),t}const Xn=typeof navigator<"u",oa=Mb(),mu=Lb(),fu=Ub(),hu=typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter:none"),gu=oa.platform==="MacIntel"&&oa.maxTouchPoints>1?!0:/iP(hone|ad|od)|iOS/.test(oa.platform),bu=Xn&&/apple/i.test(navigator.vendor),Ga=Xn&&/android/i.test(mu)||/android/i.test(fu),yu=Xn&&mu.toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints,wu=fu.includes("jsdom/");function Mb(){if(!Xn)return{platform:"",maxTouchPoints:-1};const t=navigator.userAgentData;return t!=null&&t.platform?{platform:t.platform,maxTouchPoints:navigator.maxTouchPoints}:{platform:navigator.platform??"",maxTouchPoints:navigator.maxTouchPoints??-1}}function Ub(){if(!Xn)return"";const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?t.brands.map(({brand:e,version:o})=>`${e}/${o}`).join(" "):navigator.userAgent}function Lb(){if(!Xn)return"";const t=navigator.userAgentData;return t!=null&&t.platform?t.platform:navigator.platform??""}function Et(t){t.preventDefault(),t.stopPropagation()}function jb(t){return"nativeEvent"in t}function vu(t){return t.pointerType===""&&t.isTrusted?!0:Ga&&t.pointerType?t.type==="click"&&t.buttons===1:t.detail===0&&!t.pointerType}function Cu(t){return wu?!1:!Ga&&t.width===0&&t.height===0||Ga&&t.width===1&&t.height===1&&t.pressure===0&&t.detail===0&&t.pointerType==="mouse"||t.width<1&&t.height<1&&t.pressure===0&&t.detail===0&&t.pointerType==="touch"}function cn(t,e){const o=["mouse","pen"];return e||o.push("",void 0),o.includes(t)}function _b(t){const e=t.type;return e==="click"||e==="mousedown"||e==="keydown"||e==="keyup"}function Rs(){return typeof window<"u"}function ut(t){return Ri(t)?(t.nodeName||"").toLowerCase():"#document"}function Ze(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function oo(t){var e;return(e=(Ri(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ri(t){return Rs()?t instanceof Node||t instanceof Ze(t).Node:!1}function Ae(t){return Rs()?t instanceof Element||t instanceof Ze(t).Element:!1}function Ve(t){return Rs()?t instanceof HTMLElement||t instanceof Ze(t).HTMLElement:!1}function Jn(t){return!Rs()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Ze(t).ShadowRoot}function jo(t){const{overflow:e,overflowX:o,overflowY:n,display:r}=kt(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+o)&&r!=="inline"&&r!=="contents"}function zb(t){return/^(table|td|th)$/.test(ut(t))}function Es(t){try{if(t.matches(":popover-open"))return!0}catch{}try{return t.matches(":modal")}catch{return!1}}const Bb=/transform|translate|scale|rotate|perspective|filter/,Vb=/paint|layout|strict|content/,qo=t=>!!t&&t!=="none";let na;function Ei(t){const e=Ae(t)?kt(t):t;return qo(e.transform)||qo(e.translate)||qo(e.scale)||qo(e.rotate)||qo(e.perspective)||!As()&&(qo(e.backdropFilter)||qo(e.filter))||Bb.test(e.willChange||"")||Vb.test(e.contain||"")}function Wb(t){let e=to(t);for(;Ve(e)&&!Qt(e);){if(Ei(e))return e;if(Es(e))return null;e=to(e)}return null}function As(){return na==null&&(na=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),na}function Qt(t){return/^(html|body|#document)$/.test(ut(t))}function kt(t){return Ze(t).getComputedStyle(t)}function Ns(t){return Ae(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function to(t){if(ut(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Jn(t)&&t.host||oo(t);return Jn(e)?e.host:e}function Tu(t){const e=to(t);return Qt(e)?t.ownerDocument?t.ownerDocument.body:t.body:Ve(e)&&jo(e)?e:Tu(e)}function fr(t,e,o){var n;e===void 0&&(e=[]),o===void 0&&(o=!0);const r=Tu(t),s=r===((n=t.ownerDocument)==null?void 0:n.body),a=Ze(r);if(s){const i=Ya(a);return e.concat(a,a.visualViewport||[],jo(r)?r:[],i&&o?fr(i):[])}else return e.concat(r,fr(r,[],o))}function Ya(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}const Qa="data-base-ui-focusable",ku="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",No="ArrowLeft",Io="ArrowRight",Ai="ArrowUp",Pr="ArrowDown";function vt(t){var o;let e=t.activeElement;for(;((o=e==null?void 0:e.shadowRoot)==null?void 0:o.activeElement)!=null;)e=e.shadowRoot.activeElement;return e}function Ce(t,e){var n;if(!t||!e)return!1;const o=(n=e.getRootNode)==null?void 0:n.call(e);if(t.contains(e))return!0;if(o&&Jn(o)){let r=e;for(;r;){if(t===r)return!0;r=r.parentNode||r.host}}return!1}function ht(t){return"composedPath"in t?t.composedPath()[0]:t.target}function us(t,e){if(!Ae(t))return!1;const o=t;if(e.hasElement(o))return!o.hasAttribute("data-trigger-disabled");for(const[,n]of e.entries())if(Ce(n,o))return!n.hasAttribute("data-trigger-disabled");return!1}function ra(t,e){if(e==null)return!1;if("composedPath"in t)return t.composedPath().includes(e);const o=t;return o.target!=null&&e.contains(o.target)}function qb(t){return t.matches("html,body")}function Is(t){return Ve(t)&&t.matches(ku)}function Hb(t){return(t==null?void 0:t.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${ku}`))!=null}function Xa(t){return t?t.getAttribute("role")==="combobox"&&Is(t):!1}function $b(t){if(!t||wu)return!0;try{return t.matches(":focus-visible")}catch{return!0}}function Za(t){return t?t.hasAttribute(Qa)?t:t.querySelector(`[${Qa}]`)||t:null}function Kb(t,e){return e!=null&&!cn(e)?0:typeof t=="function"?t():t}function ps(t,e,o){const n=Kb(t,o);return typeof n=="number"?n:n==null?void 0:n[e]}function rc(t){return typeof t=="function"?t():t}function Su(t,e){return e||t==="click"||t==="mousedown"}function Jb(t){return(t==null?void 0:t.includes("mouse"))&&t!=="mousedown"}function Ni(){}const ei=Object.freeze([]),Je=Object.freeze({}),xu="none",uo="trigger-press",Ye="trigger-hover",An="trigger-focus",Ii="outside-press",Du="item-press",Pu="close-press",dn="focus-out",Rr="escape-key",ti="list-navigation",Gb="cancel-open",lr="sibling-open",Yb="disabled",l0="missing",c0="initial",Os="imperative-action",d0="window-resize";function Oe(t,e,o,n){let r=!1,s=!1;const a=n??Je;return{reason:t,event:e??new Event("base-ui"),cancel(){r=!0},allowPropagation(){s=!0},get isCanceled(){return r},get isPropagationAllowed(){return s},trigger:o,...a}}const Ru=l.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new Mt,currentIdRef:{current:null},currentContextRef:{current:null}});function Qb(t){const{children:e,delay:o,timeoutMs:n=0}=t,r=l.useRef(o),s=l.useRef(o),a=l.useRef(null),i=l.useRef(null),m=gt();return u.jsx(Ru.Provider,{value:l.useMemo(()=>({hasProvider:!0,delayRef:r,initialDelayRef:s,currentIdRef:a,timeoutMs:n,currentContextRef:i,timeout:m}),[n,m]),children:e})}function Xb(t,e={open:!1}){const{open:o}=e,n="rootStore"in t?t.rootStore:t,r=n.useState("floatingId"),s=l.useContext(Ru),{currentIdRef:a,delayRef:i,timeoutMs:m,initialDelayRef:d,currentContextRef:c,hasProvider:p,timeout:h}=s,[y,g]=l.useState(!1);return ue(()=>{function b(){var f;g(!1),(f=c.current)==null||f.setIsInstantPhase(!1),a.current=null,c.current=null,i.current=d.current}if(a.current&&!o&&a.current===r){if(g(!1),m){const f=r;return h.start(m,()=>{n.select("open")||a.current&&a.current!==f||b()}),()=>{h.clear()}}b()}},[o,r,a,i,m,d,c,h,n]),ue(()=>{if(!o)return;const b=c.current,f=a.current;h.clear(),c.current={onOpenChange:n.setOpen,setIsInstantPhase:g},a.current=r,i.current={open:0,close:ps(d.current,"close")},f!==null&&f!==r?(g(!0),b==null||b.setIsInstantPhase(!0),b==null||b.onOpenChange(!1,Oe(xu))):(g(!1),b==null||b.setIsInstantPhase(!1))},[o,r,n,a,i,d,c,h]),ue(()=>()=>{c.current=null},[c]),l.useMemo(()=>({hasProvider:p,delayRef:i,isInstantPhase:y}),[p,i,y])}function Ne(t,e,o,n){return t.addEventListener(e,o,n),()=>{t.removeEventListener(e,o,n)}}function Xt(...t){return()=>{for(let e=0;eo!==e[n])}function Au(t,e){if(t.refs=e,e.every(o=>o==null)){t.callback=null;return}t.callback=o=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),o!=null){const n=Array(e.length).fill(null);for(let r=0;r{for(let r=0;r{e.current=e.next}};return e}const Oi={...Ds},sa=Oi.useInsertionEffect,ny=sa&&sa!==Oi.useLayoutEffect?sa:t=>t();function ke(t){const e=Nt(ry).current;return e.next=t,ny(e.effect),e.trampoline}function ry(){const t={next:void 0,callback:sy,trampoline:(...e)=>{var o;return(o=t.callback)==null?void 0:o.call(t,...e)},effect:()=>{t.callback=t.next}};return t}function sy(){}const Br=null;class ay{constructor(){_e(this,"callbacks",[]);_e(this,"callbacksCount",0);_e(this,"nextId",1);_e(this,"startId",1);_e(this,"isScheduled",!1);_e(this,"tick",e=>{var r;this.isScheduled=!1;const o=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let s=0;s=this.callbacks.length||(this.callbacks[o]=null,this.callbacksCount-=1)}}const Vr=new ay;class Gt{constructor(){_e(this,"currentId",Br);_e(this,"cancel",()=>{this.currentId!==Br&&(Vr.cancel(this.currentId),this.currentId=Br)});_e(this,"disposeEffect",()=>this.cancel)}static create(){return new Gt}static request(e){return Vr.request(e)}static cancel(e){return Vr.cancel(e)}request(e){this.cancel(),this.currentId=Vr.request(()=>{this.currentId=Br,e()})}}function hr(){const t=Nt(Gt.create).current;return Pi(t.disposeEffect),t}function Le(t){return(t==null?void 0:t.ownerDocument)||document}const Nu={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},iy={...Nu,position:"fixed",top:0,left:0},u0={...Nu,position:"absolute"},Fo=l.forwardRef(function(e,o){const[n,r]=l.useState();ue(()=>{bu&&r("button")},[]);const s={tabIndex:0,role:n};return u.jsx("span",{...e,ref:o,style:iy,"aria-hidden":n?void 0:!0,...s,"data-base-ui-focus-guard":""})}),ly=["top","right","bottom","left"],Yn=Math.min,At=Math.max,ms=Math.round,Yo=Math.floor,Zt=t=>({x:t,y:t}),cy={left:"right",right:"left",bottom:"top",top:"bottom"};function oi(t,e,o){return At(t,Yn(e,o))}function po(t,e){return typeof t=="function"?t(e):t}function Ct(t){return t.split("-")[0]}function _o(t){return t.split("-")[1]}function Fi(t){return t==="x"?"y":"x"}function Mi(t){return t==="y"?"height":"width"}function Ft(t){const e=t[0];return e==="t"||e==="b"?"y":"x"}function Ui(t){return Fi(Ft(t))}function dy(t,e,o){o===void 0&&(o=!1);const n=_o(t),r=Ui(t),s=Mi(r);let a=r==="x"?n===(o?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(a=fs(a)),[a,fs(a)]}function uy(t){const e=fs(t);return[ni(t),e,ni(e)]}function ni(t){return t.includes("start")?t.replace("start","end"):t.replace("end","start")}const sc=["left","right"],ac=["right","left"],py=["top","bottom"],my=["bottom","top"];function fy(t,e,o){switch(t){case"top":case"bottom":return o?e?ac:sc:e?sc:ac;case"left":case"right":return e?py:my;default:return[]}}function hy(t,e,o,n){const r=_o(t);let s=fy(Ct(t),o==="start",n);return r&&(s=s.map(a=>a+"-"+r),e&&(s=s.concat(s.map(ni)))),s}function fs(t){const e=Ct(t);return cy[e]+t.slice(e.length)}function gy(t){return{top:0,right:0,bottom:0,left:0,...t}}function Iu(t){return typeof t!="number"?gy(t):{top:t,right:t,bottom:t,left:t}}function hs(t){const{x:e,y:o,width:n,height:r}=t;return{width:n,height:r,top:o,left:e,right:e+n,bottom:o+r,x:e,y:o}}function Wr(t,e,o){return Math.floor(t/e)!==o}function gs(t,e){return e<0||e>=t.length}function aa(t,e){return ft(t.current,{disabledIndices:e})}function ic(t,e){return ft(t.current,{decrement:!0,startingIndex:t.current.length,disabledIndices:e})}function ft(t,{startingIndex:e=-1,decrement:o=!1,disabledIndices:n,amount:r=1}={}){let s=e;do s+=o?-r:r;while(s>=0&&s<=t.length-1&&Nn(t,s,n));return s}function by(t,{event:e,orientation:o,loopFocus:n,onLoop:r,rtl:s,cols:a,disabledIndices:i,minIndex:m,maxIndex:d,prevIndex:c,stopEvent:p=!1}){let h=c,y;if(e.key===Ai?y="up":e.key===Pr&&(y="down"),y){const g=[],b=[];let f=!1,w=0;{let I=null,N=-1;t.forEach((z,U)=>{if(z==null)return;w+=1;const R=z.closest('[role="row"]');R&&(f=!0),(R!==I||N===-1)&&(I=R,N+=1,g[N]=[]),g[N].push(U),b[U]=N})}let T=!1,v=0;if(f)for(const I of g){const N=I.length;N>v&&(v=N),N!==a&&(T=!0)}const C=T&&w{if(!T||c===-1)return;const N=b[c];if(N==null)return;const z=g[N].indexOf(c),U=I==="up"?-1:1;for(let R=N+U,W=0;W=g.length){if(!n||C)return;if(R=R<0?g.length-1:0,r){const j=Math.min(z,g[R].length-1),x=g[R][j]??g[R][0],F=r(e,c,x);R=b[F]??R}}const O=g[R];for(let j=Math.min(z,O.length-1);j>=0;j-=1){const x=O[j];if(!Nn(t,x,i))return x}}},P=I=>{if(!C||c===-1)return;const N=c%S,z=I==="up"?-S:S,U=d-d%S,R=Yo(d/S)+1;for(let W=c-N+z,O=0;Od){if(!n)return;W=W<0?U:0}const j=Math.min(W+S-1,d);for(let x=Math.min(W+N,j);x>=W;x-=1)if(!Nn(t,x,i))return x}};p&&Et(e);const D=k(y)??P(y);if(D!==void 0)h=D;else if(c===-1)h=y==="up"?d:m;else if(h=ft(t,{startingIndex:c,amount:S,decrement:y==="up",disabledIndices:i}),n){if(y==="up"&&(c-SI?z:z-S,r&&(h=r(e,c,h))}y==="down"&&c+S>d&&(h=ft(t,{startingIndex:c%S-S,amount:S,disabledIndices:i}),r&&(h=r(e,c,h)))}gs(t,h)&&(h=c)}if(o==="both"){const g=Yo(c/a);e.key===(s?No:Io)&&(p&&Et(e),c%a!==a-1?(h=ft(t,{startingIndex:c,disabledIndices:i}),n&&Wr(h,a,g)&&(h=ft(t,{startingIndex:c-c%a-1,disabledIndices:i}),r&&(h=r(e,c,h)))):n&&(h=ft(t,{startingIndex:c-c%a-1,disabledIndices:i}),r&&(h=r(e,c,h))),Wr(h,a,g)&&(h=c)),e.key===(s?Io:No)&&(p&&Et(e),c%a!==0?(h=ft(t,{startingIndex:c,decrement:!0,disabledIndices:i}),n&&Wr(h,a,g)&&(h=ft(t,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}),r&&(h=r(e,c,h)))):n&&(h=ft(t,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}),r&&(h=r(e,c,h))),Wr(h,a,g)&&(h=c));const b=Yo(d/a)===g;gs(t,h)&&(n&&b?(h=e.key===(s?Io:No)?d:ft(t,{startingIndex:c-c%a-1,disabledIndices:i}),r&&(h=r(e,c,h))):h=c)}return h}function yy(t,e,o){const n=[];let r=0;return t.forEach(({width:s,height:a},i)=>{let m=!1;for(o&&(r=0);!m;){const d=[];for(let c=0;cn[c]==null)?(d.forEach(c=>{n[c]=i}),m=!0):r+=1}}),[...n]}function wy(t,e,o,n,r){if(t===-1)return-1;const s=o.indexOf(t),a=e[t];switch(r){case"tl":return s;case"tr":return a?s+a.width-1:s;case"bl":return a?s+(a.height-1)*n:s;case"br":return o.lastIndexOf(t);default:return-1}}function vy(t,e){return e.flatMap((o,n)=>t.includes(o)?[n]:[])}function Nn(t,e,o){if(typeof o=="function"?o(e):(o==null?void 0:o.includes(e))??!1)return!0;const r=t[e];return r?Fs(r)?!o&&(r.hasAttribute("disabled")||r.getAttribute("aria-disabled")==="true"):!0:!1}function Cy(t){return t.visibility==="hidden"||t.visibility==="collapse"}function Fs(t,e=t?kt(t):null){return!t||!t.isConnected||!e||Cy(e)?!1:typeof t.checkVisibility=="function"?t.checkVisibility():e.display!=="none"&&e.display!=="contents"}const Ty='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';function ky(t){const e=t.assignedSlot;if(e)return e;if(t.parentElement)return t.parentElement;const o=t.getRootNode();return Jn(o)?o.host:null}function ri(t){for(const e of Array.from(t.children))if(ut(e)==="summary")return e;return null}function Sy(t,e){const o=ri(e);return!!o&&(t===o||Ce(o,t))}function Ou(t){const e=t?ut(t):"";return t!=null&&t.matches(Ty)&&(e!=="summary"||t.parentElement!=null&&ut(t.parentElement)==="details"&&ri(t.parentElement)===t)&&(e!=="details"||ri(t)==null)&&(e!=="input"||t.type!=="hidden")}function Fu(t){if(!Ou(t)||!t.isConnected||t.matches(":disabled"))return!1;for(let e=t;e;e=ky(e)){const o=e!==t,n=ut(e)==="slot";if(e.hasAttribute("inert")||o&&ut(e)==="details"&&!e.open&&!Sy(t,e)||e.hasAttribute("hidden")||!n&&!xy(e,o))return!1}return!0}function xy(t,e){const o=kt(t);return e?o.display!=="none":Fs(t,o)}function Mu(t){const e=t.tabIndex;if(e<0){const o=ut(t);if(o==="details"||o==="audio"||o==="video"||Ve(t)&&t.isContentEditable)return 0}return e}function ia(t){if(ut(t)!=="input")return null;const e=t;return e.type==="radio"&&e.name!==""?e:null}function Dy(t,e){const o=ia(t);if(!o)return!0;const n=e.find(r=>{const s=ia(r);return(s==null?void 0:s.name)===o.name&&s.form===o.form&&s.checked});return n?n===o:e.find(r=>{const s=ia(r);return(s==null?void 0:s.name)===o.name&&s.form===o.form})===o}function Uu(t){if(Ve(t)&&ut(t)==="slot"){const e=t.assignedElements({flatten:!0});if(e.length>0)return e}return Ve(t)&&t.shadowRoot?Array.from(t.shadowRoot.children):Array.from(t.children)}function Lu(t,e){Uu(t).forEach(o=>{Ou(o)&&e.push(o),Lu(o,e)})}function ju(t,e,o){Uu(t).forEach(n=>{Ve(n)&&n.matches(e)&&o.push(n),ju(n,e,o)})}function Li(t){return Fu(t)&&Mu(t)>=0}function _u(t){const e=[];return Lu(t,e),e.filter(Fu)}function Er(t){const e=_u(t);return e.filter(o=>Mu(o)>=0&&Dy(o,e))}function zu(t,e){const o=Er(t),n=o.length;if(n===0)return;const r=vt(Le(t)),s=o.indexOf(r),a=s===-1?e===1?0:n-1:s+e;return o[a]}function ji(t){return zu(Le(t).body,1)||t}function Bu(t){return zu(Le(t).body,-1)||t}function Vu(t,e){if(!t)return null;const o=Er(Le(t).body),n=o.length;if(n===0)return null;const r=o.indexOf(t);if(r===-1)return null;const s=(r+e+n)%n;return o[s]}function Py(t){return Vu(t,1)}function Ry(t){return Vu(t,-1)}function In(t,e){const o=e||t.currentTarget,n=t.relatedTarget;return!n||!Ce(o,n)}function Ey(t){Er(t).forEach(o=>{o.dataset.tabindex=o.getAttribute("tabindex")||"",o.setAttribute("tabindex","-1")})}function lc(t){const e=[];ju(t,"[data-tabindex]",e),e.forEach(o=>{const n=o.dataset.tabindex;delete o.dataset.tabindex,n?o.setAttribute("tabindex",n):o.removeAttribute("tabindex")})}function Mo(t,e,o=!0){return t.filter(r=>r.parentId===e).flatMap(r=>{var s;return[...!o||(s=r.context)!=null&&s.open?[r]:[],...Mo(t,r.id,o)]})}function cc(t,e){var r;let o=[],n=(r=t.find(s=>s.id===e))==null?void 0:r.parentId;for(;n;){const s=t.find(a=>a.id===n);n=s==null?void 0:s.parentId,s&&(o=o.concat(s))}return o}function gr(t){return`data-base-ui-${t}`}let qr=0;function ss(t,e={}){const{preventScroll:o=!1,sync:n=!1,shouldFocus:r}=e;cancelAnimationFrame(qr);function s(){r&&!r()||t==null||t.focus({preventScroll:o})}if(n)return s(),Ni;const a=requestAnimationFrame(s);return qr=a,()=>{qr===a&&(cancelAnimationFrame(a),qr=0)}}const la={inert:new WeakMap,"aria-hidden":new WeakMap},dc="data-base-ui-inert",si={inert:new WeakSet,"aria-hidden":new WeakSet};let nr=new WeakMap,ca=0;function Ay(t){return si[t]}function Wu(t){return t?Jn(t)?t.host:Wu(t.parentNode):null}const da=(t,e)=>e.map(o=>{if(t.contains(o))return o;const n=Wu(o);return t.contains(n)?n:null}).filter(o=>o!=null),uc=t=>{const e=new Set;return t.forEach(o=>{let n=o;for(;n&&!e.has(n);)e.add(n),n=n.parentNode}),e},pc=(t,e,o)=>{const n=[],r=s=>{!s||o.has(s)||Array.from(s.children).forEach(a=>{ut(a)!=="script"&&(e.has(a)?r(a):n.push(a))})};return r(t),n};function Ny(t,e,o,n,{mark:r=!0,markerIgnoreElements:s=[]}){const a=n?"inert":o?"aria-hidden":null;let i=null,m=null;const d=da(e,t),c=r?da(e,s):[],p=new Set(c),h=r?pc(e,uc(d),new Set(d)).filter(b=>!p.has(b)):[],y=[],g=[];if(a){const b=la[a],f=Ay(a);m=f,i=b;const w=da(e,Array.from(e.querySelectorAll("[aria-live]"))),T=d.concat(w);pc(e,uc(T),new Set(T)).forEach(C=>{const S=C.getAttribute(a),k=S!==null&&S!=="false",P=(b.get(C)||0)+1;b.set(C,P),y.push(C),P===1&&k&&f.add(C),k||C.setAttribute(a,a==="inert"?"":"true")})}return r&&h.forEach(b=>{const f=(nr.get(b)||0)+1;nr.set(b,f),g.push(b),f===1&&b.setAttribute(dc,"")}),ca+=1,()=>{i&&y.forEach(b=>{const w=(i.get(b)||0)-1;i.set(b,w),w||(!(m!=null&&m.has(b))&&a&&b.removeAttribute(a),m==null||m.delete(b))}),r&&g.forEach(b=>{const f=(nr.get(b)||0)-1;nr.set(b,f),f||b.removeAttribute(dc)}),ca-=1,ca||(la.inert=new WeakMap,la["aria-hidden"]=new WeakMap,si.inert=new WeakSet,si["aria-hidden"]=new WeakSet,nr=new WeakMap)}}function mc(t,e={}){const{ariaHidden:o=!1,inert:n=!1,mark:r=!0,markerIgnoreElements:s=[]}=e,a=Le(t[0]).body;return Ny(t,a,o,n,{mark:r,markerIgnoreElements:s})}let fc=0;function Iy(t,e="mui"){const[o,n]=l.useState(t),r=t||o;return l.useEffect(()=>{o==null&&(fc+=1,n(`${e}-${fc}`))},[o,e]),r}const hc=Oi.useId;function un(t,e){if(hc!==void 0){const o=hc();return t??(e?`${e}-${o}`:o)}return Iy(t,e)}const Oy=parseInt(l.version,10);function _i(t){return Oy>=t}function gc(t){if(!l.isValidElement(t))return null;const e=t,o=e.props;return(_i(19)?o==null?void 0:o.ref:e.ref)??null}function ai(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Fy(t,e){const o={};for(const n in t){const r=t[n];if(e!=null&&e.hasOwnProperty(n)){const s=e[n](r);s!=null&&Object.assign(o,s);continue}r===!0?o[`data-${n.toLowerCase()}`]="":r&&(o[`data-${n.toLowerCase()}`]=r.toString())}return o}function My(t,e){return typeof t=="function"?t(e):t}function Uy(t,e){return typeof t=="function"?t(e):t}const zi={};function Tt(t,e,o,n,r){if(!o&&!n&&!r&&!t)return bs(e);let s=bs(t);return e&&(s=cr(s,e)),o&&(s=cr(s,o)),n&&(s=cr(s,n)),r&&(s=cr(s,r)),s}function Ly(t){if(t.length===0)return zi;if(t.length===1)return bs(t[0]);let e=bs(t[0]);for(let o=1;o=65&&r<=90&&(typeof e=="function"||typeof e>"u")}function Bi(t){return typeof t=="function"}function Hu(t,e){return Bi(t)?t(e):t??zi}function zy(t,e){return e?t?(...o)=>{const n=o[0];if(Ju(n)){const s=n;ys(s);const a=e(...o);return s.baseUIHandlerPrevented||t==null||t(...o),a}const r=e(...o);return t==null||t(...o),r}:$u(e):t}function $u(t){return t&&((...e)=>{const o=e[0];return Ju(o)&&ys(o),t(...e)})}function ys(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Ku(t,e){return e?t?e+" "+t:e:t}function Ju(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}function st(t,e,o={}){const n=e.render,r=By(e,o);if(o.enabled===!1)return null;const s=o.state??Je;return qy(t,n,r,s)}function By(t,e={}){const{className:o,style:n,render:r}=t,{state:s=Je,ref:a,props:i,stateAttributesMapping:m,enabled:d=!0}=e,c=d?My(o,s):void 0,p=d?Uy(n,s):void 0,h=d?Fy(s,m):Je,y=d&&i?Vy(i):void 0,g=d?ai(h,y)??{}:Je;return typeof document<"u"&&(d?Array.isArray(a)?g.ref=Zb([g.ref,gc(r),...a]):g.ref=Gn(g.ref,gc(r),a):Gn(null,null)),d?(c!==void 0&&(g.className=Ku(g.className,c)),p!==void 0&&(g.style=ai(g.style,p)),g):Je}function Vy(t){return Array.isArray(t)?Ly(t):Tt(void 0,t)}const Wy=Symbol.for("react.lazy");function qy(t,e,o,n){if(e){if(typeof e=="function")return e(o,n);const r=Tt(o,e.props);r.ref=o.ref;let s=e;return(s==null?void 0:s.$$typeof)===Wy&&(s=l.Children.toArray(e)[0]),l.cloneElement(s,r)}if(t&&typeof t=="string")return Hy(t,o);throw new Error(rt(8))}function Hy(t,e){return t==="button"?l.createElement("button",{type:"button",...e,key:e.key}):t==="img"?l.createElement("img",{alt:"",...e,key:e.key}):l.createElement(t,e)}const $y=500,Gu=500,Ky={style:{transition:"none"}},Yu="data-base-ui-click-trigger",Jy={fallbackAxisSide:"none"},Vi={fallbackAxisSide:"end"},Gy={clipPath:"inset(50%)",position:"fixed",top:0,left:0},Qu=l.createContext(null),Xu=()=>l.useContext(Qu),Yy=gr("portal");function Zu(t={}){const{ref:e,container:o,componentProps:n=Je,elementProps:r}=t,s=un(),a=Xu(),i=a==null?void 0:a.portalNode,[m,d]=l.useState(null),[c,p]=l.useState(null),h=ke(f=>{f!==null&&p(f)}),y=l.useRef(null);ue(()=>{if(o===null){y.current&&(y.current=null,p(null),d(null));return}if(s==null)return;const f=(o&&(Ri(o)?o:o.current))??i??document.body;if(f==null){y.current&&(y.current=null,p(null),d(null));return}y.current!==f&&(y.current=f,p(null),d(f))},[o,i,s]);const g=st("div",n,{ref:[e,h],props:[{id:s,[Yy]:""},r]});return{portalNode:c,portalSubtree:m&&g?_t.createPortal(g,m):null}}const Wi=l.forwardRef(function(e,o){const{render:n,className:r,style:s,children:a,container:i,renderGuards:m,...d}=e,{portalNode:c,portalSubtree:p}=Zu({container:i,ref:o,componentProps:e,elementProps:d}),h=l.useRef(null),y=l.useRef(null),g=l.useRef(null),b=l.useRef(null),[f,w]=l.useState(null),T=l.useRef(!1),v=f==null?void 0:f.modal,C=f==null?void 0:f.open,S=typeof m=="boolean"?m:!!f&&!f.modal&&f.open&&!!c;l.useEffect(()=>{if(!c||v)return;function P(D){c&&D.relatedTarget&&In(D)&&(D.type==="focusin"?T.current&&(lc(c),T.current=!1):(Ey(c),T.current=!0))}return Xt(Ne(c,"focusin",P,!0),Ne(c,"focusout",P,!0))},[c,v]),l.useEffect(()=>{!c||C!==!1||(lc(c),T.current=!1)},[C,c]);const k=l.useMemo(()=>({beforeOutsideRef:h,afterOutsideRef:y,beforeInsideRef:g,afterInsideRef:b,portalNode:c,setFocusManagerState:w}),[c]);return u.jsxs(l.Fragment,{children:[p,u.jsxs(Qu.Provider,{value:k,children:[S&&c&&u.jsx(Fo,{"data-type":"outside",ref:h,onFocus:P=>{var D;if(In(P,c))(D=g.current)==null||D.focus();else{const I=f?f.domReference:null,N=Bu(I);N==null||N.focus()}}}),S&&c&&u.jsx("span",{"aria-owns":c.id,style:Gy}),c&&_t.createPortal(a,c),S&&c&&u.jsx(Fo,{"data-type":"outside",ref:y,onFocus:P=>{var D;if(In(P,c))(D=b.current)==null||D.focus();else{const I=f?f.domReference:null,N=ji(I);N==null||N.focus(),f!=null&&f.closeOnFocusOut&&(f==null||f.onOpenChange(!1,Oe(dn,P.nativeEvent)))}}})]})]})});function ep(){const t=new Map;return{emit(e,o){var n;(n=t.get(e))==null||n.forEach(r=>r(o))},on(e,o){t.has(e)||t.set(e,new Set),t.get(e).add(o)},off(e,o){var n;(n=t.get(e))==null||n.delete(o)}}}class qi{constructor(){_e(this,"nodesRef",{current:[]});_e(this,"events",ep())}addNode(e){this.nodesRef.current.push(e)}removeNode(e){const o=this.nodesRef.current.findIndex(n=>n===e);o!==-1&&this.nodesRef.current.splice(o,1)}}const tp=l.createContext(null),op=l.createContext(null),mo=()=>{var t;return((t=l.useContext(tp))==null?void 0:t.id)||null},zo=t=>{const e=l.useContext(op);return t??e};function Hi(t){const e=un(),o=zo(t),n=mo();return ue(()=>{if(!e)return;const r={id:e,parentId:n};return o==null||o.addNode(r),()=>{o==null||o.removeNode(r)}},[o,e,n]),e}function np(t){const{children:e,id:o}=t,n=mo();return u.jsx(tp.Provider,{value:l.useMemo(()=>({id:o,parentId:n}),[o,n]),children:e})}function rp(t){const{children:e,externalTree:o}=t,n=Nt(()=>o??new qi).current;return u.jsx(op.Provider,{value:n,children:e})}function ao(t){return t==null?t:"current"in t?t.current:t}function Qy(t,e){const o=Ze(ht(t));return t instanceof o.KeyboardEvent?"keyboard":t instanceof o.FocusEvent?e||"keyboard":"pointerType"in t?t.pointerType||"keyboard":"touches"in t?"touch":t instanceof o.MouseEvent?e||(t.detail===0?"keyboard":"mouse"):""}const bc=20;let Eo=[];function $i(){Eo=Eo.filter(t=>{var e;return(e=t.deref())==null?void 0:e.isConnected})}function Xy(t){$i(),t&&ut(t)!=="body"&&(Eo.push(new WeakRef(t)),Eo.length>bc&&(Eo=Eo.slice(-bc)))}function ua(){var t;return $i(),(t=Eo[Eo.length-1])==null?void 0:t.deref()}function Zy(t){return t?Li(t)?t:Er(t)[0]||t:null}function yc(t,e){var s;if(t.hasAttribute("tabindex")&&!t.hasAttribute("data-tabindex")||!e.current.includes("floating")&&!((s=t.getAttribute("role"))!=null&&s.includes("dialog")))return;const n=_u(t).filter(a=>{const i=a.getAttribute("data-tabindex")||"";return Li(a)||a.hasAttribute("data-tabindex")&&!i.startsWith("-")}),r=t.getAttribute("tabindex");e.current.includes("floating")||n.length===0?r!=="0"&&t.setAttribute("tabindex","0"):(r!=="-1"||t.hasAttribute("data-tabindex")&&t.getAttribute("data-tabindex")!=="-1")&&(t.setAttribute("tabindex","-1"),t.setAttribute("data-tabindex","-1"))}function Ki(t){const{context:e,children:o,disabled:n=!1,initialFocus:r=!0,returnFocus:s=!0,restoreFocus:a=!1,modal:i=!0,closeOnFocusOut:m=!0,openInteractionType:d="",nextFocusableElement:c,previousFocusableElement:p,beforeContentFocusGuardRef:h,externalTree:y,getInsideElements:g}=t,b="rootStore"in e?e.rootStore:e,f=b.useState("open"),w=b.useState("domReferenceElement"),T=b.useState("floatingElement"),{events:v,dataRef:C}=b.context,S=ke(()=>{var K;return(K=C.current.floatingContext)==null?void 0:K.nodeId}),k=r===!1,P=Xa(w)&&k,D=l.useRef(["content"]),I=nt(r),N=nt(s),z=nt(d),U=zo(y),R=Xu(),W=l.useRef(!1),O=l.useRef(!1),j=l.useRef(!1),x=l.useRef(null),F=l.useRef(""),H=l.useRef(""),A=l.useRef(null),Q=l.useRef(null),M=Gn(A,h,R==null?void 0:R.beforeInsideRef),L=Gn(Q,R==null?void 0:R.afterInsideRef),V=gt(),_=gt(),B=hr(),Y=R!=null,q=Za(T),J=ke((K=q)=>K?Er(K):[]),Te=ke(()=>(g==null?void 0:g().filter(K=>K!=null))??[]);l.useEffect(()=>{if(n||!i)return;function K(le){le.key==="Tab"&&Ce(q,vt(Le(q)))&&J().length===0&&!P&&Et(le)}const de=Le(q);return Ne(de,"keydown",K)},[n,q,i,P,J]),l.useEffect(()=>{if(n||!f)return;const K=Le(q);function de(){j.current=!1}function le(me){const fe=ht(me),Se=Te(),Z=Ce(T,fe)||Ce(w,fe)||Ce(R==null?void 0:R.portalNode,fe)||Se.some(Fe=>Fe===fe||Ce(Fe,fe));j.current=!Z,H.current=me.pointerType||"keyboard",fe!=null&&fe.closest(`[${Yu}]`)&&(O.current=!0)}function De(){H.current="keyboard"}return Xt(Ne(K,"pointerdown",le,!0),Ne(K,"pointerup",de,!0),Ne(K,"pointercancel",de,!0),Ne(K,"keydown",De,!0))},[n,T,w,q,f,R,Te]),l.useEffect(()=>{if(n||!m)return;const K=Le(q);function de(){O.current=!0,_.start(0,()=>{O.current=!1})}function le(Se){const Z=ht(Se);Li(Z)&&(x.current=Z)}function De(Se){const Z=Se.relatedTarget,Fe=Se.currentTarget,we=ht(Se);queueMicrotask(()=>{const he=S(),Pe=b.context.triggerElements,se=Te(),$=(Z==null?void 0:Z.hasAttribute(gr("focus-guard")))&&[A.current,Q.current,R==null?void 0:R.beforeInsideRef.current,R==null?void 0:R.afterInsideRef.current,R==null?void 0:R.beforeOutsideRef.current,R==null?void 0:R.afterOutsideRef.current,ao(p),ao(c)].includes(Z),ee=!(Ce(w,Z)||Ce(T,Z)||Ce(Z,T)||Ce(R==null?void 0:R.portalNode,Z)||se.some(te=>te===Z||Ce(te,Z))||Z!=null&&Pe.hasElement(Z)||Pe.hasMatchingElement(te=>Ce(te,Z))||$||U&&(Mo(U.nodesRef.current,he).find(te=>{var G,ge;return Ce((G=te.context)==null?void 0:G.elements.floating,Z)||Ce((ge=te.context)==null?void 0:ge.elements.domReference,Z)})||cc(U.nodesRef.current,he).find(te=>{var G,ge,xe;return[(G=te.context)==null?void 0:G.elements.floating,Za((ge=te.context)==null?void 0:ge.elements.floating)].includes(Z)||((xe=te.context)==null?void 0:xe.elements.domReference)===Z})));if(Fe===w&&q&&yc(q,D),a&&Fe!==w&&!Fs(we)&&vt(K)===K.body){if(Ve(q)&&(q.focus(),a==="popup")){B.request(()=>{q.focus()});return}const te=J(),G=x.current,ge=(G&&te.includes(G)?G:null)||te[te.length-1]||q;Ve(ge)&&ge.focus()}if(C.current.insideReactTree){C.current.insideReactTree=!1;return}(P||!i)&&Z&&ee&&!O.current&&(P||Z!==ua())&&(W.current=!0,b.setOpen(!1,Oe(dn,Se)))})}function me(){j.current||(C.current.insideReactTree=!0,V.start(0,()=>{C.current.insideReactTree=!1}))}const fe=Ve(w)?w:null;if(!(!T&&!fe))return Xt(fe&&Ne(fe,"focusout",De),fe&&Ne(fe,"pointerdown",de),T&&Ne(T,"focusin",le),T&&Ne(T,"focusout",De),T&&R&&Ne(T,"focusout",me,!0))},[n,w,T,q,i,U,R,b,m,a,J,P,S,D,C,V,_,B,c,p,Te]),l.useEffect(()=>{var Fe,we,he;if(n||!T||!f)return;const K=Array.from(((Fe=R==null?void 0:R.portalNode)==null?void 0:Fe.querySelectorAll(`[${gr("portal")}]`))||[]),le=(he=(we=(U?cc(U.nodesRef.current,S()):[]).find(Pe=>{var se;return Xa(((se=Pe.context)==null?void 0:se.elements.domReference)||null)}))==null?void 0:we.context)==null?void 0:he.elements.domReference,me=[...[T,...K,A.current,Q.current,R==null?void 0:R.beforeOutsideRef.current,R==null?void 0:R.afterOutsideRef.current,...Te()],le,ao(p),ao(c),P?w:null].filter(Pe=>Pe!=null),fe=mc(me,{ariaHidden:i||P,mark:!1}),Se=[T,...K].filter(Pe=>Pe!=null),Z=mc(Se);return()=>{Z(),fe()}},[f,n,w,T,i,R,P,U,S,c,p,Te]),ue(()=>{if(!f||n||!Ve(q))return;const K=Le(q),de=vt(K);queueMicrotask(()=>{const le=I.current,De=typeof le=="function"?le(z.current||""):le;if(De===void 0||De===!1||Ce(q,de))return;let fe=null;const Se=()=>(fe==null&&(fe=J(q)),fe[0]||q);let Z;De===!0||De===null?Z=Se():Z=ao(De),Z=Z||Se();const Fe=Ce(q,vt(K));ss(Z,{preventScroll:Z===q,shouldFocus(){if(Fe)return!0;const we=vt(K);return!(we!==Z&&Ce(q,we))}})})},[n,f,q,J,I,z]),ue(()=>{if(n||!q)return;const K=Le(q),de=vt(K);Xy(de);function le(me){if(me.open||(F.current=Qy(me.nativeEvent,H.current)),me.reason===Ye&&me.nativeEvent.type==="mouseleave"&&(W.current=!0),me.reason===Ii)if(me.nested)W.current=!1;else if(vu(me.nativeEvent)||Cu(me.nativeEvent))W.current=!1;else{let fe=!1;Le(q).createElement("div").focus({get preventScroll(){return fe=!0,!1}}),fe?W.current=!1:W.current=!0}}v.on("openchange",le);function De(){const me=N.current;let fe=typeof me=="function"?me(F.current):me;if(fe===void 0||fe===!1)return null;if(fe===null&&(fe=!0),typeof fe=="boolean")return w!=null&&w.isConnected?w:ua()||null;const Se=w!=null&&w.isConnected?w:ua();return ao(fe)||Se||null}return()=>{v.off("openchange",le);const me=vt(K),fe=Te(),Se=Ce(T,me)||fe.some(we=>we===me||Ce(we,me))||U&&Mo(U.nodesRef.current,S(),!1).some(we=>{var he;return Ce((he=we.context)==null?void 0:he.elements.floating,me)}),Z=N.current,Fe=De();queueMicrotask(()=>{const we=Zy(Fe),he=typeof Z!="boolean";Z&&!W.current&&Ve(we)&&(!(!he&&we!==me&&me!==K.body)||Se)&&we.focus({preventScroll:!0}),W.current=!1})}},[n,T,q,N,v,U,w,S,Te]),ue(()=>{if(!hu||f||!T)return;const K=vt(Le(T));!Ve(K)||!Is(K)||Ce(T,K)&&K.blur()},[f,T]),ue(()=>{if(!(n||!R))return R.setFocusManagerState({modal:i,closeOnFocusOut:m,open:f,onOpenChange:b.setOpen,domReference:w}),()=>{R.setFocusManagerState(null)}},[n,R,i,f,b,m,w]),ue(()=>{if(!(n||!q))return yc(q,D),()=>{queueMicrotask($i)}},[n,q,D]);const Re=!n&&(i?!P:!0)&&(Y||i);return u.jsxs(l.Fragment,{children:[Re&&u.jsx(Fo,{"data-type":"inside",ref:M,onFocus:K=>{var de;if(i){const le=J();ss(le[le.length-1])}else if(R!=null&&R.portalNode)if(W.current=!1,In(K,R.portalNode)){const le=ji(w);le==null||le.focus()}else(de=ao(p??R.beforeOutsideRef))==null||de.focus()}}),o,Re&&u.jsx(Fo,{"data-type":"inside",ref:L,onFocus:K=>{var de;if(i)ss(J()[0]);else if(R!=null&&R.portalNode)if(m&&(W.current=!0),In(K,R.portalNode)){const le=Bu(w);le==null||le.focus()}else(de=ao(c??R.afterOutsideRef))==null||de.focus()}})]})}function Ji(t,e={}){const{enabled:o=!0,event:n="click",toggle:r=!0,ignoreMouse:s=!1,stickIfOpen:a=!0,touchOpenDelay:i=0,reason:m=uo}=e,d="rootStore"in t?t.rootStore:t,c=d.context.dataRef,p=l.useRef(void 0),h=hr(),y=gt(),g=l.useMemo(()=>{function b(w,T,v,C){const S=Oe(m,T,v);w&&C==="touch"&&i>0?y.start(i,()=>{d.setOpen(!0,S)}):d.setOpen(w,S)}function f(w,T,v){const C=c.current.openEvent,S=d.select("domReferenceElement")!==T;return w&&S||!w||!r?!0:C&&a?!v(C.type):!1}return{onPointerDown(w){p.current=w.pointerType},onMouseDown(w){const T=p.current,v=w.nativeEvent,C=d.select("open");if(w.button!==0||n==="click"||cn(T,!0)&&s)return;const S=f(C,w.currentTarget,D=>D==="click"||D==="mousedown"),k=ht(v);if(Is(k)){b(S,v,k,T);return}const P=w.currentTarget;h.request(()=>{b(S,v,P,T)})},onClick(w){if(n==="mousedown-only")return;const T=p.current;if(n==="mousedown"&&T){p.current=void 0;return}if(cn(T,!0)&&s)return;const v=d.select("open"),C=f(v,w.currentTarget,S=>S==="click"||S==="mousedown"||S==="keydown"||S==="keyup");b(C,w.nativeEvent,w.currentTarget,T)},onKeyDown(){p.current=void 0}}},[c,n,s,m,d,a,r,h,y,i]);return l.useMemo(()=>o?{reference:g}:Je,[o,g])}function ew(t,e){let o=null,n=null,r=!1;return{contextElement:t||void 0,getBoundingClientRect(){var y;const s=(t==null?void 0:t.getBoundingClientRect())||{width:0,height:0,x:0,y:0},a=e.axis==="x"||e.axis==="both",i=e.axis==="y"||e.axis==="both",m=["mouseenter","mousemove"].includes(((y=e.dataRef.current.openEvent)==null?void 0:y.type)||"")&&e.pointerType!=="touch";let d=s.width,c=s.height,p=s.x,h=s.y;return o==null&&e.x&&a&&(o=s.x-e.x),n==null&&e.y&&i&&(n=s.y-e.y),p-=o||0,h-=n||0,d=0,c=0,!r||m?(d=e.axis==="y"?s.width:0,c=e.axis==="x"?s.height:0,p=a&&e.x!=null?e.x:p,h=i&&e.y!=null?e.y:h):r&&!m&&(c=e.axis==="x"?s.height:c,d=e.axis==="y"?s.width:d),r=!0,{width:d,height:c,x:p,y:h,top:h,right:p+d,bottom:h+c,left:p}}}}function wc(t){return t!=null&&t.clientX!=null}function tw(t,e={}){const{enabled:o=!0,axis:n="both"}=e,r="rootStore"in t?t.rootStore:t,s=r.useState("open"),a=r.useState("floatingElement"),i=r.useState("domReferenceElement"),m=r.context.dataRef,d=l.useRef(!1),c=l.useRef(null),[p,h]=l.useState(),[y,g]=l.useState([]),b=ke(C=>{r.set("positionReference",C)}),f=ke((C,S,k)=>{d.current||m.current.openEvent&&!wc(m.current.openEvent)||r.set("positionReference",ew(k??i,{x:C,y:S,axis:n,dataRef:m,pointerType:p}))}),w=ke(C=>{s?c.current||(f(C.clientX,C.clientY,C.currentTarget),g([])):f(C.clientX,C.clientY,C.currentTarget)}),T=cn(p)?a:s;l.useEffect(()=>{if(!o){b(i);return}if(!T)return;function C(){var P;(P=c.current)==null||P.call(c),c.current=null}const S=Ze(a);function k(P){const D=ht(P);Ce(a,D)?C():f(P.clientX,P.clientY)}return!m.current.openEvent||wc(m.current.openEvent)?c.current=Ne(S,"mousemove",k):b(i),C},[T,o,a,m,i,r,f,b,y]),l.useEffect(()=>()=>{r.set("positionReference",null)},[r]),l.useEffect(()=>{o&&!a&&(d.current=!1)},[o,a]),l.useEffect(()=>{!o&&s&&(d.current=!0)},[o,s]);const v=l.useMemo(()=>{function C(S){h(S.pointerType)}return{onPointerDown:C,onPointerEnter:C,onMouseMove:w,onMouseEnter:w}},[w]);return l.useMemo(()=>o?{reference:v,trigger:v}:{},[o,v])}const ow={intentional:"onClick",sloppy:"onPointerDown"};function nw(){return!1}function rw(t){return{escapeKey:typeof t=="boolean"?t:(t==null?void 0:t.escapeKey)??!1,outsidePress:typeof t=="boolean"?t:(t==null?void 0:t.outsidePress)??!0}}function Ms(t,e={}){const{enabled:o=!0,escapeKey:n=!0,outsidePress:r=!0,outsidePressEvent:s="sloppy",referencePress:a=nw,referencePressEvent:i="sloppy",bubbles:m,externalTree:d}=e,c="rootStore"in t?t.rootStore:t,p=c.useState("open"),h=c.useState("floatingElement"),{dataRef:y}=c.context,g=zo(d),b=ke(typeof r=="function"?r:()=>!1),f=typeof r=="function"?b:r,w=f!==!1,T=ke(()=>s),{escapeKey:v,outsidePress:C}=rw(m),S=l.useRef(!1),k=l.useRef(!1),P=l.useRef(!1),D=l.useRef(!1),I=l.useRef(""),N=l.useRef(null),z=gt(),U=gt(),R=ke(()=>{U.clear(),y.current.insideReactTree=!1}),W=ke(L=>{var B;const V=(B=y.current.floatingContext)==null?void 0:B.nodeId;return(g?Mo(g.nodesRef.current,V):[]).some(Y=>{var q;return((q=Y.context)==null?void 0:q.open)&&!Y.context.dataRef.current[L]})}),O=ke(L=>ra(L,c.select("floatingElement"))||ra(L,c.select("domReferenceElement"))),j=ke(L=>{a()&&c.setOpen(!1,Oe(uo,L.nativeEvent))}),x=ke(L=>{if(!p||!o||!n||L.key!=="Escape"||D.current||!v&&W("__escapeKeyBubbles"))return;const V=jb(L)?L.nativeEvent:L,_=Oe(Rr,V);c.setOpen(!1,_),_.isCanceled||L.preventDefault(),!v&&!_.isPropagationAllowed&&L.stopPropagation()}),F=ke(()=>{y.current.insideReactTree=!0,U.start(0,R)}),H=ke(L=>{if(!p||!o||L.button!==0)return;const V=ht(L.nativeEvent);Ce(c.select("floatingElement"),V)&&(S.current||(S.current=!0,k.current=!1))}),A=ke(L=>{!p||!o||(L.defaultPrevented||L.nativeEvent.defaultPrevented)&&S.current&&(k.current=!0)});l.useEffect(()=>{if(!p||!o)return;y.current.__escapeKeyBubbles=v,y.current.__outsidePressBubbles=C;const L=new Mt,V=new Mt;function _(){L.clear(),D.current=!0}function B(){L.start(As()?5:0,()=>{D.current=!1})}function Y(){P.current=!0,V.start(0,()=>{P.current=!1})}function q(){S.current=!1,k.current=!1}function J(){const $=I.current,ee=$==="pen"||!$?"mouse":$,te=T(),G=typeof te=="function"?te():te;return typeof G=="string"?G:G[ee]}function Te($){const ee=J();return ee==="intentional"&&$.type!=="click"||ee==="sloppy"&&$.type==="click"}function Re($){var G;const ee=(G=y.current.floatingContext)==null?void 0:G.nodeId,te=g&&Mo(g.nodesRef.current,ee).some(ge=>{var xe;return ra($,(xe=ge.context)==null?void 0:xe.elements.floating)});return O($)||te}function K($){if(Te($)){$.type!=="click"&&!O($)&&(V.clear(),P.current=!1),R();return}if(y.current.insideReactTree){R();return}const ee=ht($),te=`[${gr("inert")}]`,G=Ae(ee)?ee.getRootNode():null,ge=Array.from((Jn(G)?G:Le(c.select("floatingElement"))).querySelectorAll(te)),xe=c.context.triggerElements;if(ee&&(xe.hasElement(ee)||xe.hasMatchingElement(ze=>Ce(ze,ee))))return;let Ke=Ae(ee)?ee:null;for(;Ke&&!Qt(Ke);){const ze=to(Ke);if(Qt(ze)||!Ae(ze))break;Ke=ze}if(!(ge.length&&Ae(ee)&&!qb(ee)&&!Ce(ee,c.select("floatingElement"))&&ge.every(ze=>!Ce(Ke,ze)))){if(Ve(ee)&&!("touches"in $)){const ze=Qt(ee),Ge=kt(ee),it=/auto|scroll/,It=ze||it.test(Ge.overflowX),Bt=ze||it.test(Ge.overflowY),Vt=It&&ee.clientWidth>0&&ee.scrollWidth>ee.clientWidth,ho=Bt&&ee.clientHeight>0&&ee.scrollHeight>ee.clientHeight,St=Ge.direction==="rtl",Tn=ho&&(St?$.offsetX<=ee.offsetWidth-ee.clientWidth:$.offsetX>ee.clientWidth),je=Vt&&$.offsetY>ee.clientHeight;if(Tn||je)return}if(!Re($)){if(J()==="intentional"&&P.current){V.clear(),P.current=!1;return}typeof f=="function"&&!f($)||W("__outsidePressBubbles")||(c.setOpen(!1,Oe(Ii,$)),R())}}}function de($){J()!=="sloppy"||$.pointerType==="touch"||!c.select("open")||!o||O($)||K($)}function le($){if(J()!=="sloppy"||!c.select("open")||!o||O($))return;const ee=$.touches[0];ee&&(N.current={startTime:Date.now(),startX:ee.clientX,startY:ee.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},z.start(1e3,()=>{N.current&&(N.current.dismissOnTouchEnd=!1,N.current.dismissOnMouseDown=!1)}))}function De($,ee){const te=ht($);if(!te)return;const G=Ne(te,$.type,()=>{ee($),G()})}function me($){I.current="touch",De($,le)}function fe($){z.clear(),$.type==="pointerdown"&&(I.current=$.pointerType),!($.type==="mousedown"&&N.current&&!N.current.dismissOnMouseDown)&&De($,ee=>{ee.type==="pointerdown"?de(ee):K(ee)})}function Se($){if(!S.current)return;const ee=k.current;if(q(),J()==="intentional"){if($.type==="pointercancel"){ee&&Y();return}if(!Re($)){if(ee){Y();return}typeof f=="function"&&!f($)||(V.clear(),P.current=!0,R())}}}function Z($){if(J()!=="sloppy"||!N.current||O($))return;const ee=$.touches[0];if(!ee)return;const te=Math.abs(ee.clientX-N.current.startX),G=Math.abs(ee.clientY-N.current.startY),ge=Math.sqrt(te*te+G*G);ge>5&&(N.current.dismissOnTouchEnd=!0),ge>10&&(K($),z.clear(),N.current=null)}function Fe($){De($,Z)}function we($){J()!=="sloppy"||!N.current||O($)||(N.current.dismissOnTouchEnd&&K($),z.clear(),N.current=null)}function he($){De($,we)}const Pe=Le(h),se=Xt(n&&Xt(Ne(Pe,"keydown",x),Ne(Pe,"compositionstart",_),Ne(Pe,"compositionend",B)),w&&Xt(Ne(Pe,"click",fe,!0),Ne(Pe,"pointerdown",fe,!0),Ne(Pe,"pointerup",Se,!0),Ne(Pe,"pointercancel",Se,!0),Ne(Pe,"mousedown",fe,!0),Ne(Pe,"mouseup",Se,!0),Ne(Pe,"touchstart",me,!0),Ne(Pe,"touchmove",Fe,!0),Ne(Pe,"touchend",he,!0)));return()=>{se(),L.clear(),V.clear(),q(),P.current=!1}},[y,h,n,w,f,p,o,v,C,x,R,T,W,O,g,c,z]),l.useEffect(R,[f,R]);const Q=l.useMemo(()=>({onKeyDown:x,[ow[i]]:j,...i!=="intentional"&&{onClick:j}}),[x,j,i]),M=l.useMemo(()=>({onKeyDown:x,onPointerDown:A,onMouseDown:A,onClickCapture:F,onMouseDownCapture(L){F(),H(L)},onPointerDownCapture(L){F(),H(L)},onMouseUpCapture:F,onTouchEndCapture:F,onTouchMoveCapture:F}),[x,F,H,A]);return l.useMemo(()=>o?{reference:Q,floating:M,trigger:Q}:{},[o,Q,M])}function vc(t,e,o){let{reference:n,floating:r}=t;const s=Ft(e),a=Ui(e),i=Mi(a),m=Ct(e),d=s==="y",c=n.x+n.width/2-r.width/2,p=n.y+n.height/2-r.height/2,h=n[i]/2-r[i]/2;let y;switch(m){case"top":y={x:c,y:n.y-r.height};break;case"bottom":y={x:c,y:n.y+n.height};break;case"right":y={x:n.x+n.width,y:p};break;case"left":y={x:n.x-r.width,y:p};break;default:y={x:n.x,y:n.y}}switch(_o(e)){case"start":y[a]-=h*(o&&d?-1:1);break;case"end":y[a]+=h*(o&&d?-1:1);break}return y}async function sw(t,e){var o;e===void 0&&(e={});const{x:n,y:r,platform:s,rects:a,elements:i,strategy:m}=t,{boundary:d="clippingAncestors",rootBoundary:c="viewport",elementContext:p="floating",altBoundary:h=!1,padding:y=0}=po(e,t),g=Iu(y),f=i[h?p==="floating"?"reference":"floating":p],w=hs(await s.getClippingRect({element:(o=await(s.isElement==null?void 0:s.isElement(f)))==null||o?f:f.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(i.floating)),boundary:d,rootBoundary:c,strategy:m})),T=p==="floating"?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(i.floating)),C=await(s.isElement==null?void 0:s.isElement(v))?await(s.getScale==null?void 0:s.getScale(v))||{x:1,y:1}:{x:1,y:1},S=hs(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:i,rect:T,offsetParent:v,strategy:m}):T);return{top:(w.top-S.top+g.top)/C.y,bottom:(S.bottom-w.bottom+g.bottom)/C.y,left:(w.left-S.left+g.left)/C.x,right:(S.right-w.right+g.right)/C.x}}const aw=50,iw=async(t,e,o)=>{const{placement:n="bottom",strategy:r="absolute",middleware:s=[],platform:a}=o,i=a.detectOverflow?a:{...a,detectOverflow:sw},m=await(a.isRTL==null?void 0:a.isRTL(e));let d=await a.getElementRects({reference:t,floating:e,strategy:r}),{x:c,y:p}=vc(d,n,m),h=n,y=0;const g={};for(let b=0;bW<=0)){var z,U;const W=(((z=s.flip)==null?void 0:z.index)||0)+1,O=P[W];if(O&&(!(p==="alignment"?T!==Ft(O):!1)||N.every(F=>Ft(F.placement)===T?F.overflows[0]>0:!0)))return{data:{index:W,overflows:N},reset:{placement:O}};let j=(U=N.filter(x=>x.overflows[0]<=0).sort((x,F)=>x.overflows[1]-F.overflows[1])[0])==null?void 0:U.placement;if(!j)switch(y){case"bestFit":{var R;const x=(R=N.filter(F=>{if(k){const H=Ft(F.placement);return H===T||H==="y"}return!0}).map(F=>[F.placement,F.overflows.filter(H=>H>0).reduce((H,A)=>H+A,0)]).sort((F,H)=>F[1]-H[1])[0])==null?void 0:R[0];x&&(j=x);break}case"initialPlacement":j=i;break}if(r!==j)return{reset:{placement:j}}}return{}}}};function Cc(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Tc(t){return ly.some(e=>t[e]>=0)}const cw=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:o,platform:n}=e,{strategy:r="referenceHidden",...s}=po(t,e);switch(r){case"referenceHidden":{const a=await n.detectOverflow(e,{...s,elementContext:"reference"}),i=Cc(a,o.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:Tc(i)}}}case"escaped":{const a=await n.detectOverflow(e,{...s,altBoundary:!0}),i=Cc(a,o.floating);return{data:{escapedOffsets:i,escaped:Tc(i)}}}default:return{}}}}},sp=new Set(["left","top"]);async function dw(t,e){const{placement:o,platform:n,elements:r}=t,s=await(n.isRTL==null?void 0:n.isRTL(r.floating)),a=Ct(o),i=_o(o),m=Ft(o)==="y",d=sp.has(a)?-1:1,c=s&&m?-1:1,p=po(e,t);let{mainAxis:h,crossAxis:y,alignmentAxis:g}=typeof p=="number"?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return i&&typeof g=="number"&&(y=i==="end"?g*-1:g),m?{x:y*c,y:h*d}:{x:h*d,y:y*c}}const uw=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var o,n;const{x:r,y:s,placement:a,middlewareData:i}=e,m=await dw(e,t);return a===((o=i.offset)==null?void 0:o.placement)&&(n=i.arrow)!=null&&n.alignmentOffset?{}:{x:r+m.x,y:s+m.y,data:{...m,placement:a}}}}},pw=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:o,y:n,placement:r,platform:s}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:m={fn:w=>{let{x:T,y:v}=w;return{x:T,y:v}}},...d}=po(t,e),c={x:o,y:n},p=await s.detectOverflow(e,d),h=Ft(Ct(r)),y=Fi(h);let g=c[y],b=c[h];if(a){const w=y==="y"?"top":"left",T=y==="y"?"bottom":"right",v=g+p[w],C=g-p[T];g=oi(v,g,C)}if(i){const w=h==="y"?"top":"left",T=h==="y"?"bottom":"right",v=b+p[w],C=b-p[T];b=oi(v,b,C)}const f=m.fn({...e,[y]:g,[h]:b});return{...f,data:{x:f.x-o,y:f.y-n,enabled:{[y]:a,[h]:i}}}}}},mw=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:o,y:n,placement:r,rects:s,middlewareData:a}=e,{offset:i=0,mainAxis:m=!0,crossAxis:d=!0}=po(t,e),c={x:o,y:n},p=Ft(r),h=Fi(p);let y=c[h],g=c[p];const b=po(i,e),f=typeof b=="number"?{mainAxis:b,crossAxis:0}:{mainAxis:0,crossAxis:0,...b};if(m){const v=h==="y"?"height":"width",C=s.reference[h]-s.floating[v]+f.mainAxis,S=s.reference[h]+s.reference[v]-f.mainAxis;yS&&(y=S)}if(d){var w,T;const v=h==="y"?"width":"height",C=sp.has(Ct(r)),S=s.reference[p]-s.floating[v]+(C&&((w=a.offset)==null?void 0:w[p])||0)+(C?0:f.crossAxis),k=s.reference[p]+s.reference[v]+(C?0:((T=a.offset)==null?void 0:T[p])||0)-(C?f.crossAxis:0);gk&&(g=k)}return{[h]:y,[p]:g}}}},fw=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var o,n;const{placement:r,rects:s,platform:a,elements:i}=e,{apply:m=()=>{},...d}=po(t,e),c=await a.detectOverflow(e,d),p=Ct(r),h=_o(r),y=Ft(r)==="y",{width:g,height:b}=s.floating;let f,w;p==="top"||p==="bottom"?(f=p,w=h===(await(a.isRTL==null?void 0:a.isRTL(i.floating))?"start":"end")?"left":"right"):(w=p,f=h==="end"?"top":"bottom");const T=b-c.top-c.bottom,v=g-c.left-c.right,C=Yn(b-c[f],T),S=Yn(g-c[w],v),k=!e.middlewareData.shift;let P=C,D=S;if((o=e.middlewareData.shift)!=null&&o.enabled.x&&(D=v),(n=e.middlewareData.shift)!=null&&n.enabled.y&&(P=T),k&&!h){const N=At(c.left,0),z=At(c.right,0),U=At(c.top,0),R=At(c.bottom,0);y?D=g-2*(N!==0||z!==0?N+z:At(c.left,c.right)):P=b-2*(U!==0||R!==0?U+R:At(c.top,c.bottom))}await m({...e,availableWidth:D,availableHeight:P});const I=await a.getDimensions(i.floating);return g!==I.width||b!==I.height?{reset:{rects:!0}}:{}}}};function ap(t){const e=kt(t);let o=parseFloat(e.width)||0,n=parseFloat(e.height)||0;const r=Ve(t),s=r?t.offsetWidth:o,a=r?t.offsetHeight:n,i=ms(o)!==s||ms(n)!==a;return i&&(o=s,n=a),{width:o,height:n,$:i}}function Gi(t){return Ae(t)?t:t.contextElement}function On(t){const e=Gi(t);if(!Ve(e))return Zt(1);const o=e.getBoundingClientRect(),{width:n,height:r,$:s}=ap(e);let a=(s?ms(o.width):o.width)/n,i=(s?ms(o.height):o.height)/r;return(!a||!Number.isFinite(a))&&(a=1),(!i||!Number.isFinite(i))&&(i=1),{x:a,y:i}}const hw=Zt(0);function ip(t){const e=Ze(t);return!As()||!e.visualViewport?hw:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function gw(t,e,o){return e===void 0&&(e=!1),!o||e&&o!==Ze(t)?!1:e}function pn(t,e,o,n){e===void 0&&(e=!1),o===void 0&&(o=!1);const r=t.getBoundingClientRect(),s=Gi(t);let a=Zt(1);e&&(n?Ae(n)&&(a=On(n)):a=On(t));const i=gw(s,o,n)?ip(s):Zt(0);let m=(r.left+i.x)/a.x,d=(r.top+i.y)/a.y,c=r.width/a.x,p=r.height/a.y;if(s){const h=Ze(s),y=n&&Ae(n)?Ze(n):n;let g=h,b=Ya(g);for(;b&&n&&y!==g;){const f=On(b),w=b.getBoundingClientRect(),T=kt(b),v=w.left+(b.clientLeft+parseFloat(T.paddingLeft))*f.x,C=w.top+(b.clientTop+parseFloat(T.paddingTop))*f.y;m*=f.x,d*=f.y,c*=f.x,p*=f.y,m+=v,d+=C,g=Ze(b),b=Ya(g)}}return hs({width:c,height:p,x:m,y:d})}function Us(t,e){const o=Ns(t).scrollLeft;return e?e.left+o:pn(oo(t)).left+o}function lp(t,e){const o=t.getBoundingClientRect(),n=o.left+e.scrollLeft-Us(t,o),r=o.top+e.scrollTop;return{x:n,y:r}}function bw(t){let{elements:e,rect:o,offsetParent:n,strategy:r}=t;const s=r==="fixed",a=oo(n),i=e?Es(e.floating):!1;if(n===a||i&&s)return o;let m={scrollLeft:0,scrollTop:0},d=Zt(1);const c=Zt(0),p=Ve(n);if((p||!p&&!s)&&((ut(n)!=="body"||jo(a))&&(m=Ns(n)),p)){const y=pn(n);d=On(n),c.x=y.x+n.clientLeft,c.y=y.y+n.clientTop}const h=a&&!p&&!s?lp(a,m):Zt(0);return{width:o.width*d.x,height:o.height*d.y,x:o.x*d.x-m.scrollLeft*d.x+c.x+h.x,y:o.y*d.y-m.scrollTop*d.y+c.y+h.y}}function yw(t){return Array.from(t.getClientRects())}function ww(t){const e=oo(t),o=Ns(t),n=t.ownerDocument.body,r=At(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),s=At(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let a=-o.scrollLeft+Us(t);const i=-o.scrollTop;return kt(n).direction==="rtl"&&(a+=At(e.clientWidth,n.clientWidth)-r),{width:r,height:s,x:a,y:i}}const kc=25;function vw(t,e){const o=Ze(t),n=oo(t),r=o.visualViewport;let s=n.clientWidth,a=n.clientHeight,i=0,m=0;if(r){s=r.width,a=r.height;const c=As();(!c||c&&e==="fixed")&&(i=r.offsetLeft,m=r.offsetTop)}const d=Us(n);if(d<=0){const c=n.ownerDocument,p=c.body,h=getComputedStyle(p),y=c.compatMode==="CSS1Compat"&&parseFloat(h.marginLeft)+parseFloat(h.marginRight)||0,g=Math.abs(n.clientWidth-p.clientWidth-y);g<=kc&&(s-=g)}else d<=kc&&(s+=d);return{width:s,height:a,x:i,y:m}}function Cw(t,e){const o=pn(t,!0,e==="fixed"),n=o.top+t.clientTop,r=o.left+t.clientLeft,s=Ve(t)?On(t):Zt(1),a=t.clientWidth*s.x,i=t.clientHeight*s.y,m=r*s.x,d=n*s.y;return{width:a,height:i,x:m,y:d}}function Sc(t,e,o){let n;if(e==="viewport")n=vw(t,o);else if(e==="document")n=ww(oo(t));else if(Ae(e))n=Cw(e,o);else{const r=ip(t);n={x:e.x-r.x,y:e.y-r.y,width:e.width,height:e.height}}return hs(n)}function cp(t,e){const o=to(t);return o===e||!Ae(o)||Qt(o)?!1:kt(o).position==="fixed"||cp(o,e)}function Tw(t,e){const o=e.get(t);if(o)return o;let n=fr(t,[],!1).filter(i=>Ae(i)&&ut(i)!=="body"),r=null;const s=kt(t).position==="fixed";let a=s?to(t):t;for(;Ae(a)&&!Qt(a);){const i=kt(a),m=Ei(a);!m&&i.position==="fixed"&&(r=null),(s?!m&&!r:!m&&i.position==="static"&&!!r&&(r.position==="absolute"||r.position==="fixed")||jo(a)&&!m&&cp(t,a))?n=n.filter(c=>c!==a):r=i,a=to(a)}return e.set(t,n),n}function kw(t){let{element:e,boundary:o,rootBoundary:n,strategy:r}=t;const a=[...o==="clippingAncestors"?Es(e)?[]:Tw(e,this._c):[].concat(o),n],i=Sc(e,a[0],r);let m=i.top,d=i.right,c=i.bottom,p=i.left;for(let h=1;h{a(!1,1e-7)},1e3)}P===1&&!up(d,t.getBoundingClientRect())&&a(),C=!1}try{o=new IntersectionObserver(S,{...v,root:r.ownerDocument})}catch{o=new IntersectionObserver(S,v)}o.observe(t)}return a(!0),s}function Dc(t,e,o,n){n===void 0&&(n={});const{ancestorScroll:r=!0,ancestorResize:s=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:m=!1}=n,d=Gi(t),c=r||s?[...d?fr(d):[],...e?fr(e):[]]:[];c.forEach(w=>{r&&w.addEventListener("scroll",o,{passive:!0}),s&&w.addEventListener("resize",o)});const p=d&&i?Ew(d,o):null;let h=-1,y=null;a&&(y=new ResizeObserver(w=>{let[T]=w;T&&T.target===d&&y&&e&&(y.unobserve(e),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var v;(v=y)==null||v.observe(e)})),o()}),d&&!m&&y.observe(d),e&&y.observe(e));let g,b=m?pn(t):null;m&&f();function f(){const w=pn(t);b&&!up(b,w)&&o(),b=w,g=requestAnimationFrame(f)}return o(),()=>{var w;c.forEach(T=>{r&&T.removeEventListener("scroll",o),s&&T.removeEventListener("resize",o)}),p==null||p(),(w=y)==null||w.disconnect(),y=null,m&&cancelAnimationFrame(g)}}const Aw=uw,Nw=pw,Iw=lw,Ow=fw,Fw=cw,Mw=mw,Uw=(t,e,o)=>{const n=new Map,r={platform:Rw,...o},s={...r.platform,_c:n};return iw(t,e,{...r,platform:s})};var Lw=typeof document<"u",jw=function(){},as=Lw?l.useLayoutEffect:jw;function ws(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let o,n,r;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(o=t.length,o!==e.length)return!1;for(n=o;n--!==0;)if(!ws(t[n],e[n]))return!1;return!0}if(r=Object.keys(t),o=r.length,o!==Object.keys(e).length)return!1;for(n=o;n--!==0;)if(!{}.hasOwnProperty.call(e,r[n]))return!1;for(n=o;n--!==0;){const s=r[n];if(!(s==="_owner"&&t.$$typeof)&&!ws(t[s],e[s]))return!1}return!0}return t!==t&&e!==e}function pp(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function Pc(t,e){const o=pp(t);return Math.round(e*o)/o}function ma(t){const e=l.useRef(t);return as(()=>{e.current=t}),e}function _w(t){t===void 0&&(t={});const{placement:e="bottom",strategy:o="absolute",middleware:n=[],platform:r,elements:{reference:s,floating:a}={},transform:i=!0,whileElementsMounted:m,open:d}=t,[c,p]=l.useState({x:0,y:0,strategy:o,placement:e,middlewareData:{},isPositioned:!1}),[h,y]=l.useState(n);ws(h,n)||y(n);const[g,b]=l.useState(null),[f,w]=l.useState(null),T=l.useCallback(F=>{F!==k.current&&(k.current=F,b(F))},[]),v=l.useCallback(F=>{F!==P.current&&(P.current=F,w(F))},[]),C=s||g,S=a||f,k=l.useRef(null),P=l.useRef(null),D=l.useRef(c),I=m!=null,N=ma(m),z=ma(r),U=ma(d),R=l.useCallback(()=>{if(!k.current||!P.current)return;const F={placement:e,strategy:o,middleware:h};z.current&&(F.platform=z.current),Uw(k.current,P.current,F).then(H=>{const A={...H,isPositioned:U.current!==!1};W.current&&!ws(D.current,A)&&(D.current=A,_t.flushSync(()=>{p(A)}))})},[h,e,o,z,U]);as(()=>{d===!1&&D.current.isPositioned&&(D.current.isPositioned=!1,p(F=>({...F,isPositioned:!1})))},[d]);const W=l.useRef(!1);as(()=>(W.current=!0,()=>{W.current=!1}),[]),as(()=>{if(C&&(k.current=C),S&&(P.current=S),C&&S){if(N.current)return N.current(C,S,R);R()}},[C,S,R,N,I]);const O=l.useMemo(()=>({reference:k,floating:P,setReference:T,setFloating:v}),[T,v]),j=l.useMemo(()=>({reference:C,floating:S}),[C,S]),x=l.useMemo(()=>{const F={position:o,left:0,top:0};if(!j.floating)return F;const H=Pc(j.floating,c.x),A=Pc(j.floating,c.y);return i?{...F,transform:"translate("+H+"px, "+A+"px)",...pp(j.floating)>=1.5&&{willChange:"transform"}}:{position:o,left:H,top:A}},[o,i,j.floating,c.x,c.y]);return l.useMemo(()=>({...c,update:R,refs:O,elements:j,floatingStyles:x}),[c,R,O,j,x])}const zw=(t,e)=>{const o=Aw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Bw=(t,e)=>{const o=Nw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Vw=(t,e)=>({fn:Mw(t).fn,options:[t,e]}),Ww=(t,e)=>{const o=Iw(t);return{name:o.name,fn:o.fn,options:[t,e]}},qw=(t,e)=>{const o=Ow(t);return{name:o.name,fn:o.fn,options:[t,e]}},Hw=(t,e)=>{const o=Fw(t);return{name:o.name,fn:o.fn,options:[t,e]}},oe=(t,e,o,n,r,s,...a)=>{if(a.length>0)throw new Error(rt(1));let i;if(t)i=t;else throw new Error("Missing arguments");return i};var mp=Rf();const $w=_i(19),Kw=$w?Gw:Yw;function fp(t,e,o,n,r){return Kw(t,e,o,n,r)}function Jw(t,e,o,n,r){const s=l.useCallback(()=>e(t.getSnapshot(),o,n,r),[t,e,o,n,r]);return mp.useSyncExternalStore(t.subscribe,s,s)}Ab({before(t){t.syncIndex=0,t.didInitialize||(t.syncTick=1,t.syncHooks=[],t.didChangeStore=!0,t.getSnapshot=()=>{let e=!1;for(let o=0;o0&&(t.didChangeStore&&(t.didChangeStore=!1,t.subscribe=e=>{const o=new Set;for(const r of t.syncHooks)o.add(r.store);const n=[];for(const r of o)n.push(r.subscribe(e));return()=>{for(const r of n)r()}}),mp.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot))}});function Gw(t,e,o,n,r){const s=Eb();if(!s)return Jw(t,e,o,n,r);const a=s.syncIndex;s.syncIndex+=1;let i;return s.didInitialize?(i=s.syncHooks[a],(i.store!==t||i.selector!==e||!Object.is(i.a1,o)||!Object.is(i.a2,n)||!Object.is(i.a3,r))&&(i.store!==t&&(s.didChangeStore=!0),i.store=t,i.selector=e,i.a1=o,i.a2=n,i.a3=r,i.didChange=!0)):(i={store:t,selector:e,a1:o,a2:n,a3:r,value:e(t.getSnapshot(),o,n,r),didChange:!1},s.syncHooks.push(i)),i.value}function Yw(t,e,o,n,r){return Ef.useSyncExternalStoreWithSelector(t.subscribe,t.getSnapshot,t.getSnapshot,s=>e(s,o,n,r))}class Qw{constructor(e){_e(this,"subscribe",e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}));_e(this,"getSnapshot",()=>this.state);this.state=e,this.listeners=new Set,this.updateTick=0}setState(e){if(this.state===e)return;this.state=e,this.updateTick+=1;const o=this.updateTick;for(const n of this.listeners){if(o!==this.updateTick)return;n(e)}}update(e){for(const o in e)if(!Object.is(this.state[o],e[o])){this.setState({...this.state,...e});return}}set(e,o){Object.is(this.state[e],o)||this.setState({...this.state,[e]:o})}notifyAll(){const e={...this.state};this.setState(e)}use(e,o,n,r){return fp(this,e,o,n,r)}}class Ar extends Qw{constructor(e,o={},n){super(e),this.context=o,this.selectors=n}useSyncedValue(e,o){l.useDebugValue(e);const n=this;ue(()=>{n.state[e]!==o&&n.set(e,o)},[n,e,o])}useSyncedValueWithCleanup(e,o){const n=this;ue(()=>(n.state[e]!==o&&n.set(e,o),()=>{n.set(e,void 0)}),[n,e,o])}useSyncedValues(e){const o=this,n=Object.values(e);ue(()=>{o.update(e)},[o,...n])}useControlledProp(e,o){l.useDebugValue(e);const n=this,r=o!==void 0;ue(()=>{r&&!Object.is(n.state[e],o)&&n.setState({...n.state,[e]:o})},[n,e,o,r])}select(e,o,n,r){const s=this.selectors[e];return s(this.state,o,n,r)}useState(e,o,n,r){return l.useDebugValue(e),fp(this,this.selectors[e],o,n,r)}useContextCallback(e,o){l.useDebugValue(e);const n=ke(o??Ni);this.context[e]=n}useStateSetter(e){const o=l.useRef(void 0);return o.current===void 0&&(o.current=n=>{this.set(e,n)}),o.current}observe(e,o){let n;typeof e=="function"?n=e:n=this.selectors[e];let r=n(this.state);return o(r,r,this),this.subscribe(s=>{const a=n(s);if(!Object.is(r,a)){const i=r;r=a,o(a,i,this)}})}}const Xw={open:oe(t=>t.open),transitionStatus:oe(t=>t.transitionStatus),domReferenceElement:oe(t=>t.domReferenceElement),referenceElement:oe(t=>t.positionReference??t.referenceElement),floatingElement:oe(t=>t.floatingElement),floatingId:oe(t=>t.floatingId)};class Ls extends Ar{constructor(o){const{syncOnly:n,nested:r,onOpenChange:s,triggerElements:a,...i}=o;super({...i,positionReference:i.referenceElement,domReferenceElement:i.referenceElement},{onOpenChange:s,dataRef:{current:{}},events:ep(),nested:r,triggerElements:a},Xw);_e(this,"syncOpenEvent",(o,n)=>{(!o||!this.state.open||n!=null&&_b(n))&&(this.context.dataRef.current.openEvent=o?n:void 0)});_e(this,"dispatchOpenChange",(o,n)=>{this.syncOpenEvent(o,n.event);const r={open:o,reason:n.reason,nativeEvent:n.event,nested:this.context.nested,triggerElement:n.trigger};this.context.events.emit("openchange",r)});_e(this,"setOpen",(o,n)=>{var r,s,a,i;if(this.syncOnly){(s=(r=this.context).onOpenChange)==null||s.call(r,o,n);return}this.dispatchOpenChange(o,n),(i=(a=this.context).onOpenChange)==null||i.call(a,o,n)});this.syncOnly=n}}function hp(t){const{popupStore:e,treatPopupAsFloatingElement:o=!1,floatingRootContext:n,floatingId:r,nested:s,onOpenChange:a}=t,i=e.useState("open"),m=e.useState("activeTriggerElement"),d=e.useState(o?"popupElement":"positionerElement"),c=e.context.triggerElements,p=a,h=l.useRef(null);n===void 0&&h.current===null&&(h.current=new Ls({open:i,transitionStatus:void 0,referenceElement:m,floatingElement:d,triggerElements:c,onOpenChange:p,floatingId:r,syncOnly:!0,nested:s}));const y=n??h.current;return e.useSyncedValue("floatingId",r),ue(()=>{const g={open:i,floatingId:r,referenceElement:m,floatingElement:d};Ae(m)&&(g.domReferenceElement=m),y.state.positionReference===y.state.referenceElement&&(g.positionReference=m),y.update(g)},[i,r,m,d,y]),y.context.onOpenChange=p,y.context.nested=s,y}function Zw(t,e=!1,o=!1){const[n,r]=l.useState(t&&e?"idle":void 0),[s,a]=l.useState(t);return t&&!s&&(a(!0),r("starting")),!t&&s&&n!=="ending"&&!o&&r("ending"),!t&&!s&&n==="ending"&&r(void 0),ue(()=>{if(!t&&s&&n!=="ending"&&o){const i=Gt.request(()=>{r("ending")});return()=>{Gt.cancel(i)}}},[t,s,n,o]),ue(()=>{if(!t||e)return;const i=Gt.request(()=>{r(void 0)});return()=>{Gt.cancel(i)}},[e,t]),ue(()=>{if(!t||!e)return;t&&s&&n!=="idle"&&r("starting");const i=Gt.request(()=>{r("idle")});return()=>{Gt.cancel(i)}},[e,t,s,n]),{mounted:s,setMounted:a,transitionStatus:n}}let br=(function(t){return t.startingStyle="data-starting-style",t.endingStyle="data-ending-style",t})({});const ev={[br.startingStyle]:""},tv={[br.endingStyle]:""},Nr={transitionStatus(t){return t==="starting"?ev:t==="ending"?tv:null}};function Yi(t,e=!1,o=!0){const n=hr();return ke((r,s=null)=>{n.cancel();const a=ao(t);if(a==null)return;const i=a,m=()=>{_t.flushSync(r)};if(typeof i.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){r();return}function d(){Promise.all(i.getAnimations().map(c=>c.finished)).then(()=>{s!=null&&s.aborted||m()}).catch(()=>{if(o){s!=null&&s.aborted||m();return}const c=i.getAnimations();!(s!=null&&s.aborted)&&c.length>0&&c.some(p=>p.pending||p.playState!=="finished")&&d()})}if(e){const c=br.startingStyle;if(!i.hasAttribute(c)){n.request(d);return}const p=new MutationObserver(()=>{i.hasAttribute(c)||(p.disconnect(),d())});p.observe(i,{attributes:!0,attributeFilter:[c]}),s==null||s.addEventListener("abort",()=>p.disconnect(),{once:!0});return}n.request(d)})}function Ir(t){const{enabled:e=!0,open:o,ref:n,onComplete:r}=t,s=ke(r),a=Yi(n,o,!1);l.useEffect(()=>{if(!e)return;const i=new AbortController;return a(s,i.signal),()=>{i.abort()}},[e,o,s,a])}const Zn={tabIndex:-1,[Qa]:""};function Qi(t,e,o=!1){const n=un(),r=mo()!=null,s=l.useRef(null);t===void 0&&s.current===null&&(s.current=e(n,r));const a=t??s.current;return hp({popupStore:a,treatPopupAsFloatingElement:o,floatingRootContext:a.state.floatingRootContext,floatingId:n,nested:r,onOpenChange:a.setOpen}),{store:a,internalStore:s.current}}function gp(t,e){const o=l.useRef(null),n=l.useRef(null);return l.useCallback(r=>{if(t===void 0)return;let s=!1;if(o.current!==null){const a=o.current,i=n.current,m=e.context.triggerElements.getById(a);i&&m===i&&(e.context.triggerElements.delete(a),s=!0),o.current=null,n.current=null}if(r!==null&&(o.current=t,n.current=r,e.context.triggerElements.add(t,r),s=!0),s){const a=e.context.triggerElements.size;e.select("open")&&e.state.triggerCount!==a&&e.set("triggerCount",a)}},[e,t])}function Xi(t,e,o){const n=(o==null?void 0:o.id)??null;(n||e)&&(t.activeTriggerId=n,t.activeTriggerElement=o??null)}function Zi(t,e,o,n){const r=o.useState("isMountedByTrigger",t),s=gp(t,o),a=ke(i=>{if(s(i),!i)return;const m=o.select("open"),d=o.select("activeTriggerId");if(d===t){o.update({activeTriggerElement:i,...m?n:null});return}d==null&&m&&o.update({activeTriggerId:t,activeTriggerElement:i,...n})});return ue(()=>{r&&o.update({activeTriggerElement:e.current,...n})},[r,o,e,...Object.values(n)]),{registerTrigger:a,isMountedByThisTrigger:r}}function js(t){const e=t.useState("open"),o=t.useState("triggerCount");ue(()=>{if(!e){t.state.triggerCount!==0&&t.set("triggerCount",0);return}const n=t.context.triggerElements.size,r={};if(t.state.triggerCount!==n&&(r.triggerCount=n),!t.select("activeTriggerId")&&n===1){const s=t.context.triggerElements.entries().next();if(!s.done){const[a,i]=s.value;r.activeTriggerId=a,r.activeTriggerElement=i}}(r.triggerCount!==void 0||r.activeTriggerId!==void 0)&&t.update(r)},[e,t,o])}function _s(t,e,o){const{mounted:n,setMounted:r,transitionStatus:s}=Zw(t);e.useSyncedValues({mounted:n,transitionStatus:s});const a=ke(()=>{var m,d;r(!1),e.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),o==null||o(),(d=(m=e.context).onOpenChangeComplete)==null||d.call(m,!1)}),i=e.useState("preventUnmountingOnClose");return Ir({enabled:n&&!t&&!i,open:t,ref:e.context.popupRef,onComplete(){t||a()}}),{forceUnmount:a,transitionStatus:s}}function zs(t,e){t.useSyncedValues(e),ue(()=>()=>{t.update({activeTriggerProps:Je,inactiveTriggerProps:Je,popupProps:Je})},[t])}function bp(t,e){ue(()=>{!e&&t.state.openMethod!==null&&t.set("openMethod",null)},[e,t]),ue(()=>()=>{t.state.openMethod!==null&&t.set("openMethod",null)},[t])}class er{constructor(){this.elementsSet=new Set,this.idMap=new Map}add(e,o){const n=this.idMap.get(e);n!==o&&(n!==void 0&&this.elementsSet.delete(n),this.elementsSet.add(o),this.idMap.set(e,o))}delete(e){const o=this.idMap.get(e);o&&(this.elementsSet.delete(o),this.idMap.delete(e))}hasElement(e){return this.elementsSet.has(e)}hasMatchingElement(e){for(const o of this.elementsSet)if(e(o))return!0;return!1}getById(e){return this.idMap.get(e)}entries(){return this.idMap.entries()}elements(){return this.elementsSet.values()}get size(){return this.idMap.size}}function ov(){return new Ls({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:new er,floatingId:void 0,syncOnly:!1,nested:!1,onOpenChange:void 0})}function Bs(){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:ov(),floatingId:void 0,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:Je,inactiveTriggerProps:Je,popupProps:Je}}function el(t,e,o=!1){return new Ls({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:t,floatingId:e,syncOnly:!0,nested:o,onOpenChange:void 0})}const dr=oe(t=>t.triggerIdProp??t.activeTriggerId),tl=oe(t=>t.openProp??t.open),Rc=oe(t=>{var o;return(((o=t.popupElement)==null?void 0:o.id)??t.floatingId)||void 0});function yp(t,e){return e!==void 0&&tl(t)&&dr(t)===e}function nv(t,e){return yp(t,e)?!0:e!==void 0&&tl(t)&&dr(t)==null&&t.triggerCount===1}const Vs={open:tl,mounted:oe(t=>t.mounted),transitionStatus:oe(t=>t.transitionStatus),floatingRootContext:oe(t=>t.floatingRootContext),triggerCount:oe(t=>t.triggerCount),preventUnmountingOnClose:oe(t=>t.preventUnmountingOnClose),payload:oe(t=>t.payload),activeTriggerId:dr,activeTriggerElement:oe(t=>t.mounted?t.activeTriggerElement:null),popupId:Rc,isTriggerActive:oe((t,e)=>e!==void 0&&dr(t)===e),isOpenedByTrigger:oe((t,e)=>yp(t,e)),isMountedByTrigger:oe((t,e)=>e!==void 0&&dr(t)===e&&t.mounted),triggerProps:oe((t,e)=>e?t.activeTriggerProps:t.inactiveTriggerProps),triggerPopupId:oe((t,e)=>nv(t,e)?Rc(t):void 0),popupProps:oe(t=>t.popupProps),popupElement:oe(t=>t.popupElement),positionerElement:oe(t=>t.positionerElement)};function rv(t){const{open:e=!1,onOpenChange:o,elements:n={}}=t,r=un(),s=mo()!=null,a=Nt(()=>new Ls({open:e,transitionStatus:void 0,onOpenChange:o,referenceElement:n.reference??null,floatingElement:n.floating??null,triggerElements:new er,floatingId:r,syncOnly:!1,nested:s})).current;return ue(()=>{const i={open:e,floatingId:r};n.reference!==void 0&&(i.referenceElement=n.reference,i.domReferenceElement=Ae(n.reference)?n.reference:null),n.floating!==void 0&&(i.floatingElement=n.floating),a.update(i)},[e,r,n.reference,n.floating,a]),a.context.onOpenChange=o,a.context.nested=s,a}function sv(t={}){const{nodeId:e,externalTree:o}=t,n=rv(t),r=t.rootContext||n,s=r.useState("referenceElement"),a=r.useState("floatingElement"),i=r.useState("domReferenceElement"),m=r.useState("open"),d=r.useState("floatingId"),[c,p]=l.useState(null),[h,y]=l.useState(void 0),[g,b]=l.useState(void 0),f=l.useRef(null),w=zo(o),T=l.useMemo(()=>({reference:s,floating:a,domReference:i}),[s,a,i]),v=_w({...t,elements:{...T,...c&&{reference:c}}}),C=Ae(h)?h:null,S=g===void 0?r.state.floatingElement:g;r.useSyncedValue("referenceElement",h??null),r.useSyncedValue("domReferenceElement",h===void 0?i:C),r.useSyncedValue("floatingElement",S);const k=l.useCallback(U=>{const R=Ae(U)?{getBoundingClientRect:()=>U.getBoundingClientRect(),getClientRects:()=>U.getClientRects(),contextElement:U}:U;p(R),v.refs.setReference(R)},[v.refs]),P=l.useCallback(U=>{(Ae(U)||U===null)&&(f.current=U,y(U)),(Ae(v.refs.reference.current)||v.refs.reference.current===null||U!==null&&!Ae(U))&&v.refs.setReference(U)},[v.refs,y]),D=l.useCallback(U=>{b(U),v.refs.setFloating(U)},[v.refs]),I=l.useMemo(()=>({...v.refs,setReference:P,setFloating:D,setPositionReference:k,domReference:f}),[v.refs,P,D,k]),N=l.useMemo(()=>({...v.elements,domReference:i}),[v.elements,i]),z=l.useMemo(()=>({...v,dataRef:r.context.dataRef,open:m,onOpenChange:r.setOpen,events:r.context.events,floatingId:d,refs:I,elements:N,nodeId:e,rootStore:r}),[v,I,N,e,r,m,d]);return ue(()=>{i&&(f.current=i)},[i]),ue(()=>{r.context.dataRef.current.floatingContext=z;const U=w==null?void 0:w.nodesRef.current.find(R=>R.id===e);U&&(U.context=z)}),l.useMemo(()=>({...v,context:z,refs:I,elements:N,rootStore:r}),[v,I,N,z,r])}const fa=yu&&bu;function wp(t,e={}){const{enabled:o=!0,delay:n}=e,r="rootStore"in t?t.rootStore:t,{events:s,dataRef:a}=r.context,i=l.useRef(!1),m=l.useRef(null),d=l.useRef(!0),c=gt();l.useEffect(()=>{const h=r.select("domReferenceElement");if(!o)return;const y=Ze(h);function g(){const w=r.select("domReferenceElement");!r.select("open")&&Ve(w)&&w===vt(Le(w))&&(i.current=!0)}function b(){d.current=!0}function f(){d.current=!1}return Xt(Ne(y,"blur",g),fa&&Ne(y,"keydown",b,!0),fa&&Ne(y,"pointerdown",f,!0))},[r,o]),l.useEffect(()=>{if(!o)return;function h(y){if(y.reason===uo||y.reason===Rr){const g=r.select("domReferenceElement");Ae(g)&&(m.current=g,i.current=!0)}}return s.on("openchange",h),()=>{s.off("openchange",h)}},[s,o,r]);const p=l.useMemo(()=>{function h(){i.current=!1,m.current=null}return{onMouseLeave(){h()},onFocus(y){const g=y.currentTarget;if(i.current){if(m.current===g)return;h()}const b=ht(y.nativeEvent);if(Ae(b)){if(fa&&!y.relatedTarget){if(!d.current&&!Is(b))return}else if(!$b(b))return}const f=us(y.relatedTarget,r.context.triggerElements),{nativeEvent:w,currentTarget:T}=y,v=typeof n=="function"?n():n;if(r.select("open")&&f||v===0||v===void 0){r.setOpen(!0,Oe(An,w,T));return}c.start(v,()=>{i.current||r.setOpen(!0,Oe(An,w,T))})},onBlur(y){h();const g=y.relatedTarget,b=y.nativeEvent,f=Ae(g)&&g.hasAttribute(gr("focus-guard"))&&g.getAttribute("data-type")==="outside";c.start(0,()=>{var C;const w=r.select("domReferenceElement"),T=vt(Le(w));!g&&T===w||Ce((C=a.current.floatingContext)==null?void 0:C.refs.floating.current,T)||Ce(w,T)||f||us(g??T,r.context.triggerElements)||r.setOpen(!1,Oe(An,b))})}}},[a,n,r,c]);return l.useMemo(()=>o?{reference:p,trigger:p}:{},[o,p])}class ol{constructor(){_e(this,"dispose",()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()});_e(this,"disposeEffect",()=>this.dispose);this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new Mt,this.restTimeout=new Mt,this.handleCloseOptions=void 0}static create(){return new ol}}const vs=new WeakMap;function Cs(t){var o,n,r;if(!t.performedPointerEventsMutation)return;const e=t.pointerEventsScopeElement;e&&vs.get(e)===t&&((o=t.pointerEventsScopeElement)==null||o.style.removeProperty("pointer-events"),(n=t.pointerEventsReferenceElement)==null||n.style.removeProperty("pointer-events"),(r=t.pointerEventsFloatingElement)==null||r.style.removeProperty("pointer-events"),vs.delete(e)),t.performedPointerEventsMutation=!1,t.pointerEventsScopeElement=null,t.pointerEventsReferenceElement=null,t.pointerEventsFloatingElement=null}function vp(t,e){const{scopeElement:o,referenceElement:n,floatingElement:r}=e,s=vs.get(o);s&&s!==t&&Cs(s),Cs(t),t.performedPointerEventsMutation=!0,t.pointerEventsScopeElement=o,t.pointerEventsReferenceElement=n,t.pointerEventsFloatingElement=r,vs.set(o,t),o.style.pointerEvents="none",n.style.pointerEvents="auto",r.style.pointerEvents="auto"}function nl(t){const e=t.context.dataRef.current,o=Nt(()=>e.hoverInteractionState??ol.create()).current;return e.hoverInteractionState||(e.hoverInteractionState=o),Pi(e.hoverInteractionState.disposeEffect),e.hoverInteractionState}function rl(t,e={}){const{enabled:o=!0,closeDelay:n=0,nodeId:r}=e,s="rootStore"in t?t.rootStore:t,a=s.useState("open"),i=s.useState("floatingElement"),m=s.useState("domReferenceElement"),{dataRef:d}=s.context,c=zo(),p=mo(),h=nl(s),y=gt(),g=ke(()=>{var w;return Su((w=d.current.openEvent)==null?void 0:w.type,h.interactedInside)}),b=ke(()=>{var w;return Jb((w=d.current.openEvent)==null?void 0:w.type)}),f=ke(()=>{Cs(h)});ue(()=>{a||(h.pointerType=void 0,h.restTimeoutPending=!1,h.interactedInside=!1,f())},[a,h,f]),l.useEffect(()=>f,[f]),ue(()=>{var w,T,v,C,S;if(o&&a&&(w=h.handleCloseOptions)!=null&&w.blockPointerEvents&&b()&&Ae(m)&&i){const k=m,P=i,D=Le(i),I=(v=(T=c==null?void 0:c.nodesRef.current.find(R=>R.id===p))==null?void 0:T.context)==null?void 0:v.elements.floating;I&&(I.style.pointerEvents="");const N=h.pointerEventsScopeElement!==P?h.pointerEventsScopeElement:null,z=I!==P?I:null,U=((S=(C=h.handleCloseOptions)==null?void 0:C.getScope)==null?void 0:S.call(C))??N??z??k.closest("[data-rootownerid]")??D.body;return vp(h,{scopeElement:U,referenceElement:k,floatingElement:P}),()=>{f()}}},[o,a,m,i,h,b,c,p,f]),l.useEffect(()=>{if(!o)return;function w(){return!!(c&&p&&Mo(c.nodesRef.current,p).length>0)}function T(D){const I=ps(n,"close",h.pointerType),N=()=>{s.setOpen(!1,Oe(Ye,D)),c==null||c.events.emit("floating.closed",D)};I?h.openChangeTimeout.start(I,N):(h.openChangeTimeout.clear(),N())}function v(D){const I=ht(D);if(!Hb(I)){h.interactedInside=!1;return}h.interactedInside=(I==null?void 0:I.closest("[aria-haspopup]"))!=null}function C(){h.openChangeTimeout.clear(),y.clear(),c==null||c.events.off("floating.closed",k),f()}function S(D){var U;if(w()&&c){c.events.on("floating.closed",k);return}if(us(D.relatedTarget,s.context.triggerElements))return;const I=((U=d.current.floatingContext)==null?void 0:U.nodeId)??r,N=D.relatedTarget;if(!(c&&I&&Ae(N)&&Mo(c.nodesRef.current,I,!1).some(R=>{var W;return Ce((W=R.context)==null?void 0:W.elements.floating,N)}))){if(h.handler){h.handler(D);return}f(),g()||T(D)}}function k(D){!c||!p||w()||y.start(0,()=>{c.events.off("floating.closed",k),s.setOpen(!1,Oe(Ye,D)),c.events.emit("floating.closed",D)})}const P=i;return Xt(P&&Ne(P,"mouseenter",C),P&&Ne(P,"mouseleave",S),P&&Ne(P,"pointerdown",v,!0),()=>{c==null||c.events.off("floating.closed",k)})},[o,i,s,d,n,r,g,f,h,c,p,y])}const av={current:null};function Ws(t,e={}){var O;const{enabled:o=!0,delay:n=0,handleClose:r=null,mouseOnly:s=!1,restMs:a=0,move:i=!0,triggerElementRef:m=av,externalTree:d,isActiveTrigger:c=!0,getHandleCloseContext:p,isClosing:h,shouldOpen:y}=e,g="rootStore"in t?t.rootStore:t,{dataRef:b,events:f}=g.context,w=zo(d),T=nl(g),v=l.useRef(!1),C=nt(r),S=nt(n),k=nt(a),P=nt(o),D=nt(y),I=nt(h),N=ke(()=>{var j;return Su((j=b.current.openEvent)==null?void 0:j.type,T.interactedInside)}),z=ke(()=>{var j;return((j=D.current)==null?void 0:j.call(D))!==!1}),U=ke((j,x,F)=>{const H=g.context.triggerElements;if(H.hasElement(x))return!j||!Ce(j,x);if(!Ae(F))return!1;const A=F;return H.hasMatchingElement(Q=>Ce(Q,A))&&(!j||!Ce(j,A))}),R=ke(()=>{if(!T.handler)return;Le(g.select("domReferenceElement")).removeEventListener("mousemove",T.handler),T.handler=void 0}),W=ke(()=>{Cs(T)});return c&&(T.handleCloseOptions=(O=C.current)==null?void 0:O.__options),l.useEffect(()=>R,[R]),l.useEffect(()=>{if(!o)return;function j(x){x.open?v.current=!1:(v.current=x.reason===Ye,R(),T.openChangeTimeout.clear(),T.restTimeout.clear(),T.blockMouseMove=!0,T.restTimeoutPending=!1)}return f.on("openchange",j),()=>{f.off("openchange",j)}},[o,f,T,R]),l.useEffect(()=>{if(!o)return;function j(A,Q=!0){const M=ps(S.current,"close",T.pointerType);M?T.openChangeTimeout.start(M,()=>{g.setOpen(!1,Oe(Ye,A)),w==null||w.events.emit("floating.closed",A)}):Q&&(T.openChangeTimeout.clear(),g.setOpen(!1,Oe(Ye,A)),w==null||w.events.emit("floating.closed",A))}const x=m.current??(c?g.select("domReferenceElement"):null);if(!Ae(x))return;function F(A){var De;if(T.openChangeTimeout.clear(),T.blockMouseMove=!1,s&&!cn(T.pointerType))return;const Q=rc(k.current),M=ps(S.current,"open",T.pointerType),L=ht(A),V=A.currentTarget??null,_=g.select("domReferenceElement");let B=V;if(Ae(L)&&!g.context.triggerElements.hasElement(L)){for(const me of g.context.triggerElements.elements())if(Ce(me,L)){B=me;break}}Ae(V)&&Ae(_)&&!g.context.triggerElements.hasElement(V)&&Ce(V,_)&&(B=_);const Y=B==null?!1:U(_,B,L),q=g.select("open"),J=((De=I.current)==null?void 0:De.call(I))??g.select("transitionStatus")==="ending",Te=!q&&J&&v.current,Re=!Y&&Ae(B)&&Ae(_)&&Ce(_,B)&&Te,K=Q>0&&!M,de=Y&&(q||Te)||Re,le=!q||Y;if(de){z()&&g.setOpen(!0,Oe(Ye,A,B));return}K||(M?T.openChangeTimeout.start(M,()=>{le&&z()&&g.setOpen(!0,Oe(Ye,A,B))}):le&&z()&&g.setOpen(!0,Oe(Ye,A,B)))}function H(A){if(N()){W();return}R();const Q=g.select("domReferenceElement"),M=Le(Q);T.restTimeout.clear(),T.restTimeoutPending=!1;const L=b.current.floatingContext??(p==null?void 0:p());if(us(A.relatedTarget,g.context.triggerElements))return;if(C.current&&L){g.select("open")||T.openChangeTimeout.clear();const _=m.current;T.handler=C.current({...L,tree:w,x:A.clientX,y:A.clientY,onClose(){W(),R(),P.current&&!N()&&_===g.select("domReferenceElement")&&j(A,!0)}}),M.addEventListener("mousemove",T.handler),T.handler(A);return}(T.pointerType==="touch"?!Ce(g.select("floatingElement"),A.relatedTarget):!0)&&j(A)}return i?Xt(Ne(x,"mousemove",F,{once:!0}),Ne(x,"mouseenter",F),Ne(x,"mouseleave",H)):Xt(Ne(x,"mouseenter",F),Ne(x,"mouseleave",H))},[R,W,b,S,g,o,C,T,c,U,N,s,i,k,m,w,P,p,I,z]),l.useMemo(()=>{if(!o)return;function j(x){T.pointerType=x.pointerType}return{onPointerDown:j,onPointerEnter:j,onMouseMove(x){var _,B,Y;const{nativeEvent:F}=x,H=x.currentTarget,A=g.select("domReferenceElement"),Q=g.select("open"),M=U(A,H,x.target);if(s&&!cn(T.pointerType))return;if(Q&&M&&((_=T.handleCloseOptions)!=null&&_.blockPointerEvents)){const q=g.select("floatingElement");if(q){const J=((Y=(B=T.handleCloseOptions)==null?void 0:B.getScope)==null?void 0:Y.call(B))??H.ownerDocument.body;vp(T,{scopeElement:J,referenceElement:H,floatingElement:q})}}const L=rc(k.current);if(Q&&!M||L===0||!M&&T.restTimeoutPending&&x.movementX**2+x.movementY**2<2)return;T.restTimeout.clear();function V(){if(T.restTimeoutPending=!1,N())return;const q=g.select("open");!T.blockMouseMove&&(!q||M)&&z()&&g.setOpen(!0,Oe(Ye,F,H))}T.pointerType==="touch"?_t.flushSync(()=>{V()}):M&&Q?V():(T.restTimeoutPending=!0,T.restTimeout.start(L,V))}}},[o,T,N,U,s,g,k,z])}const iv="Escape";function qs(t,e,o){switch(t){case"vertical":return e;case"horizontal":return o;default:return e||o}}function Hr(t,e){return qs(e,t===Ai||t===Pr,t===No||t===Io)}function ha(t,e,o){return qs(e,t===Pr,o?t===No:t===Io)||t==="Enter"||t===" "||t===""}function lv(t,e,o){return qs(e,o?t===No:t===Io,t===Pr)}function cv(t,e,o,n){const r=o?t===Io:t===No,s=t===Ai;return e==="both"||e==="horizontal"&&n&&n>1?t===iv:qs(e,r,s)}function dv(t,e){const{listRef:o,activeIndex:n,onNavigate:r=()=>{},enabled:s=!0,selectedIndex:a=null,allowEscape:i=!1,loopFocus:m=!1,nested:d=!1,rtl:c=!1,virtual:p=!1,focusItemOnOpen:h="auto",focusItemOnHover:y=!0,openOnArrowKeyDown:g=!0,disabledIndices:b=void 0,orientation:f="vertical",parentOrientation:w,cols:T=1,id:v,resetOnPointerLeave:C=!0,externalTree:S}=e,k="rootStore"in t?t.rootStore:t,P=k.useState("open"),D=k.useState("floatingElement"),I=k.useState("domReferenceElement"),N=k.context.dataRef,z=Za(D),U=Xa(I),R=nt(z),W=mo(),O=zo(S),j=l.useRef(h),x=l.useRef(a??-1),F=l.useRef(null),H=l.useRef(!0),A=ke(se=>{r(x.current===-1?null:x.current,se)}),Q=l.useRef(A),M=l.useRef(!!D),L=l.useRef(P),V=l.useRef(!1),_=l.useRef(!1),B=l.useRef(null),Y=nt(b),q=nt(P),J=nt(a),Te=nt(C),Re=hr(),K=hr(),de=ke(()=>{function se(G){p?O==null||O.events.emit("virtualfocus",G):B.current=ss(G,{sync:V.current,preventScroll:!0})}const $=o.current[x.current],ee=_.current;$&&se($),(V.current?G=>G():G=>Re.request(G))(()=>{var xe;const G=o.current[x.current]||$;if(!G)return;$||se(G),Z&&(ee||!H.current)&&((xe=G.scrollIntoView)==null||xe.call(G,{block:"nearest",inline:"nearest"}))})});ue(()=>{N.current.orientation=f},[N,f]),ue(()=>{s&&(P&&D?(x.current=a??-1,j.current&&a!=null&&(_.current=!0,A())):M.current&&(x.current=-1,Q.current()))},[s,P,D,a,A]),ue(()=>{if(s){if(!P){V.current=!1;return}if(D)if(n==null){if(V.current=!1,J.current!=null)return;if(M.current&&(x.current=-1,de()),(!L.current||!M.current)&&j.current&&(F.current!=null||j.current===!0&&F.current==null)){let se=0;const $=()=>{o.current[0]==null?(se<2&&(se?te=>K.request(te):queueMicrotask)($),se+=1):(x.current=F.current==null||ha(F.current,f,c)||d?aa(o):ic(o),F.current=null,A())};$()}}else gs(o.current,n)||(x.current=n,de(),_.current=!1)}},[s,P,D,n,J,d,o,f,c,A,de,K]),ue(()=>{var G,ge;if(!s||D||!O||p||!M.current)return;const se=O.nodesRef.current,$=(ge=(G=se.find(xe=>xe.id===W))==null?void 0:G.context)==null?void 0:ge.elements.floating,ee=vt(Le(D)),te=se.some(xe=>xe.context&&Ce(xe.context.elements.floating,ee));$&&!te&&H.current&&$.focus({preventScroll:!0})},[s,D,O,W,p]),ue(()=>{Q.current=A,L.current=P,M.current=!!D}),ue(()=>{P||(F.current=null,j.current=h)},[P,h]);const le=n!=null,De=ke(se=>{if(!q.current)return;const $=o.current.indexOf(se.currentTarget);$!==-1&&(x.current!==$||n!==$)&&(x.current=$,A(se))}),me=ke(()=>{var se,$,ee;return w??((ee=($=(se=O==null?void 0:O.nodesRef.current.find(te=>te.id===W))==null?void 0:se.context)==null?void 0:$.dataRef)==null?void 0:ee.current.orientation)}),fe=ke(()=>aa(o,Y.current)),Se=ke(se=>{if(H.current=!1,V.current=!0,se.which===229||!q.current&&se.currentTarget===R.current)return;if(d&&cv(se.key,f,c,T)){Hr(se.key,me())||Et(se),k.setOpen(!1,Oe(ti,se.nativeEvent)),Ve(I)&&(p?O==null||O.events.emit("virtualfocus",I):I.focus());return}const $=x.current,ee=aa(o,b),te=ic(o,b);if(U||(se.key==="Home"&&(Et(se),x.current=ee,A(se)),se.key==="End"&&(Et(se),x.current=te,A(se))),T>1){const G=Array.from({length:o.current.length},()=>({width:1,height:1})),ge=yy(G,T,!1),xe=ge.findIndex(Ge=>Ge!=null&&!Nn(o.current,Ge,b)),Ke=ge.reduce((Ge,it,It)=>it!=null&&!Nn(o.current,it,b)?It:Ge,-1),ze=ge[by(ge.map(Ge=>Ge!=null?o.current[Ge]:null),{event:se,orientation:f,loopFocus:m,rtl:c,cols:T,disabledIndices:vy([...(typeof b!="function"?b:null)||o.current.map((Ge,it)=>Nn(o.current,it,b)?it:void 0),void 0],ge),minIndex:xe,maxIndex:Ke,prevIndex:wy(x.current>te?ee:x.current,G,ge,T,se.key===Pr?"bl":se.key===(c?No:Io)?"tr":"tl"),stopEvent:!0})];if(ze!=null&&(x.current=ze,A(se)),f==="both")return}if(Hr(se.key,f)){if(Et(se),P&&!p&&vt(se.currentTarget.ownerDocument)===se.currentTarget){x.current=ha(se.key,f,c)?ee:te,A(se);return}ha(se.key,f,c)?m?$>=te?i&&$!==o.current.length?x.current=-1:(V.current=!1,x.current=ee):x.current=ft(o.current,{startingIndex:$,disabledIndices:b}):x.current=Math.min(te,ft(o.current,{startingIndex:$,disabledIndices:b})):m?$<=ee?i&&$!==-1?x.current=o.current.length:(V.current=!1,x.current=te):x.current=ft(o.current,{startingIndex:$,decrement:!0,disabledIndices:b}):x.current=Math.max(ee,ft(o.current,{startingIndex:$,decrement:!0,disabledIndices:b})),gs(o.current,x.current)&&(x.current=-1),A(se)}}),Z=l.useMemo(()=>({onFocus($){V.current=!0,De($)},onClick:({currentTarget:$})=>$.focus({preventScroll:!0}),onMouseMove($){V.current=!0,_.current=!1,y&&De($)},onPointerLeave($){var te;if(!q.current||!H.current||$.pointerType==="touch")return;V.current=!0;const ee=$.relatedTarget;if(!(!y||o.current.includes(ee))&&Te.current&&((te=B.current)==null||te.call(B),B.current=null,x.current=-1,A($),!p)){const G=R.current,ge=vt(Le(G));G&&Ce(G,ge)&&G.focus({preventScroll:!0})}}}),[De,q,R,y,o,A,Te,p]),Fe=l.useMemo(()=>p&&P&&le&&{"aria-activedescendant":`${v}-${n}`},[p,P,le,v,n]),we=l.useMemo(()=>({"aria-orientation":f==="both"?void 0:f,...U?{}:Fe,onKeyDown(se){if(se.key==="Tab"&&se.shiftKey&&P&&!p){const $=ht(se.nativeEvent);if($&&!Ce(R.current,$))return;Et(se),k.setOpen(!1,Oe(dn,se.nativeEvent)),Ve(I)&&I.focus();return}Se(se)},onPointerMove(){H.current=!0}}),[Fe,Se,R,f,U,k,P,p,I]),he=l.useMemo(()=>{function se(te){k.setOpen(!0,Oe(ti,te.nativeEvent,te.currentTarget))}function $(te){h==="auto"&&vu(te.nativeEvent)&&(j.current=!p)}function ee(te){j.current=h,h==="auto"&&Cu(te.nativeEvent)&&(j.current=!0)}return{onKeyDown(te){const G=k.select("open");H.current=!1;const ge=te.key.startsWith("Arrow"),xe=lv(te.key,me(),c),Ke=Hr(te.key,f),ze=(d?xe:Ke)||te.key==="Enter"||te.key.trim()==="";if(p&&G)return Se(te);if(!(!G&&!g&&ge)){if(ze){const Ge=Hr(te.key,me());F.current=d&&Ge?null:te.key}if(d){xe&&(Et(te),G?(x.current=fe(),A(te)):se(te));return}Ke&&(J.current!=null&&(x.current=J.current),Et(te),!G&&g?se(te):Se(te),G&&A(te))}},onFocus(te){k.select("open")&&!p&&(x.current=-1,A(te))},onPointerDown:ee,onPointerEnter:ee,onMouseDown:$,onClick:$}},[Se,h,fe,d,A,k,g,f,me,c,J,p]),Pe=l.useMemo(()=>({...Fe,...he}),[Fe,he]);return l.useMemo(()=>s?{reference:Pe,floating:we,item:Z,trigger:he}:{},[s,Pe,we,he,Z])}function uv(t,e){const{listRef:o,elementsRef:n,activeIndex:r,onMatch:s,onTyping:a,enabled:i=!0,resetMs:m=750,selectedIndex:d=null}=e,c="rootStore"in t?t.rootStore:t,p=c.useState("open"),h=gt(),y=l.useRef(""),g=l.useRef(d??r??-1),b=l.useRef(null),f=ke(v=>{function C(U){const R=n==null?void 0:n.current[U];return!R||Fs(R)}function S(U,R,W=0){if(U.length===0)return-1;const O=(W%U.length+U.length)%U.length,j=R.toLocaleLowerCase();for(let x=0;x0&&v.key===" "&&(Et(v),a==null||a(!0)),y.current.length>0&&y.current[0]!==" "&&S(k,y.current)===-1&&v.key!==" "&&(a==null||a(!1)),k==null||v.key.length!==1||v.ctrlKey||v.metaKey||v.altKey)return;p&&v.key!==" "&&(Et(v),a==null||a(!0));const P=y.current==="";P&&(g.current=d??r??-1),k.every(U=>{var R,W;return U?((R=U[0])==null?void 0:R.toLocaleLowerCase())!==((W=U[1])==null?void 0:W.toLocaleLowerCase()):!0})&&y.current===v.key&&(y.current="",g.current=b.current),y.current+=v.key,h.start(m,()=>{y.current="",g.current=b.current,a==null||a(!1)});const N=((P?d??r??-1:g.current)??0)+1,z=S(k,y.current,N);z!==-1?(s==null||s(z),b.current=z):v.key!==" "&&(y.current="",a==null||a(!1))}),w=ke(v=>{const C=v.relatedTarget,S=c.select("domReferenceElement"),k=c.select("floatingElement");Ce(S,C)||Ce(k,C)||(h.clear(),y.current="",g.current=b.current,a==null||a(!1))});ue(()=>{!p&&d!==null||(h.clear(),b.current=null,y.current!==""&&(y.current=""))},[p,d,h]),ue(()=>{p&&y.current===""&&(g.current=d??r??-1)},[p,d,r]);const T=l.useMemo(()=>({onKeyDown:f,onBlur:w}),[f,w]);return l.useMemo(()=>i?{reference:T,floating:T}:{},[i,T])}const Ec=.1,pv=Ec*Ec,He=.5;function $r(t,e,o,n,r,s){return n>=e!=s>=e&&t<=(r-o)*(e-n)/(s-n)+o}function Kr(t,e,o,n,r,s,a,i,m,d){let c=!1;return $r(t,e,o,n,r,s)&&(c=!c),$r(t,e,r,s,a,i)&&(c=!c),$r(t,e,a,i,m,d)&&(c=!c),$r(t,e,m,d,o,n)&&(c=!c),c}function mv(t,e,o){return t>=o.x&&t<=o.x+o.width&&e>=o.y&&e<=o.y+o.height}function Jr(t,e,o,n,r,s){const a=Math.min(o,r),i=Math.max(o,r),m=Math.min(n,s),d=Math.max(n,s);return t>=a&&t<=i&&e>=m&&e<=d}function Hs(t={}){const{blockPointerEvents:e=!1}=t,o=new Mt,n=({x:r,y:s,placement:a,elements:i,onClose:m,nodeId:d,tree:c})=>{const p=a==null?void 0:a.split("-")[0];let h=!1,y=null,g=null,b=typeof performance<"u"?performance.now():0;function f(T,v){const C=performance.now(),S=C-b;if(y===null||g===null||S===0)return y=T,g=v,b=C,!1;const k=T-y,P=v-g,D=k*k+P*P,I=S*S*pv;return y=T,g=v,b=C,D0)}function R(){U()||w()}if(U())return;const W=C.getBoundingClientRect(),O=S.getBoundingClientRect(),j=r>O.right-O.width/2,x=s>O.bottom-O.height/2,F=O.width>W.width,H=O.height>W.height,A=(F?W:O).left,Q=(F?W:O).right,M=(H?W:O).top,L=(H?W:O).bottom;if(p==="top"&&s>=W.bottom-1||p==="bottom"&&s<=W.top+1||p==="left"&&r>=W.right-1||p==="right"&&r<=W.left+1){R();return}let V=!1;switch(p){case"top":V=Jr(k,P,A,W.top+1,Q,O.bottom-1);break;case"bottom":V=Jr(k,P,A,O.top+1,Q,W.bottom-1);break;case"left":V=Jr(k,P,O.right-1,L,W.left+1,M);break;case"right":V=Jr(k,P,W.right-1,L,O.left+1,M);break}if(V)return;if(h&&!mv(k,P,W)){R();return}if(!I&&f(k,P)){R();return}let _=!1;switch(p){case"top":{const B=F?He/2:He*4,Y=F||j?r+B:r-B,q=F?r-B:j?r+B:r-B,J=s+He+1,Te=j||F?O.bottom-He:O.top,Re=j?F?O.bottom-He:O.top:O.bottom-He;_=Kr(k,P,Y,J,q,J,O.left,Te,O.right,Re);break}case"bottom":{const B=F?He/2:He*4,Y=F||j?r+B:r-B,q=F?r-B:j?r+B:r-B,J=s-He,Te=j||F?O.top+He:O.bottom,Re=j?F?O.top+He:O.bottom:O.top+He;_=Kr(k,P,Y,J,q,J,O.left,Te,O.right,Re);break}case"left":{const B=H?He/2:He*4,Y=H||x?s+B:s-B,q=H?s-B:x?s+B:s-B,J=r+He+1,Te=x||H?O.right-He:O.left,Re=x?H?O.right-He:O.left:O.right-He;_=Kr(k,P,Te,O.top,Re,O.bottom,J,Y,J,q);break}case"right":{const B=H?He/2:He*4,Y=H||x?s+B:s-B,q=H?s-B:x?s+B:s-B,J=r-He,Te=x||H?O.left+He:O.right,Re=x?H?O.left+He:O.right:O.left+He;_=Kr(k,P,J,Y,J,q,Te,O.top,Re,O.bottom);break}}_?h||o.start(40,R):R()}};return n.__options={...t,blockPointerEvents:e},n}const fv={...Vs,disabled:oe(t=>t.disabled),instantType:oe(t=>t.instantType),isInstantPhase:oe(t=>t.isInstantPhase),trackCursorAxis:oe(t=>t.trackCursorAxis),disableHoverablePopup:oe(t=>t.disableHoverablePopup),lastOpenChangeReason:oe(t=>t.openChangeReason),closeOnClick:oe(t=>t.closeOnClick),closeDelay:oe(t=>t.closeDelay),hasViewport:oe(t=>t.hasViewport)};class sl extends Ar{constructor(o,n,r=!1){const s=new er,a={...hv(),...o};a.floatingRootContext=el(s,n,r);super(a,{popupRef:l.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:s},fv);_e(this,"setOpen",(o,n)=>{var d,c;const r=n.reason,s=r===Ye,a=o&&r===An,i=!o&&(r===uo||r===Rr);if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},(c=(d=this.context).onOpenChange)==null||c.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const p={open:o,openChangeReason:r};a?p.instantType="focus":i?p.instantType="dismiss":r===Ye&&(p.instantType=void 0),Xi(p,o,n.trigger),this.update(p)};s?_t.flushSync(m):m()})}cancelPendingOpen(o){this.state.floatingRootContext.dispatchOpenChange(!1,Oe(uo,o))}static useStore(o,n){return Qi(o,(s,a)=>new sl(n,s,a)).store}}function hv(){return{...Bs(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,hasViewport:!1}}const gv=Di(function(e){const{disabled:o=!1,defaultOpen:n=!1,open:r,disableHoverablePopup:s=!1,trackCursorAxis:a="none",actionsRef:i,onOpenChange:m,onOpenChangeComplete:d,handle:c,triggerId:p,defaultTriggerId:h=null,children:y}=e,g=sl.useStore(c==null?void 0:c.store,{open:n,openProp:r,activeTriggerId:h,triggerIdProp:p});Ps(()=>{r===void 0&&g.state.open===!1&&n===!0&&g.update({open:!0,activeTriggerId:h})}),g.useControlledProp("openProp",r),g.useControlledProp("triggerIdProp",p),g.useContextCallback("onOpenChange",m),g.useContextCallback("onOpenChangeComplete",d);const b=g.useState("open"),f=!o&&b,w=g.useState("activeTriggerId"),T=g.useState("mounted"),v=g.useState("payload");g.useSyncedValues({trackCursorAxis:a,disableHoverablePopup:s}),g.useSyncedValue("disabled",o),js(g);const{forceUnmount:C,transitionStatus:S}=_s(f,g),k=g.useState("isInstantPhase"),P=g.useState("instantType"),D=g.useState("lastOpenChangeReason"),I=l.useRef(null);ue(()=>{b&&o&&g.setOpen(!1,Oe(Yb))},[b,o,g]),ue(()=>{S==="ending"&&D===xu||S!=="ending"&&k?(P!=="delay"&&(I.current=P),g.set("instantType","delay")):I.current!==null&&(g.set("instantType",I.current),I.current=null)},[S,k,D,P,g]),ue(()=>{f&&w==null&&g.set("payload",void 0)},[g,w,f]);const N=l.useCallback(()=>{g.setOpen(!1,Oe(Os))},[g]);l.useImperativeHandle(i,()=>({unmount:C,close:N}),[C,N]);const z=f||T||!o&&a!=="none";return u.jsxs(pu.Provider,{value:g,children:[z&&u.jsx(bv,{store:g,disabled:o,trackCursorAxis:a}),typeof y=="function"?y({payload:v}):y]})});function bv({store:t,disabled:e,trackCursorAxis:o}){const n=t.useState("floatingRootContext"),r=Ms(n,{enabled:!e,referencePress:()=>t.select("closeOnClick")}),s=tw(n,{enabled:!e&&o!=="none",axis:o==="none"?void 0:o}),a=l.useMemo(()=>Tt(s.reference,r.reference),[s.reference,r.reference]),i=l.useMemo(()=>Tt(s.trigger,r.trigger),[s.trigger,r.trigger]),m=l.useMemo(()=>Tt(Zn,s.floating,r.floating),[s.floating,r.floating]);return zs(t,{activeTriggerProps:a,inactiveTriggerProps:i,popupProps:m}),null}let Qo=(function(t){return t.open="data-open",t.closed="data-closed",t[t.startingStyle=br.startingStyle]="startingStyle",t[t.endingStyle=br.endingStyle]="endingStyle",t.anchorHidden="data-anchor-hidden",t.side="data-side",t.align="data-align",t})({}),Ts=(function(t){return t.popupOpen="data-popup-open",t.pressed="data-pressed",t})({});const yv={[Ts.popupOpen]:""},wv={[Ts.popupOpen]:"",[Ts.pressed]:""},vv={[Qo.open]:""},Cv={[Qo.closed]:""},Tv={[Qo.anchorHidden]:""},al={open(t){return t?yv:null}},ii={open(t){return t?wv:null}},bn={open(t){return t?vv:Cv},anchorHidden(t){return t?Tv:null}};function yn(t){return un(t,"base-ui")}const Cp=l.createContext(void 0);function kv(){return l.useContext(Cp)}let Sv=(function(t){return t[t.popupOpen=Ts.popupOpen]="popupOpen",t.triggerDisabled="data-trigger-disabled",t})({});const xv=600,Tp="data-base-ui-tooltip-trigger";function Ac(t){if("composedPath"in t){const o=t.composedPath();for(let n=0;nb.select("transitionStatus")==="ending",shouldOpen(){return!H.current}}),B=wp(v,{enabled:!O}).reference,Y=K=>{const de=H.current,le=Ac(K),De=V(le),me=C.current,fe=me&&le&&Ce(me,le);if(De&&b.select("open")&&b.select("lastOpenChangeReason")===Ye){b.setOpen(!1,Oe(Ye,K));return}if(de&&!De&&fe&&!j.current&&!b.select("open")&&me&&cn(Q.current)){const Se=()=>{!H.current&&!j.current&&!b.select("open")&&b.setOpen(!0,Oe(Ye,K,me))},Z=M();Z===0?(A.clear(),Se()):A.start(Z,Se)}},q=b.useState("triggerProps",D);return st("button",e,{state:{open:T},ref:[o,P,C],props:[_,B,D||x!=="none"?q:void 0,{onMouseOver(K){Y(K.nativeEvent)},onFocus(K){L(Ac(K.nativeEvent))&&K.preventBaseUIHandler()},onMouseLeave(){H.current=!1,A.clear(),Q.current=void 0},onPointerEnter(K){Q.current=K.pointerType},onPointerDown(K){Q.current=K.pointerType,b.set("closeOnClick",c),c&&!b.select("open")&&b.cancelPendingOpen(K.nativeEvent)},onClick(K){c&&!b.select("open")&&b.cancelPendingOpen(K.nativeEvent)},id:f,[Sv.triggerDisabled]:O?"":void 0,[Tp]:O?void 0:""},y],stateAttributesMapping:al})}),kp=l.createContext(void 0);function Rv(){const t=l.useContext(kp);if(t===void 0)throw new Error(rt(70));return t}const Ev=l.forwardRef(function(e,o){const{children:n,container:r,className:s,render:a,style:i,...m}=e,{portalNode:d,portalSubtree:c}=Zu({container:r,ref:o,componentProps:e,elementProps:m});return!c&&!d?null:u.jsxs(l.Fragment,{children:[c,d&&_t.createPortal(n,d)]})}),Av=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e;return Dr().useState("mounted")||n?u.jsx(kp.Provider,{value:n,children:u.jsx(Ev,{ref:o,...r})}):null}),Sp=l.createContext(void 0);function xp(){const t=l.useContext(Sp);if(t===void 0)throw new Error(rt(71));return t}const Nv=l.createContext(void 0);function Dp(){const t=l.useContext(Nv);return(t==null?void 0:t.direction)??"ltr"}const Iv=t=>({name:"arrow",options:t,async fn(e){var H,A;const{x:o,y:n,placement:r,rects:s,platform:a,elements:i,middlewareData:m}=e,{element:d,padding:c=0,offsetParent:p="real"}=po(t,e)||{};if(d==null)return{};const h=Iu(c),y={x:o,y:n},g=Ui(r),b=Mi(g),f=await a.getDimensions(d),w=g==="y",T=w?"top":"left",v=w?"bottom":"right",C=w?"clientHeight":"clientWidth",S=s.reference[b]+s.reference[g]-y[g]-s.floating[b],k=y[g]-s.reference[g],P=p==="real"?await((H=a.getOffsetParent)==null?void 0:H.call(a,d)):i.floating;let D=i.floating[C]||s.floating[b];(!D||!await((A=a.isElement)==null?void 0:A.call(a,P)))&&(D=i.floating[C]||s.floating[b]);const I=S/2-k/2,N=D/2-f[b]/2-1,z=Math.min(h[T],N),U=Math.min(h[v],N),R=z,W=D-f[b]-U,O=D/2-f[b]/2+I,j=oi(R,O,W),x=!m.arrow&&_o(r)!=null&&O!==j&&s.reference[b]/2-(O({...Iv(t),options:[t,e]}),Fv={name:"hide",async fn(t){var i;const{width:e,height:o,x:n,y:r}=t.rects.reference,s=e===0&&o===0&&n===0&&r===0;return{data:{referenceHidden:((i=(await Hw().fn(t)).data)==null?void 0:i.referenceHidden)||s}}}},is={sideX:"left",sideY:"top"},il={name:"adaptiveOrigin",async fn(t){var T,v;const{x:e,y:o,rects:{floating:n},elements:{floating:r},platform:s,strategy:a,placement:i}=t,m=Ze(r),d=m.getComputedStyle(r);if(!(d.transitionDuration!=="0s"&&d.transitionDuration!==""))return{x:e,y:o,data:is};const p=await((T=s.getOffsetParent)==null?void 0:T.call(s,r));let h={width:0,height:0};if(a==="fixed"&&(m!=null&&m.visualViewport))h={width:m.visualViewport.width,height:m.visualViewport.height};else if(p===m){const C=Le(r);h={width:C.documentElement.clientWidth,height:C.documentElement.clientHeight}}else await((v=s.isElement)==null?void 0:v.call(s,p))&&(h=await s.getDimensions(p));const y=Ct(i);let g=e,b=o;y==="left"&&(g=h.width-(e+n.width)),y==="top"&&(b=h.height-(o+n.height));const f=y==="left"?"right":is.sideX,w=y==="top"?"bottom":is.sideY;return{x:g,y:b,data:{sideX:f,sideY:w}}}};function Pp(t,e,o){const n=t==="inline-start"||t==="inline-end";return{top:"top",right:n?o?"inline-start":"inline-end":"right",bottom:"bottom",left:n?o?"inline-end":"inline-start":"left"}[e]}function Nc(t,e,o){const{rects:n,placement:r}=t;return{side:Pp(e,Ct(r),o),align:_o(r)||"center",anchor:{width:n.reference.width,height:n.reference.height},positioner:{width:n.floating.width,height:n.floating.height}}}function ll(t){var St,Tn;const{anchor:e,positionMethod:o="absolute",side:n="bottom",sideOffset:r=0,align:s="center",alignOffset:a=0,collisionBoundary:i,collisionPadding:m=5,sticky:d=!1,arrowPadding:c=5,disableAnchorTracking:p=!1,inline:h,keepMounted:y=!1,floatingRootContext:g,mounted:b,collisionAvoidance:f,shiftCrossAxis:w=!1,nodeId:T,adaptiveOrigin:v,lazyFlip:C=!1,externalTree:S}=t,[k,P]=l.useState(null);!b&&k!==null&&P(null);const D=f.side||"flip",I=f.align||"flip",N=f.fallbackAxisSide||"end",z=typeof e=="function"?e:void 0,U=ke(z),R=z?U:e,W=nt(e),O=nt(b),x=Dp()==="rtl",F=k||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":x?"left":"right","inline-start":x?"right":"left"}[n],H=s==="center"?F:`${F}-${s}`;let A=m;const Q=1,M=n==="bottom"?Q:0,L=n==="top"?Q:0,V=n==="right"?Q:0,_=n==="left"?Q:0;typeof A=="number"?A={top:A+M,right:A+_,bottom:A+L,left:A+V}:A&&(A={top:(A.top||0)+M,right:(A.right||0)+_,bottom:(A.bottom||0)+L,left:(A.left||0)+V});const B={boundary:i==="clipping-ancestors"?"clippingAncestors":i,padding:A},Y=l.useRef(null),q=nt(r),J=nt(a),Te=typeof r!="function"?r:0,Re=typeof a!="function"?a:0,K=[];h&&K.push(h),K.push(zw(je=>{const tt=Nc(je,n,x),xt=typeof q.current=="function"?q.current(tt):q.current,be=typeof J.current=="function"?J.current(tt):J.current;return{mainAxis:xt,crossAxis:be,alignmentAxis:be}},[Te,Re,x,n]));const de=I==="none"&&D!=="shift",le=!de&&(d||w||D==="shift"),De=D==="none"?null:Ww({...B,padding:{top:A.top+Q,right:A.right+Q,bottom:A.bottom+Q,left:A.left+Q},mainAxis:!w&&D==="flip",crossAxis:I==="flip"?"alignment":!1,fallbackAxisSideDirection:N}),me=de?null:Bw(je=>{const tt=Le(je.elements.floating).documentElement;return{...B,rootBoundary:w?{x:0,y:0,width:tt.clientWidth,height:tt.clientHeight}:void 0,mainAxis:I!=="none",crossAxis:le,limiter:d||w?void 0:Vw(xt=>{if(!Y.current)return{};const{width:be,height:We}=Y.current.getBoundingClientRect(),qe=Ft(Ct(xt.placement)),et=qe==="y"?be:We,Ut=qe==="y"?A.left+A.right:A.top+A.bottom;return{offset:et/2+Ut/2}})}},[B,d,w,A,I]);D==="shift"||I==="shift"||s==="center"?K.push(me,De):K.push(De,me),K.push(qw({...B,apply({elements:{floating:je},availableWidth:tt,availableHeight:xt,rects:be}){if(!O.current)return;const We=je.style;We.setProperty("--available-width",`${tt}px`),We.setProperty("--available-height",`${xt}px`);const qe=Ze(je).devicePixelRatio||1,{x:et,y:Ut,width:$e,height:ct}=be.reference,go=(Math.round((et+$e)*qe)-Math.round(et*qe))/qe,pt=(Math.round((Ut+ct)*qe)-Math.round(Ut*qe))/qe;We.setProperty("--anchor-width",`${go}px`),We.setProperty("--anchor-height",`${pt}px`)}}),Ov(je=>({element:Y.current||Le(je.elements.floating).createElement("div"),padding:c,offsetParent:"floating"}),[c]),{name:"transformOrigin",fn(je){var Ul,Ll,jl;const{elements:tt,middlewareData:xt,placement:be,rects:We,y:qe}=je,et=Ct(be),Ut=Ft(et),$e=Y.current,ct=((Ul=xt.arrow)==null?void 0:Ul.x)||0,go=((Ll=xt.arrow)==null?void 0:Ll.y)||0,pt=($e==null?void 0:$e.clientWidth)||0,Dt=($e==null?void 0:$e.clientHeight)||0,kn=ct+pt/2,Wt=go+Dt/2,Ml=Math.abs(((jl=xt.shift)==null?void 0:jl.y)||0),ff=We.reference.height/2,tr=typeof r=="function"?r(Nc(je,n,x)):r,hf=Ml>tr,gf={top:`${kn}px calc(100% + ${tr}px)`,bottom:`${kn}px ${-tr}px`,left:`calc(100% + ${tr}px) ${Wt}px`,right:`${-tr}px ${Wt}px`}[et],bf=`${kn}px ${We.reference.y+ff-qe}px`;return tt.floating.style.setProperty("--transform-origin",le&&Ut==="y"&&hf?bf:gf),{}}},Fv,v),ue(()=>{!b&&g&&g.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[b,g]);const fe=l.useMemo(()=>({elementResize:!p&&typeof ResizeObserver<"u",layoutShift:!p&&typeof IntersectionObserver<"u"}),[p]),{refs:Se,elements:Z,x:Fe,y:we,middlewareData:he,update:Pe,placement:se,context:$,isPositioned:ee,floatingStyles:te}=sv({rootContext:g,open:y?b:void 0,placement:H,middleware:K,strategy:o,whileElementsMounted:y?void 0:(...je)=>Dc(...je,fe),nodeId:T,externalTree:S}),{sideX:G,sideY:ge}=he.adaptiveOrigin||is,xe=ee?o:"fixed",Ke=l.useMemo(()=>{const je=v?{position:xe,[G]:Fe,[ge]:we}:{position:xe,...te};return ee||(je.opacity=0),je},[v,xe,G,Fe,ge,we,te,ee]),ze=l.useRef(null);ue(()=>{if(!b)return;const je=W.current,tt=typeof je=="function"?je():je,be=(Ic(tt)?tt.current:tt)||null||null;be!==ze.current&&(Se.setPositionReference(be),ze.current=be)},[b,Se,R,W]),l.useEffect(()=>{if(!b)return;const je=W.current;typeof je!="function"&&Ic(je)&&je.current!==ze.current&&(Se.setPositionReference(je.current),ze.current=je.current)},[b,Se,R,W]),l.useEffect(()=>{if(y&&b&&Z.domReference&&Z.floating)return Dc(Z.domReference,Z.floating,Pe,fe)},[y,b,Z,Pe,fe]);const Ge=Ct(se),it=Pp(n,Ge,x),It=_o(se)||"center",Bt=!!((St=he.hide)!=null&&St.referenceHidden);ue(()=>{C&&b&&ee&&P(Ge)},[C,b,ee,Ge]);const Vt=l.useMemo(()=>{var je,tt;return{position:"absolute",top:(je=he.arrow)==null?void 0:je.y,left:(tt=he.arrow)==null?void 0:tt.x}},[he.arrow]),ho=((Tn=he.arrow)==null?void 0:Tn.centerOffset)!==0;return l.useMemo(()=>({positionerStyles:Ke,arrowStyles:Vt,arrowRef:Y,arrowUncentered:ho,side:it,align:It,physicalSide:Ge,anchorHidden:Bt,refs:Se,context:$,isPositioned:ee,update:Pe}),[Ke,Vt,Y,ho,it,It,Ge,Bt,Se,$,ee,Pe])}function Ic(t){return t!=null&&"current"in t}function $s(t){return t==="starting"?Ky:Je}function cl(t,e,{styles:o,transitionStatus:n,props:r,refs:s,hidden:a,inert:i=!1}){const m={...o};return i&&(m.pointerEvents="none"),st("div",t,{state:e,ref:s,props:[{role:"presentation",hidden:a,style:m},$s(n),r],stateAttributesMapping:bn})}const Mv=l.forwardRef(function(e,o){const{render:n,className:r,anchor:s,positionMethod:a="absolute",side:i="top",align:m="center",sideOffset:d=0,alignOffset:c=0,collisionBoundary:p="clipping-ancestors",collisionPadding:h=5,arrowPadding:y=5,sticky:g=!1,disableAnchorTracking:b=!1,collisionAvoidance:f=Vi,style:w,...T}=e,v=Dr(),C=Rv(),S=v.useState("open"),k=v.useState("mounted"),P=v.useState("trackCursorAxis"),D=v.useState("disableHoverablePopup"),I=v.useState("floatingRootContext"),N=v.useState("instantType"),z=v.useState("transitionStatus"),U=v.useState("hasViewport"),R=ll({anchor:s,positionMethod:a,floatingRootContext:I,mounted:k,side:i,sideOffset:d,align:m,alignOffset:c,collisionBoundary:p,collisionPadding:h,sticky:g,arrowPadding:y,disableAnchorTracking:b,keepMounted:C,collisionAvoidance:f,adaptiveOrigin:U?il:void 0}),W=l.useMemo(()=>({open:S,side:R.side,align:R.align,anchorHidden:R.anchorHidden,instant:P!=="none"?"tracking-cursor":N}),[S,R.side,R.align,R.anchorHidden,P,N]),O=cl(e,W,{styles:R.positionerStyles,transitionStatus:z,props:T,refs:[o,v.useStateSetter("positionerElement")],hidden:!k,inert:!S||P==="both"||D});return u.jsx(Sp.Provider,{value:R,children:O})}),Uv={...bn,...Nr},Lv=l.forwardRef(function(e,o){const{render:n,className:r,style:s,...a}=e,i=Dr(),{side:m,align:d}=xp(),c=i.useState("open"),p=i.useState("instantType"),h=i.useState("transitionStatus"),y=i.useState("popupProps"),g=i.useState("floatingRootContext"),b=i.useState("disabled"),f=i.useState("closeDelay");Ir({open:c,ref:i.context.popupRef,onComplete(){var C,S;c&&((S=(C=i.context).onOpenChangeComplete)==null||S.call(C,!0))}}),rl(g,{enabled:!b,closeDelay:f});const w=i.useStateSetter("popupElement");return st("div",e,{state:{open:c,side:m,align:d,instant:p,transitionStatus:h},ref:[o,i.context.popupRef,w],props:[y,$s(h),a],stateAttributesMapping:Uv})}),jv=l.forwardRef(function(e,o){const{render:n,className:r,style:s,...a}=e,i=Dr(),{arrowRef:m,side:d,align:c,arrowUncentered:p,arrowStyles:h}=xp(),y=i.useState("open"),g=i.useState("instantType");return st("div",e,{state:{open:y,side:d,align:c,uncentered:p,instant:g},ref:[o,m],props:[{style:h,"aria-hidden":!0},a],stateAttributesMapping:bn})}),_v=function(e){const{delay:o,closeDelay:n,timeout:r=400}=e,s=l.useMemo(()=>({delay:o,closeDelay:n}),[o,n]),a=l.useMemo(()=>({open:o,close:n}),[o,n]);return u.jsx(Cp.Provider,{value:s,children:u.jsx(Qb,{delay:a,timeoutMs:r,children:e.children})})};function dl(t){return _i(19)?t:t?"true":void 0}function Rp(t){var e,o,n="";if(typeof t=="string"||typeof t=="number")n+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(e=0;e{const o=new Array(t.length+e.length);for(let n=0;n({classGroupId:t,validator:e}),Ap=(t=new Map,e=null,o)=>({nextPart:t,validators:e,classGroupId:o}),ks="-",Oc=[],Vv="arbitrary..",Wv=t=>{const e=Hv(t),{conflictingClassGroups:o,conflictingClassGroupModifiers:n}=t;return{getClassGroupId:a=>{if(a.startsWith("[")&&a.endsWith("]"))return qv(a);const i=a.split(ks),m=i[0]===""&&i.length>1?1:0;return Np(i,m,e)},getConflictingClassGroupIds:(a,i)=>{if(i){const m=n[a],d=o[a];return m?d?zv(d,m):m:d||Oc}return o[a]||Oc}}},Np=(t,e,o)=>{if(t.length-e===0)return o.classGroupId;const r=t[e],s=o.nextPart.get(r);if(s){const d=Np(t,e+1,s);if(d)return d}const a=o.validators;if(a===null)return;const i=e===0?t.join(ks):t.slice(e).join(ks),m=a.length;for(let d=0;dt.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const e=t.slice(1,-1),o=e.indexOf(":"),n=e.slice(0,o);return n?Vv+n:void 0})(),Hv=t=>{const{theme:e,classGroups:o}=t;return $v(o,e)},$v=(t,e)=>{const o=Ap();for(const n in t){const r=t[n];ul(r,o,n,e)}return o},ul=(t,e,o,n)=>{const r=t.length;for(let s=0;s{if(typeof t=="string"){Jv(t,e,o);return}if(typeof t=="function"){Gv(t,e,o,n);return}Yv(t,e,o,n)},Jv=(t,e,o)=>{const n=t===""?e:Ip(e,t);n.classGroupId=o},Gv=(t,e,o,n)=>{if(Qv(t)){ul(t(n),e,o,n);return}e.validators===null&&(e.validators=[]),e.validators.push(Bv(o,t))},Yv=(t,e,o,n)=>{const r=Object.entries(t),s=r.length;for(let a=0;a{let o=t;const n=e.split(ks),r=n.length;for(let s=0;s"isThemeGetter"in t&&t.isThemeGetter===!0,Xv=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,o=Object.create(null),n=Object.create(null);const r=(s,a)=>{o[s]=a,e++,e>t&&(e=0,n=o,o=Object.create(null))};return{get(s){let a=o[s];if(a!==void 0)return a;if((a=n[s])!==void 0)return r(s,a),a},set(s,a){s in o?o[s]=a:r(s,a)}}},li="!",Fc=":",Zv=[],Mc=(t,e,o,n,r)=>({modifiers:t,hasImportantModifier:e,baseClassName:o,maybePostfixModifierPosition:n,isExternal:r}),eC=t=>{const{prefix:e,experimentalParseClassName:o}=t;let n=r=>{const s=[];let a=0,i=0,m=0,d;const c=r.length;for(let b=0;bm?d-m:void 0;return Mc(s,y,h,g)};if(e){const r=e+Fc,s=n;n=a=>a.startsWith(r)?s(a.slice(r.length)):Mc(Zv,!1,a,void 0,!0)}if(o){const r=n;n=s=>o({className:s,parseClassName:r})}return n},tC=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((o,n)=>{e.set(o,1e6+n)}),o=>{const n=[];let r=[];for(let s=0;s0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},oC=t=>({cache:Xv(t.cacheSize),parseClassName:eC(t),sortModifiers:tC(t),postfixLookupClassGroupIds:nC(t),...Wv(t)}),nC=t=>{const e=Object.create(null),o=t.postfixLookupClassGroups;if(o)for(let n=0;n{const{parseClassName:o,getClassGroupId:n,getConflictingClassGroupIds:r,sortModifiers:s,postfixLookupClassGroupIds:a}=e,i=[],m=t.trim().split(rC);let d="";for(let c=m.length-1;c>=0;c-=1){const p=m[c],{isExternal:h,modifiers:y,hasImportantModifier:g,baseClassName:b,maybePostfixModifierPosition:f}=o(p);if(h){d=p+(d.length>0?" "+d:d);continue}let w=!!f,T;if(w){const P=b.substring(0,f);T=n(P);const D=T&&a[T]?n(b):void 0;D&&D!==T&&(T=D,w=!1)}else T=n(b);if(!T){if(!w){d=p+(d.length>0?" "+d:d);continue}if(T=n(b),!T){d=p+(d.length>0?" "+d:d);continue}w=!1}const v=y.length===0?"":y.length===1?y[0]:s(y).join(":"),C=g?v+li:v,S=C+T;if(i.indexOf(S)>-1)continue;i.push(S);const k=r(T,w);for(let P=0;P0?" "+d:d)}return d},aC=(...t)=>{let e=0,o,n,r="";for(;e{if(typeof t=="string")return t;let e,o="";for(let n=0;n{let o,n,r,s;const a=m=>{const d=e.reduce((c,p)=>p(c),t());return o=oC(d),n=o.cache.get,r=o.cache.set,s=i,i(m)},i=m=>{const d=n(m);if(d)return d;const c=sC(m,o);return r(m,c),c};return s=a,(...m)=>s(aC(...m))},lC=[],ot=t=>{const e=o=>o[t]||lC;return e.isThemeGetter=!0,e},Fp=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Mp=/^\((?:(\w[\w-]*):)?(.+)\)$/i,cC=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,dC=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,uC=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,pC=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,mC=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,fC=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,bo=t=>cC.test(t),Ee=t=>!!t&&!Number.isNaN(Number(t)),Ht=t=>!!t&&Number.isInteger(Number(t)),ga=t=>t.endsWith("%")&&Ee(t.slice(0,-1)),ro=t=>dC.test(t),Up=()=>!0,hC=t=>uC.test(t)&&!pC.test(t),pl=()=>!1,gC=t=>mC.test(t),bC=t=>fC.test(t),yC=t=>!ae(t)&&!ie(t),wC=t=>t.startsWith("@container")&&(t[10]==="/"&&t[11]!==void 0||t[11]==="s"&&t[16]!==void 0&&t.startsWith("-size/",10)||t[11]==="n"&&t[18]!==void 0&&t.startsWith("-normal/",10)),vC=t=>Bo(t,_p,pl),ae=t=>Fp.test(t),Ho=t=>Bo(t,zp,hC),Uc=t=>Bo(t,RC,Ee),CC=t=>Bo(t,Vp,Up),TC=t=>Bo(t,Bp,pl),Lc=t=>Bo(t,Lp,pl),kC=t=>Bo(t,jp,bC),Gr=t=>Bo(t,Wp,gC),ie=t=>Mp.test(t),rr=t=>wn(t,zp),SC=t=>wn(t,Bp),jc=t=>wn(t,Lp),xC=t=>wn(t,_p),DC=t=>wn(t,jp),Yr=t=>wn(t,Wp,!0),PC=t=>wn(t,Vp,!0),Bo=(t,e,o)=>{const n=Fp.exec(t);return n?n[1]?e(n[1]):o(n[2]):!1},wn=(t,e,o=!1)=>{const n=Mp.exec(t);return n?n[1]?e(n[1]):o:!1},Lp=t=>t==="position"||t==="percentage",jp=t=>t==="image"||t==="url",_p=t=>t==="length"||t==="size"||t==="bg-size",zp=t=>t==="length",RC=t=>t==="number",Bp=t=>t==="family-name",Vp=t=>t==="number"||t==="weight",Wp=t=>t==="shadow",EC=()=>{const t=ot("color"),e=ot("font"),o=ot("text"),n=ot("font-weight"),r=ot("tracking"),s=ot("leading"),a=ot("breakpoint"),i=ot("container"),m=ot("spacing"),d=ot("radius"),c=ot("shadow"),p=ot("inset-shadow"),h=ot("text-shadow"),y=ot("drop-shadow"),g=ot("blur"),b=ot("perspective"),f=ot("aspect"),w=ot("ease"),T=ot("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],S=()=>[...C(),ie,ae],k=()=>["auto","hidden","clip","visible","scroll"],P=()=>["auto","contain","none"],D=()=>[ie,ae,m],I=()=>[bo,"full","auto",...D()],N=()=>[Ht,"none","subgrid",ie,ae],z=()=>["auto",{span:["full",Ht,ie,ae]},Ht,ie,ae],U=()=>[Ht,"auto",ie,ae],R=()=>["auto","min","max","fr",ie,ae],W=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],O=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...D()],x=()=>[bo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...D()],F=()=>[bo,"screen","full","dvw","lvw","svw","min","max","fit",...D()],H=()=>[bo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...D()],A=()=>[t,ie,ae],Q=()=>[...C(),jc,Lc,{position:[ie,ae]}],M=()=>["no-repeat",{repeat:["","x","y","space","round"]}],L=()=>["auto","cover","contain",xC,vC,{size:[ie,ae]}],V=()=>[ga,rr,Ho],_=()=>["","none","full",d,ie,ae],B=()=>["",Ee,rr,Ho],Y=()=>["solid","dashed","dotted","double"],q=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],J=()=>[Ee,ga,jc,Lc],Te=()=>["","none",g,ie,ae],Re=()=>["none",Ee,ie,ae],K=()=>["none",Ee,ie,ae],de=()=>[Ee,ie,ae],le=()=>[bo,"full",...D()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[ro],breakpoint:[ro],color:[Up],container:[ro],"drop-shadow":[ro],ease:["in","out","in-out"],font:[yC],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[ro],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[ro],shadow:[ro],spacing:["px",Ee],text:[ro],"text-shadow":[ro],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",bo,ae,ie,f]}],container:["container"],"container-type":[{"@container":["","normal","size",ie,ae]}],"container-named":[wC],columns:[{columns:[Ee,ae,ie,i]}],"break-after":[{"break-after":v()}],"break-before":[{"break-before":v()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:S()}],overflow:[{overflow:k()}],"overflow-x":[{"overflow-x":k()}],"overflow-y":[{"overflow-y":k()}],overscroll:[{overscroll:P()}],"overscroll-x":[{"overscroll-x":P()}],"overscroll-y":[{"overscroll-y":P()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:I()}],"inset-x":[{"inset-x":I()}],"inset-y":[{"inset-y":I()}],start:[{"inset-s":I(),start:I()}],end:[{"inset-e":I(),end:I()}],"inset-bs":[{"inset-bs":I()}],"inset-be":[{"inset-be":I()}],top:[{top:I()}],right:[{right:I()}],bottom:[{bottom:I()}],left:[{left:I()}],visibility:["visible","invisible","collapse"],z:[{z:[Ht,"auto",ie,ae]}],basis:[{basis:[bo,"full","auto",i,...D()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ee,bo,"auto","initial","none",ae]}],grow:[{grow:["",Ee,ie,ae]}],shrink:[{shrink:["",Ee,ie,ae]}],order:[{order:[Ht,"first","last","none",ie,ae]}],"grid-cols":[{"grid-cols":N()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":U()}],"col-end":[{"col-end":U()}],"grid-rows":[{"grid-rows":N()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":U()}],"row-end":[{"row-end":U()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":R()}],"auto-rows":[{"auto-rows":R()}],gap:[{gap:D()}],"gap-x":[{"gap-x":D()}],"gap-y":[{"gap-y":D()}],"justify-content":[{justify:[...W(),"normal"]}],"justify-items":[{"justify-items":[...O(),"normal"]}],"justify-self":[{"justify-self":["auto",...O()]}],"align-content":[{content:["normal",...W()]}],"align-items":[{items:[...O(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...O(),{baseline:["","last"]}]}],"place-content":[{"place-content":W()}],"place-items":[{"place-items":[...O(),"baseline"]}],"place-self":[{"place-self":["auto",...O()]}],p:[{p:D()}],px:[{px:D()}],py:[{py:D()}],ps:[{ps:D()}],pe:[{pe:D()}],pbs:[{pbs:D()}],pbe:[{pbe:D()}],pt:[{pt:D()}],pr:[{pr:D()}],pb:[{pb:D()}],pl:[{pl:D()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":D()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":D()}],"space-y-reverse":["space-y-reverse"],size:[{size:x()}],"inline-size":[{inline:["auto",...F()]}],"min-inline-size":[{"min-inline":["auto",...F()]}],"max-inline-size":[{"max-inline":["none",...F()]}],"block-size":[{block:["auto",...H()]}],"min-block-size":[{"min-block":["auto",...H()]}],"max-block-size":[{"max-block":["none",...H()]}],w:[{w:[i,"screen",...x()]}],"min-w":[{"min-w":[i,"screen","none",...x()]}],"max-w":[{"max-w":[i,"screen","none","prose",{screen:[a]},...x()]}],h:[{h:["screen","lh",...x()]}],"min-h":[{"min-h":["screen","lh","none",...x()]}],"max-h":[{"max-h":["screen","lh",...x()]}],"font-size":[{text:["base",o,rr,Ho]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[n,PC,CC]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",ga,ae]}],"font-family":[{font:[SC,TC,e]}],"font-features":[{"font-features":[ae]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[r,ie,ae]}],"line-clamp":[{"line-clamp":[Ee,"none",ie,Uc]}],leading:[{leading:[s,...D()]}],"list-image":[{"list-image":["none",ie,ae]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ie,ae]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:A()}],"text-color":[{text:A()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Y(),"wavy"]}],"text-decoration-thickness":[{decoration:[Ee,"from-font","auto",ie,Ho]}],"text-decoration-color":[{decoration:A()}],"underline-offset":[{"underline-offset":[Ee,"auto",ie,ae]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:D()}],"tab-size":[{tab:[Ht,ie,ae]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ie,ae]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ie,ae]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:Q()}],"bg-repeat":[{bg:M()}],"bg-size":[{bg:L()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ht,ie,ae],radial:["",ie,ae],conic:[Ht,ie,ae]},DC,kC]}],"bg-color":[{bg:A()}],"gradient-from-pos":[{from:V()}],"gradient-via-pos":[{via:V()}],"gradient-to-pos":[{to:V()}],"gradient-from":[{from:A()}],"gradient-via":[{via:A()}],"gradient-to":[{to:A()}],rounded:[{rounded:_()}],"rounded-s":[{"rounded-s":_()}],"rounded-e":[{"rounded-e":_()}],"rounded-t":[{"rounded-t":_()}],"rounded-r":[{"rounded-r":_()}],"rounded-b":[{"rounded-b":_()}],"rounded-l":[{"rounded-l":_()}],"rounded-ss":[{"rounded-ss":_()}],"rounded-se":[{"rounded-se":_()}],"rounded-ee":[{"rounded-ee":_()}],"rounded-es":[{"rounded-es":_()}],"rounded-tl":[{"rounded-tl":_()}],"rounded-tr":[{"rounded-tr":_()}],"rounded-br":[{"rounded-br":_()}],"rounded-bl":[{"rounded-bl":_()}],"border-w":[{border:B()}],"border-w-x":[{"border-x":B()}],"border-w-y":[{"border-y":B()}],"border-w-s":[{"border-s":B()}],"border-w-e":[{"border-e":B()}],"border-w-bs":[{"border-bs":B()}],"border-w-be":[{"border-be":B()}],"border-w-t":[{"border-t":B()}],"border-w-r":[{"border-r":B()}],"border-w-b":[{"border-b":B()}],"border-w-l":[{"border-l":B()}],"divide-x":[{"divide-x":B()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":B()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Y(),"hidden","none"]}],"divide-style":[{divide:[...Y(),"hidden","none"]}],"border-color":[{border:A()}],"border-color-x":[{"border-x":A()}],"border-color-y":[{"border-y":A()}],"border-color-s":[{"border-s":A()}],"border-color-e":[{"border-e":A()}],"border-color-bs":[{"border-bs":A()}],"border-color-be":[{"border-be":A()}],"border-color-t":[{"border-t":A()}],"border-color-r":[{"border-r":A()}],"border-color-b":[{"border-b":A()}],"border-color-l":[{"border-l":A()}],"divide-color":[{divide:A()}],"outline-style":[{outline:[...Y(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Ee,ie,ae]}],"outline-w":[{outline:["",Ee,rr,Ho]}],"outline-color":[{outline:A()}],shadow:[{shadow:["","none",c,Yr,Gr]}],"shadow-color":[{shadow:A()}],"inset-shadow":[{"inset-shadow":["none",p,Yr,Gr]}],"inset-shadow-color":[{"inset-shadow":A()}],"ring-w":[{ring:B()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:A()}],"ring-offset-w":[{"ring-offset":[Ee,Ho]}],"ring-offset-color":[{"ring-offset":A()}],"inset-ring-w":[{"inset-ring":B()}],"inset-ring-color":[{"inset-ring":A()}],"text-shadow":[{"text-shadow":["none",h,Yr,Gr]}],"text-shadow-color":[{"text-shadow":A()}],opacity:[{opacity:[Ee,ie,ae]}],"mix-blend":[{"mix-blend":[...q(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":q()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Ee]}],"mask-image-linear-from-pos":[{"mask-linear-from":J()}],"mask-image-linear-to-pos":[{"mask-linear-to":J()}],"mask-image-linear-from-color":[{"mask-linear-from":A()}],"mask-image-linear-to-color":[{"mask-linear-to":A()}],"mask-image-t-from-pos":[{"mask-t-from":J()}],"mask-image-t-to-pos":[{"mask-t-to":J()}],"mask-image-t-from-color":[{"mask-t-from":A()}],"mask-image-t-to-color":[{"mask-t-to":A()}],"mask-image-r-from-pos":[{"mask-r-from":J()}],"mask-image-r-to-pos":[{"mask-r-to":J()}],"mask-image-r-from-color":[{"mask-r-from":A()}],"mask-image-r-to-color":[{"mask-r-to":A()}],"mask-image-b-from-pos":[{"mask-b-from":J()}],"mask-image-b-to-pos":[{"mask-b-to":J()}],"mask-image-b-from-color":[{"mask-b-from":A()}],"mask-image-b-to-color":[{"mask-b-to":A()}],"mask-image-l-from-pos":[{"mask-l-from":J()}],"mask-image-l-to-pos":[{"mask-l-to":J()}],"mask-image-l-from-color":[{"mask-l-from":A()}],"mask-image-l-to-color":[{"mask-l-to":A()}],"mask-image-x-from-pos":[{"mask-x-from":J()}],"mask-image-x-to-pos":[{"mask-x-to":J()}],"mask-image-x-from-color":[{"mask-x-from":A()}],"mask-image-x-to-color":[{"mask-x-to":A()}],"mask-image-y-from-pos":[{"mask-y-from":J()}],"mask-image-y-to-pos":[{"mask-y-to":J()}],"mask-image-y-from-color":[{"mask-y-from":A()}],"mask-image-y-to-color":[{"mask-y-to":A()}],"mask-image-radial":[{"mask-radial":[ie,ae]}],"mask-image-radial-from-pos":[{"mask-radial-from":J()}],"mask-image-radial-to-pos":[{"mask-radial-to":J()}],"mask-image-radial-from-color":[{"mask-radial-from":A()}],"mask-image-radial-to-color":[{"mask-radial-to":A()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[Ee]}],"mask-image-conic-from-pos":[{"mask-conic-from":J()}],"mask-image-conic-to-pos":[{"mask-conic-to":J()}],"mask-image-conic-from-color":[{"mask-conic-from":A()}],"mask-image-conic-to-color":[{"mask-conic-to":A()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:Q()}],"mask-repeat":[{mask:M()}],"mask-size":[{mask:L()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ie,ae]}],filter:[{filter:["","none",ie,ae]}],blur:[{blur:Te()}],brightness:[{brightness:[Ee,ie,ae]}],contrast:[{contrast:[Ee,ie,ae]}],"drop-shadow":[{"drop-shadow":["","none",y,Yr,Gr]}],"drop-shadow-color":[{"drop-shadow":A()}],grayscale:[{grayscale:["",Ee,ie,ae]}],"hue-rotate":[{"hue-rotate":[Ee,ie,ae]}],invert:[{invert:["",Ee,ie,ae]}],saturate:[{saturate:[Ee,ie,ae]}],sepia:[{sepia:["",Ee,ie,ae]}],"backdrop-filter":[{"backdrop-filter":["","none",ie,ae]}],"backdrop-blur":[{"backdrop-blur":Te()}],"backdrop-brightness":[{"backdrop-brightness":[Ee,ie,ae]}],"backdrop-contrast":[{"backdrop-contrast":[Ee,ie,ae]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ee,ie,ae]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ee,ie,ae]}],"backdrop-invert":[{"backdrop-invert":["",Ee,ie,ae]}],"backdrop-opacity":[{"backdrop-opacity":[Ee,ie,ae]}],"backdrop-saturate":[{"backdrop-saturate":[Ee,ie,ae]}],"backdrop-sepia":[{"backdrop-sepia":["",Ee,ie,ae]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":D()}],"border-spacing-x":[{"border-spacing-x":D()}],"border-spacing-y":[{"border-spacing-y":D()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",ie,ae]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ee,"initial",ie,ae]}],ease:[{ease:["linear","initial",w,ie,ae]}],delay:[{delay:[Ee,ie,ae]}],animate:[{animate:["none",T,ie,ae]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[b,ie,ae]}],"perspective-origin":[{"perspective-origin":S()}],rotate:[{rotate:Re()}],"rotate-x":[{"rotate-x":Re()}],"rotate-y":[{"rotate-y":Re()}],"rotate-z":[{"rotate-z":Re()}],scale:[{scale:K()}],"scale-x":[{"scale-x":K()}],"scale-y":[{"scale-y":K()}],"scale-z":[{"scale-z":K()}],"scale-3d":["scale-3d"],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[ie,ae,"","none","gpu","cpu"]}],"transform-origin":[{origin:S()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:le()}],"translate-x":[{"translate-x":le()}],"translate-y":[{"translate-y":le()}],"translate-z":[{"translate-z":le()}],"translate-none":["translate-none"],zoom:[{zoom:[Ht,ie,ae]}],accent:[{accent:A()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:A()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ie,ae]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":A()}],"scrollbar-track-color":[{"scrollbar-track":A()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":D()}],"scroll-mx":[{"scroll-mx":D()}],"scroll-my":[{"scroll-my":D()}],"scroll-ms":[{"scroll-ms":D()}],"scroll-me":[{"scroll-me":D()}],"scroll-mbs":[{"scroll-mbs":D()}],"scroll-mbe":[{"scroll-mbe":D()}],"scroll-mt":[{"scroll-mt":D()}],"scroll-mr":[{"scroll-mr":D()}],"scroll-mb":[{"scroll-mb":D()}],"scroll-ml":[{"scroll-ml":D()}],"scroll-p":[{"scroll-p":D()}],"scroll-px":[{"scroll-px":D()}],"scroll-py":[{"scroll-py":D()}],"scroll-ps":[{"scroll-ps":D()}],"scroll-pe":[{"scroll-pe":D()}],"scroll-pbs":[{"scroll-pbs":D()}],"scroll-pbe":[{"scroll-pbe":D()}],"scroll-pt":[{"scroll-pt":D()}],"scroll-pr":[{"scroll-pr":D()}],"scroll-pb":[{"scroll-pb":D()}],"scroll-pl":[{"scroll-pl":D()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ie,ae]}],fill:[{fill:["none",...A()]}],"stroke-w":[{stroke:[Ee,rr,Ho,Uc]}],stroke:[{stroke:["none",...A()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},AC=iC(EC);function Ie(...t){return AC(Ep(t))}function qp({delay:t=0,...e}){return u.jsx(_v,{"data-slot":"tooltip-provider",delay:t,...e})}function Hp({...t}){return u.jsx(gv,{"data-slot":"tooltip",...t})}function $p({...t}){return u.jsx(Pv,{"data-slot":"tooltip-trigger",...t})}function Kp({className:t,side:e="top",sideOffset:o=4,align:n="center",alignOffset:r=0,children:s,...a}){return u.jsx(Av,{children:u.jsx(Mv,{align:n,alignOffset:r,side:e,sideOffset:o,className:"isolate z-50",children:u.jsxs(Lv,{"data-slot":"tooltip-content",className:Ie("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-[oklch(0.55_0.20_30)] px-3 py-1.5 text-xs text-white shadow-lg dark:bg-[oklch(0.63_0.22_30)] has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...a,children:[s,u.jsx(jv,{className:"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-[oklch(0.55_0.20_30)] fill-[oklch(0.55_0.20_30)] dark:bg-[oklch(0.63_0.22_30)] dark:fill-[oklch(0.63_0.22_30)] data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}function Jp(){const t=vf();return{push:e=>t(e),replace:e=>t(e,{replace:!0}),back:()=>t(-1),forward:()=>t(1),refresh:()=>t(0)}}function Gp(){return Tf().pathname}function p0(){return Cf()[0]}const _c=t=>{let e;const o=new Set,n=(d,c)=>{const p=typeof d=="function"?d(e):d;if(!Object.is(p,e)){const h=e;e=c??(typeof p!="object"||p===null)?p:Object.assign({},e,p),o.forEach(y=>y(e,h))}},r=()=>e,i={setState:n,getState:r,getInitialState:()=>m,subscribe:d=>(o.add(d),()=>o.delete(d))},m=e=t(n,r,i);return i},NC=(t=>t?_c(t):_c),IC=t=>t;function OC(t,e=IC){const o=X.useSyncExternalStore(t.subscribe,X.useCallback(()=>e(t.getState()),[t,e]),X.useCallback(()=>e(t.getInitialState()),[t,e]));return X.useDebugValue(o),o}const FC=t=>{const e=NC(t),o=n=>OC(e,n);return Object.assign(o,e),o},ml=(t=>FC);function MC(t,e){let o;try{o=t()}catch{return}return{getItem:r=>{var s;const a=m=>m===null?null:JSON.parse(m,void 0),i=(s=o.getItem(r))!=null?s:null;return i instanceof Promise?i.then(a):a(i)},setItem:(r,s)=>o.setItem(r,JSON.stringify(s,void 0)),removeItem:r=>o.removeItem(r)}}const ci=t=>e=>{try{const o=t(e);return o instanceof Promise?o:{then(n){return ci(n)(o)},catch(n){return this}}}catch(o){return{then(n){return this},catch(n){return ci(n)(o)}}}},UC=(t,e)=>(o,n,r)=>{let s={storage:MC(()=>window.localStorage),partialize:f=>f,version:0,merge:(f,w)=>({...w,...f}),...e},a=!1,i=0;const m=new Set,d=new Set;let c=s.storage;if(!c)return t((...f)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),o(...f)},n,r);const p=()=>{const f=s.partialize({...n()});return c.setItem(s.name,{state:f,version:s.version})},h=r.setState;r.setState=(f,w)=>(h(f,w),p());const y=t((...f)=>(o(...f),p()),n,r);r.getInitialState=()=>y;let g;const b=()=>{var f,w;if(!c)return;const T=++i;a=!1,m.forEach(C=>{var S;return C((S=n())!=null?S:y)});const v=((w=s.onRehydrateStorage)==null?void 0:w.call(s,(f=n())!=null?f:y))||void 0;return ci(c.getItem.bind(c))(s.name).then(C=>{if(C)if(typeof C.version=="number"&&C.version!==s.version){if(s.migrate){const S=s.migrate(C.state,C.version);return S instanceof Promise?S.then(k=>[!0,k]):[!0,S]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,C.state];return[!1,void 0]}).then(C=>{var S;if(T!==i)return;const[k,P]=C;if(g=s.merge(P,(S=n())!=null?S:y),o(g,!0),k)return p()}).then(()=>{T===i&&(v==null||v(n(),void 0),g=n(),a=!0,d.forEach(C=>C(g)))}).catch(C=>{T===i&&(v==null||v(void 0,C))})};return r.persist={setOptions:f=>{s={...s,...f},f.storage&&(c=f.storage)},clearStorage:()=>{c==null||c.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>b(),hasHydrated:()=>a,onHydrate:f=>(m.add(f),()=>{m.delete(f)}),onFinishHydration:f=>(d.add(f),()=>{d.delete(f)})},s.skipHydration||b(),g||y},fl=UC,LC={"layout.brand":"RaisFast","layout.adminPanel":"Admin Panel","layout.dashboard":"Dashboard","layout.content":"Content","layout.extension":"Extensions","layout.system":"System","layout.posts":"Posts","layout.categories":"Categories","layout.tags":"Tags","layout.comments":"Comments","layout.media":"Media","layout.contentTypes":"Content Types","layout.users":"Users","layout.plugins":"Plugins","layout.rolesPermissions":"Roles & Permissions","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"API Tokens","layout.workflows":"Workflows","layout.auditLog":"Audit Log","layout.options":"Options","layout.tenant":"Tenant","layout.clearTenant":"Clear tenant filter","layout.all":"All","layout.accessDenied":"Access Denied","layout.accessDeniedMsg":"You need to be logged in as an author or admin to access this area.","layout.goToLogin":"Go to Login","layout.toggleTheme":"Toggle theme","templates.title":"Templates","templates.all":"All","templates.search":"Search templates...","templates.empty":"No templates found","layout.signOut":"Sign out","layout.profile":"Profile","common.loading":"Loading...","common.save":"Save","common.cancel":"Cancel","common.ok":"OK","common.create":"Create","common.creating":"Creating...","common.saving":"Saving...","common.delete":"Delete","common.confirmDeleteTitle":"Confirm Delete","common.edit":"Edit","common.content":"Content","common.view":"View","common.remove":"Remove","common.download":"Download","common.back":"Back","common.clear":"Clear","common.actions":"Actions","common.status":"Status","common.retry":"Retry","common.previous":"Previous","common.next":"Next","common.pageOf":"Page {page} of {total}","common.totalRecords":"{count} records","common.noData":"No data","common.all":"All","common.draft":"Draft","common.published":"Published","common.archived":"Archived","common.enabled":"Enabled","common.disabled":"Disabled","common.name":"Name","common.description":"Description","common.enabledCount":"{count} enabled","common.disabledCount":"{count} disabled","common.adminOnly":"Admin Only","common.adminOnlyMsg":"Only administrators can manage this section.","common.backToDashboard":"Back to Dashboard","common.confirmDelete":"Are you sure you want to delete this item?","common.notFound":"Not Found","common.failedToLoad":"Failed to load","common.selectStatus":"Select status","common.titleRequired":"Title is required","common.contentRequired":"Content is required","common.nameRequired":"Name is required","common.invalidJson":"Invalid JSON","common.isRequired":"{field} is required","common.created":"{name} created","common.updated":"{name} updated","common.deleted":"{name} deleted","common.failedToCreate":"Failed to create {name}","common.failedToUpdate":"Failed to update {name}","common.failedToDelete":"Failed to delete {name}","common.none":"None","common.noDependencies":"No dependencies","dashboard.title":"Dashboard","dashboard.posts":"Posts","dashboard.comments":"Comments","dashboard.categories":"Categories","dashboard.tags":"Tags","dashboard.media":"Media","dashboard.users":"Users","dashboard.contentTypes":"Content Types","dashboard.postsLast14Days":"Posts (Last 14 Days)","dashboard.ordersAndProducts14Days":"Orders & Products (Last 14 Days)","dashboard.viewAll":"View All","dashboard.failedToLoad":"Failed to load dashboard stats. Data may be stale.","dashboard.noDataYet":"No data yet.","dashboard.recentActivity":"Recent Activity","dashboard.noActivity":"No activity yet.","dashboard.type":"Type","dashboard.detail":"Detail","dashboard.time":"Time","dashboard.post":"Post","dashboard.comment":"Comment","dashboard.product":"Product","dashboard.order":"Order","dashboard.products":"Products","dashboard.orders":"Orders","dashboard.revenue":"Revenue","dashboard.coupons":"Coupons","dashboard.orderStatus":"Order Status","dashboard.justNow":"just now","dashboard.minutesAgo":"m ago","dashboard.hoursAgo":"h ago","dashboard.daysAgo":"d ago","posts.title":"Posts","posts.newPost":"New Post","posts.editPost":"Edit Post","posts.postTitle":"Post title","posts.titleCol":"Title","posts.categoryCol":"Category","posts.authorCol":"Author","posts.createdCol":"Created","posts.allStatus":"All Status","posts.searchPlaceholder":"Search posts...","posts.content":"Content","posts.excerpt":"Excerpt","posts.briefSummary":"Brief summary (optional)","posts.coverImage":"Cover Image","posts.writeContent":"Write your post content in Markdown...","posts.selectCategory":"Select category","posts.tags":"Tags","posts.slug":"Slug","posts.slugPlaceholder":"Auto-generated from title if empty","posts.noTags":"No tags available","posts.addTag":"Add tag...","posts.createTag":"Create","posts.createPost":"Create Post","posts.saveChanges":"Save Changes","posts.postCreated":"Post created","posts.postUpdated":"Post updated","posts.postDeleted":"Post deleted","posts.failedToCreate":"Failed to create post","posts.failedToUpdate":"Failed to update post","posts.failedToDelete":"Failed to delete post","posts.confirmDelete":"Are you sure you want to delete this post?","posts.confirmBatchDelete":"Are you sure you want to delete {count} posts?","posts.batchPublish":"Publish","posts.batchUnpublish":"Unpublish","posts.batchSuccess":"{count} posts updated","posts.noPosts":"No posts found.","posts.noPostsDesc":"Create your first blog post to share your ideas.","posts.failedToLoad":"Failed to load post.","categories.title":"Categories","categories.newCategory":"New Category","categories.createCategory":"Create a new category for organizing posts.","categories.categoryName":"Category name","categories.optionalDesc":"Optional description","categories.sortOrder":"Sort Order","categories.slug":"Slug","categories.categoryCreated":"Category created","categories.categoryUpdated":"Category updated","categories.categoryDeleted":"Category deleted","categories.failedToCreate":"Failed to create category","categories.failedToUpdate":"Failed to update category","categories.failedToDelete":"Failed to delete category","categories.confirmDelete":"Are you sure you want to delete this category?","categories.confirmDeleteTitle":"Delete Category","categories.noCategories":"No Categories Yet","categories.noCategoriesDesc":"Organize your posts with categories.","categories.treeTitle":"Categories","categories.selectCategory":"Select a category to view details","categories.addChild":"Add Sub","categories.parent":"Parent Category","categories.noParent":"No Parent","categories.editCategory":"Edit Category","categories.cannotDeleteHasChildren":"Cannot delete this category because it has {count} sub-categories. Please move or delete them first.","categories.coverImage":"Cover Image","tags.title":"Tags","tags.newTag":"New Tag","tags.createTag":"Create a new tag for posts.","tags.tagName":"Tag name","tags.tagCreated":"Tag created","tags.tagUpdated":"Tag updated","tags.tagDeleted":"Tag deleted","tags.failedToCreate":"Failed to create tag","tags.failedToUpdate":"Failed to update tag","tags.failedToDelete":"Failed to delete tag","tags.confirmDelete":"Are you sure you want to delete this tag?","tags.noTags":"No tags found.","tags.noTagsDesc":"Add tags to help organize and filter your content.","comments.title":"Comments","comments.total":"{count} total","comments.all":"All","comments.pending":"Pending","comments.approved":"Approved","comments.rejected":"Rejected","comments.spam":"Spam","comments.approve":"Approve","comments.reject":"Reject","comments.author":"Author","comments.contentCol":"Content","comments.post":"Post","comments.date":"Date","comments.selected":"{count} selected","comments.commentStatusUpdated":"Comment status updated","comments.commentDeleted":"Comment deleted","comments.bulkActionDone":"{count} comment(s) {status}","comments.bulkDeleted":"{count} comment(s) deleted","comments.bulkActionFailed":"Bulk action failed","comments.bulkDeleteFailed":"Bulk delete failed","comments.failedToUpdateStatus":"Failed to update status","comments.failedToDelete":"Failed to delete comment","comments.confirmDelete":"Are you sure you want to delete this comment?","comments.confirmBulkDelete":"Delete {count} selected comment(s)?","comments.noComments":"No comments found.","comments.noCommentsDesc":"Comments will appear here once readers start engaging.","contentTypes.title":"Content Types","contentTypes.noFields":"This content type has no editable fields.","contentTypes.createContentType":"Create Content Type","contentTypes.builder":"Builder","contentTypes.ungrouped":"Ungrouped","contentTypes.noContentTypes":"No content types yet","contentTypes.noContentTypesDesc":"Create your first content type to start building your CMS.","contentTypes.contentTypeDeleted":"Content type deleted","contentTypes.failedToDelete":"Failed to delete","contentTypes.confirmDelete":'Delete content type "{singular}"? This removes the schema file but NOT the database table.',"contentTypes.notFound":"Content Type Not Found","contentTypes.notFoundMsg":'Content type "{singular}" not found.',"contentTypes.itemDeleted":"Item deleted","contentTypes.failedToDeleteItem":"Failed to delete item","contentTypes.confirmDeleteItem":"Are you sure you want to delete this item?","contentTypes.batchDeleteSuccess":"{count} items deleted","contentTypes.confirmBatchDelete":"Are you sure you want to delete {count} items?","contentTypes.export":"Export","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} items exported","contentTypes.import":"Import","contentTypes.importJson":"Import JSON","contentTypes.importCsv":"Import CSV","contentTypes.importExcel":"Import Excel","contentTypes.importSuccess":"{count} records imported","contentTypes.importPartial":"{ok} imported, {failed} failed","contentTypes.importEmpty":"No records found in file","contentTypes.importTooMany":"Too many records (max {max})","contentTypes.importFailed":"Import failed","contentTypes.importTooLarge":"File exceeds the 8 MB limit","contentTypes.noItems":"No items found.","contentTypes.noItemsDesc":"Create your first item to populate this collection.","contentTypes.newItem":"New {name}","contentTypes.editStructure":"Edit Structure","contentTypes.addRecord":"Add","contentTypes.browseRecords":"Browse","contentTypes.editItem":"Edit {name}","contentTypes.itemNotFound":"Item not found.","contentTypes.fields":"{count} field(s)","contentTypes.fieldsLabel":"fields","contentTypes.totalRecords":"{count} records","contentTypes.createdAt":"Created","contentTypes.updatedAt":"Updated","contentTypes.searchPlaceholder":"Search records...","contentTypes.searchTypes":"Search name, singular, plural, table...","contentTypes.noSearchResults":"No content types found","contentTypes.noSearchResultsDesc":'No content types match "{keyword}".',"contentTypes.exportData":"Export","contentTypes.api":"API","contentTypes.apiSaved":"API settings saved","contentTypes.apiSaveFailed":"Failed to save API settings","contentTypes.exportDataSuccess":"Export complete","contentTypes.exportDataFailed":"Export failed","contentTypes.exportEmpty":"No records to export","users.title":"Users","users.newUser":"New User","users.createUser":"Create User","users.registerNew":"Register a new user account.","users.username":"Username","users.email":"Email","users.password":"Password","users.minChars":"At least 8 characters, must contain uppercase, lowercase letters and digits","users.role":"Role","users.joined":"Joined","users.editRole":"Edit User Role","users.editUser":"Edit User","users.changeRoleFor":"Change role for {username} ({email})","users.reader":"Reader","users.author":"Author","users.admin":"Admin","users.active":"Active","users.suspended":"Suspended","users.banned":"Banned","users.newPassword":"New Password","users.userCreated":"User created","users.userUpdated":"User updated","users.userRoleUpdated":"User role updated","users.failedToCreate":"Failed to create user","users.failedToUpdate":"Failed to update user","users.noUsers":"No users found.","users.noUsersDesc":"Invite users and manage their roles.","users.registeredVia":"Source","users.userDeleted":"User deleted","users.failedToDelete":"Failed to delete user","users.confirmDeleteUser":'Are you sure you want to delete user "{username}"? This action cannot be undone.',"webhooks.title":"Webhooks","webhooks.name":"Name","webhooks.namePlaceholder":"e.g. Slack notifier","webhooks.nameCol":"Name","webhooks.newWebhook":"New Webhook","webhooks.createWebhook":"Create a new webhook subscription to receive event notifications.","webhooks.callbackUrl":"Callback URL","webhooks.eventsComma":"Events (comma-separated)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Use * to subscribe to all events","webhooks.descriptionOptional":"Description (optional)","webhooks.secretOptional":"Secret (optional)","webhooks.secretPlaceholder":"Leave empty if not needed","webhooks.secretHint":"Used for HMAC-SHA256 signature verification (X-Webhook-Signature header).","webhooks.deliveryHistory":"Delivery History","webhooks.colTime":"Time","webhooks.colEvent":"Event","webhooks.colStatus":"Status","webhooks.colStatusCode":"Code","webhooks.colDuration":"Duration","webhooks.colError":"Error","webhooks.noDeliveries":"No delivery records yet.","webhooks.urlCol":"URL","webhooks.events":"Events","webhooks.webhookCreated":"Webhook created","webhooks.webhookUpdated":"Webhook updated","webhooks.webhookDeleted":"Webhook deleted","webhooks.failedToCreate":"Failed to create webhook","webhooks.failedToUpdate":"Failed to update webhook","webhooks.failedToDelete":"Failed to delete webhook","webhooks.confirmDelete":"Delete this webhook subscription?","webhooks.noWebhooks":"No webhooks found.","webhooks.noWebhooksDesc":"Set up webhooks to receive real-time event notifications.","tokens.title":"API Tokens","tokens.newToken":"New Token","tokens.createToken":"Create API Token","tokens.createTokenDesc":"Generate a new personal access token. The token value will only be shown once.","tokens.scopesComma":"Scopes (comma-separated)","tokens.expiresOptional":"Expires At (optional)","tokens.tokenCreated":"Token created","tokens.tokenRevoked":"Token revoked","tokens.failedToCreate":"Failed to create token","tokens.failedToRevoke":"Failed to revoke token","tokens.confirmRevoke":'Revoke token "{name}"? This cannot be undone.',"tokens.tokenCopied":"Token copied to clipboard","tokens.tokenCreatedCopy":"Token Created — copy it now!","tokens.copied":"Copied","tokens.copy":"Copy","tokens.dismiss":"Dismiss","tokens.notShownAgain":"This token will not be shown again. Store it securely.","tokens.scopesCol":"Scopes","tokens.expiresCol":"Expires","tokens.lastUsed":"Last Used","tokens.never":"Never","tokens.noTokens":"No API tokens found. Create one to get started.","tokens.noTokensDesc":"Create API tokens for programmatic access.","tokens.editToken":"Edit Token","tokens.editTokenDesc":"Update token name and scopes","tokens.tokenUpdated":"Token updated","tokens.failedToUpdate":"Failed to update token","tokens.expiresAt":"Expires At","tokens.scopes":"Scopes","tokens.fullAccess":"Full Access","tokens.selectResource":"Select resources from the left to configure scopes","tokens.searchResources":"Search resources...","tokens.month1":"1 Month","tokens.months3":"3 Months","tokens.months6":"6 Months","tokens.year1":"1 Year","tokens.custom":"Custom","tokens.resource":"Resource","tokens.created":"Created","tokens.name":"Name","tokens.description":"Description","workflows.title":"Workflows","workflows.instances":"Instances","workflows.visualEditor":"Visual Editor","workflows.newWorkflow":"New Workflow","workflows.createWorkflow":"Create Workflow","workflows.createWorkflowDesc":"Define a new workflow with steps. Steps are configured as JSON.","workflows.stepsJson":"Steps (JSON)","workflows.stepFormat":'Each step: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow created","workflows.workflowDeleted":"Workflow deleted","workflows.failedToCreate":"Failed to create workflow","workflows.failedToDelete":"Failed to delete workflow","workflows.confirmDelete":'Delete workflow "{name}"?',"workflows.noWorkflows":"No workflows found. Create one to get started.","workflows.noWorkflowsDesc":"Define workflows to automate your content pipeline.","workflows.steps":"{count} steps","workflows.workflowStarted":"Workflow started","workflows.editor.title":"Workflow Editor","workflows.editor.newWorkflow":"New Workflow","workflows.editor.stepName":"Step name","workflows.editor.branchesJson":"Branches (JSON array)","workflows.editor.connectEdges":"Connect edges from this node to define branches.","workflows.editor.configJson":"Config (JSON)","workflows.editor.apply":"Apply","workflows.editor.deleteStep":"Delete step","workflows.editor.addStep":"Add Step","workflows.editor.invalidJson":"Invalid JSON in config","workflows.editor.workflowSaved":"Workflow saved","workflows.editor.failedToSave":"Failed to save workflow","audit.title":"Audit Log","audit.clearFilters":"Clear Filters","audit.noLogs":"No audit log entries found.","audit.action":"Action","audit.actor":"Actor","audit.resource":"Resource","audit.timestamp":"Timestamp","options.title":"Options","options.saved":"Options saved","options.failedToSave":"Failed to save options","plugins.title":"Plugins","plugins.loaded":"{count} loaded","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Health","plugins.pluginEnabled":"Plugin enabled","plugins.pluginDisabled":"Plugin disabled","plugins.pluginReloaded":"Plugin reloaded","plugins.pluginRemoved":"Plugin removed","plugins.failedToEnable":"Failed to enable plugin","plugins.failedToDisable":"Failed to disable plugin","plugins.failedToReload":"Failed to reload plugin","plugins.failedToRemove":"Failed to remove plugin","plugins.noPlugins":"No plugins loaded.","plugins.placePlugins":"Place plugins in the configured plugin directory.","plugins.confirmRemove":'Remove plugin "{name}"? This will unload it from memory.',"plugins.autoDisabled":"Auto-disabled","plugins.tooManyErrors":"Too many errors","plugins.errorCount":"{count} error(s)","plugins.errorsOccurred":"Errors occurred","plugins.calls":"{count} calls","plugins.idle":"Idle","plugins.notFound":"Plugin Not Found","plugins.notFoundMsg":"Plugin not found.","plugins.backToPlugins":"Back to Plugins","plugins.general":"General","plugins.version":"Version","plugins.reload":"Reload","plugins.remove":"Remove","plugins.errorTracking":"Error tracking and auto-disable status","plugins.healthy":"Healthy","plugins.errorCountLabel":"Error Count","plugins.lastError":"Last Error","plugins.lastErrorAt":"Last Error At","plugins.autoDisabledLabel":"Auto-disabled","plugins.permissions":"Permissions","permissions.declaredFromManifest":"Declared permissions from plugin manifest","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Registered hook points and their execution metrics","plugins.noHooks":"No hooks registered.","plugins.totalCalls":"Total Calls","plugins.totalErrors":"Total Errors","plugins.totalDuration":"Total Duration","plugins.noMetrics":"No metrics yet","plugins.performance":"Performance Overview","plugins.maxMemory":"Max Memory","plugins.timeout":"Timeout","plugins.default":"Default","media.title":"Media","media.files":"{count} files","media.searchFiles":"Search files...","media.fileDeleted":"File deleted","media.failedToDelete":"Failed to delete file","media.confirmDelete":"Are you sure you want to delete this file?","media.date":"Date","media.size":"Size","media.ascending":"Ascending","media.descending":"Descending","field.mediaUrl":"Media URL","field.blobBase64":"Base64 encoded binary data","field.mediaItems":"items","field.blobChooseFile":"Choose file","field.blobReplace":"Replace","field.blobBytes":"{size} bytes","field.blobTooLarge":"File exceeds {max} MB limit","field.blobReadError":"Failed to read file","field.blobMaxSize":"Max {max}","field.supportsTypes":"Supports: {types}","field.maxFiles":"max {max} files","field.allTypes":"All file types","field.startWriting":"Start writing...","field.yes":"Yes","field.no":"No","field.relatedItemId":"Related item ID","cron.title":"Cron Jobs","cron.newCron":"New Cron Job","cron.expression":"Expression","cron.handler":"Handler","cron.lastRun":"Last Run","cron.nextRun":"Next Run","cron.cronCreated":"Cron job created","cron.cronDeleted":"Cron job deleted","cron.failedToCreate":"Failed to create cron job","cron.failedToDelete":"Failed to delete cron job","cron.noCrons":"No cron jobs found.","cron.confirmDelete":'Delete cron job "{name}"?',"tenants.title":"Tenants","tenants.newTenant":"New Tenant","tenants.createTenant":"Create a new tenant for multi-tenant isolation.","tenants.tenantName":"Tenant name","tenants.slug":"Slug","tenants.domain":"Domain","tenants.owner":"Owner","tenants.tenantCreated":"Tenant created","tenants.tenantUpdated":"Tenant updated","tenants.tenantDeleted":"Tenant deleted","tenants.failedToCreate":"Failed to create tenant","tenants.failedToUpdate":"Failed to update tenant","tenants.failedToDelete":"Failed to delete tenant","tenants.confirmDelete":"Are you sure you want to delete this tenant?","tenants.noTenants":"No tenants found.","tenants.noTenantsDesc":"Create tenants for multi-tenant SaaS.","rbac.title":"Roles & Permissions","rbac.roles":"Roles","rbac.newRole":"New Role","rbac.createRole":"Create a new role for access control.","rbac.roleName":"Role name","rbac.roleDesc":"Role description","rbac.roleCreated":"Role created","rbac.roleUpdated":"Role updated","rbac.roleDeleted":"Role deleted","rbac.failedToCreate":"Failed to create role","rbac.failedToUpdate":"Failed to update role","rbac.failedToDelete":"Failed to delete role","rbac.confirmDelete":'Delete role "{name}"? This will remove all associated permissions.',"rbac.systemRole":"System","rbac.permissions":"Permissions","rbac.addPermission":"Add Permission","rbac.clearAllPermissions":"Clear All","rbac.clearAllPermissionsTitle":"Clear all permissions?","rbac.clearAllPermissionsDesc":'Remove all permissions from role "{name}"? This action cannot be undone.',"rbac.allPermissionsCleared":"All permissions cleared","rbac.permissionsRemoved":"Permissions removed","rbac.searchResource":"Search resource...","rbac.noSearchResults":"No matching permissions.","rbac.deleteSelected":"Delete selected","rbac.deleteSelectedTitle":"Delete selected permissions?","rbac.deleteSelectedDesc":"{count} resource group(s) will be removed. This action cannot be undone.","rbac.op.create":"Create","rbac.op.read":"Read","rbac.op.update":"Update","rbac.op.delete":"Delete","rbac.op.publish":"Publish","rbac.op.*":"All","rbac.subject":"Subject","rbac.resource":"Resource","rbac.operations":"Operations","rbac.noRoles":"No roles found.","builder.title":"Content Type Builder","builder.editContentType":"Edit Content Type","builder.createContentType":"Create Content Type","builder.baseConfig":"Base Configuration","builder.singularName":"Singular Name","builder.pluralName":"Plural Name","builder.tableName":"Table Name","builder.groupName":"Group","builder.groupPlaceholder":"e.g. forum (optional)","builder.groupHint":"Namespace for grouping. Leave empty for flat. API: /cms/{group}/{plural}","builder.fieldsSection":"Fields","builder.addField":"Add Field","builder.preview":"Preview","builder.save":"Save Content Type","builder.saving":"Saving...","builder.saved":"Content type saved","builder.failedToSave":"Failed to save content type","builder.confirmDeleteField":'Delete field "{name}"?',"builder.text":"Text","builder.richText":"Rich Text","builder.email":"Email","builder.password":"Password","builder.uid":"UID","builder.integer":"Integer","builder.bigInt":"Big Int","builder.decimal":"Decimal","builder.float":"Float","builder.boolean":"Boolean","builder.date":"Date","builder.datetime":"Datetime","builder.time":"Time","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relation","builder.mediaType":"Media","builder.link":"Link","builder.required":"Required","builder.unique":"Unique","builder.privateField":"Private","builder.immutable":"Immutable","builder.label":"Label","builder.defaultValue":"Default Value","builder.maxLength":"Max Length","builder.minValue":"Min","builder.maxValue":"Max","builder.enumValues":"Enum Values (comma-separated)","builder.relationType":"Relation Type","builder.relationTarget":"Target Table","builder.foreignKey":"Foreign Key","builder.throughTable":"Through Table","builder.draftPublish":"Draft/Publish","builder.timestamps":"Timestamps","builder.softDelete":"Soft Delete","builder.slugField":"Slug Field","media.name":"Name","media.type":"Type","media.other":"Other","media.uploadFailed":"Upload failed","media.dropFiles":"Drop files here, paste, or {browse}","media.dropHint":"Click to upload or drop files here","media.cover":"Cover","media.file":"File","media.maxReached":"Maximum {max} files reached","media.typeNotAllowed":"File type not allowed","media.downloadFailed":"Failed to download file","media.uploading":"Uploading {count} file(s)...","media.done":"Done","media.failedUpload":"Failed","media.urlCopied":"URL copied","media.copyUrl":"Copy URL","media.download":"Download","media.dimensions":"Dimensions","media.uploaded":"Uploaded","media.urlLabel":"URL","media.noVideoSupport":"Your browser does not support video.","media.downloadFile":"Download file","workflows.instances.title":"Workflow Instances","workflows.instances.showLogs":"Show logs","workflows.instances.hideLogs":"Hide logs","workflows.instances.currentStep":"Current","workflows.instances.context":"Context","workflows.instances.stepLogs":"Step Logs ({count})","workflows.instances.noStepLogs":"No step logs.","workflows.instances.noInstances":"No workflow instances found.","workflows.instances.instanceCount":"{count} instance(s)","workflows.instances.definitions":"Definitions","workflows.instances.filterStatus":"Filter status","workflows.instances.cancelled":"Instance cancelled","workflows.editor.editStep":"Edit Step","workflows.editor.name":"Name","workflows.editor.type":"Type","workflows.editor.backToList":"Back to list","workflows.editor.workflowName":"Workflow name...","workflows.editor.failedToLoad":"Failed to load workflow","workflows.editor.immutableNotice":"Workflow definitions are immutable. Create a new one to change steps.","workflows.editor.untitled":"Untitled Workflow","workflows.editor.save":"Save","workflows.editor.saving":"Saving...","cron.createSchedule":"Create Cron Schedule","cron.labelField":"Label","cron.jobType":"Job Type","cron.jobTypeHint":"Select a built-in task","cron.cronExpression":"Cron Expression (6 segments)","cron.format":"Format: sec min hour day month weekday","cron.payload":"Params","cron.schedule":"Schedule","cron.scheduleTitle":"Frequency","cron.pluginCol":"Plugin","cron.scheduleCreated":"Schedule created","cron.scheduleToggled":"Schedule toggled","cron.scheduleDeleted":"Schedule deleted","cron.scheduleUpdated":"Schedule updated","cron.seedHint":'Click "New Schedule" to create your first cron job',"cron.confirmDeleteSchedule":'Delete schedule "{name}"? This cannot be undone.',"cron.scheduleNotFound":"Schedule Not Found","cron.backToCronSchedules":"Back to Cron Schedules","cron.builtIn":"Built-in","cron.executionHistory":"Execution History","cron.cleanupOld":"Cleanup Old","cron.cleanedUp":"Cleaned up {count} old log(s)","cron.noExecutionLogs":"No execution logs yet.","cron.success":"Success","cron.failedStatus":"Failed","cron.running":"Running","cron.dispatched":"Dispatched","cron.dead":"Dead","cron.timedOut":"Timed Out","cron.newSchedule":"New Schedule","cron.idField":"ID","cron.started":"Started","cron.finished":"Finished","cron.duration":"Duration","cron.error":"Error","cron.created":"Created","cron.updated":"Updated","cron.executionType":"Execution Type","cron.builtinTab":"Built-in Task","cron.scriptTab":"Custom Script","cron.scriptLang":"Script Language","cron.scriptSource":"Script Code","cron.scriptHint":"Available APIs: host.log, host.getData, host.setData, host.dbQuery, host.dbExecute, host.httpGet, etc.","cron.systemTab":"System Command","cron.systemWarning":"System scripts run shell commands with full system access. Requires cron-system feature + CRON_ALLOW_SYSTEM_SCRIPTS=true.","cron.useShell":"Shell Wrapper","cron.timeoutSecs":"Timeout (seconds)","cron.systemCommand":"Shell Command","cron.systemHint":"Commands run in the working directory; the CRON_PAYLOAD env var contains the payload JSON","cron.presetHint":"Presets","cron.presetGroupMinute":"Minutes","cron.presetGroupHour":"Hours","cron.presetGroupDay":"Day/Week/Month","cron.presetEveryMinute":"Every minute","cron.presetEvery5Min":"Every 5 min","cron.presetEvery15Min":"Every 15 min","cron.presetEvery30Min":"Every 30 min","cron.presetHourly":"Hourly","cron.presetEvery6Hours":"Every 6 hours","cron.presetEvery12Hours":"Every 12 hours","cron.presetDailyMidnight":"Daily at 0:00","cron.presetDaily3am":"Daily at 3:00","cron.presetWeekly":"Mon at 3:00","cron.presetWeeklySun":"Sun at 3:00","cron.presetMonthly":"1st at 0:00","tenants.createForIsolation":"Create a new tenant for data isolation.","tenants.cannotDeleteDefault":"Cannot delete the default tenant","tenants.confirmDeleteMsg":"Delete this tenant? Data belonging to this tenant will NOT be removed.","tenants.created":"Created","rbac.addRoleDesc":"Add a new role to the system.","rbac.updateRoleDesc":'Update "{name}" role.',"rbac.deleteRoleTitle":"Delete Role","rbac.deleteRoleConfirm":'Are you sure you want to delete "{name}"? This action cannot be undone.',"rbac.addPermissionTitle":"Add Permission","rbac.addPermissionDesc":'Grant a new permission to "{name}". Use * for wildcard.',"rbac.fieldsCol":"Fields","rbac.conditionsCol":"Conditions","rbac.fieldsOptional":"Fields (comma-separated, optional)","rbac.removePermissionTitle":"Remove Permission","rbac.removePermissionDesc":"Remove {action} on {subject}?","rbac.noPermissions":"No permissions configured.","rbac.selectRole":"Select a role to view permissions","rbac.prev":"Prev","scopeMatrix.fullAccess":"Full Access","scopeMatrix.action":"Action","scopeMatrix.allResources":"All Resources","scopeMatrix.search":"Search...","scopeMatrix.selectAll":"Select all","scopeMatrix.clearAll":"Clear all","scopeMatrix.empty":"Select resources from the left to configure scopes","scopeMatrix.resource":"Resource","scopeMatrix.selected":"{count} selected","scopeMatrix.fieldsOptional":"Fields (comma-separated, optional)","scopeMatrix.conditionsOptional":"Conditions (key=value per line, optional)","options.noChanges":"No changes","options.noOptions":"No options available.","options.reset":"Reset","options.saveChanges":"Save Changes","audit.failedToLoad":"Failed to load audit log. Please try again.","audit.noEntries":"No audit entries found.","audit.noEntriesDesc":"Audit entries will appear as actions are performed.","audit.timeCol":"Time","audit.subjectId":"Subject ID","audit.detailCol":"Detail","audit.system":"system","audit.from":"From","audit.to":"To","audit.search":"Search","audit.clear":"Clear","audit.today":"Today","audit.dateRange":"Date Range","audit.custom":"Custom range","audit.export":"Export","audit.viewEntry":"Audit Entry","audit.ipAddress":"IP Address","audit.userAgent":"User Agent","builder.untitled":"Untitled Content Type","builder.fieldCount":"{count} field(s)","builder.fieldList":"Fields","builder.protocols":"Protocols","builder.systemFields":"System Fields","builder.system":"system","builder.newField":"New field","builder.addAnotherField":"Add another field","builder.addAField":"Add a field","builder.chooseFieldType":"Choose a field type to add to your content type.","builder.fieldConfiguration":"Field Configuration","builder.fieldName":"Field Name","builder.fieldTypeLabel":"Field Type","builder.displayLabel":"Display label","builder.helpText":"Help text","builder.removeField":"Remove Field","builder.removeFieldConfirm":"Remove this field?","builder.noAdditionalOptions":"No additional options for this field type.","builder.acceptedTypes":"Accepted Types","builder.acceptAll":"All file types","builder.searchTypes":"Search types...","builder.noMatch":"No matching types","builder.viewData":"View Data","builder.viewToml":"View TOML","builder.tomlDescription":"Generated TOML source of this content type.","builder.tomlCopied":"TOML copied to clipboard","builder.copy":"Copy","common.copied":"Copied","builder.viewApi":"API","builder.apiDescription":"Configure API access control for each endpoint. Saved together with the content type.","builder.apiList":"List","builder.apiEndpoint":"Endpoint","builder.apiGet":"Get","builder.apiCreate":"Create","builder.apiUpdate":"Update","builder.apiDelete":"Delete","builder.apiAccess":"Access","builder.apiAccessShort":"access","builder.apiCache":"Cache","builder.apiCacheEnable":"Enable server-side caching","builder.apiCacheShort":"cache","builder.apiFilter":"Filter expression","builder.apiFilterShort":"filter","builder.apiFilterAuth":"Auth filter","builder.apiFilterAuthShort":"auth filter","builder.apiFields":"Return fields (comma-separated)","builder.apiFieldsShort":"fields","builder.apiCopied":"URL copied to clipboard","builder.saveApi":"Save API","builder.apiSaved":"API settings saved","builder.apiSaveNeedsCreate":"Save the content type first — API settings are included in creation","builder.apiAccessHelpNone":"Endpoint disabled, no access","builder.apiAccessHelpPublic":"Public, no auth required","builder.apiAccessHelpAuthed":"Any authenticated user","builder.apiAccessHelpOwner":"The record creator only","builder.apiAccessHelpAdmin":"Admins only","builder.icon":"Icon","builder.color":"Color","builder.invalidFieldName":'Field "{field}" must start with a letter and contain only letters, digits, or underscores',"builder.requiredField":"Please fill in required field: {field}","builder.enumValuesRequired":'Enum field "{field}" requires at least one value',"builder.relationTargetRequired":'Relation field "{field}" requires a target content type',"builder.maxCount":"Max Count","builder.target":"Target","builder.valuesComma":"Values (comma-separated)","builder.describeContentType":"Describe this content type...","builder.contentTypeUpdated":"Content type updated","builder.contentTypeCreated":"Content type created","builder.newFieldCategory":"Number","layout.crm":"CRM","layout.pages":"Pages","layout.reusableBlocks":"Blocks","crm.dashboard":"CRM Dashboard","crm.pipeline":"Pipeline","crm.contacts":"Contacts","crm.companies":"Companies","crm.deals":"Deals","crm.activities":"Activities","crm.notes":"Notes","crm.reports":"Reports","crm.totalCompanies":"Total Companies","crm.totalContacts":"Total Contacts","crm.openDeals":"Open Deals","crm.wonDeals":"Won Deals","crm.pipelineValue":"Pipeline Value","crm.weightedValue":"Weighted Value","crm.winRate":"Win Rate","crm.avgDealSize":"Avg Deal Size","crm.recentActivities":"This Week Activities","crm.totalActivities":"Total Activities","crm.leaderboard":"Leaderboard","crm.noData":"No data available.","crm.newDeal":"New Deal","crm.createDeal":"Create Deal","crm.dealTitle":"Title","crm.dealTitlePlaceholder":"Enter deal title...","crm.amount":"Amount","crm.probability":"Probability","crm.stage":"Stage","crm.advanceStage":"Advance to next stage","crm.totalValue":"Total Value","crm.dealCreated":"Deal created","crm.failedToCreateDeal":"Failed to create deal","crm.dealStageUpdated":"Deal stage updated","crm.failedToUpdateStage":"Failed to update stage","crm.titleRequired":"Title is required","crm.newContact":"New Contact","crm.editContact":"Edit Contact","crm.contact":"Contact","crm.name":"Name","crm.email":"Email","crm.phone":"Phone","crm.company":"Company","crm.source":"Source","crm.lifecycleStage":"Lifecycle Stage","crm.noContacts":"No contacts found.","crm.firstName":"First Name","crm.lastName":"Last Name","crm.jobTitle":"Job Title","crm.newCompany":"New Company","crm.editCompany":"Edit Company","crm.companyName":"Company Name","crm.industry":"Industry","crm.size":"Size","crm.website":"Website","crm.city":"City","crm.country":"Country","crm.noCompanies":"No companies found.","crm.deal":"Deal","crm.editDeal":"Edit Deal","crm.closeDate":"Close Date","crm.lossReason":"Loss Reason","crm.noDeals":"No deals found.","crm.dealInfo":"Deal Info","crm.newActivity":"New Activity","crm.editActivity":"Edit Activity","crm.activity":"Activity","crm.type":"Type","crm.subject":"Subject","crm.content":"Content","crm.date":"Date","crm.duration":"Duration","crm.outcome":"Outcome","crm.noActivities":"No activities found.","crm.newNote":"New Note","crm.editNote":"Edit Note","crm.note":"Note","crm.relatedTo":"Related To","crm.pinned":"Pinned","crm.createdAt":"Created","crm.noNotes":"No notes found.","crm.contentRequired":"Content is required","crm.relatedContactId":"Related Contact ID","crm.relatedCompanyId":"Related Company ID","crm.relatedDealId":"Related Deal ID","crm.contactInfo":"Contact Info","crm.timeline":"Timeline","crm.noTimeline":"No timeline events.","crm.addNote":"Add Note","crm.notePlaceholder":"Type a note...","crm.lifecycleUpdated":"Lifecycle stage updated","crm.failedToUpdateLifecycle":"Failed to update lifecycle stage","crm.companyInfo":"Company Info","crm.funnelReport":"Funnel Report","crm.activityReport":"Activity Report","crm.conversionRate":"Conversion","crm.byType":"By Type","crm.byOutcome":"By Outcome","pages.title":"Pages","pages.newPage":"New Page","pages.editPage":"Edit Page","pages.pageDeleted":"Page deleted","pages.pageCreated":"Page created","pages.pageUpdated":"Page updated","pages.failedToDelete":"Failed to delete page","pages.failedToCreate":"Failed to create page","pages.failedToUpdate":"Failed to update page","pages.statusUpdated":"Page status updated","pages.failedToUpdateStatus":"Failed to update status","pages.confirmDelete":"Are you sure you want to delete this page?","pages.noPages":"No pages found.","pages.noPagesDesc":"Create your first page to start building your site.","pages.noBlocks":"No reusable blocks yet.","pages.noBlocksDesc":"Create reusable blocks to use across your pages.","pages.publish":"Publish","pages.unpublish":"Unpublish","pages.preview":"Preview","pages.slug":"Slug","pages.template":"Template","pages.createdAt":"Created","pages.basicInfo":"Basic Info","pages.titleLabel":"Title","pages.titlePlaceholder":"Enter page title...","pages.coverImage":"Cover Image","pages.metaTitle":"Meta Title","pages.metaDescription":"Meta Description","pages.ogImage":"OG Image","pages.content":"Content","pages.blockMode":"Blocks","pages.saveDraft":"Save Draft","pages.writeContent":"Write your page content...","pages.addBlock":"Add Block","pages.chooseBlock":"Choose a block type","pages.reusableBlocks":"Reusable Blocks","pages.createReusable":"Create Reusable Block","pages.editReusable":"Edit Reusable Block","pages.rbName":"Name","pages.rbType":"Block Type","pages.rbDescription":"Description","pages.rbContent":"Content","command.search":"Search...","command.placeholder":"Type a command or search...","command.noResults":"No results found.","command.actions":"Actions","command.switchToLight":"Switch to Light Mode","command.switchToDark":"Switch to Dark Mode","layout.ecommerce":"E-Commerce","layout.products":"Products","layout.productCategories":"Product Categories","layout.orders":"Orders","layout.finance":"Finance","layout.currencies":"Currencies","layout.wallets":"Wallets","layout.paymentChannels":"Payment Channels","layout.productComments":"Reviews","layout.coupons":"Coupons","layout.shippingTemplates":"Shipping","layout.plans":"Plans","products.title":"Products","products.newProduct":"New Product","products.editProduct":"Edit Product","products.productTitle":"Product Title","products.price":"Price","products.originalPrice":"Original Price","products.stock":"Stock","products.sales":"Sales","products.coverUrl":"Cover URL","products.description":"Description","products.content":"Content","products.slug":"Slug","products.status":"Status","products.category":"Category","products.unit":"Unit","products.minPurchase":"Min Purchase","products.maxPurchase":"Max Purchase","products.sortOrder":"Sort Order","products.metaTitle":"Meta Title","products.metaDescription":"Meta Description","products.productCreated":"Product created","products.productUpdated":"Product updated","products.productDeleted":"Product deleted","products.batchDeleted":"{{count}} products deleted","products.batchSuccess":"{{count}} products updated","products.batchActivate":"Activate","products.batchDeactivate":"Deactivate","products.failedToCreate":"Failed to create product","products.failedToUpdate":"Failed to update product","products.failedToDelete":"Failed to delete product","products.confirmDelete":"Are you sure you want to delete this product?","products.confirmBatchDelete":"Are you sure you want to delete {{count}} products?","products.noProducts":"No products yet","products.noProductsDesc":"Create your first product to start selling.","products.allStatus":"All Status","products.searchPlaceholder":"Search product title...","products.active":"Active","products.draft":"Draft","products.archived":"Archived","products.general":"General","products.media":"Media","products.pricing":"Pricing","products.purchaseSettings":"Purchase Settings","products.summary":"Summary","products.phTitle":"Enter product title...","products.phSummary":"Brief description of the product...","products.images":"Images","products.cover":"Cover","products.dropImages":"Drop images here, paste, or click to upload","productCategories.categoryName":"Category Name","productCategories.newCategory":"New Category","productCategories.createCategory":"Create Category","productCategories.editCategory":"Edit Category","productCategories.optionalDesc":"Description (optional)","productCategories.parent":"Parent Category","productCategories.noParent":"No Parent","productCategories.sortOrder":"Sort Order","productCategories.slug":"Slug","productCategories.noCategories":"No Categories Yet","productCategories.noCategoriesDesc":"Create your first product category to organize your products.","productCategories.categoryCreated":"Category created","productCategories.categoryUpdated":"Category updated","productCategories.categoryDeleted":"Category deleted","productCategories.failedToCreate":"Failed to create category","productCategories.failedToUpdate":"Failed to update category","productCategories.failedToDelete":"Failed to delete category","productCategories.confirmDelete":"Are you sure you want to delete this category?","productCategories.confirmDeleteTitle":"Delete Category","productCategories.cannotDeleteHasChildren":"Cannot delete this category because it has {count} sub-categories. Please move or delete them first.","productCategories.treeTitle":"Categories","productCategories.selectCategory":"Select a category to view details","productCategories.addChild":"Add Sub","orders.title":"Orders","orders.orderNo":"Order No","orders.buyer":"Buyer","orders.total":"Total","orders.status":"Status","orders.items":"Items","orders.remark":"Remark","orders.adminRemark":"Admin Remark","orders.createdAt":"Created","orders.actions":"Actions","orders.allStatus":"All Status","orders.searchPlaceholder":"Search order number, buyer name...","orders.pending":"Pending","orders.paid":"Paid","orders.shipped":"Shipped","orders.completed":"Completed","orders.cancelled":"Cancelled","orders.refunded":"Refunded","orders.confirmPay":"Confirm payment?","orders.orderPaid":"Order marked as paid","orders.confirmShip":"Ship this order?","orders.orderShipped":"Order shipped","orders.confirmCancel":"Cancel this order?","orders.orderCancelled":"Order cancelled","orders.confirmRefund":"Refund this order?","orders.orderRefunded":"Order refunded","orders.failedToPay":"Failed to mark as paid","orders.failedToShip":"Failed to ship","orders.failedToCancel":"Failed to cancel","orders.failedToRefund":"Failed to refund","orders.noOrders":"No orders yet","orders.noOrdersDesc":"Orders will appear here when customers make purchases.","orders.trackingNo":"Tracking No","orders.carrier":"Carrier","orders.shipInfo":"Shipping Info","orders.buyerInfo":"Buyer Info","orders.shippingAddress":"Shipping Address","orders.orderDetail":"Order Detail","orders.stats.totalOrders":"Total Orders","orders.stats.totalRevenue":"Total Revenue","orders.stats.pending":"Pending","orders.stats.completed":"Completed","orders.stats.todayOrders":"Today Orders","orders.stats.todayRevenue":"Today Revenue","payments.title":"Payment Channels","payments.newChannel":"New Channel","payments.provider":"Provider","payments.name":"Channel Name","payments.mode":"Mode","payments.active":"Active","payments.live":"Live","payments.test":"Test","payments.credentials":"Credentials","payments.webhookSecret":"Webhook Secret","payments.settings":"Settings","payments.channelCreated":"Payment channel created","payments.channelUpdated":"Payment channel updated","payments.channelDeleted":"Payment channel deleted","payments.failedToCreate":"Failed to create payment channel","payments.failedToUpdate":"Failed to update payment channel","payments.failedToDelete":"Failed to delete payment channel","payments.confirmDelete":"Delete this payment channel?","payments.noChannels":"No payment channels","payments.noChannelsDesc":"Add a payment channel to start accepting payments.","payments.selectProvider":"Select a provider...","payments.testMode":"Test Mode (Sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"Merchant ID","payments.fPrivateKey":"Private Key (RSA)","payments.fSerialNo":"Certificate Serial No.","payments.fWebhookSecret":"Webhook Signing Secret","payments.fAlipayPublicKey":"Alipay Public Key","payments.fPlatformCert":"Platform Certificate (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"Notify URL","payments.phSk":"sk_live_... or sk_test_...","payments.phRsaKey":"Paste RSA private key (PEM or Base64)","payments.phUrl":"https://...","payments.editChannel":"Edit Channel","payments.leaveBlankToKeep":"Leave blank to keep current","layout.paymentOrders":"Payment Orders","paymentOrders.title":"Payment Orders","paymentOrders.orderId":"Order","paymentOrders.title_col":"Title","paymentOrders.amount":"Amount","paymentOrders.provider":"Provider","paymentOrders.noOrders":"No payment orders","paymentOrders.noOrdersDesc":"Payment orders will appear here when customers make payments.","paymentOrders.refund":"Refund","paymentOrders.refundTitle":"Refund Payment Order","paymentOrders.refundOrder":"Refund order","paymentOrders.refundAmount":"Refund Amount","paymentOrders.refundReason":"Reason","paymentOrders.refundSuccess":"Refund submitted","paymentOrders.refundFailed":"Failed to refund","layout.paymentTransactions":"Payment Transactions","paymentTransactions.title":"Payment Transactions","paymentTransactions.orderId":"Order","paymentTransactions.type":"Type","paymentTransactions.amount":"Amount","paymentTransactions.providerTxId":"Provider TX ID","paymentTransactions.noTransactions":"No transactions","paymentTransactions.noTransactionsDesc":"Transactions will appear here when payment events occur.","currencies.title":"Currencies","currencies.newCurrency":"New Currency","currencies.code":"Code","currencies.name":"Name","currencies.decimals":"Decimals","currencies.active":"Active","currencies.currencyCreated":"Currency created","currencies.currencyUpdated":"Currency updated","currencies.failedToCreate":"Failed to create currency","currencies.failedToUpdate":"Failed to update currency","currencies.noCurrencies":"No currencies","currencies.noCurrenciesDesc":"Add a currency to enable multi-currency support.","wallets.title":"Wallets","wallets.user":"User","wallets.currency":"Currency","wallets.balance":"Balance","wallets.frozen":"Frozen","wallets.credit":"Credit","wallets.debit":"Debit","wallets.transactions":"Transactions","wallets.amount":"Amount","wallets.type":"Type","wallets.reference":"Reference","wallets.creditTitle":"Credit Wallet","wallets.debitTitle":"Debit Wallet","wallets.userId":"User ID","wallets.remark":"Remark","wallets.creditSuccess":"Wallet credited","wallets.debitSuccess":"Wallet debited","wallets.failedToCredit":"Failed to credit wallet","wallets.failedToDebit":"Failed to debit wallet","wallets.noWallets":"No wallets","wallets.noWalletsDesc":"Wallets are created when users receive their first transaction.","wallets.noTransactions":"No transactions yet.","adminLogin.title":"Admin Panel","adminLogin.subtitle":"Sign in with your admin credentials","adminLogin.email":"Email","adminLogin.password":"Password","adminLogin.submit":"Sign In","adminLogin.loading":"Signing in…","adminLogin.error":"Invalid email or password","adminLogin.footer":"RaisFast Admin — authorized personnel only","adminLogin.sessionExpired":"Your session has expired. Please sign in again.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.mustContainUppercase":"Password must contain at least one uppercase letter","setup.admin.mustContainLowercase":"Password must contain at least one lowercase letter","setup.admin.mustContainDigit":"Password must contain at least one digit","setup.admin.passwordsNotMatch":"Passwords do not match","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update review status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Are you sure you want to delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Product reviews will appear here when customers leave feedback.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Are you sure you want to delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons to offer discounts to your customers.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create shipping template","shippingTemplates.failedToUpdate":"Failed to update shipping template","shippingTemplates.failedToDelete":"Failed to delete shipping template","shippingTemplates.confirmDelete":"Are you sure you want to delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates to calculate delivery costs.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Are you sure you want to delete this variant?","productVariants.noVariants":"No variants yet. Add variants for different options.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","plans.title":"Plans","plans.name":"Name","plans.slug":"Slug","plans.dbType":"Database Type","plans.price":"Price","plans.maxStorage":"Max Storage","plans.maxUsers":"Max Users","plans.sortOrder":"Sort","plans.active":"Active","plans.createPlan":"Create Plan","plans.editPlan":"Edit Plan","plans.deletePlan":"Delete Plan","plans.planCreated":"Plan created","plans.planUpdated":"Plan updated","plans.planDeleted":"Plan deleted","plans.failedToCreate":"Failed to create plan","plans.failedToUpdate":"Failed to update plan","plans.failedToDelete":"Failed to delete plan","plans.confirmDelete":'Delete plan "{slug}"?',"plans.confirmPassword":"Confirm Password","plans.confirmPasswordPlaceholder":"Enter your password to confirm","plans.starter":"Starter","plans.pro":"Pro","plans.business":"Business","plans.monthly":"/mo","plans.sqlite":"SQLite","plans.postgresShared":"PG Shared","plans.postgresDedicated":"PG Dedicated","plans.noPlans":"No plans configured","layout.integration":"Integration","layout.channels":"Channels","layout.receipts":"Receipts","layout.apiClients":"API Clients","common.reset":"Reset","common.close":"Close","integration.newChannel":"New Channel","integration.editChannel":"Edit Channel","integration.channelKey":"Channel Key","integration.displayName":"Display Name","integration.provider":"Provider","integration.mode":"Mode","integration.transport":"Transport","integration.framing":"Framing","integration.endpoint":"Endpoint","integration.verifyKind":"Verification","integration.verifyConfig":"Verify Config (JSON)","integration.credentials":"Credentials (JSON)","integration.credentialsKeepHint":"Leave blank to keep the sealed credentials","integration.mapping":"Mapping (JSONPath)","integration.pullConfig":"Pull Config (JSON)","integration.streamConfig":"Stream Config (JSON)","integration.targetType":"Target Content Type","integration.routeExtra":"Route Extra (JSON)","integration.redeliveryMax":"Max Redeliveries","integration.stack":"Stack","integration.noChannels":"No integration channels","integration.noChannelsDesc":"Add a channel to start receiving inbound webhooks, streams and polls.","integration.ownerApp":"Owner app","integration.ownerAppAll":"All apps","integration.ownerAppNone":"Platform (no app)","integration.ownerAppHint":"Blank = platform-owned. Set an installed app id to make this an app-owned channel.","integration.channelCreated":"Channel created","integration.channelUpdated":"Channel updated","integration.channelDeleted":"Channel deleted","integration.failedToCreate":"Failed to create","integration.failedToUpdate":"Failed to update","integration.failedToDelete":"Failed to delete","integration.failedToTest":"Test failed","integration.confirmDeleteChannel":'Delete channel "{key}"? Its receipts stay for audit.',"integration.testMapping":"Test Mapping","integration.sampleBody":"Sample request body","integration.preview":"Normalized envelope preview","integration.runTest":"Run","integration.hasCredentials":"Credentials sealed in vault","integration.allChannels":"All channels","integration.allStatuses":"All statuses","integration.traceIdFilter":"Filter by trace ID…","integration.noReceipts":"No receipts","integration.noReceiptsDesc":"Inbound deliveries will appear here with their full trace.","integration.receivedAt":"Received","integration.attempts":"Attempts","integration.nextRetryAt":"Next retry","integration.noSteps":"No steps recorded","integration.pending":"pending","integration.receiptInfo":"Receipt","integration.trace":"Trace","integration.complete":"complete","integration.firstPass":"First pass","integration.asyncChain":"Async chain","integration.envelopeSnapshot":"Envelope snapshot","integration.fullSteps":"Full step timeline","integration.egressCalls":"Egress calls","integration.noEgress":"No egress calls","integration.noEgressDesc":"Outbound calls triggered by this receipt will appear here.","integration.replayed":"Replayed","integration.dryRunDone":"Dry-run complete — see the report in the trace","integration.failedToReplay":"Replay failed","integration.replay":"Replay","integration.dryRunReplay":"Dry-run Replay","integration.replayConfirmTitle":"Replay this receipt?","integration.replayConfirmDesc":"The route stage re-runs from the stored envelope snapshot (upsert by external_id).","integration.receiptNotFound":"Receipt not found","integration.newClient":"New API Client","integration.editClient":"Edit API Client","integration.clientKey":"Client Key","integration.baseUrl":"Base URL","integration.authConfig":"Auth Config (JSON)","integration.rateLimit":"Rate Limit (JSON)","integration.ops":"Ops (JSON)","integration.opsCount":"Ops","integration.noClients":"No API clients","integration.noClientsDesc":"Add a declarative API client to call third-party APIs outbound.","integration.clientCreated":"API client created","integration.clientUpdated":"API client updated","integration.clientDeleted":"API client deleted","integration.confirmDeleteClient":'Delete API client "{key}"?',"integration.testCall":"Test Call","integration.selectOp":"Select an op","integration.input":"Input (JSON)","integration.result":"Result","integration.allClients":"All clients","integration.egressLog":"Egress Log","integration.latency":"Latency","integration.createdAt":"Created","integration.basicInfo":"Basic","integration.trustSection":"Trust (L0)","integration.normalizeSection":"Normalization (L2)","integration.routingSection":"Routing & Reliability (L3/L4)","integration.presetTitle":"Start from a preset","integration.presetPlaceholder":"Pick a battle-tested configuration…","integration.presetHint":"Fills the whole form — adapt keys, secrets and target content type afterwards. Examples come from real integrations (GitHub / Feishu / DingTalk).","integration.presetApplied":"Preset applied — review and adapt","integration.jsonInvalid":"Invalid JSON","integration.insertExample":"Insert example","integration.presetGeneric":"Generic webhook (no verification)","integration.presetGenericDesc":"Plain push endpoint, JSONPath mapping","integration.presetHmac":"HMAC webhook","integration.presetHmacDesc":"push + hmac-sha256 signature check","integration.presetGithub":"GitHub webhook","integration.presetGithubDesc":"x-hub-signature-256, delivery GUID idempotency","integration.presetShopify":"Shopify webhook","integration.presetShopifyDesc":"base64 HMAC, webhook-id idempotency","integration.presetDingtalk":"DingTalk Stream bot","integration.presetDingtalkDesc":"ws stream + dispatch framing + pre_connect","integration.presetFeishu":"Feishu bot (long connection)","integration.presetFeishuDesc":"ws stream + pb-frame + oauth handshake","integration.presetPull":"HTTP poll (cursor)","integration.presetPullDesc":"pull + since_id pagination + checkpoint","integration.presetImap":"IMAP mailbox (native)","integration.presetImapDesc":"pull + imap + mime, mark-read semantics, IDLE-ready"},jC={"layout.brand":"RaisFast","layout.adminPanel":"管理后台","layout.dashboard":"控制台","layout.content":"内容","layout.extension":"扩展","layout.system":"系统","layout.posts":"文章","layout.categories":"分类","layout.tags":"标签","layout.comments":"评论","layout.media":"媒体","layout.contentTypes":"内容类型","layout.users":"用户","layout.plugins":"插件","layout.rolesPermissions":"角色与权限","layout.cron":"定时任务","layout.tenants":"租户","layout.webhooks":"Webhooks","layout.apiTokens":"API 令牌","layout.workflows":"工作流","layout.auditLog":"审计日志","layout.options":"选项","layout.tenant":"租户","layout.clearTenant":"清除租户筛选","layout.all":"全部","layout.accessDenied":"拒绝访问","layout.accessDeniedMsg":"您需要以作者或管理员身份登录才能访问此区域。","layout.goToLogin":"前往登录","layout.toggleTheme":"切换主题","templates.title":"模板","templates.all":"全部","templates.search":"搜索模板...","templates.empty":"未找到模板","layout.signOut":"退出登录","layout.profile":"个人资料","common.loading":"加载中...","common.save":"保存","common.cancel":"取消","common.ok":"确定","common.create":"创建","common.creating":"创建中...","common.saving":"保存中...","common.delete":"删除","common.confirmDeleteTitle":"确认删除","common.edit":"编辑","common.content":"内容","common.remove":"移除","common.download":"下载","common.view":"查看","common.back":"返回","common.clear":"清除","common.actions":"操作","common.status":"状态","common.retry":"重试","common.previous":"上一页","common.next":"下一页","common.pageOf":"第 {page} 页,共 {total} 页","common.totalRecords":"共 {count} 条","common.noData":"暂无数据","common.all":"全部","common.draft":"草稿","common.published":"已发布","common.archived":"已归档","common.enabled":"已启用","common.disabled":"已禁用","common.name":"名称","common.description":"描述","common.enabledCount":"{count} 已启用","common.disabledCount":"{count} 已禁用","common.adminOnly":"仅管理员","common.adminOnlyMsg":"只有管理员才能管理此区域。","common.backToDashboard":"返回控制台","common.confirmDelete":"确定要删除此项吗?","common.notFound":"未找到","common.failedToLoad":"加载失败","common.selectStatus":"选择状态","common.titleRequired":"标题不能为空","common.contentRequired":"内容不能为空","common.nameRequired":"名称不能为空","common.invalidJson":"无效的 JSON","common.isRequired":"{field} 不能为空","common.created":"{name} 已创建","common.updated":"{name} 已更新","common.deleted":"{name} 已删除","common.failedToCreate":"创建 {name} 失败","common.failedToUpdate":"更新 {name} 失败","common.failedToDelete":"删除 {name} 失败","common.none":"无","common.noDependencies":"无依赖","dashboard.title":"控制台","dashboard.posts":"文章","dashboard.comments":"评论","dashboard.categories":"分类","dashboard.tags":"标签","dashboard.media":"媒体","dashboard.users":"用户","dashboard.contentTypes":"内容类型","dashboard.postsLast14Days":"文章(近 14 天)","dashboard.ordersAndProducts14Days":"订单与商品(近14天)","dashboard.viewAll":"查看全部","dashboard.failedToLoad":"加载控制台统计失败,数据可能已过期。","dashboard.noDataYet":"暂无数据。","dashboard.recentActivity":"最近活动","dashboard.noActivity":"暂无活动。","dashboard.type":"类型","dashboard.detail":"详情","dashboard.time":"时间","dashboard.post":"文章","dashboard.comment":"评论","dashboard.product":"产品","dashboard.order":"订单","dashboard.products":"商品","dashboard.orders":"订单","dashboard.revenue":"营收","dashboard.coupons":"优惠券","dashboard.orderStatus":"订单状态","dashboard.justNow":"刚刚","dashboard.minutesAgo":"分钟前","dashboard.hoursAgo":"小时前","dashboard.daysAgo":"天前","posts.title":"文章","posts.newPost":"新建文章","posts.editPost":"编辑文章","posts.postTitle":"文章标题","posts.titleCol":"标题","posts.categoryCol":"分类","posts.authorCol":"作者","posts.createdCol":"创建时间","posts.allStatus":"全部状态","posts.searchPlaceholder":"搜索文章...","posts.content":"内容","posts.excerpt":"摘要","posts.briefSummary":"简短摘要(可选)","posts.coverImage":"封面图片","posts.writeContent":"用 Markdown 编写文章内容...","posts.selectCategory":"选择分类","posts.tags":"标签","posts.slug":"Slug","posts.slugPlaceholder":"留空则从标题自动生成","posts.noTags":"暂无可用标签","posts.addTag":"添加标签...","posts.createTag":"创建","posts.createPost":"创建文章","posts.saveChanges":"保存修改","posts.postCreated":"文章已创建","posts.postUpdated":"文章已更新","posts.postDeleted":"文章已删除","posts.failedToCreate":"创建文章失败","posts.failedToUpdate":"更新文章失败","posts.failedToDelete":"删除文章失败","posts.confirmDelete":"确定要删除这篇文章吗?","posts.confirmBatchDelete":"确定要删除 {count} 篇文章吗?","posts.batchPublish":"发布","posts.batchUnpublish":"取消发布","posts.batchSuccess":"{count} 篇文章已更新","posts.noPosts":"未找到文章。","posts.noPostsDesc":"创建您的第一篇博文来分享想法。","posts.failedToLoad":"加载文章失败。","categories.title":"分类","categories.newCategory":"新建分类","categories.createCategory":"创建一个新分类来组织文章。","categories.categoryName":"分类名称","categories.optionalDesc":"可选描述","categories.sortOrder":"排序","categories.slug":"别名","categories.categoryCreated":"分类已创建","categories.categoryUpdated":"分类已更新","categories.categoryDeleted":"分类已删除","categories.failedToCreate":"创建分类失败","categories.failedToUpdate":"更新分类失败","categories.failedToDelete":"删除分类失败","categories.confirmDelete":"确定要删除这个分类吗?","categories.confirmDeleteTitle":"删除分类","categories.noCategories":"暂无分类","categories.noCategoriesDesc":"使用分类来组织您的文章。","categories.treeTitle":"分类","categories.selectCategory":"选择一个分类查看详情","categories.addChild":"添加子分类","categories.parent":"父分类","categories.noParent":"无父分类","categories.editCategory":"编辑分类","categories.cannotDeleteHasChildren":"该分类下有 {count} 个子分类,无法删除。请先移动或删除子分类。","categories.coverImage":"封面图","tags.title":"标签","tags.newTag":"新建标签","tags.createTag":"创建一个新标签。","tags.tagName":"标签名称","tags.tagCreated":"标签已创建","tags.tagUpdated":"标签已更新","tags.tagDeleted":"标签已删除","tags.failedToCreate":"创建标签失败","tags.failedToUpdate":"更新标签失败","tags.failedToDelete":"删除标签失败","tags.confirmDelete":"确定要删除这个标签吗?","tags.noTags":"未找到标签。","tags.noTagsDesc":"添加标签来帮助组织和筛选内容。","comments.title":"评论","comments.total":"共 {count} 条","comments.all":"全部","comments.pending":"待审核","comments.approved":"已批准","comments.rejected":"已拒绝","comments.spam":"垃圾评论","comments.approve":"批准","comments.reject":"拒绝","comments.author":"作者","comments.contentCol":"内容","comments.post":"文章","comments.date":"日期","comments.selected":"已选 {count} 项","comments.commentStatusUpdated":"评论状态已更新","comments.commentDeleted":"评论已删除","comments.bulkActionDone":"{count} 条评论已{status}","comments.bulkDeleted":"{count} 条评论已删除","comments.bulkActionFailed":"批量操作失败","comments.bulkDeleteFailed":"批量删除失败","comments.failedToUpdateStatus":"更新状态失败","comments.failedToDelete":"删除评论失败","comments.confirmDelete":"确定要删除这条评论吗?","comments.confirmBulkDelete":"确定删除选中的 {count} 条评论?","comments.noComments":"未找到评论。","comments.noCommentsDesc":"读者开始互动后,评论将显示在这里。","contentTypes.title":"内容类型","contentTypes.noFields":"此内容类型没有可编辑的字段。","contentTypes.createContentType":"创建内容类型","contentTypes.builder":"构建器","contentTypes.ungrouped":"未分组","contentTypes.noContentTypes":"暂无内容类型","contentTypes.noContentTypesDesc":"创建您的第一个内容类型来开始构建 CMS。","contentTypes.contentTypeDeleted":"内容类型已删除","contentTypes.failedToDelete":"删除失败","contentTypes.confirmDelete":"删除内容类型“{singular}”?这将移除模式文件但不会删除数据库表。","contentTypes.notFound":"内容类型未找到","contentTypes.notFoundMsg":"内容类型“{singular}”未找到。","contentTypes.itemDeleted":"项目已删除","contentTypes.failedToDeleteItem":"删除项目失败","contentTypes.confirmDeleteItem":"确定要删除此项吗?","contentTypes.batchDeleteSuccess":"已删除 {count} 条记录","contentTypes.confirmBatchDelete":"确定要删除 {count} 条记录吗?","contentTypes.export":"导出","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"已导出 {count} 条记录","contentTypes.import":"导入","contentTypes.importJson":"导入 JSON","contentTypes.importCsv":"导入 CSV","contentTypes.importExcel":"导入 Excel","contentTypes.importSuccess":"成功导入 {count} 条记录","contentTypes.importPartial":"成功 {ok} 条,失败 {failed} 条","contentTypes.importEmpty":"文件中没有可导入的记录","contentTypes.importTooMany":"记录数超过上限(最多 {max} 条)","contentTypes.importFailed":"导入失败","contentTypes.importTooLarge":"文件超过 8MB 大小限制","contentTypes.noItems":"未找到项目。","contentTypes.noItemsDesc":"创建您的第一个项目来填充此集合。","contentTypes.newItem":"新建 {name}","contentTypes.editStructure":"编辑表结构","contentTypes.addRecord":"添加","contentTypes.browseRecords":"浏览","contentTypes.editItem":"编辑 {name}","contentTypes.itemNotFound":"项目未找到。","contentTypes.fields":"{count} 个字段","contentTypes.fieldsLabel":"个字段","contentTypes.totalRecords":"{count} 条记录","contentTypes.createdAt":"创建时间","contentTypes.updatedAt":"更新时间","contentTypes.searchPlaceholder":"搜索记录...","contentTypes.searchTypes":"搜索名称、singular、plural、表名...","contentTypes.noSearchResults":"没有匹配的内容类型","contentTypes.noSearchResultsDesc":'没有与 "{keyword}" 匹配的内容类型。',"contentTypes.exportData":"导出","contentTypes.api":"API","contentTypes.apiSaved":"API 设置已保存","contentTypes.apiSaveFailed":"保存 API 设置失败","contentTypes.exportDataSuccess":"导出完成","contentTypes.exportDataFailed":"导出失败","contentTypes.exportEmpty":"没有可导出的记录","users.title":"用户","users.newUser":"新建用户","users.createUser":"创建用户","users.registerNew":"注册一个新用户账户。","users.username":"用户名","users.email":"邮箱","users.password":"密码","users.minChars":"至少 8 个字符,必须包含大写字母、小写字母和数字","users.role":"角色","users.joined":"加入时间","users.editRole":"编辑用户角色","users.editUser":"编辑用户","users.changeRoleFor":"更改 {username} ({email}) 的角色","users.reader":"读者","users.author":"作者","users.admin":"管理员","users.active":"正常","users.suspended":"停用","users.banned":"封禁","users.newPassword":"新密码","users.userCreated":"用户已创建","users.userUpdated":"用户已更新","users.userRoleUpdated":"用户角色已更新","users.failedToCreate":"创建用户失败","users.failedToUpdate":"更新用户失败","users.noUsers":"未找到用户。","users.noUsersDesc":"邀请用户并管理他们的角色。","users.registeredVia":"注册来源","users.userDeleted":"用户已删除","users.failedToDelete":"删除用户失败","users.confirmDeleteUser":'确定要删除用户 "{username}" 吗?此操作不可撤销。',"webhooks.title":"Webhooks","webhooks.name":"名称","webhooks.namePlaceholder":"如:Slack 通知","webhooks.nameCol":"名称","webhooks.newWebhook":"新建 Webhook","webhooks.createWebhook":"创建一个新的 Webhook 订阅以接收事件通知。","webhooks.callbackUrl":"回调 URL","webhooks.eventsComma":"事件(逗号分隔)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"使用 * 订阅所有事件","webhooks.descriptionOptional":"描述(可选)","webhooks.secretOptional":"密钥(可选)","webhooks.secretPlaceholder":"留空表示不使用","webhooks.secretHint":"用于 HMAC-SHA256 签名验证(X-Webhook-Signature 头)。","webhooks.deliveryHistory":"投递记录","webhooks.colTime":"时间","webhooks.colEvent":"事件","webhooks.colStatus":"状态","webhooks.colStatusCode":"状态码","webhooks.colDuration":"耗时","webhooks.colError":"错误","webhooks.noDeliveries":"暂无投递记录。","webhooks.urlCol":"URL","webhooks.events":"事件","webhooks.webhookCreated":"Webhook 已创建","webhooks.webhookUpdated":"Webhook 已更新","webhooks.webhookDeleted":"Webhook 已删除","webhooks.failedToCreate":"创建 Webhook 失败","webhooks.failedToUpdate":"更新 Webhook 失败","webhooks.failedToDelete":"删除 Webhook 失败","webhooks.confirmDelete":"删除此 Webhook 订阅?","webhooks.noWebhooks":"未找到 Webhook。","webhooks.noWebhooksDesc":"设置 Webhook 以接收实时事件通知。","tokens.title":"API 令牌","tokens.newToken":"新建令牌","tokens.createToken":"创建 API 令牌","tokens.createTokenDesc":"生成一个新的个人访问令牌。令牌值只会显示一次。","tokens.scopesComma":"权限范围(逗号分隔)","tokens.expiresOptional":"过期时间(可选)","tokens.tokenCreated":"令牌已创建","tokens.tokenRevoked":"令牌已撤销","tokens.failedToCreate":"创建令牌失败","tokens.failedToRevoke":"撤销令牌失败","tokens.confirmRevoke":"撤销令牌“{name}”?此操作不可恢复。","tokens.tokenCopied":"令牌已复制到剪贴板","tokens.tokenCreatedCopy":"令牌已创建——请立即复制!","tokens.copied":"已复制","tokens.copy":"复制","tokens.dismiss":"关闭","tokens.notShownAgain":"此令牌不会再次显示,请安全存储。","tokens.scopesCol":"权限","tokens.expiresCol":"过期","tokens.lastUsed":"上次使用","tokens.never":"永不","tokens.noTokens":"未找到 API 令牌。创建一个以开始使用。","tokens.noTokensDesc":"创建 API 令牌以进行程序化访问。","tokens.editToken":"编辑令牌","tokens.editTokenDesc":"更新令牌名称和权限","tokens.tokenUpdated":"令牌已更新","tokens.failedToUpdate":"更新令牌失败","tokens.expiresAt":"过期时间","tokens.scopes":"权限","tokens.fullAccess":"完全访问","tokens.selectResource":"从左侧选择资源以配置权限","tokens.searchResources":"搜索资源...","tokens.month1":"1 个月","tokens.months3":"3 个月","tokens.months6":"6 个月","tokens.year1":"1 年","tokens.custom":"自定义","tokens.resource":"资源","tokens.created":"创建时间","tokens.name":"名称","tokens.description":"描述","workflows.title":"工作流","workflows.instances":"实例","workflows.visualEditor":"可视化编辑器","workflows.newWorkflow":"新建工作流","workflows.createWorkflow":"创建工作流","workflows.createWorkflowDesc":"定义一个包含步骤的新工作流。步骤配置为 JSON 格式。","workflows.stepsJson":"步骤 (JSON)","workflows.stepFormat":'每个步骤:{ id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"工作流已创建","workflows.workflowDeleted":"工作流已删除","workflows.failedToCreate":"创建工作流失败","workflows.failedToDelete":"删除工作流失败","workflows.confirmDelete":"删除工作流“{name}”?","workflows.noWorkflows":"未找到工作流。创建一个以开始使用。","workflows.noWorkflowsDesc":"定义工作流以自动化您的内容管道。","workflows.steps":"{count} 个步骤","workflows.workflowStarted":"工作流已启动","workflows.editor.title":"工作流编辑器","workflows.editor.newWorkflow":"新建工作流","workflows.editor.stepName":"步骤名称","workflows.editor.branchesJson":"分支(JSON 数组)","workflows.editor.connectEdges":"从此节点连接边以定义分支。","workflows.editor.configJson":"配置 (JSON)","workflows.editor.apply":"应用","workflows.editor.deleteStep":"删除步骤","workflows.editor.addStep":"添加步骤","workflows.editor.invalidJson":"配置中的 JSON 无效","workflows.editor.workflowSaved":"工作流已保存","workflows.editor.failedToSave":"保存工作流失败","audit.title":"审计日志","audit.clearFilters":"清除筛选","audit.noLogs":"未找到审计日志。","audit.action":"操作","audit.actor":"操作者","audit.resource":"资源","audit.timestamp":"时间戳","options.title":"选项","options.saved":"选项已保存","options.failedToSave":"保存选项失败","plugins.title":"插件","plugins.loaded":"{count} 已加载","plugins.plugin":"插件","plugins.runtime":"运行时","plugins.hooks":"钩子","plugins.health":"健康","plugins.pluginEnabled":"插件已启用","plugins.pluginDisabled":"插件已禁用","plugins.pluginReloaded":"插件已重载","plugins.pluginRemoved":"插件已移除","plugins.failedToEnable":"启用插件失败","plugins.failedToDisable":"禁用插件失败","plugins.failedToReload":"重载插件失败","plugins.failedToRemove":"移除插件失败","plugins.noPlugins":"未加载插件。","plugins.placePlugins":"将插件放置在配置的插件目录中。","plugins.confirmRemove":"移除插件“{name}”?这将从内存中卸载。","plugins.autoDisabled":"自动禁用","plugins.tooManyErrors":"错误过多","plugins.errorCount":"{count} 个错误","plugins.errorsOccurred":"发生错误","plugins.calls":"{count} 次调用","plugins.idle":"空闲","plugins.notFound":"插件未找到","plugins.notFoundMsg":"插件未找到。","plugins.backToPlugins":"返回插件","plugins.general":"概览","plugins.version":"版本","plugins.reload":"重载","plugins.remove":"移除","plugins.errorTracking":"错误跟踪和自动禁用状态","plugins.healthy":"健康","plugins.errorCountLabel":"错误计数","plugins.lastError":"最后错误","plugins.lastErrorAt":"最后错误时间","plugins.autoDisabledLabel":"自动禁用","plugins.permissions":"权限","permissions.declaredFromManifest":"从插件清单声明的权限","plugins.hooksTitle":"钩子","plugins.hooksDesc":"已注册的钩子点及其执行指标","plugins.noHooks":"未注册钩子。","plugins.totalCalls":"总调用次数","plugins.totalErrors":"总错误数","plugins.totalDuration":"总耗时","plugins.noMetrics":"暂无指标","plugins.performance":"性能概览","plugins.maxMemory":"最大内存","plugins.timeout":"超时","plugins.default":"默认","media.title":"媒体","media.files":"{count} 个文件","media.searchFiles":"搜索文件...","media.fileDeleted":"文件已删除","media.failedToDelete":"删除文件失败","media.confirmDelete":"确定要删除这个文件吗?","media.date":"日期","media.size":"大小","media.ascending":"升序","media.descending":"降序","field.mediaUrl":"媒体 URL","field.blobBase64":"Base64 编码的二进制数据","field.mediaItems":"项","field.blobChooseFile":"选择文件","field.blobReplace":"替换","field.blobBytes":"{size} 字节","field.blobTooLarge":"文件超过 {max} MB 上限","field.blobReadError":"读取文件失败","field.blobMaxSize":"最大 {max}","field.supportsTypes":"支持类型: {types}","field.maxFiles":"最多 {max} 个文件","field.allTypes":"所有文件类型","field.startWriting":"开始编写...","field.yes":"是","field.no":"否","field.relatedItemId":"关联项目 ID","cron.title":"定时任务","cron.newCron":"新建定时任务","cron.expression":"表达式","cron.handler":"处理函数","cron.lastRun":"上次运行","cron.nextRun":"下次运行","cron.cronCreated":"定时任务已创建","cron.cronDeleted":"定时任务已删除","cron.failedToCreate":"创建定时任务失败","cron.failedToDelete":"删除定时任务失败","cron.confirmDelete":"删除定时任务“{name}”?","tenants.title":"租户","tenants.newTenant":"新建租户","tenants.createTenant":"创建一个新租户用于多租户隔离。","tenants.tenantName":"租户名称","tenants.slug":"别名","tenants.domain":"域名","tenants.owner":"所有者","tenants.tenantCreated":"租户已创建","tenants.tenantUpdated":"租户已更新","tenants.tenantDeleted":"租户已删除","tenants.failedToCreate":"创建租户失败","tenants.failedToUpdate":"更新租户失败","tenants.failedToDelete":"删除租户失败","tenants.confirmDelete":"确定要删除这个租户吗?","tenants.noTenants":"未找到租户。","tenants.noTenantsDesc":"为多租户 SaaS 创建租户。","rbac.title":"角色与权限","rbac.roles":"角色","rbac.newRole":"新建角色","rbac.createRole":"创建一个新角色用于访问控制。","rbac.roleName":"角色名称","rbac.roleDesc":"角色描述","rbac.roleCreated":"角色已创建","rbac.roleUpdated":"角色已更新","rbac.roleDeleted":"角色已删除","rbac.failedToCreate":"创建角色失败","rbac.failedToUpdate":"更新角色失败","rbac.failedToDelete":"删除角色失败","rbac.confirmDelete":"删除角色“{name}”?这将移除所有关联的权限。","rbac.systemRole":"系统","rbac.permissions":"权限","rbac.addPermission":"添加权限","rbac.clearAllPermissions":"全部清除","rbac.clearAllPermissionsTitle":"清除所有权限?","rbac.clearAllPermissionsDesc":'确定要移除角色 "{name}" 的所有权限吗?此操作不可撤销。',"rbac.allPermissionsCleared":"所有权限已清除","rbac.permissionsRemoved":"权限已删除","rbac.searchResource":"搜索资源...","rbac.noSearchResults":"没有匹配的权限。","rbac.deleteSelected":"删除所选","rbac.deleteSelectedTitle":"删除所选权限?","rbac.deleteSelectedDesc":"将删除 {count} 个资源组的权限,此操作不可撤销。","rbac.op.create":"创建","rbac.op.read":"读取","rbac.op.update":"更新","rbac.op.delete":"删除","rbac.op.publish":"发布","rbac.op.*":"全部","rbac.action":"操作","rbac.subject":"主体","rbac.resource":"资源","rbac.operations":"操作","rbac.noRoles":"未找到角色。","builder.title":"内容类型构建器","builder.editContentType":"编辑内容类型","builder.createContentType":"创建内容类型","builder.baseConfig":"基本配置","builder.singularName":"单数名称","builder.pluralName":"复数名称","builder.tableName":"表名","builder.groupName":"分组","builder.groupPlaceholder":"如 forum(可选)","builder.groupHint":"命名空间分组,留空则为扁平结构。API: /cms/{group}/{plural}","builder.fieldsSection":"字段","builder.addField":"添加字段","builder.preview":"预览","builder.save":"保存内容类型","builder.saving":"保存中...","builder.saved":"内容类型已保存","builder.failedToSave":"保存内容类型失败","builder.confirmDeleteField":"删除字段“{name}”?","builder.text":"文本","builder.richText":"富文本","builder.email":"邮箱","builder.password":"密码","builder.uid":"UID","builder.integer":"整数","builder.bigInt":"大整数","builder.decimal":"小数","builder.float":"浮点数","builder.boolean":"布尔","builder.date":"日期","builder.datetime":"日期时间","builder.time":"时间","builder.enumType":"枚举","builder.jsonType":"JSON","builder.relation":"关联","builder.mediaType":"媒体","builder.link":"链接","builder.required":"必填","builder.unique":"唯一","builder.privateField":"私有","builder.immutable":"不可变","builder.label":"标签","builder.defaultValue":"默认值","builder.maxLength":"最大长度","builder.minValue":"最小值","builder.maxValue":"最大值","builder.enumValues":"枚举值(逗号分隔)","builder.relationType":"关联类型","builder.relationTarget":"目标表","builder.foreignKey":"外键","builder.throughTable":"中间表","builder.draftPublish":"草稿/发布","builder.timestamps":"时间戳","builder.softDelete":"软删除","builder.slugField":"Slug 字段","media.name":"名称","media.type":"类型","media.other":"其他","media.uploadFailed":"上传失败","media.dropFiles":"拖放文件、粘贴或{browse}","media.dropHint":"点击上传或拖拽文件到此处","media.cover":"封面","media.file":"文件","media.maxReached":"最多只能上传 {max} 个文件","media.typeNotAllowed":"不支持的文件类型","media.downloadFailed":"下载文件失败","media.uploading":"正在上传 {count} 个文件...","media.done":"完成","media.failedUpload":"失败","media.urlCopied":"URL 已复制","media.copyUrl":"复制 URL","media.download":"下载","media.dimensions":"尺寸","media.uploaded":"上传时间","media.urlLabel":"URL","media.noVideoSupport":"您的浏览器不支持视频播放。","media.downloadFile":"下载文件","workflows.instances.title":"工作流实例","workflows.instances.showLogs":"显示日志","workflows.instances.hideLogs":"隐藏日志","workflows.instances.currentStep":"当前","workflows.instances.context":"上下文","workflows.instances.stepLogs":"步骤日志 ({count})","workflows.instances.noStepLogs":"暂无步骤日志。","workflows.instances.noInstances":"未找到工作流实例。","workflows.instances.instanceCount":"{count} 个实例","workflows.instances.definitions":"定义","workflows.instances.filterStatus":"筛选状态","workflows.instances.cancelled":"实例已取消","workflows.editor.editStep":"编辑步骤","workflows.editor.name":"名称","workflows.editor.type":"类型","workflows.editor.backToList":"返回列表","workflows.editor.workflowName":"工作流名称...","workflows.editor.failedToLoad":"加载工作流失败","workflows.editor.immutableNotice":"工作流定义不可变。请创建新的工作流来更改步骤。","workflows.editor.untitled":"未命名工作流","workflows.editor.save":"保存","workflows.editor.saving":"保存中...","cron.createSchedule":"创建定时计划","cron.labelField":"标签","cron.jobType":"任务类型","cron.jobTypeHint":"选择内置任务","cron.cronExpression":"Cron 表达式(6 段)","cron.format":"格式:秒 分 时 日 月 周","cron.payload":"参数","cron.schedule":"计划","cron.scheduleTitle":"触发频率","cron.pluginCol":"插件","cron.scheduleCreated":"计划已创建","cron.scheduleToggled":"计划已切换","cron.scheduleDeleted":"计划已删除","cron.scheduleUpdated":"计划已更新","cron.seedHint":"点击右上角创建第一个定时任务","cron.confirmDeleteSchedule":"删除计划“{name}”?此操作不可恢复。","cron.scheduleNotFound":"计划未找到","cron.backToCronSchedules":"返回定时任务","cron.builtIn":"内置","cron.executionHistory":"执行历史","cron.cleanupOld":"清理旧日志","cron.cleanedUp":"已清理 {count} 条旧日志","cron.noExecutionLogs":"暂无执行日志。","cron.success":"成功","cron.failedStatus":"失败","cron.running":"运行中","cron.dispatched":"已入队","cron.dead":"已放弃","cron.timedOut":"已超时","cron.newSchedule":"新建计划","cron.idField":"ID","cron.started":"开始","cron.finished":"完成","cron.duration":"耗时","cron.error":"错误","cron.created":"创建时间","cron.updated":"更新时间","cron.executionType":"执行方式","cron.builtinTab":"内置任务","cron.scriptTab":"自定义脚本","cron.scriptLang":"脚本语言","cron.scriptSource":"脚本代码","cron.scriptHint":"可用 API: host.log, host.getData, host.setData, host.dbQuery, host.dbExecute, host.httpGet 等","cron.systemTab":"系统命令","cron.systemWarning":"系统脚本以完整系统权限运行 shell 命令。需要 cron-system 特性 + CRON_ALLOW_SYSTEM_SCRIPTS=true。","cron.useShell":"Shell 包装","cron.timeoutSecs":"超时(秒)","cron.systemCommand":"Shell 命令","cron.systemHint":"命令在工作目录下执行,CRON_PAYLOAD 环境变量包含 payload JSON","cron.presetHint":"常用预设","cron.presetGroupMinute":"分钟级","cron.presetGroupHour":"小时级","cron.presetGroupDay":"天/周/月","cron.presetEveryMinute":"每分钟","cron.presetEvery5Min":"每 5 分钟","cron.presetEvery15Min":"每 15 分钟","cron.presetEvery30Min":"每 30 分钟","cron.presetHourly":"每小时","cron.presetEvery6Hours":"每 6 小时","cron.presetEvery12Hours":"每 12 小时","cron.presetDailyMidnight":"每天 0:00","cron.presetDaily3am":"每天 3:00","cron.presetWeekly":"每周一 3:00","cron.presetWeeklySun":"每周日 3:00","cron.presetMonthly":"每月 1 号 0:00","cron.noCrons":"暂无定时任务","tenants.createForIsolation":"创建一个新租户用于数据隔离。","tenants.cannotDeleteDefault":"无法删除默认租户","tenants.confirmDeleteMsg":"删除此租户?属于此租户的数据不会被删除。","tenants.created":"创建时间","rbac.addRoleDesc":"向系统添加新角色。","rbac.updateRoleDesc":"更新“{name}”角色。","rbac.deleteRoleTitle":"删除角色","rbac.deleteRoleConfirm":"确定要删除“{name}”吗?此操作不可恢复。","rbac.addPermissionTitle":"添加权限","rbac.addPermissionDesc":"为“{name}”授予新权限。使用 * 作为通配符。","rbac.fieldsCol":"字段","rbac.conditionsCol":"条件","rbac.fieldsOptional":"字段(逗号分隔,可选)","rbac.removePermissionTitle":"移除权限","rbac.removePermissionDesc":"移除 {action} 对 {subject} 的权限?","rbac.noPermissions":"未配置权限。","rbac.selectRole":"选择角色以查看权限","rbac.prev":"上一页","scopeMatrix.fullAccess":"完全访问","scopeMatrix.action":"操作","scopeMatrix.allResources":"所有资源","scopeMatrix.search":"搜索...","scopeMatrix.selectAll":"全选","scopeMatrix.clearAll":"清除全部","scopeMatrix.empty":"从左侧选择资源以配置权限","scopeMatrix.resource":"资源","scopeMatrix.selected":"已选 {count} 个","scopeMatrix.fieldsOptional":"字段(逗号分隔,可选)","scopeMatrix.conditionsOptional":"条件(每行 key=value,可选)","options.noChanges":"没有修改","options.noOptions":"暂无配置项。","options.reset":"撤销","options.saveChanges":"保存更改","audit.failedToLoad":"加载审计日志失败,请重试。","audit.noEntries":"未找到审计条目。","audit.noEntriesDesc":"执行操作后,审计条目将显示在这里。","audit.timeCol":"时间","audit.subjectId":"资源 ID","audit.detailCol":"详情","audit.system":"系统","audit.from":"从","audit.to":"到","audit.search":"搜索","audit.clear":"清除","audit.today":"今天","audit.dateRange":"日期范围","audit.custom":"自定义范围","audit.export":"导出","audit.viewEntry":"审计条目","audit.ipAddress":"IP 地址","audit.userAgent":"User Agent","builder.untitled":"未命名内容类型","builder.fieldCount":"{count} 个字段","builder.fieldList":"字段列表","builder.protocols":"协议","builder.systemFields":"系统字段","builder.system":"系统","builder.newField":"新字段","builder.addAnotherField":"添加另一个字段","builder.addAField":"添加字段","builder.chooseFieldType":"选择要添加到内容类型的字段类型。","builder.fieldConfiguration":"字段配置","builder.fieldName":"字段名称","builder.fieldTypeLabel":"字段类型","builder.displayLabel":"显示标签","builder.helpText":"帮助文本","builder.removeField":"移除字段","builder.removeFieldConfirm":"移除此字段?","builder.noAdditionalOptions":"此字段类型无额外选项。","builder.acceptedTypes":"接受的类型","builder.acceptAll":"所有文件类型","builder.searchTypes":"搜索类型...","builder.noMatch":"没有匹配的类型","builder.viewData":"查看数据","builder.viewToml":"查看 TOML","builder.tomlDescription":"该内容类型生成的 TOML 源码。","builder.tomlCopied":"TOML 已复制到剪贴板","builder.copy":"复制","common.copied":"已复制","builder.viewApi":"API","builder.apiDescription":"配置每个端点的 API 访问控制,随内容类型一起保存。","builder.apiList":"列表","builder.apiEndpoint":"端点","builder.apiGet":"详情","builder.apiCreate":"创建","builder.apiUpdate":"更新","builder.apiDelete":"删除","builder.apiAccess":"访问级别","builder.apiAccessShort":"权限","builder.apiCache":"缓存","builder.apiCacheEnable":"启用服务端缓存","builder.apiCacheShort":"缓存","builder.apiFilter":"过滤表达式","builder.apiFilterShort":"过滤","builder.apiFilterAuth":"登录用户过滤","builder.apiFilterAuthShort":"登录过滤","builder.apiFields":"返回字段(逗号分隔)","builder.apiFieldsShort":"字段","builder.apiCopied":"URL 已复制到剪贴板","builder.saveApi":"保存 API","builder.apiSaved":"API 设置已保存","builder.apiSaveNeedsCreate":"请先创建内容类型,API 配置会随创建一起保存","builder.apiAccessHelpNone":"完全禁用,端点不开放","builder.apiAccessHelpPublic":"公开,无需认证","builder.apiAccessHelpAuthed":"任何已登录用户","builder.apiAccessHelpOwner":"仅记录创建者","builder.apiAccessHelpAdmin":"仅管理员","builder.icon":"图标","builder.color":"颜色","builder.invalidFieldName":'字段 "{field}" 必须以字母开头,只能包含字母、数字和下划线',"builder.requiredField":"请填写必填字段: {field}","builder.enumValuesRequired":'枚举字段 "{field}" 至少需要一个值',"builder.relationTargetRequired":'关系字段 "{field}" 必须指定目标内容类型',"builder.maxCount":"最大数量","builder.target":"目标","builder.valuesComma":"值(逗号分隔)","builder.describeContentType":"描述此内容类型...","builder.contentTypeUpdated":"内容类型已更新","builder.contentTypeCreated":"内容类型已创建","builder.newFieldCategory":"数字","layout.crm":"CRM","layout.pages":"页面","layout.reusableBlocks":"可复用块","crm.dashboard":"CRM 仪表盘","crm.pipeline":"销售漏斗","crm.contacts":"联系人","crm.companies":"公司","crm.deals":"商机","crm.activities":"活动","crm.notes":"备注","crm.reports":"报表","crm.totalCompanies":"公司总数","crm.totalContacts":"联系人总数","crm.openDeals":"进行中商机","crm.wonDeals":"已赢单","crm.pipelineValue":"漏斗总值","crm.weightedValue":"加权值","crm.winRate":"赢单率","crm.avgDealSize":"平均商机金额","crm.recentActivities":"本周活动","crm.totalActivities":"活动总数","crm.leaderboard":"排行榜","crm.noData":"暂无数据。","crm.newDeal":"新建商机","crm.createDeal":"创建商机","crm.dealTitle":"标题","crm.dealTitlePlaceholder":"输入商机标题...","crm.amount":"金额","crm.probability":"概率","crm.stage":"阶段","crm.advanceStage":"推进到下一阶段","crm.totalValue":"总值","crm.dealCreated":"商机已创建","crm.failedToCreateDeal":"创建商机失败","crm.dealStageUpdated":"商机阶段已更新","crm.failedToUpdateStage":"更新阶段失败","crm.titleRequired":"标题不能为空","crm.newContact":"新建联系人","crm.editContact":"编辑联系人","crm.contact":"联系人","crm.name":"姓名","crm.email":"邮箱","crm.phone":"电话","crm.company":"公司","crm.source":"来源","crm.lifecycleStage":"生命周期阶段","crm.noContacts":"暂无联系人。","crm.firstName":"名","crm.lastName":"姓","crm.jobTitle":"职位","crm.newCompany":"新建公司","crm.editCompany":"编辑公司","crm.companyName":"公司名称","crm.industry":"行业","crm.size":"规模","crm.website":"网站","crm.city":"城市","crm.country":"国家","crm.noCompanies":"暂无公司。","crm.deal":"商机","crm.editDeal":"编辑商机","crm.closeDate":"预计成交日期","crm.lossReason":"丢单原因","crm.noDeals":"暂无商机。","crm.dealInfo":"商机信息","crm.newActivity":"新建活动","crm.editActivity":"编辑活动","crm.activity":"活动","crm.type":"类型","crm.subject":"主题","crm.content":"内容","crm.date":"日期","crm.duration":"时长","crm.outcome":"结果","crm.noActivities":"暂无活动。","crm.newNote":"新建备注","crm.editNote":"编辑备注","crm.note":"备注","crm.relatedTo":"关联","crm.pinned":"置顶","crm.createdAt":"创建时间","crm.noNotes":"暂无备注。","crm.contentRequired":"内容不能为空","crm.relatedContactId":"关联联系人 ID","crm.relatedCompanyId":"关联公司 ID","crm.relatedDealId":"关联商机 ID","crm.contactInfo":"联系人信息","crm.timeline":"时间线","crm.noTimeline":"暂无时间线事件。","crm.addNote":"添加备注","crm.notePlaceholder":"输入备注...","crm.lifecycleUpdated":"生命周期阶段已更新","crm.failedToUpdateLifecycle":"更新生命周期阶段失败","crm.companyInfo":"公司信息","crm.funnelReport":"漏斗报表","crm.activityReport":"活动报表","crm.conversionRate":"转化率","crm.byType":"按类型","crm.byOutcome":"按结果","pages.title":"页面","pages.newPage":"新建页面","pages.editPage":"编辑页面","pages.pageDeleted":"页面已删除","pages.pageCreated":"页面已创建","pages.pageUpdated":"页面已更新","pages.failedToDelete":"删除页面失败","pages.failedToCreate":"创建页面失败","pages.failedToUpdate":"更新页面失败","pages.statusUpdated":"页面状态已更新","pages.failedToUpdateStatus":"更新状态失败","pages.confirmDelete":"确定要删除此页面吗?","pages.noPages":"暂无页面。","pages.noPagesDesc":"创建您的第一个页面来开始构建您的站点。","pages.noBlocks":"暂无可复用区块。","pages.noBlocksDesc":"创建可复用区块以在页面中使用。","pages.publish":"发布","pages.unpublish":"取消发布","pages.preview":"预览","pages.slug":"路径别名","pages.template":"模板","pages.createdAt":"创建时间","pages.basicInfo":"基本信息","pages.titleLabel":"标题","pages.titlePlaceholder":"输入页面标题...","pages.coverImage":"封面图","pages.metaTitle":"SEO 标题","pages.metaDescription":"SEO 描述","pages.ogImage":"OG 图片","pages.content":"内容","pages.blockMode":"可视化块","pages.saveDraft":"保存草稿","pages.writeContent":"输入页面内容...","pages.addBlock":"添加块","pages.chooseBlock":"选择块类型","pages.reusableBlocks":"可复用块","pages.createReusable":"创建可复用块","pages.editReusable":"编辑可复用块","pages.rbName":"名称","pages.rbType":"块类型","pages.rbDescription":"描述","pages.rbContent":"内容","command.search":"搜索...","command.placeholder":"输入命令或搜索...","command.noResults":"没有找到结果。","command.actions":"操作","command.switchToLight":"切换到亮色模式","command.switchToDark":"切换到暗色模式","layout.ecommerce":"电商","layout.products":"商品","layout.productCategories":"商品分类","layout.orders":"订单","layout.finance":"金融","layout.currencies":"币种","layout.wallets":"钱包","layout.paymentChannels":"支付渠道","layout.productComments":"商品评价","layout.coupons":"优惠券","layout.shippingTemplates":"运费模板","layout.plans":"套餐","products.title":"商品","products.newProduct":"新建商品","products.editProduct":"编辑商品","products.productTitle":"商品名称","products.price":"价格","products.originalPrice":"原价","products.stock":"库存","products.sales":"销量","products.coverUrl":"封面图","products.description":"描述","products.content":"详情","products.slug":"别名","products.status":"状态","products.category":"分类","products.unit":"单位","products.minPurchase":"最小购买","products.maxPurchase":"最大购买","products.sortOrder":"排序","products.metaTitle":"Meta 标题","products.metaDescription":"Meta 描述","products.productCreated":"商品已创建","products.productUpdated":"商品已更新","products.productDeleted":"商品已删除","products.batchDeleted":"{{count}} 个商品已删除","products.batchSuccess":"{{count}} 个商品已更新","products.batchActivate":"上架","products.batchDeactivate":"下架","products.failedToCreate":"创建商品失败","products.failedToUpdate":"更新商品失败","products.failedToDelete":"删除商品失败","products.confirmDelete":"确定要删除此商品吗?","products.confirmBatchDelete":"确定要删除 {{count}} 个商品吗?","products.noProducts":"暂无商品","products.noProductsDesc":"创建第一个商品开始销售。","products.allStatus":"全部状态","products.searchPlaceholder":"搜索商品标题...","products.active":"上架","products.draft":"草稿","products.archived":"已下架","products.general":"基本信息","products.media":"媒体","products.pricing":"定价","products.purchaseSettings":"购买设置","products.summary":"摘要","products.phTitle":"输入商品标题...","products.phSummary":"商品简短描述...","products.images":"商品图片","products.cover":"封面","products.dropImages":"拖拽图片到此处、粘贴或点击上传","productCategories.categoryName":"分类名称","productCategories.newCategory":"新建分类","productCategories.createCategory":"创建分类","productCategories.editCategory":"编辑分类","productCategories.optionalDesc":"描述(可选)","productCategories.parent":"父分类","productCategories.noParent":"无父分类","productCategories.sortOrder":"排序","productCategories.slug":"别名","productCategories.noCategories":"暂无分类","productCategories.noCategoriesDesc":"创建第一个商品分类来组织你的商品。","productCategories.categoryCreated":"分类已创建","productCategories.categoryUpdated":"分类已更新","productCategories.categoryDeleted":"分类已删除","productCategories.failedToCreate":"创建分类失败","productCategories.failedToUpdate":"更新分类失败","productCategories.failedToDelete":"删除分类失败","productCategories.confirmDelete":"确定要删除该分类吗?","productCategories.confirmDeleteTitle":"删除分类","productCategories.cannotDeleteHasChildren":"该分类下有 {count} 个子分类,无法删除。请先移动或删除子分类。","productCategories.treeTitle":"分类列表","productCategories.selectCategory":"选择一个分类查看详情","productCategories.addChild":"添加子分类","orders.title":"订单","orders.orderNo":"订单号","orders.buyer":"买家","orders.total":"金额","orders.status":"状态","orders.items":"商品","orders.remark":"备注","orders.adminRemark":"管理员备注","orders.createdAt":"创建时间","orders.actions":"操作","orders.allStatus":"全部状态","orders.searchPlaceholder":"搜索订单号、买家姓名...","orders.pending":"待付款","orders.paid":"已付款","orders.shipped":"已发货","orders.completed":"已完成","orders.cancelled":"已取消","orders.refunded":"已退款","orders.confirmPay":"确认已收到付款?","orders.orderPaid":"订单已标记为已付款","orders.confirmShip":"确认发货?","orders.orderShipped":"订单已发货","orders.confirmCancel":"确定取消此订单?","orders.orderCancelled":"订单已取消","orders.confirmRefund":"确定退款?","orders.orderRefunded":"订单已退款","orders.failedToPay":"标记付款失败","orders.failedToShip":"发货失败","orders.failedToCancel":"取消失败","orders.failedToRefund":"退款失败","orders.noOrders":"暂无订单","orders.noOrdersDesc":"客户下单后订单会显示在这里。","orders.trackingNo":"快递单号","orders.carrier":"快递公司","orders.shipInfo":"物流信息","orders.buyerInfo":"买家信息","orders.shippingAddress":"收货地址","orders.orderDetail":"订单详情","orders.stats.totalOrders":"总订单","orders.stats.totalRevenue":"总收入","orders.stats.pending":"待处理","orders.stats.completed":"已完成","orders.stats.todayOrders":"今日订单","orders.stats.todayRevenue":"今日收入","payments.title":"支付渠道","payments.newChannel":"新建渠道","payments.provider":"支付方式","payments.name":"渠道名称","payments.mode":"模式","payments.active":"启用","payments.live":"正式","payments.test":"测试","payments.credentials":"凭证","payments.webhookSecret":"Webhook 密钥","payments.settings":"设置","payments.channelCreated":"支付渠道已创建","payments.channelUpdated":"支付渠道已更新","payments.channelDeleted":"支付渠道已删除","payments.failedToCreate":"创建支付渠道失败","payments.failedToUpdate":"更新支付渠道失败","payments.failedToDelete":"删除支付渠道失败","payments.confirmDelete":"确定删除此支付渠道?","payments.noChannels":"暂无支付渠道","payments.noChannelsDesc":"添加支付渠道以开始收款。","payments.selectProvider":"选择支付方式...","payments.testMode":"沙箱模式","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"商户号","payments.fPrivateKey":"RSA 私钥","payments.fSerialNo":"证书序列号","payments.fWebhookSecret":"Webhook 签名密钥","payments.fAlipayPublicKey":"支付宝公钥","payments.fPlatformCert":"平台证书 (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"回调通知 URL","payments.phSk":"sk_live_... 或 sk_test_...","payments.phRsaKey":"粘贴 RSA 私钥(PEM 或 Base64)","payments.phUrl":"https://...","payments.editChannel":"编辑渠道","payments.leaveBlankToKeep":"留空保持不变","layout.paymentOrders":"支付订单","paymentOrders.title":"支付订单","paymentOrders.orderId":"关联订单","paymentOrders.title_col":"标题","paymentOrders.amount":"金额","paymentOrders.provider":"支付渠道","paymentOrders.noOrders":"暂无支付订单","paymentOrders.noOrdersDesc":"客户付款后,支付订单将显示在此处。","paymentOrders.refund":"退款","paymentOrders.refundTitle":"退款","paymentOrders.refundOrder":"退款订单","paymentOrders.refundAmount":"退款金额","paymentOrders.refundReason":"原因","paymentOrders.refundSuccess":"退款已提交","paymentOrders.refundFailed":"退款失败","layout.paymentTransactions":"支付流水","paymentTransactions.title":"支付流水","paymentTransactions.orderId":"关联订单","paymentTransactions.type":"类型","paymentTransactions.amount":"金额","paymentTransactions.providerTxId":"渠道流水号","paymentTransactions.noTransactions":"暂无交易记录","paymentTransactions.noTransactionsDesc":"支付事件发生后,交易记录将显示在此处。","currencies.title":"币种","currencies.newCurrency":"新建币种","currencies.code":"代码","currencies.name":"名称","currencies.decimals":"小数位","currencies.active":"启用","currencies.currencyCreated":"币种已创建","currencies.currencyUpdated":"币种已更新","currencies.failedToCreate":"创建币种失败","currencies.failedToUpdate":"更新币种失败","currencies.noCurrencies":"暂无币种","currencies.noCurrenciesDesc":"添加币种以启用多币种支持。","wallets.title":"钱包","wallets.user":"用户","wallets.currency":"币种","wallets.balance":"余额","wallets.frozen":"冻结","wallets.credit":"充值","wallets.debit":"扣款","wallets.transactions":"交易记录","wallets.amount":"金额","wallets.type":"类型","wallets.reference":"关联","wallets.creditTitle":"钱包充值","wallets.debitTitle":"钱包扣款","wallets.userId":"用户 ID","wallets.remark":"备注","wallets.creditSuccess":"充值成功","wallets.debitSuccess":"扣款成功","wallets.failedToCredit":"充值失败","wallets.failedToDebit":"扣款失败","wallets.noWallets":"暂无钱包","wallets.noWalletsDesc":"用户收到首笔交易后钱包会自动创建。","wallets.noTransactions":"暂无交易记录。","adminLogin.title":"管理后台","adminLogin.subtitle":"请使用管理员账号登录","adminLogin.email":"邮箱","adminLogin.password":"密码","adminLogin.submit":"登录","adminLogin.loading":"登录中…","adminLogin.error":"邮箱或密码错误","adminLogin.footer":"RaisFast 管理后台 — 仅限授权人员访问","adminLogin.sessionExpired":"会话已过期,请重新登录。","setup.title":"安装向导","setup.subtitle":"让我们准备好您的 RaisFast 实例","setup.failedToFetch":"获取系统状态失败","setup.step.check":"检查","setup.step.database":"数据库","setup.step.admin":"管理员","setup.check.title":"系统检查","setup.check.desc":"验证您的环境是否就绪","setup.check.database":"数据库","setup.check.connected":"已连接","setup.check.disconnected":"未连接","setup.check.storage":"文件存储","setup.check.extensions":"扩展目录","setup.check.writable":"可写入","setup.check.notWritable":"不可写入","setup.check.adminUser":"管理员账户","setup.check.adminExists":"已存在","setup.check.adminNeeded":"未创建","setup.check.next":"下一步:配置数据库","setup.check.nextAdmin":"下一步:创建管理员","setup.database.title":"数据库配置","setup.database.desc":"连接到您的数据库","setup.database.path":"数据库文件路径","setup.database.pathHint":"相对于工作目录的路径","setup.database.connectionString":"连接字符串","setup.database.manualInput":"手动填写","setup.database.url":"数据库 URL","setup.database.urlHint":"粘贴您的数据库服务商提供的连接 URL(如 Supabase、Neon、PlanetScale)","setup.database.host":"主机","setup.database.port":"端口","setup.database.username":"用户名","setup.database.password":"密码","setup.database.name":"数据库名称","setup.database.testConnection":"测试连接","setup.database.testing":"测试中...","setup.database.testSuccess":"连接成功!","setup.database.testFailed":"连接失败","setup.database.saveAndRestart":"保存并重启","setup.database.saving":"保存中...","setup.database.connectionError":"连接错误","setup.database.failedToSave":"保存数据库配置失败","setup.restarting.title":"正在重启...","setup.restarting.desc":"服务器正在使用新的数据库配置重启,请稍候。","setup.admin.title":"创建管理员账户","setup.admin.desc":"为您的实例设置第一个管理员","setup.admin.username":"用户名","setup.admin.email":"邮箱","setup.admin.password":"密码","setup.admin.passwordHint":"至少 8 个字符,必须包含大写字母、小写字母和数字","setup.admin.mustContainUppercase":"密码必须包含至少一个大写字母","setup.admin.mustContainLowercase":"密码必须包含至少一个小写字母","setup.admin.mustContainDigit":"密码必须包含至少一个数字","setup.admin.passwordsNotMatch":"两次输入的密码不一致","setup.admin.confirmPassword":"确认密码","setup.admin.create":"创建管理员并进入","setup.admin.creating":"创建中...","setup.adminCreated":"管理员账户创建成功!","setup.failedToCreateAdmin":"创建管理员账户失败","setup.done.title":"一切就绪!","setup.done.desc":"您的 RaisFast 实例已准备就绪。管理员账户已存在。","setup.done.goToLogin":"前往登录","productComments.title":"商品评价","productComments.content":"内容","productComments.rating":"评分","productComments.reply":"回复","productComments.pending":"待审核","productComments.approved":"已通过","productComments.rejected":"已拒绝","productComments.approve":"通过","productComments.reject":"拒绝","productComments.replyAction":"回复","productComments.editReply":"编辑回复","productComments.replyPlaceholder":"输入回复内容...","productComments.sendReply":"发送回复","productComments.statusUpdated":"评价状态已更新","productComments.replySent":"回复已发送","productComments.failedToUpdateStatus":"更新评价状态失败","productComments.failedToReply":"回复失败","productComments.commentDeleted":"评价已删除","productComments.failedToDelete":"删除评价失败","productComments.confirmDelete":"确定要删除此评价吗?","productComments.noComments":"暂无评价","productComments.noCommentsDesc":"客户评价将显示在这里。","coupons.title":"优惠券","coupons.newCoupon":"新建优惠券","coupons.editCoupon":"编辑优惠券","coupons.code":"优惠码","coupons.type":"类型","coupons.value":"面值","coupons.percentage":"百分比折扣","coupons.fixed":"固定金额","coupons.minOrder":"最低订单金额","coupons.maxUses":"最大使用次数","coupons.usedCount":"已使用","coupons.startsAt":"开始时间","coupons.expiresAt":"过期时间","coupons.couponCreated":"优惠券已创建","coupons.couponUpdated":"优惠券已更新","coupons.couponDeleted":"优惠券已删除","coupons.failedToCreate":"创建优惠券失败","coupons.failedToUpdate":"更新优惠券失败","coupons.failedToDelete":"删除优惠券失败","coupons.confirmDelete":"确定要删除此优惠券吗?","coupons.noCoupons":"暂无优惠券","coupons.noCouponsDesc":"创建优惠券为客户提供折扣。","shippingTemplates.title":"运费模板","shippingTemplates.newTemplate":"新建模板","shippingTemplates.editTemplate":"编辑模板","shippingTemplates.type":"计费方式","shippingTemplates.byWeight":"按重量","shippingTemplates.byQuantity":"按数量","shippingTemplates.fixed":"固定运费","shippingTemplates.firstUnit":"首件/首重","shippingTemplates.firstPrice":"首费","shippingTemplates.additionalUnit":"续件/续重","shippingTemplates.additionalPrice":"续费","shippingTemplates.freeShipping":"满额包邮","shippingTemplates.regions":"地区 (JSON)","shippingTemplates.templateCreated":"运费模板已创建","shippingTemplates.templateUpdated":"运费模板已更新","shippingTemplates.templateDeleted":"运费模板已删除","shippingTemplates.failedToCreate":"创建运费模板失败","shippingTemplates.failedToUpdate":"更新运费模板失败","shippingTemplates.failedToDelete":"删除运费模板失败","shippingTemplates.confirmDelete":"确定要删除此运费模板吗?","shippingTemplates.noTemplates":"暂无运费模板","shippingTemplates.noTemplatesDesc":"创建运费模板以计算配送费用。","productVariants.title":"商品变体","productVariants.newVariant":"新建变体","productVariants.editVariant":"编辑变体","productVariants.attributes":"属性","productVariants.weight":"重量","productVariants.imageUrl":"图片","productVariants.variantCreated":"变体已创建","productVariants.variantUpdated":"变体已更新","productVariants.variantDeleted":"变体已删除","productVariants.failedToCreate":"创建变体失败","productVariants.failedToUpdate":"更新变体失败","productVariants.failedToDelete":"删除变体失败","productVariants.confirmDelete":"确定要删除此变体吗?","productVariants.noVariants":"暂无变体,添加变体以提供不同规格。","profile.title":"个人资料","profile.email":"邮箱","profile.username":"用户名","profile.avatar":"头像","profile.website":"网站","profile.bio":"简介","profile.changePassword":"修改密码","profile.currentPassword":"当前密码","profile.newPassword":"新密码","profile.confirmNewPassword":"确认新密码","profile.updated":"资料已更新","profile.failedToUpdate":"更新资料失败","profile.passwordChanged":"密码已修改","profile.failedToChangePassword":"修改密码失败","profile.allFieldsRequired":"请填写所有密码字段","profile.passwordsNotMatch":"两次输入的密码不一致","profile.passwordTooShort":"密码至少需要8个字符","plans.title":"套餐","plans.name":"名称","plans.slug":"标识","plans.dbType":"数据库类型","plans.price":"价格","plans.maxStorage":"最大存储","plans.maxUsers":"最大用户数","plans.sortOrder":"排序","plans.active":"启用","plans.createPlan":"创建套餐","plans.editPlan":"编辑套餐","plans.deletePlan":"删除套餐","plans.planCreated":"套餐已创建","plans.planUpdated":"套餐已更新","plans.planDeleted":"套餐已删除","plans.failedToCreate":"创建套餐失败","plans.failedToUpdate":"更新套餐失败","plans.failedToDelete":"删除套餐失败","plans.confirmDelete":"确定要删除套餐「{slug}」吗?","plans.confirmPassword":"确认密码","plans.confirmPasswordPlaceholder":"输入密码以确认","plans.starter":"入门版","plans.pro":"专业版","plans.business":"企业版","plans.monthly":"/月","plans.sqlite":"SQLite","plans.postgresShared":"PG 共享","plans.postgresDedicated":"PG 独享","plans.noPlans":"暂无套餐","layout.integration":"集成","layout.channels":"渠道","layout.receipts":"投递记录","layout.apiClients":"API 客户端","common.reset":"重置","common.close":"关闭","integration.newChannel":"新建渠道","integration.editChannel":"编辑渠道","integration.channelKey":"渠道键","integration.displayName":"显示名称","integration.provider":"提供方","integration.mode":"模式","integration.transport":"传输","integration.framing":"成帧","integration.endpoint":"端点","integration.verifyKind":"验证方式","integration.verifyConfig":"验证配置(JSON)","integration.credentials":"凭据(JSON)","integration.credentialsKeepHint":"留空保留已封存的凭据","integration.mapping":"字段映射(JSONPath)","integration.pullConfig":"拉取配置(JSON)","integration.streamConfig":"流式配置(JSON)","integration.targetType":"目标内容类型","integration.routeExtra":"路由扩展(JSON)","integration.redeliveryMax":"最大重投次数","integration.stack":"层栈","integration.noChannels":"暂无集成渠道","integration.noChannelsDesc":"添加渠道以接收入站 webhook、长连接与轮询数据。","integration.ownerApp":"归属应用","integration.ownerAppAll":"全部应用","integration.ownerAppNone":"平台(无应用)","integration.ownerAppHint":"留空 = 平台级渠道。填入已安装应用 id 即创建应用自有渠道。","integration.channelCreated":"渠道已创建","integration.channelUpdated":"渠道已更新","integration.channelDeleted":"渠道已删除","integration.failedToCreate":"创建失败","integration.failedToUpdate":"更新失败","integration.failedToDelete":"删除失败","integration.failedToTest":"测试失败","integration.confirmDeleteChannel":"确定删除渠道「{key}」?投递记录将保留以供审计。","integration.testMapping":"测试映射","integration.sampleBody":"样例请求报文","integration.preview":"归一化信封预览","integration.runTest":"运行","integration.hasCredentials":"凭据已封存于保险库","integration.allChannels":"全部渠道","integration.allStatuses":"全部状态","integration.traceIdFilter":"按 Trace ID 过滤…","integration.noReceipts":"暂无投递记录","integration.noReceiptsDesc":"入站投递将在此展示完整链路追踪。","integration.receivedAt":"接收时间","integration.attempts":"尝试次数","integration.nextRetryAt":"下次重试","integration.noSteps":"暂无步骤记录","integration.pending":"等待中","integration.receiptInfo":"回执信息","integration.trace":"链路追踪","integration.complete":"已完成","integration.firstPass":"首遍管道","integration.asyncChain":"异步链","integration.envelopeSnapshot":"信封快照","integration.fullSteps":"完整步骤时间线","integration.egressCalls":"出站调用","integration.noEgress":"暂无出站调用","integration.noEgressDesc":"该回执触发的出站调用将在此展示。","integration.replayed":"已重放","integration.dryRunDone":"试跑完成 — 报告见链路追踪","integration.failedToReplay":"重放失败","integration.replay":"重放","integration.dryRunReplay":"试跑重放","integration.replayConfirmTitle":"重放该回执?","integration.replayConfirmDesc":"将基于信封快照重跑路由阶段(按 external_id upsert)。","integration.receiptNotFound":"回执不存在","integration.newClient":"新建 API 客户端","integration.editClient":"编辑 API 客户端","integration.clientKey":"客户端键","integration.baseUrl":"基础 URL","integration.authConfig":"认证配置(JSON)","integration.rateLimit":"限流(JSON)","integration.ops":"操作(JSON)","integration.opsCount":"操作数","integration.noClients":"暂无 API 客户端","integration.noClientsDesc":"添加声明式 API 客户端以进行出站调用。","integration.clientCreated":"API 客户端已创建","integration.clientUpdated":"API 客户端已更新","integration.clientDeleted":"API 客户端已删除","integration.confirmDeleteClient":"确定删除 API 客户端「{key}」?","integration.testCall":"测试调用","integration.selectOp":"选择操作","integration.input":"输入(JSON)","integration.result":"结果","integration.allClients":"全部客户端","integration.egressLog":"出站日志","integration.latency":"延迟","integration.createdAt":"创建时间","integration.basicInfo":"基本信息","integration.trustSection":"信任(L0)","integration.normalizeSection":"归一化(L2)","integration.routingSection":"路由与可靠性(L3/L4)","integration.presetTitle":"从预设开始","integration.presetPlaceholder":"选择一个经过实战验证的配置…","integration.presetHint":"预设会填满整个表单——之后改掉 key、密钥和目标内容类型即可。示例取自真实接入(GitHub / 飞书 / 钉钉)。","integration.presetApplied":"预设已应用——请检查并调整","integration.jsonInvalid":"JSON 无效","integration.insertExample":"插入示例","integration.presetGeneric":"通用 Webhook(无验签)","integration.presetGenericDesc":"普通 push 端点 + JSONPath 映射","integration.presetHmac":"HMAC Webhook","integration.presetHmacDesc":"push + hmac-sha256 签名校验","integration.presetGithub":"GitHub Webhook","integration.presetGithubDesc":"x-hub-signature-256,delivery GUID 幂等","integration.presetShopify":"Shopify Webhook","integration.presetShopifyDesc":"base64 HMAC,webhook-id 幂等","integration.presetDingtalk":"钉钉 Stream 机器人","integration.presetDingtalkDesc":"ws 长连接 + dispatch 成帧 + 换址握手","integration.presetFeishu":"飞书机器人(长连接)","integration.presetFeishuDesc":"ws 长连接 + pb-frame + oauth 握手","integration.presetPull":"HTTP 轮询(cursor)","integration.presetPullDesc":"pull + since_id 分页 + 断点续拉","integration.presetImap":"IMAP 邮箱(原生)","integration.presetImapDesc":"pull + imap + mime,mark-read 语义,支持 IDLE 长驻"},_C={"layout.brand":"RaisFast","layout.adminPanel":"管理パネル","layout.dashboard":"ダッシュボード","layout.content":"コンテンツ","layout.extension":"拡張機能","layout.system":"システム","layout.posts":"投稿","layout.categories":"カテゴリ","layout.tags":"タグ","layout.comments":"コメント","layout.media":"メディア","layout.contentTypes":"コンテンツタイプ","layout.users":"ユーザー","layout.plugins":"プラグイン","layout.rolesPermissions":"権限管理","layout.cron":"Cron","layout.tenants":"テナント","layout.webhooks":"Webhook","layout.apiTokens":"APIトークン","layout.workflows":"ワークフロー","layout.auditLog":"監査ログ","layout.options":"オプション","layout.tenant":"テナント","layout.clearTenant":"テナントフィルターをクリア","layout.all":"すべて","layout.accessDenied":"アクセス拒否","layout.accessDeniedMsg":"このエリアにアクセスするには、著者または管理者としてログインする必要があります。","layout.goToLogin":"ログインへ","layout.toggleTheme":"テーマ切替","layout.signOut":"ログアウト","layout.profile":"プロフィール","common.loading":"読み込み中...","common.save":"保存","common.cancel":"キャンセル","common.ok":"OK","common.create":"作成","common.creating":"作成中...","common.saving":"保存中...","common.delete":"削除","common.confirmDeleteTitle":"削除の確認","common.edit":"編集","common.content":"コンテンツ","common.remove":"削除","common.view":"表示","common.back":"戻る","common.actions":"操作","common.status":"ステータス","common.retry":"再試行","common.previous":"前へ","common.next":"次へ","common.pageOf":"{total}ページ中{page}ページ目","common.noData":"データがありません","common.all":"すべて","common.draft":"下書き","common.published":"公開済み","common.archived":"アーカイブ","common.enabled":"有効","common.disabled":"無効","common.name":"名前","common.description":"説明","common.enabledCount":"{count}件有効","common.disabledCount":"{count}件無効","common.adminOnly":"管理者のみ","common.adminOnlyMsg":"このセクションは管理者のみ管理できます。","common.backToDashboard":"ダッシュボードに戻る","common.confirmDelete":"このアイテムを削除してもよろしいですか?","common.notFound":"見つかりません","common.failedToLoad":"読み込みに失敗しました","common.selectStatus":"ステータスを選択","common.titleRequired":"タイトルは必須です","common.contentRequired":"コンテンツは必須です","common.nameRequired":"名前は必須です","common.invalidJson":"無効なJSONです","common.isRequired":"{field}は必須です","common.created":"{name}を作成しました","common.updated":"{name}を更新しました","common.deleted":"{name}を削除しました","common.failedToCreate":"{name}の作成に失敗しました","common.failedToUpdate":"{name}の更新に失敗しました","common.failedToDelete":"{name}の削除に失敗しました","common.none":"なし","common.noDependencies":"依存関係はありません","dashboard.title":"ダッシュボード","dashboard.posts":"投稿","dashboard.comments":"コメント","dashboard.categories":"カテゴリ","dashboard.tags":"タグ","dashboard.media":"メディア","dashboard.users":"ユーザー","dashboard.contentTypes":"コンテンツタイプ","dashboard.postsLast14Days":"投稿(過去14日間)","dashboard.ordersAndProducts14Days":"注文と商品(過去14日間)","dashboard.viewAll":"すべて表示","dashboard.failedToLoad":"ダッシュボードの読み込みに失敗しました。データが古い可能性があります。","dashboard.noDataYet":"まだデータがありません。","dashboard.recentActivity":"最近のアクティビティ","dashboard.noActivity":"まだアクティビティがありません。","dashboard.type":"タイプ","dashboard.detail":"詳細","dashboard.time":"時間","dashboard.post":"投稿","dashboard.comment":"コメント","dashboard.product":"商品","dashboard.order":"注文","dashboard.products":"商品","dashboard.orders":"注文","dashboard.revenue":"売上","dashboard.coupons":"クーポン","dashboard.orderStatus":"注文ステータス","dashboard.justNow":"たった今","dashboard.minutesAgo":"分前","dashboard.hoursAgo":"時間前","dashboard.daysAgo":"日前","posts.title":"投稿","posts.newPost":"新規投稿","posts.editPost":"投稿を編集","posts.postTitle":"投稿タイトル","posts.titleCol":"タイトル","posts.categoryCol":"カテゴリ","posts.authorCol":"著者","posts.createdCol":"作成日","posts.allStatus":"すべてのステータス","posts.searchPlaceholder":"記事を検索...","posts.content":"コンテンツ","posts.excerpt":"抜粋","posts.briefSummary":"簡単な要約(任意)","posts.coverImage":"カバー画像","posts.writeContent":"Markdownで投稿内容を入力...","posts.selectCategory":"カテゴリを選択","posts.tags":"タグ","posts.slug":"Slug","posts.slugPlaceholder":"空欄の場合はタイトルから自動生成","posts.noTags":"利用可能なタグがありません","posts.addTag":"タグを追加...","posts.createTag":"作成","posts.createPost":"投稿を作成","posts.saveChanges":"変更を保存","posts.postCreated":"投稿を作成しました","posts.postUpdated":"投稿を更新しました","posts.postDeleted":"投稿を削除しました","posts.failedToCreate":"投稿の作成に失敗しました","posts.failedToUpdate":"投稿の更新に失敗しました","posts.failedToDelete":"投稿の削除に失敗しました","posts.confirmDelete":"この投稿を削除してもよろしいですか?","posts.confirmBatchDelete":"{count}件の投稿を削除しますか?","posts.batchPublish":"公開","posts.batchUnpublish":"非公開","posts.batchSuccess":"{count}件の投稿を更新しました","posts.noPosts":"投稿が見つかりません。","posts.noPostsDesc":"最初のブログ投稿を作成してアイデアを共有しましょう。","posts.failedToLoad":"投稿の読み込みに失敗しました。","categories.title":"カテゴリ","categories.newCategory":"新規カテゴリ","categories.createCategory":"投稿を整理するための新しいカテゴリを作成します。","categories.categoryName":"カテゴリ名","categories.optionalDesc":"説明(任意)","categories.sortOrder":"並び順","categories.slug":"Slug","categories.categoryCreated":"カテゴリを作成しました","categories.categoryUpdated":"カテゴリを更新しました","categories.categoryDeleted":"カテゴリを削除しました","categories.failedToCreate":"カテゴリの作成に失敗しました","categories.failedToUpdate":"カテゴリの更新に失敗しました","categories.failedToDelete":"カテゴリの削除に失敗しました","categories.confirmDelete":"このカテゴリを削除してもよろしいですか?","categories.confirmDeleteTitle":"カテゴリーを削除","categories.noCategories":"カテゴリなし","categories.noCategoriesDesc":"カテゴリを使って投稿を整理しましょう。","categories.treeTitle":"カテゴリー","categories.selectCategory":"カテゴリーを選択して詳細を表示","categories.addChild":"サブ追加","categories.parent":"親カテゴリ","categories.noParent":"親なし","categories.editCategory":"カテゴリを編集","categories.cannotDeleteHasChildren":"このカテゴリーには {count} つのサブカテゴリーがあるため削除できません。先に移動または削除してください。","categories.coverImage":"カバー画像","tags.title":"タグ","tags.newTag":"新規タグ","tags.createTag":"投稿用の新しいタグを作成します。","tags.tagName":"タグ名","tags.tagCreated":"タグを作成しました","tags.tagUpdated":"タグを更新しました","tags.tagDeleted":"タグを削除しました","tags.failedToCreate":"タグの作成に失敗しました","tags.failedToUpdate":"タグの更新に失敗しました","tags.failedToDelete":"タグの削除に失敗しました","tags.confirmDelete":"このタグを削除してもよろしいですか?","tags.noTags":"タグが見つかりません。","tags.noTagsDesc":"タグを追加してコンテンツを整理・フィルタリングしましょう。","comments.title":"コメント","comments.total":"合計{count}件","comments.all":"すべて","comments.pending":"承認待ち","comments.approved":"承認済み","comments.rejected":"却下","comments.spam":"スパム","comments.approve":"承認","comments.reject":"却下","comments.author":"投稿者","comments.contentCol":"コンテンツ","comments.post":"投稿","comments.date":"日付","comments.selected":"{count}件選択中","comments.commentStatusUpdated":"コメントのステータスを更新しました","comments.commentDeleted":"コメントを削除しました","comments.bulkActionDone":"{count}件のコメントを{status}にしました","comments.bulkDeleted":"{count}件のコメントを削除しました","comments.bulkActionFailed":"一括操作に失敗しました","comments.bulkDeleteFailed":"一括削除に失敗しました","comments.failedToUpdateStatus":"ステータスの更新に失敗しました","comments.failedToDelete":"コメントの削除に失敗しました","comments.confirmDelete":"このコメントを削除してもよろしいですか?","comments.confirmBulkDelete":"選択した{count}件のコメントを削除しますか?","comments.noComments":"コメントが見つかりません。","comments.noCommentsDesc":"読者が反応し始めると、コメントがここに表示されます。","contentTypes.title":"コンテンツタイプ","contentTypes.noFields":"このコンテンツタイプには編集可能なフィールドがありません。","contentTypes.createContentType":"コンテンツタイプを作成","contentTypes.builder":"ビルダー","contentTypes.noContentTypes":"コンテンツタイプがまだありません","contentTypes.noContentTypesDesc":"最初のコンテンツタイプを作成してCMSを構築しましょう。","contentTypes.contentTypeDeleted":"コンテンツタイプを削除しました","contentTypes.failedToDelete":"削除に失敗しました","contentTypes.confirmDelete":"コンテンツタイプ「{singular}」を削除しますか?スキーマファイルは削除されますが、データベーステーブルは削除されません。","contentTypes.notFound":"コンテンツタイプが見つかりません","contentTypes.notFoundMsg":"コンテンツタイプ「{singular}」が見つかりません。","contentTypes.itemDeleted":"アイテムを削除しました","contentTypes.failedToDeleteItem":"アイテムの削除に失敗しました","contentTypes.confirmDeleteItem":"このアイテムを削除してもよろしいですか?","contentTypes.batchDeleteSuccess":"{count} 件を削除しました","contentTypes.confirmBatchDelete":"{count} 件を削除してもよろしいですか?","contentTypes.export":"エクスポート","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} 件をエクスポートしました","contentTypes.import":"インポート","contentTypes.importJson":"JSON をインポート","contentTypes.importCsv":"CSV をインポート","contentTypes.importExcel":"Excel をインポート","contentTypes.importSuccess":"{count} 件をインポートしました","contentTypes.importPartial":"{ok} 件成功、{failed} 件失敗","contentTypes.importEmpty":"ファイルにインポート可能なレコードがありません","contentTypes.importTooMany":"レコード数が上限を超えています(最大 {max})","contentTypes.importFailed":"インポートに失敗しました","contentTypes.importTooLarge":"ファイルが 8MB の上限を超えています","contentTypes.noItems":"アイテムが見つかりません。","contentTypes.noItemsDesc":"最初のアイテムを作成してこのコレクションに追加しましょう。","contentTypes.newItem":"新規{name}","contentTypes.editItem":"{name}を編集","contentTypes.itemNotFound":"アイテムが見つかりません。","contentTypes.fields":"{count}フィールド","contentTypes.fieldsLabel":"フィールド","contentTypes.totalRecords":"{count} 件","contentTypes.createdAt":"作成日時","contentTypes.updatedAt":"更新日時","users.title":"ユーザー","users.newUser":"新規ユーザー","users.createUser":"ユーザーを作成","users.registerNew":"新しいユーザーアカウントを登録します。","users.username":"ユーザー名","users.email":"メールアドレス","users.password":"パスワード","users.minChars":"8文字以上、大文字・小文字・数字をそれぞれ含めてください","users.role":"権限","users.joined":"登録日","users.editRole":"ユーザー権限を編集","users.editUser":"ユーザー編集","users.changeRoleFor":"{username}({email})の権限を変更","users.reader":"読者","users.author":"著者","users.admin":"管理者","users.active":"アクティブ","users.suspended":"停止","users.banned":"禁止","users.newPassword":"新しいパスワード","users.userCreated":"ユーザーを作成しました","users.userUpdated":"ユーザーを更新しました","users.userRoleUpdated":"ユーザー権限を更新しました","users.failedToCreate":"ユーザーの作成に失敗しました","users.failedToUpdate":"ユーザーの更新に失敗しました","users.noUsers":"ユーザーが見つかりません。","users.noUsersDesc":"ユーザーを招待して権限を管理しましょう。","users.registeredVia":"登録経路","users.userDeleted":"ユーザーを削除しました","users.failedToDelete":"ユーザーの削除に失敗しました","users.confirmDeleteUser":'ユーザー "{username}" を削除しますか?この操作は取り消せません。',"webhooks.title":"Webhook","webhooks.newWebhook":"新規Webhook","webhooks.createWebhook":"イベント通知を受け取るための新しいWebhookサブスクリプションを作成します。","webhooks.callbackUrl":"コールバックURL","webhooks.eventsComma":"イベント(カンマ区切り)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"* を使用するとすべてのイベントを購読します","webhooks.descriptionOptional":"説明(任意)","webhooks.urlCol":"URL","webhooks.events":"イベント","webhooks.webhookCreated":"Webhookを作成しました","webhooks.webhookUpdated":"Webhookを更新しました","webhooks.webhookDeleted":"Webhookを削除しました","webhooks.failedToCreate":"Webhookの作成に失敗しました","webhooks.failedToUpdate":"Webhookの更新に失敗しました","webhooks.failedToDelete":"Webhookの削除に失敗しました","webhooks.confirmDelete":"このWebhookサブスクリプションを削除しますか?","webhooks.noWebhooks":"Webhookが見つかりません。","webhooks.noWebhooksDesc":"Webhookを設定してリアルタイムのイベント通知を受け取りましょう。","tokens.title":"APIトークン","tokens.newToken":"新規トークン","tokens.createToken":"APIトークンを作成","tokens.createTokenDesc":"新しいパーソナルアクセストークンを生成します。トークン値は一度だけ表示されます。","tokens.scopesComma":"スコープ(カンマ区切り)","tokens.expiresOptional":"有効期限(任意)","tokens.tokenCreated":"トークンを作成しました","tokens.tokenRevoked":"トークンを無効化しました","tokens.failedToCreate":"トークンの作成に失敗しました","tokens.failedToRevoke":"トークンの無効化に失敗しました","tokens.confirmRevoke":"トークン「{name}」を無効化しますか?この操作は取り消せません。","tokens.tokenCopied":"トークンをクリップボードにコピーしました","tokens.tokenCreatedCopy":"トークンを作成しました — 今すぐコピーしてください!","tokens.copied":"コピーしました","tokens.copy":"コピー","tokens.dismiss":"閉じる","tokens.notShownAgain":"このトークンは二度と表示されません。安全に保管してください。","tokens.scopesCol":"スコープ","tokens.expiresCol":"有効期限","tokens.lastUsed":"最終使用","tokens.never":"未使用","tokens.noTokens":"APIトークンが見つかりません。作成して始めましょう。","tokens.noTokensDesc":"プログラムからのアクセス用にAPIトークンを作成しましょう。","tokens.description":"説明","workflows.title":"ワークフロー","workflows.instances":"インスタンス","workflows.visualEditor":"ビジュアルエディタ","workflows.newWorkflow":"新規ワークフロー","workflows.createWorkflow":"ワークフローを作成","workflows.createWorkflowDesc":"ステップ付きの新しいワークフローを定義します。ステップはJSONで設定します。","workflows.stepsJson":"ステップ(JSON)","workflows.stepFormat":'各ステップ: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"ワークフローを作成しました","workflows.workflowDeleted":"ワークフローを削除しました","workflows.failedToCreate":"ワークフローの作成に失敗しました","workflows.failedToDelete":"ワークフローの削除に失敗しました","workflows.confirmDelete":"ワークフロー「{name}」を削除しますか?","workflows.noWorkflows":"ワークフローが見つかりません。作成して始めましょう。","workflows.noWorkflowsDesc":"ワークフローを定義してコンテンツパイプラインを自動化しましょう。","workflows.steps":"{count}ステップ","workflows.workflowStarted":"ワークフローを開始しました","workflows.editor.title":"ワークフローエディタ","workflows.editor.newWorkflow":"新規ワークフロー","workflows.editor.stepName":"ステップ名","workflows.editor.branchesJson":"ブランチ(JSON配列)","workflows.editor.connectEdges":"このノードからエッジを接続してブランチを定義してください。","workflows.editor.configJson":"設定(JSON)","workflows.editor.apply":"適用","workflows.editor.deleteStep":"ステップを削除","workflows.editor.addStep":"ステップを追加","workflows.editor.invalidJson":"設定のJSONが無効です","workflows.editor.workflowSaved":"ワークフローを保存しました","workflows.editor.failedToSave":"ワークフローの保存に失敗しました","audit.title":"監査ログ","audit.clearFilters":"フィルターをクリア","audit.noLogs":"監査ログエントリが見つかりません。","audit.action":"アクション","audit.actor":"実行者","audit.resource":"リソース","audit.timestamp":"タイムスタンプ","options.title":"オプション","options.saved":"オプションを保存しました","options.failedToSave":"オプションの保存に失敗しました","plugins.title":"プラグイン","plugins.loaded":"{count}件読み込み済み","plugins.plugin":"プラグイン","plugins.runtime":"ランタイム","plugins.hooks":"フック","plugins.health":"ヘルス","plugins.pluginEnabled":"プラグインを有効にしました","plugins.pluginDisabled":"プラグインを無効にしました","plugins.pluginReloaded":"プラグインをリロードしました","plugins.pluginRemoved":"プラグインを削除しました","plugins.failedToEnable":"プラグインの有効化に失敗しました","plugins.failedToDisable":"プラグインの無効化に失敗しました","plugins.failedToReload":"プラグインのリロードに失敗しました","plugins.failedToRemove":"プラグインの削除に失敗しました","plugins.noPlugins":"読み込まれたプラグインがありません。","plugins.placePlugins":"設定されたプラグインディレクトリにプラグインを配置してください。","plugins.confirmRemove":"プラグイン「{name}」を削除しますか?メモリからアンロードされます。","plugins.autoDisabled":"自動無効化","plugins.tooManyErrors":"エラーが多すぎます","plugins.errorCount":"{count}件のエラー","plugins.errorsOccurred":"エラーが発生しました","plugins.calls":"{count}回呼び出し","plugins.idle":"アイドル","plugins.notFound":"プラグインが見つかりません","plugins.notFoundMsg":"プラグインが見つかりません。","plugins.backToPlugins":"プラグイン一覧に戻る","plugins.general":"一般","plugins.version":"バージョン","plugins.reload":"リロード","plugins.remove":"削除","plugins.errorTracking":"エラートラッキングと自動無効化ステータス","plugins.healthy":"正常","plugins.errorCountLabel":"エラー数","plugins.lastError":"最新のエラー","plugins.lastErrorAt":"最新エラー日時","plugins.autoDisabledLabel":"自動無効化","plugins.permissions":"権限","permissions.declaredFromManifest":"プラグインマニフェストで宣言された権限","plugins.hooksTitle":"フック","plugins.hooksDesc":"登録されたフックポイントとその実行メトリクス","plugins.noHooks":"フックが登録されていません。","plugins.totalCalls":"合計呼び出し","plugins.totalErrors":"合計エラー","plugins.totalDuration":"合計所要時間","plugins.noMetrics":"メトリクスがまだありません","plugins.performance":"パフォーマンス概要","plugins.maxMemory":"最大メモリ","plugins.timeout":"タイムアウト","plugins.default":"デフォルト","media.title":"メディア","media.files":"{count}ファイル","media.searchFiles":"ファイルを検索...","media.fileDeleted":"ファイルを削除しました","media.failedToDelete":"ファイルの削除に失敗しました","media.confirmDelete":"このファイルを削除してもよろしいですか?","media.date":"日付","media.size":"サイズ","media.ascending":"昇順","media.descending":"降順","field.mediaUrl":"メディアURL","field.startWriting":"入力を開始...","field.yes":"はい","field.no":"いいえ","field.relatedItemId":"関連アイテムID","cron.title":"Cronジョブ","cron.newCron":"新規Cronジョブ","cron.expression":"式","cron.handler":"ハンドラー","cron.lastRun":"最終実行","cron.nextRun":"次回実行","cron.cronCreated":"Cronジョブを作成しました","cron.cronDeleted":"Cronジョブを削除しました","cron.failedToCreate":"Cronジョブの作成に失敗しました","cron.failedToDelete":"Cronジョブの削除に失敗しました","cron.noCrons":"Cronジョブが見つかりません。","cron.confirmDelete":"Cronジョブ「{name}」を削除しますか?","tenants.title":"テナント","tenants.newTenant":"新規テナント","tenants.createTenant":"マルチテナント分離用の新しいテナントを作成します。","tenants.tenantName":"テナント名","tenants.slug":"Slug","tenants.domain":"ドメイン","tenants.owner":"オーナー","tenants.tenantCreated":"テナントを作成しました","tenants.tenantUpdated":"テナントを更新しました","tenants.tenantDeleted":"テナントを削除しました","tenants.failedToCreate":"テナントの作成に失敗しました","tenants.failedToUpdate":"テナントの更新に失敗しました","tenants.failedToDelete":"テナントの削除に失敗しました","tenants.confirmDelete":"このテナントを削除してもよろしいですか?","tenants.noTenants":"テナントが見つかりません。","tenants.noTenantsDesc":"マルチテナントSaaS用にテナントを作成しましょう。","rbac.title":"権限管理","rbac.roles":"ロール","rbac.newRole":"新規ロール","rbac.createRole":"アクセス制御用の新しいロールを作成します。","rbac.roleName":"ロール名","rbac.roleDesc":"ロールの説明","rbac.roleCreated":"ロールを作成しました","rbac.roleUpdated":"ロールを更新しました","rbac.roleDeleted":"ロールを削除しました","rbac.failedToCreate":"ロールの作成に失敗しました","rbac.failedToUpdate":"ロールの更新に失敗しました","rbac.failedToDelete":"ロールの削除に失敗しました","rbac.confirmDelete":"ロール「{name}」を削除しますか?関連するすべての権限が削除されます。","rbac.systemRole":"システム","rbac.permissions":"権限","rbac.addPermission":"権限を追加","rbac.action":"アクション","rbac.subject":"サブジェクト","rbac.noRoles":"ロールが見つかりません。","builder.title":"コンテンツタイプビルダー","builder.editContentType":"コンテンツタイプを編集","builder.createContentType":"コンテンツタイプを作成","builder.baseConfig":"基本設定","builder.singularName":"単数名","builder.pluralName":"複数名","builder.tableName":"テーブル名","builder.fieldsSection":"フィールド","builder.addField":"フィールドを追加","builder.preview":"プレビュー","builder.save":"コンテンツタイプを保存","builder.saving":"保存中...","builder.saved":"コンテンツタイプを保存しました","builder.failedToSave":"コンテンツタイプの保存に失敗しました","builder.confirmDeleteField":"フィールド「{name}」を削除しますか?","builder.text":"テキスト","builder.richText":"リッチテキスト","builder.email":"メール","builder.password":"パスワード","builder.uid":"UID","builder.integer":"整数","builder.bigInt":"Big Int","builder.decimal":"小数","builder.float":"浮動小数点","builder.boolean":"真偽値","builder.date":"日付","builder.datetime":"日時","builder.time":"時刻","builder.enumType":"列挙型","builder.jsonType":"JSON","builder.relation":"リレーション","builder.mediaType":"メディア","builder.link":"リンク","builder.required":"必須","builder.unique":"ユニーク","builder.privateField":"非公開","builder.immutable":"不変","builder.label":"ラベル","builder.defaultValue":"デフォルト値","builder.maxLength":"最大長","builder.minValue":"最小値","builder.maxValue":"最大値","builder.enumValues":"列挙値(カンマ区切り)","builder.relationType":"リレーションタイプ","builder.relationTarget":"対象テーブル","builder.foreignKey":"外部キー","builder.throughTable":"中間テーブル","builder.draftPublish":"下書き/公開","builder.timestamps":"タイムスタンプ","builder.softDelete":"論理削除","builder.slugField":"Slugフィールド","media.name":"名前","media.type":"タイプ","media.other":"その他","media.uploadFailed":"アップロードに失敗しました","media.dropFiles":"ファイルをドロップ、貼り付け、または{browse}","media.uploading":"{count}ファイルをアップロード中...","media.done":"完了","media.failedUpload":"失敗","media.urlCopied":"URLをコピーしました","media.copyUrl":"URLをコピー","media.download":"ダウンロード","media.dimensions":"寸法","media.uploaded":"アップロード済み","media.urlLabel":"URL","media.noVideoSupport":"お使いのブラウザは動画再生に対応していません。","media.downloadFile":"ファイルをダウンロード","workflows.instances.title":"ワークフローインスタンス","workflows.instances.showLogs":"ログを表示","workflows.instances.hideLogs":"ログを非表示","workflows.instances.currentStep":"現在","workflows.instances.context":"コンテキスト","workflows.instances.stepLogs":"ステップログ({count})","workflows.instances.noStepLogs":"ステップログがありません。","workflows.instances.noInstances":"ワークフローインスタンスが見つかりません。","workflows.instances.instanceCount":"{count}インスタンス","workflows.instances.definitions":"定義","workflows.instances.filterStatus":"ステータスで絞り込み","workflows.instances.cancelled":"インスタンスをキャンセルしました","workflows.editor.editStep":"ステップを編集","workflows.editor.name":"名前","workflows.editor.type":"タイプ","workflows.editor.backToList":"一覧に戻る","workflows.editor.workflowName":"ワークフロー名...","workflows.editor.failedToLoad":"ワークフローの読み込みに失敗しました","workflows.editor.immutableNotice":"ワークフロー定義は不変です。ステップを変更するには新しく作成してください。","workflows.editor.untitled":"無題のワークフロー","workflows.editor.save":"保存","workflows.editor.saving":"保存中...","cron.createSchedule":"Cronスケジュールを作成","cron.labelField":"ラベル","cron.jobType":"ジョブタイプ","cron.cronExpression":"Cron式(7セグメント)","cron.format":"形式: 秒 分 時 日 月 曜日","cron.payload":"ペイロード(JSON、任意)","cron.schedules":"{count}スケジュール","cron.schedule":"スケジュール","cron.pluginCol":"プラグイン","cron.scheduleCreated":"スケジュールを作成しました","cron.scheduleToggled":"スケジュールを切り替えました","cron.scheduleDeleted":"スケジュールを削除しました","cron.scheduleUpdated":"スケジュールを更新しました","cron.noCronSchedules":"Cronスケジュールがありません。","cron.seedHint":"上で作成するか、CRON_SEED_ENABLEDを有効にしてデフォルトをシードしてください。","cron.confirmDeleteSchedule":"スケジュール「{name}」を削除しますか?この操作は取り消せません。","cron.scheduleNotFound":"スケジュールが見つかりません","cron.backToCronSchedules":"Cronスケジュール一覧に戻る","cron.scheduleDetails":"スケジュール詳細","cron.cronExpression7":"7セグメント: 秒 分 時 日 月 曜日","cron.builtIn":"組み込み","cron.executionHistory":"実行履歴","cron.recentLogs":"このスケジュールの最近の実行ログ","cron.cleanupOld":"古いログを削除","cron.cleanedUp":"{count}件の古いログを削除しました","cron.noExecutionLogs":"実行ログがまだありません。","cron.success":"成功","cron.failedStatus":"失敗","cron.running":"実行中","cron.newSchedule":"新規スケジュール","cron.idField":"ID","cron.started":"開始","cron.finished":"完了","cron.duration":"所要時間","cron.error":"エラー","cron.created":"作成日","cron.updated":"更新日","tenants.createForIsolation":"データ分離用の新しいテナントを作成します。","tenants.cannotDeleteDefault":"デフォルトテナントは削除できません","tenants.confirmDeleteMsg":"このテナントを削除しますか?このテナントに属するデータは削除されません。","tenants.created":"作成日","rbac.addRoleDesc":"システムに新しいロールを追加します。","rbac.updateRoleDesc":"「{name}」ロールを更新します。","rbac.deleteRoleTitle":"ロールを削除","rbac.deleteRoleConfirm":"「{name}」を削除してもよろしいですか?この操作は取り消せません。","rbac.addPermissionTitle":"権限を追加","rbac.addPermissionDesc":"「{name}」に新しい権限を付与します。* でワイルドカードを使用できます。","rbac.fieldsCol":"フィールド","rbac.conditionsCol":"条件","rbac.fieldsOptional":"フィールド(カンマ区切り、任意)","rbac.removePermissionTitle":"権限を削除","rbac.removePermissionDesc":"{subject}に対する{action}を削除しますか?","rbac.noPermissions":"権限が設定されていません。","rbac.selectRole":"ロールを選択して権限を表示","rbac.prev":"前へ","options.noChanges":"変更はありません","options.noOptions":"利用可能なオプションがありません。","options.reset":"リセット","options.saveChanges":"変更を保存","audit.failedToLoad":"監査ログの読み込みに失敗しました。もう一度お試しください。","audit.noEntries":"監査エントリが見つかりません。","audit.noEntriesDesc":"アクションが実行されると監査エントリが表示されます。","audit.timeCol":"時間","audit.subjectId":"サブジェクトID","audit.detailCol":"詳細","audit.system":"システム","audit.from":"開始","audit.to":"終了","audit.search":"検索","audit.clear":"クリア","audit.today":"今日","builder.untitled":"無題のコンテンツタイプ","builder.fieldCount":"{count}フィールド","builder.fieldList":"フィールド一覧","builder.protocols":"プロトコル","builder.systemFields":"システムフィールド","builder.system":"システム","builder.newField":"新規フィールド","builder.addAnotherField":"別のフィールドを追加","builder.addAField":"フィールドを追加","builder.chooseFieldType":"コンテンツタイプに追加するフィールドタイプを選択してください。","builder.fieldConfiguration":"フィールド設定","builder.fieldName":"フィールド名","builder.fieldTypeLabel":"フィールドタイプ","builder.displayLabel":"表示ラベル","builder.helpText":"ヘルプテキスト","builder.removeField":"フィールドを削除","builder.removeFieldConfirm":"このフィールドを削除しますか?","builder.noAdditionalOptions":"このフィールドタイプに追加のオプションはありません。","builder.acceptedTypes":"許可タイプ","builder.maxCount":"最大数","builder.target":"対象","builder.valuesComma":"値(カンマ区切り)","builder.describeContentType":"このコンテンツタイプの説明...","builder.contentTypeUpdated":"コンテンツタイプを更新しました","builder.contentTypeCreated":"コンテンツタイプを作成しました","builder.newFieldCategory":"数値","layout.crm":"CRM","layout.pages":"ページ","layout.reusableBlocks":"ブロック","crm.dashboard":"CRMダッシュボード","crm.pipeline":"パイプライン","crm.contacts":"連絡先","crm.companies":"企業","crm.deals":"案件","crm.activities":"活動","crm.notes":"メモ","crm.reports":"レポート","crm.totalCompanies":"企業総数","crm.totalContacts":"連絡先総数","crm.openDeals":"進行中の案件","crm.wonDeals":"受注済み","crm.pipelineValue":"パイプライン価値","crm.weightedValue":"加重値","crm.winRate":"受注率","crm.avgDealSize":"平均案件規模","crm.recentActivities":"今週の活動","crm.totalActivities":"活動総数","crm.leaderboard":"リーダーボード","crm.noData":"データがありません。","crm.newDeal":"新規案件","crm.createDeal":"案件を作成","crm.dealTitle":"タイトル","crm.dealTitlePlaceholder":"案件タイトルを入力...","crm.amount":"金額","crm.probability":"確率","crm.stage":"ステージ","crm.advanceStage":"次のステージに進む","crm.totalValue":"合計金額","crm.dealCreated":"案件を作成しました","crm.failedToCreateDeal":"案件の作成に失敗しました","crm.dealStageUpdated":"案件ステージを更新しました","crm.failedToUpdateStage":"ステージの更新に失敗しました","crm.titleRequired":"タイトルは必須です","crm.newContact":"新規連絡先","crm.editContact":"連絡先を編集","crm.contact":"連絡先","crm.name":"名前","crm.email":"メールアドレス","crm.phone":"電話番号","crm.company":"企業","crm.source":"来源","crm.lifecycleStage":"ライフサイクルステージ","crm.noContacts":"連絡先が見つかりません。","crm.firstName":"名","crm.lastName":"姓","crm.jobTitle":"役職","crm.newCompany":"新規企業","crm.editCompany":"企業を編集","crm.companyName":"企業名","crm.industry":"業界","crm.size":"規模","crm.website":"ウェブサイト","crm.city":"都市","crm.country":"国","crm.noCompanies":"企業が見つかりません。","crm.deal":"案件","crm.editDeal":"案件を編集","crm.closeDate":"クローズ予定日","crm.lossReason":"失注理由","crm.noDeals":"案件が見つかりません。","crm.dealInfo":"案件情報","crm.newActivity":"新規活動","crm.editActivity":"活動を編集","crm.activity":"活動","crm.type":"タイプ","crm.subject":"件名","crm.content":"内容","crm.date":"日付","crm.duration":"所要時間","crm.outcome":"結果","crm.noActivities":"活動が見つかりません。","crm.newNote":"新規メモ","crm.editNote":"メモを編集","crm.note":"メモ","crm.relatedTo":"関連先","crm.pinned":"ピン留め","crm.createdAt":"作成日","crm.noNotes":"メモが見つかりません。","crm.contentRequired":"内容は必須です","crm.relatedContactId":"関連連絡先ID","crm.relatedCompanyId":"関連企業ID","crm.relatedDealId":"関連案件ID","crm.contactInfo":"連絡先情報","crm.timeline":"タイムライン","crm.noTimeline":"タイムラインイベントがありません。","crm.addNote":"メモを追加","crm.notePlaceholder":"メモを入力...","crm.lifecycleUpdated":"ライフサイクルステージを更新しました","crm.failedToUpdateLifecycle":"ライフサイクルステージの更新に失敗しました","crm.companyInfo":"企業情報","crm.funnelReport":"ファネルレポート","crm.activityReport":"活動レポート","crm.conversionRate":"コンバージョン率","crm.byType":"タイプ別","crm.byOutcome":"結果別","pages.title":"ページ","pages.newPage":"新規ページ","pages.editPage":"ページを編集","pages.pageDeleted":"ページを削除しました","pages.pageCreated":"ページを作成しました","pages.pageUpdated":"ページを更新しました","pages.failedToDelete":"ページの削除に失敗しました","pages.failedToCreate":"ページの作成に失敗しました","pages.failedToUpdate":"ページの更新に失敗しました","pages.statusUpdated":"ページステータスを更新しました","pages.failedToUpdateStatus":"ステータスの更新に失敗しました","pages.confirmDelete":"このページを削除してもよろしいですか?","pages.noPages":"ページが見つかりません。","pages.noPagesDesc":"最初のページを作成してサイト構築を始めましょう。","pages.noBlocks":"再利用可能なブロックがまだありません。","pages.noBlocksDesc":"ページ間で使い回せる再利用可能なブロックを作成しましょう。","pages.publish":"公開","pages.unpublish":"非公開","pages.preview":"プレビュー","pages.slug":"Slug","pages.template":"テンプレート","pages.createdAt":"作成日","pages.basicInfo":"基本情報","pages.titleLabel":"タイトル","pages.titlePlaceholder":"ページタイトルを入力...","pages.coverImage":"カバー画像","pages.metaTitle":"メタタイトル","pages.metaDescription":"メタディスクリプション","pages.ogImage":"OG画像","pages.content":"コンテンツ","pages.blockMode":"ブロック","pages.saveDraft":"下書きを保存","pages.writeContent":"ページ内容を入力...","pages.addBlock":"ブロックを追加","pages.chooseBlock":"ブロックタイプを選択","pages.reusableBlocks":"再利用可能なブロック","pages.createReusable":"再利用可能なブロックを作成","pages.editReusable":"再利用可能なブロックを編集","pages.rbName":"名前","pages.rbType":"ブロックタイプ","pages.rbDescription":"説明","pages.rbContent":"コンテンツ","command.search":"検索...","command.placeholder":"コマンドを入力または検索...","command.noResults":"結果が見つかりません。","command.actions":"アクション","command.switchToLight":"ライトモードに切替","command.switchToDark":"ダークモードに切替","layout.ecommerce":"EC","layout.products":"商品","layout.productCategories":"商品カテゴリ","layout.orders":"注文","layout.finance":"財務","layout.currencies":"通貨","layout.wallets":"ウォレット","layout.paymentChannels":"決済チャネル","layout.productComments":"レビュー","layout.coupons":"クーポン","layout.shippingTemplates":"配送テンプレート","products.title":"商品","products.newProduct":"新規商品","products.editProduct":"商品を編集","products.productTitle":"商品名","products.price":"価格","products.originalPrice":"通常価格","products.stock":"在庫","products.sales":"販売数","products.coverUrl":"カバーURL","products.description":"説明","products.content":"コンテンツ","products.slug":"Slug","products.status":"ステータス","products.category":"カテゴリ","products.unit":"単位","products.minPurchase":"最小購入数","products.maxPurchase":"最大購入数","products.sortOrder":"並び順","products.metaTitle":"メタタイトル","products.metaDescription":"メタディスクリプション","products.productCreated":"商品を作成しました","products.productUpdated":"商品を更新しました","products.productDeleted":"商品を削除しました","products.batchDeleted":"{{count}}件の商品を削除しました","products.batchSuccess":"{{count}}件の商品を更新しました","products.batchActivate":"公開","products.batchDeactivate":"非公開","products.failedToCreate":"商品の作成に失敗しました","products.failedToUpdate":"商品の更新に失敗しました","products.failedToDelete":"商品の削除に失敗しました","products.confirmDelete":"この商品を削除してもよろしいですか?","products.confirmBatchDelete":"{{count}}件の商品を削除してもよろしいですか?","products.noProducts":"商品がまだありません","products.noProductsDesc":"最初の商品を作成して販売を始めましょう。","products.allStatus":"すべてのステータス","products.searchPlaceholder":"商品名で検索...","products.active":"販売中","products.draft":"下書き","products.archived":"アーカイブ","products.general":"基本情報","products.media":"メディア","products.pricing":"価格設定","products.purchaseSettings":"購入設定","products.summary":"概要","products.phTitle":"商品名を入力...","products.phSummary":"商品の簡単な説明...","products.images":"商品画像","products.cover":"表紙","products.dropImages":"画像をドロップ、貼り付け、またはクリックしてアップロード","productCategories.categoryName":"カテゴリ名","productCategories.newCategory":"新規カテゴリ","productCategories.createCategory":"カテゴリを作成","productCategories.editCategory":"カテゴリを編集","productCategories.optionalDesc":"説明(任意)","productCategories.parent":"親カテゴリ","productCategories.noParent":"親なし","productCategories.sortOrder":"並び順","productCategories.slug":"スラッグ","productCategories.noCategories":"カテゴリなし","productCategories.noCategoriesDesc":"最初の商品カテゴリを作成して商品を整理しましょう。","productCategories.categoryCreated":"カテゴリを作成しました","productCategories.categoryUpdated":"カテゴリを更新しました","productCategories.categoryDeleted":"カテゴリを削除しました","productCategories.failedToCreate":"カテゴリの作成に失敗しました","productCategories.failedToUpdate":"カテゴリの更新に失敗しました","productCategories.failedToDelete":"カテゴリの削除に失敗しました","productCategories.confirmDelete":"このカテゴリを削除しますか?","productCategories.confirmDeleteTitle":"カテゴリーを削除","productCategories.cannotDeleteHasChildren":"このカテゴリーには {count} つのサブカテゴリーがあるため削除できません。先に移動または削除してください。","productCategories.treeTitle":"カテゴリー","productCategories.selectCategory":"カテゴリーを選択して詳細を表示","productCategories.addChild":"サブ追加","orders.title":"注文","orders.orderNo":"注文番号","orders.buyer":"購入者","orders.total":"合計","orders.status":"ステータス","orders.items":"商品","orders.remark":"備考","orders.adminRemark":"管理者備考","orders.createdAt":"作成日","orders.actions":"操作","orders.allStatus":"すべてのステータス","orders.searchPlaceholder":"注文番号、購入者名で検索...","orders.pending":"未払い","orders.paid":"支払済み","orders.shipped":"発送済み","orders.completed":"完了","orders.cancelled":"キャンセル","orders.refunded":"返金済み","orders.confirmPay":"支払を確認しますか?","orders.orderPaid":"注文を支払済みにしました","orders.confirmShip":"この注文を発送しますか?","orders.orderShipped":"注文を発送しました","orders.confirmCancel":"この注文をキャンセルしますか?","orders.orderCancelled":"注文をキャンセルしました","orders.confirmRefund":"この注文を返金しますか?","orders.orderRefunded":"注文を返金しました","orders.failedToPay":"支払済みマークに失敗しました","orders.failedToShip":"発送に失敗しました","orders.failedToCancel":"キャンセルに失敗しました","orders.failedToRefund":"返金に失敗しました","orders.noOrders":"注文がまだありません","orders.noOrdersDesc":"顧客が購入すると、注文がここに表示されます。","orders.trackingNo":"追跡番号","orders.carrier":"配送業者","orders.shipInfo":"配送情報","orders.buyerInfo":"購入者情報","orders.shippingAddress":"配送先住所","orders.orderDetail":"注文詳細","orders.stats.totalOrders":"注文総数","orders.stats.totalRevenue":"総売上","orders.stats.pending":"未払い","orders.stats.completed":"完了","orders.stats.todayOrders":"今日の注文","orders.stats.todayRevenue":"今日の売上","payments.title":"決済チャネル","payments.newChannel":"新規チャネル","payments.provider":"プロバイダー","payments.name":"チャネル名","payments.mode":"モード","payments.active":"有効","payments.live":"本番","payments.test":"テスト","payments.credentials":"認証情報","payments.webhookSecret":"Webhookシークレット","payments.settings":"設定","payments.channelCreated":"決済チャネルを作成しました","payments.channelUpdated":"決済チャネルを更新しました","payments.channelDeleted":"決済チャネルを削除しました","payments.failedToCreate":"決済チャネルの作成に失敗しました","payments.failedToUpdate":"決済チャネルの更新に失敗しました","payments.failedToDelete":"決済チャネルの削除に失敗しました","payments.confirmDelete":"この決済チャネルを削除しますか?","payments.noChannels":"決済チャネルがありません","payments.noChannelsDesc":"決済チャネルを追加して支払いの受け付けを始めましょう。","payments.selectProvider":"プロバイダーを選択...","payments.testMode":"テストモード(サンドボックス)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"マーチャントID","payments.fPrivateKey":"RSA 秘密鍵","payments.fSerialNo":"証明書シリアル番号","payments.fWebhookSecret":"Webhook 署名シークレット","payments.fAlipayPublicKey":"Alipay 公開鍵","payments.fPlatformCert":"プラットフォーム証明書 (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"通知 URL","payments.phSk":"sk_live_... または sk_test_...","payments.phRsaKey":"RSA 秘密鍵を貼り付け(PEM または Base64)","payments.phUrl":"https://...","payments.editChannel":"チャンネル編集","payments.leaveBlankToKeep":"空白で現在の値を維持","layout.paymentOrders":"決済注文","paymentOrders.title":"決済注文","paymentOrders.orderId":"注文","paymentOrders.title_col":"タイトル","paymentOrders.amount":"金額","paymentOrders.provider":"プロバイダー","paymentOrders.noOrders":"決済注文がありません","paymentOrders.noOrdersDesc":"顧客が支払いを行うと、ここに表示されます。","paymentOrders.refund":"返金","paymentOrders.refundTitle":"返金","paymentOrders.refundOrder":"返金注文","paymentOrders.refundAmount":"返金額","paymentOrders.refundReason":"理由","paymentOrders.refundSuccess":"返金を送信しました","paymentOrders.refundFailed":"返金に失敗しました","layout.paymentTransactions":"決済トランザクション","paymentTransactions.title":"決済トランザクション","paymentTransactions.orderId":"注文","paymentTransactions.type":"タイプ","paymentTransactions.amount":"金額","paymentTransactions.providerTxId":"プロバイダー取引ID","paymentTransactions.noTransactions":"トランザクションがありません","paymentTransactions.noTransactionsDesc":"決済イベントが発生すると、ここに表示されます。","currencies.title":"通貨","currencies.newCurrency":"新規通貨","currencies.code":"コード","currencies.name":"名前","currencies.decimals":"小数桁","currencies.active":"有効","currencies.currencyCreated":"通貨を作成しました","currencies.currencyUpdated":"通貨を更新しました","currencies.failedToCreate":"通貨の作成に失敗しました","currencies.failedToUpdate":"通貨の更新に失敗しました","currencies.noCurrencies":"通貨がありません","currencies.noCurrenciesDesc":"通貨を追加してマルチ通貨対応を有効にしましょう。","wallets.title":"ウォレット","wallets.user":"ユーザー","wallets.currency":"通貨","wallets.balance":"残高","wallets.frozen":"凍結","wallets.credit":"入金","wallets.debit":"出金","wallets.transactions":"取引履歴","wallets.amount":"金額","wallets.type":"タイプ","wallets.reference":"参照","wallets.creditTitle":"ウォレットに入金","wallets.debitTitle":"ウォレットから出金","wallets.userId":"ユーザーID","wallets.remark":"備考","wallets.creditSuccess":"ウォレットに入金しました","wallets.debitSuccess":"ウォレットから出金しました","wallets.failedToCredit":"ウォレットへの入金に失敗しました","wallets.failedToDebit":"ウォレットからの出金に失敗しました","wallets.noWallets":"ウォレットがありません","wallets.noWalletsDesc":"ユーザーが最初の取引を行うとウォレットが作成されます。","wallets.noTransactions":"取引履歴がまだありません。","adminLogin.title":"管理パネル","adminLogin.subtitle":"管理者の認証情報でサインインしてください","adminLogin.email":"メールアドレス","adminLogin.password":"パスワード","adminLogin.submit":"サインイン","adminLogin.loading":"サインイン中…","adminLogin.error":"メールアドレスまたはパスワードが正しくありません","adminLogin.footer":"RaisFast Admin — 承認された担当者のみ","adminLogin.sessionExpired":"セッションの有効期限が切れました。再度サインインしてください。","setup.title":"セットアップウィザード","setup.subtitle":"RaisFastインスタンスを準備しましょう","setup.failedToFetch":"システム状態の取得に失敗しました","setup.step.check":"確認","setup.step.database":"データベース","setup.step.admin":"管理者","setup.check.title":"システムチェック","setup.check.desc":"環境が準備できているか確認しています","setup.check.database":"データベース","setup.check.connected":"接続済み","setup.check.disconnected":"未接続","setup.check.storage":"ファイルストレージ","setup.check.extensions":"拡張ディレクトリ","setup.check.writable":"書き込み可能","setup.check.notWritable":"書き込み不可","setup.check.adminUser":"管理者ユーザー","setup.check.adminExists":"存在します","setup.check.adminNeeded":"未作成","setup.check.next":"次へ:データベース設定","setup.check.nextAdmin":"次へ:管理者を作成","setup.database.title":"データベース設定","setup.database.desc":"データベースに接続します","setup.database.path":"データベースファイルパス","setup.database.pathHint":"作業ディレクトリからの相対パス","setup.database.connectionString":"接続文字列","setup.database.manualInput":"手動入力","setup.database.url":"データベースURL","setup.database.urlHint":"プロバイダーから提供された接続URLを貼り付けてください(Supabase、Neonなど)","setup.database.host":"ホスト","setup.database.port":"ポート","setup.database.username":"ユーザー名","setup.database.password":"パスワード","setup.database.name":"データベース名","setup.database.testConnection":"接続テスト","setup.database.testing":"テスト中...","setup.database.testSuccess":"接続成功!","setup.database.testFailed":"接続失敗","setup.database.saveAndRestart":"保存して再起動","setup.database.saving":"保存中...","setup.database.connectionError":"接続エラー","setup.database.failedToSave":"データベース設定の保存に失敗しました","setup.restarting.title":"再起動中...","setup.restarting.desc":"新しいデータベース設定でサーバーを再起動しています。お待ちください。","setup.admin.title":"管理者アカウントの作成","setup.admin.desc":"インスタンスの最初の管理者を設定します","setup.admin.username":"ユーザー名","setup.admin.email":"メール","setup.admin.password":"パスワード","setup.admin.passwordHint":"8文字以上、大文字・小文字・数字をすべて含めてください","setup.admin.confirmPassword":"パスワード確認","setup.admin.create":"管理者を作成してログイン","setup.admin.creating":"作成中...","setup.adminCreated":"管理者アカウントが作成されました!","setup.failedToCreateAdmin":"管理者アカウントの作成に失敗しました","setup.done.title":"完了!","setup.done.desc":"RaisFastインスタンスの準備が整いました。管理者アカウントは既に存在します。","setup.done.goToLogin":"ログインへ","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"連携","layout.channels":"チャネル","layout.receipts":"受信記録","layout.apiClients":"API クライアント","common.reset":"リセット","common.close":"閉じる","integration.newChannel":"チャネルを作成","integration.editChannel":"チャネルを編集","integration.channelKey":"チャネルキー","integration.displayName":"表示名","integration.provider":"プロバイダー","integration.mode":"モード","integration.transport":"トランスポート","integration.framing":"フレーミング","integration.endpoint":"エンドポイント","integration.verifyKind":"検証方式","integration.verifyConfig":"検証設定(JSON)","integration.credentials":"認証情報(JSON)","integration.credentialsKeepHint":"空欄で密封済み認証情報を保持","integration.mapping":"マッピング(JSONPath)","integration.pullConfig":"プル設定(JSON)","integration.streamConfig":"ストリーム設定(JSON)","integration.targetType":"ターゲットコンテンツタイプ","integration.routeExtra":"ルート拡張(JSON)","integration.redeliveryMax":"最大再配送回数","integration.stack":"スタック","integration.noChannels":"連携チャネルがありません","integration.noChannelsDesc":"チャネルを追加すると受信 webhook・ストリーム・ポーリングを開始できます。","integration.channelCreated":"チャネルを作成しました","integration.channelUpdated":"チャネルを更新しました","integration.channelDeleted":"チャネルを削除しました","integration.failedToCreate":"作成に失敗しました","integration.failedToUpdate":"更新に失敗しました","integration.failedToDelete":"削除に失敗しました","integration.failedToTest":"テストに失敗しました","integration.confirmDeleteChannel":"チャネル「{key}」を削除しますか?受信記録は監査用に保持されます。","integration.testMapping":"マッピングをテスト","integration.sampleBody":"サンプルリクエスト本文","integration.preview":"正規化エンベローププレビュー","integration.runTest":"実行","integration.hasCredentials":"認証情報はボールトに密封済み","integration.allChannels":"すべてのチャネル","integration.allStatuses":"すべてのステータス","integration.traceIdFilter":"Trace ID で絞り込み…","integration.noReceipts":"受信記録がありません","integration.noReceiptsDesc":"受信配送はここに完全なトレース付きで表示されます。","integration.receivedAt":"受信日時","integration.attempts":"試行回数","integration.nextRetryAt":"次回リトライ","integration.noSteps":"ステップ記録なし","integration.pending":"待機中","integration.receiptInfo":"レシート","integration.trace":"トレース","integration.complete":"完了","integration.firstPass":"初回パイプライン","integration.asyncChain":"非同期チェーン","integration.envelopeSnapshot":"エンベロープスナップショット","integration.fullSteps":"ステップタイムライン全体","integration.egressCalls":"送信呼び出し","integration.noEgress":"送信呼び出しなし","integration.noEgressDesc":"このレシートがトリガーした送信呼び出しがここに表示されます。","integration.replayed":"リプレイしました","integration.dryRunDone":"ドライラン完了 — レポートはトレースで確認","integration.failedToReplay":"リプレイに失敗しました","integration.replay":"リプレイ","integration.dryRunReplay":"ドライランリプレイ","integration.replayConfirmTitle":"このレシートをリプレイしますか?","integration.replayConfirmDesc":"保存済みエンベロープスナップショットからルート段階を再実行します(external_id で upsert)。","integration.receiptNotFound":"レシートが見つかりません","integration.newClient":"API クライアントを作成","integration.editClient":"API クライアントを編集","integration.clientKey":"クライアントキー","integration.baseUrl":"ベース URL","integration.authConfig":"認証設定(JSON)","integration.rateLimit":"レート制限(JSON)","integration.ops":"操作(JSON)","integration.opsCount":"操作数","integration.noClients":"API クライアントがありません","integration.noClientsDesc":"宣言型 API クライアントを追加して外部 API を送信呼び出しします。","integration.clientCreated":"API クライアントを作成しました","integration.clientUpdated":"API クライアントを更新しました","integration.clientDeleted":"API クライアントを削除しました","integration.confirmDeleteClient":"API クライアント「{key}」を削除しますか?","integration.testCall":"テスト呼び出し","integration.selectOp":"操作を選択","integration.input":"入力(JSON)","integration.result":"結果","integration.allClients":"すべてのクライアント","integration.egressLog":"送信ログ","integration.latency":"レイテンシ","integration.createdAt":"作成日時","integration.basicInfo":"基本情報","integration.trustSection":"トラスト(L0)","integration.normalizeSection":"正規化(L2)","integration.routingSection":"ルーティングと信頼性(L3/L4)","integration.presetTitle":"プリセットから開始","integration.presetPlaceholder":"実戦検証済みの構成を選択…","integration.presetHint":"フォーム全体を自動入力します。キー・シークレット・ターゲットCTは後で調整してください。実例(GitHub / Feishu / DingTalk)ベース。","integration.presetApplied":"プリセット適用済み — 確認して調整してください","integration.jsonInvalid":"JSON が無効です","integration.insertExample":"例を挿入","integration.presetGeneric":"汎用 Webhook(検証なし)","integration.presetGenericDesc":"シンプルな push + JSONPath マッピング","integration.presetHmac":"HMAC Webhook","integration.presetHmacDesc":"push + hmac-sha256 署名検証","integration.presetGithub":"GitHub Webhook","integration.presetGithubDesc":"x-hub-signature-256、delivery GUID 冪等","integration.presetShopify":"Shopify Webhook","integration.presetShopifyDesc":"base64 HMAC、webhook-id 冪等","integration.presetDingtalk":"DingTalk Stream ボット","integration.presetDingtalkDesc":"ws ストリーム + dispatch フレーミング + pre_connect","integration.presetFeishu":"Feishu ボット(長接続)","integration.presetFeishuDesc":"ws ストリーム + pb-frame + oauth ハンドシェイク","integration.presetPull":"HTTP ポーリング(cursor)","integration.presetPullDesc":"pull + since_id ページング + チェックポイント","integration.presetImap":"IMAP メールボックス(ネイティブ)","integration.presetImapDesc":"pull + imap + mime、mark-read セマンティクス、IDLE 対応"},zC={"layout.brand":"RaisFast","layout.adminPanel":"관리자 패널","layout.dashboard":"대시보드","layout.content":"콘텐츠","layout.extension":"확장","layout.system":"시스템","layout.posts":"게시물","layout.categories":"카테고리","layout.tags":"태그","layout.comments":"댓글","layout.media":"미디어","layout.contentTypes":"콘텐츠 유형","layout.users":"사용자","layout.plugins":"플러그인","layout.rolesPermissions":"역할 및 권한","layout.cron":"Cron","layout.tenants":"테넌트","layout.webhooks":"Webhook","layout.apiTokens":"API 토큰","layout.workflows":"워크플로우","layout.auditLog":"감사 로그","layout.options":"옵션","layout.tenant":"테넌트","layout.clearTenant":"테넌트 필터 초기화","layout.all":"전체","layout.accessDenied":"접근 거부","layout.accessDeniedMsg":"작성자 또는 관리자로 로그인해야 이 영역에 접근할 수 있습니다.","layout.goToLogin":"로그인으로 이동","layout.toggleTheme":"테마 전환","layout.signOut":"로그아웃","layout.profile":"프로필","common.loading":"로딩 중...","common.save":"저장","common.cancel":"취소","common.ok":"확인","common.create":"만들기","common.creating":"생성 중...","common.saving":"저장 중...","common.delete":"삭제","common.confirmDeleteTitle":"삭제 확인","common.edit":"수정","common.content":"콘텐츠","common.remove":"제거","common.view":"보기","common.back":"뒤로","common.actions":"작업","common.status":"상태","common.retry":"재시도","common.previous":"이전","common.next":"다음","common.pageOf":"{total}페이지 중 {page}페이지","common.noData":"데이터 없음","common.all":"전체","common.draft":"임시저장","common.published":"게시됨","common.archived":"보관됨","common.enabled":"활성화","common.disabled":"비활성화","common.name":"이름","common.description":"설명","common.enabledCount":"{count}개 활성화","common.disabledCount":"{count}개 비활성화","common.adminOnly":"관리자 전용","common.adminOnlyMsg":"관리자만 이 섹션을 관리할 수 있습니다.","common.backToDashboard":"대시보드로 돌아가기","common.confirmDelete":"이 항목을 삭제하시겠습니까?","common.notFound":"찾을 수 없음","common.failedToLoad":"로딩 실패","common.selectStatus":"상태 선택","common.titleRequired":"제목은 필수입니다","common.contentRequired":"내용은 필수입니다","common.nameRequired":"이름은 필수입니다","common.invalidJson":"잘못된 JSON 형식입니다","common.isRequired":"{field}은(는) 필수입니다","common.created":"{name}이(가) 생성되었습니다","common.updated":"{name}이(가) 수정되었습니다","common.deleted":"{name}이(가) 삭제되었습니다","common.failedToCreate":"{name} 생성에 실패했습니다","common.failedToUpdate":"{name} 수정에 실패했습니다","common.failedToDelete":"{name} 삭제에 실패했습니다","common.none":"없음","common.noDependencies":"종속성 없음","dashboard.title":"대시보드","dashboard.posts":"게시물","dashboard.comments":"댓글","dashboard.categories":"카테고리","dashboard.tags":"태그","dashboard.media":"미디어","dashboard.users":"사용자","dashboard.contentTypes":"콘텐츠 유형","dashboard.postsLast14Days":"게시물 (최근 14일)","dashboard.ordersAndProducts14Days":"주문 및 상품 (최근 14일)","dashboard.viewAll":"전체 보기","dashboard.failedToLoad":"대시보드 통계를 불러오지 못했습니다. 데이터가 최신이 아닐 수 있습니다.","dashboard.noDataYet":"아직 데이터가 없습니다.","dashboard.recentActivity":"최근 활동","dashboard.noActivity":"아직 활동이 없습니다.","dashboard.type":"유형","dashboard.detail":"상세","dashboard.time":"시간","dashboard.post":"게시물","dashboard.comment":"댓글","dashboard.product":"상품","dashboard.order":"주문","dashboard.products":"상품","dashboard.orders":"주문","dashboard.revenue":"수익","dashboard.coupons":"쿠폰","dashboard.orderStatus":"주문 상태","dashboard.justNow":"방금","dashboard.minutesAgo":"분 전","dashboard.hoursAgo":"시간 전","dashboard.daysAgo":"일 전","posts.title":"게시물","posts.newPost":"새 게시물","posts.editPost":"게시물 수정","posts.postTitle":"게시물 제목","posts.titleCol":"제목","posts.categoryCol":"카테고리","posts.authorCol":"작성자","posts.createdCol":"작성일","posts.allStatus":"전체 상태","posts.searchPlaceholder":"게시물 검색...","posts.content":"내용","posts.excerpt":"요약","posts.briefSummary":"간단한 요약 (선택)","posts.coverImage":"커버 이미지","posts.writeContent":"Markdown으로 게시물 내용을 작성하세요...","posts.selectCategory":"카테고리 선택","posts.tags":"태그","posts.slug":"Slug","posts.slugPlaceholder":"비어있으면 제목에서 자동 생성","posts.noTags":"사용 가능한 태그가 없습니다","posts.addTag":"태그 추가...","posts.createTag":"생성","posts.createPost":"게시물 만들기","posts.saveChanges":"변경사항 저장","posts.postCreated":"게시물이 생성되었습니다","posts.postUpdated":"게시물이 수정되었습니다","posts.postDeleted":"게시물이 삭제되었습니다","posts.failedToCreate":"게시물 생성에 실패했습니다","posts.failedToUpdate":"게시물 수정에 실패했습니다","posts.failedToDelete":"게시물 삭제에 실패했습니다","posts.confirmDelete":"이 게시물을 삭제하시겠습니까?","posts.confirmBatchDelete":"{count}개의 게시물을 삭제하시겠습니까?","posts.batchPublish":"게시","posts.batchUnpublish":"게시 취소","posts.batchSuccess":"{count}개의 게시물이 업데이트됨","posts.noPosts":"게시물이 없습니다.","posts.noPostsDesc":"첫 번째 블로그 게시물을 작성하여 아이디어를 공유하세요.","posts.failedToLoad":"게시물을 불러오지 못했습니다.","categories.title":"카테고리","categories.newCategory":"새 카테고리","categories.createCategory":"게시물 정리를 위한 새 카테고리를 만드세요.","categories.categoryName":"카테고리 이름","categories.optionalDesc":"설명 (선택)","categories.sortOrder":"정렬 순서","categories.slug":"Slug","categories.categoryCreated":"카테고리가 생성되었습니다","categories.categoryUpdated":"카테고리가 수정되었습니다","categories.categoryDeleted":"카테고리가 삭제되었습니다","categories.failedToCreate":"카테고리 생성에 실패했습니다","categories.failedToUpdate":"카테고리 수정에 실패했습니다","categories.failedToDelete":"카테고리 삭제에 실패했습니다","categories.confirmDelete":"이 카테고리를 삭제하시겠습니까?","categories.confirmDeleteTitle":"카테고리 삭제","categories.noCategories":"카테고리 없음","categories.noCategoriesDesc":"카테고리로 게시물을 정리하세요.","categories.treeTitle":"카테고리","categories.selectCategory":"카테고리를 선택하여 상세 보기","categories.addChild":"하위 추가","categories.parent":"상위 카테고리","categories.noParent":"상위 없음","categories.editCategory":"카테고리 편집","categories.cannotDeleteHasChildren":"이 카테고리에는 {count}개의 하위 카테고리가 있어 삭제할 수 없습니다. 먼저 이동하거나 삭제해 주세요.","categories.coverImage":"표지 이미지","tags.title":"태그","tags.newTag":"새 태그","tags.createTag":"게시물을 위한 새 태그를 만드세요.","tags.tagName":"태그 이름","tags.tagCreated":"태그가 생성되었습니다","tags.tagUpdated":"태그가 수정되었습니다","tags.tagDeleted":"태그가 삭제되었습니다","tags.failedToCreate":"태그 생성에 실패했습니다","tags.failedToUpdate":"태그 수정에 실패했습니다","tags.failedToDelete":"태그 삭제에 실패했습니다","tags.confirmDelete":"이 태그를 삭제하시겠습니까?","tags.noTags":"태그가 없습니다.","tags.noTagsDesc":"태그를 추가하여 콘텐츠를 정리하고 필터링하세요.","comments.title":"댓글","comments.total":"총 {count}개","comments.all":"전체","comments.pending":"대기 중","comments.approved":"승인됨","comments.rejected":"거부됨","comments.spam":"스팸","comments.approve":"승인","comments.reject":"거부","comments.author":"작성자","comments.contentCol":"내용","comments.post":"게시물","comments.date":"날짜","comments.selected":"{count}개 선택됨","comments.commentStatusUpdated":"댓글 상태가 변경되었습니다","comments.commentDeleted":"댓글이 삭제되었습니다","comments.bulkActionDone":"{count}개의 댓글이 {status} 처리되었습니다","comments.bulkDeleted":"{count}개의 댓글이 삭제되었습니다","comments.bulkActionFailed":"일괄 작업에 실패했습니다","comments.bulkDeleteFailed":"일괄 삭제에 실패했습니다","comments.failedToUpdateStatus":"상태 변경에 실패했습니다","comments.failedToDelete":"댓글 삭제에 실패했습니다","comments.confirmDelete":"이 댓글을 삭제하시겠습니까?","comments.confirmBulkDelete":"선택한 {count}개의 댓글을 삭제하시겠습니까?","comments.noComments":"댓글이 없습니다.","comments.noCommentsDesc":"독자가 참여하기 시작하면 댓글이 여기에 표시됩니다.","contentTypes.title":"콘텐츠 유형","contentTypes.noFields":"이 콘텐츠 유형에 편집 가능한 필드가 없습니다.","contentTypes.createContentType":"콘텐츠 유형 만들기","contentTypes.builder":"빌더","contentTypes.noContentTypes":"콘텐츠 유형이 아직 없습니다","contentTypes.noContentTypesDesc":"첫 번째 콘텐츠 유형을 만들어 CMS 구축을 시작하세요.","contentTypes.contentTypeDeleted":"콘텐츠 유형이 삭제되었습니다","contentTypes.failedToDelete":"삭제에 실패했습니다","contentTypes.confirmDelete":'콘텐츠 유형 "{singular}"을(를) 삭제하시겠습니까? 스키마 파일은 삭제되지만 데이터베이스 테이블은 유지됩니다.',"contentTypes.notFound":"콘텐츠 유형을 찾을 수 없음","contentTypes.notFoundMsg":'콘텐츠 유형 "{singular}"을(를) 찾을 수 없습니다.',"contentTypes.itemDeleted":"항목이 삭제되었습니다","contentTypes.failedToDeleteItem":"항목 삭제에 실패했습니다","contentTypes.confirmDeleteItem":"이 항목을 삭제하시겠습니까?","contentTypes.batchDeleteSuccess":"{count}개 항목을 삭제했습니다","contentTypes.confirmBatchDelete":"{count}개 항목을 삭제하시겠습니까?","contentTypes.export":"내보내기","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count}개 항목을 내보냈습니다","contentTypes.import":"가져오기","contentTypes.importJson":"JSON 가져오기","contentTypes.importCsv":"CSV 가져오기","contentTypes.importExcel":"Excel 가져오기","contentTypes.importSuccess":"{count}개 레코드를 가져왔습니다","contentTypes.importPartial":"{ok}개 성공, {failed}개 실패","contentTypes.importEmpty":"파일에 가져올 레코드가 없습니다","contentTypes.importTooMany":"레코드 수가 한도를 초과했습니다(최대 {max})","contentTypes.importFailed":"가져오기 실패","contentTypes.importTooLarge":"파일이 8MB 제한을 초과했습니다","contentTypes.noItems":"항목이 없습니다.","contentTypes.noItemsDesc":"첫 번째 항목을 만들어 이 컬렉션을 채우세요.","contentTypes.newItem":"새 {name}","contentTypes.editItem":"{name} 수정","contentTypes.itemNotFound":"항목을 찾을 수 없습니다.","contentTypes.fields":"{count}개 필드","contentTypes.fieldsLabel":"필드","contentTypes.totalRecords":"{count}개 레코드","contentTypes.createdAt":"생성 시간","contentTypes.updatedAt":"수정 시간","users.title":"사용자","users.newUser":"새 사용자","users.createUser":"사용자 만들기","users.registerNew":"새 사용자 계정을 등록하세요.","users.username":"사용자 이름","users.email":"이메일","users.password":"비밀번호","users.minChars":"최소 8자, 대문자·소문자·숫자를 모두 포함해야 합니다","users.role":"역할","users.joined":"가입일","users.editRole":"사용자 역할 수정","users.editUser":"사용자 편집","users.changeRoleFor":"{username} ({email})의 역할 변경","users.reader":"독자","users.author":"작성자","users.admin":"관리자","users.active":"활성","users.suspended":"정지","users.banned":"차단","users.newPassword":"새 비밀번호","users.userCreated":"사용자가 생성되었습니다","users.userUpdated":"사용자 업데이트됨","users.userRoleUpdated":"사용자 역할이 변경되었습니다","users.failedToCreate":"사용자 생성에 실패했습니다","users.failedToUpdate":"사용자 수정에 실패했습니다","users.noUsers":"사용자가 없습니다.","users.noUsersDesc":"사용자를 초대하고 역할을 관리하세요.","users.registeredVia":"가입 경로","users.userDeleted":"사용자 삭제됨","users.failedToDelete":"사용자 삭제 실패","users.confirmDeleteUser":'사용자 "{username}"을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.',"webhooks.title":"Webhook","webhooks.newWebhook":"새 Webhook","webhooks.createWebhook":"이벤트 알림을 받기 위한 새 Webhook 구독을 만드세요.","webhooks.callbackUrl":"콜백 URL","webhooks.eventsComma":"이벤트 (쉼표로 구분)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"*를 사용하여 모든 이벤트를 구독하세요","webhooks.descriptionOptional":"설명 (선택)","webhooks.urlCol":"URL","webhooks.events":"이벤트","webhooks.webhookCreated":"Webhook이 생성되었습니다","webhooks.webhookUpdated":"Webhook이 수정되었습니다","webhooks.webhookDeleted":"Webhook이 삭제되었습니다","webhooks.failedToCreate":"Webhook 생성에 실패했습니다","webhooks.failedToUpdate":"Webhook 수정에 실패했습니다","webhooks.failedToDelete":"Webhook 삭제에 실패했습니다","webhooks.confirmDelete":"이 Webhook 구독을 삭제하시겠습니까?","webhooks.noWebhooks":"Webhook이 없습니다.","webhooks.noWebhooksDesc":"실시간 이벤트 알림을 받으려면 Webhook을 설정하세요.","tokens.title":"API 토큰","tokens.newToken":"새 토큰","tokens.createToken":"API 토큰 만들기","tokens.createTokenDesc":"새 개인 액세스 토큰을 생성합니다. 토큰 값은 한 번만 표시됩니다.","tokens.scopesComma":"스코프 (쉼표로 구분)","tokens.expiresOptional":"만료일 (선택)","tokens.tokenCreated":"토큰이 생성되었습니다","tokens.tokenRevoked":"토큰이 폐기되었습니다","tokens.failedToCreate":"토큰 생성에 실패했습니다","tokens.failedToRevoke":"토큰 폐기에 실패했습니다","tokens.confirmRevoke":'토큰 "{name}"을(를) 폐기하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"tokens.tokenCopied":"토큰이 클립보드에 복사되었습니다","tokens.tokenCreatedCopy":"토큰 생성됨 — 지금 복사하세요!","tokens.copied":"복사됨","tokens.copy":"복사","tokens.dismiss":"닫기","tokens.notShownAgain":"이 토큰은 다시 표시되지 않습니다. 안전하게 보관하세요.","tokens.scopesCol":"스코프","tokens.expiresCol":"만료","tokens.lastUsed":"마지막 사용","tokens.never":"없음","tokens.noTokens":"API 토큰이 없습니다. 시작하려면 하나 만드세요.","tokens.noTokensDesc":"프로그래밍 방식 액세스를 위한 API 토큰을 만드세요.","tokens.description":"설명","workflows.title":"워크플로우","workflows.instances":"인스턴스","workflows.visualEditor":"시각 편집기","workflows.newWorkflow":"새 워크플로우","workflows.createWorkflow":"워크플로우 만들기","workflows.createWorkflowDesc":"단계가 있는 새 워크플로우를 정의합니다. 단계는 JSON으로 구성됩니다.","workflows.stepsJson":"단계 (JSON)","workflows.stepFormat":'각 단계: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"워크플로우가 생성되었습니다","workflows.workflowDeleted":"워크플로우가 삭제되었습니다","workflows.failedToCreate":"워크플로우 생성에 실패했습니다","workflows.failedToDelete":"워크플로우 삭제에 실패했습니다","workflows.confirmDelete":'워크플로우 "{name}"을(를) 삭제하시겠습니까?',"workflows.noWorkflows":"워크플로우가 없습니다. 시작하려면 하나 만드세요.","workflows.noWorkflowsDesc":"콘텐츠 파이프라인을 자동화하는 워크플로우를 정의하세요.","workflows.steps":"{count}단계","workflows.workflowStarted":"워크플로우가 시작되었습니다","workflows.editor.title":"워크플로우 편집기","workflows.editor.newWorkflow":"새 워크플로우","workflows.editor.stepName":"단계 이름","workflows.editor.branchesJson":"분기 (JSON 배열)","workflows.editor.connectEdges":"분기를 정의하려면 이 노드에서 간선을 연결하세요.","workflows.editor.configJson":"설정 (JSON)","workflows.editor.apply":"적용","workflows.editor.deleteStep":"단계 삭제","workflows.editor.addStep":"단계 추가","workflows.editor.invalidJson":"설정에 잘못된 JSON 형식이 있습니다","workflows.editor.workflowSaved":"워크플로우가 저장되었습니다","workflows.editor.failedToSave":"워크플로우 저장에 실패했습니다","audit.title":"감사 로그","audit.clearFilters":"필터 초기화","audit.noLogs":"감사 로그 항목이 없습니다.","audit.action":"작업","audit.actor":"실행자","audit.resource":"리소스","audit.timestamp":"시간","options.title":"옵션","options.saved":"옵션이 저장되었습니다","options.failedToSave":"옵션 저장에 실패했습니다","plugins.title":"플러그인","plugins.loaded":"{count}개 로드됨","plugins.plugin":"플러그인","plugins.runtime":"런타임","plugins.hooks":"훅","plugins.health":"상태","plugins.pluginEnabled":"플러그인이 활성화되었습니다","plugins.pluginDisabled":"플러그인이 비활성화되었습니다","plugins.pluginReloaded":"플러그인이 새로고침되었습니다","plugins.pluginRemoved":"플러그인이 제거되었습니다","plugins.failedToEnable":"플러그인 활성화에 실패했습니다","plugins.failedToDisable":"플러그인 비활성화에 실패했습니다","plugins.failedToReload":"플러그인 새로고침에 실패했습니다","plugins.failedToRemove":"플러그인 제거에 실패했습니다","plugins.noPlugins":"로드된 플러그인이 없습니다.","plugins.placePlugins":"설정된 플러그인 디렉터리에 플러그인을 배치하세요.","plugins.confirmRemove":'플러그인 "{name}"을(를) 제거하시겠습니까? 메모리에서 언로드됩니다.',"plugins.autoDisabled":"자동 비활성화됨","plugins.tooManyErrors":"오류가 너무 많습니다","plugins.errorCount":"{count}개 오류","plugins.errorsOccurred":"오류가 발생했습니다","plugins.calls":"{count}회 호출","plugins.idle":"대기 중","plugins.notFound":"플러그인을 찾을 수 없음","plugins.notFoundMsg":"플러그인을 찾을 수 없습니다.","plugins.backToPlugins":"플러그인 목록으로","plugins.general":"일반","plugins.version":"버전","plugins.reload":"새로고침","plugins.remove":"제거","plugins.errorTracking":"오류 추적 및 자동 비활성화 상태","plugins.healthy":"정상","plugins.errorCountLabel":"오류 수","plugins.lastError":"마지막 오류","plugins.lastErrorAt":"마지막 오류 발생 시간","plugins.autoDisabledLabel":"자동 비활성화","plugins.permissions":"권한","permissions.declaredFromManifest":"플러그인 매니페스트에 선언된 권한","plugins.hooksTitle":"훅","plugins.hooksDesc":"등록된 훅 지점과 실행 메트릭","plugins.noHooks":"등록된 훅이 없습니다.","plugins.totalCalls":"총 호출","plugins.totalErrors":"총 오류","plugins.totalDuration":"총 소요 시간","plugins.noMetrics":"아직 메트릭이 없습니다","plugins.performance":"성능 개요","plugins.maxMemory":"최대 메모리","plugins.timeout":"시간 초과","plugins.default":"기본값","media.title":"미디어","media.files":"{count}개 파일","media.searchFiles":"파일 검색...","media.fileDeleted":"파일이 삭제되었습니다","media.failedToDelete":"파일 삭제에 실패했습니다","media.confirmDelete":"이 파일을 삭제하시겠습니까?","media.date":"날짜","media.size":"크기","media.ascending":"오름차순","media.descending":"내림차순","field.mediaUrl":"미디어 URL","field.startWriting":"작성을 시작하세요...","field.yes":"예","field.no":"아니요","field.relatedItemId":"관련 항목 ID","cron.title":"Cron 작업","cron.newCron":"새 Cron 작업","cron.expression":"표현식","cron.handler":"핸들러","cron.lastRun":"마지막 실행","cron.nextRun":"다음 실행","cron.cronCreated":"Cron 작업이 생성되었습니다","cron.cronDeleted":"Cron 작업이 삭제되었습니다","cron.failedToCreate":"Cron 작업 생성에 실패했습니다","cron.failedToDelete":"Cron 작업 삭제에 실패했습니다","cron.noCrons":"Cron 작업이 없습니다.","cron.confirmDelete":'Cron 작업 "{name}"을(를) 삭제하시겠습니까?',"tenants.title":"테넌트","tenants.newTenant":"새 테넌트","tenants.createTenant":"멀티 테넌트 격리를 위한 새 테넌트를 만드세요.","tenants.tenantName":"테넌트 이름","tenants.slug":"Slug","tenants.domain":"도메인","tenants.owner":"소유자","tenants.tenantCreated":"테넌트가 생성되었습니다","tenants.tenantUpdated":"테넌트가 수정되었습니다","tenants.tenantDeleted":"테넌트가 삭제되었습니다","tenants.failedToCreate":"테넌트 생성에 실패했습니다","tenants.failedToUpdate":"테넌트 수정에 실패했습니다","tenants.failedToDelete":"테넌트 삭제에 실패했습니다","tenants.confirmDelete":"이 테넌트를 삭제하시겠습니까?","tenants.noTenants":"테넌트가 없습니다.","tenants.noTenantsDesc":"멀티 테넌트 SaaS를 위해 테넌트를 만드세요.","rbac.title":"역할 및 권한","rbac.roles":"역할","rbac.newRole":"새 역할","rbac.createRole":"접근 제어를 위한 새 역할을 만드세요.","rbac.roleName":"역할 이름","rbac.roleDesc":"역할 설명","rbac.roleCreated":"역할이 생성되었습니다","rbac.roleUpdated":"역할이 수정되었습니다","rbac.roleDeleted":"역할이 삭제되었습니다","rbac.failedToCreate":"역할 생성에 실패했습니다","rbac.failedToUpdate":"역할 수정에 실패했습니다","rbac.failedToDelete":"역할 삭제에 실패했습니다","rbac.confirmDelete":'역할 "{name}"을(를) 삭제하시겠습니까? 관련된 모든 권한이 제거됩니다.',"rbac.systemRole":"시스템","rbac.permissions":"권한","rbac.addPermission":"권한 추가","rbac.action":"작업","rbac.subject":"대상","rbac.noRoles":"역할이 없습니다.","builder.title":"콘텐츠 유형 빌더","builder.editContentType":"콘텐츠 유형 수정","builder.createContentType":"콘텐츠 유형 만들기","builder.baseConfig":"기본 설정","builder.singularName":"단수형 이름","builder.pluralName":"복수형 이름","builder.tableName":"테이블 이름","builder.fieldsSection":"필드","builder.addField":"필드 추가","builder.preview":"미리보기","builder.save":"콘텐츠 유형 저장","builder.saving":"저장 중...","builder.saved":"콘텐츠 유형이 저장되었습니다","builder.failedToSave":"콘텐츠 유형 저장에 실패했습니다","builder.confirmDeleteField":'필드 "{name}"을(를) 삭제하시겠습니까?',"builder.text":"텍스트","builder.richText":"리치 텍스트","builder.email":"이메일","builder.password":"비밀번호","builder.uid":"UID","builder.integer":"정수","builder.bigInt":"BigInt","builder.decimal":"Decimal","builder.float":"Float","builder.boolean":"불리언","builder.date":"날짜","builder.datetime":"날짜/시간","builder.time":"시간","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"관계","builder.mediaType":"미디어","builder.link":"링크","builder.required":"필수","builder.unique":"고유","builder.privateField":"비공개","builder.immutable":"불변","builder.label":"레이블","builder.defaultValue":"기본값","builder.maxLength":"최대 길이","builder.minValue":"최솟값","builder.maxValue":"최댓값","builder.enumValues":"Enum 값 (쉼표로 구분)","builder.relationType":"관계 유형","builder.relationTarget":"대상 테이블","builder.foreignKey":"외래 키","builder.throughTable":"중간 테이블","builder.draftPublish":"임시저장/게시","builder.timestamps":"타임스탬프","builder.softDelete":"소프트 삭제","builder.slugField":"Slug 필드","media.name":"이름","media.type":"유형","media.other":"기타","media.uploadFailed":"업로드 실패","media.dropFiles":"파일을 여기에 드롭하거나 붙여넣기, 또는 {browse}","media.uploading":"{count}개 파일 업로드 중...","media.done":"완료","media.failedUpload":"실패","media.urlCopied":"URL이 복사되었습니다","media.copyUrl":"URL 복사","media.download":"다운로드","media.dimensions":"크기","media.uploaded":"업로드됨","media.urlLabel":"URL","media.noVideoSupport":"브라우저가 비디오를 지원하지 않습니다.","media.downloadFile":"파일 다운로드","workflows.instances.title":"워크플로우 인스턴스","workflows.instances.showLogs":"로그 보기","workflows.instances.hideLogs":"로그 숨기기","workflows.instances.currentStep":"현재","workflows.instances.context":"컨텍스트","workflows.instances.stepLogs":"단계 로그 ({count})","workflows.instances.noStepLogs":"단계 로그가 없습니다.","workflows.instances.noInstances":"워크플로우 인스턴스가 없습니다.","workflows.instances.instanceCount":"{count}개 인스턴스","workflows.instances.definitions":"정의","workflows.instances.filterStatus":"상태 필터","workflows.instances.cancelled":"인스턴스가 취소되었습니다","workflows.editor.editStep":"단계 수정","workflows.editor.name":"이름","workflows.editor.type":"유형","workflows.editor.backToList":"목록으로 돌아가기","workflows.editor.workflowName":"워크플로우 이름...","workflows.editor.failedToLoad":"워크플로우를 불러오지 못했습니다","workflows.editor.immutableNotice":"워크플로우 정의는 변경할 수 없습니다. 단계를 변경하려면 새로 만드세요.","workflows.editor.untitled":"제목 없는 워크플로우","workflows.editor.save":"저장","workflows.editor.saving":"저장 중...","cron.createSchedule":"Cron 스케줄 만들기","cron.labelField":"레이블","cron.jobType":"작업 유형","cron.cronExpression":"Cron 표현식 (7세그먼트)","cron.format":"형식: 초 분 시 일 월 요일","cron.payload":"페이로드 (JSON, 선택)","cron.schedules":"{count}개 스케줄","cron.schedule":"스케줄","cron.pluginCol":"플러그인","cron.scheduleCreated":"스케줄이 생성되었습니다","cron.scheduleToggled":"스케줄이 전환되었습니다","cron.scheduleDeleted":"스케줄이 삭제되었습니다","cron.scheduleUpdated":"스케줄이 수정되었습니다","cron.noCronSchedules":"Cron 스케줄이 없습니다.","cron.seedHint":"위에서 만들거나 CRON_SEED_ENABLED를 활성화하여 기본값을 시드하세요.","cron.confirmDeleteSchedule":'스케줄 "{name}"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"cron.scheduleNotFound":"스케줄을 찾을 수 없음","cron.backToCronSchedules":"Cron 스케줄로 돌아가기","cron.scheduleDetails":"스케줄 상세","cron.cronExpression7":"7세그먼트: 초 분 시 일 월 요일","cron.builtIn":"내장","cron.executionHistory":"실행 기록","cron.recentLogs":"이 스케줄의 최근 실행 로그","cron.cleanupOld":"오래된 항목 정리","cron.cleanedUp":"{count}개의 오래된 로그가 정리되었습니다","cron.noExecutionLogs":"아직 실행 로그가 없습니다.","cron.success":"성공","cron.failedStatus":"실패","cron.running":"실행 중","cron.newSchedule":"새 스케줄","cron.idField":"ID","cron.started":"시작","cron.finished":"완료","cron.duration":"소요 시간","cron.error":"오류","cron.created":"생성일","cron.updated":"수정일","tenants.createForIsolation":"데이터 격리를 위한 새 테넌트를 만드세요.","tenants.cannotDeleteDefault":"기본 테넌트는 삭제할 수 없습니다","tenants.confirmDeleteMsg":"이 테넌트를 삭제하시겠습니까? 이 테넌트의 데이터는 삭제되지 않습니다.","tenants.created":"생성일","rbac.addRoleDesc":"시스템에 새 역할을 추가하세요.","rbac.updateRoleDesc":'"{name}" 역할을 수정합니다.',"rbac.deleteRoleTitle":"역할 삭제","rbac.deleteRoleConfirm":'"{name}"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"rbac.addPermissionTitle":"권한 추가","rbac.addPermissionDesc":'"{name}"에 새 권한을 부여합니다. 와일드카드는 *를 사용하세요.',"rbac.fieldsCol":"필드","rbac.conditionsCol":"조건","rbac.fieldsOptional":"필드 (쉼표로 구분, 선택)","rbac.removePermissionTitle":"권한 제거","rbac.removePermissionDesc":"{subject}에 대한 {action} 권한을 제거하시겠습니까?","rbac.noPermissions":"설정된 권한이 없습니다.","rbac.selectRole":"권한을 보려면 역할을 선택하세요","rbac.prev":"이전","options.noChanges":"변경사항 없음","options.noOptions":"사용 가능한 옵션이 없습니다.","options.reset":"초기화","options.saveChanges":"변경사항 저장","audit.failedToLoad":"감사 로그를 불러오지 못했습니다. 다시 시도해 주세요.","audit.noEntries":"감사 항목이 없습니다.","audit.noEntriesDesc":"작업이 수행되면 감사 항목이 여기에 나타납니다.","audit.timeCol":"시간","audit.subjectId":"대상 ID","audit.detailCol":"상세","audit.system":"시스템","audit.from":"시작","audit.to":"종료","audit.search":"검색","audit.clear":"초기화","audit.today":"오늘","builder.untitled":"제목 없는 콘텐츠 유형","builder.fieldCount":"{count}개 필드","builder.fieldList":"필드 목록","builder.protocols":"프로토콜","builder.systemFields":"시스템 필드","builder.system":"시스템","builder.newField":"새 필드","builder.addAnotherField":"다른 필드 추가","builder.addAField":"필드 추가","builder.chooseFieldType":"콘텐츠 유형에 추가할 필드 유형을 선택하세요.","builder.fieldConfiguration":"필드 설정","builder.fieldName":"필드 이름","builder.fieldTypeLabel":"필드 유형","builder.displayLabel":"표시 레이블","builder.helpText":"도움말 텍스트","builder.removeField":"필드 제거","builder.removeFieldConfirm":"이 필드를 제거하시겠습니까?","builder.noAdditionalOptions":"이 필드 유형에는 추가 옵션이 없습니다.","builder.acceptedTypes":"허용 유형","builder.maxCount":"최대 수","builder.target":"대상","builder.valuesComma":"값 (쉼표로 구분)","builder.describeContentType":"이 콘텐츠 유형을 설명하세요...","builder.contentTypeUpdated":"콘텐츠 유형이 수정되었습니다","builder.contentTypeCreated":"콘텐츠 유형이 생성되었습니다","builder.newFieldCategory":"숫자","layout.crm":"CRM","layout.pages":"페이지","layout.reusableBlocks":"블록","crm.dashboard":"CRM 대시보드","crm.pipeline":"파이프라인","crm.contacts":"연락처","crm.companies":"회사","crm.deals":"거래","crm.activities":"활동","crm.notes":"메모","crm.reports":"보고서","crm.totalCompanies":"전체 회사","crm.totalContacts":"전체 연락처","crm.openDeals":"진행 중인 거래","crm.wonDeals":"성사된 거래","crm.pipelineValue":"파이프라인 가치","crm.weightedValue":"가중치 적용 가치","crm.winRate":"성사율","crm.avgDealSize":"평균 거래 규모","crm.recentActivities":"이번 주 활동","crm.totalActivities":"전체 활동","crm.leaderboard":"리더보드","crm.noData":"데이터가 없습니다.","crm.newDeal":"새 거래","crm.createDeal":"거래 만들기","crm.dealTitle":"제목","crm.dealTitlePlaceholder":"거래 제목을 입력하세요...","crm.amount":"금액","crm.probability":"확률","crm.stage":"단계","crm.advanceStage":"다음 단계로 진행","crm.totalValue":"총 가치","crm.dealCreated":"거래가 생성되었습니다","crm.failedToCreateDeal":"거래 생성에 실패했습니다","crm.dealStageUpdated":"거래 단계가 변경되었습니다","crm.failedToUpdateStage":"단계 변경에 실패했습니다","crm.titleRequired":"제목은 필수입니다","crm.newContact":"새 연락처","crm.editContact":"연락처 수정","crm.contact":"연락처","crm.name":"이름","crm.email":"이메일","crm.phone":"전화번호","crm.company":"회사","crm.source":"출처","crm.lifecycleStage":"라이프사이클 단계","crm.noContacts":"연락처가 없습니다.","crm.firstName":"이름","crm.lastName":"성","crm.jobTitle":"직책","crm.newCompany":"새 회사","crm.editCompany":"회사 수정","crm.companyName":"회사 이름","crm.industry":"업종","crm.size":"규모","crm.website":"웹사이트","crm.city":"도시","crm.country":"국가","crm.noCompanies":"회사가 없습니다.","crm.deal":"거래","crm.editDeal":"거래 수정","crm.closeDate":"마감일","crm.lossReason":"실패 사유","crm.noDeals":"거래가 없습니다.","crm.dealInfo":"거래 정보","crm.newActivity":"새 활동","crm.editActivity":"활동 수정","crm.activity":"활동","crm.type":"유형","crm.subject":"제목","crm.content":"내용","crm.date":"날짜","crm.duration":"소요 시간","crm.outcome":"결과","crm.noActivities":"활동이 없습니다.","crm.newNote":"새 메모","crm.editNote":"메모 수정","crm.note":"메모","crm.relatedTo":"관련 항목","crm.pinned":"고정됨","crm.createdAt":"생성일","crm.noNotes":"메모가 없습니다.","crm.contentRequired":"내용은 필수입니다","crm.relatedContactId":"관련 연락처 ID","crm.relatedCompanyId":"관련 회사 ID","crm.relatedDealId":"관련 거래 ID","crm.contactInfo":"연락처 정보","crm.timeline":"타임라인","crm.noTimeline":"타임라인 이벤트가 없습니다.","crm.addNote":"메모 추가","crm.notePlaceholder":"메모를 입력하세요...","crm.lifecycleUpdated":"라이프사이클 단계가 변경되었습니다","crm.failedToUpdateLifecycle":"라이프사이클 단계 변경에 실패했습니다","crm.companyInfo":"회사 정보","crm.funnelReport":"퍼널 보고서","crm.activityReport":"활동 보고서","crm.conversionRate":"전환율","crm.byType":"유형별","crm.byOutcome":"결과별","pages.title":"페이지","pages.newPage":"새 페이지","pages.editPage":"페이지 수정","pages.pageDeleted":"페이지가 삭제되었습니다","pages.pageCreated":"페이지가 생성되었습니다","pages.pageUpdated":"페이지가 수정되었습니다","pages.failedToDelete":"페이지 삭제에 실패했습니다","pages.failedToCreate":"페이지 생성에 실패했습니다","pages.failedToUpdate":"페이지 수정에 실패했습니다","pages.statusUpdated":"페이지 상태가 변경되었습니다","pages.failedToUpdateStatus":"상태 변경에 실패했습니다","pages.confirmDelete":"이 페이지를 삭제하시겠습니까?","pages.noPages":"페이지가 없습니다.","pages.noPagesDesc":"첫 번째 페이지를 만들어 사이트 구축을 시작하세요.","pages.noBlocks":"재사용 블록이 아직 없습니다.","pages.noBlocksDesc":"페이지에서 사용할 재사용 블록을 만드세요.","pages.publish":"게시","pages.unpublish":"게시 취소","pages.preview":"미리보기","pages.slug":"Slug","pages.template":"템플릿","pages.createdAt":"생성일","pages.basicInfo":"기본 정보","pages.titleLabel":"제목","pages.titlePlaceholder":"페이지 제목을 입력하세요...","pages.coverImage":"표지 이미지","pages.metaTitle":"메타 제목","pages.metaDescription":"메타 설명","pages.ogImage":"OG 이미지","pages.content":"내용","pages.blockMode":"블록","pages.saveDraft":"임시저장","pages.writeContent":"페이지 내용을 작성하세요...","pages.addBlock":"블록 추가","pages.chooseBlock":"블록 유형을 선택하세요","pages.reusableBlocks":"재사용 블록","pages.createReusable":"재사용 블록 만들기","pages.editReusable":"재사용 블록 수정","pages.rbName":"이름","pages.rbType":"블록 유형","pages.rbDescription":"설명","pages.rbContent":"내용","command.search":"검색...","command.placeholder":"명령어를 입력하거나 검색하세요...","command.noResults":"검색 결과가 없습니다.","command.actions":"작업","command.switchToLight":"라이트 모드로 전환","command.switchToDark":"다크 모드로 전환","layout.ecommerce":"이커머스","layout.products":"상품","layout.productCategories":"상품 카테고리","layout.orders":"주문","layout.finance":"재무","layout.currencies":"통화","layout.wallets":"지갑","layout.paymentChannels":"결제 채널","layout.productComments":"리뷰","layout.coupons":"쿠폰","layout.shippingTemplates":"배송 템플릿","products.title":"상품","products.newProduct":"새 상품","products.editProduct":"상품 수정","products.productTitle":"상품명","products.price":"가격","products.originalPrice":"원가","products.stock":"재고","products.sales":"판매량","products.coverUrl":"표지 URL","products.description":"설명","products.content":"내용","products.slug":"Slug","products.status":"상태","products.category":"카테고리","products.unit":"단위","products.minPurchase":"최소 구매 수량","products.maxPurchase":"최대 구매 수량","products.sortOrder":"정렬 순서","products.metaTitle":"메타 제목","products.metaDescription":"메타 설명","products.productCreated":"상품이 생성되었습니다","products.productUpdated":"상품이 수정되었습니다","products.productDeleted":"상품이 삭제되었습니다","products.batchDeleted":"상품 {{count}}개 삭제됨","products.batchSuccess":"상품 {{count}}개 업데이트됨","products.batchActivate":"활성화","products.batchDeactivate":"비활성화","products.failedToCreate":"상품 생성에 실패했습니다","products.failedToUpdate":"상품 수정에 실패했습니다","products.failedToDelete":"상품 삭제에 실패했습니다","products.confirmDelete":"이 상품을 삭제하시겠습니까?","products.confirmBatchDelete":"상품 {{count}}개를 삭제하시겠습니까?","products.noProducts":"상품이 없습니다","products.noProductsDesc":"첫 번째 상품을 만들어 판매를 시작하세요.","products.allStatus":"전체 상태","products.searchPlaceholder":"상품명 검색...","products.active":"활성","products.draft":"임시저장","products.archived":"보관됨","products.general":"기본 정보","products.media":"미디어","products.pricing":"가격 설정","products.purchaseSettings":"구매 설정","products.summary":"요약","products.phTitle":"상품명 입력...","products.phSummary":"상품 간단 설명...","products.images":"상품 이미지","products.cover":"표지","products.dropImages":"이미지를 드롭, 붙여넣기 또는 클릭하여 업로드","productCategories.categoryName":"카테고리 이름","productCategories.newCategory":"새 카테고리","productCategories.createCategory":"카테고리 만들기","productCategories.editCategory":"카테고리 편집","productCategories.optionalDesc":"설명 (선택)","productCategories.parent":"상위 카테고리","productCategories.noParent":"상위 없음","productCategories.sortOrder":"정렬 순서","productCategories.slug":"슬러그","productCategories.noCategories":"카테고리 없음","productCategories.noCategoriesDesc":"첫 상품 카테고리를 만들어 상품을 정리하세요.","productCategories.categoryCreated":"카테고리가 생성되었습니다","productCategories.categoryUpdated":"카테고리가 업데이트되었습니다","productCategories.categoryDeleted":"카테고리가 삭제되었습니다","productCategories.failedToCreate":"카테고리 생성 실패","productCategories.failedToUpdate":"카테고리 업데이트 실패","productCategories.failedToDelete":"카테고리 삭제 실패","productCategories.confirmDelete":"이 카테고리를 삭제하시겠습니까?","productCategories.confirmDeleteTitle":"카테고리 삭제","productCategories.cannotDeleteHasChildren":"이 카테고리에는 {count}개의 하위 카테고리가 있어 삭제할 수 없습니다. 먼저 이동하거나 삭제해 주세요.","productCategories.treeTitle":"카테고리","productCategories.selectCategory":"카테고리를 선택하여 상세 보기","productCategories.addChild":"하위 추가","orders.title":"주문","orders.orderNo":"주문 번호","orders.buyer":"구매자","orders.total":"합계","orders.status":"상태","orders.items":"항목","orders.remark":"참고","orders.adminRemark":"관리자 참고","orders.createdAt":"주문일","orders.actions":"작업","orders.allStatus":"전체 상태","orders.searchPlaceholder":"주문번호, 구매자 이름 검색...","orders.pending":"대기 중","orders.paid":"결제 완료","orders.shipped":"배송 중","orders.completed":"완료","orders.cancelled":"취소됨","orders.refunded":"환불됨","orders.confirmPay":"결제를 확인하시겠습니까?","orders.orderPaid":"주문이 결제 완료로 표시되었습니다","orders.confirmShip":"이 주문을 배송하시겠습니까?","orders.orderShipped":"주문이 배송되었습니다","orders.confirmCancel":"이 주문을 취소하시겠습니까?","orders.orderCancelled":"주문이 취소되었습니다","orders.confirmRefund":"이 주문을 환불하시겠습니까?","orders.orderRefunded":"주문이 환불되었습니다","orders.failedToPay":"결제 완료 표시에 실패했습니다","orders.failedToShip":"배송 처리에 실패했습니다","orders.failedToCancel":"주문 취소에 실패했습니다","orders.failedToRefund":"환불 처리에 실패했습니다","orders.noOrders":"주문이 없습니다","orders.noOrdersDesc":"고객이 구매하면 주문이 여기에 표시됩니다.","orders.trackingNo":"송장 번호","orders.carrier":"배송업체","orders.shipInfo":"배송 정보","orders.buyerInfo":"구매자 정보","orders.shippingAddress":"배송 주소","orders.orderDetail":"주문 상세","orders.stats.totalOrders":"전체 주문","orders.stats.totalRevenue":"총 매출","orders.stats.pending":"대기 중","orders.stats.completed":"완료","orders.stats.todayOrders":"오늘 주문","orders.stats.todayRevenue":"오늘 매출","payments.title":"결제 채널","payments.newChannel":"새 채널","payments.provider":"제공자","payments.name":"채널 이름","payments.mode":"모드","payments.active":"활성","payments.live":"실운영","payments.test":"테스트","payments.credentials":"자격 증명","payments.webhookSecret":"Webhook 시크릿","payments.settings":"설정","payments.channelCreated":"결제 채널이 생성되었습니다","payments.channelUpdated":"결제 채널이 수정되었습니다","payments.channelDeleted":"결제 채널이 삭제되었습니다","payments.failedToCreate":"결제 채널 생성에 실패했습니다","payments.failedToUpdate":"결제 채널 수정에 실패했습니다","payments.failedToDelete":"결제 채널 삭제에 실패했습니다","payments.confirmDelete":"이 결제 채널을 삭제하시겠습니까?","payments.noChannels":"결제 채널이 없습니다","payments.noChannelsDesc":"결제를 시작하려면 결제 채널을 추가하세요.","payments.selectProvider":"제공자 선택...","payments.testMode":"테스트 모드 (샌드박스)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"가맹점 ID","payments.fPrivateKey":"RSA 개인키","payments.fSerialNo":"인증서 일련번호","payments.fWebhookSecret":"Webhook 서명 비밀키","payments.fAlipayPublicKey":"Alipay 공개키","payments.fPlatformCert":"플랫폼 인증서 (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"알림 URL","payments.phSk":"sk_live_... 또는 sk_test_...","payments.phRsaKey":"RSA 개인키 붙여넣기 (PEM 또는 Base64)","payments.phUrl":"https://...","payments.editChannel":"채널 편집","payments.leaveBlankToKeep":"비워두면 현재 값 유지","layout.paymentOrders":"결제 주문","paymentOrders.title":"결제 주문","paymentOrders.orderId":"주문","paymentOrders.title_col":"제목","paymentOrders.amount":"금액","paymentOrders.provider":"제공자","paymentOrders.noOrders":"결제 주문이 없습니다","paymentOrders.noOrdersDesc":"고객이 결제하면 여기에 표시됩니다.","paymentOrders.refund":"환불","paymentOrders.refundTitle":"환불","paymentOrders.refundOrder":"환불 주문","paymentOrders.refundAmount":"환불 금액","paymentOrders.refundReason":"사유","paymentOrders.refundSuccess":"환불이 제출되었습니다","paymentOrders.refundFailed":"환불에 실패했습니다","layout.paymentTransactions":"결제 거래","paymentTransactions.title":"결제 거래","paymentTransactions.orderId":"주문","paymentTransactions.type":"유형","paymentTransactions.amount":"금액","paymentTransactions.providerTxId":"제공자 거래 ID","paymentTransactions.noTransactions":"거래가 없습니다","paymentTransactions.noTransactionsDesc":"결제 이벤트가 발생하면 여기에 표시됩니다.","currencies.title":"통화","currencies.newCurrency":"새 통화","currencies.code":"코드","currencies.name":"이름","currencies.decimals":"소수점 자리","currencies.active":"활성","currencies.currencyCreated":"통화가 생성되었습니다","currencies.currencyUpdated":"통화가 수정되었습니다","currencies.failedToCreate":"통화 생성에 실패했습니다","currencies.failedToUpdate":"통화 수정에 실패했습니다","currencies.noCurrencies":"통화가 없습니다","currencies.noCurrenciesDesc":"다중 통화 지원을 활성화하려면 통화를 추가하세요.","wallets.title":"지갑","wallets.user":"사용자","wallets.currency":"통화","wallets.balance":"잔액","wallets.frozen":"동결","wallets.credit":"입금","wallets.debit":"출금","wallets.transactions":"거래 내역","wallets.amount":"금액","wallets.type":"유형","wallets.reference":"참조","wallets.creditTitle":"지갑 입금","wallets.debitTitle":"지갑 출금","wallets.userId":"사용자 ID","wallets.remark":"참고","wallets.creditSuccess":"지갑에 입금되었습니다","wallets.debitSuccess":"지갑에서 출금되었습니다","wallets.failedToCredit":"지갑 입금에 실패했습니다","wallets.failedToDebit":"지갑 출금에 실패했습니다","wallets.noWallets":"지갑이 없습니다","wallets.noWalletsDesc":"사용자가 첫 거래를 받으면 지갑이 생성됩니다.","wallets.noTransactions":"아직 거래 내역이 없습니다.","adminLogin.title":"관리자 패널","adminLogin.subtitle":"관리자 계정으로 로그인하세요","adminLogin.email":"이메일","adminLogin.password":"비밀번호","adminLogin.submit":"로그인","adminLogin.loading":"로그인 중…","adminLogin.error":"이메일 또는 비밀번호가 올바르지 않습니다","adminLogin.footer":"RaisFast Admin — 승인된 담당자만 접근 가능","adminLogin.sessionExpired":"세션이 만료되었습니다. 다시 로그인해 주세요.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"통합","layout.channels":"채널","layout.receipts":"수신 기록","layout.apiClients":"API 클라이언트","common.reset":"재설정","common.close":"닫기","integration.newChannel":"새 채널","integration.editChannel":"채널 편집","integration.channelKey":"채널 키","integration.displayName":"표시 이름","integration.provider":"공급자","integration.mode":"모드","integration.transport":"전송","integration.framing":"프레이밍","integration.endpoint":"엔드포인트","integration.verifyKind":"검증 방식","integration.verifyConfig":"검증 설정 (JSON)","integration.credentials":"자격 증명 (JSON)","integration.credentialsKeepHint":"비워 두면 봉인된 자격 증명 유지","integration.mapping":"매핑 (JSONPath)","integration.pullConfig":"풀 설정 (JSON)","integration.streamConfig":"스트림 설정 (JSON)","integration.targetType":"대상 콘텐츠 타입","integration.routeExtra":"라우트 확장 (JSON)","integration.redeliveryMax":"최대 재전송 횟수","integration.stack":"스택","integration.noChannels":"통합 채널이 없습니다","integration.noChannelsDesc":"채널을 추가하여 인바운드 webhook, 스트림, 폴링을 시작하세요.","integration.channelCreated":"채널이 생성되었습니다","integration.channelUpdated":"채널이 업데이트되었습니다","integration.channelDeleted":"채널이 삭제되었습니다","integration.failedToCreate":"생성 실패","integration.failedToUpdate":"업데이트 실패","integration.failedToDelete":"삭제 실패","integration.failedToTest":"테스트 실패","integration.confirmDeleteChannel":'채널 "{key}"을(를) 삭제하시겠습니까? 수신 기록은 감사용으로 유지됩니다.',"integration.testMapping":"매핑 테스트","integration.sampleBody":"샘플 요청 본문","integration.preview":"정규화 엔벨로프 미리보기","integration.runTest":"실행","integration.hasCredentials":"자격 증명이 볼트에 봉인됨","integration.allChannels":"모든 채널","integration.allStatuses":"모든 상태","integration.traceIdFilter":"Trace ID로 필터…","integration.noReceipts":"수신 기록이 없습니다","integration.noReceiptsDesc":"인바운드 배달이 전체 트레이스와 함께 여기에 표시됩니다.","integration.receivedAt":"수신 시간","integration.attempts":"시도 횟수","integration.nextRetryAt":"다음 재시도","integration.noSteps":"기록된 단계 없음","integration.pending":"대기 중","integration.receiptInfo":"영수증","integration.trace":"트레이스","integration.complete":"완료","integration.firstPass":"첫 번째 패스","integration.asyncChain":"비동기 체인","integration.envelopeSnapshot":"엔벨로프 스냅샷","integration.fullSteps":"전체 단계 타임라인","integration.egressCalls":"아웃바운드 호출","integration.noEgress":"아웃바운드 호출 없음","integration.noEgressDesc":"이 영수증이 트리거한 아웃바운드 호출이 여기에 표시됩니다.","integration.replayed":"리플레이되었습니다","integration.dryRunDone":"드라이런 완료 — 보고서는 트레이스에서 확인","integration.failedToReplay":"리플레이 실패","integration.replay":"리플레이","integration.dryRunReplay":"드라이런 리플레이","integration.replayConfirmTitle":"이 영수증을 리플레이하시겠습니까?","integration.replayConfirmDesc":"저장된 엔벨로프 스냅샷에서 라우트 단계를 다시 실행합니다 (external_id로 upsert).","integration.receiptNotFound":"영수증을 찾을 수 없습니다","integration.newClient":"새 API 클라이언트","integration.editClient":"API 클라이언트 편집","integration.clientKey":"클라이언트 키","integration.baseUrl":"기본 URL","integration.authConfig":"인증 설정 (JSON)","integration.rateLimit":"속도 제한 (JSON)","integration.ops":"작업 (JSON)","integration.opsCount":"작업 수","integration.noClients":"API 클라이언트가 없습니다","integration.noClientsDesc":"선언적 API 클라이언트를 추가하여 아웃바운드 호출을 수행합니다.","integration.clientCreated":"API 클라이언트가 생성되었습니다","integration.clientUpdated":"API 클라이언트가 업데이트되었습니다","integration.clientDeleted":"API 클라이언트가 삭제되었습니다","integration.confirmDeleteClient":'API 클라이언트 "{key}"을(를) 삭제하시겠습니까?',"integration.testCall":"테스트 호출","integration.selectOp":"작업 선택","integration.input":"입력 (JSON)","integration.result":"결과","integration.allClients":"모든 클라이언트","integration.egressLog":"아웃바운드 로그","integration.latency":"지연 시간","integration.createdAt":"생성 시간","integration.basicInfo":"기본 정보","integration.trustSection":"신뢰 (L0)","integration.normalizeSection":"정규화 (L2)","integration.routingSection":"라우팅 및 신뢰성 (L3/L4)","integration.presetTitle":"프리셋으로 시작","integration.presetPlaceholder":"검증된 구성 선택…","integration.presetHint":"전체 양식을 채웁니다 — 키·시크릿·대상 CT는 이후 조정하세요. 실제 통합 사례(GitHub / Feishu / DingTalk) 기반.","integration.presetApplied":"프리셋 적용됨 — 확인 후 조정하세요","integration.jsonInvalid":"잘못된 JSON","integration.insertExample":"예시 삽입","integration.presetGeneric":"일반 Webhook (검증 없음)","integration.presetGenericDesc":"단순 push + JSONPath 매핑","integration.presetHmac":"HMAC Webhook","integration.presetHmacDesc":"push + hmac-sha256 서명 검증","integration.presetGithub":"GitHub Webhook","integration.presetGithubDesc":"x-hub-signature-256, delivery GUID 멱등","integration.presetShopify":"Shopify Webhook","integration.presetShopifyDesc":"base64 HMAC, webhook-id 멱등","integration.presetDingtalk":"DingTalk Stream 봇","integration.presetDingtalkDesc":"ws 스트림 + dispatch 프레이밍 + pre_connect","integration.presetFeishu":"Feishu 봇 (롱 커넥션)","integration.presetFeishuDesc":"ws 스트림 + pb-frame + oauth 핸드셰이크","integration.presetPull":"HTTP 폴링 (cursor)","integration.presetPullDesc":"pull + since_id 페이징 + 체크포인트","integration.presetImap":"IMAP 메일박스 (네이티브)","integration.presetImapDesc":"pull + imap + mime, mark-read 시맨틱, IDLE 지원"},BC={"layout.brand":"RaisFast","layout.adminPanel":"Panel de Administración","layout.dashboard":"Panel de Control","layout.content":"Contenido","layout.extension":"Extensiones","layout.system":"Sistema","layout.posts":"Artículos","layout.categories":"Categorías","layout.tags":"Etiquetas","layout.comments":"Comentarios","layout.media":"Multimedia","layout.contentTypes":"Tipos de Contenido","layout.users":"Usuarios","layout.plugins":"Plugins","layout.rolesPermissions":"Roles y Permisos","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"Tokens de API","layout.workflows":"Flujos de Trabajo","layout.auditLog":"Registro de Auditoría","layout.options":"Opciones","layout.tenant":"Tenant","layout.clearTenant":"Limpiar filtro de tenant","layout.all":"Todos","layout.accessDenied":"Acceso Denegado","layout.accessDeniedMsg":"Debes iniciar sesión como autor o administrador para acceder a esta área.","layout.goToLogin":"Ir a Iniciar Sesión","layout.toggleTheme":"Cambiar tema","layout.signOut":"Cerrar sesión","layout.profile":"Perfil","common.loading":"Cargando...","common.save":"Guardar","common.cancel":"Cancelar","common.ok":"OK","common.create":"Crear","common.creating":"Creando...","common.saving":"Guardando...","common.delete":"Eliminar","common.confirmDeleteTitle":"Confirmar eliminación","common.edit":"Editar","common.content":"Contenido","common.remove":"Eliminar","common.view":"Ver","common.back":"Atrás","common.actions":"Acciones","common.status":"Estado","common.retry":"Reintentar","common.previous":"Anterior","common.next":"Siguiente","common.pageOf":"Página {page} de {total}","common.noData":"Sin datos","common.all":"Todos","common.draft":"Borrador","common.published":"Publicado","common.archived":"Archivado","common.enabled":"Habilitado","common.disabled":"Deshabilitado","common.name":"Nombre","common.description":"Descripción","common.enabledCount":"{count} habilitados","common.disabledCount":"{count} deshabilitados","common.adminOnly":"Solo Administradores","common.adminOnlyMsg":"Solo los administradores pueden gestionar esta sección.","common.backToDashboard":"Volver al Panel de Control","common.confirmDelete":"¿Estás seguro de que deseas eliminar este elemento?","common.notFound":"No Encontrado","common.failedToLoad":"Error al cargar","common.selectStatus":"Seleccionar estado","common.titleRequired":"El título es obligatorio","common.contentRequired":"El contenido es obligatorio","common.nameRequired":"El nombre es obligatorio","common.invalidJson":"JSON inválido","common.isRequired":"{field} es obligatorio","common.created":"{name} creado","common.updated":"{name} actualizado","common.deleted":"{name} eliminado","common.failedToCreate":"Error al crear {name}","common.failedToUpdate":"Error al actualizar {name}","common.failedToDelete":"Error al eliminar {name}","common.none":"Ninguno","common.noDependencies":"Sin dependencias","dashboard.title":"Panel de Control","dashboard.posts":"Artículos","dashboard.comments":"Comentarios","dashboard.categories":"Categorías","dashboard.tags":"Etiquetas","dashboard.media":"Multimedia","dashboard.users":"Usuarios","dashboard.contentTypes":"Tipos de Contenido","dashboard.postsLast14Days":"Artículos (Últimos 14 Días)","dashboard.ordersAndProducts14Days":"Pedidos y productos (últimos 14 días)","dashboard.viewAll":"Ver Todos","dashboard.failedToLoad":"Error al cargar las estadísticas. Los datos pueden estar desactualizados.","dashboard.noDataYet":"Aún no hay datos.","dashboard.recentActivity":"Actividad Reciente","dashboard.noActivity":"Aún no hay actividad.","dashboard.type":"Tipo","dashboard.detail":"Detalle","dashboard.time":"Hora","dashboard.post":"Artículo","dashboard.comment":"Comentario","dashboard.product":"Producto","dashboard.order":"Pedido","dashboard.products":"Productos","dashboard.orders":"Pedidos","dashboard.revenue":"Ingresos","dashboard.coupons":"Cupones","dashboard.orderStatus":"Estado de pedidos","dashboard.justNow":"ahora mismo","dashboard.minutesAgo":"min","dashboard.hoursAgo":"h","dashboard.daysAgo":"d","posts.title":"Artículos","posts.newPost":"Nuevo Artículo","posts.editPost":"Editar Artículo","posts.postTitle":"Título del artículo","posts.titleCol":"Título","posts.categoryCol":"Categoría","posts.authorCol":"Autor","posts.createdCol":"Creado","posts.allStatus":"Todos los Estados","posts.searchPlaceholder":"Buscar artículos...","posts.content":"Contenido","posts.excerpt":"Extracto","posts.briefSummary":"Resumen breve (opcional)","posts.coverImage":"Imagen de portada","posts.writeContent":"Escribe el contenido de tu artículo en Markdown...","posts.selectCategory":"Seleccionar categoría","posts.tags":"Etiquetas","posts.slug":"Slug","posts.slugPlaceholder":"Se genera desde el título si está vacío","posts.noTags":"No hay etiquetas disponibles","posts.addTag":"Añadir etiqueta...","posts.createTag":"Crear","posts.createPost":"Crear Artículo","posts.saveChanges":"Guardar Cambios","posts.postCreated":"Artículo creado","posts.postUpdated":"Artículo actualizado","posts.postDeleted":"Artículo eliminado","posts.failedToCreate":"Error al crear el artículo","posts.failedToUpdate":"Error al actualizar el artículo","posts.failedToDelete":"Error al eliminar el artículo","posts.confirmDelete":"¿Estás seguro de que deseas eliminar este artículo?","posts.confirmBatchDelete":"¿Eliminar {count} artículos?","posts.batchPublish":"Publicar","posts.batchUnpublish":"Despublicar","posts.batchSuccess":"{count} artículos actualizados","posts.noPosts":"No se encontraron artículos.","posts.noPostsDesc":"Crea tu primer artículo para compartir tus ideas.","posts.failedToLoad":"Error al cargar el artículo.","categories.title":"Categorías","categories.newCategory":"Nueva Categoría","categories.createCategory":"Crea una nueva categoría para organizar los artículos.","categories.categoryName":"Nombre de la categoría","categories.optionalDesc":"Descripción opcional","categories.sortOrder":"Orden","categories.slug":"Slug","categories.categoryCreated":"Categoría creada","categories.categoryUpdated":"Categoría actualizada","categories.categoryDeleted":"Categoría eliminada","categories.failedToCreate":"Error al crear la categoría","categories.failedToUpdate":"Error al actualizar la categoría","categories.failedToDelete":"Error al eliminar la categoría","categories.confirmDelete":"¿Estás seguro de que deseas eliminar esta categoría?","categories.confirmDeleteTitle":"Eliminar categoría","categories.noCategories":"Sin categorías","categories.noCategoriesDesc":"Organiza tus artículos con categorías.","categories.treeTitle":"Categorías","categories.selectCategory":"Selecciona una categoría para ver detalles","categories.addChild":"Añadir sub","categories.parent":"Categoría padre","categories.noParent":"Sin padre","categories.editCategory":"Editar categoría","categories.cannotDeleteHasChildren":"No se puede eliminar esta categoría porque tiene {count} subcategorías. Mueve o elimínalas primero.","categories.coverImage":"Imagen de portada","tags.title":"Etiquetas","tags.newTag":"Nueva Etiqueta","tags.createTag":"Crea una nueva etiqueta para los artículos.","tags.tagName":"Nombre de la etiqueta","tags.tagCreated":"Etiqueta creada","tags.tagUpdated":"Etiqueta actualizada","tags.tagDeleted":"Etiqueta eliminada","tags.failedToCreate":"Error al crear la etiqueta","tags.failedToUpdate":"Error al actualizar la etiqueta","tags.failedToDelete":"Error al eliminar la etiqueta","tags.confirmDelete":"¿Estás seguro de que deseas eliminar esta etiqueta?","tags.noTags":"No se encontraron etiquetas.","tags.noTagsDesc":"Añade etiquetas para organizar y filtrar tu contenido.","comments.title":"Comentarios","comments.total":"{count} en total","comments.all":"Todos","comments.pending":"Pendientes","comments.approved":"Aprobados","comments.rejected":"Rechazados","comments.spam":"Spam","comments.approve":"Aprobar","comments.reject":"Rechazar","comments.author":"Autor","comments.contentCol":"Contenido","comments.post":"Artículo","comments.date":"Fecha","comments.selected":"{count} seleccionados","comments.commentStatusUpdated":"Estado del comentario actualizado","comments.commentDeleted":"Comentario eliminado","comments.bulkActionDone":"{count} comentario(s) {status}","comments.bulkDeleted":"{count} comentario(s) eliminados","comments.bulkActionFailed":"Error en la acción masiva","comments.bulkDeleteFailed":"Error al eliminar masivamente","comments.failedToUpdateStatus":"Error al actualizar el estado","comments.failedToDelete":"Error al eliminar el comentario","comments.confirmDelete":"¿Estás seguro de que deseas eliminar este comentario?","comments.confirmBulkDelete":"¿Eliminar {count} comentario(s) seleccionados?","comments.noComments":"No se encontraron comentarios.","comments.noCommentsDesc":"Los comentarios aparecerán aquí cuando los lectores comiencen a interactuar.","contentTypes.title":"Tipos de Contenido","contentTypes.noFields":"Este tipo de contenido no tiene campos editables.","contentTypes.createContentType":"Crear Tipo de Contenido","contentTypes.builder":"Constructor","contentTypes.noContentTypes":"Aún no hay tipos de contenido","contentTypes.noContentTypesDesc":"Crea tu primer tipo de contenido para comenzar a construir tu CMS.","contentTypes.contentTypeDeleted":"Tipo de contenido eliminado","contentTypes.failedToDelete":"Error al eliminar","contentTypes.confirmDelete":'¿Eliminar el tipo de contenido "{singular}"? Esto elimina el archivo de esquema pero NO la tabla de la base de datos.',"contentTypes.notFound":"Tipo de Contenido No Encontrado","contentTypes.notFoundMsg":'Tipo de contenido "{singular}" no encontrado.',"contentTypes.itemDeleted":"Elemento eliminado","contentTypes.failedToDeleteItem":"Error al eliminar el elemento","contentTypes.confirmDeleteItem":"¿Estás seguro de que deseas eliminar este elemento?","contentTypes.batchDeleteSuccess":"{count} elementos eliminados","contentTypes.confirmBatchDelete":"¿Seguro que deseas eliminar {count} elementos?","contentTypes.export":"Exportar","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} elementos exportados","contentTypes.import":"Importar","contentTypes.importJson":"Importar JSON","contentTypes.importCsv":"Importar CSV","contentTypes.importExcel":"Importar Excel","contentTypes.importSuccess":"{count} registros importados","contentTypes.importPartial":"{ok} importados, {failed} fallidos","contentTypes.importEmpty":"No se encontraron registros en el archivo","contentTypes.importTooMany":"Demasiados registros (máximo {max})","contentTypes.importFailed":"Error de importación","contentTypes.importTooLarge":"El archivo supera el límite de 8 MB","contentTypes.noItems":"No se encontraron elementos.","contentTypes.noItemsDesc":"Crea tu primer elemento para poblar esta colección.","contentTypes.newItem":"Nuevo {name}","contentTypes.editItem":"Editar {name}","contentTypes.itemNotFound":"Elemento no encontrado.","contentTypes.fields":"{count} campo(s)","contentTypes.fieldsLabel":"campos","contentTypes.totalRecords":"{count} registros","contentTypes.createdAt":"Creado","contentTypes.updatedAt":"Actualizado","users.title":"Usuarios","users.newUser":"Nuevo Usuario","users.createUser":"Crear Usuario","users.registerNew":"Registra una nueva cuenta de usuario.","users.username":"Nombre de usuario","users.email":"Correo electrónico","users.password":"Contraseña","users.minChars":"Mínimo 8 caracteres, debe contener mayúsculas, minúsculas y números","users.role":"Rol","users.joined":"Registro","users.editRole":"Editar Rol de Usuario","users.editUser":"Editar usuario","users.changeRoleFor":"Cambiar rol de {username} ({email})","users.reader":"Lector","users.author":"Autor","users.admin":"Administrador","users.active":"Activo","users.suspended":"Suspendido","users.banned":"Prohibido","users.newPassword":"Nueva contraseña","users.userCreated":"Usuario creado","users.userUpdated":"Usuario actualizado","users.userRoleUpdated":"Rol de usuario actualizado","users.failedToCreate":"Error al crear el usuario","users.failedToUpdate":"Error al actualizar el usuario","users.noUsers":"No se encontraron usuarios.","users.noUsersDesc":"Invita usuarios y gestiona sus roles.","users.registeredVia":"Origen","users.userDeleted":"Usuario eliminado","users.failedToDelete":"Error al eliminar usuario","users.confirmDeleteUser":'¿Eliminar usuario "{username}"? Esta acción no se puede deshacer.',"webhooks.title":"Webhooks","webhooks.newWebhook":"Nuevo Webhook","webhooks.createWebhook":"Crea una nueva suscripción de webhook para recibir notificaciones de eventos.","webhooks.callbackUrl":"URL de Callback","webhooks.eventsComma":"Eventos (separados por comas)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Usa * para suscribirte a todos los eventos","webhooks.descriptionOptional":"Descripción (opcional)","webhooks.urlCol":"URL","webhooks.events":"Eventos","webhooks.webhookCreated":"Webhook creado","webhooks.webhookUpdated":"Webhook actualizado","webhooks.webhookDeleted":"Webhook eliminado","webhooks.failedToCreate":"Error al crear el webhook","webhooks.failedToUpdate":"Error al actualizar el webhook","webhooks.failedToDelete":"Error al eliminar el webhook","webhooks.confirmDelete":"¿Eliminar esta suscripción de webhook?","webhooks.noWebhooks":"No se encontraron webhooks.","webhooks.noWebhooksDesc":"Configura webhooks para recibir notificaciones de eventos en tiempo real.","tokens.title":"Tokens de API","tokens.newToken":"Nuevo Token","tokens.createToken":"Crear Token de API","tokens.createTokenDesc":"Genera un nuevo token de acceso personal. El valor del token solo se mostrará una vez.","tokens.scopesComma":"Ámbitos (separados por comas)","tokens.expiresOptional":"Expira el (opcional)","tokens.tokenCreated":"Token creado","tokens.tokenRevoked":"Token revocado","tokens.failedToCreate":"Error al crear el token","tokens.failedToRevoke":"Error al revocar el token","tokens.confirmRevoke":'¿Revocar el token "{name}"? Esta acción no se puede deshacer.',"tokens.tokenCopied":"Token copiado al portapapeles","tokens.tokenCreatedCopy":"Token Creado — ¡cópialo ahora!","tokens.copied":"Copiado","tokens.copy":"Copiar","tokens.dismiss":"Descartar","tokens.notShownAgain":"Este token no se volverá a mostrar. Guárdalo de forma segura.","tokens.scopesCol":"Ámbitos","tokens.expiresCol":"Expiración","tokens.lastUsed":"Último Uso","tokens.never":"Nunca","tokens.noTokens":"No se encontraron tokens de API. Crea uno para comenzar.","tokens.noTokensDesc":"Crea tokens de API para acceso programático.","tokens.description":"Descripción","workflows.title":"Flujos de Trabajo","workflows.instances":"Instancias","workflows.visualEditor":"Editor Visual","workflows.newWorkflow":"Nuevo Flujo de Trabajo","workflows.createWorkflow":"Crear Flujo de Trabajo","workflows.createWorkflowDesc":"Define un nuevo flujo de trabajo con pasos. Los pasos se configuran como JSON.","workflows.stepsJson":"Pasos (JSON)","workflows.stepFormat":'Cada paso: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Flujo de trabajo creado","workflows.workflowDeleted":"Flujo de trabajo eliminado","workflows.failedToCreate":"Error al crear el flujo de trabajo","workflows.failedToDelete":"Error al eliminar el flujo de trabajo","workflows.confirmDelete":'¿Eliminar el flujo de trabajo "{name}"?',"workflows.noWorkflows":"No se encontraron flujos de trabajo. Crea uno para comenzar.","workflows.noWorkflowsDesc":"Define flujos de trabajo para automatizar tu pipeline de contenido.","workflows.steps":"{count} pasos","workflows.workflowStarted":"Flujo de trabajo iniciado","workflows.editor.title":"Editor de Flujos de Trabajo","workflows.editor.newWorkflow":"Nuevo Flujo de Trabajo","workflows.editor.stepName":"Nombre del paso","workflows.editor.branchesJson":"Ramas (array JSON)","workflows.editor.connectEdges":"Conecta los bordes desde este nodo para definir las ramas.","workflows.editor.configJson":"Configuración (JSON)","workflows.editor.apply":"Aplicar","workflows.editor.deleteStep":"Eliminar paso","workflows.editor.addStep":"Añadir Paso","workflows.editor.invalidJson":"JSON inválido en la configuración","workflows.editor.workflowSaved":"Flujo de trabajo guardado","workflows.editor.failedToSave":"Error al guardar el flujo de trabajo","audit.title":"Registro de Auditoría","audit.clearFilters":"Limpiar Filtros","audit.noLogs":"No se encontraron entradas en el registro de auditoría.","audit.action":"Acción","audit.actor":"Actor","audit.resource":"Recurso","audit.timestamp":"Marca de Tiempo","options.title":"Opciones","options.saved":"Opciones guardadas","options.failedToSave":"Error al guardar las opciones","plugins.title":"Plugins","plugins.loaded":"{count} cargados","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Salud","plugins.pluginEnabled":"Plugin habilitado","plugins.pluginDisabled":"Plugin deshabilitado","plugins.pluginReloaded":"Plugin recargado","plugins.pluginRemoved":"Plugin eliminado","plugins.failedToEnable":"Error al habilitar el plugin","plugins.failedToDisable":"Error al deshabilitar el plugin","plugins.failedToReload":"Error al recargar el plugin","plugins.failedToRemove":"Error al eliminar el plugin","plugins.noPlugins":"No hay plugins cargados.","plugins.placePlugins":"Coloca los plugins en el directorio configurado.","plugins.confirmRemove":'¿Eliminar el plugin "{name}"? Se descargará de la memoria.',"plugins.autoDisabled":"Auto-deshabilitado","plugins.tooManyErrors":"Demasiados errores","plugins.errorCount":"{count} error(es)","plugins.errorsOccurred":"Se produjeron errores","plugins.calls":"{count} llamadas","plugins.idle":"Inactivo","plugins.notFound":"Plugin No Encontrado","plugins.notFoundMsg":"Plugin no encontrado.","plugins.backToPlugins":"Volver a Plugins","plugins.general":"General","plugins.version":"Versión","plugins.reload":"Recargar","plugins.remove":"Eliminar","plugins.errorTracking":"Seguimiento de errores y estado de auto-deshabilitación","plugins.healthy":"Saludable","plugins.errorCountLabel":"Conteo de Errores","plugins.lastError":"Último Error","plugins.lastErrorAt":"Último Error El","plugins.autoDisabledLabel":"Auto-deshabilitado","plugins.permissions":"Permisos","permissions.declaredFromManifest":"Permisos declarados en el manifiesto del plugin","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Puntos de hook registrados y sus métricas de ejecución","plugins.noHooks":"No hay hooks registrados.","plugins.totalCalls":"Total de Llamadas","plugins.totalErrors":"Total de Errores","plugins.totalDuration":"Duración Total","plugins.noMetrics":"Aún no hay métricas","plugins.performance":"Resumen de Rendimiento","plugins.maxMemory":"Memoria Máxima","plugins.timeout":"Tiempo de Espera","plugins.default":"Predeterminado","media.title":"Multimedia","media.files":"{count} archivos","media.searchFiles":"Buscar archivos...","media.fileDeleted":"Archivo eliminado","media.failedToDelete":"Error al eliminar el archivo","media.confirmDelete":"¿Estás seguro de que deseas eliminar este archivo?","media.date":"Fecha","media.size":"Tamaño","media.ascending":"Ascendente","media.descending":"Descendente","field.mediaUrl":"URL de Multimedia","field.startWriting":"Comienza a escribir...","field.yes":"Sí","field.no":"No","field.relatedItemId":"ID del elemento relacionado","cron.title":"Tareas de Cron","cron.newCron":"Nueva Tarea de Cron","cron.expression":"Expresión","cron.handler":"Handler","cron.lastRun":"Última Ejecución","cron.nextRun":"Próxima Ejecución","cron.cronCreated":"Tarea de Cron creada","cron.cronDeleted":"Tarea de Cron eliminada","cron.failedToCreate":"Error al crear la tarea de Cron","cron.failedToDelete":"Error al eliminar la tarea de Cron","cron.noCrons":"No se encontraron tareas de Cron.","cron.confirmDelete":'¿Eliminar la tarea de Cron "{name}"?',"tenants.title":"Tenants","tenants.newTenant":"Nuevo Tenant","tenants.createTenant":"Crea un nuevo tenant para el aislamiento multi-tenant.","tenants.tenantName":"Nombre del tenant","tenants.slug":"Slug","tenants.domain":"Dominio","tenants.owner":"Propietario","tenants.tenantCreated":"Tenant creado","tenants.tenantUpdated":"Tenant actualizado","tenants.tenantDeleted":"Tenant eliminado","tenants.failedToCreate":"Error al crear el tenant","tenants.failedToUpdate":"Error al actualizar el tenant","tenants.failedToDelete":"Error al eliminar el tenant","tenants.confirmDelete":"¿Estás seguro de que deseas eliminar este tenant?","tenants.noTenants":"No se encontraron tenants.","tenants.noTenantsDesc":"Crea tenants para SaaS multi-tenant.","rbac.title":"Roles y Permisos","rbac.roles":"Roles","rbac.newRole":"Nuevo Rol","rbac.createRole":"Crea un nuevo rol para el control de acceso.","rbac.roleName":"Nombre del rol","rbac.roleDesc":"Descripción del rol","rbac.roleCreated":"Rol creado","rbac.roleUpdated":"Rol actualizado","rbac.roleDeleted":"Rol eliminado","rbac.failedToCreate":"Error al crear el rol","rbac.failedToUpdate":"Error al actualizar el rol","rbac.failedToDelete":"Error al eliminar el rol","rbac.confirmDelete":'¿Eliminar el rol "{name}"? Esto eliminará todos los permisos asociados.',"rbac.systemRole":"Sistema","rbac.permissions":"Permisos","rbac.addPermission":"Añadir Permiso","rbac.action":"Acción","rbac.subject":"Sujeto","rbac.noRoles":"No se encontraron roles.","builder.title":"Constructor de Tipos de Contenido","builder.editContentType":"Editar Tipo de Contenido","builder.createContentType":"Crear Tipo de Contenido","builder.baseConfig":"Configuración Base","builder.singularName":"Nombre Singular","builder.pluralName":"Nombre Plural","builder.tableName":"Nombre de Tabla","builder.fieldsSection":"Campos","builder.addField":"Añadir Campo","builder.preview":"Vista Previa","builder.save":"Guardar Tipo de Contenido","builder.saving":"Guardando...","builder.saved":"Tipo de contenido guardado","builder.failedToSave":"Error al guardar el tipo de contenido","builder.confirmDeleteField":'¿Eliminar el campo "{name}"?',"builder.text":"Texto","builder.richText":"Texto Enriquecido","builder.email":"Correo electrónico","builder.password":"Contraseña","builder.uid":"UID","builder.integer":"Entero","builder.bigInt":"Entero Grande","builder.decimal":"Decimal","builder.float":"Flotante","builder.boolean":"Booleano","builder.date":"Fecha","builder.datetime":"Fecha y Hora","builder.time":"Hora","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relación","builder.mediaType":"Multimedia","builder.link":"Enlace","builder.required":"Obligatorio","builder.unique":"Único","builder.privateField":"Privado","builder.immutable":"Inmutable","builder.label":"Etiqueta","builder.defaultValue":"Valor Predeterminado","builder.maxLength":"Longitud Máxima","builder.minValue":"Mínimo","builder.maxValue":"Máximo","builder.enumValues":"Valores Enum (separados por comas)","builder.relationType":"Tipo de Relación","builder.relationTarget":"Tabla Destino","builder.foreignKey":"Clave Foránea","builder.throughTable":"Tabla Intermedia","builder.draftPublish":"Borrador/Publicar","builder.timestamps":"Marcas de Tiempo","builder.softDelete":"Eliminación Suave","builder.slugField":"Campo Slug","media.name":"Nombre","media.type":"Tipo","media.other":"Otro","media.uploadFailed":"Error al subir","media.dropFiles":"Suelta archivos aquí, pega o {browse}","media.uploading":"Subiendo {count} archivo(s)...","media.done":"Listo","media.failedUpload":"Fallido","media.urlCopied":"URL copiada","media.copyUrl":"Copiar URL","media.download":"Descargar","media.dimensions":"Dimensiones","media.uploaded":"Subido","media.urlLabel":"URL","media.noVideoSupport":"Tu navegador no soporta video.","media.downloadFile":"Descargar archivo","workflows.instances.title":"Instancias de Flujos de Trabajo","workflows.instances.showLogs":"Mostrar registros","workflows.instances.hideLogs":"Ocultar registros","workflows.instances.currentStep":"Actual","workflows.instances.context":"Contexto","workflows.instances.stepLogs":"Registros de Pasos ({count})","workflows.instances.noStepLogs":"No hay registros de pasos.","workflows.instances.noInstances":"No se encontraron instancias de flujos de trabajo.","workflows.instances.instanceCount":"{count} instancia(s)","workflows.instances.definitions":"Definiciones","workflows.instances.filterStatus":"Filtrar estado","workflows.instances.cancelled":"Instancia cancelada","workflows.editor.editStep":"Editar Paso","workflows.editor.name":"Nombre","workflows.editor.type":"Tipo","workflows.editor.backToList":"Volver a la lista","workflows.editor.workflowName":"Nombre del flujo de trabajo...","workflows.editor.failedToLoad":"Error al cargar el flujo de trabajo","workflows.editor.immutableNotice":"Las definiciones de flujos de trabajo son inmutables. Crea una nueva para cambiar los pasos.","workflows.editor.untitled":"Flujo de Trabajo Sin Título","workflows.editor.save":"Guardar","workflows.editor.saving":"Guardando...","cron.createSchedule":"Crear Programación de Cron","cron.labelField":"Etiqueta","cron.jobType":"Tipo de Tarea","cron.cronExpression":"Expresión Cron (6 segmentos)","cron.format":"Formato: seg min hora día mes día-semana","cron.payload":"Payload (JSON, opcional)","cron.schedules":"{count} programación(es)","cron.schedule":"Programación","cron.pluginCol":"Plugin","cron.scheduleCreated":"Programación creada","cron.scheduleToggled":"Programación activada/desactivada","cron.scheduleDeleted":"Programación eliminada","cron.scheduleUpdated":"Programación actualizada","cron.noCronSchedules":"No hay programaciones de Cron.","cron.seedHint":"Crea una arriba o habilita CRON_SEED_ENABLED para sembrar los valores predeterminados.","cron.confirmDeleteSchedule":'¿Eliminar la programación "{name}"? Esta acción no se puede deshacer.',"cron.scheduleNotFound":"Programación No Encontrada","cron.backToCronSchedules":"Volver a Programaciones de Cron","cron.scheduleDetails":"Detalles de la Programación","cron.cronExpression7":"6 segmentos: seg min hora día mes día-semana","cron.builtIn":"Integrado","cron.executionHistory":"Historial de Ejecución","cron.recentLogs":"Registros de ejecución recientes para esta programación","cron.cleanupOld":"Limpiar Antiguos","cron.cleanedUp":"Se limpiaron {count} registro(s) antiguo(s)","cron.noExecutionLogs":"Aún no hay registros de ejecución.","cron.success":"Éxito","cron.failedStatus":"Fallido","cron.running":"En Ejecución","cron.newSchedule":"Nueva Programación","cron.idField":"ID","cron.started":"Iniciado","cron.finished":"Finalizado","cron.duration":"Duración","cron.error":"Error","cron.created":"Creado","cron.updated":"Actualizado","tenants.createForIsolation":"Crea un nuevo tenant para el aislamiento de datos.","tenants.cannotDeleteDefault":"No se puede eliminar el tenant predeterminado","tenants.confirmDeleteMsg":"¿Eliminar este tenant? Los datos pertenecientes a este tenant NO serán eliminados.","tenants.created":"Creado","rbac.addRoleDesc":"Añade un nuevo rol al sistema.","rbac.updateRoleDesc":'Actualiza el rol "{name}".',"rbac.deleteRoleTitle":"Eliminar Rol","rbac.deleteRoleConfirm":'¿Estás seguro de que deseas eliminar "{name}"? Esta acción no se puede deshacer.',"rbac.addPermissionTitle":"Añadir Permiso","rbac.addPermissionDesc":'Concede un nuevo permiso a "{name}". Usa * como comodín.',"rbac.fieldsCol":"Campos","rbac.conditionsCol":"Condiciones","rbac.fieldsOptional":"Campos (separados por comas, opcional)","rbac.removePermissionTitle":"Eliminar Permiso","rbac.removePermissionDesc":"¿Eliminar {action} sobre {subject}?","rbac.noPermissions":"No hay permisos configurados.","rbac.selectRole":"Selecciona un rol para ver los permisos","rbac.prev":"Anterior","options.noChanges":"Sin cambios","options.noOptions":"No hay opciones disponibles.","options.reset":"Restablecer","options.saveChanges":"Guardar Cambios","audit.failedToLoad":"Error al cargar el registro de auditoría. Inténtalo de nuevo.","audit.noEntries":"No se encontraron entradas de auditoría.","audit.noEntriesDesc":"Las entradas de auditoría aparecerán a medida que se realicen acciones.","audit.timeCol":"Hora","audit.subjectId":"ID del Sujeto","audit.detailCol":"Detalle","audit.system":"sistema","audit.from":"Desde","audit.to":"Hasta","audit.search":"Buscar","audit.clear":"Limpiar","audit.today":"Hoy","builder.untitled":"Tipo de Contenido Sin Título","builder.fieldCount":"{count} campo(s)","builder.fieldList":"Campos","builder.protocols":"Protocolos","builder.systemFields":"Campos del sistema","builder.system":"sistema","builder.newField":"Nuevo campo","builder.addAnotherField":"Añadir otro campo","builder.addAField":"Añadir un campo","builder.chooseFieldType":"Elige un tipo de campo para añadir a tu tipo de contenido.","builder.fieldConfiguration":"Configuración del Campo","builder.fieldName":"Nombre del Campo","builder.fieldTypeLabel":"Tipo de Campo","builder.displayLabel":"Etiqueta de visualización","builder.helpText":"Texto de ayuda","builder.removeField":"Eliminar Campo","builder.removeFieldConfirm":"¿Eliminar este campo?","builder.noAdditionalOptions":"No hay opciones adicionales para este tipo de campo.","builder.acceptedTypes":"Tipos Aceptados","builder.maxCount":"Cantidad Máxima","builder.target":"Destino","builder.valuesComma":"Valores (separados por comas)","builder.describeContentType":"Describe este tipo de contenido...","builder.contentTypeUpdated":"Tipo de contenido actualizado","builder.contentTypeCreated":"Tipo de contenido creado","builder.newFieldCategory":"Número","layout.crm":"CRM","layout.pages":"Páginas","layout.reusableBlocks":"Bloques","crm.dashboard":"Panel de CRM","crm.pipeline":"Pipeline","crm.contacts":"Contactos","crm.companies":"Empresas","crm.deals":"Ofertas","crm.activities":"Actividades","crm.notes":"Notas","crm.reports":"Informes","crm.totalCompanies":"Total de Empresas","crm.totalContacts":"Total de Contactos","crm.openDeals":"Ofertas Abiertas","crm.wonDeals":"Ofertas Ganadas","crm.pipelineValue":"Valor del Pipeline","crm.weightedValue":"Valor Ponderado","crm.winRate":"Tasa de Éxito","crm.avgDealSize":"Tamaño Promedio de Oferta","crm.recentActivities":"Actividades de Esta Semana","crm.totalActivities":"Total de Actividades","crm.leaderboard":"Tabla de Líderes","crm.noData":"No hay datos disponibles.","crm.newDeal":"Nueva Oferta","crm.createDeal":"Crear Oferta","crm.dealTitle":"Título","crm.dealTitlePlaceholder":"Ingresa el título de la oferta...","crm.amount":"Monto","crm.probability":"Probabilidad","crm.stage":"Etapa","crm.advanceStage":"Avanzar a la siguiente etapa","crm.totalValue":"Valor Total","crm.dealCreated":"Oferta creada","crm.failedToCreateDeal":"Error al crear la oferta","crm.dealStageUpdated":"Etapa de la oferta actualizada","crm.failedToUpdateStage":"Error al actualizar la etapa","crm.titleRequired":"El título es obligatorio","crm.newContact":"Nuevo Contacto","crm.editContact":"Editar Contacto","crm.contact":"Contacto","crm.name":"Nombre","crm.email":"Correo electrónico","crm.phone":"Teléfono","crm.company":"Empresa","crm.source":"Origen","crm.lifecycleStage":"Etapa del Ciclo de Vida","crm.noContacts":"No se encontraron contactos.","crm.firstName":"Nombre","crm.lastName":"Apellido","crm.jobTitle":"Cargo","crm.newCompany":"Nueva Empresa","crm.editCompany":"Editar Empresa","crm.companyName":"Nombre de la Empresa","crm.industry":"Industria","crm.size":"Tamaño","crm.website":"Sitio Web","crm.city":"Ciudad","crm.country":"País","crm.noCompanies":"No se encontraron empresas.","crm.deal":"Oferta","crm.editDeal":"Editar Oferta","crm.closeDate":"Fecha de Cierre","crm.lossReason":"Motivo de Pérdida","crm.noDeals":"No se encontraron ofertas.","crm.dealInfo":"Información de la Oferta","crm.newActivity":"Nueva Actividad","crm.editActivity":"Editar Actividad","crm.activity":"Actividad","crm.type":"Tipo","crm.subject":"Asunto","crm.content":"Contenido","crm.date":"Fecha","crm.duration":"Duración","crm.outcome":"Resultado","crm.noActivities":"No se encontraron actividades.","crm.newNote":"Nueva Nota","crm.editNote":"Editar Nota","crm.note":"Nota","crm.relatedTo":"Relacionado Con","crm.pinned":"Fijado","crm.createdAt":"Creado","crm.noNotes":"No se encontraron notas.","crm.contentRequired":"El contenido es obligatorio","crm.relatedContactId":"ID del Contacto Relacionado","crm.relatedCompanyId":"ID de la Empresa Relacionada","crm.relatedDealId":"ID de la Oferta Relacionada","crm.contactInfo":"Información del Contacto","crm.timeline":"Línea de Tiempo","crm.noTimeline":"No hay eventos en la línea de tiempo.","crm.addNote":"Añadir Nota","crm.notePlaceholder":"Escribe una nota...","crm.lifecycleUpdated":"Etapa del ciclo de vida actualizada","crm.failedToUpdateLifecycle":"Error al actualizar la etapa del ciclo de vida","crm.companyInfo":"Información de la Empresa","crm.funnelReport":"Informe de Embudo","crm.activityReport":"Informe de Actividades","crm.conversionRate":"Conversión","crm.byType":"Por Tipo","crm.byOutcome":"Por Resultado","pages.title":"Páginas","pages.newPage":"Nueva Página","pages.editPage":"Editar Página","pages.pageDeleted":"Página eliminada","pages.pageCreated":"Página creada","pages.pageUpdated":"Página actualizada","pages.failedToDelete":"Error al eliminar la página","pages.failedToCreate":"Error al crear la página","pages.failedToUpdate":"Error al actualizar la página","pages.statusUpdated":"Estado de la página actualizado","pages.failedToUpdateStatus":"Error al actualizar el estado","pages.confirmDelete":"¿Estás seguro de que deseas eliminar esta página?","pages.noPages":"No se encontraron páginas.","pages.noPagesDesc":"Crea tu primera página para comenzar a construir tu sitio.","pages.noBlocks":"Aún no hay bloques reutilizables.","pages.noBlocksDesc":"Crea bloques reutilizables para usar en tus páginas.","pages.publish":"Publicar","pages.unpublish":"Despublicar","pages.preview":"Vista Previa","pages.slug":"Slug","pages.template":"Plantilla","pages.createdAt":"Creado","pages.basicInfo":"Información Básica","pages.titleLabel":"Título","pages.titlePlaceholder":"Ingresa el título de la página...","pages.coverImage":"Imagen de Portada","pages.metaTitle":"Meta Título","pages.metaDescription":"Meta Descripción","pages.ogImage":"Imagen OG","pages.content":"Contenido","pages.blockMode":"Bloques","pages.saveDraft":"Guardar Borrador","pages.writeContent":"Escribe el contenido de tu página...","pages.addBlock":"Añadir Bloque","pages.chooseBlock":"Elige un tipo de bloque","pages.reusableBlocks":"Bloques Reutilizables","pages.createReusable":"Crear Bloque Reutilizable","pages.editReusable":"Editar Bloque Reutilizable","pages.rbName":"Nombre","pages.rbType":"Tipo de Bloque","pages.rbDescription":"Descripción","pages.rbContent":"Contenido","command.search":"Buscar...","command.placeholder":"Escribe un comando o busca...","command.noResults":"No se encontraron resultados.","command.actions":"Acciones","command.switchToLight":"Cambiar a Modo Claro","command.switchToDark":"Cambiar a Modo Oscuro","layout.ecommerce":"E-Commerce","layout.products":"Productos","layout.productCategories":"Categorías de productos","layout.orders":"Pedidos","layout.finance":"Finanzas","layout.currencies":"Monedas","layout.wallets":"Billeteras","layout.paymentChannels":"Canales de pago","layout.productComments":"Reseñas","layout.coupons":"Cupones","layout.shippingTemplates":"Plantillas de envío","products.title":"Productos","products.newProduct":"Nuevo Producto","products.editProduct":"Editar Producto","products.productTitle":"Título del Producto","products.price":"Precio","products.originalPrice":"Precio Original","products.stock":"Inventario","products.sales":"Ventas","products.coverUrl":"URL de Portada","products.description":"Descripción","products.content":"Contenido","products.slug":"Slug","products.status":"Estado","products.category":"Categoría","products.unit":"Unidad","products.minPurchase":"Compra Mínima","products.maxPurchase":"Compra Máxima","products.sortOrder":"Orden","products.metaTitle":"Meta Título","products.metaDescription":"Meta Descripción","products.productCreated":"Producto creado","products.productUpdated":"Producto actualizado","products.productDeleted":"Producto eliminado","products.batchDeleted":"{{count}} productos eliminados","products.batchSuccess":"{{count}} productos actualizados","products.batchActivate":"Activar","products.batchDeactivate":"Desactivar","products.failedToCreate":"Error al crear el producto","products.failedToUpdate":"Error al actualizar el producto","products.failedToDelete":"Error al eliminar el producto","products.confirmDelete":"¿Estás seguro de que deseas eliminar este producto?","products.confirmBatchDelete":"¿Está seguro de que desea eliminar {{count}} productos?","products.noProducts":"Aún no hay productos","products.noProductsDesc":"Crea tu primer producto para comenzar a vender.","products.allStatus":"Todos los Estados","products.searchPlaceholder":"Buscar producto...","products.active":"Activo","products.draft":"Borrador","products.archived":"Archivado","products.general":"General","products.media":"Medios","products.pricing":"Precios","products.purchaseSettings":"Configuración de compra","products.summary":"Resumen","products.phTitle":"Título del producto...","products.phSummary":"Breve descripción del producto...","products.images":"Imágenes","products.cover":"Portada","products.dropImages":"Suelta, pega o haz clic para subir imágenes","productCategories.categoryName":"Nombre de categoría","productCategories.newCategory":"Nueva categoría","productCategories.createCategory":"Crear categoría","productCategories.editCategory":"Editar categoría","productCategories.optionalDesc":"Descripción (opcional)","productCategories.parent":"Categoría padre","productCategories.noParent":"Sin padre","productCategories.sortOrder":"Orden","productCategories.slug":"Slug","productCategories.noCategories":"Sin categorías","productCategories.noCategoriesDesc":"Crea tu primera categoría de productos para organizarlos.","productCategories.categoryCreated":"Categoría creada","productCategories.categoryUpdated":"Categoría actualizada","productCategories.categoryDeleted":"Categoría eliminada","productCategories.failedToCreate":"Error al crear categoría","productCategories.failedToUpdate":"Error al actualizar categoría","productCategories.failedToDelete":"Error al eliminar categoría","productCategories.confirmDelete":"¿Estás seguro de eliminar esta categoría?","productCategories.confirmDeleteTitle":"Eliminar categoría","productCategories.cannotDeleteHasChildren":"No se puede eliminar esta categoría porque tiene {count} subcategorías. Mueve o elimínalas primero.","productCategories.treeTitle":"Categorías","productCategories.selectCategory":"Selecciona una categoría para ver detalles","productCategories.addChild":"Añadir sub","orders.title":"Pedidos","orders.orderNo":"N.º de Pedido","orders.buyer":"Comprador","orders.total":"Total","orders.status":"Estado","orders.items":"Artículos","orders.remark":"Observación","orders.adminRemark":"Observación del Admin","orders.createdAt":"Creado","orders.actions":"Acciones","orders.allStatus":"Todos los Estados","orders.searchPlaceholder":"Buscar n° pedido, comprador...","orders.pending":"Pendiente","orders.paid":"Pagado","orders.shipped":"Enviado","orders.completed":"Completado","orders.cancelled":"Cancelado","orders.refunded":"Reembolsado","orders.confirmPay":"¿Confirmar el pago?","orders.orderPaid":"Pedido marcado como pagado","orders.confirmShip":"¿Enviar este pedido?","orders.orderShipped":"Pedido enviado","orders.confirmCancel":"¿Cancelar este pedido?","orders.orderCancelled":"Pedido cancelado","orders.confirmRefund":"¿Reembolsar este pedido?","orders.orderRefunded":"Pedido reembolsado","orders.failedToPay":"Error al marcar como pagado","orders.failedToShip":"Error al enviar","orders.failedToCancel":"Error al cancelar","orders.failedToRefund":"Error al reembolsar","orders.noOrders":"Aún no hay pedidos","orders.noOrdersDesc":"Los pedidos aparecerán aquí cuando los clientes realicen compras.","orders.trackingNo":"N.º de Seguimiento","orders.carrier":"Transportista","orders.shipInfo":"Información de Envío","orders.buyerInfo":"Información del Comprador","orders.shippingAddress":"Dirección de Envío","orders.orderDetail":"Detalle del Pedido","orders.stats.totalOrders":"Total de Pedidos","orders.stats.totalRevenue":"Ingresos Totales","orders.stats.pending":"Pendientes","orders.stats.completed":"Completados","orders.stats.todayOrders":"Pedidos hoy","orders.stats.todayRevenue":"Ingresos hoy","payments.title":"Canales de Pago","payments.newChannel":"Nuevo Canal","payments.provider":"Proveedor","payments.name":"Nombre del Canal","payments.mode":"Modo","payments.active":"Activo","payments.live":"Producción","payments.test":"Prueba","payments.credentials":"Credenciales","payments.webhookSecret":"Secreto del Webhook","payments.settings":"Configuración","payments.channelCreated":"Canal de pago creado","payments.channelUpdated":"Canal de pago actualizado","payments.channelDeleted":"Canal de pago eliminado","payments.failedToCreate":"Error al crear el canal de pago","payments.failedToUpdate":"Error al actualizar el canal de pago","payments.failedToDelete":"Error al eliminar el canal de pago","payments.confirmDelete":"¿Eliminar este canal de pago?","payments.noChannels":"No hay canales de pago","payments.noChannelsDesc":"Añade un canal de pago para comenzar a aceptar pagos.","payments.selectProvider":"Seleccionar proveedor...","payments.testMode":"Modo de prueba (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"ID de comerciante","payments.fPrivateKey":"Clave privada RSA","payments.fSerialNo":"N.º de serie del certificado","payments.fWebhookSecret":"Secreto de firma webhook","payments.fAlipayPublicKey":"Clave pública de Alipay","payments.fPlatformCert":"Certificado de plataforma (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"URL de notificación","payments.phSk":"sk_live_... o sk_test_...","payments.phRsaKey":"Pegar clave privada RSA (PEM o Base64)","payments.phUrl":"https://...","payments.editChannel":"Editar canal","payments.leaveBlankToKeep":"Dejar vacío para mantener","layout.paymentOrders":"Órdenes de pago","paymentOrders.title":"Órdenes de pago","paymentOrders.orderId":"Pedido","paymentOrders.title_col":"Título","paymentOrders.amount":"Monto","paymentOrders.provider":"Proveedor","paymentOrders.noOrders":"Sin órdenes de pago","paymentOrders.noOrdersDesc":"Las órdenes de pago aparecerán aquí cuando los clientes realicen pagos.","paymentOrders.refund":"Reembolsar","paymentOrders.refundTitle":"Reembolso","paymentOrders.refundOrder":"Reembolsar pedido","paymentOrders.refundAmount":"Monto de reembolso","paymentOrders.refundReason":"Razón","paymentOrders.refundSuccess":"Reembolso enviado","paymentOrders.refundFailed":"Error al reembolsar","layout.paymentTransactions":"Transacciones de pago","paymentTransactions.title":"Transacciones de pago","paymentTransactions.orderId":"Pedido","paymentTransactions.type":"Tipo","paymentTransactions.amount":"Monto","paymentTransactions.providerTxId":"ID de transacción del proveedor","paymentTransactions.noTransactions":"Sin transacciones","paymentTransactions.noTransactionsDesc":"Las transacciones aparecerán aquí cuando ocurran eventos de pago.","currencies.title":"Monedas","currencies.newCurrency":"Nueva Moneda","currencies.code":"Código","currencies.name":"Nombre","currencies.decimals":"Decimales","currencies.active":"Activo","currencies.currencyCreated":"Moneda creada","currencies.currencyUpdated":"Moneda actualizada","currencies.failedToCreate":"Error al crear la moneda","currencies.failedToUpdate":"Error al actualizar la moneda","currencies.noCurrencies":"No hay monedas","currencies.noCurrenciesDesc":"Añade una moneda para habilitar el soporte multi-moneda.","wallets.title":"Billeteras","wallets.user":"Usuario","wallets.currency":"Moneda","wallets.balance":"Saldo","wallets.frozen":"Congelado","wallets.credit":"Acreditar","wallets.debit":"Debitar","wallets.transactions":"Transacciones","wallets.amount":"Monto","wallets.type":"Tipo","wallets.reference":"Referencia","wallets.creditTitle":"Acreditar Billetera","wallets.debitTitle":"Debitar Billetera","wallets.userId":"ID de Usuario","wallets.remark":"Observación","wallets.creditSuccess":"Billetera acreditada","wallets.debitSuccess":"Billetera debitada","wallets.failedToCredit":"Error al acreditar la billetera","wallets.failedToDebit":"Error al debitar la billetera","wallets.noWallets":"No hay billeteras","wallets.noWalletsDesc":"Las billeteras se crean cuando los usuarios reciben su primera transacción.","wallets.noTransactions":"Aún no hay transacciones.","adminLogin.title":"Panel de Administración","adminLogin.subtitle":"Inicia sesión con tus credenciales de administrador","adminLogin.email":"Correo electrónico","adminLogin.password":"Contraseña","adminLogin.submit":"Iniciar Sesión","adminLogin.loading":"Iniciando sesión…","adminLogin.error":"Correo electrónico o contraseña inválidos","adminLogin.footer":"RaisFast Admin — solo personal autorizado","adminLogin.sessionExpired":"Tu sesión ha expirado. Por favor, inicia sesión de nuevo.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Integración","layout.channels":"Canales","layout.receipts":"Recibos","layout.apiClients":"Clientes API","common.reset":"Restablecer","common.close":"Cerrar","integration.newChannel":"Nuevo canal","integration.editChannel":"Editar canal","integration.channelKey":"Clave del canal","integration.displayName":"Nombre visible","integration.provider":"Proveedor","integration.mode":"Modo","integration.transport":"Transporte","integration.framing":"Encuadre","integration.endpoint":"Endpoint","integration.verifyKind":"Verificación","integration.verifyConfig":"Config de verificación (JSON)","integration.credentials":"Credenciales (JSON)","integration.credentialsKeepHint":"Dejar en blanco para conservar las credenciales selladas","integration.mapping":"Mapeo (JSONPath)","integration.pullConfig":"Config de pull (JSON)","integration.streamConfig":"Config de stream (JSON)","integration.targetType":"Content type destino","integration.routeExtra":"Extra de ruta (JSON)","integration.redeliveryMax":"Reentregas máx.","integration.stack":"Pila","integration.noChannels":"Sin canales de integración","integration.noChannelsDesc":"Añade un canal para recibir webhooks, streams y sondeos entrantes.","integration.channelCreated":"Canal creado","integration.channelUpdated":"Canal actualizado","integration.channelDeleted":"Canal eliminado","integration.failedToCreate":"Error al crear","integration.failedToUpdate":"Error al actualizar","integration.failedToDelete":"Error al eliminar","integration.failedToTest":"Prueba fallida","integration.confirmDeleteChannel":"¿Eliminar el canal «{key}»? Los recibos se conservan para auditoría.","integration.testMapping":"Probar mapeo","integration.sampleBody":"Cuerpo de solicitud de ejemplo","integration.preview":"Vista previa del sobre normalizado","integration.runTest":"Ejecutar","integration.hasCredentials":"Credenciales selladas en el vault","integration.allChannels":"Todos los canales","integration.allStatuses":"Todos los estados","integration.traceIdFilter":"Filtrar por trace ID…","integration.noReceipts":"Sin recibos","integration.noReceiptsDesc":"Las entregas entrantes aparecerán aquí con su traza completa.","integration.receivedAt":"Recibido","integration.attempts":"Intentos","integration.nextRetryAt":"Próximo reintento","integration.noSteps":"Sin pasos registrados","integration.pending":"pendiente","integration.receiptInfo":"Recibo","integration.trace":"Traza","integration.complete":"completo","integration.firstPass":"Primera pasada","integration.asyncChain":"Cadena asíncrona","integration.envelopeSnapshot":"Snapshot del sobre","integration.fullSteps":"Cronología completa de pasos","integration.egressCalls":"Llamadas salientes","integration.noEgress":"Sin llamadas salientes","integration.noEgressDesc":"Las llamadas salientes disparadas por este recibo aparecerán aquí.","integration.replayed":"Reproducido","integration.dryRunDone":"Simulación completa — informe en la traza","integration.failedToReplay":"Error al reproducir","integration.replay":"Reproducir","integration.dryRunReplay":"Simular reproducción","integration.replayConfirmTitle":"¿Reproducir este recibo?","integration.replayConfirmDesc":"La etapa de ruta se reejecuta desde el snapshot del sobre (upsert por external_id).","integration.receiptNotFound":"Recibo no encontrado","integration.newClient":"Nuevo cliente API","integration.editClient":"Editar cliente API","integration.clientKey":"Clave del cliente","integration.baseUrl":"URL base","integration.authConfig":"Config de auth (JSON)","integration.rateLimit":"Límite de tasa (JSON)","integration.ops":"Operaciones (JSON)","integration.opsCount":"Ops","integration.noClients":"Sin clientes API","integration.noClientsDesc":"Añade un cliente API declarativo para llamadas salientes a terceros.","integration.clientCreated":"Cliente API creado","integration.clientUpdated":"Cliente API actualizado","integration.clientDeleted":"Cliente API eliminado","integration.confirmDeleteClient":"¿Eliminar el cliente API «{key}»?","integration.testCall":"Llamada de prueba","integration.selectOp":"Selecciona una op","integration.input":"Entrada (JSON)","integration.result":"Resultado","integration.allClients":"Todos los clientes","integration.egressLog":"Registro saliente","integration.latency":"Latencia","integration.createdAt":"Creado","integration.basicInfo":"Básico","integration.trustSection":"Confianza (L0)","integration.normalizeSection":"Normalización (L2)","integration.routingSection":"Enrutado y fiabilidad (L3/L4)","integration.presetTitle":"Empezar desde un preset","integration.presetPlaceholder":"Elige una configuración probada…","integration.presetHint":"Rellena todo el formulario — adapta después las claves, secretos y el content type destino. Ejemplos de integraciones reales (GitHub / Feishu / DingTalk).","integration.presetApplied":"Preset aplicado — revísalo y ajústalo","integration.jsonInvalid":"JSON inválido","integration.insertExample":"Insertar ejemplo","integration.presetGeneric":"Webhook genérico (sin verificación)","integration.presetGenericDesc":"push simple + mapeo JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + verificación de firma hmac-sha256","integration.presetGithub":"Webhook de GitHub","integration.presetGithubDesc":"x-hub-signature-256, idempotencia por delivery GUID","integration.presetShopify":"Webhook de Shopify","integration.presetShopifyDesc":"HMAC base64, idempotencia por webhook-id","integration.presetDingtalk":"Bot DingTalk Stream","integration.presetDingtalkDesc":"stream ws + framing dispatch + pre_connect","integration.presetFeishu":"Bot Feishu (conexión larga)","integration.presetFeishuDesc":"stream ws + pb-frame + handshake oauth","integration.presetPull":"Sondeo HTTP (cursor)","integration.presetPullDesc":"pull + paginación since_id + checkpoint","integration.presetImap":"Buzón IMAP (nativo)","integration.presetImapDesc":"pull + imap + mime, semántica mark-read, con IDLE"},VC={"layout.brand":"RaisFast","layout.adminPanel":"Painel Administrativo","layout.dashboard":"Painel","layout.content":"Conteúdo","layout.extension":"Extensões","layout.system":"Sistema","layout.posts":"Postagens","layout.categories":"Categorias","layout.tags":"Tags","layout.comments":"Comentários","layout.media":"Mídia","layout.contentTypes":"Tipos de Conteúdo","layout.users":"Usuários","layout.plugins":"Plugins","layout.rolesPermissions":"Funções e Permissões","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"Tokens de API","layout.workflows":"Workflows","layout.auditLog":"Log de Auditoria","layout.options":"Opções","layout.tenant":"Tenant","layout.clearTenant":"Limpar filtro de tenant","layout.all":"Todos","layout.accessDenied":"Acesso Negado","layout.accessDeniedMsg":"Você precisa estar logado como autor ou administrador para acessar esta área.","layout.goToLogin":"Ir para Login","layout.toggleTheme":"Alternar tema","layout.signOut":"Sair","layout.profile":"Perfil","common.loading":"Carregando...","common.save":"Salvar","common.cancel":"Cancelar","common.ok":"OK","common.create":"Criar","common.creating":"Criando...","common.saving":"Salvando...","common.delete":"Excluir","common.confirmDeleteTitle":"Confirmar exclusão","common.edit":"Editar","common.content":"Conteúdo","common.remove":"Remover","common.view":"Ver","common.back":"Voltar","common.actions":"Ações","common.status":"Status","common.retry":"Tentar novamente","common.previous":"Anterior","common.next":"Próximo","common.pageOf":"Página {page} de {total}","common.noData":"Nenhum dado","common.all":"Todos","common.draft":"Rascunho","common.published":"Publicado","common.archived":"Arquivado","common.enabled":"Ativado","common.disabled":"Desativado","common.name":"Nome","common.description":"Descrição","common.enabledCount":"{count} ativados","common.disabledCount":"{count} desativados","common.adminOnly":"Somente Admin","common.adminOnlyMsg":"Apenas administradores podem gerenciar esta seção.","common.backToDashboard":"Voltar ao Painel","common.confirmDelete":"Tem certeza de que deseja excluir este item?","common.notFound":"Não Encontrado","common.failedToLoad":"Falha ao carregar","common.selectStatus":"Selecionar status","common.titleRequired":"O título é obrigatório","common.contentRequired":"O conteúdo é obrigatório","common.nameRequired":"O nome é obrigatório","common.invalidJson":"JSON inválido","common.isRequired":"{field} é obrigatório","common.created":"{name} criado","common.updated":"{name} atualizado","common.deleted":"{name} excluído","common.failedToCreate":"Falha ao criar {name}","common.failedToUpdate":"Falha ao atualizar {name}","common.failedToDelete":"Falha ao excluir {name}","common.none":"Nenhum","common.noDependencies":"Sem dependências","dashboard.title":"Painel","dashboard.posts":"Postagens","dashboard.comments":"Comentários","dashboard.categories":"Categorias","dashboard.tags":"Tags","dashboard.media":"Mídia","dashboard.users":"Usuários","dashboard.contentTypes":"Tipos de Conteúdo","dashboard.postsLast14Days":"Postagens (Últimos 14 Dias)","dashboard.ordersAndProducts14Days":"Pedidos e produtos (últimos 14 dias)","dashboard.viewAll":"Ver Todos","dashboard.failedToLoad":"Falha ao carregar estatísticas do painel. Os dados podem estar desatualizados.","dashboard.noDataYet":"Nenhum dado ainda.","dashboard.recentActivity":"Atividade Recente","dashboard.noActivity":"Nenhuma atividade ainda.","dashboard.type":"Tipo","dashboard.detail":"Detalhe","dashboard.time":"Hora","dashboard.post":"Postagem","dashboard.comment":"Comentário","dashboard.product":"Produto","dashboard.order":"Pedido","dashboard.products":"Produtos","dashboard.orders":"Pedidos","dashboard.revenue":"Receita","dashboard.coupons":"Cupons","dashboard.orderStatus":"Status dos pedidos","dashboard.justNow":"agora","dashboard.minutesAgo":"min","dashboard.hoursAgo":"h","dashboard.daysAgo":"d","posts.title":"Postagens","posts.newPost":"Nova Postagem","posts.editPost":"Editar Postagem","posts.postTitle":"Título da postagem","posts.titleCol":"Título","posts.categoryCol":"Categoria","posts.authorCol":"Autor","posts.createdCol":"Criado","posts.allStatus":"Todos os Status","posts.searchPlaceholder":"Buscar artigos...","posts.content":"Conteúdo","posts.excerpt":"Resumo","posts.briefSummary":"Resumo breve (opcional)","posts.coverImage":"Imagem de capa","posts.writeContent":"Escreva o conteúdo da postagem em Markdown...","posts.selectCategory":"Selecionar categoria","posts.tags":"Tags","posts.slug":"Slug","posts.slugPlaceholder":"Gerado do título se vazio","posts.noTags":"Nenhuma tag disponível","posts.addTag":"Adicionar tag...","posts.createTag":"Criar","posts.createPost":"Criar Postagem","posts.saveChanges":"Salvar Alterações","posts.postCreated":"Postagem criada","posts.postUpdated":"Postagem atualizada","posts.postDeleted":"Postagem excluída","posts.failedToCreate":"Falha ao criar postagem","posts.failedToUpdate":"Falha ao atualizar postagem","posts.failedToDelete":"Falha ao excluir postagem","posts.confirmDelete":"Tem certeza de que deseja excluir esta postagem?","posts.confirmBatchDelete":"Excluir {count} postagens?","posts.batchPublish":"Publicar","posts.batchUnpublish":"Despublicar","posts.batchSuccess":"{count} postagens atualizadas","posts.noPosts":"Nenhuma postagem encontrada.","posts.noPostsDesc":"Crie sua primeira postagem para compartilhar suas ideias.","posts.failedToLoad":"Falha ao carregar postagem.","categories.title":"Categorias","categories.newCategory":"Nova Categoria","categories.createCategory":"Crie uma nova categoria para organizar as postagens.","categories.categoryName":"Nome da categoria","categories.optionalDesc":"Descrição opcional","categories.sortOrder":"Ordem","categories.slug":"Slug","categories.categoryCreated":"Categoria criada","categories.categoryUpdated":"Categoria atualizada","categories.categoryDeleted":"Categoria excluída","categories.failedToCreate":"Falha ao criar categoria","categories.failedToUpdate":"Falha ao atualizar categoria","categories.failedToDelete":"Falha ao excluir categoria","categories.confirmDelete":"Tem certeza de que deseja excluir esta categoria?","categories.confirmDeleteTitle":"Excluir categoria","categories.noCategories":"Sem categorias","categories.noCategoriesDesc":"Organize suas postagens com categorias.","categories.treeTitle":"Categorias","categories.selectCategory":"Selecione uma categoria para ver detalhes","categories.addChild":"Adicionar sub","categories.parent":"Categoria pai","categories.noParent":"Sem pai","categories.editCategory":"Editar categoria","categories.cannotDeleteHasChildren":"Não é possível excluir esta categoria pois ela tem {count} subcategorias. Mova ou exclua-as primeiro.","categories.coverImage":"Imagem de capa","tags.title":"Tags","tags.newTag":"Nova Tag","tags.createTag":"Crie uma nova tag para postagens.","tags.tagName":"Nome da tag","tags.tagCreated":"Tag criada","tags.tagUpdated":"Tag atualizada","tags.tagDeleted":"Tag excluída","tags.failedToCreate":"Falha ao criar tag","tags.failedToUpdate":"Falha ao atualizar tag","tags.failedToDelete":"Falha ao excluir tag","tags.confirmDelete":"Tem certeza de que deseja excluir esta tag?","tags.noTags":"Nenhuma tag encontrada.","tags.noTagsDesc":"Adicione tags para ajudar a organizar e filtrar seu conteúdo.","comments.title":"Comentários","comments.total":"{count} total","comments.all":"Todos","comments.pending":"Pendente","comments.approved":"Aprovado","comments.rejected":"Rejeitado","comments.spam":"Spam","comments.approve":"Aprovar","comments.reject":"Rejeitar","comments.author":"Autor","comments.contentCol":"Conteúdo","comments.post":"Postagem","comments.date":"Data","comments.selected":"{count} selecionados","comments.commentStatusUpdated":"Status do comentário atualizado","comments.commentDeleted":"Comentário excluído","comments.bulkActionDone":"{count} comentário(s) {status}","comments.bulkDeleted":"{count} comentário(s) excluídos","comments.bulkActionFailed":"Falha na ação em lote","comments.bulkDeleteFailed":"Falha ao excluir em lote","comments.failedToUpdateStatus":"Falha ao atualizar status","comments.failedToDelete":"Falha ao excluir comentário","comments.confirmDelete":"Tem certeza de que deseja excluir este comentário?","comments.confirmBulkDelete":"Excluir {count} comentário(s) selecionados?","comments.noComments":"Nenhum comentário encontrado.","comments.noCommentsDesc":"Os comentários aparecerão aqui quando os leitores começarem a interagir.","contentTypes.title":"Tipos de Conteúdo","contentTypes.noFields":"Este tipo de conteúdo não tem campos editáveis.","contentTypes.createContentType":"Criar Tipo de Conteúdo","contentTypes.builder":"Construtor","contentTypes.noContentTypes":"Nenhum tipo de conteúdo ainda","contentTypes.noContentTypesDesc":"Crie seu primeiro tipo de conteúdo para começar a construir seu CMS.","contentTypes.contentTypeDeleted":"Tipo de conteúdo excluído","contentTypes.failedToDelete":"Falha ao excluir","contentTypes.confirmDelete":'Excluir tipo de conteúdo "{singular}"? Isso remove o arquivo de schema, mas NÃO a tabela do banco de dados.',"contentTypes.notFound":"Tipo de Conteúdo Não Encontrado","contentTypes.notFoundMsg":'Tipo de conteúdo "{singular}" não encontrado.',"contentTypes.itemDeleted":"Item excluído","contentTypes.failedToDeleteItem":"Falha ao excluir item","contentTypes.confirmDeleteItem":"Tem certeza de que deseja excluir este item?","contentTypes.batchDeleteSuccess":"{count} itens excluídos","contentTypes.confirmBatchDelete":"Tem certeza de que deseja excluir {count} itens?","contentTypes.export":"Exportar","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} itens exportados","contentTypes.import":"Importar","contentTypes.importJson":"Importar JSON","contentTypes.importCsv":"Importar CSV","contentTypes.importExcel":"Importar Excel","contentTypes.importSuccess":"{count} registros importados","contentTypes.importPartial":"{ok} importados, {failed} com falha","contentTypes.importEmpty":"Nenhum registro encontrado no arquivo","contentTypes.importTooMany":"Muitos registros (máximo {max})","contentTypes.importFailed":"Falha na importação","contentTypes.importTooLarge":"O arquivo excede o limite de 8 MB","contentTypes.noItems":"Nenhum item encontrado.","contentTypes.noItemsDesc":"Crie seu primeiro item para popular esta coleção.","contentTypes.newItem":"Novo {name}","contentTypes.editItem":"Editar {name}","contentTypes.itemNotFound":"Item não encontrado.","contentTypes.fields":"{count} campo(s)","contentTypes.fieldsLabel":"campos","contentTypes.totalRecords":"{count} registros","contentTypes.createdAt":"Criado","contentTypes.updatedAt":"Atualizado","users.title":"Usuários","users.newUser":"Novo Usuário","users.createUser":"Criar Usuário","users.registerNew":"Registre uma nova conta de usuário.","users.username":"Nome de usuário","users.email":"E-mail","users.password":"Senha","users.minChars":"Mínimo de 8 caracteres, deve conter maiúsculas, minúsculas e números","users.role":"Função","users.joined":"Ingressou","users.editRole":"Editar Função do Usuário","users.editUser":"Editar usuário","users.changeRoleFor":"Alterar função de {username} ({email})","users.reader":"Leitor","users.author":"Autor","users.admin":"Admin","users.active":"Ativo","users.suspended":"Suspenso","users.banned":"Banido","users.newPassword":"Nova senha","users.userCreated":"Usuário criado","users.userUpdated":"Usuário atualizado","users.userRoleUpdated":"Função do usuário atualizada","users.failedToCreate":"Falha ao criar usuário","users.failedToUpdate":"Falha ao atualizar usuário","users.noUsers":"Nenhum usuário encontrado.","users.noUsersDesc":"Convide usuários e gerencie suas funções.","users.registeredVia":"Origem","users.userDeleted":"Usuário excluído","users.failedToDelete":"Falha ao excluir usuário","users.confirmDeleteUser":'Excluir usuário "{username}"? Esta ação não pode ser desfeita.',"webhooks.title":"Webhooks","webhooks.newWebhook":"Novo Webhook","webhooks.createWebhook":"Crie uma nova assinatura de webhook para receber notificações de eventos.","webhooks.callbackUrl":"URL de Callback","webhooks.eventsComma":"Eventos (separados por vírgula)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Use * para assinar todos os eventos","webhooks.descriptionOptional":"Descrição (opcional)","webhooks.urlCol":"URL","webhooks.events":"Eventos","webhooks.webhookCreated":"Webhook criado","webhooks.webhookUpdated":"Webhook atualizado","webhooks.webhookDeleted":"Webhook excluído","webhooks.failedToCreate":"Falha ao criar webhook","webhooks.failedToUpdate":"Falha ao atualizar webhook","webhooks.failedToDelete":"Falha ao excluir webhook","webhooks.confirmDelete":"Excluir esta assinatura de webhook?","webhooks.noWebhooks":"Nenhum webhook encontrado.","webhooks.noWebhooksDesc":"Configure webhooks para receber notificações de eventos em tempo real.","tokens.title":"Tokens de API","tokens.newToken":"Novo Token","tokens.createToken":"Criar Token de API","tokens.createTokenDesc":"Gere um novo token de acesso pessoal. O valor do token será exibido apenas uma vez.","tokens.scopesComma":"Escopos (separados por vírgula)","tokens.expiresOptional":"Expira em (opcional)","tokens.tokenCreated":"Token criado","tokens.tokenRevoked":"Token revogado","tokens.failedToCreate":"Falha ao criar token","tokens.failedToRevoke":"Falha ao revogar token","tokens.confirmRevoke":'Revogar token "{name}"? Esta ação não pode ser desfeita.',"tokens.tokenCopied":"Token copiado para a área de transferência","tokens.tokenCreatedCopy":"Token Criado — copie agora!","tokens.copied":"Copiado","tokens.copy":"Copiar","tokens.dismiss":"Descartar","tokens.notShownAgain":"Este token não será exibido novamente. Armazene-o com segurança.","tokens.scopesCol":"Escopos","tokens.expiresCol":"Expira","tokens.lastUsed":"Último Uso","tokens.never":"Nunca","tokens.noTokens":"Nenhum token de API encontrado. Crie um para começar.","tokens.noTokensDesc":"Crie tokens de API para acesso programático.","tokens.description":"Descrição","workflows.title":"Workflows","workflows.instances":"Instâncias","workflows.visualEditor":"Editor Visual","workflows.newWorkflow":"Novo Workflow","workflows.createWorkflow":"Criar Workflow","workflows.createWorkflowDesc":"Defina um novo workflow com etapas. As etapas são configuradas como JSON.","workflows.stepsJson":"Etapas (JSON)","workflows.stepFormat":'Cada etapa: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow criado","workflows.workflowDeleted":"Workflow excluído","workflows.failedToCreate":"Falha ao criar workflow","workflows.failedToDelete":"Falha ao excluir workflow","workflows.confirmDelete":'Excluir workflow "{name}"?',"workflows.noWorkflows":"Nenhum workflow encontrado. Crie um para começar.","workflows.noWorkflowsDesc":"Defina workflows para automatizar seu pipeline de conteúdo.","workflows.steps":"{count} etapas","workflows.workflowStarted":"Workflow iniciado","workflows.editor.title":"Editor de Workflow","workflows.editor.newWorkflow":"Novo Workflow","workflows.editor.stepName":"Nome da etapa","workflows.editor.branchesJson":"Ramificações (array JSON)","workflows.editor.connectEdges":"Conecte arestas deste nó para definir ramificações.","workflows.editor.configJson":"Configuração (JSON)","workflows.editor.apply":"Aplicar","workflows.editor.deleteStep":"Excluir etapa","workflows.editor.addStep":"Adicionar Etapa","workflows.editor.invalidJson":"JSON inválido na configuração","workflows.editor.workflowSaved":"Workflow salvo","workflows.editor.failedToSave":"Falha ao salvar workflow","audit.title":"Log de Auditoria","audit.clearFilters":"Limpar Filtros","audit.noLogs":"Nenhuma entrada de log de auditoria encontrada.","audit.action":"Ação","audit.actor":"Ator","audit.resource":"Recurso","audit.timestamp":"Data/Hora","options.title":"Opções","options.saved":"Opções salvas","options.failedToSave":"Falha ao salvar opções","plugins.title":"Plugins","plugins.loaded":"{count} carregados","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Saúde","plugins.pluginEnabled":"Plugin ativado","plugins.pluginDisabled":"Plugin desativado","plugins.pluginReloaded":"Plugin recarregado","plugins.pluginRemoved":"Plugin removido","plugins.failedToEnable":"Falha ao ativar plugin","plugins.failedToDisable":"Falha ao desativar plugin","plugins.failedToReload":"Falha ao recarregar plugin","plugins.failedToRemove":"Falha ao remover plugin","plugins.noPlugins":"Nenhum plugin carregado.","plugins.placePlugins":"Coloque os plugins no diretório de plugins configurado.","plugins.confirmRemove":'Remover plugin "{name}"? Isso irá descarregá-lo da memória.',"plugins.autoDisabled":"Auto-desativado","plugins.tooManyErrors":"Muitos erros","plugins.errorCount":"{count} erro(s)","plugins.errorsOccurred":"Ocorreram erros","plugins.calls":"{count} chamadas","plugins.idle":"Inativo","plugins.notFound":"Plugin Não Encontrado","plugins.notFoundMsg":"Plugin não encontrado.","plugins.backToPlugins":"Voltar para Plugins","plugins.general":"Geral","plugins.version":"Versão","plugins.reload":"Recarregar","plugins.remove":"Remover","plugins.errorTracking":"Rastreamento de erros e status de auto-desativação","plugins.healthy":"Saudável","plugins.errorCountLabel":"Contagem de Erros","plugins.lastError":"Último Erro","plugins.lastErrorAt":"Último Erro Em","plugins.autoDisabledLabel":"Auto-desativado","plugins.permissions":"Permissões","permissions.declaredFromManifest":"Permissões declaradas no manifesto do plugin","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Pontos de hook registrados e suas métricas de execução","plugins.noHooks":"Nenhum hook registrado.","plugins.totalCalls":"Total de Chamadas","plugins.totalErrors":"Total de Erros","plugins.totalDuration":"Duração Total","plugins.noMetrics":"Sem métricas ainda","plugins.performance":"Visão Geral de Desempenho","plugins.maxMemory":"Memória Máxima","plugins.timeout":"Timeout","plugins.default":"Padrão","media.title":"Mídia","media.files":"{count} arquivos","media.searchFiles":"Pesquisar arquivos...","media.fileDeleted":"Arquivo excluído","media.failedToDelete":"Falha ao excluir arquivo","media.confirmDelete":"Tem certeza de que deseja excluir este arquivo?","media.date":"Data","media.size":"Tamanho","media.ascending":"Crescente","media.descending":"Decrescente","field.mediaUrl":"URL da Mídia","field.startWriting":"Comece a escrever...","field.yes":"Sim","field.no":"Não","field.relatedItemId":"ID do item relacionado","cron.title":"Tarefas Cron","cron.newCron":"Nova Tarefa Cron","cron.expression":"Expressão","cron.handler":"Handler","cron.lastRun":"Última Execução","cron.nextRun":"Próxima Execução","cron.cronCreated":"Tarefa cron criada","cron.cronDeleted":"Tarefa cron excluída","cron.failedToCreate":"Falha ao criar tarefa cron","cron.failedToDelete":"Falha ao excluir tarefa cron","cron.noCrons":"Nenhuma tarefa cron encontrada.","cron.confirmDelete":'Excluir tarefa cron "{name}"?',"tenants.title":"Tenants","tenants.newTenant":"Novo Tenant","tenants.createTenant":"Crie um novo tenant para isolamento multi-tenant.","tenants.tenantName":"Nome do tenant","tenants.slug":"Slug","tenants.domain":"Domínio","tenants.owner":"Proprietário","tenants.tenantCreated":"Tenant criado","tenants.tenantUpdated":"Tenant atualizado","tenants.tenantDeleted":"Tenant excluído","tenants.failedToCreate":"Falha ao criar tenant","tenants.failedToUpdate":"Falha ao atualizar tenant","tenants.failedToDelete":"Falha ao excluir tenant","tenants.confirmDelete":"Tem certeza de que deseja excluir este tenant?","tenants.noTenants":"Nenhum tenant encontrado.","tenants.noTenantsDesc":"Crie tenants para SaaS multi-tenant.","rbac.title":"Funções e Permissões","rbac.roles":"Funções","rbac.newRole":"Nova Função","rbac.createRole":"Crie uma nova função para controle de acesso.","rbac.roleName":"Nome da função","rbac.roleDesc":"Descrição da função","rbac.roleCreated":"Função criada","rbac.roleUpdated":"Função atualizada","rbac.roleDeleted":"Função excluída","rbac.failedToCreate":"Falha ao criar função","rbac.failedToUpdate":"Falha ao atualizar função","rbac.failedToDelete":"Falha ao excluir função","rbac.confirmDelete":'Excluir função "{name}"? Isso removerá todas as permissões associadas.',"rbac.systemRole":"Sistema","rbac.permissions":"Permissões","rbac.addPermission":"Adicionar Permissão","rbac.action":"Ação","rbac.subject":"Recurso","rbac.noRoles":"Nenhuma função encontrada.","builder.title":"Construtor de Tipos de Conteúdo","builder.editContentType":"Editar Tipo de Conteúdo","builder.createContentType":"Criar Tipo de Conteúdo","builder.baseConfig":"Configuração Base","builder.singularName":"Nome Singular","builder.pluralName":"Nome Plural","builder.tableName":"Nome da Tabela","builder.fieldsSection":"Campos","builder.addField":"Adicionar Campo","builder.preview":"Pré-visualização","builder.save":"Salvar Tipo de Conteúdo","builder.saving":"Salvando...","builder.saved":"Tipo de conteúdo salvo","builder.failedToSave":"Falha ao salvar tipo de conteúdo","builder.confirmDeleteField":'Excluir campo "{name}"?',"builder.text":"Texto","builder.richText":"Texto Rico","builder.email":"E-mail","builder.password":"Senha","builder.uid":"UID","builder.integer":"Inteiro","builder.bigInt":"Big Int","builder.decimal":"Decimal","builder.float":"Float","builder.boolean":"Booleano","builder.date":"Data","builder.datetime":"Data e Hora","builder.time":"Hora","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relação","builder.mediaType":"Mídia","builder.link":"Link","builder.required":"Obrigatório","builder.unique":"Único","builder.privateField":"Privado","builder.immutable":"Imutável","builder.label":"Rótulo","builder.defaultValue":"Valor Padrão","builder.maxLength":"Comprimento Máximo","builder.minValue":"Mínimo","builder.maxValue":"Máximo","builder.enumValues":"Valores Enum (separados por vírgula)","builder.relationType":"Tipo de Relação","builder.relationTarget":"Tabela de Destino","builder.foreignKey":"Chave Estrangeira","builder.throughTable":"Tabela Intermediária","builder.draftPublish":"Rascunho/Publicar","builder.timestamps":"Timestamps","builder.softDelete":"Exclusão Suave","builder.slugField":"Campo Slug","media.name":"Nome","media.type":"Tipo","media.other":"Outro","media.uploadFailed":"Falha no upload","media.dropFiles":"Solte arquivos aqui, cole ou {browse}","media.uploading":"Enviando {count} arquivo(s)...","media.done":"Concluído","media.failedUpload":"Falhou","media.urlCopied":"URL copiada","media.copyUrl":"Copiar URL","media.download":"Baixar","media.dimensions":"Dimensões","media.uploaded":"Enviado","media.urlLabel":"URL","media.noVideoSupport":"Seu navegador não suporta vídeo.","media.downloadFile":"Baixar arquivo","workflows.instances.title":"Instâncias de Workflow","workflows.instances.showLogs":"Mostrar logs","workflows.instances.hideLogs":"Ocultar logs","workflows.instances.currentStep":"Atual","workflows.instances.context":"Contexto","workflows.instances.stepLogs":"Logs da Etapa ({count})","workflows.instances.noStepLogs":"Nenhum log de etapa.","workflows.instances.noInstances":"Nenhuma instância de workflow encontrada.","workflows.instances.instanceCount":"{count} instância(s)","workflows.instances.definitions":"Definições","workflows.instances.filterStatus":"Filtrar status","workflows.instances.cancelled":"Instância cancelada","workflows.editor.editStep":"Editar Etapa","workflows.editor.name":"Nome","workflows.editor.type":"Tipo","workflows.editor.backToList":"Voltar à lista","workflows.editor.workflowName":"Nome do workflow...","workflows.editor.failedToLoad":"Falha ao carregar workflow","workflows.editor.immutableNotice":"Definições de workflow são imutáveis. Crie uma nova para alterar as etapas.","workflows.editor.untitled":"Workflow Sem Título","workflows.editor.save":"Salvar","workflows.editor.saving":"Salvando...","cron.createSchedule":"Criar Agendamento Cron","cron.labelField":"Rótulo","cron.jobType":"Tipo de Tarefa","cron.cronExpression":"Expressão Cron (6 segmentos)","cron.format":"Formato: seg min hora dia mês dia-semana","cron.payload":"Payload (JSON, opcional)","cron.schedules":"{count} agendamento(s)","cron.schedule":"Agendamento","cron.pluginCol":"Plugin","cron.scheduleCreated":"Agendamento criado","cron.scheduleToggled":"Agendamento alternado","cron.scheduleDeleted":"Agendamento excluído","cron.scheduleUpdated":"Agendamento atualizado","cron.noCronSchedules":"Nenhum agendamento cron.","cron.seedHint":"Crie um acima ou ative CRON_SEED_ENABLED para semear os padrões.","cron.confirmDeleteSchedule":'Excluir agendamento "{name}"? Esta ação não pode ser desfeita.',"cron.scheduleNotFound":"Agendamento Não Encontrado","cron.backToCronSchedules":"Voltar para Agendamentos Cron","cron.scheduleDetails":"Detalhes do Agendamento","cron.cronExpression7":"6 segmentos: seg min hora dia mês dia-semana","cron.builtIn":"Integrado","cron.executionHistory":"Histórico de Execução","cron.recentLogs":"Logs de execução recentes deste agendamento","cron.cleanupOld":"Limpar Antigos","cron.cleanedUp":"{count} log(s) antigo(s) limpo(s)","cron.noExecutionLogs":"Nenhum log de execução ainda.","cron.success":"Sucesso","cron.failedStatus":"Falhou","cron.running":"Em Execução","cron.newSchedule":"Novo Agendamento","cron.idField":"ID","cron.started":"Iniciado","cron.finished":"Finalizado","cron.duration":"Duração","cron.error":"Erro","cron.created":"Criado","cron.updated":"Atualizado","tenants.createForIsolation":"Crie um novo tenant para isolamento de dados.","tenants.cannotDeleteDefault":"Não é possível excluir o tenant padrão","tenants.confirmDeleteMsg":"Excluir este tenant? Os dados pertencentes a este tenant NÃO serão removidos.","tenants.created":"Criado","rbac.addRoleDesc":"Adicione uma nova função ao sistema.","rbac.updateRoleDesc":'Atualizar função "{name}".',"rbac.deleteRoleTitle":"Excluir Função","rbac.deleteRoleConfirm":'Tem certeza de que deseja excluir "{name}"? Esta ação não pode ser desfeita.',"rbac.addPermissionTitle":"Adicionar Permissão","rbac.addPermissionDesc":'Conceda uma nova permissão a "{name}". Use * para curinga.',"rbac.fieldsCol":"Campos","rbac.conditionsCol":"Condições","rbac.fieldsOptional":"Campos (separados por vírgula, opcional)","rbac.removePermissionTitle":"Remover Permissão","rbac.removePermissionDesc":"Remover {action} em {subject}?","rbac.noPermissions":"Nenhuma permissão configurada.","rbac.selectRole":"Selecione uma função para ver as permissões","rbac.prev":"Anterior","options.noChanges":"Nenhuma alteração","options.noOptions":"Nenhuma opção disponível.","options.reset":"Redefinir","options.saveChanges":"Salvar Alterações","audit.failedToLoad":"Falha ao carregar log de auditoria. Tente novamente.","audit.noEntries":"Nenhuma entrada de auditoria encontrada.","audit.noEntriesDesc":"Entradas de auditoria aparecerão conforme as ações são realizadas.","audit.timeCol":"Hora","audit.subjectId":"ID do Sujeito","audit.detailCol":"Detalhe","audit.system":"sistema","audit.from":"De","audit.to":"Para","audit.search":"Pesquisar","audit.clear":"Limpar","audit.today":"Hoje","builder.untitled":"Tipo de Conteúdo Sem Título","builder.fieldCount":"{count} campo(s)","builder.fieldList":"Campos","builder.protocols":"Protocolos","builder.systemFields":"Campos do sistema","builder.system":"sistema","builder.newField":"Novo campo","builder.addAnotherField":"Adicionar outro campo","builder.addAField":"Adicionar um campo","builder.chooseFieldType":"Escolha um tipo de campo para adicionar ao seu tipo de conteúdo.","builder.fieldConfiguration":"Configuração do Campo","builder.fieldName":"Nome do Campo","builder.fieldTypeLabel":"Tipo do Campo","builder.displayLabel":"Rótulo de exibição","builder.helpText":"Texto de ajuda","builder.removeField":"Remover Campo","builder.removeFieldConfirm":"Remover este campo?","builder.noAdditionalOptions":"Nenhuma opção adicional para este tipo de campo.","builder.acceptedTypes":"Tipos Aceitos","builder.maxCount":"Quantidade Máxima","builder.target":"Destino","builder.valuesComma":"Valores (separados por vírgula)","builder.describeContentType":"Descreva este tipo de conteúdo...","builder.contentTypeUpdated":"Tipo de conteúdo atualizado","builder.contentTypeCreated":"Tipo de conteúdo criado","builder.newFieldCategory":"Número","layout.crm":"CRM","layout.pages":"Páginas","layout.reusableBlocks":"Blocos","crm.dashboard":"Painel do CRM","crm.pipeline":"Pipeline","crm.contacts":"Contatos","crm.companies":"Empresas","crm.deals":"Negócios","crm.activities":"Atividades","crm.notes":"Notas","crm.reports":"Relatórios","crm.totalCompanies":"Total de Empresas","crm.totalContacts":"Total de Contatos","crm.openDeals":"Negócios Abertos","crm.wonDeals":"Negócios Ganhos","crm.pipelineValue":"Valor do Pipeline","crm.weightedValue":"Valor Ponderado","crm.winRate":"Taxa de Conversão","crm.avgDealSize":"Tamanho Médio do Negócio","crm.recentActivities":"Atividades da Semana","crm.totalActivities":"Total de Atividades","crm.leaderboard":"Ranking","crm.noData":"Nenhum dado disponível.","crm.newDeal":"Novo Negócio","crm.createDeal":"Criar Negócio","crm.dealTitle":"Título","crm.dealTitlePlaceholder":"Informe o título do negócio...","crm.amount":"Valor","crm.probability":"Probabilidade","crm.stage":"Estágio","crm.advanceStage":"Avançar para o próximo estágio","crm.totalValue":"Valor Total","crm.dealCreated":"Negócio criado","crm.failedToCreateDeal":"Falha ao criar negócio","crm.dealStageUpdated":"Estágio do negócio atualizado","crm.failedToUpdateStage":"Falha ao atualizar estágio","crm.titleRequired":"O título é obrigatório","crm.newContact":"Novo Contato","crm.editContact":"Editar Contato","crm.contact":"Contato","crm.name":"Nome","crm.email":"E-mail","crm.phone":"Telefone","crm.company":"Empresa","crm.source":"Origem","crm.lifecycleStage":"Estágio do Ciclo de Vida","crm.noContacts":"Nenhum contato encontrado.","crm.firstName":"Nome","crm.lastName":"Sobrenome","crm.jobTitle":"Cargo","crm.newCompany":"Nova Empresa","crm.editCompany":"Editar Empresa","crm.companyName":"Nome da Empresa","crm.industry":"Indústria","crm.size":"Porte","crm.website":"Website","crm.city":"Cidade","crm.country":"País","crm.noCompanies":"Nenhuma empresa encontrada.","crm.deal":"Negócio","crm.editDeal":"Editar Negócio","crm.closeDate":"Data de Fechamento","crm.lossReason":"Motivo da Perda","crm.noDeals":"Nenhum negócio encontrado.","crm.dealInfo":"Informações do Negócio","crm.newActivity":"Nova Atividade","crm.editActivity":"Editar Atividade","crm.activity":"Atividade","crm.type":"Tipo","crm.subject":"Assunto","crm.content":"Conteúdo","crm.date":"Data","crm.duration":"Duração","crm.outcome":"Resultado","crm.noActivities":"Nenhuma atividade encontrada.","crm.newNote":"Nova Nota","crm.editNote":"Editar Nota","crm.note":"Nota","crm.relatedTo":"Relacionado a","crm.pinned":"Fixado","crm.createdAt":"Criado","crm.noNotes":"Nenhuma nota encontrada.","crm.contentRequired":"O conteúdo é obrigatório","crm.relatedContactId":"ID do Contato Relacionado","crm.relatedCompanyId":"ID da Empresa Relacionada","crm.relatedDealId":"ID do Negócio Relacionado","crm.contactInfo":"Informações do Contato","crm.timeline":"Linha do Tempo","crm.noTimeline":"Nenhum evento na linha do tempo.","crm.addNote":"Adicionar Nota","crm.notePlaceholder":"Digite uma nota...","crm.lifecycleUpdated":"Estágio do ciclo de vida atualizado","crm.failedToUpdateLifecycle":"Falha ao atualizar estágio do ciclo de vida","crm.companyInfo":"Informações da Empresa","crm.funnelReport":"Relatório de Funil","crm.activityReport":"Relatório de Atividades","crm.conversionRate":"Conversão","crm.byType":"Por Tipo","crm.byOutcome":"Por Resultado","pages.title":"Páginas","pages.newPage":"Nova Página","pages.editPage":"Editar Página","pages.pageDeleted":"Página excluída","pages.pageCreated":"Página criada","pages.pageUpdated":"Página atualizada","pages.failedToDelete":"Falha ao excluir página","pages.failedToCreate":"Falha ao criar página","pages.failedToUpdate":"Falha ao atualizar página","pages.statusUpdated":"Status da página atualizado","pages.failedToUpdateStatus":"Falha ao atualizar status","pages.confirmDelete":"Tem certeza de que deseja excluir esta página?","pages.noPages":"Nenhuma página encontrada.","pages.noPagesDesc":"Crie sua primeira página para começar a construir seu site.","pages.noBlocks":"Nenhum bloco reutilizável ainda.","pages.noBlocksDesc":"Crie blocos reutilizáveis para usar em suas páginas.","pages.publish":"Publicar","pages.unpublish":"Despublicar","pages.preview":"Pré-visualizar","pages.slug":"Slug","pages.template":"Template","pages.createdAt":"Criado","pages.basicInfo":"Informações Básicas","pages.titleLabel":"Título","pages.titlePlaceholder":"Informe o título da página...","pages.coverImage":"Imagem de Capa","pages.metaTitle":"Meta Título","pages.metaDescription":"Meta Descrição","pages.ogImage":"Imagem OG","pages.content":"Conteúdo","pages.blockMode":"Blocos","pages.saveDraft":"Salvar Rascunho","pages.writeContent":"Escreva o conteúdo da página...","pages.addBlock":"Adicionar Bloco","pages.chooseBlock":"Escolha um tipo de bloco","pages.reusableBlocks":"Blocos Reutilizáveis","pages.createReusable":"Criar Bloco Reutilizável","pages.editReusable":"Editar Bloco Reutilizável","pages.rbName":"Nome","pages.rbType":"Tipo de Bloco","pages.rbDescription":"Descrição","pages.rbContent":"Conteúdo","command.search":"Pesquisar...","command.placeholder":"Digite um comando ou pesquise...","command.noResults":"Nenhum resultado encontrado.","command.actions":"Ações","command.switchToLight":"Mudar para Modo Claro","command.switchToDark":"Mudar para Modo Escuro","layout.ecommerce":"E-Commerce","layout.products":"Produtos","layout.productCategories":"Categorias de produtos","layout.orders":"Pedidos","layout.finance":"Finanças","layout.currencies":"Moedas","layout.wallets":"Carteiras","layout.paymentChannels":"Canais de pagamento","layout.productComments":"Avaliações","layout.coupons":"Cupons","layout.shippingTemplates":"Modelos de envio","products.title":"Produtos","products.newProduct":"Novo Produto","products.editProduct":"Editar Produto","products.productTitle":"Título do Produto","products.price":"Preço","products.originalPrice":"Preço Original","products.stock":"Estoque","products.sales":"Vendas","products.coverUrl":"URL da Capa","products.description":"Descrição","products.content":"Conteúdo","products.slug":"Slug","products.status":"Status","products.category":"Categoria","products.unit":"Unidade","products.minPurchase":"Compra Mínima","products.maxPurchase":"Compra Máxima","products.sortOrder":"Ordem","products.metaTitle":"Meta Título","products.metaDescription":"Meta Descrição","products.productCreated":"Produto criado","products.productUpdated":"Produto atualizado","products.productDeleted":"Produto excluído","products.batchDeleted":"{{count}} produtos excluídos","products.batchSuccess":"{{count}} produtos atualizados","products.batchActivate":"Ativar","products.batchDeactivate":"Desativar","products.failedToCreate":"Falha ao criar produto","products.failedToUpdate":"Falha ao atualizar produto","products.failedToDelete":"Falha ao excluir produto","products.confirmDelete":"Tem certeza de que deseja excluir este produto?","products.confirmBatchDelete":"Tem certeza de que deseja excluir {{count}} produtos?","products.noProducts":"Nenhum produto ainda","products.noProductsDesc":"Crie seu primeiro produto para começar a vender.","products.allStatus":"Todos os Status","products.searchPlaceholder":"Pesquisar produto...","products.active":"Ativo","products.draft":"Rascunho","products.archived":"Arquivado","products.general":"Geral","products.media":"Mídia","products.pricing":"Preços","products.purchaseSettings":"Configurações de compra","products.summary":"Resumo","products.phTitle":"Título do produto...","products.phSummary":"Breve descrição do produto...","products.images":"Imagens","products.cover":"Capa","products.dropImages":"Solte, cole ou clique para enviar imagens","productCategories.categoryName":"Nome da categoria","productCategories.newCategory":"Nova categoria","productCategories.createCategory":"Criar categoria","productCategories.editCategory":"Editar categoria","productCategories.optionalDesc":"Descrição (opcional)","productCategories.parent":"Categoria pai","productCategories.noParent":"Sem pai","productCategories.sortOrder":"Ordem","productCategories.slug":"Slug","productCategories.noCategories":"Sem categorias","productCategories.noCategoriesDesc":"Crie sua primeira categoria de produtos para organizá-los.","productCategories.categoryCreated":"Categoria criada","productCategories.categoryUpdated":"Categoria atualizada","productCategories.categoryDeleted":"Categoria excluída","productCategories.failedToCreate":"Falha ao criar categoria","productCategories.failedToUpdate":"Falha ao atualizar categoria","productCategories.failedToDelete":"Falha ao excluir categoria","productCategories.confirmDelete":"Tem certeza de que deseja excluir esta categoria?","productCategories.confirmDeleteTitle":"Excluir categoria","productCategories.cannotDeleteHasChildren":"Não é possível excluir esta categoria pois ela tem {count} subcategorias. Mova ou exclua-as primeiro.","productCategories.treeTitle":"Categorias","productCategories.selectCategory":"Selecione uma categoria para ver detalhes","productCategories.addChild":"Adicionar sub","orders.title":"Pedidos","orders.orderNo":"Nº do Pedido","orders.buyer":"Comprador","orders.total":"Total","orders.status":"Status","orders.items":"Itens","orders.remark":"Observação","orders.adminRemark":"Observação do Admin","orders.createdAt":"Criado","orders.actions":"Ações","orders.allStatus":"Todos os Status","orders.searchPlaceholder":"Pesquisar n° pedido, comprador...","orders.pending":"Pendente","orders.paid":"Pago","orders.shipped":"Enviado","orders.completed":"Concluído","orders.cancelled":"Cancelado","orders.refunded":"Reembolsado","orders.confirmPay":"Confirmar pagamento?","orders.orderPaid":"Pedido marcado como pago","orders.confirmShip":"Enviar este pedido?","orders.orderShipped":"Pedido enviado","orders.confirmCancel":"Cancelar este pedido?","orders.orderCancelled":"Pedido cancelado","orders.confirmRefund":"Reembolsar este pedido?","orders.orderRefunded":"Pedido reembolsado","orders.failedToPay":"Falha ao marcar como pago","orders.failedToShip":"Falha ao enviar","orders.failedToCancel":"Falha ao cancelar","orders.failedToRefund":"Falha ao reembolsar","orders.noOrders":"Nenhum pedido ainda","orders.noOrdersDesc":"Os pedidos aparecerão aqui quando os clientes realizarem compras.","orders.trackingNo":"Nº de Rastreio","orders.carrier":"Transportadora","orders.shipInfo":"Informações de Envio","orders.buyerInfo":"Informações do Comprador","orders.shippingAddress":"Endereço de Entrega","orders.orderDetail":"Detalhes do Pedido","orders.stats.totalOrders":"Total de Pedidos","orders.stats.totalRevenue":"Receita Total","orders.stats.pending":"Pendentes","orders.stats.completed":"Concluídos","orders.stats.todayOrders":"Pedidos hoje","orders.stats.todayRevenue":"Receita hoje","payments.title":"Canais de Pagamento","payments.newChannel":"Novo Canal","payments.provider":"Provedor","payments.name":"Nome do Canal","payments.mode":"Modo","payments.active":"Ativo","payments.live":"Produção","payments.test":"Teste","payments.credentials":"Credenciais","payments.webhookSecret":"Segredo do Webhook","payments.settings":"Configurações","payments.channelCreated":"Canal de pagamento criado","payments.channelUpdated":"Canal de pagamento atualizado","payments.channelDeleted":"Canal de pagamento excluído","payments.failedToCreate":"Falha ao criar canal de pagamento","payments.failedToUpdate":"Falha ao atualizar canal de pagamento","payments.failedToDelete":"Falha ao excluir canal de pagamento","payments.confirmDelete":"Excluir este canal de pagamento?","payments.noChannels":"Nenhum canal de pagamento","payments.noChannelsDesc":"Adicione um canal de pagamento para começar a receber pagamentos.","payments.selectProvider":"Selecionar provedor...","payments.testMode":"Modo de teste (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"ID do comerciante","payments.fPrivateKey":"Chave privada RSA","payments.fSerialNo":"Nº de série do certificado","payments.fWebhookSecret":"Segredo de assinatura webhook","payments.fAlipayPublicKey":"Chave pública Alipay","payments.fPlatformCert":"Certificado da plataforma (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"URL de notificação","payments.phSk":"sk_live_... ou sk_test_...","payments.phRsaKey":"Cole a chave privada RSA (PEM ou Base64)","payments.phUrl":"https://...","payments.editChannel":"Editar canal","payments.leaveBlankToKeep":"Deixe em branco para manter","layout.paymentOrders":"Ordens de pagamento","paymentOrders.title":"Ordens de pagamento","paymentOrders.orderId":"Pedido","paymentOrders.title_col":"Título","paymentOrders.amount":"Valor","paymentOrders.provider":"Provedor","paymentOrders.noOrders":"Sem ordens de pagamento","paymentOrders.noOrdersDesc":"As ordens de pagamento aparecerão aqui quando os clientes pagarem.","paymentOrders.refund":"Reembolsar","paymentOrders.refundTitle":"Reembolso","paymentOrders.refundOrder":"Reembolsar pedido","paymentOrders.refundAmount":"Valor do reembolso","paymentOrders.refundReason":"Motivo","paymentOrders.refundSuccess":"Reembolso enviado","paymentOrders.refundFailed":"Falha ao reembolsar","layout.paymentTransactions":"Transações de pagamento","paymentTransactions.title":"Transações de pagamento","paymentTransactions.orderId":"Pedido","paymentTransactions.type":"Tipo","paymentTransactions.amount":"Valor","paymentTransactions.providerTxId":"ID da transação do provedor","paymentTransactions.noTransactions":"Sem transações","paymentTransactions.noTransactionsDesc":"As transações aparecerão aqui quando ocorrerem eventos de pagamento.","currencies.title":"Moedas","currencies.newCurrency":"Nova Moeda","currencies.code":"Código","currencies.name":"Nome","currencies.decimals":"Decimais","currencies.active":"Ativa","currencies.currencyCreated":"Moeda criada","currencies.currencyUpdated":"Moeda atualizada","currencies.failedToCreate":"Falha ao criar moeda","currencies.failedToUpdate":"Falha ao atualizar moeda","currencies.noCurrencies":"Nenhuma moeda","currencies.noCurrenciesDesc":"Adicione uma moeda para habilitar suporte a múltiplas moedas.","wallets.title":"Carteiras","wallets.user":"Usuário","wallets.currency":"Moeda","wallets.balance":"Saldo","wallets.frozen":"Congelado","wallets.credit":"Creditar","wallets.debit":"Debitar","wallets.transactions":"Transações","wallets.amount":"Valor","wallets.type":"Tipo","wallets.reference":"Referência","wallets.creditTitle":"Creditar Carteira","wallets.debitTitle":"Debitar Carteira","wallets.userId":"ID do Usuário","wallets.remark":"Observação","wallets.creditSuccess":"Carteira creditada","wallets.debitSuccess":"Carteira debitada","wallets.failedToCredit":"Falha ao creditar carteira","wallets.failedToDebit":"Falha ao debitar carteira","wallets.noWallets":"Nenhuma carteira","wallets.noWalletsDesc":"Carteiras são criadas quando os usuários recebem sua primeira transação.","wallets.noTransactions":"Nenhuma transação ainda.","adminLogin.title":"Painel Administrativo","adminLogin.subtitle":"Entre com suas credenciais de administrador","adminLogin.email":"E-mail","adminLogin.password":"Senha","adminLogin.submit":"Entrar","adminLogin.loading":"Entrando…","adminLogin.error":"E-mail ou senha inválidos","adminLogin.footer":"RaisFast Admin — apenas pessoal autorizado","adminLogin.sessionExpired":"Sua sessão expirou. Por favor, entre novamente.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Integração","layout.channels":"Canais","layout.receipts":"Recibos","layout.apiClients":"Clientes API","common.reset":"Redefinir","common.close":"Fechar","integration.newChannel":"Novo canal","integration.editChannel":"Editar canal","integration.channelKey":"Chave do canal","integration.displayName":"Nome de exibição","integration.provider":"Provedor","integration.mode":"Modo","integration.transport":"Transporte","integration.framing":"Enquadramento","integration.endpoint":"Endpoint","integration.verifyKind":"Verificação","integration.verifyConfig":"Config de verificação (JSON)","integration.credentials":"Credenciais (JSON)","integration.credentialsKeepHint":"Deixe em branco para manter as credenciais seladas","integration.mapping":"Mapeamento (JSONPath)","integration.pullConfig":"Config de pull (JSON)","integration.streamConfig":"Config de stream (JSON)","integration.targetType":"Content type de destino","integration.routeExtra":"Extra de rota (JSON)","integration.redeliveryMax":"Max. de reentregas","integration.stack":"Pilha","integration.noChannels":"Sem canais de integração","integration.noChannelsDesc":"Adicione um canal para receber webhooks, streams e polls de entrada.","integration.channelCreated":"Canal criado","integration.channelUpdated":"Canal atualizado","integration.channelDeleted":"Canal excluído","integration.failedToCreate":"Falha ao criar","integration.failedToUpdate":"Falha ao atualizar","integration.failedToDelete":"Falha ao excluir","integration.failedToTest":"Teste falhou","integration.confirmDeleteChannel":'Excluir o canal "{key}"? Os recibos permanecem para auditoria.',"integration.testMapping":"Testar mapeamento","integration.sampleBody":"Corpo de requisição de exemplo","integration.preview":"Pré-visualização do envelope normalizado","integration.runTest":"Executar","integration.hasCredentials":"Credenciais seladas no vault","integration.allChannels":"Todos os canais","integration.allStatuses":"Todos os status","integration.traceIdFilter":"Filtrar por trace ID…","integration.noReceipts":"Sem recibos","integration.noReceiptsDesc":"As entregas de entrada aparecerão aqui com o rastreio completo.","integration.receivedAt":"Recebido","integration.attempts":"Tentativas","integration.nextRetryAt":"Próxima tentativa","integration.noSteps":"Nenhuma etapa registrada","integration.pending":"pendente","integration.receiptInfo":"Recibo","integration.trace":"Rastreio","integration.complete":"completo","integration.firstPass":"Primeira passagem","integration.asyncChain":"Cadeia assíncrona","integration.envelopeSnapshot":"Snapshot do envelope","integration.fullSteps":"Cronologia completa de etapas","integration.egressCalls":"Chamadas de saída","integration.noEgress":"Sem chamadas de saída","integration.noEgressDesc":"As chamadas de saída disparadas por este recibo aparecerão aqui.","integration.replayed":"Reproduzido","integration.dryRunDone":"Simulação concluída — relatório no rastreio","integration.failedToReplay":"Falha ao reproduzir","integration.replay":"Reproduzir","integration.dryRunReplay":"Simular reprodução","integration.replayConfirmTitle":"Reproduzir este recibo?","integration.replayConfirmDesc":"A etapa de rota é reexecutada a partir do snapshot do envelope (upsert por external_id).","integration.receiptNotFound":"Recibo não encontrado","integration.newClient":"Novo cliente API","integration.editClient":"Editar cliente API","integration.clientKey":"Chave do cliente","integration.baseUrl":"URL base","integration.authConfig":"Config de auth (JSON)","integration.rateLimit":"Limite de taxa (JSON)","integration.ops":"Operações (JSON)","integration.opsCount":"Ops","integration.noClients":"Sem clientes API","integration.noClientsDesc":"Adicione um cliente API declarativo para chamadas de saída.","integration.clientCreated":"Cliente API criado","integration.clientUpdated":"Cliente API atualizado","integration.clientDeleted":"Cliente API excluído","integration.confirmDeleteClient":'Excluir o cliente API "{key}"?',"integration.testCall":"Chamada de teste","integration.selectOp":"Selecione uma op","integration.input":"Entrada (JSON)","integration.result":"Resultado","integration.allClients":"Todos os clientes","integration.egressLog":"Registro de saída","integration.latency":"Latência","integration.createdAt":"Criado","integration.basicInfo":"Básico","integration.trustSection":"Confiança (L0)","integration.normalizeSection":"Normalização (L2)","integration.routingSection":"Roteamento e confiabilidade (L3/L4)","integration.presetTitle":"Começar de um preset","integration.presetPlaceholder":"Escolha uma configuração testada…","integration.presetHint":"Preenche todo o formulário — ajuste depois chaves, segredos e o content type alvo. Exemplos de integrações reais (GitHub / Feishu / DingTalk).","integration.presetApplied":"Preset aplicado — revise e ajuste","integration.jsonInvalid":"JSON inválido","integration.insertExample":"Inserir exemplo","integration.presetGeneric":"Webhook genérico (sem verificação)","integration.presetGenericDesc":"push simples + mapeamento JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + verificação de assinatura hmac-sha256","integration.presetGithub":"Webhook do GitHub","integration.presetGithubDesc":"x-hub-signature-256, idempotência por delivery GUID","integration.presetShopify":"Webhook do Shopify","integration.presetShopifyDesc":"HMAC base64, idempotência por webhook-id","integration.presetDingtalk":"Bot DingTalk Stream","integration.presetDingtalkDesc":"stream ws + framing dispatch + pre_connect","integration.presetFeishu":"Bot Feishu (conexão longa)","integration.presetFeishuDesc":"stream ws + pb-frame + handshake oauth","integration.presetPull":"Polling HTTP (cursor)","integration.presetPullDesc":"pull + paginação since_id + checkpoint","integration.presetImap":"Caixa IMAP (nativa)","integration.presetImapDesc":"pull + imap + mime, semântica mark-read, com IDLE"},WC={"layout.brand":"RaisFast","layout.adminPanel":"Admin-Panel","layout.dashboard":"Dashboard","layout.content":"Inhalt","layout.extension":"Erweiterungen","layout.system":"System","layout.posts":"Beiträge","layout.categories":"Kategorien","layout.tags":"Schlagwörter","layout.comments":"Kommentare","layout.media":"Medien","layout.contentTypes":"Inhaltstypen","layout.users":"Benutzer","layout.plugins":"Plugins","layout.rolesPermissions":"Rollen & Berechtigungen","layout.cron":"Cron","layout.tenants":"Mandanten","layout.webhooks":"Webhooks","layout.apiTokens":"API-Token","layout.workflows":"Workflows","layout.auditLog":"Audit-Log","layout.options":"Einstellungen","layout.tenant":"Mandant","layout.clearTenant":"Mandantenfilter zurücksetzen","layout.all":"Alle","layout.accessDenied":"Zugriff verweigert","layout.accessDeniedMsg":"Sie müssen als Autor oder Administrator angemeldet sein, um auf diesen Bereich zuzugreifen.","layout.goToLogin":"Zum Login","layout.toggleTheme":"Design umschalten","layout.signOut":"Abmelden","layout.profile":"Profil","common.loading":"Laden...","common.save":"Speichern","common.cancel":"Abbrechen","common.ok":"OK","common.create":"Erstellen","common.creating":"Wird erstellt...","common.saving":"Wird gespeichert...","common.delete":"Löschen","common.confirmDeleteTitle":"Löschen bestätigen","common.edit":"Bearbeiten","common.content":"Inhalt","common.remove":"Entfernen","common.view":"Anzeigen","common.back":"Zurück","common.actions":"Aktionen","common.status":"Status","common.retry":"Erneut versuchen","common.previous":"Zurück","common.next":"Weiter","common.pageOf":"Seite {page} von {total}","common.noData":"Keine Daten","common.all":"Alle","common.draft":"Entwurf","common.published":"Veröffentlicht","common.archived":"Archiviert","common.enabled":"Aktiviert","common.disabled":"Deaktiviert","common.name":"Name","common.description":"Beschreibung","common.enabledCount":"{count} aktiviert","common.disabledCount":"{count} deaktiviert","common.adminOnly":"Nur für Administratoren","common.adminOnlyMsg":"Nur Administratoren können diesen Bereich verwalten.","common.backToDashboard":"Zum Dashboard","common.confirmDelete":"Sind Sie sicher, dass Sie dieses Element löschen möchten?","common.notFound":"Nicht gefunden","common.failedToLoad":"Laden fehlgeschlagen","common.selectStatus":"Status auswählen","common.titleRequired":"Titel ist erforderlich","common.contentRequired":"Inhalt ist erforderlich","common.nameRequired":"Name ist erforderlich","common.invalidJson":"Ungültiges JSON","common.isRequired":"{field} ist erforderlich","common.created":"{name} erstellt","common.updated":"{name} aktualisiert","common.deleted":"{name} gelöscht","common.failedToCreate":"{name} konnte nicht erstellt werden","common.failedToUpdate":"{name} konnte nicht aktualisiert werden","common.failedToDelete":"{name} konnte nicht gelöscht werden","common.none":"Keine","common.noDependencies":"Keine Abhängigkeiten","dashboard.title":"Dashboard","dashboard.posts":"Beiträge","dashboard.comments":"Kommentare","dashboard.categories":"Kategorien","dashboard.tags":"Schlagwörter","dashboard.media":"Medien","dashboard.users":"Benutzer","dashboard.contentTypes":"Inhaltstypen","dashboard.postsLast14Days":"Beiträge (letzte 14 Tage)","dashboard.ordersAndProducts14Days":"Bestellungen & Produkte (letzte 14 Tage)","dashboard.viewAll":"Alle anzeigen","dashboard.failedToLoad":"Dashboard-Statistiken konnten nicht geladen werden. Daten sind möglicherweise veraltet.","dashboard.noDataYet":"Noch keine Daten.","dashboard.recentActivity":"Letzte Aktivitäten","dashboard.noActivity":"Noch keine Aktivitäten.","dashboard.type":"Typ","dashboard.detail":"Detail","dashboard.time":"Zeit","dashboard.post":"Beitrag","dashboard.comment":"Kommentar","dashboard.product":"Produkt","dashboard.order":"Bestellung","dashboard.products":"Produkte","dashboard.orders":"Bestellungen","dashboard.revenue":"Umsatz","dashboard.coupons":"Gutscheine","dashboard.orderStatus":"Bestellstatus","dashboard.justNow":"gerade eben","dashboard.minutesAgo":"Min.","dashboard.hoursAgo":"Std.","dashboard.daysAgo":"Tg.","posts.title":"Beiträge","posts.newPost":"Neuer Beitrag","posts.editPost":"Beitrag bearbeiten","posts.postTitle":"Beitragstitel","posts.titleCol":"Titel","posts.categoryCol":"Kategorie","posts.authorCol":"Autor","posts.createdCol":"Erstellt","posts.allStatus":"Alle Status","posts.searchPlaceholder":"Beiträge suchen...","posts.content":"Inhalt","posts.excerpt":"Auszug","posts.briefSummary":"Kurze Zusammenfassung (optional)","posts.coverImage":"Titelbild","posts.writeContent":"Schreiben Sie Ihren Beitrag in Markdown...","posts.selectCategory":"Kategorie auswählen","posts.tags":"Schlagwörter","posts.slug":"Slug","posts.slugPlaceholder":"Leer = automatisch aus Titel generiert","posts.noTags":"Keine Schlagwörter verfügbar","posts.addTag":"Tag hinzufügen...","posts.createTag":"Erstellen","posts.createPost":"Beitrag erstellen","posts.saveChanges":"Änderungen speichern","posts.postCreated":"Beitrag erstellt","posts.postUpdated":"Beitrag aktualisiert","posts.postDeleted":"Beitrag gelöscht","posts.failedToCreate":"Beitrag konnte nicht erstellt werden","posts.failedToUpdate":"Beitrag konnte nicht aktualisiert werden","posts.failedToDelete":"Beitrag konnte nicht gelöscht werden","posts.confirmDelete":"Sind Sie sicher, dass Sie diesen Beitrag löschen möchten?","posts.confirmBatchDelete":"{count} Beiträge wirklich löschen?","posts.batchPublish":"Veröffentlichen","posts.batchUnpublish":"Veröffentlichung aufheben","posts.batchSuccess":"{count} Beiträge aktualisiert","posts.noPosts":"Keine Beiträge gefunden.","posts.noPostsDesc":"Erstellen Sie Ihren ersten Blogbeitrag, um Ihre Ideen zu teilen.","posts.failedToLoad":"Beitrag konnte nicht geladen werden.","categories.title":"Kategorien","categories.newCategory":"Neue Kategorie","categories.createCategory":"Erstellen Sie eine neue Kategorie zur Organisation von Beiträgen.","categories.categoryName":"Kategoriename","categories.optionalDesc":"Optionale Beschreibung","categories.sortOrder":"Sortierreihenfolge","categories.slug":"Slug","categories.categoryCreated":"Kategorie erstellt","categories.categoryUpdated":"Kategorie aktualisiert","categories.categoryDeleted":"Kategorie gelöscht","categories.failedToCreate":"Kategorie konnte nicht erstellt werden","categories.failedToUpdate":"Kategorie konnte nicht aktualisiert werden","categories.failedToDelete":"Kategorie konnte nicht gelöscht werden","categories.confirmDelete":"Sind Sie sicher, dass Sie diese Kategorie löschen möchten?","categories.confirmDeleteTitle":"Kategorie löschen","categories.noCategories":"Keine Kategorien","categories.noCategoriesDesc":"Organisieren Sie Ihre Beiträge mit Kategorien.","categories.treeTitle":"Kategorien","categories.selectCategory":"Wählen Sie eine Kategorie für Details","categories.addChild":"Unterkategorie","categories.parent":"Übergeordnete Kategorie","categories.noParent":"Keine","categories.editCategory":"Kategorie bearbeiten","categories.cannotDeleteHasChildren":"Diese Kategorie kann nicht gelöscht werden, da sie {count} Unterkategorien hat. Bitte verschieben oder löschen Sie diese zuerst.","categories.coverImage":"Titelbild","tags.title":"Schlagwörter","tags.newTag":"Neues Schlagwort","tags.createTag":"Erstellen Sie ein neues Schlagwort für Beiträge.","tags.tagName":"Schlagwortname","tags.tagCreated":"Schlagwort erstellt","tags.tagUpdated":"Schlagwort aktualisiert","tags.tagDeleted":"Schlagwort gelöscht","tags.failedToCreate":"Schlagwort konnte nicht erstellt werden","tags.failedToUpdate":"Schlagwort konnte nicht aktualisiert werden","tags.failedToDelete":"Schlagwort konnte nicht gelöscht werden","tags.confirmDelete":"Sind Sie sicher, dass Sie dieses Schlagwort löschen möchten?","tags.noTags":"Keine Schlagwörter gefunden.","tags.noTagsDesc":"Fügen Sie Schlagwörter hinzu, um Ihren Inhalt zu organisieren und zu filtern.","comments.title":"Kommentare","comments.total":"{count} gesamt","comments.all":"Alle","comments.pending":"Ausstehend","comments.approved":"Genehmigt","comments.rejected":"Abgelehnt","comments.spam":"Spam","comments.approve":"Genehmigen","comments.reject":"Ablehnen","comments.author":"Autor","comments.contentCol":"Inhalt","comments.post":"Beitrag","comments.date":"Datum","comments.selected":"{count} ausgewählt","comments.commentStatusUpdated":"Kommentarstatus aktualisiert","comments.commentDeleted":"Kommentar gelöscht","comments.bulkActionDone":"{count} Kommentar(e) {status}","comments.bulkDeleted":"{count} Kommentar(e) gelöscht","comments.bulkActionFailed":"Massenaktion fehlgeschlagen","comments.bulkDeleteFailed":"Massenlöschung fehlgeschlagen","comments.failedToUpdateStatus":"Status konnte nicht aktualisiert werden","comments.failedToDelete":"Kommentar konnte nicht gelöscht werden","comments.confirmDelete":"Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?","comments.confirmBulkDelete":"{count} ausgewählte Kommentar(e) löschen?","comments.noComments":"Keine Kommentare gefunden.","comments.noCommentsDesc":"Kommentare werden hier angezeigt, sobald Leser beginnen zu interagieren.","contentTypes.title":"Inhaltstypen","contentTypes.noFields":"Dieser Inhaltstyp hat keine bearbeitbaren Felder.","contentTypes.createContentType":"Inhaltstyp erstellen","contentTypes.builder":"Builder","contentTypes.noContentTypes":"Noch keine Inhaltstypen","contentTypes.noContentTypesDesc":"Erstellen Sie Ihren ersten Inhaltstyp, um Ihr CMS aufzubauen.","contentTypes.contentTypeDeleted":"Inhaltstyp gelöscht","contentTypes.failedToDelete":"Löschen fehlgeschlagen","contentTypes.confirmDelete":'Inhaltstyp "{singular}" löschen? Dies entfernt die Schemadatei, aber NICHT die Datenbanktabelle.',"contentTypes.notFound":"Inhaltstyp nicht gefunden","contentTypes.notFoundMsg":'Inhaltstyp "{singular}" nicht gefunden.',"contentTypes.itemDeleted":"Element gelöscht","contentTypes.failedToDeleteItem":"Element konnte nicht gelöscht werden","contentTypes.confirmDeleteItem":"Sind Sie sicher, dass Sie dieses Element löschen möchten?","contentTypes.batchDeleteSuccess":"{count} Elemente gelöscht","contentTypes.confirmBatchDelete":"Möchten Sie wirklich {count} Elemente löschen?","contentTypes.export":"Exportieren","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} Elemente exportiert","contentTypes.import":"Importieren","contentTypes.importJson":"JSON importieren","contentTypes.importCsv":"CSV importieren","contentTypes.importExcel":"Excel importieren","contentTypes.importSuccess":"{count} Datensätze importiert","contentTypes.importPartial":"{ok} importiert, {failed} fehlgeschlagen","contentTypes.importEmpty":"Keine Datensätze in der Datei gefunden","contentTypes.importTooMany":"Zu viele Datensätze (maximal {max})","contentTypes.importFailed":"Import fehlgeschlagen","contentTypes.importTooLarge":"Datei überschreitet das 8-MB-Limit","contentTypes.noItems":"Keine Elemente gefunden.","contentTypes.noItemsDesc":"Erstellen Sie Ihr erstes Element, um diese Sammlung zu füllen.","contentTypes.newItem":"Neue/r {name}","contentTypes.editItem":"{name} bearbeiten","contentTypes.itemNotFound":"Element nicht gefunden.","contentTypes.fields":"{count} Feld(er)","contentTypes.fieldsLabel":"Felder","contentTypes.totalRecords":"{count} Datensätze","contentTypes.createdAt":"Erstellt","contentTypes.updatedAt":"Aktualisiert","users.title":"Benutzer","users.newUser":"Neuer Benutzer","users.createUser":"Benutzer erstellen","users.registerNew":"Neues Benutzerkonto registrieren.","users.username":"Benutzername","users.email":"E-Mail","users.password":"Passwort","users.minChars":"Mindestens 8 Zeichen, muss Groß-, Kleinbuchstaben und Ziffern enthalten","users.role":"Rolle","users.joined":"Beigetreten","users.editRole":"Benutzerrolle bearbeiten","users.editUser":"Benutzer bearbeiten","users.changeRoleFor":"Rolle für {username} ({email}) ändern","users.reader":"Leser","users.author":"Autor","users.admin":"Administrator","users.active":"Aktiv","users.suspended":"Gesperrt","users.banned":"Verbannt","users.newPassword":"Neues Passwort","users.userCreated":"Benutzer erstellt","users.userUpdated":"Benutzer aktualisiert","users.userRoleUpdated":"Benutzerrolle aktualisiert","users.failedToCreate":"Benutzer konnte nicht erstellt werden","users.failedToUpdate":"Benutzer konnte nicht aktualisiert werden","users.noUsers":"Keine Benutzer gefunden.","users.noUsersDesc":"Laden Sie Benutzer ein und verwalten Sie deren Rollen.","users.registeredVia":"Registrierung über","users.userDeleted":"Benutzer gelöscht","users.failedToDelete":"Benutzer konnte nicht gelöscht werden","users.confirmDeleteUser":'Benutzer "{username}" wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.',"webhooks.title":"Webhooks","webhooks.newWebhook":"Neuer Webhook","webhooks.createWebhook":"Erstellen Sie ein neues Webhook-Abonnement, um Ereignisbenachrichtigungen zu erhalten.","webhooks.callbackUrl":"Callback-URL","webhooks.eventsComma":"Ereignisse (kommagetrennt)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"* verwenden, um alle Ereignisse zu abonnieren","webhooks.descriptionOptional":"Beschreibung (optional)","webhooks.urlCol":"URL","webhooks.events":"Ereignisse","webhooks.webhookCreated":"Webhook erstellt","webhooks.webhookUpdated":"Webhook aktualisiert","webhooks.webhookDeleted":"Webhook gelöscht","webhooks.failedToCreate":"Webhook konnte nicht erstellt werden","webhooks.failedToUpdate":"Webhook konnte nicht aktualisiert werden","webhooks.failedToDelete":"Webhook konnte nicht gelöscht werden","webhooks.confirmDelete":"Dieses Webhook-Abonnement löschen?","webhooks.noWebhooks":"Keine Webhooks gefunden.","webhooks.noWebhooksDesc":"Richten Sie Webhooks ein, um Echtzeit-Ereignisbenachrichtigungen zu erhalten.","tokens.title":"API-Token","tokens.newToken":"Neues Token","tokens.createToken":"API-Token erstellen","tokens.createTokenDesc":"Erstellen Sie ein neues persönliches Zugriffstoken. Der Token-Wert wird nur einmal angezeigt.","tokens.scopesComma":"Bereiche (kommagetrennt)","tokens.expiresOptional":"Läuft ab am (optional)","tokens.tokenCreated":"Token erstellt","tokens.tokenRevoked":"Token widerrufen","tokens.failedToCreate":"Token konnte nicht erstellt werden","tokens.failedToRevoke":"Token konnte nicht widerrufen werden","tokens.confirmRevoke":'Token "{name}" widerrufen? Dies kann nicht rückgängig gemacht werden.',"tokens.tokenCopied":"Token in die Zwischenablage kopiert","tokens.tokenCreatedCopy":"Token erstellt — jetzt kopieren!","tokens.copied":"Kopiert","tokens.copy":"Kopieren","tokens.dismiss":"Schließen","tokens.notShownAgain":"Dieses Token wird nicht erneut angezeigt. Bewahren Sie es sicher auf.","tokens.scopesCol":"Bereiche","tokens.expiresCol":"Ablaufdatum","tokens.lastUsed":"Zuletzt verwendet","tokens.never":"Nie","tokens.noTokens":"Keine API-Token gefunden. Erstellen Sie eines, um zu beginnen.","tokens.noTokensDesc":"Erstellen Sie API-Token für den programmatischen Zugriff.","tokens.description":"Beschreibung","workflows.title":"Workflows","workflows.instances":"Instanzen","workflows.visualEditor":"Visueller Editor","workflows.newWorkflow":"Neuer Workflow","workflows.createWorkflow":"Workflow erstellen","workflows.createWorkflowDesc":"Definieren Sie einen neuen Workflow mit Schritten. Schritte werden als JSON konfiguriert.","workflows.stepsJson":"Schritte (JSON)","workflows.stepFormat":'Jeder Schritt: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow erstellt","workflows.workflowDeleted":"Workflow gelöscht","workflows.failedToCreate":"Workflow konnte nicht erstellt werden","workflows.failedToDelete":"Workflow konnte nicht gelöscht werden","workflows.confirmDelete":'Workflow "{name}" löschen?',"workflows.noWorkflows":"Keine Workflows gefunden. Erstellen Sie einen, um zu beginnen.","workflows.noWorkflowsDesc":"Definieren Sie Workflows zur Automatisierung Ihrer Inhaltspipeline.","workflows.steps":"{count} Schritte","workflows.workflowStarted":"Workflow gestartet","workflows.editor.title":"Workflow-Editor","workflows.editor.newWorkflow":"Neuer Workflow","workflows.editor.stepName":"Schrittname","workflows.editor.branchesJson":"Verzweigungen (JSON-Array)","workflows.editor.connectEdges":"Verbinden Sie Kanten von diesem Knoten, um Verzweigungen zu definieren.","workflows.editor.configJson":"Konfiguration (JSON)","workflows.editor.apply":"Anwenden","workflows.editor.deleteStep":"Schritt löschen","workflows.editor.addStep":"Schritt hinzufügen","workflows.editor.invalidJson":"Ungültiges JSON in der Konfiguration","workflows.editor.workflowSaved":"Workflow gespeichert","workflows.editor.failedToSave":"Workflow konnte nicht gespeichert werden","audit.title":"Audit-Log","audit.clearFilters":"Filter zurücksetzen","audit.noLogs":"Keine Audit-Log-Einträge gefunden.","audit.action":"Aktion","audit.actor":"Akteur","audit.resource":"Ressource","audit.timestamp":"Zeitstempel","options.title":"Einstellungen","options.saved":"Einstellungen gespeichert","options.failedToSave":"Einstellungen konnten nicht gespeichert werden","plugins.title":"Plugins","plugins.loaded":"{count} geladen","plugins.plugin":"Plugin","plugins.runtime":"Laufzeitumgebung","plugins.hooks":"Hooks","plugins.health":"Zustand","plugins.pluginEnabled":"Plugin aktiviert","plugins.pluginDisabled":"Plugin deaktiviert","plugins.pluginReloaded":"Plugin neu geladen","plugins.pluginRemoved":"Plugin entfernt","plugins.failedToEnable":"Plugin konnte nicht aktiviert werden","plugins.failedToDisable":"Plugin konnte nicht deaktiviert werden","plugins.failedToReload":"Plugin konnte nicht neu geladen werden","plugins.failedToRemove":"Plugin konnte nicht entfernt werden","plugins.noPlugins":"Keine Plugins geladen.","plugins.placePlugins":"Platzieren Sie Plugins im konfigurierten Plugin-Verzeichnis.","plugins.confirmRemove":'Plugin "{name}" entfernen? Es wird aus dem Speicher entladen.',"plugins.autoDisabled":"Automatisch deaktiviert","plugins.tooManyErrors":"Zu viele Fehler","plugins.errorCount":"{count} Fehler","plugins.errorsOccurred":"Fehler aufgetreten","plugins.calls":"{count} Aufrufe","plugins.idle":"Inaktiv","plugins.notFound":"Plugin nicht gefunden","plugins.notFoundMsg":"Plugin nicht gefunden.","plugins.backToPlugins":"Zurück zu Plugins","plugins.general":"Allgemein","plugins.version":"Version","plugins.reload":"Neu laden","plugins.remove":"Entfernen","plugins.errorTracking":"Fehlerverfolgung und automatischer Deaktivierungsstatus","plugins.healthy":"Gesund","plugins.errorCountLabel":"Fehleranzahl","plugins.lastError":"Letzter Fehler","plugins.lastErrorAt":"Letzter Fehler am","plugins.autoDisabledLabel":"Automatisch deaktiviert","plugins.permissions":"Berechtigungen","permissions.declaredFromManifest":"Deklarierte Berechtigungen aus dem Plugin-Manifest","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Registrierte Hook-Punkte und deren Ausführungsmetriken","plugins.noHooks":"Keine Hooks registriert.","plugins.totalCalls":"Gesamtaufrufe","plugins.totalErrors":"Gesamtfehler","plugins.totalDuration":"Gesamtdauer","plugins.noMetrics":"Noch keine Metriken","plugins.performance":"Leistungsübersicht","plugins.maxMemory":"Max. Speicher","plugins.timeout":"Zeitüberschreitung","plugins.default":"Standard","media.title":"Medien","media.files":"{count} Dateien","media.searchFiles":"Dateien suchen...","media.fileDeleted":"Datei gelöscht","media.failedToDelete":"Datei konnte nicht gelöscht werden","media.confirmDelete":"Sind Sie sicher, dass Sie diese Datei löschen möchten?","media.date":"Datum","media.size":"Größe","media.ascending":"Aufsteigend","media.descending":"Absteigend","field.mediaUrl":"Medien-URL","field.startWriting":"Schreiben Sie...","field.yes":"Ja","field.no":"Nein","field.relatedItemId":"Verknüpfte Element-ID","cron.title":"Cron-Jobs","cron.newCron":"Neuer Cron-Job","cron.expression":"Ausdruck","cron.handler":"Handler","cron.lastRun":"Letzte Ausführung","cron.nextRun":"Nächste Ausführung","cron.cronCreated":"Cron-Job erstellt","cron.cronDeleted":"Cron-Job gelöscht","cron.failedToCreate":"Cron-Job konnte nicht erstellt werden","cron.failedToDelete":"Cron-Job konnte nicht gelöscht werden","cron.noCrons":"Keine Cron-Jobs gefunden.","cron.confirmDelete":'Cron-Job "{name}" löschen?',"tenants.title":"Mandanten","tenants.newTenant":"Neuer Mandant","tenants.createTenant":"Erstellen Sie einen neuen Mandanten für mandantenweite Isolation.","tenants.tenantName":"Mandantenname","tenants.slug":"Slug","tenants.domain":"Domäne","tenants.owner":"Besitzer","tenants.tenantCreated":"Mandant erstellt","tenants.tenantUpdated":"Mandant aktualisiert","tenants.tenantDeleted":"Mandant gelöscht","tenants.failedToCreate":"Mandant konnte nicht erstellt werden","tenants.failedToUpdate":"Mandant konnte nicht aktualisiert werden","tenants.failedToDelete":"Mandant konnte nicht gelöscht werden","tenants.confirmDelete":"Sind Sie sicher, dass Sie diesen Mandanten löschen möchten?","tenants.noTenants":"Keine Mandanten gefunden.","tenants.noTenantsDesc":"Erstellen Sie Mandanten für Multi-Mandanten-SaaS.","rbac.title":"Rollen & Berechtigungen","rbac.roles":"Rollen","rbac.newRole":"Neue Rolle","rbac.createRole":"Erstellen Sie eine neue Rolle für die Zugriffskontrolle.","rbac.roleName":"Rollenname","rbac.roleDesc":"Rollenbeschreibung","rbac.roleCreated":"Rolle erstellt","rbac.roleUpdated":"Rolle aktualisiert","rbac.roleDeleted":"Rolle gelöscht","rbac.failedToCreate":"Rolle konnte nicht erstellt werden","rbac.failedToUpdate":"Rolle konnte nicht aktualisiert werden","rbac.failedToDelete":"Rolle konnte nicht gelöscht werden","rbac.confirmDelete":'Rolle "{name}" löschen? Dies entfernt alle zugehörigen Berechtigungen.',"rbac.systemRole":"System","rbac.permissions":"Berechtigungen","rbac.addPermission":"Berechtigung hinzufügen","rbac.action":"Aktion","rbac.subject":"Subjekt","rbac.noRoles":"Keine Rollen gefunden.","builder.title":"Inhaltstyp-Builder","builder.editContentType":"Inhaltstyp bearbeiten","builder.createContentType":"Inhaltstyp erstellen","builder.baseConfig":"Grundkonfiguration","builder.singularName":"Singularname","builder.pluralName":"Pluralname","builder.tableName":"Tabellenname","builder.fieldsSection":"Felder","builder.addField":"Feld hinzufügen","builder.preview":"Vorschau","builder.save":"Inhaltstyp speichern","builder.saving":"Wird gespeichert...","builder.saved":"Inhaltstyp gespeichert","builder.failedToSave":"Inhaltstyp konnte nicht gespeichert werden","builder.confirmDeleteField":'Feld "{name}" löschen?',"builder.text":"Text","builder.richText":"Rich Text","builder.email":"E-Mail","builder.password":"Passwort","builder.uid":"UID","builder.integer":"Ganzzahl","builder.bigInt":"Big Int","builder.decimal":"Dezimal","builder.float":"Gleitkommazahl","builder.boolean":"Boolesch","builder.date":"Datum","builder.datetime":"Datum/Uhrzeit","builder.time":"Uhrzeit","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relation","builder.mediaType":"Medien","builder.link":"Link","builder.required":"Pflichtfeld","builder.unique":"Eindeutig","builder.privateField":"Privat","builder.immutable":"Unveränderlich","builder.label":"Beschriftung","builder.defaultValue":"Standardwert","builder.maxLength":"Max. Länge","builder.minValue":"Min","builder.maxValue":"Max","builder.enumValues":"Enum-Werte (kommagetrennt)","builder.relationType":"Relationstyp","builder.relationTarget":"Zieltabelle","builder.foreignKey":"Fremdschlüssel","builder.throughTable":"Durchlauftabelle","builder.draftPublish":"Entwurf/Veröffentlichung","builder.timestamps":"Zeitstempel","builder.softDelete":"Weiches Löschen","builder.slugField":"Slug-Feld","media.name":"Name","media.type":"Typ","media.other":"Sonstige","media.uploadFailed":"Upload fehlgeschlagen","media.dropFiles":"Dateien hierher ziehen, einfügen oder {browse}","media.uploading":"{count} Datei(en) werden hochgeladen...","media.done":"Fertig","media.failedUpload":"Fehlgeschlagen","media.urlCopied":"URL kopiert","media.copyUrl":"URL kopieren","media.download":"Herunterladen","media.dimensions":"Abmessungen","media.uploaded":"Hochgeladen","media.urlLabel":"URL","media.noVideoSupport":"Ihr Browser unterstützt kein Video.","media.downloadFile":"Datei herunterladen","workflows.instances.title":"Workflow-Instanzen","workflows.instances.showLogs":"Logs anzeigen","workflows.instances.hideLogs":"Logs ausblenden","workflows.instances.currentStep":"Aktuell","workflows.instances.context":"Kontext","workflows.instances.stepLogs":"Schritt-Logs ({count})","workflows.instances.noStepLogs":"Keine Schritt-Logs.","workflows.instances.noInstances":"Keine Workflow-Instanzen gefunden.","workflows.instances.instanceCount":"{count} Instanz(en)","workflows.instances.definitions":"Definitionen","workflows.instances.filterStatus":"Status filtern","workflows.instances.cancelled":"Instanz abgebrochen","workflows.editor.editStep":"Schritt bearbeiten","workflows.editor.name":"Name","workflows.editor.type":"Typ","workflows.editor.backToList":"Zurück zur Liste","workflows.editor.workflowName":"Workflow-Name...","workflows.editor.failedToLoad":"Workflow konnte nicht geladen werden","workflows.editor.immutableNotice":"Workflow-Definitionen sind unveränderlich. Erstellen Sie eine neue, um Schritte zu ändern.","workflows.editor.untitled":"Unbenannter Workflow","workflows.editor.save":"Speichern","workflows.editor.saving":"Wird gespeichert...","cron.createSchedule":"Cron-Zeitplan erstellen","cron.labelField":"Bezeichnung","cron.jobType":"Job-Typ","cron.cronExpression":"Cron-Ausdruck (7-Segment)","cron.format":"Format: Sek Min Std Tag Monat Wochentag","cron.payload":"Nutzdaten (JSON, optional)","cron.schedules":"{count} Zeitplan/Zeitpläne","cron.schedule":"Zeitplan","cron.pluginCol":"Plugin","cron.scheduleCreated":"Zeitplan erstellt","cron.scheduleToggled":"Zeitplan umgeschaltet","cron.scheduleDeleted":"Zeitplan gelöscht","cron.scheduleUpdated":"Zeitplan aktualisiert","cron.noCronSchedules":"Keine Cron-Zeitpläne.","cron.seedHint":"Erstellen Sie einen oben oder aktivieren Sie CRON_SEED_ENABLED, um Standardwerte zu laden.","cron.confirmDeleteSchedule":'Zeitplan "{name}" löschen? Dies kann nicht rückgängig gemacht werden.',"cron.scheduleNotFound":"Zeitplan nicht gefunden","cron.backToCronSchedules":"Zurück zu Cron-Zeitplänen","cron.scheduleDetails":"Zeitplandetails","cron.cronExpression7":"7-Segment: Sek Min Std Tag Monat Wochentag","cron.builtIn":"Integriert","cron.executionHistory":"Ausführungsverlauf","cron.recentLogs":"Aktuelle Ausführungsprotokolle für diesen Zeitplan","cron.cleanupOld":"Alte bereinigen","cron.cleanedUp":"{count} alte(s) Log(s) bereinigt","cron.noExecutionLogs":"Noch keine Ausführungsprotokolle.","cron.success":"Erfolg","cron.failedStatus":"Fehlgeschlagen","cron.running":"Läuft","cron.newSchedule":"Neuer Zeitplan","cron.idField":"ID","cron.started":"Gestartet","cron.finished":"Abgeschlossen","cron.duration":"Dauer","cron.error":"Fehler","cron.created":"Erstellt","cron.updated":"Aktualisiert","tenants.createForIsolation":"Erstellen Sie einen neuen Mandanten zur Datenisolation.","tenants.cannotDeleteDefault":"Standardmandant kann nicht gelöscht werden","tenants.confirmDeleteMsg":"Diesen Mandanten löschen? Daten dieses Mandanten werden NICHT entfernt.","tenants.created":"Erstellt","rbac.addRoleDesc":"Neue Rolle zum System hinzufügen.","rbac.updateRoleDesc":'Rolle "{name}" aktualisieren.',"rbac.deleteRoleTitle":"Rolle löschen","rbac.deleteRoleConfirm":'Sind Sie sicher, dass Sie "{name}" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.',"rbac.addPermissionTitle":"Berechtigung hinzufügen","rbac.addPermissionDesc":'Gewähren Sie eine neue Berechtigung für "{name}". Verwenden Sie * als Platzhalter.',"rbac.fieldsCol":"Felder","rbac.conditionsCol":"Bedingungen","rbac.fieldsOptional":"Felder (kommagetrennt, optional)","rbac.removePermissionTitle":"Berechtigung entfernen","rbac.removePermissionDesc":"{action} auf {subject} entfernen?","rbac.noPermissions":"Keine Berechtigungen konfiguriert.","rbac.selectRole":"Rolle auswählen, um Berechtigungen anzuzeigen","rbac.prev":"Zurück","options.noChanges":"Keine Änderungen","options.noOptions":"Keine Einstellungen verfügbar.","options.reset":"Zurücksetzen","options.saveChanges":"Änderungen speichern","audit.failedToLoad":"Audit-Log konnte nicht geladen werden. Bitte versuchen Sie es erneut.","audit.noEntries":"Keine Audit-Einträge gefunden.","audit.noEntriesDesc":"Audit-Einträge werden angezeigt, sobald Aktionen ausgeführt werden.","audit.timeCol":"Zeit","audit.subjectId":"Subjekt-ID","audit.detailCol":"Detail","audit.system":"System","audit.from":"Von","audit.to":"Bis","audit.search":"Suchen","audit.clear":"Löschen","audit.today":"Heute","builder.untitled":"Unbenannter Inhaltstyp","builder.fieldCount":"{count} Feld(er)","builder.fieldList":"Felder","builder.protocols":"Protokolle","builder.systemFields":"Systemfelder","builder.system":"System","builder.newField":"Neues Feld","builder.addAnotherField":"Weiteres Feld hinzufügen","builder.addAField":"Feld hinzufügen","builder.chooseFieldType":"Wählen Sie einen Feldtyp, der Ihrem Inhaltstyp hinzugefügt werden soll.","builder.fieldConfiguration":"Feldkonfiguration","builder.fieldName":"Feldname","builder.fieldTypeLabel":"Feldtyp","builder.displayLabel":"Anzeigebeschriftung","builder.helpText":"Hilfetext","builder.removeField":"Feld entfernen","builder.removeFieldConfirm":"Dieses Feld entfernen?","builder.noAdditionalOptions":"Keine zusätzlichen Optionen für diesen Feldtyp.","builder.acceptedTypes":"Akzeptierte Typen","builder.maxCount":"Max. Anzahl","builder.target":"Ziel","builder.valuesComma":"Werte (kommagetrennt)","builder.describeContentType":"Beschreiben Sie diesen Inhaltstyp...","builder.contentTypeUpdated":"Inhaltstyp aktualisiert","builder.contentTypeCreated":"Inhaltstyp erstellt","builder.newFieldCategory":"Zahl","layout.crm":"CRM","layout.pages":"Seiten","layout.reusableBlocks":"Blöcke","crm.dashboard":"CRM-Dashboard","crm.pipeline":"Pipeline","crm.contacts":"Kontakte","crm.companies":"Unternehmen","crm.deals":"Deals","crm.activities":"Aktivitäten","crm.notes":"Notizen","crm.reports":"Berichte","crm.totalCompanies":"Unternehmen gesamt","crm.totalContacts":"Kontakte gesamt","crm.openDeals":"Offene Deals","crm.wonDeals":"Gewonnene Deals","crm.pipelineValue":"Pipeline-Wert","crm.weightedValue":"Gewichteter Wert","crm.winRate":"Gewinnquote","crm.avgDealSize":"Durchschn. Deal-Größe","crm.recentActivities":"Aktivitäten diese Woche","crm.totalActivities":"Aktivitäten gesamt","crm.leaderboard":"Bestenliste","crm.noData":"Keine Daten verfügbar.","crm.newDeal":"Neuer Deal","crm.createDeal":"Deal erstellen","crm.dealTitle":"Titel","crm.dealTitlePlaceholder":"Deal-Titel eingeben...","crm.amount":"Betrag","crm.probability":"Wahrscheinlichkeit","crm.stage":"Phase","crm.advanceStage":"Zur nächsten Phase weiterrücken","crm.totalValue":"Gesamtwert","crm.dealCreated":"Deal erstellt","crm.failedToCreateDeal":"Deal konnte nicht erstellt werden","crm.dealStageUpdated":"Deal-Phase aktualisiert","crm.failedToUpdateStage":"Phase konnte nicht aktualisiert werden","crm.titleRequired":"Titel ist erforderlich","crm.newContact":"Neuer Kontakt","crm.editContact":"Kontakt bearbeiten","crm.contact":"Kontakt","crm.name":"Name","crm.email":"E-Mail","crm.phone":"Telefon","crm.company":"Unternehmen","crm.source":"Quelle","crm.lifecycleStage":"Lebenszyklusphase","crm.noContacts":"Keine Kontakte gefunden.","crm.firstName":"Vorname","crm.lastName":"Nachname","crm.jobTitle":"Position","crm.newCompany":"Neues Unternehmen","crm.editCompany":"Unternehmen bearbeiten","crm.companyName":"Unternehmensname","crm.industry":"Branche","crm.size":"Größe","crm.website":"Website","crm.city":"Stadt","crm.country":"Land","crm.noCompanies":"Keine Unternehmen gefunden.","crm.deal":"Deal","crm.editDeal":"Deal bearbeiten","crm.closeDate":"Abschlussdatum","crm.lossReason":"Verlustgrund","crm.noDeals":"Keine Deals gefunden.","crm.dealInfo":"Deal-Info","crm.newActivity":"Neue Aktivität","crm.editActivity":"Aktivität bearbeiten","crm.activity":"Aktivität","crm.type":"Typ","crm.subject":"Betreff","crm.content":"Inhalt","crm.date":"Datum","crm.duration":"Dauer","crm.outcome":"Ergebnis","crm.noActivities":"Keine Aktivitäten gefunden.","crm.newNote":"Neue Notiz","crm.editNote":"Notiz bearbeiten","crm.note":"Notiz","crm.relatedTo":"Verknüpft mit","crm.pinned":"Angeheftet","crm.createdAt":"Erstellt","crm.noNotes":"Keine Notizen gefunden.","crm.contentRequired":"Inhalt ist erforderlich","crm.relatedContactId":"Verknüpfte Kontakt-ID","crm.relatedCompanyId":"Verknüpfte Unternehmens-ID","crm.relatedDealId":"Verknüpfte Deal-ID","crm.contactInfo":"Kontaktinformationen","crm.timeline":"Zeitstrahl","crm.noTimeline":"Keine Zeitstrahl-Ereignisse.","crm.addNote":"Notiz hinzufügen","crm.notePlaceholder":"Notiz eingeben...","crm.lifecycleUpdated":"Lebenszyklusphase aktualisiert","crm.failedToUpdateLifecycle":"Lebenszyklusphase konnte nicht aktualisiert werden","crm.companyInfo":"Unternehmensinformationen","crm.funnelReport":"Trichterbericht","crm.activityReport":"Aktivitätsbericht","crm.conversionRate":"Konversion","crm.byType":"Nach Typ","crm.byOutcome":"Nach Ergebnis","pages.title":"Seiten","pages.newPage":"Neue Seite","pages.editPage":"Seite bearbeiten","pages.pageDeleted":"Seite gelöscht","pages.pageCreated":"Seite erstellt","pages.pageUpdated":"Seite aktualisiert","pages.failedToDelete":"Seite konnte nicht gelöscht werden","pages.failedToCreate":"Seite konnte nicht erstellt werden","pages.failedToUpdate":"Seite konnte nicht aktualisiert werden","pages.statusUpdated":"Seitenstatus aktualisiert","pages.failedToUpdateStatus":"Status konnte nicht aktualisiert werden","pages.confirmDelete":"Sind Sie sicher, dass Sie diese Seite löschen möchten?","pages.noPages":"Keine Seiten gefunden.","pages.noPagesDesc":"Erstellen Sie Ihre erste Seite, um Ihre Website aufzubauen.","pages.noBlocks":"Noch keine wiederverwendbaren Blöcke.","pages.noBlocksDesc":"Erstellen Sie wiederverwendbare Blöcke für Ihre Seiten.","pages.publish":"Veröffentlichen","pages.unpublish":"Veröffentlichung aufheben","pages.preview":"Vorschau","pages.slug":"Slug","pages.template":"Vorlage","pages.createdAt":"Erstellt","pages.basicInfo":"Grundinformationen","pages.titleLabel":"Titel","pages.titlePlaceholder":"Seitentitel eingeben...","pages.coverImage":"Titelbild","pages.metaTitle":"Meta-Titel","pages.metaDescription":"Meta-Beschreibung","pages.ogImage":"OG-Bild","pages.content":"Inhalt","pages.blockMode":"Blöcke","pages.saveDraft":"Entwurf speichern","pages.writeContent":"Schreiben Sie Ihren Seiteninhalt...","pages.addBlock":"Block hinzufügen","pages.chooseBlock":"Blocktyp auswählen","pages.reusableBlocks":"Wiederverwendbare Blöcke","pages.createReusable":"Wiederverwendbaren Block erstellen","pages.editReusable":"Wiederverwendbaren Block bearbeiten","pages.rbName":"Name","pages.rbType":"Blocktyp","pages.rbDescription":"Beschreibung","pages.rbContent":"Inhalt","command.search":"Suchen...","command.placeholder":"Befehl eingeben oder suchen...","command.noResults":"Keine Ergebnisse gefunden.","command.actions":"Aktionen","command.switchToLight":"Zum hellen Design wechseln","command.switchToDark":"Zum dunklen Design wechseln","layout.ecommerce":"E-Commerce","layout.products":"Produkte","layout.productCategories":"Produktkategorien","layout.orders":"Bestellungen","layout.finance":"Finanzen","layout.currencies":"Währungen","layout.wallets":"Geldbörsen","layout.paymentChannels":"Zahlungskanäle","layout.productComments":"Bewertungen","layout.coupons":"Gutscheine","layout.shippingTemplates":"Versandvorlagen","products.title":"Produkte","products.newProduct":"Neues Produkt","products.editProduct":"Produkt bearbeiten","products.productTitle":"Produkttitel","products.price":"Preis","products.originalPrice":"Originalpreis","products.stock":"Lagerbestand","products.sales":"Verkäufe","products.coverUrl":"Cover-URL","products.description":"Beschreibung","products.content":"Inhalt","products.slug":"Slug","products.status":"Status","products.category":"Kategorie","products.unit":"Einheit","products.minPurchase":"Mindestbestellung","products.maxPurchase":"Höchstbestellung","products.sortOrder":"Sortierreihenfolge","products.metaTitle":"Meta-Titel","products.metaDescription":"Meta-Beschreibung","products.productCreated":"Produkt erstellt","products.productUpdated":"Produkt aktualisiert","products.productDeleted":"Produkt gelöscht","products.batchDeleted":"{{count}} Produkte gelöscht","products.batchSuccess":"{{count}} Produkte aktualisiert","products.batchActivate":"Aktivieren","products.batchDeactivate":"Deaktivieren","products.failedToCreate":"Produkt konnte nicht erstellt werden","products.failedToUpdate":"Produkt konnte nicht aktualisiert werden","products.failedToDelete":"Produkt konnte nicht gelöscht werden","products.confirmDelete":"Sind Sie sicher, dass Sie dieses Produkt löschen möchten?","products.confirmBatchDelete":"Möchten Sie {{count}} Produkte wirklich löschen?","products.noProducts":"Noch keine Produkte","products.noProductsDesc":"Erstellen Sie Ihr erstes Produkt, um mit dem Verkauf zu beginnen.","products.allStatus":"Alle Status","products.searchPlaceholder":"Produkt suchen...","products.active":"Aktiv","products.draft":"Entwurf","products.archived":"Archiviert","products.general":"Allgemein","products.media":"Medien","products.pricing":"Preise","products.purchaseSettings":"Kaufeinstellungen","products.summary":"Zusammenfassung","products.phTitle":"Produkttitel eingeben...","products.phSummary":"Kurze Produktbeschreibung...","products.images":"Bilder","products.cover":"Titelbild","products.dropImages":"Bilder ablegen, einfügen oder klicken zum Upload","productCategories.categoryName":"Kategoriename","productCategories.newCategory":"Neue Kategorie","productCategories.createCategory":"Kategorie erstellen","productCategories.editCategory":"Kategorie bearbeiten","productCategories.optionalDesc":"Beschreibung (optional)","productCategories.parent":"Übergeordnete Kategorie","productCategories.noParent":"Keine","productCategories.sortOrder":"Sortierung","productCategories.slug":"Slug","productCategories.noCategories":"Keine Kategorien","productCategories.noCategoriesDesc":"Erstellen Sie Ihre erste Produktkategorie, um Ihre Produkte zu organisieren.","productCategories.categoryCreated":"Kategorie erstellt","productCategories.categoryUpdated":"Kategorie aktualisiert","productCategories.categoryDeleted":"Kategorie gelöscht","productCategories.failedToCreate":"Fehler beim Erstellen","productCategories.failedToUpdate":"Fehler beim Aktualisieren","productCategories.failedToDelete":"Fehler beim Löschen","productCategories.confirmDelete":"Möchten Sie diese Kategorie wirklich löschen?","productCategories.confirmDeleteTitle":"Kategorie löschen","productCategories.cannotDeleteHasChildren":"Diese Kategorie kann nicht gelöscht werden, da sie {count} Unterkategorien hat. Bitte verschieben oder löschen Sie diese zuerst.","productCategories.treeTitle":"Kategorien","productCategories.selectCategory":"Wählen Sie eine Kategorie für Details","productCategories.addChild":"Unterkategorie","orders.title":"Bestellungen","orders.orderNo":"Bestellnummer","orders.buyer":"Käufer","orders.total":"Gesamt","orders.status":"Status","orders.items":"Artikel","orders.remark":"Anmerkung","orders.adminRemark":"Admin-Anmerkung","orders.createdAt":"Erstellt","orders.actions":"Aktionen","orders.allStatus":"Alle Status","orders.searchPlaceholder":"Bestellnummer, Käufer suchen...","orders.pending":"Ausstehend","orders.paid":"Bezahlt","orders.shipped":"Versendet","orders.completed":"Abgeschlossen","orders.cancelled":"Storniert","orders.refunded":"Erstattet","orders.confirmPay":"Zahlung bestätigen?","orders.orderPaid":"Bestellung als bezahlt markiert","orders.confirmShip":"Bestellung versenden?","orders.orderShipped":"Bestellung versendet","orders.confirmCancel":"Bestellung stornieren?","orders.orderCancelled":"Bestellung storniert","orders.confirmRefund":"Bestellung erstatten?","orders.orderRefunded":"Bestellung erstattet","orders.failedToPay":"Konnte nicht als bezahlt markiert werden","orders.failedToShip":"Versenden fehlgeschlagen","orders.failedToCancel":"Stornierung fehlgeschlagen","orders.failedToRefund":"Erstattung fehlgeschlagen","orders.noOrders":"Noch keine Bestellungen","orders.noOrdersDesc":"Bestellungen werden hier angezeigt, wenn Kunden Einkäufe tätigen.","orders.trackingNo":"Sendungsverfolgungsnummer","orders.carrier":"Versanddienstleister","orders.shipInfo":"Versandinformationen","orders.buyerInfo":"Käuferinformationen","orders.shippingAddress":"Lieferadresse","orders.orderDetail":"Bestelldetails","orders.stats.totalOrders":"Bestellungen gesamt","orders.stats.totalRevenue":"Gesamtumsatz","orders.stats.pending":"Ausstehend","orders.stats.completed":"Abgeschlossen","orders.stats.todayOrders":"Heutige Bestellungen","orders.stats.todayRevenue":"Heutiger Umsatz","payments.title":"Zahlungskanäle","payments.newChannel":"Neuer Kanal","payments.provider":"Anbieter","payments.name":"Kanalname","payments.mode":"Modus","payments.active":"Aktiv","payments.live":"Live","payments.test":"Test","payments.credentials":"Zugangsdaten","payments.webhookSecret":"Webhook-Secret","payments.settings":"Einstellungen","payments.channelCreated":"Zahlungskanal erstellt","payments.channelUpdated":"Zahlungskanal aktualisiert","payments.channelDeleted":"Zahlungskanal gelöscht","payments.failedToCreate":"Zahlungskanal konnte nicht erstellt werden","payments.failedToUpdate":"Zahlungskanal konnte nicht aktualisiert werden","payments.failedToDelete":"Zahlungskanal konnte nicht gelöscht werden","payments.confirmDelete":"Diesen Zahlungskanal löschen?","payments.noChannels":"Keine Zahlungskanäle","payments.noChannelsDesc":"Fügen Sie einen Zahlungskanal hinzu, um Zahlungen zu akzeptieren.","payments.selectProvider":"Anbieter auswählen...","payments.testMode":"Testmodus (Sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"Händler-ID","payments.fPrivateKey":"RSA-Privatschlüssel","payments.fSerialNo":"Zertifikat-Seriennummer","payments.fWebhookSecret":"Webhook-Signaturgeheimnis","payments.fAlipayPublicKey":"Alipay-Öffentlicher Schlüssel","payments.fPlatformCert":"Plattformzertifikat (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"Benachrichtigungs-URL","payments.phSk":"sk_live_... oder sk_test_...","payments.phRsaKey":"RSA-Privatschlüssel einfügen (PEM oder Base64)","payments.phUrl":"https://...","payments.editChannel":"Kanal bearbeiten","payments.leaveBlankToKeep":"Leer lassen, um beizubehalten","layout.paymentOrders":"Zahlungsaufträge","paymentOrders.title":"Zahlungsaufträge","paymentOrders.orderId":"Bestellung","paymentOrders.title_col":"Titel","paymentOrders.amount":"Betrag","paymentOrders.provider":"Anbieter","paymentOrders.noOrders":"Keine Zahlungsaufträge","paymentOrders.noOrdersDesc":"Zahlungsaufträge erscheinen hier, wenn Kunden Zahlungen leisten.","paymentOrders.refund":"Erstatten","paymentOrders.refundTitle":"Erstattung","paymentOrders.refundOrder":"Bestellung erstatten","paymentOrders.refundAmount":"Erstattungsbetrag","paymentOrders.refundReason":"Grund","paymentOrders.refundSuccess":"Erstattung eingereicht","paymentOrders.refundFailed":"Erstattung fehlgeschlagen","layout.paymentTransactions":"Zahlungstransaktionen","paymentTransactions.title":"Zahlungstransaktionen","paymentTransactions.orderId":"Bestellung","paymentTransactions.type":"Typ","paymentTransactions.amount":"Betrag","paymentTransactions.providerTxId":"Anbieter-TX-ID","paymentTransactions.noTransactions":"Keine Transaktionen","paymentTransactions.noTransactionsDesc":"Transaktionen erscheinen hier bei Zahlungsereignissen.","currencies.title":"Währungen","currencies.newCurrency":"Neue Währung","currencies.code":"Code","currencies.name":"Name","currencies.decimals":"Dezimalstellen","currencies.active":"Aktiv","currencies.currencyCreated":"Währung erstellt","currencies.currencyUpdated":"Währung aktualisiert","currencies.failedToCreate":"Währung konnte nicht erstellt werden","currencies.failedToUpdate":"Währung konnte nicht aktualisiert werden","currencies.noCurrencies":"Keine Währungen","currencies.noCurrenciesDesc":"Fügen Sie eine Währung hinzu, um Mehrwährungsfähigkeit zu aktivieren.","wallets.title":"Geldbörsen","wallets.user":"Benutzer","wallets.currency":"Währung","wallets.balance":"Guthaben","wallets.frozen":"Eingefroren","wallets.credit":"Gutschreiben","wallets.debit":"Abbuchen","wallets.transactions":"Transaktionen","wallets.amount":"Betrag","wallets.type":"Typ","wallets.reference":"Referenz","wallets.creditTitle":"Geldbörse gutschreiben","wallets.debitTitle":"Geldbörse abbuchen","wallets.userId":"Benutzer-ID","wallets.remark":"Anmerkung","wallets.creditSuccess":"Geldbörse gutgeschrieben","wallets.debitSuccess":"Geldbörse abgebucht","wallets.failedToCredit":"Gutschrift fehlgeschlagen","wallets.failedToDebit":"Abbuchung fehlgeschlagen","wallets.noWallets":"Keine Geldbörsen","wallets.noWalletsDesc":"Geldbörsen werden erstellt, wenn Benutzer ihre erste Transaktion erhalten.","wallets.noTransactions":"Noch keine Transaktionen.","adminLogin.title":"Admin-Panel","adminLogin.subtitle":"Melden Sie sich mit Ihren Administrator-Zugangsdaten an","adminLogin.email":"E-Mail","adminLogin.password":"Passwort","adminLogin.submit":"Anmelden","adminLogin.loading":"Anmeldung…","adminLogin.error":"Ungültige E-Mail oder Passwort","adminLogin.footer":"RaisFast Admin — nur autorisiertes Personal","adminLogin.sessionExpired":"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Integration","layout.channels":"Kanäle","layout.receipts":"Empfangsbelege","layout.apiClients":"API-Clients","common.reset":"Zurücksetzen","common.close":"Schließen","integration.newChannel":"Neuer Kanal","integration.editChannel":"Kanal bearbeiten","integration.channelKey":"Kanalschlüssel","integration.displayName":"Anzeigename","integration.provider":"Anbieter","integration.mode":"Modus","integration.transport":"Transport","integration.framing":"Framing","integration.endpoint":"Endpunkt","integration.verifyKind":"Verifizierung","integration.verifyConfig":"Verify-Konfiguration (JSON)","integration.credentials":"Credentials (JSON)","integration.credentialsKeepHint":"Leer lassen, um versiegelte Credentials zu behalten","integration.mapping":"Mapping (JSONPath)","integration.pullConfig":"Pull-Konfiguration (JSON)","integration.streamConfig":"Stream-Konfiguration (JSON)","integration.targetType":"Ziel-Content-Type","integration.routeExtra":"Route-Extra (JSON)","integration.redeliveryMax":"Max. Zustellversuche","integration.stack":"Stack","integration.noChannels":"Keine Integrationskanäle","integration.noChannelsDesc":"Füge einen Kanal hinzu, um Inbound-Webhooks, Streams und Polling zu empfangen.","integration.channelCreated":"Kanal erstellt","integration.channelUpdated":"Kanal aktualisiert","integration.channelDeleted":"Kanal gelöscht","integration.failedToCreate":"Erstellen fehlgeschlagen","integration.failedToUpdate":"Aktualisieren fehlgeschlagen","integration.failedToDelete":"Löschen fehlgeschlagen","integration.failedToTest":"Test fehlgeschlagen","integration.confirmDeleteChannel":"Kanal „{key}“ löschen? Belege bleiben zur Prüfung erhalten.","integration.testMapping":"Mapping testen","integration.sampleBody":"Beispiel-Request-Body","integration.preview":"Vorschau des normalisierten Envelopes","integration.runTest":"Ausführen","integration.hasCredentials":"Credentials im Vault versiegelt","integration.allChannels":"Alle Kanäle","integration.allStatuses":"Alle Status","integration.traceIdFilter":"Nach Trace-ID filtern…","integration.noReceipts":"Keine Belege","integration.noReceiptsDesc":"Eingehende Zustellungen erscheinen hier mit vollständiger Trace.","integration.receivedAt":"Empfangen","integration.attempts":"Versuche","integration.nextRetryAt":"Nächster Wiederholungsversuch","integration.noSteps":"Keine Schritte aufgezeichnet","integration.pending":"ausstehend","integration.receiptInfo":"Beleg","integration.trace":"Trace","integration.complete":"vollständig","integration.firstPass":"Erster Durchlauf","integration.asyncChain":"Asynchrone Kette","integration.envelopeSnapshot":"Envelope-Snapshot","integration.fullSteps":"Vollständige Schritt-Chronologie","integration.egressCalls":"Ausgehende Aufrufe","integration.noEgress":"Keine ausgehenden Aufrufe","integration.noEgressDesc":"Von diesem Beleg ausgelöste ausgehende Aufrufe erscheinen hier.","integration.replayed":"Wiedergegeben","integration.dryRunDone":"Probelauf abgeschlossen — Bericht im Trace","integration.failedToReplay":"Wiedergabe fehlgeschlagen","integration.replay":"Wiedergeben","integration.dryRunReplay":"Wiedergabe simulieren","integration.replayConfirmTitle":"Diesen Beleg wiedergeben?","integration.replayConfirmDesc":"Die Route-Stufe wird vom gespeicherten Envelope-Snapshot neu ausgeführt (Upsert per external_id).","integration.receiptNotFound":"Beleg nicht gefunden","integration.newClient":"Neuer API-Client","integration.editClient":"API-Client bearbeiten","integration.clientKey":"Client-Schlüssel","integration.baseUrl":"Basis-URL","integration.authConfig":"Auth-Konfiguration (JSON)","integration.rateLimit":"Rate-Limit (JSON)","integration.ops":"Operationen (JSON)","integration.opsCount":"Ops","integration.noClients":"Keine API-Clients","integration.noClientsDesc":"Füge einen deklarativen API-Client für ausgehende Aufrufe hinzu.","integration.clientCreated":"API-Client erstellt","integration.clientUpdated":"API-Client aktualisiert","integration.clientDeleted":"API-Client gelöscht","integration.confirmDeleteClient":"API-Client „{key}“ löschen?","integration.testCall":"Testaufruf","integration.selectOp":"Op auswählen","integration.input":"Eingabe (JSON)","integration.result":"Ergebnis","integration.allClients":"Alle Clients","integration.egressLog":"Ausgehendes Protokoll","integration.latency":"Latenz","integration.createdAt":"Erstellt","integration.basicInfo":"Grundlagen","integration.trustSection":"Vertrauen (L0)","integration.normalizeSection":"Normalisierung (L2)","integration.routingSection":"Routing & Zuverlässigkeit (L3/L4)","integration.presetTitle":"Mit einer Vorlage starten","integration.presetPlaceholder":"Erprobte Konfiguration wählen…","integration.presetHint":"Füllt das gesamte Formular — Schlüssel, Secrets und Ziel-CT danach anpassen. Beispiele aus echten Integrationen (GitHub / Feishu / DingTalk).","integration.presetApplied":"Vorlage angewendet — prüfen und anpassen","integration.jsonInvalid":"Ungültiges JSON","integration.insertExample":"Beispiel einfügen","integration.presetGeneric":"Generischer Webhook (ohne Verifizierung)","integration.presetGenericDesc":"einfaches push + JSONPath-Mapping","integration.presetHmac":"HMAC-Webhook","integration.presetHmacDesc":"push + hmac-sha256-Signaturprüfung","integration.presetGithub":"GitHub-Webhook","integration.presetGithubDesc":"x-hub-signature-256, Delivery-GUID-Idempotenz","integration.presetShopify":"Shopify-Webhook","integration.presetShopifyDesc":"base64-HMAC, webhook-id-Idempotenz","integration.presetDingtalk":"DingTalk-Stream-Bot","integration.presetDingtalkDesc":"ws-Stream + Dispatch-Framing + pre_connect","integration.presetFeishu":"Feishu-Bot (Long Connection)","integration.presetFeishuDesc":"ws-Stream + pb-frame + OAuth-Handshake","integration.presetPull":"HTTP-Polling (Cursor)","integration.presetPullDesc":"pull + since_id-Paging + Checkpoint","integration.presetImap":"IMAP-Postfach (nativ)","integration.presetImapDesc":"pull + imap + mime, Mark-read-Semantik, IDLE-fähig"},qC={"layout.brand":"RaisFast","layout.adminPanel":"Panneau d'administration","layout.dashboard":"Tableau de bord","layout.content":"Contenu","layout.extension":"Extensions","layout.system":"Système","layout.posts":"Articles","layout.categories":"Catégories","layout.tags":"Étiquettes","layout.comments":"Commentaires","layout.media":"Médias","layout.contentTypes":"Types de contenu","layout.users":"Utilisateurs","layout.plugins":"Plugins","layout.rolesPermissions":"Rôles et permissions","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"Jetons API","layout.workflows":"Workflows","layout.auditLog":"Journal d'audit","layout.options":"Options","layout.tenant":"Tenant","layout.clearTenant":"Effacer le filtre de tenant","layout.all":"Tout","layout.accessDenied":"Accès refusé","layout.accessDeniedMsg":"Vous devez être connecté en tant qu'auteur ou administrateur pour accéder à cette section.","layout.goToLogin":"Aller à la connexion","layout.toggleTheme":"Changer le thème","layout.signOut":"Déconnexion","layout.profile":"Profil","common.loading":"Chargement...","common.save":"Enregistrer","common.cancel":"Annuler","common.ok":"OK","common.create":"Créer","common.creating":"Création...","common.saving":"Enregistrement...","common.delete":"Supprimer","common.confirmDeleteTitle":"Confirmer la suppression","common.edit":"Modifier","common.content":"Contenu","common.remove":"Supprimer","common.view":"Voir","common.back":"Retour","common.actions":"Actions","common.status":"Statut","common.retry":"Réessayer","common.previous":"Précédent","common.next":"Suivant","common.pageOf":"Page {page} sur {total}","common.noData":"Aucune donnée","common.all":"Tout","common.draft":"Brouillon","common.published":"Publié","common.archived":"Archivé","common.enabled":"Activé","common.disabled":"Désactivé","common.name":"Nom","common.description":"Description","common.enabledCount":"{count} activé(s)","common.disabledCount":"{count} désactivé(s)","common.adminOnly":"Administrateurs uniquement","common.adminOnlyMsg":"Seuls les administrateurs peuvent gérer cette section.","common.backToDashboard":"Retour au tableau de bord","common.confirmDelete":"Êtes-vous sûr de vouloir supprimer cet élément ?","common.notFound":"Non trouvé","common.failedToLoad":"Échec du chargement","common.selectStatus":"Sélectionner un statut","common.titleRequired":"Le titre est requis","common.contentRequired":"Le contenu est requis","common.nameRequired":"Le nom est requis","common.invalidJson":"JSON invalide","common.isRequired":"{field} est requis","common.created":"{name} créé","common.updated":"{name} mis à jour","common.deleted":"{name} supprimé","common.failedToCreate":"Échec de la création de {name}","common.failedToUpdate":"Échec de la mise à jour de {name}","common.failedToDelete":"Échec de la suppression de {name}","common.none":"Aucun","common.noDependencies":"Aucune dépendance","dashboard.title":"Tableau de bord","dashboard.posts":"Articles","dashboard.comments":"Commentaires","dashboard.categories":"Catégories","dashboard.tags":"Étiquettes","dashboard.media":"Médias","dashboard.users":"Utilisateurs","dashboard.contentTypes":"Types de contenu","dashboard.postsLast14Days":"Articles (14 derniers jours)","dashboard.ordersAndProducts14Days":"Commandes et produits (14 derniers jours)","dashboard.viewAll":"Voir tout","dashboard.failedToLoad":"Échec du chargement des statistiques. Les données peuvent être obsolètes.","dashboard.noDataYet":"Aucune donnée pour le moment.","dashboard.recentActivity":"Activité récente","dashboard.noActivity":"Aucune activité pour le moment.","dashboard.type":"Type","dashboard.detail":"Détail","dashboard.time":"Heure","dashboard.post":"Article","dashboard.comment":"Commentaire","dashboard.product":"Produit","dashboard.order":"Commande","dashboard.products":"Produits","dashboard.orders":"Commandes","dashboard.revenue":"Revenu","dashboard.coupons":"Coupons","dashboard.orderStatus":"Statut des commandes","dashboard.justNow":"à l'instant","dashboard.minutesAgo":"min","dashboard.hoursAgo":"h","dashboard.daysAgo":"j","posts.title":"Articles","posts.newPost":"Nouvel article","posts.editPost":"Modifier l'article","posts.postTitle":"Titre de l'article","posts.titleCol":"Titre","posts.categoryCol":"Catégorie","posts.authorCol":"Auteur","posts.createdCol":"Créé","posts.allStatus":"Tous les statuts","posts.searchPlaceholder":"Rechercher des articles...","posts.content":"Contenu","posts.excerpt":"Extrait","posts.briefSummary":"Résumé court (facultatif)","posts.coverImage":"Image de couverture","posts.writeContent":"Rédigez le contenu de votre article en Markdown...","posts.selectCategory":"Sélectionner une catégorie","posts.tags":"Étiquettes","posts.slug":"Slug","posts.slugPlaceholder":"Généré depuis le titre si vide","posts.noTags":"Aucune étiquette disponible","posts.addTag":"Ajouter un tag...","posts.createTag":"Créer","posts.createPost":"Créer l'article","posts.saveChanges":"Enregistrer les modifications","posts.postCreated":"Article créé","posts.postUpdated":"Article mis à jour","posts.postDeleted":"Article supprimé","posts.failedToCreate":"Échec de la création de l'article","posts.failedToUpdate":"Échec de la mise à jour de l'article","posts.failedToDelete":"Échec de la suppression de l'article","posts.confirmDelete":"Êtes-vous sûr de vouloir supprimer cet article ?","posts.confirmBatchDelete":"Supprimer {count} articles ?","posts.batchPublish":"Publier","posts.batchUnpublish":"Dépublier","posts.batchSuccess":"{count} articles mis à jour","posts.noPosts":"Aucun article trouvé.","posts.noPostsDesc":"Créez votre premier article de blog pour partager vos idées.","posts.failedToLoad":"Échec du chargement de l'article.","categories.title":"Catégories","categories.newCategory":"Nouvelle catégorie","categories.createCategory":"Créez une nouvelle catégorie pour organiser les articles.","categories.categoryName":"Nom de la catégorie","categories.optionalDesc":"Description (facultatif)","categories.sortOrder":"Ordre de tri","categories.slug":"Slug","categories.categoryCreated":"Catégorie créée","categories.categoryUpdated":"Catégorie mise à jour","categories.categoryDeleted":"Catégorie supprimée","categories.failedToCreate":"Échec de la création de la catégorie","categories.failedToUpdate":"Échec de la mise à jour de la catégorie","categories.failedToDelete":"Échec de la suppression de la catégorie","categories.confirmDelete":"Êtes-vous sûr de vouloir supprimer cette catégorie ?","categories.confirmDeleteTitle":"Supprimer la catégorie","categories.noCategories":"Aucune catégorie","categories.noCategoriesDesc":"Organisez vos articles avec des catégories.","categories.treeTitle":"Catégories","categories.selectCategory":"Sélectionnez une catégorie pour voir les détails","categories.addChild":"Ajouter sous","categories.parent":"Catégorie parente","categories.noParent":"Aucune","categories.editCategory":"Modifier la catégorie","categories.cannotDeleteHasChildren":"Impossible de supprimer cette catégorie car elle contient {count} sous-catégories. Veuillez les déplacer ou les supprimer d'abord.","categories.coverImage":"Image de couverture","tags.title":"Étiquettes","tags.newTag":"Nouvelle étiquette","tags.createTag":"Créez une nouvelle étiquette pour les articles.","tags.tagName":"Nom de l'étiquette","tags.tagCreated":"Étiquette créée","tags.tagUpdated":"Étiquette mise à jour","tags.tagDeleted":"Étiquette supprimée","tags.failedToCreate":"Échec de la création de l'étiquette","tags.failedToUpdate":"Échec de la mise à jour de l'étiquette","tags.failedToDelete":"Échec de la suppression de l'étiquette","tags.confirmDelete":"Êtes-vous sûr de vouloir supprimer cette étiquette ?","tags.noTags":"Aucune étiquette trouvée.","tags.noTagsDesc":"Ajoutez des étiquettes pour organiser et filtrer votre contenu.","comments.title":"Commentaires","comments.total":"{count} au total","comments.all":"Tous","comments.pending":"En attente","comments.approved":"Approuvé","comments.rejected":"Rejeté","comments.spam":"Indésirable","comments.approve":"Approuver","comments.reject":"Rejeter","comments.author":"Auteur","comments.contentCol":"Contenu","comments.post":"Article","comments.date":"Date","comments.selected":"{count} sélectionné(s)","comments.commentStatusUpdated":"Statut du commentaire mis à jour","comments.commentDeleted":"Commentaire supprimé","comments.bulkActionDone":"{count} commentaire(s) {status}","comments.bulkDeleted":"{count} commentaire(s) supprimé(s)","comments.bulkActionFailed":"L'action groupée a échoué","comments.bulkDeleteFailed":"La suppression groupée a échoué","comments.failedToUpdateStatus":"Échec de la mise à jour du statut","comments.failedToDelete":"Échec de la suppression du commentaire","comments.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce commentaire ?","comments.confirmBulkDelete":"Supprimer {count} commentaire(s) sélectionné(s) ?","comments.noComments":"Aucun commentaire trouvé.","comments.noCommentsDesc":"Les commentaires apparaîtront ici lorsque les lecteurs commenceront à interagir.","contentTypes.title":"Types de contenu","contentTypes.noFields":"Ce type de contenu n'a pas de champs modifiables.","contentTypes.createContentType":"Créer un type de contenu","contentTypes.builder":"Constructeur","contentTypes.noContentTypes":"Aucun type de contenu","contentTypes.noContentTypesDesc":"Créez votre premier type de contenu pour commencer à construire votre CMS.","contentTypes.contentTypeDeleted":"Type de contenu supprimé","contentTypes.failedToDelete":"Échec de la suppression","contentTypes.confirmDelete":"Supprimer le type de contenu « {singular} » ? Cela supprime le fichier de schéma mais PAS la table de base de données.","contentTypes.notFound":"Type de contenu non trouvé","contentTypes.notFoundMsg":"Le type de contenu « {singular} » est introuvable.","contentTypes.itemDeleted":"Élément supprimé","contentTypes.failedToDeleteItem":"Échec de la suppression de l'élément","contentTypes.confirmDeleteItem":"Êtes-vous sûr de vouloir supprimer cet élément ?","contentTypes.batchDeleteSuccess":"{count} éléments supprimés","contentTypes.confirmBatchDelete":"Voulez-vous vraiment supprimer {count} éléments ?","contentTypes.export":"Exporter","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} éléments exportés","contentTypes.import":"Importer","contentTypes.importJson":"Importer JSON","contentTypes.importCsv":"Importer CSV","contentTypes.importExcel":"Importer Excel","contentTypes.importSuccess":"{count} enregistrements importés","contentTypes.importPartial":"{ok} importés, {failed} échoués","contentTypes.importEmpty":"Aucun enregistrement trouvé dans le fichier","contentTypes.importTooMany":"Trop d'enregistrements (max {max})","contentTypes.importFailed":"Échec de l'importation","contentTypes.importTooLarge":"Le fichier dépasse la limite de 8 Mo","contentTypes.noItems":"Aucun élément trouvé.","contentTypes.noItemsDesc":"Créez votre premier élément pour remplir cette collection.","contentTypes.newItem":"Nouveau {name}","contentTypes.editItem":"Modifier {name}","contentTypes.itemNotFound":"Élément introuvable.","contentTypes.fields":"{count} champ(s)","contentTypes.fieldsLabel":"champs","contentTypes.totalRecords":"{count} enregistrements","contentTypes.createdAt":"Créé","contentTypes.updatedAt":"Mis à jour","users.title":"Utilisateurs","users.newUser":"Nouvel utilisateur","users.createUser":"Créer un utilisateur","users.registerNew":"Inscrivez un nouveau compte utilisateur.","users.username":"Nom d'utilisateur","users.email":"E-mail","users.password":"Mot de passe","users.minChars":"Minimum 8 caractères, doit contenir majuscules, minuscules et chiffres","users.role":"Rôle","users.joined":"Inscrit","users.editRole":"Modifier le rôle de l'utilisateur","users.editUser":"Modifier l'utilisateur","users.changeRoleFor":"Changer le rôle de {username} ({email})","users.reader":"Lecteur","users.author":"Auteur","users.admin":"Administrateur","users.active":"Actif","users.suspended":"Suspendu","users.banned":"Banni","users.newPassword":"Nouveau mot de passe","users.userCreated":"Utilisateur créé","users.userUpdated":"Utilisateur mis à jour","users.userRoleUpdated":"Rôle de l'utilisateur mis à jour","users.failedToCreate":"Échec de la création de l'utilisateur","users.failedToUpdate":"Échec de la mise à jour de l'utilisateur","users.noUsers":"Aucun utilisateur trouvé.","users.noUsersDesc":"Invitez des utilisateurs et gérez leurs rôles.","users.registeredVia":"Source","users.userDeleted":"Utilisateur supprimé","users.failedToDelete":"Échec de la suppression","users.confirmDeleteUser":`Supprimer l'utilisateur "{username}" ? Cette action est irréversible.`,"webhooks.title":"Webhooks","webhooks.newWebhook":"Nouveau Webhook","webhooks.createWebhook":"Créez un nouvel abonnement Webhook pour recevoir des notifications d'événements.","webhooks.callbackUrl":"URL de rappel","webhooks.eventsComma":"Événements (séparés par des virgules)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Utilisez * pour vous abonner à tous les événements","webhooks.descriptionOptional":"Description (facultatif)","webhooks.urlCol":"URL","webhooks.events":"Événements","webhooks.webhookCreated":"Webhook créé","webhooks.webhookUpdated":"Webhook mis à jour","webhooks.webhookDeleted":"Webhook supprimé","webhooks.failedToCreate":"Échec de la création du Webhook","webhooks.failedToUpdate":"Échec de la mise à jour du Webhook","webhooks.failedToDelete":"Échec de la suppression du Webhook","webhooks.confirmDelete":"Supprimer cet abonnement Webhook ?","webhooks.noWebhooks":"Aucun Webhook trouvé.","webhooks.noWebhooksDesc":"Configurez des Webhooks pour recevoir des notifications d'événements en temps réel.","tokens.title":"Jetons API","tokens.newToken":"Nouveau jeton","tokens.createToken":"Créer un jeton API","tokens.createTokenDesc":"Générez un nouveau jeton d'accès personnel. La valeur du jeton ne sera affichée qu'une seule fois.","tokens.scopesComma":"Portées (séparées par des virgules)","tokens.expiresOptional":"Expire le (facultatif)","tokens.tokenCreated":"Jeton créé","tokens.tokenRevoked":"Jeton révoqué","tokens.failedToCreate":"Échec de la création du jeton","tokens.failedToRevoke":"Échec de la révocation du jeton","tokens.confirmRevoke":"Révoquer le jeton « {name} » ? Cette action est irréversible.","tokens.tokenCopied":"Jeton copié dans le presse-papiers","tokens.tokenCreatedCopy":"Jeton créé — copiez-le maintenant !","tokens.copied":"Copié","tokens.copy":"Copier","tokens.dismiss":"Fermer","tokens.notShownAgain":"Ce jeton ne sera plus affiché. Conservez-le en lieu sûr.","tokens.scopesCol":"Portées","tokens.expiresCol":"Expiration","tokens.lastUsed":"Dernière utilisation","tokens.never":"Jamais","tokens.noTokens":"Aucun jeton API trouvé. Créez-en un pour commencer.","tokens.noTokensDesc":"Créez des jetons API pour un accès programmatique.","tokens.description":"Description","workflows.title":"Workflows","workflows.instances":"Instances","workflows.visualEditor":"Éditeur visuel","workflows.newWorkflow":"Nouveau workflow","workflows.createWorkflow":"Créer un workflow","workflows.createWorkflowDesc":"Définissez un nouveau workflow avec des étapes. Les étapes sont configurées en JSON.","workflows.stepsJson":"Étapes (JSON)","workflows.stepFormat":'Chaque étape : { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow créé","workflows.workflowDeleted":"Workflow supprimé","workflows.failedToCreate":"Échec de la création du workflow","workflows.failedToDelete":"Échec de la suppression du workflow","workflows.confirmDelete":"Supprimer le workflow « {name} » ?","workflows.noWorkflows":"Aucun workflow trouvé. Créez-en un pour commencer.","workflows.noWorkflowsDesc":"Définissez des workflows pour automatiser votre pipeline de contenu.","workflows.steps":"{count} étape(s)","workflows.workflowStarted":"Workflow démarré","workflows.editor.title":"Éditeur de workflow","workflows.editor.newWorkflow":"Nouveau workflow","workflows.editor.stepName":"Nom de l'étape","workflows.editor.branchesJson":"Branches (tableau JSON)","workflows.editor.connectEdges":"Connectez les arêtes depuis ce nœud pour définir les branches.","workflows.editor.configJson":"Configuration (JSON)","workflows.editor.apply":"Appliquer","workflows.editor.deleteStep":"Supprimer l'étape","workflows.editor.addStep":"Ajouter une étape","workflows.editor.invalidJson":"JSON invalide dans la configuration","workflows.editor.workflowSaved":"Workflow enregistré","workflows.editor.failedToSave":"Échec de l'enregistrement du workflow","audit.title":"Journal d'audit","audit.clearFilters":"Effacer les filtres","audit.noLogs":"Aucune entrée de journal d'audit trouvée.","audit.action":"Action","audit.actor":"Acteur","audit.resource":"Ressource","audit.timestamp":"Horodatage","options.title":"Options","options.saved":"Options enregistrées","options.failedToSave":"Échec de l'enregistrement des options","plugins.title":"Plugins","plugins.loaded":"{count} chargé(s)","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Santé","plugins.pluginEnabled":"Plugin activé","plugins.pluginDisabled":"Plugin désactivé","plugins.pluginReloaded":"Plugin rechargé","plugins.pluginRemoved":"Plugin supprimé","plugins.failedToEnable":"Échec de l'activation du plugin","plugins.failedToDisable":"Échec de la désactivation du plugin","plugins.failedToReload":"Échec du rechargement du plugin","plugins.failedToRemove":"Échec de la suppression du plugin","plugins.noPlugins":"Aucun plugin chargé.","plugins.placePlugins":"Placez les plugins dans le répertoire configuré.","plugins.confirmRemove":"Supprimer le plugin « {name} » ? Il sera déchargé de la mémoire.","plugins.autoDisabled":"Désactivé automatiquement","plugins.tooManyErrors":"Trop d'erreurs","plugins.errorCount":"{count} erreur(s)","plugins.errorsOccurred":"Des erreurs se sont produites","plugins.calls":"{count} appel(s)","plugins.idle":"Inactif","plugins.notFound":"Plugin non trouvé","plugins.notFoundMsg":"Plugin introuvable.","plugins.backToPlugins":"Retour aux plugins","plugins.general":"Général","plugins.version":"Version","plugins.reload":"Recharger","plugins.remove":"Supprimer","plugins.errorTracking":"Suivi des erreurs et statut de désactivation automatique","plugins.healthy":"En bonne santé","plugins.errorCountLabel":"Nombre d'erreurs","plugins.lastError":"Dernière erreur","plugins.lastErrorAt":"Dernière erreur le","plugins.autoDisabledLabel":"Désactivé automatiquement","plugins.permissions":"Permissions","permissions.declaredFromManifest":"Permissions déclarées dans le manifeste du plugin","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Points de hook enregistrés et leurs métriques d'exécution","plugins.noHooks":"Aucun hook enregistré.","plugins.totalCalls":"Total des appels","plugins.totalErrors":"Total des erreurs","plugins.totalDuration":"Durée totale","plugins.noMetrics":"Aucune métrique pour le moment","plugins.performance":"Aperçu des performances","plugins.maxMemory":"Mémoire maximale","plugins.timeout":"Délai d'attente","plugins.default":"Par défaut","media.title":"Médias","media.files":"{count} fichier(s)","media.searchFiles":"Rechercher des fichiers...","media.fileDeleted":"Fichier supprimé","media.failedToDelete":"Échec de la suppression du fichier","media.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce fichier ?","media.date":"Date","media.size":"Taille","media.ascending":"Croissant","media.descending":"Décroissant","field.mediaUrl":"URL du média","field.startWriting":"Commencez à écrire...","field.yes":"Oui","field.no":"Non","field.relatedItemId":"ID de l'élément associé","cron.title":"Tâches Cron","cron.newCron":"Nouvelle tâche Cron","cron.expression":"Expression","cron.handler":"Gestionnaire","cron.lastRun":"Dernière exécution","cron.nextRun":"Prochaine exécution","cron.cronCreated":"Tâche Cron créée","cron.cronDeleted":"Tâche Cron supprimée","cron.failedToCreate":"Échec de la création de la tâche Cron","cron.failedToDelete":"Échec de la suppression de la tâche Cron","cron.noCrons":"Aucune tâche Cron trouvée.","cron.confirmDelete":"Supprimer la tâche Cron « {name} » ?","tenants.title":"Tenants","tenants.newTenant":"Nouveau tenant","tenants.createTenant":"Créez un nouveau tenant pour l'isolation multi-tenant.","tenants.tenantName":"Nom du tenant","tenants.slug":"Slug","tenants.domain":"Domaine","tenants.owner":"Propriétaire","tenants.tenantCreated":"Tenant créé","tenants.tenantUpdated":"Tenant mis à jour","tenants.tenantDeleted":"Tenant supprimé","tenants.failedToCreate":"Échec de la création du tenant","tenants.failedToUpdate":"Échec de la mise à jour du tenant","tenants.failedToDelete":"Échec de la suppression du tenant","tenants.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce tenant ?","tenants.noTenants":"Aucun tenant trouvé.","tenants.noTenantsDesc":"Créez des tenants pour le SaaS multi-tenant.","rbac.title":"Rôles et permissions","rbac.roles":"Rôles","rbac.newRole":"Nouveau rôle","rbac.createRole":"Créez un nouveau rôle pour le contrôle d'accès.","rbac.roleName":"Nom du rôle","rbac.roleDesc":"Description du rôle","rbac.roleCreated":"Rôle créé","rbac.roleUpdated":"Rôle mis à jour","rbac.roleDeleted":"Rôle supprimé","rbac.failedToCreate":"Échec de la création du rôle","rbac.failedToUpdate":"Échec de la mise à jour du rôle","rbac.failedToDelete":"Échec de la suppression du rôle","rbac.confirmDelete":"Supprimer le rôle « {name} » ? Cela supprimera toutes les permissions associées.","rbac.systemRole":"Système","rbac.permissions":"Permissions","rbac.addPermission":"Ajouter une permission","rbac.action":"Action","rbac.subject":"Sujet","rbac.noRoles":"Aucun rôle trouvé.","builder.title":"Constructeur de types de contenu","builder.editContentType":"Modifier le type de contenu","builder.createContentType":"Créer un type de contenu","builder.baseConfig":"Configuration de base","builder.singularName":"Nom singulier","builder.pluralName":"Nom pluriel","builder.tableName":"Nom de la table","builder.fieldsSection":"Champs","builder.addField":"Ajouter un champ","builder.preview":"Aperçu","builder.save":"Enregistrer le type de contenu","builder.saving":"Enregistrement...","builder.saved":"Type de contenu enregistré","builder.failedToSave":"Échec de l'enregistrement du type de contenu","builder.confirmDeleteField":"Supprimer le champ « {name} » ?","builder.text":"Texte","builder.richText":"Texte enrichi","builder.email":"E-mail","builder.password":"Mot de passe","builder.uid":"UID","builder.integer":"Entier","builder.bigInt":"Grand entier","builder.decimal":"Décimal","builder.float":"Flottant","builder.boolean":"Booléen","builder.date":"Date","builder.datetime":"Date et heure","builder.time":"Heure","builder.enumType":"Énumération","builder.jsonType":"JSON","builder.relation":"Relation","builder.mediaType":"Média","builder.link":"Lien","builder.required":"Requis","builder.unique":"Unique","builder.privateField":"Privé","builder.immutable":"Immutable","builder.label":"Étiquette","builder.defaultValue":"Valeur par défaut","builder.maxLength":"Longueur maximale","builder.minValue":"Min","builder.maxValue":"Max","builder.enumValues":"Valeurs d'énumération (séparées par des virgules)","builder.relationType":"Type de relation","builder.relationTarget":"Table cible","builder.foreignKey":"Clé étrangère","builder.throughTable":"Table intermédiaire","builder.draftPublish":"Brouillon/Publication","builder.timestamps":"Horodatages","builder.softDelete":"Suppression douce","builder.slugField":"Champ Slug","media.name":"Nom","media.type":"Type","media.other":"Autre","media.uploadFailed":"Échec du téléversement","media.dropFiles":"Déposez des fichiers ici, collez ou {browse}","media.uploading":"Téléversement de {count} fichier(s)...","media.done":"Terminé","media.failedUpload":"Échoué","media.urlCopied":"URL copiée","media.copyUrl":"Copier l'URL","media.download":"Télécharger","media.dimensions":"Dimensions","media.uploaded":"Téléversé","media.urlLabel":"URL","media.noVideoSupport":"Votre navigateur ne prend pas en charge la vidéo.","media.downloadFile":"Télécharger le fichier","workflows.instances.title":"Instances de workflow","workflows.instances.showLogs":"Afficher les journaux","workflows.instances.hideLogs":"Masquer les journaux","workflows.instances.currentStep":"En cours","workflows.instances.context":"Contexte","workflows.instances.stepLogs":"Journaux d'étape ({count})","workflows.instances.noStepLogs":"Aucun journal d'étape.","workflows.instances.noInstances":"Aucune instance de workflow trouvée.","workflows.instances.instanceCount":"{count} instance(s)","workflows.instances.definitions":"Définitions","workflows.instances.filterStatus":"Filtrer par statut","workflows.instances.cancelled":"Instance annulée","workflows.editor.editStep":"Modifier l'étape","workflows.editor.name":"Nom","workflows.editor.type":"Type","workflows.editor.backToList":"Retour à la liste","workflows.editor.workflowName":"Nom du workflow...","workflows.editor.failedToLoad":"Échec du chargement du workflow","workflows.editor.immutableNotice":"Les définitions de workflow sont immuables. Créez-en un nouveau pour modifier les étapes.","workflows.editor.untitled":"Workflow sans titre","workflows.editor.save":"Enregistrer","workflows.editor.saving":"Enregistrement...","cron.createSchedule":"Créer une planification Cron","cron.labelField":"Libellé","cron.jobType":"Type de tâche","cron.cronExpression":"Expression Cron (6 segments)","cron.format":"Format : sec min heure jour mois jour-sem","cron.payload":"Charge utile (JSON, facultatif)","cron.schedules":"{count} planification(s)","cron.schedule":"Planification","cron.pluginCol":"Plugin","cron.scheduleCreated":"Planification créée","cron.scheduleToggled":"Planification basculée","cron.scheduleDeleted":"Planification supprimée","cron.scheduleUpdated":"Planification mise à jour","cron.noCronSchedules":"Aucune planification Cron.","cron.seedHint":"Créez-en une ci-dessus ou activez CRON_SEED_ENABLED pour les valeurs par défaut.","cron.confirmDeleteSchedule":"Supprimer la planification « {name} » ? Cette action est irréversible.","cron.scheduleNotFound":"Planification non trouvée","cron.backToCronSchedules":"Retour aux planifications Cron","cron.scheduleDetails":"Détails de la planification","cron.cronExpression7":"6 segments : sec min heure jour mois jour-sem","cron.builtIn":"Intégré","cron.executionHistory":"Historique d'exécution","cron.recentLogs":"Journaux d'exécution récents pour cette planification","cron.cleanupOld":"Nettoyer les anciens","cron.cleanedUp":"{count} ancien(s) journal(s) nettoyé(s)","cron.noExecutionLogs":"Aucun journal d'exécution pour le moment.","cron.success":"Succès","cron.failedStatus":"Échoué","cron.running":"En cours","cron.newSchedule":"Nouvelle planification","cron.idField":"ID","cron.started":"Démarré","cron.finished":"Terminé","cron.duration":"Durée","cron.error":"Erreur","cron.created":"Créé","cron.updated":"Mis à jour","tenants.createForIsolation":"Créez un nouveau tenant pour l'isolation des données.","tenants.cannotDeleteDefault":"Impossible de supprimer le tenant par défaut","tenants.confirmDeleteMsg":"Supprimer ce tenant ? Les données appartenant à ce tenant ne seront PAS supprimées.","tenants.created":"Créé","rbac.addRoleDesc":"Ajoutez un nouveau rôle au système.","rbac.updateRoleDesc":"Mettre à jour le rôle « {name} ».","rbac.deleteRoleTitle":"Supprimer le rôle","rbac.deleteRoleConfirm":"Êtes-vous sûr de vouloir supprimer « {name} » ? Cette action est irréversible.","rbac.addPermissionTitle":"Ajouter une permission","rbac.addPermissionDesc":"Accordez une nouvelle permission à « {name} ». Utilisez * comme joker.","rbac.fieldsCol":"Champs","rbac.conditionsCol":"Conditions","rbac.fieldsOptional":"Champs (séparés par des virgules, facultatif)","rbac.removePermissionTitle":"Supprimer la permission","rbac.removePermissionDesc":"Supprimer {action} sur {subject} ?","rbac.noPermissions":"Aucune permission configurée.","rbac.selectRole":"Sélectionnez un rôle pour voir les permissions","rbac.prev":"Préc.","options.noChanges":"Aucune modification","options.noOptions":"Aucune option disponible.","options.reset":"Réinitialiser","options.saveChanges":"Enregistrer les modifications","audit.failedToLoad":"Échec du chargement du journal d'audit. Veuillez réessayer.","audit.noEntries":"Aucune entrée d'audit trouvée.","audit.noEntriesDesc":"Les entrées d'audit apparaîtront à mesure que des actions sont effectuées.","audit.timeCol":"Heure","audit.subjectId":"ID du sujet","audit.detailCol":"Détail","audit.system":"système","audit.from":"De","audit.to":"À","audit.search":"Rechercher","audit.clear":"Effacer","audit.today":"Aujourd'hui","builder.untitled":"Type de contenu sans titre","builder.fieldCount":"{count} champ(s)","builder.fieldList":"Champs","builder.protocols":"Protocoles","builder.systemFields":"Champs système","builder.system":"système","builder.newField":"Nouveau champ","builder.addAnotherField":"Ajouter un autre champ","builder.addAField":"Ajouter un champ","builder.chooseFieldType":"Choisissez un type de champ à ajouter à votre type de contenu.","builder.fieldConfiguration":"Configuration du champ","builder.fieldName":"Nom du champ","builder.fieldTypeLabel":"Type de champ","builder.displayLabel":"Étiquette d'affichage","builder.helpText":"Texte d'aide","builder.removeField":"Supprimer le champ","builder.removeFieldConfirm":"Supprimer ce champ ?","builder.noAdditionalOptions":"Aucune option supplémentaire pour ce type de champ.","builder.acceptedTypes":"Types acceptés","builder.maxCount":"Nombre maximal","builder.target":"Cible","builder.valuesComma":"Valeurs (séparées par des virgules)","builder.describeContentType":"Décrivez ce type de contenu...","builder.contentTypeUpdated":"Type de contenu mis à jour","builder.contentTypeCreated":"Type de contenu créé","builder.newFieldCategory":"Nombre","layout.crm":"CRM","layout.pages":"Pages","layout.reusableBlocks":"Blocs","crm.dashboard":"Tableau de bord CRM","crm.pipeline":"Pipeline","crm.contacts":"Contacts","crm.companies":"Entreprises","crm.deals":"Affaires","crm.activities":"Activités","crm.notes":"Notes","crm.reports":"Rapports","crm.totalCompanies":"Total entreprises","crm.totalContacts":"Total contacts","crm.openDeals":"Affaires ouvertes","crm.wonDeals":"Affaires gagnées","crm.pipelineValue":"Valeur du pipeline","crm.weightedValue":"Valeur pondérée","crm.winRate":"Taux de gain","crm.avgDealSize":"Taille moyenne des affaires","crm.recentActivities":"Activités de la semaine","crm.totalActivities":"Total des activités","crm.leaderboard":"Classement","crm.noData":"Aucune donnée disponible.","crm.newDeal":"Nouvelle affaire","crm.createDeal":"Créer une affaire","crm.dealTitle":"Titre","crm.dealTitlePlaceholder":"Entrez le titre de l'affaire...","crm.amount":"Montant","crm.probability":"Probabilité","crm.stage":"Étape","crm.advanceStage":"Passer à l'étape suivante","crm.totalValue":"Valeur totale","crm.dealCreated":"Affaire créée","crm.failedToCreateDeal":"Échec de la création de l'affaire","crm.dealStageUpdated":"Étape de l'affaire mise à jour","crm.failedToUpdateStage":"Échec de la mise à jour de l'étape","crm.titleRequired":"Le titre est requis","crm.newContact":"Nouveau contact","crm.editContact":"Modifier le contact","crm.contact":"Contact","crm.name":"Nom","crm.email":"E-mail","crm.phone":"Téléphone","crm.company":"Entreprise","crm.source":"Source","crm.lifecycleStage":"Étape du cycle de vie","crm.noContacts":"Aucun contact trouvé.","crm.firstName":"Prénom","crm.lastName":"Nom de famille","crm.jobTitle":"Fonction","crm.newCompany":"Nouvelle entreprise","crm.editCompany":"Modifier l'entreprise","crm.companyName":"Nom de l'entreprise","crm.industry":"Secteur","crm.size":"Taille","crm.website":"Site web","crm.city":"Ville","crm.country":"Pays","crm.noCompanies":"Aucune entreprise trouvée.","crm.deal":"Affaire","crm.editDeal":"Modifier l'affaire","crm.closeDate":"Date de clôture","crm.lossReason":"Raison de la perte","crm.noDeals":"Aucune affaire trouvée.","crm.dealInfo":"Informations sur l'affaire","crm.newActivity":"Nouvelle activité","crm.editActivity":"Modifier l'activité","crm.activity":"Activité","crm.type":"Type","crm.subject":"Sujet","crm.content":"Contenu","crm.date":"Date","crm.duration":"Durée","crm.outcome":"Résultat","crm.noActivities":"Aucune activité trouvée.","crm.newNote":"Nouvelle note","crm.editNote":"Modifier la note","crm.note":"Note","crm.relatedTo":"Lié à","crm.pinned":"Épinglé","crm.createdAt":"Créé","crm.noNotes":"Aucune note trouvée.","crm.contentRequired":"Le contenu est requis","crm.relatedContactId":"ID du contact associé","crm.relatedCompanyId":"ID de l'entreprise associée","crm.relatedDealId":"ID de l'affaire associée","crm.contactInfo":"Informations du contact","crm.timeline":"Chronologie","crm.noTimeline":"Aucun événement dans la chronologie.","crm.addNote":"Ajouter une note","crm.notePlaceholder":"Saisissez une note...","crm.lifecycleUpdated":"Étape du cycle de vie mise à jour","crm.failedToUpdateLifecycle":"Échec de la mise à jour de l'étape du cycle de vie","crm.companyInfo":"Informations sur l'entreprise","crm.funnelReport":"Rapport d'entonnoir","crm.activityReport":"Rapport d'activité","crm.conversionRate":"Conversion","crm.byType":"Par type","crm.byOutcome":"Par résultat","pages.title":"Pages","pages.newPage":"Nouvelle page","pages.editPage":"Modifier la page","pages.pageDeleted":"Page supprimée","pages.pageCreated":"Page créée","pages.pageUpdated":"Page mise à jour","pages.failedToDelete":"Échec de la suppression de la page","pages.failedToCreate":"Échec de la création de la page","pages.failedToUpdate":"Échec de la mise à jour de la page","pages.statusUpdated":"Statut de la page mis à jour","pages.failedToUpdateStatus":"Échec de la mise à jour du statut","pages.confirmDelete":"Êtes-vous sûr de vouloir supprimer cette page ?","pages.noPages":"Aucune page trouvée.","pages.noPagesDesc":"Créez votre première page pour commencer à construire votre site.","pages.noBlocks":"Aucun bloc réutilisable.","pages.noBlocksDesc":"Créez des blocs réutilisables pour les utiliser dans vos pages.","pages.publish":"Publier","pages.unpublish":"Dépublier","pages.preview":"Aperçu","pages.slug":"Slug","pages.template":"Modèle","pages.createdAt":"Créé","pages.basicInfo":"Informations de base","pages.titleLabel":"Titre","pages.titlePlaceholder":"Entrez le titre de la page...","pages.coverImage":"Image de couverture","pages.metaTitle":"Titre méta","pages.metaDescription":"Description méta","pages.ogImage":"Image OG","pages.content":"Contenu","pages.blockMode":"Blocs","pages.saveDraft":"Enregistrer le brouillon","pages.writeContent":"Rédigez le contenu de votre page...","pages.addBlock":"Ajouter un bloc","pages.chooseBlock":"Choisissez un type de bloc","pages.reusableBlocks":"Blocs réutilisables","pages.createReusable":"Créer un bloc réutilisable","pages.editReusable":"Modifier le bloc réutilisable","pages.rbName":"Nom","pages.rbType":"Type de bloc","pages.rbDescription":"Description","pages.rbContent":"Contenu","command.search":"Rechercher...","command.placeholder":"Tapez une commande ou recherchez...","command.noResults":"Aucun résultat trouvé.","command.actions":"Actions","command.switchToLight":"Passer en mode clair","command.switchToDark":"Passer en mode sombre","layout.ecommerce":"E-Commerce","layout.products":"Produits","layout.productCategories":"Catégories de produits","layout.orders":"Commandes","layout.finance":"Finance","layout.currencies":"Devises","layout.wallets":"Portefeuilles","layout.paymentChannels":"Canaux de paiement","layout.productComments":"Avis","layout.coupons":"Coupons","layout.shippingTemplates":"Modèles de livraison","products.title":"Produits","products.newProduct":"Nouveau produit","products.editProduct":"Modifier le produit","products.productTitle":"Titre du produit","products.price":"Prix","products.originalPrice":"Prix d'origine","products.stock":"Stock","products.sales":"Ventes","products.coverUrl":"URL de couverture","products.description":"Description","products.content":"Contenu","products.slug":"Slug","products.status":"Statut","products.category":"Catégorie","products.unit":"Unité","products.minPurchase":"Achat minimum","products.maxPurchase":"Achat maximum","products.sortOrder":"Ordre de tri","products.metaTitle":"Titre méta","products.metaDescription":"Description méta","products.productCreated":"Produit créé","products.productUpdated":"Produit mis à jour","products.productDeleted":"Produit supprimé","products.batchDeleted":"{{count}} produits supprimés","products.batchSuccess":"{{count}} produits mis à jour","products.batchActivate":"Activer","products.batchDeactivate":"Désactiver","products.failedToCreate":"Échec de la création du produit","products.failedToUpdate":"Échec de la mise à jour du produit","products.failedToDelete":"Échec de la suppression du produit","products.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce produit ?","products.confirmBatchDelete":"Voulez-vous vraiment supprimer {{count}} produits ?","products.noProducts":"Aucun produit","products.noProductsDesc":"Créez votre premier produit pour commencer à vendre.","products.allStatus":"Tous les statuts","products.searchPlaceholder":"Rechercher un produit...","products.active":"Actif","products.draft":"Brouillon","products.archived":"Archivé","products.general":"Général","products.media":"Média","products.pricing":"Tarification","products.purchaseSettings":"Paramètres d'achat","products.summary":"Résumé","products.phTitle":"Titre du produit...","products.phSummary":"Brève description du produit...","products.images":"Images","products.cover":"Couverture","products.dropImages":"Déposez, collez ou cliquez pour uploader","productCategories.categoryName":"Nom de la catégorie","productCategories.newCategory":"Nouvelle catégorie","productCategories.createCategory":"Créer la catégorie","productCategories.editCategory":"Modifier la catégorie","productCategories.optionalDesc":"Description (facultatif)","productCategories.parent":"Catégorie parente","productCategories.noParent":"Aucune","productCategories.sortOrder":"Ordre de tri","productCategories.slug":"Slug","productCategories.noCategories":"Aucune catégorie","productCategories.noCategoriesDesc":"Créez votre première catégorie de produits pour organiser vos produits.","productCategories.categoryCreated":"Catégorie créée","productCategories.categoryUpdated":"Catégorie mise à jour","productCategories.categoryDeleted":"Catégorie supprimée","productCategories.failedToCreate":"Échec de la création","productCategories.failedToUpdate":"Échec de la mise à jour","productCategories.failedToDelete":"Échec de la suppression","productCategories.confirmDelete":"Voulez-vous vraiment supprimer cette catégorie ?","productCategories.confirmDeleteTitle":"Supprimer la catégorie","productCategories.cannotDeleteHasChildren":"Impossible de supprimer cette catégorie car elle contient {count} sous-catégories. Veuillez les déplacer ou les supprimer d'abord.","productCategories.treeTitle":"Catégories","productCategories.selectCategory":"Sélectionnez une catégorie pour voir les détails","productCategories.addChild":"Ajouter sous","orders.title":"Commandes","orders.orderNo":"N° de commande","orders.buyer":"Acheteur","orders.total":"Total","orders.status":"Statut","orders.items":"Articles","orders.remark":"Remarque","orders.adminRemark":"Remarque admin","orders.createdAt":"Créé","orders.actions":"Actions","orders.allStatus":"Tous les statuts","orders.searchPlaceholder":"Rechercher n° commande, acheteur...","orders.pending":"En attente","orders.paid":"Payé","orders.shipped":"Expédié","orders.completed":"Terminé","orders.cancelled":"Annulé","orders.refunded":"Remboursé","orders.confirmPay":"Confirmer le paiement ?","orders.orderPaid":"Commande marquée comme payée","orders.confirmShip":"Expédier cette commande ?","orders.orderShipped":"Commande expédiée","orders.confirmCancel":"Annuler cette commande ?","orders.orderCancelled":"Commande annulée","orders.confirmRefund":"Rembourser cette commande ?","orders.orderRefunded":"Commande remboursée","orders.failedToPay":"Échec du marquage comme payé","orders.failedToShip":"Échec de l'expédition","orders.failedToCancel":"Échec de l'annulation","orders.failedToRefund":"Échec du remboursement","orders.noOrders":"Aucune commande","orders.noOrdersDesc":"Les commandes apparaîtront ici lorsque les clients effectueront des achats.","orders.trackingNo":"N° de suivi","orders.carrier":"Transporteur","orders.shipInfo":"Informations d'expédition","orders.buyerInfo":"Informations sur l'acheteur","orders.shippingAddress":"Adresse de livraison","orders.orderDetail":"Détail de la commande","orders.stats.totalOrders":"Total des commandes","orders.stats.totalRevenue":"Chiffre d'affaires total","orders.stats.pending":"En attente","orders.stats.completed":"Terminées","orders.stats.todayOrders":"Commandes aujourd'hui","orders.stats.todayRevenue":"Revenus aujourd'hui","payments.title":"Canaux de paiement","payments.newChannel":"Nouveau canal","payments.provider":"Fournisseur","payments.name":"Nom du canal","payments.mode":"Mode","payments.active":"Actif","payments.live":"Production","payments.test":"Test","payments.credentials":"Identifiants","payments.webhookSecret":"Secret Webhook","payments.settings":"Paramètres","payments.channelCreated":"Canal de paiement créé","payments.channelUpdated":"Canal de paiement mis à jour","payments.channelDeleted":"Canal de paiement supprimé","payments.failedToCreate":"Échec de la création du canal de paiement","payments.failedToUpdate":"Échec de la mise à jour du canal de paiement","payments.failedToDelete":"Échec de la suppression du canal de paiement","payments.confirmDelete":"Supprimer ce canal de paiement ?","payments.noChannels":"Aucun canal de paiement","payments.noChannelsDesc":"Ajoutez un canal de paiement pour commencer à accepter les paiements.","payments.selectProvider":"Sélectionner un fournisseur...","payments.testMode":"Mode test (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"ID marchand","payments.fPrivateKey":"Clé privée RSA","payments.fSerialNo":"N° de série du certificat","payments.fWebhookSecret":"Secret de signature webhook","payments.fAlipayPublicKey":"Clé publique Alipay","payments.fPlatformCert":"Certificat plateforme (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"URL de notification","payments.phSk":"sk_live_... ou sk_test_...","payments.phRsaKey":"Collez la clé privée RSA (PEM ou Base64)","payments.phUrl":"https://...","payments.editChannel":"Modifier le canal","payments.leaveBlankToKeep":"Laisser vide pour conserver","layout.paymentOrders":"Ordres de paiement","paymentOrders.title":"Ordres de paiement","paymentOrders.orderId":"Commande","paymentOrders.title_col":"Titre","paymentOrders.amount":"Montant","paymentOrders.provider":"Fournisseur","paymentOrders.noOrders":"Aucun ordre de paiement","paymentOrders.noOrdersDesc":"Les ordres de paiement apparaîtront ici lorsque les clients paieront.","paymentOrders.refund":"Rembourser","paymentOrders.refundTitle":"Remboursement","paymentOrders.refundOrder":"Rembourser la commande","paymentOrders.refundAmount":"Montant du remboursement","paymentOrders.refundReason":"Raison","paymentOrders.refundSuccess":"Remboursement soumis","paymentOrders.refundFailed":"Échec du remboursement","layout.paymentTransactions":"Transactions de paiement","paymentTransactions.title":"Transactions de paiement","paymentTransactions.orderId":"Commande","paymentTransactions.type":"Type","paymentTransactions.amount":"Montant","paymentTransactions.providerTxId":"ID transaction fournisseur","paymentTransactions.noTransactions":"Aucune transaction","paymentTransactions.noTransactionsDesc":"Les transactions apparaîtront ici lors des événements de paiement.","currencies.title":"Devises","currencies.newCurrency":"Nouvelle devise","currencies.code":"Code","currencies.name":"Nom","currencies.decimals":"Décimales","currencies.active":"Active","currencies.currencyCreated":"Devise créée","currencies.currencyUpdated":"Devise mise à jour","currencies.failedToCreate":"Échec de la création de la devise","currencies.failedToUpdate":"Échec de la mise à jour de la devise","currencies.noCurrencies":"Aucune devise","currencies.noCurrenciesDesc":"Ajoutez une devise pour activer la prise en charge multi-devises.","wallets.title":"Portefeuilles","wallets.user":"Utilisateur","wallets.currency":"Devise","wallets.balance":"Solde","wallets.frozen":"Gelé","wallets.credit":"Créditer","wallets.debit":"Débiter","wallets.transactions":"Transactions","wallets.amount":"Montant","wallets.type":"Type","wallets.reference":"Référence","wallets.creditTitle":"Créditer le portefeuille","wallets.debitTitle":"Débiter le portefeuille","wallets.userId":"ID utilisateur","wallets.remark":"Remarque","wallets.creditSuccess":"Portefeuille crédité","wallets.debitSuccess":"Portefeuille débité","wallets.failedToCredit":"Échec du crédit du portefeuille","wallets.failedToDebit":"Échec du débit du portefeuille","wallets.noWallets":"Aucun portefeuille","wallets.noWalletsDesc":"Les portefeuilles sont créés lorsque les utilisateurs reçoivent leur première transaction.","wallets.noTransactions":"Aucune transaction pour le moment.","adminLogin.title":"Panneau d'administration","adminLogin.subtitle":"Connectez-vous avec vos identifiants administrateur","adminLogin.email":"E-mail","adminLogin.password":"Mot de passe","adminLogin.submit":"Se connecter","adminLogin.loading":"Connexion en cours…","adminLogin.error":"E-mail ou mot de passe invalide","adminLogin.footer":"RaisFast Admin — accès réservé au personnel autorisé","adminLogin.sessionExpired":"Votre session a expiré. Veuillez vous reconnecter.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Intégration","layout.channels":"Canaux","layout.receipts":"Reçus","layout.apiClients":"Clients API","common.reset":"Réinitialiser","common.close":"Fermer","integration.newChannel":"Nouveau canal","integration.editChannel":"Modifier le canal","integration.channelKey":"Clé du canal","integration.displayName":"Nom d'affichage","integration.provider":"Fournisseur","integration.mode":"Mode","integration.transport":"Transport","integration.framing":"Cadrage","integration.endpoint":"Endpoint","integration.verifyKind":"Vérification","integration.verifyConfig":"Config de vérification (JSON)","integration.credentials":"Identifiants (JSON)","integration.credentialsKeepHint":"Laisser vide pour conserver les identifiants scellés","integration.mapping":"Mapping (JSONPath)","integration.pullConfig":"Config pull (JSON)","integration.streamConfig":"Config stream (JSON)","integration.targetType":"Content type cible","integration.routeExtra":"Extra de routage (JSON)","integration.redeliveryMax":"Max. de relivraisons","integration.stack":"Pile","integration.noChannels":"Aucun canal d'intégration","integration.noChannelsDesc":"Ajoutez un canal pour recevoir webhooks, flux et sondages entrants.","integration.channelCreated":"Canal créé","integration.channelUpdated":"Canal mis à jour","integration.channelDeleted":"Canal supprimé","integration.failedToCreate":"Échec de la création","integration.failedToUpdate":"Échec de la mise à jour","integration.failedToDelete":"Échec de la suppression","integration.failedToTest":"Échec du test","integration.confirmDeleteChannel":"Supprimer le canal « {key} » ? Les reçus sont conservés pour audit.","integration.testMapping":"Tester le mapping","integration.sampleBody":"Corps de requête d'exemple","integration.preview":"Aperçu de l'enveloppe normalisée","integration.runTest":"Exécuter","integration.hasCredentials":"Identifiants scellés dans le coffre","integration.allChannels":"Tous les canaux","integration.allStatuses":"Tous les statuts","integration.traceIdFilter":"Filtrer par trace ID…","integration.noReceipts":"Aucun reçu","integration.noReceiptsDesc":"Les livraisons entrantes apparaîtront ici avec leur trace complète.","integration.receivedAt":"Reçu le","integration.attempts":"Tentatives","integration.nextRetryAt":"Prochaine tentative","integration.noSteps":"Aucune étape enregistrée","integration.pending":"en attente","integration.receiptInfo":"Reçu","integration.trace":"Trace","integration.complete":"complet","integration.firstPass":"Première passe","integration.asyncChain":"Chaîne asynchrone","integration.envelopeSnapshot":"Snapshot de l'enveloppe","integration.fullSteps":"Chronologie complète des étapes","integration.egressCalls":"Appels sortants","integration.noEgress":"Aucun appel sortant","integration.noEgressDesc":"Les appels sortants déclenchés par ce reçu apparaîtront ici.","integration.replayed":"Rejoué","integration.dryRunDone":"Simulation terminée — rapport dans la trace","integration.failedToReplay":"Échec du rejeu","integration.replay":"Rejouer","integration.dryRunReplay":"Simuler le rejeu","integration.replayConfirmTitle":"Rejouer ce reçu ?","integration.replayConfirmDesc":"L'étape de routage est réexécutée depuis le snapshot d'enveloppe (upsert par external_id).","integration.receiptNotFound":"Reçu introuvable","integration.newClient":"Nouveau client API","integration.editClient":"Modifier le client API","integration.clientKey":"Clé du client","integration.baseUrl":"URL de base","integration.authConfig":"Config d'auth (JSON)","integration.rateLimit":"Limite de débit (JSON)","integration.ops":"Opérations (JSON)","integration.opsCount":"Ops","integration.noClients":"Aucun client API","integration.noClientsDesc":"Ajoutez un client API déclaratif pour les appels sortants.","integration.clientCreated":"Client API créé","integration.clientUpdated":"Client API mis à jour","integration.clientDeleted":"Client API supprimé","integration.confirmDeleteClient":"Supprimer le client API « {key} » ?","integration.testCall":"Appel de test","integration.selectOp":"Choisir une op","integration.input":"Entrée (JSON)","integration.result":"Résultat","integration.allClients":"Tous les clients","integration.egressLog":"Journal sortant","integration.latency":"Latence","integration.createdAt":"Créé le","integration.basicInfo":"Général","integration.trustSection":"Confiance (L0)","integration.normalizeSection":"Normalisation (L2)","integration.routingSection":"Routage et fiabilité (L3/L4)","integration.presetTitle":"Partir d'un préréglage","integration.presetPlaceholder":"Choisissez une configuration éprouvée…","integration.presetHint":"Préremplit tout le formulaire — ajustez ensuite clés, secrets et content type cible. Exemples issus d'intégrations réelles (GitHub / Feishu / DingTalk).","integration.presetApplied":"Préréglage appliqué — vérifiez et ajustez","integration.jsonInvalid":"JSON invalide","integration.insertExample":"Insérer un exemple","integration.presetGeneric":"Webhook générique (sans vérification)","integration.presetGenericDesc":"push simple + mapping JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + vérification de signature hmac-sha256","integration.presetGithub":"Webhook GitHub","integration.presetGithubDesc":"x-hub-signature-256, idempotence par delivery GUID","integration.presetShopify":"Webhook Shopify","integration.presetShopifyDesc":"HMAC base64, idempotence par webhook-id","integration.presetDingtalk":"Bot DingTalk Stream","integration.presetDingtalkDesc":"flux ws + framing dispatch + pre_connect","integration.presetFeishu":"Bot Feishu (connexion longue)","integration.presetFeishuDesc":"flux ws + pb-frame + poignée de main oauth","integration.presetPull":"Sondage HTTP (curseur)","integration.presetPullDesc":"pull + pagination since_id + checkpoint","integration.presetImap":"Boîte IMAP (native)","integration.presetImapDesc":"pull + imap + mime, sémantique mark-read, avec IDLE"},HC={"layout.brand":"RaisFast","layout.adminPanel":"لوحة الإدارة","layout.dashboard":"لوحة التحكم","layout.content":"المحتوى","layout.extension":"الإضافات","layout.system":"النظام","layout.posts":"المقالات","layout.categories":"التصنيفات","layout.tags":"الوسوم","layout.comments":"التعليقات","layout.media":"الوسائط","layout.contentTypes":"أنواع المحتوى","layout.users":"المستخدمون","layout.plugins":"الإضافات البرمجية","layout.rolesPermissions":"الأدوار والصلاحيات","layout.cron":"المهام المجدولة","layout.tenants":"المستأجرون","layout.webhooks":"ويب هوكس","layout.apiTokens":"رموز API","layout.workflows":"سير العمل","layout.auditLog":"سجل التدقيق","layout.options":"الخيارات","layout.tenant":"المستأجر","layout.clearTenant":"مسح فلتر المستأجر","layout.all":"الكل","layout.accessDenied":"تم رفض الوصول","layout.accessDeniedMsg":"يجب تسجيل الدخول ككاتب أو مسؤول للوصول إلى هذه المنطقة.","layout.goToLogin":"الذهاب لتسجيل الدخول","layout.toggleTheme":"تبديل السمة","layout.signOut":"تسجيل الخروج","layout.profile":"الملف الشخصي","common.loading":"جاري التحميل...","common.save":"حفظ","common.cancel":"إلغاء","common.ok":"حسناً","common.create":"إنشاء","common.creating":"جاري الإنشاء...","common.saving":"جاري الحفظ...","common.delete":"حذف","common.confirmDeleteTitle":"تأكيد الحذف","common.edit":"تعديل","common.content":"المحتوى","common.remove":"إزالة","common.view":"عرض","common.back":"رجوع","common.actions":"الإجراءات","common.status":"الحالة","common.retry":"إعادة المحاولة","common.previous":"السابق","common.next":"التالي","common.pageOf":"صفحة {page} من {total}","common.noData":"لا توجد بيانات","common.all":"الكل","common.draft":"مسودة","common.published":"منشور","common.archived":"مؤرشف","common.enabled":"مفعّل","common.disabled":"معطّل","common.name":"الاسم","common.description":"الوصف","common.enabledCount":"{count} مفعّل","common.disabledCount":"{count} معطّل","common.adminOnly":"للمسؤولين فقط","common.adminOnlyMsg":"فقط المسؤولون يمكنهم إدارة هذا القسم.","common.backToDashboard":"العودة للوحة التحكم","common.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا العنصر؟","common.notFound":"غير موجود","common.failedToLoad":"فشل التحميل","common.selectStatus":"اختر الحالة","common.titleRequired":"العنوان مطلوب","common.contentRequired":"المحتوى مطلوب","common.nameRequired":"الاسم مطلوب","common.invalidJson":"JSON غير صالح","common.isRequired":"{field} مطلوب","common.created":"تم إنشاء {name}","common.updated":"تم تحديث {name}","common.deleted":"تم حذف {name}","common.failedToCreate":"فشل إنشاء {name}","common.failedToUpdate":"فشل تحديث {name}","common.failedToDelete":"فشل حذف {name}","common.none":"لا شيء","common.noDependencies":"لا توجد تبعيات","dashboard.title":"لوحة التحكم","dashboard.posts":"المقالات","dashboard.comments":"التعليقات","dashboard.categories":"التصنيفات","dashboard.tags":"الوسوم","dashboard.media":"الوسائط","dashboard.users":"المستخدمون","dashboard.contentTypes":"أنواع المحتوى","dashboard.postsLast14Days":"المقالات (آخر 14 يوماً)","dashboard.ordersAndProducts14Days":"الطلبات والمنتجات (آخر 14 يومًا)","dashboard.viewAll":"عرض الكل","dashboard.failedToLoad":"فشل تحميل إحصائيات لوحة التحكم. قد تكون البيانات قديمة.","dashboard.noDataYet":"لا توجد بيانات بعد.","dashboard.recentActivity":"النشاط الأخير","dashboard.noActivity":"لا يوجد نشاط بعد.","dashboard.type":"النوع","dashboard.detail":"التفاصيل","dashboard.time":"الوقت","dashboard.post":"مقال","dashboard.comment":"تعليق","dashboard.product":"منتج","dashboard.order":"طلب","dashboard.products":"المنتجات","dashboard.orders":"الطلبات","dashboard.revenue":"الإيرادات","dashboard.coupons":"كوبونات","dashboard.orderStatus":"حالة الطلب","dashboard.justNow":"الآن","dashboard.minutesAgo":"د","dashboard.hoursAgo":"س","dashboard.daysAgo":"ي","posts.title":"المقالات","posts.newPost":"مقال جديد","posts.editPost":"تعديل المقال","posts.postTitle":"عنوان المقال","posts.titleCol":"العنوان","posts.categoryCol":"التصنيف","posts.authorCol":"الكاتب","posts.createdCol":"تاريخ الإنشاء","posts.allStatus":"جميع الحالات","posts.searchPlaceholder":"البحث عن المقالات...","posts.content":"المحتوى","posts.excerpt":"المقتطف","posts.briefSummary":"ملخص مختصر (اختياري)","posts.coverImage":"صورة الغلاف","posts.writeContent":"اكتب محتوى مقالك بصيغة Markdown...","posts.selectCategory":"اختر التصنيف","posts.tags":"الوسوم","posts.slug":"الرابط الثابت","posts.slugPlaceholder":"يُولّد تلقائيًا من العنوان إذا كان فارغًا","posts.noTags":"لا توجد وسوم متاحة","posts.addTag":"إضافة وسم...","posts.createTag":"إنشاء","posts.createPost":"إنشاء مقال","posts.saveChanges":"حفظ التغييرات","posts.postCreated":"تم إنشاء المقال","posts.postUpdated":"تم تحديث المقال","posts.postDeleted":"تم حذف المقال","posts.failedToCreate":"فشل إنشاء المقال","posts.failedToUpdate":"فشل تحديث المقال","posts.failedToDelete":"فشل حذف المقال","posts.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا المقال؟","posts.confirmBatchDelete":"هل أنت متأكد من حذف {count} مقال؟","posts.batchPublish":"نشر","posts.batchUnpublish":"إلغاء النشر","posts.batchSuccess":"تم تحديث {count} مقال","posts.noPosts":"لا توجد مقالات.","posts.noPostsDesc":"أنشئ أول مقال مدونة لمشاركة أفكارك.","posts.failedToLoad":"فشل تحميل المقال.","categories.title":"التصنيفات","categories.newCategory":"تصنيف جديد","categories.createCategory":"أنشئ تصنيفاً جديداً لتنظيم المقالات.","categories.categoryName":"اسم التصنيف","categories.optionalDesc":"وصف اختياري","categories.sortOrder":"ترتيب الفرز","categories.slug":"الرابط المختصر","categories.categoryCreated":"تم إنشاء التصنيف","categories.categoryUpdated":"تم تحديث التصنيف","categories.categoryDeleted":"تم حذف التصنيف","categories.failedToCreate":"فشل إنشاء التصنيف","categories.failedToUpdate":"فشل تحديث التصنيف","categories.failedToDelete":"فشل حذف التصنيف","categories.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا التصنيف؟","categories.confirmDeleteTitle":"حذف الفئة","categories.noCategories":"لا توجد تصنيفات بعد","categories.noCategoriesDesc":"نظّم مقالاتك باستخدام التصنيفات.","categories.treeTitle":"الفئات","categories.selectCategory":"اختر فئة لعرض التفاصيل","categories.addChild":"إضافة فرعي","categories.parent":"التصنيف الأب","categories.noParent":"بدون أب","categories.editCategory":"تعديل التصنيف","categories.cannotDeleteHasChildren":"لا يمكن حذف هذه الفئة لأنها تحتوي على {count} فئة فرعية. يرجى نقلها أو حذفها أولاً.","categories.coverImage":"صورة الغلاف","tags.title":"الوسوم","tags.newTag":"وسم جديد","tags.createTag":"أنشئ وسماً جديداً للمقالات.","tags.tagName":"اسم الوسم","tags.tagCreated":"تم إنشاء الوسم","tags.tagUpdated":"تم تحديث الوسم","tags.tagDeleted":"تم حذف الوسم","tags.failedToCreate":"فشل إنشاء الوسم","tags.failedToUpdate":"فشل تحديث الوسم","tags.failedToDelete":"فشل حذف الوسم","tags.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا الوسم؟","tags.noTags":"لا توجد وسوم.","tags.noTagsDesc":"أضف وسوماً للمساعدة في تنظيم وتصفية المحتوى.","comments.title":"التعليقات","comments.total":"{count} إجمالي","comments.all":"الكل","comments.pending":"قيد الانتظار","comments.approved":"تمت الموافقة","comments.rejected":"مرفوض","comments.spam":"مزعج","comments.approve":"موافقة","comments.reject":"رفض","comments.author":"الكاتب","comments.contentCol":"المحتوى","comments.post":"المقال","comments.date":"التاريخ","comments.selected":"{count} محدد","comments.commentStatusUpdated":"تم تحديث حالة التعليق","comments.commentDeleted":"تم حذف التعليق","comments.bulkActionDone":"{count} تعليق {status}","comments.bulkDeleted":"تم حذف {count} تعليق","comments.bulkActionFailed":"فشل الإجراء الجماعي","comments.bulkDeleteFailed":"فشل الحذف الجماعي","comments.failedToUpdateStatus":"فشل تحديث الحالة","comments.failedToDelete":"فشل حذف التعليق","comments.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا التعليق؟","comments.confirmBulkDelete":"حذف {count} تعليق محدد؟","comments.noComments":"لا توجد تعليقات.","comments.noCommentsDesc":"ستظهر التعليقات هنا بمجرد بدء القراء بالتفاعل.","contentTypes.title":"أنواع المحتوى","contentTypes.noFields":"لا توجد حقول قابلة للتعديل في هذا النوع من المحتوى.","contentTypes.createContentType":"إنشاء نوع محتوى","contentTypes.builder":"منشئ","contentTypes.noContentTypes":"لا توجد أنواع محتوى بعد","contentTypes.noContentTypesDesc":"أنشئ أول نوع محتوى لبدء بناء نظام إدارة المحتوى الخاص بك.","contentTypes.contentTypeDeleted":"تم حذف نوع المحتوى","contentTypes.failedToDelete":"فشل الحذف","contentTypes.confirmDelete":'حذف نوع المحتوى "{singular}"؟ سيؤدي هذا إلى إزالة ملف المخطط وليس جدول قاعدة البيانات.',"contentTypes.notFound":"نوع المحتوى غير موجود","contentTypes.notFoundMsg":'نوع المحتوى "{singular}" غير موجود.',"contentTypes.itemDeleted":"تم حذف العنصر","contentTypes.failedToDeleteItem":"فشل حذف العنصر","contentTypes.confirmDeleteItem":"هل أنت متأكد أنك تريد حذف هذا العنصر؟","contentTypes.batchDeleteSuccess":"تم حذف {count} عناصر","contentTypes.confirmBatchDelete":"هل تريد بالتأكيد حذف {count} عناصر؟","contentTypes.export":"تصدير","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"تم تصدير {count} عناصر","contentTypes.import":"استيراد","contentTypes.importJson":"استيراد JSON","contentTypes.importCsv":"استيراد CSV","contentTypes.importExcel":"استيراد Excel","contentTypes.importSuccess":"تم استيراد {count} سجلات","contentTypes.importPartial":"{ok} نجحت، {failed} فشلت","contentTypes.importEmpty":"لا توجد سجلات في الملف","contentTypes.importTooMany":"عدد كبير جداً من السجلات (الحد الأقصى {max})","contentTypes.importFailed":"فشل الاستيراد","contentTypes.importTooLarge":"الملف يتجاوز حد 8 ميغابايت","contentTypes.noItems":"لا توجد عناصر.","contentTypes.noItemsDesc":"أنشئ أول عنصر لتعبئة هذه المجموعة.","contentTypes.newItem":"{name} جديد","contentTypes.editItem":"تعديل {name}","contentTypes.itemNotFound":"العنصر غير موجود.","contentTypes.fields":"{count} حقل","contentTypes.fieldsLabel":"حقول","contentTypes.totalRecords":"{count} سجلات","contentTypes.createdAt":"تاريخ الإنشاء","contentTypes.updatedAt":"تاريخ التحديث","users.title":"المستخدمون","users.newUser":"مستخدم جديد","users.createUser":"إنشاء مستخدم","users.registerNew":"تسجيل حساب مستخدم جديد.","users.username":"اسم المستخدم","users.email":"البريد الإلكتروني","users.password":"كلمة المرور","users.minChars":"8 أحرف على الأقل، يجب أن يحتوي على أحرف كبيرة وصغيرة وأرقام","users.role":"الدور","users.joined":"تاريخ الانضمام","users.editRole":"تعديل دور المستخدم","users.editUser":"تعديل المستخدم","users.changeRoleFor":"تغيير دور {username} ({email})","users.reader":"قارئ","users.author":"كاتب","users.admin":"مسؤول","users.active":"نشط","users.suspended":"موقوف","users.banned":"محظور","users.newPassword":"كلمة المرور الجديدة","users.userCreated":"تم إنشاء المستخدم","users.userUpdated":"تم تحديث المستخدم","users.userRoleUpdated":"تم تحديث دور المستخدم","users.failedToCreate":"فشل إنشاء المستخدم","users.failedToUpdate":"فشل تحديث المستخدم","users.noUsers":"لا يوجد مستخدمون.","users.noUsersDesc":"ادعُ مستخدمين وأدر أدوارهم.","users.registeredVia":"مصدر التسجيل","users.userDeleted":"تم حذف المستخدم","users.failedToDelete":"فشل حذف المستخدم","users.confirmDeleteUser":'هل أنت متأكد من حذف المستخدم "{username}"؟ لا يمكن التراجع عن هذا.',"webhooks.title":"ويب هوكس","webhooks.newWebhook":"ويب هوك جديد","webhooks.createWebhook":"أنشئ اشتراك ويب هوك جديد لتلقي إشعارات الأحداث.","webhooks.callbackUrl":"رابط الاستدعاء","webhooks.eventsComma":"الأحداث (مفصولة بفواصل)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"استخدم * للاشتراك في جميع الأحداث","webhooks.descriptionOptional":"الوصف (اختياري)","webhooks.urlCol":"الرابط","webhooks.events":"الأحداث","webhooks.webhookCreated":"تم إنشاء الويب هوك","webhooks.webhookUpdated":"تم تحديث الويب هوك","webhooks.webhookDeleted":"تم حذف الويب هوك","webhooks.failedToCreate":"فشل إنشاء الويب هوك","webhooks.failedToUpdate":"فشل تحديث الويب هوك","webhooks.failedToDelete":"فشل حذف الويب هوك","webhooks.confirmDelete":"حذف اشتراك الويب هوك هذا؟","webhooks.noWebhooks":"لا توجد ويب هوكس.","webhooks.noWebhooksDesc":"أعدّ ويب هوكس لتلقي إشعارات الأحداث في الوقت الفعلي.","tokens.title":"رموز API","tokens.newToken":"رمز جديد","tokens.createToken":"إنشاء رمز API","tokens.createTokenDesc":"أنشئ رمز وصول شخصي جديد. ستظهر قيمة الرمز مرة واحدة فقط.","tokens.scopesComma":"النطاقات (مفصولة بفواصل)","tokens.expiresOptional":"تاريخ الانتهاء (اختياري)","tokens.tokenCreated":"تم إنشاء الرمز","tokens.tokenRevoked":"تم إلغاء الرمز","tokens.failedToCreate":"فشل إنشاء الرمز","tokens.failedToRevoke":"فشل إلغاء الرمز","tokens.confirmRevoke":'إلغاء الرمز "{name}"؟ لا يمكن التراجع عن هذا.',"tokens.tokenCopied":"تم نسخ الرمز إلى الحافظة","tokens.tokenCreatedCopy":"تم إنشاء الرمز — انسخه الآن!","tokens.copied":"تم النسخ","tokens.copy":"نسخ","tokens.dismiss":"إغلاق","tokens.notShownAgain":"لن يظهر هذا الرمز مرة أخرى. احفظه بأمان.","tokens.scopesCol":"النطاقات","tokens.expiresCol":"الانتهاء","tokens.lastUsed":"آخر استخدام","tokens.never":"أبداً","tokens.noTokens":"لا توجد رموز API. أنشئ واحداً للبدء.","tokens.noTokensDesc":"أنشئ رموز API للوصول البرمجي.","tokens.description":"الوصف","workflows.title":"سير العمل","workflows.instances":"المثيلات","workflows.visualEditor":"المحرر المرئي","workflows.newWorkflow":"سير عمل جديد","workflows.createWorkflow":"إنشاء سير عمل","workflows.createWorkflowDesc":"حدد سير عمل جديد بالخطوات. يتم تكوين الخطوات كـ JSON.","workflows.stepsJson":"الخطوات (JSON)","workflows.stepFormat":'كل خطوة: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"تم إنشاء سير العمل","workflows.workflowDeleted":"تم حذف سير العمل","workflows.failedToCreate":"فشل إنشاء سير العمل","workflows.failedToDelete":"فشل حذف سير العمل","workflows.confirmDelete":'حذف سير العمل "{name}"؟',"workflows.noWorkflows":"لا توجد سير عمل. أنشئ واحداً للبدء.","workflows.noWorkflowsDesc":"حدد سير عمل لأتمتة خط أنابيب المحتوى الخاص بك.","workflows.steps":"{count} خطوة","workflows.workflowStarted":"تم بدء سير العمل","workflows.editor.title":"محرر سير العمل","workflows.editor.newWorkflow":"سير عمل جديد","workflows.editor.stepName":"اسم الخطوة","workflows.editor.branchesJson":"الفروع (مصفوفة JSON)","workflows.editor.connectEdges":"صل الحواف من هذه العقدة لتحديد الفروع.","workflows.editor.configJson":"التهيئة (JSON)","workflows.editor.apply":"تطبيق","workflows.editor.deleteStep":"حذف الخطوة","workflows.editor.addStep":"إضافة خطوة","workflows.editor.invalidJson":"JSON غير صالح في التهيئة","workflows.editor.workflowSaved":"تم حفظ سير العمل","workflows.editor.failedToSave":"فشل حفظ سير العمل","audit.title":"سجل التدقيق","audit.clearFilters":"مسح الفلاتر","audit.noLogs":"لا توجد سجلات تدقيق.","audit.action":"الإجراء","audit.actor":"الفاعل","audit.resource":"المورد","audit.timestamp":"الطابع الزمني","options.title":"الخيارات","options.saved":"تم حفظ الخيارات","options.failedToSave":"فشل حفظ الخيارات","plugins.title":"الإضافات البرمجية","plugins.loaded":"{count} محمّلة","plugins.plugin":"الإضافة","plugins.runtime":"بيئة التشغيل","plugins.hooks":"الخطافات","plugins.health":"الصحة","plugins.pluginEnabled":"تم تفعيل الإضافة","plugins.pluginDisabled":"تم تعطيل الإضافة","plugins.pluginReloaded":"تم إعادة تحميل الإضافة","plugins.pluginRemoved":"تمت إزالة الإضافة","plugins.failedToEnable":"فشل تفعيل الإضافة","plugins.failedToDisable":"فشل تعطيل الإضافة","plugins.failedToReload":"فشل إعادة تحميل الإضافة","plugins.failedToRemove":"فشل إزالة الإضافة","plugins.noPlugins":"لا توجد إضافات محمّلة.","plugins.placePlugins":"ضع الإضافات في مجلد الإضافات المحدد.","plugins.confirmRemove":'إزالة الإضافة "{name}"؟ سيتم تفريغها من الذاكرة.',"plugins.autoDisabled":"تم التعطيل تلقائياً","plugins.tooManyErrors":"أخطاء كثيرة جداً","plugins.errorCount":"{count} خطأ","plugins.errorsOccurred":"حدثت أخطاء","plugins.calls":"{count} استدعاء","plugins.idle":"خامل","plugins.notFound":"الإضافة غير موجودة","plugins.notFoundMsg":"الإضافة غير موجودة.","plugins.backToPlugins":"العودة للإضافات","plugins.general":"عام","plugins.version":"الإصدار","plugins.reload":"إعادة تحميل","plugins.remove":"إزالة","plugins.errorTracking":"تتبع الأخطاء وحالة التعطيل التلقائي","plugins.healthy":"سليم","plugins.errorCountLabel":"عدد الأخطاء","plugins.lastError":"آخر خطأ","plugins.lastErrorAt":"آخر خطأ في","plugins.autoDisabledLabel":"تم التعطيل تلقائياً","plugins.permissions":"الصلاحيات","permissions.declaredFromManifest":"الصلاحيات المعلنة من بيان الإضافة","plugins.hooksTitle":"الخطافات","plugins.hooksDesc":"نقاط الخطافات المسجلة ومقاييس تنفيذها","plugins.noHooks":"لا توجد خطافات مسجلة.","plugins.totalCalls":"إجمالي الاستدعاءات","plugins.totalErrors":"إجمالي الأخطاء","plugins.totalDuration":"إجمالي المدة","plugins.noMetrics":"لا توجد مقاييس بعد","plugins.performance":"نظرة عامة على الأداء","plugins.maxMemory":"الحد الأقصى للذاكرة","plugins.timeout":"المهلة","plugins.default":"افتراضي","media.title":"الوسائط","media.files":"{count} ملف","media.searchFiles":"البحث في الملفات...","media.fileDeleted":"تم حذف الملف","media.failedToDelete":"فشل حذف الملف","media.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا الملف؟","media.date":"التاريخ","media.size":"الحجم","media.ascending":"تصاعدي","media.descending":"تنازلي","field.mediaUrl":"رابط الوسائط","field.startWriting":"ابدأ الكتابة...","field.yes":"نعم","field.no":"لا","field.relatedItemId":"معرف العنصر المرتبط","cron.title":"المهام المجدولة","cron.newCron":"مهمة مجدولة جديدة","cron.expression":"التعبير","cron.handler":"المعالج","cron.lastRun":"آخر تشغيل","cron.nextRun":"التشغيل التالي","cron.cronCreated":"تم إنشاء المهمة المجدولة","cron.cronDeleted":"تم حذف المهمة المجدولة","cron.failedToCreate":"فشل إنشاء المهمة المجدولة","cron.failedToDelete":"فشل حذف المهمة المجدولة","cron.noCrons":"لا توجد مهام مجدولة.","cron.confirmDelete":'حذف المهمة المجدولة "{name}"؟',"cron.createSchedule":"إنشاء جدول","cron.labelField":"التسمية","cron.jobType":"نوع المهمة","cron.cronExpression":"تعبير كرون (7 أجزاء)","cron.format":"الصيغة: ثانية دقيقة ساعة يوم شهر يوم_أسبوع","cron.payload":"الحمولة (JSON، اختياري)","cron.schedules":"{count} جدول","cron.schedule":"الجدول","cron.pluginCol":"الإضافة","cron.scheduleCreated":"تم إنشاء الجدول","cron.scheduleToggled":"تم تبديل الجدول","cron.scheduleDeleted":"تم حذف الجدول","cron.scheduleUpdated":"تم تحديث الجدول","cron.noCronSchedules":"لا توجد جداول.","cron.seedHint":"أنشئ واحدة أعلاه أو فعّل CRON_SEED_ENABLED للبذر الافتراضي.","cron.confirmDeleteSchedule":'حذف الجدول "{name}"؟ لا يمكن التراجع عن هذا.',"cron.scheduleNotFound":"الجدول غير موجود","cron.backToCronSchedules":"العودة لجداول المهام","cron.scheduleDetails":"تفاصيل الجدول","cron.cronExpression7":"7 أجزاء: ثانية دقيقة ساعة يوم شهر يوم_أسبوع","cron.builtIn":"مدمج","cron.executionHistory":"سجل التنفيذ","cron.recentLogs":"سجلات التنفيذ الأخيرة لهذا الجدول","cron.cleanupOld":"تنظيف القديم","cron.cleanedUp":"تم تنظيف {count} سجل قديم","cron.noExecutionLogs":"لا توجد سجلات تنفيذ بعد.","cron.success":"ناجح","cron.failedStatus":"فاشل","cron.running":"قيد التشغيل","cron.newSchedule":"جدول جديد","cron.idField":"المعرف","cron.started":"البداية","cron.finished":"النهاية","cron.duration":"المدة","cron.error":"خطأ","cron.created":"تاريخ الإنشاء","cron.updated":"تاريخ التحديث","tenants.title":"المستأجرون","tenants.newTenant":"مستأجر جديد","tenants.createTenant":"أنشئ مستأجراً جديداً لعزل البيانات.","tenants.tenantName":"اسم المستأجر","tenants.slug":"الرابط المختصر","tenants.domain":"النطاق","tenants.owner":"المالك","tenants.tenantCreated":"تم إنشاء المستأجر","tenants.tenantUpdated":"تم تحديث المستأجر","tenants.tenantDeleted":"تم حذف المستأجر","tenants.failedToCreate":"فشل إنشاء المستأجر","tenants.failedToUpdate":"فشل تحديث المستأجر","tenants.failedToDelete":"فشل حذف المستأجر","tenants.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا المستأجر؟","tenants.noTenants":"لا يوجد مستأجرون.","tenants.noTenantsDesc":"أنشئ مستأجرين لـ SaaS متعدد المستأجرين.","tenants.createForIsolation":"أنشئ مستأجراً جديداً لعزل البيانات.","tenants.cannotDeleteDefault":"لا يمكن حذف المستأجر الافتراضي","tenants.confirmDeleteMsg":"حذف هذا المستأجر؟ لن تُحذف البيانات التابعة له.","tenants.created":"تاريخ الإنشاء","rbac.title":"الأدوار والصلاحيات","rbac.roles":"الأدوار","rbac.newRole":"دور جديد","rbac.createRole":"أنشئ دوراً جديداً للتحكم في الوصول.","rbac.roleName":"اسم الدور","rbac.roleDesc":"وصف الدور","rbac.roleCreated":"تم إنشاء الدور","rbac.roleUpdated":"تم تحديث الدور","rbac.roleDeleted":"تم حذف الدور","rbac.failedToCreate":"فشل إنشاء الدور","rbac.failedToUpdate":"فشل تحديث الدور","rbac.failedToDelete":"فشل حذف الدور","rbac.confirmDelete":'حذف الدور "{name}"؟ سيؤدي هذا لإزالة جميع الصلاحيات المرتبطة.',"rbac.systemRole":"النظام","rbac.permissions":"الصلاحيات","rbac.addPermission":"إضافة صلاحية","rbac.action":"الإجراء","rbac.subject":"الموضوع","rbac.noRoles":"لا توجد أدوار.","rbac.addRoleDesc":"أضف دوراً جديداً للنظام.","rbac.updateRoleDesc":'تحديث دور "{name}".',"rbac.deleteRoleTitle":"حذف الدور","rbac.deleteRoleConfirm":'هل أنت متأكد أنك تريد حذف "{name}"؟ لا يمكن التراجع عن هذا.',"rbac.addPermissionTitle":"إضافة صلاحية","rbac.addPermissionDesc":'منح صلاحية جديدة لـ "{name}". استخدم * للبدل.',"rbac.fieldsCol":"الحقول","rbac.conditionsCol":"الشروط","rbac.fieldsOptional":"الحقول (مفصولة بفواصل، اختياري)","rbac.removePermissionTitle":"إزالة صلاحية","rbac.removePermissionDesc":"إزالة {action} على {subject}؟","rbac.noPermissions":"لا توجد صلاحيات مُعدة.","rbac.selectRole":"اختر دوراً لعرض الصلاحيات","rbac.prev":"السابق","builder.title":"مُنشئ نوع المحتوى","builder.editContentType":"تعديل نوع المحتوى","builder.createContentType":"إنشاء نوع محتوى","builder.baseConfig":"التهيئة الأساسية","builder.singularName":"الاسم المفرد","builder.pluralName":"اسم الجمع","builder.tableName":"اسم الجدول","builder.fieldsSection":"الحقول","builder.addField":"إضافة حقل","builder.preview":"معاينة","builder.save":"حفظ نوع المحتوى","builder.saving":"جاري الحفظ...","builder.saved":"تم حفظ نوع المحتوى","builder.failedToSave":"فشل حفظ نوع المحتوى","builder.confirmDeleteField":'حذف الحقل "{name}"؟',"builder.text":"نص","builder.richText":"نص منسق","builder.email":"بريد إلكتروني","builder.password":"كلمة المرور","builder.uid":"معرف فريد","builder.integer":"عدد صحيح","builder.bigInt":"عدد صحيح كبير","builder.decimal":"عشري","builder.float":"فاصلة عائمة","builder.boolean":"منطقي","builder.date":"تاريخ","builder.datetime":"تاريخ ووقت","builder.time":"وقت","builder.enumType":"تعداد","builder.jsonType":"JSON","builder.relation":"علاقة","builder.mediaType":"وسائط","builder.link":"رابط","builder.required":"مطلوب","builder.unique":"فريد","builder.privateField":"خاص","builder.immutable":"غير قابل للتعديل","builder.label":"التسمية","builder.defaultValue":"القيمة الافتراضية","builder.maxLength":"الحد الأقصى للطول","builder.minValue":"الحد الأدنى","builder.maxValue":"الحد الأقصى","builder.enumValues":"قيم التعداد (مفصولة بفواصل)","builder.relationType":"نوع العلاقة","builder.relationTarget":"الجدول الهدف","builder.foreignKey":"المفتاح الأجنبي","builder.throughTable":"جدول الوساطة","builder.draftPublish":"مسودة/نشر","builder.timestamps":"الطوابع الزمنية","builder.softDelete":"حذف ناعم","builder.slugField":"حقل الرابط المختصر","media.name":"الاسم","media.type":"النوع","media.other":"أخرى","media.uploadFailed":"فشل الرفع","media.dropFiles":"أسقط الملفات هنا، الصقها، أو {browse}","media.uploading":"جاري رفع {count} ملف...","media.done":"تم","media.failedUpload":"فشل","media.urlCopied":"تم نسخ الرابط","media.copyUrl":"نسخ الرابط","media.download":"تنزيل","media.dimensions":"الأبعاد","media.uploaded":"تاريخ الرفع","media.urlLabel":"الرابط","media.noVideoSupport":"متصفحك لا يدعم الفيديو.","media.downloadFile":"تنزيل الملف","workflows.instances.title":"مثيلات سير العمل","workflows.instances.showLogs":"عرض السجلات","workflows.instances.hideLogs":"إخفاء السجلات","workflows.instances.currentStep":"الحالي","workflows.instances.context":"السياق","workflows.instances.stepLogs":"سجلات الخطوة ({count})","workflows.instances.noStepLogs":"لا توجد سجلات خطوة.","workflows.instances.noInstances":"لا توجد مثيلات سير عمل.","workflows.instances.instanceCount":"{count} مثيل","workflows.instances.definitions":"التعريفات","workflows.instances.filterStatus":"فلتر الحالة","workflows.instances.cancelled":"تم إلغاء المثيل","workflows.editor.editStep":"تعديل الخطوة","workflows.editor.name":"الاسم","workflows.editor.type":"النوع","workflows.editor.backToList":"العودة للقائمة","workflows.editor.workflowName":"اسم سير العمل...","workflows.editor.failedToLoad":"فشل تحميل سير العمل","workflows.editor.immutableNotice":"تعريفات سير العمل غير قابلة للتعديل. أنشئ واحداً جديداً لتغيير الخطوات.","workflows.editor.untitled":"سير عمل بدون عنوان","workflows.editor.save":"حفظ","workflows.editor.saving":"جاري الحفظ...","options.noChanges":"لا توجد تغييرات","options.noOptions":"لا توجد خيارات متاحة.","options.reset":"إعادة تعيين","options.saveChanges":"حفظ التغييرات","audit.failedToLoad":"فشل تحميل سجل التدقيق. يرجى المحاولة مرة أخرى.","audit.noEntries":"لا توجد سجلات تدقيق.","audit.noEntriesDesc":"ستظهر سجلات التدقيق عند تنفيذ الإجراءات.","audit.timeCol":"الوقت","audit.subjectId":"معرف الموضوع","audit.detailCol":"التفاصيل","audit.system":"النظام","audit.from":"من","audit.to":"إلى","audit.search":"بحث","audit.clear":"مسح","audit.today":"اليوم","builder.untitled":"نوع محتوى بدون عنوان","builder.fieldCount":"{count} حقل","builder.fieldList":"الحقول","builder.protocols":"البروتوكولات","builder.systemFields":"حقول النظام","builder.system":"نظام","builder.newField":"حقل جديد","builder.addAnotherField":"إضافة حقل آخر","builder.addAField":"إضافة حقل","builder.chooseFieldType":"اختر نوع حقل لإضافته لنوع المحتوى.","builder.fieldConfiguration":"تهيئة الحقل","builder.fieldName":"اسم الحقل","builder.fieldTypeLabel":"نوع الحقل","builder.displayLabel":"تسمية العرض","builder.helpText":"نص المساعدة","builder.removeField":"إزالة الحقل","builder.removeFieldConfirm":"إزالة هذا الحقل؟","builder.noAdditionalOptions":"لا توجد خيارات إضافية لهذا النوع من الحقول.","builder.acceptedTypes":"الأنواع المقبولة","builder.maxCount":"الحد الأقصى للعدد","builder.target":"الهدف","builder.valuesComma":"القيم (مفصولة بفواصل)","builder.describeContentType":"صف نوع المحتوى هذا...","builder.contentTypeUpdated":"تم تحديث نوع المحتوى","builder.contentTypeCreated":"تم إنشاء نوع المحتوى","builder.newFieldCategory":"رقم","layout.crm":"إدارة العملاء","layout.pages":"الصفحات","layout.reusableBlocks":"الكتل","crm.dashboard":"لوحة إدارة العملاء","crm.pipeline":"خط الأنابيب","crm.contacts":"جهات الاتصال","crm.companies":"الشركات","crm.deals":"الصفقات","crm.activities":"الأنشطة","crm.notes":"الملاحظات","crm.reports":"التقارير","crm.totalCompanies":"إجمالي الشركات","crm.totalContacts":"إجمالي جهات الاتصال","crm.openDeals":"الصفقات المفتوحة","crm.wonDeals":"الصفقات الرابحة","crm.pipelineValue":"قيمة خط الأنابيب","crm.weightedValue":"القيمة المرجحة","crm.winRate":"معدل الفوز","crm.avgDealSize":"متوسط حجم الصفقة","crm.recentActivities":"أنشطة هذا الأسبوع","crm.totalActivities":"إجمالي الأنشطة","crm.leaderboard":"لوحة المتصدرين","crm.noData":"لا توجد بيانات متاحة.","crm.newDeal":"صفقة جديدة","crm.createDeal":"إنشاء صفقة","crm.dealTitle":"العنوان","crm.dealTitlePlaceholder":"أدخل عنوان الصفقة...","crm.amount":"المبلغ","crm.probability":"الاحتمالية","crm.stage":"المرحلة","crm.advanceStage":"التقدم للمرحلة التالية","crm.totalValue":"القيمة الإجمالية","crm.dealCreated":"تم إنشاء الصفقة","crm.failedToCreateDeal":"فشل إنشاء الصفقة","crm.dealStageUpdated":"تم تحديث مرحلة الصفقة","crm.failedToUpdateStage":"فشل تحديث المرحلة","crm.titleRequired":"العنوان مطلوب","crm.newContact":"جهة اتصال جديدة","crm.editContact":"تعديل جهة الاتصال","crm.contact":"جهة اتصال","crm.name":"الاسم","crm.email":"البريد الإلكتروني","crm.phone":"الهاتف","crm.company":"الشركة","crm.source":"المصدر","crm.lifecycleStage":"مرحلة دورة الحياة","crm.noContacts":"لا توجد جهات اتصال.","crm.firstName":"الاسم الأول","crm.lastName":"اسم العائلة","crm.jobTitle":"المسمى الوظيفي","crm.newCompany":"شركة جديدة","crm.editCompany":"تعديل الشركة","crm.companyName":"اسم الشركة","crm.industry":"الصناعة","crm.size":"الحجم","crm.website":"الموقع الإلكتروني","crm.city":"المدينة","crm.country":"الدولة","crm.noCompanies":"لا توجد شركات.","crm.deal":"صفقة","crm.editDeal":"تعديل الصفقة","crm.closeDate":"تاريخ الإغلاق","crm.lossReason":"سبب الخسارة","crm.noDeals":"لا توجد صفقات.","crm.dealInfo":"معلومات الصفقة","crm.newActivity":"نشاط جديد","crm.editActivity":"تعديل النشاط","crm.activity":"النشاط","crm.type":"النوع","crm.subject":"الموضوع","crm.content":"المحتوى","crm.date":"التاريخ","crm.duration":"المدة","crm.outcome":"النتيجة","crm.noActivities":"لا توجد أنشطة.","crm.newNote":"ملاحظة جديدة","crm.editNote":"تعديل الملاحظة","crm.note":"ملاحظة","crm.relatedTo":"مرتبط بـ","crm.pinned":"مثبّت","crm.createdAt":"تاريخ الإنشاء","crm.noNotes":"لا توجد ملاحظات.","crm.contentRequired":"المحتوى مطلوب","crm.relatedContactId":"معرف جهة الاتصال المرتبطة","crm.relatedCompanyId":"معرف الشركة المرتبطة","crm.relatedDealId":"معرف الصفقة المرتبطة","crm.contactInfo":"معلومات جهة الاتصال","crm.timeline":"الجدول الزمني","crm.noTimeline":"لا توجد أحداث في الجدول الزمني.","crm.addNote":"إضافة ملاحظة","crm.notePlaceholder":"اكتب ملاحظة...","crm.lifecycleUpdated":"تم تحديث مرحلة دورة الحياة","crm.failedToUpdateLifecycle":"فشل تحديث مرحلة دورة الحياة","crm.companyInfo":"معلومات الشركة","crm.funnelReport":"تقرير القمع","crm.activityReport":"تقرير الأنشطة","crm.conversionRate":"التحويل","crm.byType":"حسب النوع","crm.byOutcome":"حسب النتيجة","pages.title":"الصفحات","pages.newPage":"صفحة جديدة","pages.editPage":"تعديل الصفحة","pages.pageDeleted":"تم حذف الصفحة","pages.pageCreated":"تم إنشاء الصفحة","pages.pageUpdated":"تم تحديث الصفحة","pages.failedToDelete":"فشل حذف الصفحة","pages.failedToCreate":"فشل إنشاء الصفحة","pages.failedToUpdate":"فشل تحديث الصفحة","pages.statusUpdated":"تم تحديث حالة الصفحة","pages.failedToUpdateStatus":"فشل تحديث الحالة","pages.confirmDelete":"هل أنت متأكد أنك تريد حذف هذه الصفحة؟","pages.noPages":"لا توجد صفحات.","pages.noPagesDesc":"أنشئ أول صفحة لبدء بناء موقعك.","pages.noBlocks":"لا توجد كتل قابلة لإعادة الاستخدام.","pages.noBlocksDesc":"أنشئ كتل قابلة لإعادة الاستخدام لاستخدامها عبر صفحاتك.","pages.publish":"نشر","pages.unpublish":"إلغاء النشر","pages.preview":"معاينة","pages.slug":"الرابط المختصر","pages.template":"القالب","pages.createdAt":"تاريخ الإنشاء","pages.basicInfo":"معلومات أساسية","pages.titleLabel":"العنوان","pages.titlePlaceholder":"أدخل عنوان الصفحة...","pages.coverImage":"صورة الغلاف","pages.metaTitle":"عنوان Meta","pages.metaDescription":"وصف Meta","pages.ogImage":"صورة OG","pages.content":"المحتوى","pages.blockMode":"الكتل","pages.saveDraft":"حفظ كمسودة","pages.writeContent":"اكتب محتوى صفحتك...","pages.addBlock":"إضافة كتلة","pages.chooseBlock":"اختر نوع كتلة","pages.reusableBlocks":"الكتل القابلة لإعادة الاستخدام","pages.createReusable":"إنشاء كتلة قابلة لإعادة الاستخدام","pages.editReusable":"تعديل كتلة قابلة لإعادة الاستخدام","pages.rbName":"الاسم","pages.rbType":"نوع الكتلة","pages.rbDescription":"الوصف","pages.rbContent":"المحتوى","command.search":"بحث...","command.placeholder":"اكتب أمراً أو ابحث...","command.noResults":"لا توجد نتائج.","command.actions":"الإجراءات","command.switchToLight":"التبديل للوضع الفاتح","command.switchToDark":"التبديل للوضع الداكن","layout.ecommerce":"التجارة الإلكترونية","layout.products":"المنتجات","layout.productCategories":"تصنيفات المنتجات","layout.orders":"الطلبات","layout.finance":"المالية","layout.currencies":"العملات","layout.wallets":"المحافظ","layout.paymentChannels":"قنوات الدفع","layout.productComments":"المراجعات","layout.coupons":"الكوبونات","layout.shippingTemplates":"قوالب الشحن","products.title":"المنتجات","products.newProduct":"منتج جديد","products.editProduct":"تعديل المنتج","products.productTitle":"عنوان المنتج","products.price":"السعر","products.originalPrice":"السعر الأصلي","products.stock":"المخزون","products.sales":"المبيعات","products.coverUrl":"رابط الغلاف","products.description":"الوصف","products.content":"المحتوى","products.slug":"الرابط المختصر","products.status":"الحالة","products.category":"التصنيف","products.unit":"الوحدة","products.minPurchase":"الحد الأدنى للشراء","products.maxPurchase":"الحد الأقصى للشراء","products.sortOrder":"ترتيب الفرز","products.metaTitle":"عنوان Meta","products.metaDescription":"وصف Meta","products.productCreated":"تم إنشاء المنتج","products.productUpdated":"تم تحديث المنتج","products.productDeleted":"تم حذف المنتج","products.batchDeleted":"تم حذف {{count}} منتج","products.batchSuccess":"تم تحديث {{count}} منتج","products.batchActivate":"تفعيل","products.batchDeactivate":"إلغاء التفعيل","products.failedToCreate":"فشل إنشاء المنتج","products.failedToUpdate":"فشل تحديث المنتج","products.failedToDelete":"فشل حذف المنتج","products.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا المنتج؟","products.confirmBatchDelete":"هل أنت متأكد من حذف {{count}} منتج؟","products.noProducts":"لا توجد منتجات بعد","products.noProductsDesc":"أنشئ أول منتج لبدء البيع.","products.allStatus":"جميع الحالات","products.searchPlaceholder":"البحث عن منتج...","products.active":"نشط","products.draft":"مسودة","products.archived":"مؤرشف","products.general":"عام","products.media":"وسائط","products.pricing":"التسعير","products.purchaseSettings":"إعدادات الشراء","products.summary":"ملخص","products.phTitle":"أدخل عنوان المنتج...","products.phSummary":"وصف مختصر للمنتج...","products.images":"الصور","products.cover":"الغلاف","products.dropImages":"اسحب الصور هنا، أو الصقها، أو انقر للتحميل","productCategories.categoryName":"اسم التصنيف","productCategories.newCategory":"تصنيف جديد","productCategories.createCategory":"إنشاء تصنيف","productCategories.editCategory":"تعديل التصنيف","productCategories.optionalDesc":"الوصف (اختياري)","productCategories.parent":"التصنيف الأب","productCategories.noParent":"بدون أب","productCategories.sortOrder":"ترتيب الفرز","productCategories.slug":"الرابط المختصر","productCategories.noCategories":"لا توجد تصنيفات بعد","productCategories.noCategoriesDesc":"أنشئ أول تصنيف منتجات لتنظيم منتجاتك.","productCategories.categoryCreated":"تم إنشاء التصنيف","productCategories.categoryUpdated":"تم تحديث التصنيف","productCategories.categoryDeleted":"تم حذف التصنيف","productCategories.failedToCreate":"فشل إنشاء التصنيف","productCategories.failedToUpdate":"فشل تحديث التصنيف","productCategories.failedToDelete":"فشل حذف التصنيف","productCategories.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا التصنيف؟","productCategories.confirmDeleteTitle":"حذف الفئة","productCategories.cannotDeleteHasChildren":"لا يمكن حذف هذه الفئة لأنها تحتوي على {count} فئة فرعية. يرجى نقلها أو حذفها أولاً.","productCategories.treeTitle":"الفئات","productCategories.selectCategory":"اختر فئة لعرض التفاصيل","productCategories.addChild":"إضافة فرعي","orders.title":"الطلبات","orders.orderNo":"رقم الطلب","orders.buyer":"المشتري","orders.total":"الإجمالي","orders.status":"الحالة","orders.items":"العناصر","orders.remark":"ملاحظة","orders.adminRemark":"ملاحظة المسؤول","orders.createdAt":"تاريخ الإنشاء","orders.actions":"الإجراءات","orders.allStatus":"جميع الحالات","orders.searchPlaceholder":"البحث برقم الطلب، اسم المشتري...","orders.pending":"قيد الانتظار","orders.paid":"مدفوع","orders.shipped":"تم الشحن","orders.completed":"مكتمل","orders.cancelled":"ملغى","orders.refunded":"مسترد","orders.confirmPay":"تأكيد الدفع؟","orders.orderPaid":"تم تعليم الطلب كمدفوع","orders.confirmShip":"شحن هذا الطلب؟","orders.orderShipped":"تم شحن الطلب","orders.confirmCancel":"إلغاء هذا الطلب؟","orders.orderCancelled":"تم إلغاء الطلب","orders.confirmRefund":"استرداد هذا الطلب؟","orders.orderRefunded":"تم استرداد الطلب","orders.failedToPay":"فشل التعليم كمدفوع","orders.failedToShip":"فشل الشحن","orders.failedToCancel":"فشل الإلغاء","orders.failedToRefund":"فشل الاسترداد","orders.noOrders":"لا توجد طلبات بعد","orders.noOrdersDesc":"ستظهر الطلبات هنا عند قيام العملاء بالشراء.","orders.trackingNo":"رقم التتبع","orders.carrier":"شركة الشحن","orders.shipInfo":"معلومات الشحن","orders.buyerInfo":"معلومات المشتري","orders.shippingAddress":"عنوان الشحن","orders.orderDetail":"تفاصيل الطلب","orders.stats.totalOrders":"إجمالي الطلبات","orders.stats.totalRevenue":"إجمالي الإيرادات","orders.stats.pending":"قيد الانتظار","orders.stats.completed":"مكتمل","orders.stats.todayOrders":"طلبات اليوم","orders.stats.todayRevenue":"إيرادات اليوم","payments.title":"قنوات الدفع","payments.newChannel":"قناة جديدة","payments.provider":"مزود الخدمة","payments.name":"اسم القناة","payments.mode":"الوضع","payments.active":"نشط","payments.live":"مباشر","payments.test":"اختبار","payments.credentials":"بيانات الاعتماد","payments.webhookSecret":"سر الويب هوك","payments.settings":"الإعدادات","payments.channelCreated":"تم إنشاء قناة الدفع","payments.channelUpdated":"تم تحديث قناة الدفع","payments.channelDeleted":"تم حذف قناة الدفع","payments.failedToCreate":"فشل إنشاء قناة الدفع","payments.failedToUpdate":"فشل تحديث قناة الدفع","payments.failedToDelete":"فشل حذف قناة الدفع","payments.confirmDelete":"حذف قناة الدفع هذه؟","payments.noChannels":"لا توجد قنوات دفع","payments.noChannelsDesc":"أضف قناة دفع لبدء قبول المدفوعات.","payments.selectProvider":"اختر مزود الدفع...","payments.testMode":"وضع الاختبار (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"معرف التاجر","payments.fPrivateKey":"مفتاح RSA الخاص","payments.fSerialNo":"الرقم التسلسلي للشهادة","payments.fWebhookSecret":"سر توقيع Webhook","payments.fAlipayPublicKey":"مفتاح Alipay العام","payments.fPlatformCert":"شهادة المنصة (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"رابط الإشعار","payments.phSk":"sk_live_... أو sk_test_...","payments.phRsaKey":"الصق مفتاح RSA الخاص (PEM أو Base64)","payments.phUrl":"https://...","payments.editChannel":"تحرير القناة","payments.leaveBlankToKeep":"اترك فارغاً للإبقاء على الحالي","layout.paymentOrders":"أوامر الدفع","paymentOrders.title":"أوامر الدفع","paymentOrders.orderId":"الطلب","paymentOrders.title_col":"العنوان","paymentOrders.amount":"المبلغ","paymentOrders.provider":"مزود الدفع","paymentOrders.noOrders":"لا توجد أوامر دفع","paymentOrders.noOrdersDesc":"ستظهر أوامر الدفع هنا عندما يقوم العملاء بالدفع.","paymentOrders.refund":"استرداد","paymentOrders.refundTitle":"استرداد الأموال","paymentOrders.refundOrder":"استرداد الطلب","paymentOrders.refundAmount":"مبلغ الاسترداد","paymentOrders.refundReason":"السبب","paymentOrders.refundSuccess":"تم تقديم الاسترداد","paymentOrders.refundFailed":"فشل الاسترداد","layout.paymentTransactions":"معاملات الدفع","paymentTransactions.title":"معاملات الدفع","paymentTransactions.orderId":"الطلب","paymentTransactions.type":"النوع","paymentTransactions.amount":"المبلغ","paymentTransactions.providerTxId":"معرف معاملة المزود","paymentTransactions.noTransactions":"لا توجد معاملات","paymentTransactions.noTransactionsDesc":"ستظهر المعاملات هنا عند حدوث أحداث الدفع.","currencies.title":"العملات","currencies.newCurrency":"عملة جديدة","currencies.code":"الرمز","currencies.name":"الاسم","currencies.decimals":"المنازل العشرية","currencies.active":"نشط","currencies.currencyCreated":"تم إنشاء العملة","currencies.currencyUpdated":"تم تحديث العملة","currencies.failedToCreate":"فشل إنشاء العملة","currencies.failedToUpdate":"فشل تحديث العملة","currencies.noCurrencies":"لا توجد عملات","currencies.noCurrenciesDesc":"أضف عملة لتفعيل دعم العملات المتعددة.","wallets.title":"المحافظ","wallets.user":"المستخدم","wallets.currency":"العملة","wallets.balance":"الرصيد","wallets.frozen":"مجمّد","wallets.credit":"إيداع","wallets.debit":"سحب","wallets.transactions":"المعاملات","wallets.amount":"المبلغ","wallets.type":"النوع","wallets.reference":"المرجع","wallets.creditTitle":"إيداع في المحفظة","wallets.debitTitle":"سحب من المحفظة","wallets.userId":"معرف المستخدم","wallets.remark":"ملاحظة","wallets.creditSuccess":"تم الإيداع في المحفظة","wallets.debitSuccess":"تم السحب من المحفظة","wallets.failedToCredit":"فشل الإيداع في المحفظة","wallets.failedToDebit":"فشل السحب من المحفظة","wallets.noWallets":"لا توجد محافظ","wallets.noWalletsDesc":"تُنشأ المحافظ عند تلقي المستخدمين أول معاملة.","wallets.noTransactions":"لا توجد معاملات بعد.","adminLogin.title":"لوحة الإدارة","adminLogin.subtitle":"سجل الدخول باستخدام بيانات المسؤول","adminLogin.email":"البريد الإلكتروني","adminLogin.password":"كلمة المرور","adminLogin.submit":"تسجيل الدخول","adminLogin.loading":"جاري تسجيل الدخول...","adminLogin.error":"بريد إلكتروني أو كلمة مرور غير صحيحة","adminLogin.footer":"RaisFast Admin — للموظفين المصرح لهم فقط","adminLogin.sessionExpired":"انتهت جلستك. يرجى تسجيل الدخول مرة أخرى.","setup.title":"معالج الإعداد","setup.subtitle":"لنُعدّ مثيل RaisFast الخاص بك","setup.failedToFetch":"فشل جلب حالة النظام","setup.step.check":"فحص","setup.step.database":"قاعدة البيانات","setup.step.admin":"المسؤول","setup.check.title":"فحص النظام","setup.check.desc":"جاري التحقق من جاهزية البيئة","setup.check.database":"قاعدة البيانات","setup.check.connected":"متصل","setup.check.disconnected":"غير متصل","setup.check.storage":"تخزين الملفات","setup.check.extensions":"الامتدادات","setup.check.writable":"قابل للكتابة","setup.check.notWritable":"غير قابل للكتابة","setup.check.adminUser":"مستخدم المسؤول","setup.check.adminExists":"موجود","setup.check.adminNeeded":"لم يتم الإنشاء","setup.check.next":"التالي: تهيئة قاعدة البيانات","setup.check.nextAdmin":"التالي: إنشاء حساب المسؤول","setup.database.title":"تهيئة قاعدة البيانات","setup.database.desc":"اتصل بقاعدة البيانات الخاصة بك","setup.database.path":"مسار ملف قاعدة البيانات","setup.database.pathHint":"نسبي لمجلد العمل","setup.database.connectionString":"سلسلة الاتصال","setup.database.manualInput":"إدخال يدوي","setup.database.url":"رابط قاعدة البيانات","setup.database.urlHint":"الصق رابط الاتصال من مزود الخدمة (مثل Supabase, Neon, PlanetScale)","setup.database.host":"المضيف","setup.database.port":"المنفذ","setup.database.username":"اسم المستخدم","setup.database.password":"كلمة المرور","setup.database.name":"اسم قاعدة البيانات","setup.database.testConnection":"اختبار الاتصال","setup.database.testing":"جاري الاختبار...","setup.database.testSuccess":"نجح الاتصال!","setup.database.testFailed":"فشل الاتصال","setup.database.saveAndRestart":"حفظ وإعادة التشغيل","setup.database.saving":"جاري الحفظ...","setup.database.connectionError":"خطأ في الاتصال","setup.database.failedToSave":"فشل حفظ تهيئة قاعدة البيانات","setup.restarting.title":"جاري إعادة التشغيل...","setup.restarting.desc":"يقوم الخادم بإعادة التشغيل بتهيئة قاعدة البيانات الجديدة. يرجى الانتظار.","setup.admin.title":"إنشاء حساب المسؤول","setup.admin.desc":"أنشئ أول مسؤول لمثيلك","setup.admin.username":"اسم المستخدم","setup.admin.email":"البريد الإلكتروني","setup.admin.password":"كلمة المرور","setup.admin.passwordHint":"8 أحرف على الأقل، يجب أن تحتوي على حروف كبيرة وصغيرة وأرقام","setup.admin.mustContainUppercase":"يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل","setup.admin.mustContainLowercase":"يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل","setup.admin.mustContainDigit":"يجب أن تحتوي كلمة المرور على رقم واحد على الأقل","setup.admin.passwordsNotMatch":"كلمات المرور غير متطابقة","setup.admin.confirmPassword":"تأكيد كلمة المرور","setup.admin.create":"إنشاء المسؤول والدخول","setup.admin.creating":"جاري الإنشاء...","setup.adminCreated":"تم إنشاء حساب المسؤول بنجاح!","setup.failedToCreateAdmin":"فشل إنشاء حساب المسؤول","setup.done.title":"تم الكل!","setup.done.desc":"مثيل RaisFast الخاص بك جاهز. حساب المسؤول موجود بالفعل.","setup.done.goToLogin":"الذهاب لتسجيل الدخول","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"التكامل","layout.channels":"القنوات","layout.receipts":"الإيصالات","layout.apiClients":"عملاء API","common.reset":"إعادة تعيين","common.close":"إغلاق","integration.newChannel":"قناة جديدة","integration.editChannel":"تعديل القناة","integration.channelKey":"مفتاح القناة","integration.displayName":"اسم العرض","integration.provider":"المزوّد","integration.mode":"الوضع","integration.transport":"النقل","integration.framing":"التأطير","integration.endpoint":"نقطة النهاية","integration.verifyKind":"التحقق","integration.verifyConfig":"إعدادات التحقق (JSON)","integration.credentials":"بيانات الاعتماد (JSON)","integration.credentialsKeepHint":"اتركه فارغًا للإبقاء على بيانات الاعتماد المختومة","integration.mapping":"التعيين (JSONPath)","integration.pullConfig":"إعدادات السحب (JSON)","integration.streamConfig":"إعدادات البث (JSON)","integration.targetType":"نوع المحتوى الهدف","integration.routeExtra":"امتداد التوجيه (JSON)","integration.redeliveryMax":"أقصى إعادات تسليم","integration.stack":"الحزمة","integration.noChannels":"لا توجد قنوات تكامل","integration.noChannelsDesc":"أضف قناة لبدء استقبال webhooks والبث والاستطلاع الواردة.","integration.channelCreated":"تم إنشاء القناة","integration.channelUpdated":"تم تحديث القناة","integration.channelDeleted":"تم حذف القناة","integration.failedToCreate":"فشل الإنشاء","integration.failedToUpdate":"فشل التحديث","integration.failedToDelete":"فشل الحذف","integration.failedToTest":"فشل الاختبار","integration.confirmDeleteChannel":'حذف القناة "{key}"؟ تبقى الإيصالات للتدقيق.',"integration.testMapping":"اختبار التعيين","integration.sampleBody":"نص طلب نموذجي","integration.preview":"معاينة الظرف المُطبَّع","integration.runTest":"تشغيل","integration.hasCredentials":"بيانات الاعتماد مختومة في الخزنة","integration.allChannels":"كل القنوات","integration.allStatuses":"كل الحالات","integration.traceIdFilter":"تصفية بمعرف التتبع…","integration.noReceipts":"لا توجد إيصالات","integration.noReceiptsDesc":"ستظهر التسليمات الواردة هنا مع التتبع الكامل.","integration.receivedAt":"وقت الاستلام","integration.attempts":"المحاولات","integration.nextRetryAt":"إعادة المحاولة التالية","integration.noSteps":"لا خطوات مسجلة","integration.pending":"قيد الانتظار","integration.receiptInfo":"الإيصال","integration.trace":"التتبع","integration.complete":"مكتمل","integration.firstPass":"التمريرة الأولى","integration.asyncChain":"السلسلة غير المتزامنة","integration.envelopeSnapshot":"لقطة الظرف","integration.fullSteps":"الخط الزمني الكامل للخطوات","integration.egressCalls":"المكالمات الصادرة","integration.noEgress":"لا مكالمات صادرة","integration.noEgressDesc":"ستظهر هنا المكالمات الصادرة التي أطلقها هذا الإيصال.","integration.replayed":"تمت الإعادة","integration.dryRunDone":"اكتمل التشغيل التجريبي — التقرير في التتبع","integration.failedToReplay":"فشلت الإعادة","integration.replay":"إعادة","integration.dryRunReplay":"إعادة تجريبية","integration.replayConfirmTitle":"إعادة تشغيل هذا الإيصال؟","integration.replayConfirmDesc":"تُعاد مرحلة التوجيه من لقطة الظرف المخزنة (upsert عبر external_id).","integration.receiptNotFound":"الإيصال غير موجود","integration.newClient":"عميل API جديد","integration.editClient":"تعديل عميل API","integration.clientKey":"مفتاح العميل","integration.baseUrl":"العنوان الأساسي","integration.authConfig":"إعدادات المصادقة (JSON)","integration.rateLimit":"حد المعدل (JSON)","integration.ops":"العمليات (JSON)","integration.opsCount":"العمليات","integration.noClients":"لا يوجد عملاء API","integration.noClientsDesc":"أضف عميل API تصريحيًا للمكالمات الصادرة.","integration.clientCreated":"تم إنشاء عميل API","integration.clientUpdated":"تم تحديث عميل API","integration.clientDeleted":"تم حذف عميل API","integration.confirmDeleteClient":'حذف عميل API "{key}"؟',"integration.testCall":"مكالمة اختبار","integration.selectOp":"اختر عملية","integration.input":"المدخل (JSON)","integration.result":"النتيجة","integration.allClients":"كل العملاء","integration.egressLog":"سجل الصادر","integration.latency":"زمن الاستجابة","integration.createdAt":"وقت الإنشاء","integration.basicInfo":"أساسي","integration.trustSection":"الثقة (L0)","integration.normalizeSection":"التطبيع (L2)","integration.routingSection":"التوجيه والموثوقية (L3/L4)","integration.presetTitle":"البدء من قالب","integration.presetPlaceholder":"اختر تكوينًا مجربًا…","integration.presetHint":"يملأ النموذج بالكامل — عدّل المفاتيح والأسرار ونوع المحتوى الهدف بعدها. أمثلة من تكاملات حقيقية (GitHub / Feishu / DingTalk).","integration.presetApplied":"تم تطبيق القالب — راجعه وعدّله","integration.jsonInvalid":"JSON غير صالح","integration.insertExample":"إدراج مثال","integration.presetGeneric":"Webhook عام (بدون تحقق)","integration.presetGenericDesc":"push بسيط + تعيين JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + تحقق توقيع hmac-sha256","integration.presetGithub":"Webhook لـ GitHub","integration.presetGithubDesc":"x-hub-signature-256، تكرار عبر delivery GUID","integration.presetShopify":"Webhook لـ Shopify","integration.presetShopifyDesc":"HMAC بـ base64، تكرار عبر webhook-id","integration.presetDingtalk":"بوت DingTalk Stream","integration.presetDingtalkDesc":"بث ws + تأطير dispatch + pre_connect","integration.presetFeishu":"بوت Feishu (اتصال طويل)","integration.presetFeishuDesc":"بث ws + pb-frame + مصافحة oauth","integration.presetPull":"استطلاع HTTP (مؤشر)","integration.presetPullDesc":"pull + ترقيم since_id + نقطة تفتيش","integration.presetImap":"صندوق IMAP (أصلي)","integration.presetImapDesc":"pull + imap + mime، دلالة mark-read، مع IDLE"},zc={en:LC,zh:jC,ja:_C,ko:zC,es:BC,pt:VC,de:WC,fr:qC,ar:HC},$C=["ar"];function KC(t){return $C.includes(t)}const mn=ml()(fl(t=>({locale:"en",setLocale:e=>t({locale:e})}),{name:"i18n-locale"}));function no(){const t=mn(n=>n.locale),e=zc[t];function o(n,r){let s=e[n]??zc.en[n]??n;if(r)for(const[a,i]of Object.entries(r))s=s.replace(`{${a}}`,String(i));return s}return{t:o,locale:t}}function Yp(){const t=mn(e=>e.locale);return KC(t)?"rtl":"ltr"}var Bc=1,JC=.9,GC=.8,YC=.17,ba=.1,ya=.999,QC=.9999,XC=.99,ZC=/[\\\/_+.#"@\[\(\{&]/,eT=/[\\\/_+.#"@\[\(\{&]/g,tT=/[\s-]/,Qp=/[\s-]/g;function di(t,e,o,n,r,s,a){if(s===e.length)return r===t.length?Bc:XC;var i=`${r},${s}`;if(a[i]!==void 0)return a[i];for(var m=n.charAt(s),d=o.indexOf(m,r),c=0,p,h,y,g;d>=0;)p=di(t,e,o,n,d+1,s+1,a),p>c&&(d===r?p*=Bc:ZC.test(t.charAt(d-1))?(p*=GC,y=t.slice(r,d-1).match(eT),y&&r>0&&(p*=Math.pow(ya,y.length))):tT.test(t.charAt(d-1))?(p*=JC,g=t.slice(r,d-1).match(Qp),g&&r>0&&(p*=Math.pow(ya,g.length))):(p*=YC,r>0&&(p*=Math.pow(ya,d-r))),t.charAt(d)!==e.charAt(s)&&(p*=QC)),(pp&&(p=h*ba)),p>c&&(c=p),d=o.indexOf(m,d+1);return a[i]=c,c}function Vc(t){return t.toLowerCase().replace(Qp," ")}function oT(t,e,o){return t=o&&o.length>0?`${t+" "+o.join(" ")}`:t,di(t,e,Vc(t),Vc(e),0,0,{})}function Oo(t,e,{checkForDefaultPrevented:o=!0}={}){return function(r){if(t==null||t(r),o===!1||!r.defaultPrevented)return e==null?void 0:e(r)}}function Wc(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function Uo(...t){return e=>{let o=!1;const n=t.map(r=>{const s=Wc(r,e);return!o&&typeof s=="function"&&(o=!0),s});if(o)return()=>{for(let r=0;r{const{children:a,...i}=s,m=l.useMemo(()=>i,Object.values(i));return u.jsx(o.Provider,{value:m,children:a})};n.displayName=t+"Provider";function r(s){const a=l.useContext(o);if(a)return a;if(e!==void 0)return e;throw new Error(`\`${s}\` must be used within \`${t}\``)}return[n,r]}function rT(t,e=[]){let o=[];function n(s,a){const i=l.createContext(a),m=o.length;o=[...o,a];const d=p=>{var w;const{scope:h,children:y,...g}=p,b=((w=h==null?void 0:h[t])==null?void 0:w[m])||i,f=l.useMemo(()=>g,Object.values(g));return u.jsx(b.Provider,{value:f,children:y})};d.displayName=s+"Provider";function c(p,h){var b;const y=((b=h==null?void 0:h[t])==null?void 0:b[m])||i,g=l.useContext(y);if(g)return g;if(a!==void 0)return a;throw new Error(`\`${p}\` must be used within \`${s}\``)}return[d,c]}const r=()=>{const s=o.map(a=>l.createContext(a));return function(i){const m=(i==null?void 0:i[t])||s;return l.useMemo(()=>({[`__scope${t}`]:{...i,[t]:m}}),[i,m])}};return r.scopeName=t,[n,sT(r,...e)]}function sT(...t){const e=t[0];if(t.length===1)return e;const o=()=>{const n=t.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(s){const a=n.reduce((i,{useScope:m,scopeName:d})=>{const p=m(s)[`__scope${d}`];return{...i,...p}},{});return l.useMemo(()=>({[`__scope${e.scopeName}`]:a}),[a])}};return o.scopeName=e.scopeName,o}var yr=globalThis!=null&&globalThis.document?l.useLayoutEffect:()=>{},aT=Ds[" useId ".trim().toString()]||(()=>{}),iT=0;function co(t){const[e,o]=l.useState(aT());return yr(()=>{o(n=>n??String(iT++))},[t]),e?`radix-${e}`:""}var lT=Ds[" useInsertionEffect ".trim().toString()]||yr;function cT({prop:t,defaultProp:e,onChange:o=()=>{},caller:n}){const[r,s,a]=dT({defaultProp:e,onChange:o}),i=t!==void 0,m=i?t:r;{const c=l.useRef(t!==void 0);l.useEffect(()=>{const p=c.current;p!==i&&console.warn(`${n} is changing from ${p?"controlled":"uncontrolled"} to ${i?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),c.current=i},[i,n])}const d=l.useCallback(c=>{var p;if(i){const h=uT(c)?c(t):c;h!==t&&((p=a.current)==null||p.call(a,h))}else s(c)},[i,t,s,a]);return[m,d]}function dT({defaultProp:t,onChange:e}){const[o,n]=l.useState(t),r=l.useRef(o),s=l.useRef(e);return lT(()=>{s.current=e},[e]),l.useEffect(()=>{var a;r.current!==o&&((a=s.current)==null||a.call(s,o),r.current=o)},[o,r]),[o,n,s]}function uT(t){return typeof t=="function"}function Or(t){const e=pT(t),o=l.forwardRef((n,r)=>{const{children:s,...a}=n,i=l.Children.toArray(s),m=i.find(fT);if(m){const d=m.props.children,c=i.map(p=>p===m?l.Children.count(d)>1?l.Children.only(null):l.isValidElement(d)?d.props.children:null:p);return u.jsx(e,{...a,ref:r,children:l.isValidElement(d)?l.cloneElement(d,void 0,c):null})}return u.jsx(e,{...a,ref:r,children:s})});return o.displayName=`${t}.Slot`,o}function pT(t){const e=l.forwardRef((o,n)=>{const{children:r,...s}=o;if(l.isValidElement(r)){const a=gT(r),i=hT(s,r.props);return r.type!==l.Fragment&&(i.ref=n?Uo(n,a):a),l.cloneElement(r,i)}return l.Children.count(r)>1?l.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var mT=Symbol("radix.slottable");function fT(t){return l.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===mT}function hT(t,e){const o={...e};for(const n in e){const r=t[n],s=e[n];/^on[A-Z]/.test(n)?r&&s?o[n]=(...i)=>{const m=s(...i);return r(...i),m}:r&&(o[n]=r):n==="style"?o[n]={...r,...s}:n==="className"&&(o[n]=[r,s].filter(Boolean).join(" "))}return{...t,...o}}function gT(t){var n,r;let e=(n=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:n.get,o=e&&"isReactWarning"in e&&e.isReactWarning;return o?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var bT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Xp=bT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{});function yT(t,e){t&&_t.flushSync(()=>t.dispatchEvent(e))}function wr(t){const e=l.useRef(t);return l.useEffect(()=>{e.current=t}),l.useMemo(()=>(...o)=>{var n;return(n=e.current)==null?void 0:n.call(e,...o)},[])}function wT(t,e=globalThis==null?void 0:globalThis.document){const o=wr(t);l.useEffect(()=>{const n=r=>{r.key==="Escape"&&o(r)};return e.addEventListener("keydown",n,{capture:!0}),()=>e.removeEventListener("keydown",n,{capture:!0})},[o,e])}var vT="DismissableLayer",ui="dismissableLayer.update",CT="dismissableLayer.pointerDownOutside",TT="dismissableLayer.focusOutside",qc,Zp=l.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),em=l.forwardRef((t,e)=>{const{disableOutsidePointerEvents:o=!1,onEscapeKeyDown:n,onPointerDownOutside:r,onFocusOutside:s,onInteractOutside:a,onDismiss:i,...m}=t,d=l.useContext(Zp),[c,p]=l.useState(null),h=(c==null?void 0:c.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=l.useState({}),g=vn(e,P=>p(P)),b=Array.from(d.layers),[f]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),w=b.indexOf(f),T=c?b.indexOf(c):-1,v=d.layersWithOutsidePointerEventsDisabled.size>0,C=T>=w,S=xT(P=>{const D=P.target,I=[...d.branches].some(N=>N.contains(D));!C||I||(r==null||r(P),a==null||a(P),P.defaultPrevented||i==null||i())},h),k=DT(P=>{const D=P.target;[...d.branches].some(N=>N.contains(D))||(s==null||s(P),a==null||a(P),P.defaultPrevented||i==null||i())},h);return wT(P=>{T===d.layers.size-1&&(n==null||n(P),!P.defaultPrevented&&i&&(P.preventDefault(),i()))},h),l.useEffect(()=>{if(c)return o&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(qc=h.body.style.pointerEvents,h.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(c)),d.layers.add(c),Hc(),()=>{o&&d.layersWithOutsidePointerEventsDisabled.size===1&&(h.body.style.pointerEvents=qc)}},[c,h,o,d]),l.useEffect(()=>()=>{c&&(d.layers.delete(c),d.layersWithOutsidePointerEventsDisabled.delete(c),Hc())},[c,d]),l.useEffect(()=>{const P=()=>y({});return document.addEventListener(ui,P),()=>document.removeEventListener(ui,P)},[]),u.jsx(Xp.div,{...m,ref:g,style:{pointerEvents:v?C?"auto":"none":void 0,...t.style},onFocusCapture:Oo(t.onFocusCapture,k.onFocusCapture),onBlurCapture:Oo(t.onBlurCapture,k.onBlurCapture),onPointerDownCapture:Oo(t.onPointerDownCapture,S.onPointerDownCapture)})});em.displayName=vT;var kT="DismissableLayerBranch",ST=l.forwardRef((t,e)=>{const o=l.useContext(Zp),n=l.useRef(null),r=vn(e,n);return l.useEffect(()=>{const s=n.current;if(s)return o.branches.add(s),()=>{o.branches.delete(s)}},[o.branches]),u.jsx(Xp.div,{...t,ref:r})});ST.displayName=kT;function xT(t,e=globalThis==null?void 0:globalThis.document){const o=wr(t),n=l.useRef(!1),r=l.useRef(()=>{});return l.useEffect(()=>{const s=i=>{if(i.target&&!n.current){let m=function(){tm(CT,o,d,{discrete:!0})};const d={originalEvent:i};i.pointerType==="touch"?(e.removeEventListener("click",r.current),r.current=m,e.addEventListener("click",r.current,{once:!0})):m()}else e.removeEventListener("click",r.current);n.current=!1},a=window.setTimeout(()=>{e.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(a),e.removeEventListener("pointerdown",s),e.removeEventListener("click",r.current)}},[e,o]),{onPointerDownCapture:()=>n.current=!0}}function DT(t,e=globalThis==null?void 0:globalThis.document){const o=wr(t),n=l.useRef(!1);return l.useEffect(()=>{const r=s=>{s.target&&!n.current&&tm(TT,o,{originalEvent:s},{discrete:!1})};return e.addEventListener("focusin",r),()=>e.removeEventListener("focusin",r)},[e,o]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function Hc(){const t=new CustomEvent(ui);document.dispatchEvent(t)}function tm(t,e,o,{discrete:n}){const r=o.originalEvent.target,s=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:o});e&&r.addEventListener(t,e,{once:!0}),n?yT(r,s):r.dispatchEvent(s)}var PT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],RT=PT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),wa="focusScope.autoFocusOnMount",va="focusScope.autoFocusOnUnmount",$c={bubbles:!1,cancelable:!0},ET="FocusScope",om=l.forwardRef((t,e)=>{const{loop:o=!1,trapped:n=!1,onMountAutoFocus:r,onUnmountAutoFocus:s,...a}=t,[i,m]=l.useState(null),d=wr(r),c=wr(s),p=l.useRef(null),h=vn(e,b=>m(b)),y=l.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;l.useEffect(()=>{if(n){let b=function(v){if(y.paused||!i)return;const C=v.target;i.contains(C)?p.current=C:wo(p.current,{select:!0})},f=function(v){if(y.paused||!i)return;const C=v.relatedTarget;C!==null&&(i.contains(C)||wo(p.current,{select:!0}))},w=function(v){if(document.activeElement===document.body)for(const S of v)S.removedNodes.length>0&&wo(i)};document.addEventListener("focusin",b),document.addEventListener("focusout",f);const T=new MutationObserver(w);return i&&T.observe(i,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",b),document.removeEventListener("focusout",f),T.disconnect()}}},[n,i,y.paused]),l.useEffect(()=>{if(i){Jc.add(y);const b=document.activeElement;if(!i.contains(b)){const w=new CustomEvent(wa,$c);i.addEventListener(wa,d),i.dispatchEvent(w),w.defaultPrevented||(AT(MT(nm(i)),{select:!0}),document.activeElement===b&&wo(i))}return()=>{i.removeEventListener(wa,d),setTimeout(()=>{const w=new CustomEvent(va,$c);i.addEventListener(va,c),i.dispatchEvent(w),w.defaultPrevented||wo(b??document.body,{select:!0}),i.removeEventListener(va,c),Jc.remove(y)},0)}}},[i,d,c,y]);const g=l.useCallback(b=>{if(!o&&!n||y.paused)return;const f=b.key==="Tab"&&!b.altKey&&!b.ctrlKey&&!b.metaKey,w=document.activeElement;if(f&&w){const T=b.currentTarget,[v,C]=NT(T);v&&C?!b.shiftKey&&w===C?(b.preventDefault(),o&&wo(v,{select:!0})):b.shiftKey&&w===v&&(b.preventDefault(),o&&wo(C,{select:!0})):w===T&&b.preventDefault()}},[o,n,y.paused]);return u.jsx(RT.div,{tabIndex:-1,...a,ref:h,onKeyDown:g})});om.displayName=ET;function AT(t,{select:e=!1}={}){const o=document.activeElement;for(const n of t)if(wo(n,{select:e}),document.activeElement!==o)return}function NT(t){const e=nm(t),o=Kc(e,t),n=Kc(e.reverse(),t);return[o,n]}function nm(t){const e=[],o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const r=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||r?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;o.nextNode();)e.push(o.currentNode);return e}function Kc(t,e){for(const o of t)if(!IT(o,{upTo:e}))return o}function IT(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function OT(t){return t instanceof HTMLInputElement&&"select"in t}function wo(t,{select:e=!1}={}){if(t&&t.focus){const o=document.activeElement;t.focus({preventScroll:!0}),t!==o&&OT(t)&&e&&t.select()}}var Jc=FT();function FT(){let t=[];return{add(e){const o=t[0];e!==o&&(o==null||o.pause()),t=Gc(t,e),t.unshift(e)},remove(e){var o;t=Gc(t,e),(o=t[0])==null||o.resume()}}}function Gc(t,e){const o=[...t],n=o.indexOf(e);return n!==-1&&o.splice(n,1),o}function MT(t){return t.filter(e=>e.tagName!=="A")}var UT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],LT=UT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),jT="Portal",rm=l.forwardRef((t,e)=>{var i;const{container:o,...n}=t,[r,s]=l.useState(!1);yr(()=>s(!0),[]);const a=o||r&&((i=globalThis==null?void 0:globalThis.document)==null?void 0:i.body);return a?Pd.createPortal(u.jsx(LT.div,{...n,ref:e}),a):null});rm.displayName=jT;function _T(t,e){return l.useReducer((o,n)=>e[o][n]??o,t)}var Ks=t=>{const{present:e,children:o}=t,n=zT(e),r=typeof o=="function"?o({present:n.isPresent}):l.Children.only(o),s=vn(n.ref,BT(r));return typeof o=="function"||n.isPresent?l.cloneElement(r,{ref:s}):null};Ks.displayName="Presence";function zT(t){const[e,o]=l.useState(),n=l.useRef(null),r=l.useRef(t),s=l.useRef("none"),a=t?"mounted":"unmounted",[i,m]=_T(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return l.useEffect(()=>{const d=Qr(n.current);s.current=i==="mounted"?d:"none"},[i]),yr(()=>{const d=n.current,c=r.current;if(c!==t){const h=s.current,y=Qr(d);t?m("MOUNT"):y==="none"||(d==null?void 0:d.display)==="none"?m("UNMOUNT"):m(c&&h!==y?"ANIMATION_OUT":"UNMOUNT"),r.current=t}},[t,m]),yr(()=>{if(e){let d;const c=e.ownerDocument.defaultView??window,p=y=>{const b=Qr(n.current).includes(CSS.escape(y.animationName));if(y.target===e&&b&&(m("ANIMATION_END"),!r.current)){const f=e.style.animationFillMode;e.style.animationFillMode="forwards",d=c.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=f)})}},h=y=>{y.target===e&&(s.current=Qr(n.current))};return e.addEventListener("animationstart",h),e.addEventListener("animationcancel",p),e.addEventListener("animationend",p),()=>{c.clearTimeout(d),e.removeEventListener("animationstart",h),e.removeEventListener("animationcancel",p),e.removeEventListener("animationend",p)}}else m("ANIMATION_END")},[e,m]),{isPresent:["mounted","unmountSuspended"].includes(i),ref:l.useCallback(d=>{n.current=d?getComputedStyle(d):null,o(d)},[])}}function Qr(t){return(t==null?void 0:t.animationName)||"none"}function BT(t){var n,r;let e=(n=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:n.get,o=e&&"isReactWarning"in e&&e.isReactWarning;return o?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var VT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Fr=VT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),Ca=0;function WT(){l.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??Yc()),document.body.insertAdjacentElement("beforeend",t[1]??Yc()),Ca++,()=>{Ca===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),Ca--}},[])}function Yc(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var Yt=function(){return Yt=Object.assign||function(e){for(var o,n=1,r=arguments.length;n"u")return ak;var e=ik(t),o=document.documentElement.clientWidth,n=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,n-o+e[2]-e[0])}},ck=lm(),Fn="data-scroll-locked",dk=function(t,e,o,n){var r=t.left,s=t.top,a=t.right,i=t.gap;return o===void 0&&(o="margin"),` + */const Pb=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],du=ye("x",Pb),Rb=({...t})=>{const{theme:e="system"}=Ci();return u.jsx(Qh,{theme:e,richColors:!0,className:"toaster group",icons:{success:u.jsx(bg,{className:"size-4"}),info:u.jsx(Ug,{className:"size-4"}),warning:u.jsx(wb,{className:"size-4"}),error:u.jsx(Qg,{className:"size-4"}),loading:u.jsx(eu,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...t})},nc={};function Nt(t,e){const o=l.useRef(nc);return o.current===nc&&(o.current=t(e)),o}const Ka=[];let Ja;function Eb(){return Ja}function Ab(t){Ka.push(t)}function Di(t){const e=(o,n)=>{const r=Nt(Nb).current;let s;try{Ja=r;for(const a of Ka)a.before(r);s=t(o,n);for(const a of Ka)a.after(r);r.didInitialize=!0}finally{Ja=void 0}return s};return e.displayName=t.displayName||t.name,e}function uu(t){return l.forwardRef(Di(t))}function Nb(){return{didInitialize:!1}}function Ps(t){const e=l.useRef(!0);e.current&&(e.current=!1,t())}const Ib=()=>{},ue=typeof document<"u"?l.useLayoutEffect:Ib;function Ob(t,e){return function(n,...r){const s=new URL(t);return s.searchParams.set("code",n.toString()),r.forEach(a=>s.searchParams.append("args[]",a)),`${e} error #${n}; visit ${s} for the full message.`}}const rt=Ob("https://base-ui.com/production-error","Base UI"),pu=l.createContext(void 0);function Dr(t){const e=l.useContext(pu);if(e===void 0&&!t)throw new Error(rt(72));return e}const Fb=[];function Pi(t){l.useEffect(t,Fb)}const or=0;class Mt{constructor(){_e(this,"currentId",or);_e(this,"clear",()=>{this.currentId!==or&&(clearTimeout(this.currentId),this.currentId=or)});_e(this,"disposeEffect",()=>this.clear)}static create(){return new Mt}start(e,o){this.clear(),this.currentId=setTimeout(()=>{this.currentId=or,o()},e)}isStarted(){return this.currentId!==or}}function gt(){const t=Nt(Mt.create).current;return Pi(t.disposeEffect),t}const Xn=typeof navigator<"u",oa=Mb(),mu=Lb(),fu=Ub(),hu=typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter:none"),gu=oa.platform==="MacIntel"&&oa.maxTouchPoints>1?!0:/iP(hone|ad|od)|iOS/.test(oa.platform),bu=Xn&&/apple/i.test(navigator.vendor),Ga=Xn&&/android/i.test(mu)||/android/i.test(fu),yu=Xn&&mu.toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints,wu=fu.includes("jsdom/");function Mb(){if(!Xn)return{platform:"",maxTouchPoints:-1};const t=navigator.userAgentData;return t!=null&&t.platform?{platform:t.platform,maxTouchPoints:navigator.maxTouchPoints}:{platform:navigator.platform??"",maxTouchPoints:navigator.maxTouchPoints??-1}}function Ub(){if(!Xn)return"";const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?t.brands.map(({brand:e,version:o})=>`${e}/${o}`).join(" "):navigator.userAgent}function Lb(){if(!Xn)return"";const t=navigator.userAgentData;return t!=null&&t.platform?t.platform:navigator.platform??""}function Et(t){t.preventDefault(),t.stopPropagation()}function jb(t){return"nativeEvent"in t}function vu(t){return t.pointerType===""&&t.isTrusted?!0:Ga&&t.pointerType?t.type==="click"&&t.buttons===1:t.detail===0&&!t.pointerType}function Cu(t){return wu?!1:!Ga&&t.width===0&&t.height===0||Ga&&t.width===1&&t.height===1&&t.pressure===0&&t.detail===0&&t.pointerType==="mouse"||t.width<1&&t.height<1&&t.pressure===0&&t.detail===0&&t.pointerType==="touch"}function cn(t,e){const o=["mouse","pen"];return e||o.push("",void 0),o.includes(t)}function _b(t){const e=t.type;return e==="click"||e==="mousedown"||e==="keydown"||e==="keyup"}function Rs(){return typeof window<"u"}function ut(t){return Ri(t)?(t.nodeName||"").toLowerCase():"#document"}function Ze(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function oo(t){var e;return(e=(Ri(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ri(t){return Rs()?t instanceof Node||t instanceof Ze(t).Node:!1}function Ae(t){return Rs()?t instanceof Element||t instanceof Ze(t).Element:!1}function Ve(t){return Rs()?t instanceof HTMLElement||t instanceof Ze(t).HTMLElement:!1}function Jn(t){return!Rs()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Ze(t).ShadowRoot}function jo(t){const{overflow:e,overflowX:o,overflowY:n,display:r}=kt(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+o)&&r!=="inline"&&r!=="contents"}function zb(t){return/^(table|td|th)$/.test(ut(t))}function Es(t){try{if(t.matches(":popover-open"))return!0}catch{}try{return t.matches(":modal")}catch{return!1}}const Bb=/transform|translate|scale|rotate|perspective|filter/,Vb=/paint|layout|strict|content/,qo=t=>!!t&&t!=="none";let na;function Ei(t){const e=Ae(t)?kt(t):t;return qo(e.transform)||qo(e.translate)||qo(e.scale)||qo(e.rotate)||qo(e.perspective)||!As()&&(qo(e.backdropFilter)||qo(e.filter))||Bb.test(e.willChange||"")||Vb.test(e.contain||"")}function Wb(t){let e=to(t);for(;Ve(e)&&!Qt(e);){if(Ei(e))return e;if(Es(e))return null;e=to(e)}return null}function As(){return na==null&&(na=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),na}function Qt(t){return/^(html|body|#document)$/.test(ut(t))}function kt(t){return Ze(t).getComputedStyle(t)}function Ns(t){return Ae(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function to(t){if(ut(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Jn(t)&&t.host||oo(t);return Jn(e)?e.host:e}function Tu(t){const e=to(t);return Qt(e)?t.ownerDocument?t.ownerDocument.body:t.body:Ve(e)&&jo(e)?e:Tu(e)}function fr(t,e,o){var n;e===void 0&&(e=[]),o===void 0&&(o=!0);const r=Tu(t),s=r===((n=t.ownerDocument)==null?void 0:n.body),a=Ze(r);if(s){const i=Ya(a);return e.concat(a,a.visualViewport||[],jo(r)?r:[],i&&o?fr(i):[])}else return e.concat(r,fr(r,[],o))}function Ya(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}const Qa="data-base-ui-focusable",ku="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",No="ArrowLeft",Io="ArrowRight",Ai="ArrowUp",Pr="ArrowDown";function vt(t){var o;let e=t.activeElement;for(;((o=e==null?void 0:e.shadowRoot)==null?void 0:o.activeElement)!=null;)e=e.shadowRoot.activeElement;return e}function Ce(t,e){var n;if(!t||!e)return!1;const o=(n=e.getRootNode)==null?void 0:n.call(e);if(t.contains(e))return!0;if(o&&Jn(o)){let r=e;for(;r;){if(t===r)return!0;r=r.parentNode||r.host}}return!1}function ht(t){return"composedPath"in t?t.composedPath()[0]:t.target}function us(t,e){if(!Ae(t))return!1;const o=t;if(e.hasElement(o))return!o.hasAttribute("data-trigger-disabled");for(const[,n]of e.entries())if(Ce(n,o))return!n.hasAttribute("data-trigger-disabled");return!1}function ra(t,e){if(e==null)return!1;if("composedPath"in t)return t.composedPath().includes(e);const o=t;return o.target!=null&&e.contains(o.target)}function qb(t){return t.matches("html,body")}function Is(t){return Ve(t)&&t.matches(ku)}function Hb(t){return(t==null?void 0:t.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${ku}`))!=null}function Xa(t){return t?t.getAttribute("role")==="combobox"&&Is(t):!1}function $b(t){if(!t||wu)return!0;try{return t.matches(":focus-visible")}catch{return!0}}function Za(t){return t?t.hasAttribute(Qa)?t:t.querySelector(`[${Qa}]`)||t:null}function Kb(t,e){return e!=null&&!cn(e)?0:typeof t=="function"?t():t}function ps(t,e,o){const n=Kb(t,o);return typeof n=="number"?n:n==null?void 0:n[e]}function rc(t){return typeof t=="function"?t():t}function Su(t,e){return e||t==="click"||t==="mousedown"}function Jb(t){return(t==null?void 0:t.includes("mouse"))&&t!=="mousedown"}function Ni(){}const ei=Object.freeze([]),Je=Object.freeze({}),xu="none",uo="trigger-press",Ye="trigger-hover",An="trigger-focus",Ii="outside-press",Du="item-press",Pu="close-press",dn="focus-out",Rr="escape-key",ti="list-navigation",Gb="cancel-open",lr="sibling-open",Yb="disabled",l0="missing",c0="initial",Os="imperative-action",d0="window-resize";function Oe(t,e,o,n){let r=!1,s=!1;const a=n??Je;return{reason:t,event:e??new Event("base-ui"),cancel(){r=!0},allowPropagation(){s=!0},get isCanceled(){return r},get isPropagationAllowed(){return s},trigger:o,...a}}const Ru=l.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new Mt,currentIdRef:{current:null},currentContextRef:{current:null}});function Qb(t){const{children:e,delay:o,timeoutMs:n=0}=t,r=l.useRef(o),s=l.useRef(o),a=l.useRef(null),i=l.useRef(null),m=gt();return u.jsx(Ru.Provider,{value:l.useMemo(()=>({hasProvider:!0,delayRef:r,initialDelayRef:s,currentIdRef:a,timeoutMs:n,currentContextRef:i,timeout:m}),[n,m]),children:e})}function Xb(t,e={open:!1}){const{open:o}=e,n="rootStore"in t?t.rootStore:t,r=n.useState("floatingId"),s=l.useContext(Ru),{currentIdRef:a,delayRef:i,timeoutMs:m,initialDelayRef:d,currentContextRef:c,hasProvider:p,timeout:h}=s,[y,g]=l.useState(!1);return ue(()=>{function b(){var f;g(!1),(f=c.current)==null||f.setIsInstantPhase(!1),a.current=null,c.current=null,i.current=d.current}if(a.current&&!o&&a.current===r){if(g(!1),m){const f=r;return h.start(m,()=>{n.select("open")||a.current&&a.current!==f||b()}),()=>{h.clear()}}b()}},[o,r,a,i,m,d,c,h,n]),ue(()=>{if(!o)return;const b=c.current,f=a.current;h.clear(),c.current={onOpenChange:n.setOpen,setIsInstantPhase:g},a.current=r,i.current={open:0,close:ps(d.current,"close")},f!==null&&f!==r?(g(!0),b==null||b.setIsInstantPhase(!0),b==null||b.onOpenChange(!1,Oe(xu))):(g(!1),b==null||b.setIsInstantPhase(!1))},[o,r,n,a,i,d,c,h]),ue(()=>()=>{c.current=null},[c]),l.useMemo(()=>({hasProvider:p,delayRef:i,isInstantPhase:y}),[p,i,y])}function Ne(t,e,o,n){return t.addEventListener(e,o,n),()=>{t.removeEventListener(e,o,n)}}function Xt(...t){return()=>{for(let e=0;eo!==e[n])}function Au(t,e){if(t.refs=e,e.every(o=>o==null)){t.callback=null;return}t.callback=o=>{if(t.cleanup&&(t.cleanup(),t.cleanup=null),o!=null){const n=Array(e.length).fill(null);for(let r=0;r{for(let r=0;r{e.current=e.next}};return e}const Oi={...Ds},sa=Oi.useInsertionEffect,ny=sa&&sa!==Oi.useLayoutEffect?sa:t=>t();function ke(t){const e=Nt(ry).current;return e.next=t,ny(e.effect),e.trampoline}function ry(){const t={next:void 0,callback:sy,trampoline:(...e)=>{var o;return(o=t.callback)==null?void 0:o.call(t,...e)},effect:()=>{t.callback=t.next}};return t}function sy(){}const Br=null;class ay{constructor(){_e(this,"callbacks",[]);_e(this,"callbacksCount",0);_e(this,"nextId",1);_e(this,"startId",1);_e(this,"isScheduled",!1);_e(this,"tick",e=>{var r;this.isScheduled=!1;const o=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let s=0;s=this.callbacks.length||(this.callbacks[o]=null,this.callbacksCount-=1)}}const Vr=new ay;class Gt{constructor(){_e(this,"currentId",Br);_e(this,"cancel",()=>{this.currentId!==Br&&(Vr.cancel(this.currentId),this.currentId=Br)});_e(this,"disposeEffect",()=>this.cancel)}static create(){return new Gt}static request(e){return Vr.request(e)}static cancel(e){return Vr.cancel(e)}request(e){this.cancel(),this.currentId=Vr.request(()=>{this.currentId=Br,e()})}}function hr(){const t=Nt(Gt.create).current;return Pi(t.disposeEffect),t}function Le(t){return(t==null?void 0:t.ownerDocument)||document}const Nu={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},iy={...Nu,position:"fixed",top:0,left:0},u0={...Nu,position:"absolute"},Fo=l.forwardRef(function(e,o){const[n,r]=l.useState();ue(()=>{bu&&r("button")},[]);const s={tabIndex:0,role:n};return u.jsx("span",{...e,ref:o,style:iy,"aria-hidden":n?void 0:!0,...s,"data-base-ui-focus-guard":""})}),ly=["top","right","bottom","left"],Yn=Math.min,At=Math.max,ms=Math.round,Yo=Math.floor,Zt=t=>({x:t,y:t}),cy={left:"right",right:"left",bottom:"top",top:"bottom"};function oi(t,e,o){return At(t,Yn(e,o))}function po(t,e){return typeof t=="function"?t(e):t}function Ct(t){return t.split("-")[0]}function _o(t){return t.split("-")[1]}function Fi(t){return t==="x"?"y":"x"}function Mi(t){return t==="y"?"height":"width"}function Ft(t){const e=t[0];return e==="t"||e==="b"?"y":"x"}function Ui(t){return Fi(Ft(t))}function dy(t,e,o){o===void 0&&(o=!1);const n=_o(t),r=Ui(t),s=Mi(r);let a=r==="x"?n===(o?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(a=fs(a)),[a,fs(a)]}function uy(t){const e=fs(t);return[ni(t),e,ni(e)]}function ni(t){return t.includes("start")?t.replace("start","end"):t.replace("end","start")}const sc=["left","right"],ac=["right","left"],py=["top","bottom"],my=["bottom","top"];function fy(t,e,o){switch(t){case"top":case"bottom":return o?e?ac:sc:e?sc:ac;case"left":case"right":return e?py:my;default:return[]}}function hy(t,e,o,n){const r=_o(t);let s=fy(Ct(t),o==="start",n);return r&&(s=s.map(a=>a+"-"+r),e&&(s=s.concat(s.map(ni)))),s}function fs(t){const e=Ct(t);return cy[e]+t.slice(e.length)}function gy(t){return{top:0,right:0,bottom:0,left:0,...t}}function Iu(t){return typeof t!="number"?gy(t):{top:t,right:t,bottom:t,left:t}}function hs(t){const{x:e,y:o,width:n,height:r}=t;return{width:n,height:r,top:o,left:e,right:e+n,bottom:o+r,x:e,y:o}}function Wr(t,e,o){return Math.floor(t/e)!==o}function gs(t,e){return e<0||e>=t.length}function aa(t,e){return ft(t.current,{disabledIndices:e})}function ic(t,e){return ft(t.current,{decrement:!0,startingIndex:t.current.length,disabledIndices:e})}function ft(t,{startingIndex:e=-1,decrement:o=!1,disabledIndices:n,amount:r=1}={}){let s=e;do s+=o?-r:r;while(s>=0&&s<=t.length-1&&Nn(t,s,n));return s}function by(t,{event:e,orientation:o,loopFocus:n,onLoop:r,rtl:s,cols:a,disabledIndices:i,minIndex:m,maxIndex:d,prevIndex:c,stopEvent:p=!1}){let h=c,y;if(e.key===Ai?y="up":e.key===Pr&&(y="down"),y){const g=[],b=[];let f=!1,w=0;{let I=null,N=-1;t.forEach((z,U)=>{if(z==null)return;w+=1;const R=z.closest('[role="row"]');R&&(f=!0),(R!==I||N===-1)&&(I=R,N+=1,g[N]=[]),g[N].push(U),b[U]=N})}let T=!1,v=0;if(f)for(const I of g){const N=I.length;N>v&&(v=N),N!==a&&(T=!0)}const C=T&&w{if(!T||c===-1)return;const N=b[c];if(N==null)return;const z=g[N].indexOf(c),U=I==="up"?-1:1;for(let R=N+U,W=0;W=g.length){if(!n||C)return;if(R=R<0?g.length-1:0,r){const j=Math.min(z,g[R].length-1),x=g[R][j]??g[R][0],F=r(e,c,x);R=b[F]??R}}const O=g[R];for(let j=Math.min(z,O.length-1);j>=0;j-=1){const x=O[j];if(!Nn(t,x,i))return x}}},P=I=>{if(!C||c===-1)return;const N=c%S,z=I==="up"?-S:S,U=d-d%S,R=Yo(d/S)+1;for(let W=c-N+z,O=0;Od){if(!n)return;W=W<0?U:0}const j=Math.min(W+S-1,d);for(let x=Math.min(W+N,j);x>=W;x-=1)if(!Nn(t,x,i))return x}};p&&Et(e);const D=k(y)??P(y);if(D!==void 0)h=D;else if(c===-1)h=y==="up"?d:m;else if(h=ft(t,{startingIndex:c,amount:S,decrement:y==="up",disabledIndices:i}),n){if(y==="up"&&(c-SI?z:z-S,r&&(h=r(e,c,h))}y==="down"&&c+S>d&&(h=ft(t,{startingIndex:c%S-S,amount:S,disabledIndices:i}),r&&(h=r(e,c,h)))}gs(t,h)&&(h=c)}if(o==="both"){const g=Yo(c/a);e.key===(s?No:Io)&&(p&&Et(e),c%a!==a-1?(h=ft(t,{startingIndex:c,disabledIndices:i}),n&&Wr(h,a,g)&&(h=ft(t,{startingIndex:c-c%a-1,disabledIndices:i}),r&&(h=r(e,c,h)))):n&&(h=ft(t,{startingIndex:c-c%a-1,disabledIndices:i}),r&&(h=r(e,c,h))),Wr(h,a,g)&&(h=c)),e.key===(s?Io:No)&&(p&&Et(e),c%a!==0?(h=ft(t,{startingIndex:c,decrement:!0,disabledIndices:i}),n&&Wr(h,a,g)&&(h=ft(t,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}),r&&(h=r(e,c,h)))):n&&(h=ft(t,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}),r&&(h=r(e,c,h))),Wr(h,a,g)&&(h=c));const b=Yo(d/a)===g;gs(t,h)&&(n&&b?(h=e.key===(s?Io:No)?d:ft(t,{startingIndex:c-c%a-1,disabledIndices:i}),r&&(h=r(e,c,h))):h=c)}return h}function yy(t,e,o){const n=[];let r=0;return t.forEach(({width:s,height:a},i)=>{let m=!1;for(o&&(r=0);!m;){const d=[];for(let c=0;cn[c]==null)?(d.forEach(c=>{n[c]=i}),m=!0):r+=1}}),[...n]}function wy(t,e,o,n,r){if(t===-1)return-1;const s=o.indexOf(t),a=e[t];switch(r){case"tl":return s;case"tr":return a?s+a.width-1:s;case"bl":return a?s+(a.height-1)*n:s;case"br":return o.lastIndexOf(t);default:return-1}}function vy(t,e){return e.flatMap((o,n)=>t.includes(o)?[n]:[])}function Nn(t,e,o){if(typeof o=="function"?o(e):(o==null?void 0:o.includes(e))??!1)return!0;const r=t[e];return r?Fs(r)?!o&&(r.hasAttribute("disabled")||r.getAttribute("aria-disabled")==="true"):!0:!1}function Cy(t){return t.visibility==="hidden"||t.visibility==="collapse"}function Fs(t,e=t?kt(t):null){return!t||!t.isConnected||!e||Cy(e)?!1:typeof t.checkVisibility=="function"?t.checkVisibility():e.display!=="none"&&e.display!=="contents"}const Ty='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';function ky(t){const e=t.assignedSlot;if(e)return e;if(t.parentElement)return t.parentElement;const o=t.getRootNode();return Jn(o)?o.host:null}function ri(t){for(const e of Array.from(t.children))if(ut(e)==="summary")return e;return null}function Sy(t,e){const o=ri(e);return!!o&&(t===o||Ce(o,t))}function Ou(t){const e=t?ut(t):"";return t!=null&&t.matches(Ty)&&(e!=="summary"||t.parentElement!=null&&ut(t.parentElement)==="details"&&ri(t.parentElement)===t)&&(e!=="details"||ri(t)==null)&&(e!=="input"||t.type!=="hidden")}function Fu(t){if(!Ou(t)||!t.isConnected||t.matches(":disabled"))return!1;for(let e=t;e;e=ky(e)){const o=e!==t,n=ut(e)==="slot";if(e.hasAttribute("inert")||o&&ut(e)==="details"&&!e.open&&!Sy(t,e)||e.hasAttribute("hidden")||!n&&!xy(e,o))return!1}return!0}function xy(t,e){const o=kt(t);return e?o.display!=="none":Fs(t,o)}function Mu(t){const e=t.tabIndex;if(e<0){const o=ut(t);if(o==="details"||o==="audio"||o==="video"||Ve(t)&&t.isContentEditable)return 0}return e}function ia(t){if(ut(t)!=="input")return null;const e=t;return e.type==="radio"&&e.name!==""?e:null}function Dy(t,e){const o=ia(t);if(!o)return!0;const n=e.find(r=>{const s=ia(r);return(s==null?void 0:s.name)===o.name&&s.form===o.form&&s.checked});return n?n===o:e.find(r=>{const s=ia(r);return(s==null?void 0:s.name)===o.name&&s.form===o.form})===o}function Uu(t){if(Ve(t)&&ut(t)==="slot"){const e=t.assignedElements({flatten:!0});if(e.length>0)return e}return Ve(t)&&t.shadowRoot?Array.from(t.shadowRoot.children):Array.from(t.children)}function Lu(t,e){Uu(t).forEach(o=>{Ou(o)&&e.push(o),Lu(o,e)})}function ju(t,e,o){Uu(t).forEach(n=>{Ve(n)&&n.matches(e)&&o.push(n),ju(n,e,o)})}function Li(t){return Fu(t)&&Mu(t)>=0}function _u(t){const e=[];return Lu(t,e),e.filter(Fu)}function Er(t){const e=_u(t);return e.filter(o=>Mu(o)>=0&&Dy(o,e))}function zu(t,e){const o=Er(t),n=o.length;if(n===0)return;const r=vt(Le(t)),s=o.indexOf(r),a=s===-1?e===1?0:n-1:s+e;return o[a]}function ji(t){return zu(Le(t).body,1)||t}function Bu(t){return zu(Le(t).body,-1)||t}function Vu(t,e){if(!t)return null;const o=Er(Le(t).body),n=o.length;if(n===0)return null;const r=o.indexOf(t);if(r===-1)return null;const s=(r+e+n)%n;return o[s]}function Py(t){return Vu(t,1)}function Ry(t){return Vu(t,-1)}function In(t,e){const o=e||t.currentTarget,n=t.relatedTarget;return!n||!Ce(o,n)}function Ey(t){Er(t).forEach(o=>{o.dataset.tabindex=o.getAttribute("tabindex")||"",o.setAttribute("tabindex","-1")})}function lc(t){const e=[];ju(t,"[data-tabindex]",e),e.forEach(o=>{const n=o.dataset.tabindex;delete o.dataset.tabindex,n?o.setAttribute("tabindex",n):o.removeAttribute("tabindex")})}function Mo(t,e,o=!0){return t.filter(r=>r.parentId===e).flatMap(r=>{var s;return[...!o||(s=r.context)!=null&&s.open?[r]:[],...Mo(t,r.id,o)]})}function cc(t,e){var r;let o=[],n=(r=t.find(s=>s.id===e))==null?void 0:r.parentId;for(;n;){const s=t.find(a=>a.id===n);n=s==null?void 0:s.parentId,s&&(o=o.concat(s))}return o}function gr(t){return`data-base-ui-${t}`}let qr=0;function ss(t,e={}){const{preventScroll:o=!1,sync:n=!1,shouldFocus:r}=e;cancelAnimationFrame(qr);function s(){r&&!r()||t==null||t.focus({preventScroll:o})}if(n)return s(),Ni;const a=requestAnimationFrame(s);return qr=a,()=>{qr===a&&(cancelAnimationFrame(a),qr=0)}}const la={inert:new WeakMap,"aria-hidden":new WeakMap},dc="data-base-ui-inert",si={inert:new WeakSet,"aria-hidden":new WeakSet};let nr=new WeakMap,ca=0;function Ay(t){return si[t]}function Wu(t){return t?Jn(t)?t.host:Wu(t.parentNode):null}const da=(t,e)=>e.map(o=>{if(t.contains(o))return o;const n=Wu(o);return t.contains(n)?n:null}).filter(o=>o!=null),uc=t=>{const e=new Set;return t.forEach(o=>{let n=o;for(;n&&!e.has(n);)e.add(n),n=n.parentNode}),e},pc=(t,e,o)=>{const n=[],r=s=>{!s||o.has(s)||Array.from(s.children).forEach(a=>{ut(a)!=="script"&&(e.has(a)?r(a):n.push(a))})};return r(t),n};function Ny(t,e,o,n,{mark:r=!0,markerIgnoreElements:s=[]}){const a=n?"inert":o?"aria-hidden":null;let i=null,m=null;const d=da(e,t),c=r?da(e,s):[],p=new Set(c),h=r?pc(e,uc(d),new Set(d)).filter(b=>!p.has(b)):[],y=[],g=[];if(a){const b=la[a],f=Ay(a);m=f,i=b;const w=da(e,Array.from(e.querySelectorAll("[aria-live]"))),T=d.concat(w);pc(e,uc(T),new Set(T)).forEach(C=>{const S=C.getAttribute(a),k=S!==null&&S!=="false",P=(b.get(C)||0)+1;b.set(C,P),y.push(C),P===1&&k&&f.add(C),k||C.setAttribute(a,a==="inert"?"":"true")})}return r&&h.forEach(b=>{const f=(nr.get(b)||0)+1;nr.set(b,f),g.push(b),f===1&&b.setAttribute(dc,"")}),ca+=1,()=>{i&&y.forEach(b=>{const w=(i.get(b)||0)-1;i.set(b,w),w||(!(m!=null&&m.has(b))&&a&&b.removeAttribute(a),m==null||m.delete(b))}),r&&g.forEach(b=>{const f=(nr.get(b)||0)-1;nr.set(b,f),f||b.removeAttribute(dc)}),ca-=1,ca||(la.inert=new WeakMap,la["aria-hidden"]=new WeakMap,si.inert=new WeakSet,si["aria-hidden"]=new WeakSet,nr=new WeakMap)}}function mc(t,e={}){const{ariaHidden:o=!1,inert:n=!1,mark:r=!0,markerIgnoreElements:s=[]}=e,a=Le(t[0]).body;return Ny(t,a,o,n,{mark:r,markerIgnoreElements:s})}let fc=0;function Iy(t,e="mui"){const[o,n]=l.useState(t),r=t||o;return l.useEffect(()=>{o==null&&(fc+=1,n(`${e}-${fc}`))},[o,e]),r}const hc=Oi.useId;function un(t,e){if(hc!==void 0){const o=hc();return t??(e?`${e}-${o}`:o)}return Iy(t,e)}const Oy=parseInt(l.version,10);function _i(t){return Oy>=t}function gc(t){if(!l.isValidElement(t))return null;const e=t,o=e.props;return(_i(19)?o==null?void 0:o.ref:e.ref)??null}function ai(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Fy(t,e){const o={};for(const n in t){const r=t[n];if(e!=null&&e.hasOwnProperty(n)){const s=e[n](r);s!=null&&Object.assign(o,s);continue}r===!0?o[`data-${n.toLowerCase()}`]="":r&&(o[`data-${n.toLowerCase()}`]=r.toString())}return o}function My(t,e){return typeof t=="function"?t(e):t}function Uy(t,e){return typeof t=="function"?t(e):t}const zi={};function Tt(t,e,o,n,r){if(!o&&!n&&!r&&!t)return bs(e);let s=bs(t);return e&&(s=cr(s,e)),o&&(s=cr(s,o)),n&&(s=cr(s,n)),r&&(s=cr(s,r)),s}function Ly(t){if(t.length===0)return zi;if(t.length===1)return bs(t[0]);let e=bs(t[0]);for(let o=1;o=65&&r<=90&&(typeof e=="function"||typeof e>"u")}function Bi(t){return typeof t=="function"}function Hu(t,e){return Bi(t)?t(e):t??zi}function zy(t,e){return e?t?(...o)=>{const n=o[0];if(Ju(n)){const s=n;ys(s);const a=e(...o);return s.baseUIHandlerPrevented||t==null||t(...o),a}const r=e(...o);return t==null||t(...o),r}:$u(e):t}function $u(t){return t&&((...e)=>{const o=e[0];return Ju(o)&&ys(o),t(...e)})}function ys(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function Ku(t,e){return e?t?e+" "+t:e:t}function Ju(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}function st(t,e,o={}){const n=e.render,r=By(e,o);if(o.enabled===!1)return null;const s=o.state??Je;return qy(t,n,r,s)}function By(t,e={}){const{className:o,style:n,render:r}=t,{state:s=Je,ref:a,props:i,stateAttributesMapping:m,enabled:d=!0}=e,c=d?My(o,s):void 0,p=d?Uy(n,s):void 0,h=d?Fy(s,m):Je,y=d&&i?Vy(i):void 0,g=d?ai(h,y)??{}:Je;return typeof document<"u"&&(d?Array.isArray(a)?g.ref=Zb([g.ref,gc(r),...a]):g.ref=Gn(g.ref,gc(r),a):Gn(null,null)),d?(c!==void 0&&(g.className=Ku(g.className,c)),p!==void 0&&(g.style=ai(g.style,p)),g):Je}function Vy(t){return Array.isArray(t)?Ly(t):Tt(void 0,t)}const Wy=Symbol.for("react.lazy");function qy(t,e,o,n){if(e){if(typeof e=="function")return e(o,n);const r=Tt(o,e.props);r.ref=o.ref;let s=e;return(s==null?void 0:s.$$typeof)===Wy&&(s=l.Children.toArray(e)[0]),l.cloneElement(s,r)}if(t&&typeof t=="string")return Hy(t,o);throw new Error(rt(8))}function Hy(t,e){return t==="button"?l.createElement("button",{type:"button",...e,key:e.key}):t==="img"?l.createElement("img",{alt:"",...e,key:e.key}):l.createElement(t,e)}const $y=500,Gu=500,Ky={style:{transition:"none"}},Yu="data-base-ui-click-trigger",Jy={fallbackAxisSide:"none"},Vi={fallbackAxisSide:"end"},Gy={clipPath:"inset(50%)",position:"fixed",top:0,left:0},Qu=l.createContext(null),Xu=()=>l.useContext(Qu),Yy=gr("portal");function Zu(t={}){const{ref:e,container:o,componentProps:n=Je,elementProps:r}=t,s=un(),a=Xu(),i=a==null?void 0:a.portalNode,[m,d]=l.useState(null),[c,p]=l.useState(null),h=ke(f=>{f!==null&&p(f)}),y=l.useRef(null);ue(()=>{if(o===null){y.current&&(y.current=null,p(null),d(null));return}if(s==null)return;const f=(o&&(Ri(o)?o:o.current))??i??document.body;if(f==null){y.current&&(y.current=null,p(null),d(null));return}y.current!==f&&(y.current=f,p(null),d(f))},[o,i,s]);const g=st("div",n,{ref:[e,h],props:[{id:s,[Yy]:""},r]});return{portalNode:c,portalSubtree:m&&g?_t.createPortal(g,m):null}}const Wi=l.forwardRef(function(e,o){const{render:n,className:r,style:s,children:a,container:i,renderGuards:m,...d}=e,{portalNode:c,portalSubtree:p}=Zu({container:i,ref:o,componentProps:e,elementProps:d}),h=l.useRef(null),y=l.useRef(null),g=l.useRef(null),b=l.useRef(null),[f,w]=l.useState(null),T=l.useRef(!1),v=f==null?void 0:f.modal,C=f==null?void 0:f.open,S=typeof m=="boolean"?m:!!f&&!f.modal&&f.open&&!!c;l.useEffect(()=>{if(!c||v)return;function P(D){c&&D.relatedTarget&&In(D)&&(D.type==="focusin"?T.current&&(lc(c),T.current=!1):(Ey(c),T.current=!0))}return Xt(Ne(c,"focusin",P,!0),Ne(c,"focusout",P,!0))},[c,v]),l.useEffect(()=>{!c||C!==!1||(lc(c),T.current=!1)},[C,c]);const k=l.useMemo(()=>({beforeOutsideRef:h,afterOutsideRef:y,beforeInsideRef:g,afterInsideRef:b,portalNode:c,setFocusManagerState:w}),[c]);return u.jsxs(l.Fragment,{children:[p,u.jsxs(Qu.Provider,{value:k,children:[S&&c&&u.jsx(Fo,{"data-type":"outside",ref:h,onFocus:P=>{var D;if(In(P,c))(D=g.current)==null||D.focus();else{const I=f?f.domReference:null,N=Bu(I);N==null||N.focus()}}}),S&&c&&u.jsx("span",{"aria-owns":c.id,style:Gy}),c&&_t.createPortal(a,c),S&&c&&u.jsx(Fo,{"data-type":"outside",ref:y,onFocus:P=>{var D;if(In(P,c))(D=b.current)==null||D.focus();else{const I=f?f.domReference:null,N=ji(I);N==null||N.focus(),f!=null&&f.closeOnFocusOut&&(f==null||f.onOpenChange(!1,Oe(dn,P.nativeEvent)))}}})]})]})});function ep(){const t=new Map;return{emit(e,o){var n;(n=t.get(e))==null||n.forEach(r=>r(o))},on(e,o){t.has(e)||t.set(e,new Set),t.get(e).add(o)},off(e,o){var n;(n=t.get(e))==null||n.delete(o)}}}class qi{constructor(){_e(this,"nodesRef",{current:[]});_e(this,"events",ep())}addNode(e){this.nodesRef.current.push(e)}removeNode(e){const o=this.nodesRef.current.findIndex(n=>n===e);o!==-1&&this.nodesRef.current.splice(o,1)}}const tp=l.createContext(null),op=l.createContext(null),mo=()=>{var t;return((t=l.useContext(tp))==null?void 0:t.id)||null},zo=t=>{const e=l.useContext(op);return t??e};function Hi(t){const e=un(),o=zo(t),n=mo();return ue(()=>{if(!e)return;const r={id:e,parentId:n};return o==null||o.addNode(r),()=>{o==null||o.removeNode(r)}},[o,e,n]),e}function np(t){const{children:e,id:o}=t,n=mo();return u.jsx(tp.Provider,{value:l.useMemo(()=>({id:o,parentId:n}),[o,n]),children:e})}function rp(t){const{children:e,externalTree:o}=t,n=Nt(()=>o??new qi).current;return u.jsx(op.Provider,{value:n,children:e})}function ao(t){return t==null?t:"current"in t?t.current:t}function Qy(t,e){const o=Ze(ht(t));return t instanceof o.KeyboardEvent?"keyboard":t instanceof o.FocusEvent?e||"keyboard":"pointerType"in t?t.pointerType||"keyboard":"touches"in t?"touch":t instanceof o.MouseEvent?e||(t.detail===0?"keyboard":"mouse"):""}const bc=20;let Eo=[];function $i(){Eo=Eo.filter(t=>{var e;return(e=t.deref())==null?void 0:e.isConnected})}function Xy(t){$i(),t&&ut(t)!=="body"&&(Eo.push(new WeakRef(t)),Eo.length>bc&&(Eo=Eo.slice(-bc)))}function ua(){var t;return $i(),(t=Eo[Eo.length-1])==null?void 0:t.deref()}function Zy(t){return t?Li(t)?t:Er(t)[0]||t:null}function yc(t,e){var s;if(t.hasAttribute("tabindex")&&!t.hasAttribute("data-tabindex")||!e.current.includes("floating")&&!((s=t.getAttribute("role"))!=null&&s.includes("dialog")))return;const n=_u(t).filter(a=>{const i=a.getAttribute("data-tabindex")||"";return Li(a)||a.hasAttribute("data-tabindex")&&!i.startsWith("-")}),r=t.getAttribute("tabindex");e.current.includes("floating")||n.length===0?r!=="0"&&t.setAttribute("tabindex","0"):(r!=="-1"||t.hasAttribute("data-tabindex")&&t.getAttribute("data-tabindex")!=="-1")&&(t.setAttribute("tabindex","-1"),t.setAttribute("data-tabindex","-1"))}function Ki(t){const{context:e,children:o,disabled:n=!1,initialFocus:r=!0,returnFocus:s=!0,restoreFocus:a=!1,modal:i=!0,closeOnFocusOut:m=!0,openInteractionType:d="",nextFocusableElement:c,previousFocusableElement:p,beforeContentFocusGuardRef:h,externalTree:y,getInsideElements:g}=t,b="rootStore"in e?e.rootStore:e,f=b.useState("open"),w=b.useState("domReferenceElement"),T=b.useState("floatingElement"),{events:v,dataRef:C}=b.context,S=ke(()=>{var K;return(K=C.current.floatingContext)==null?void 0:K.nodeId}),k=r===!1,P=Xa(w)&&k,D=l.useRef(["content"]),I=nt(r),N=nt(s),z=nt(d),U=zo(y),R=Xu(),W=l.useRef(!1),O=l.useRef(!1),j=l.useRef(!1),x=l.useRef(null),F=l.useRef(""),H=l.useRef(""),A=l.useRef(null),Q=l.useRef(null),M=Gn(A,h,R==null?void 0:R.beforeInsideRef),L=Gn(Q,R==null?void 0:R.afterInsideRef),V=gt(),_=gt(),B=hr(),Y=R!=null,q=Za(T),J=ke((K=q)=>K?Er(K):[]),Te=ke(()=>(g==null?void 0:g().filter(K=>K!=null))??[]);l.useEffect(()=>{if(n||!i)return;function K(le){le.key==="Tab"&&Ce(q,vt(Le(q)))&&J().length===0&&!P&&Et(le)}const de=Le(q);return Ne(de,"keydown",K)},[n,q,i,P,J]),l.useEffect(()=>{if(n||!f)return;const K=Le(q);function de(){j.current=!1}function le(me){const fe=ht(me),Se=Te(),Z=Ce(T,fe)||Ce(w,fe)||Ce(R==null?void 0:R.portalNode,fe)||Se.some(Fe=>Fe===fe||Ce(Fe,fe));j.current=!Z,H.current=me.pointerType||"keyboard",fe!=null&&fe.closest(`[${Yu}]`)&&(O.current=!0)}function De(){H.current="keyboard"}return Xt(Ne(K,"pointerdown",le,!0),Ne(K,"pointerup",de,!0),Ne(K,"pointercancel",de,!0),Ne(K,"keydown",De,!0))},[n,T,w,q,f,R,Te]),l.useEffect(()=>{if(n||!m)return;const K=Le(q);function de(){O.current=!0,_.start(0,()=>{O.current=!1})}function le(Se){const Z=ht(Se);Li(Z)&&(x.current=Z)}function De(Se){const Z=Se.relatedTarget,Fe=Se.currentTarget,we=ht(Se);queueMicrotask(()=>{const he=S(),Pe=b.context.triggerElements,se=Te(),$=(Z==null?void 0:Z.hasAttribute(gr("focus-guard")))&&[A.current,Q.current,R==null?void 0:R.beforeInsideRef.current,R==null?void 0:R.afterInsideRef.current,R==null?void 0:R.beforeOutsideRef.current,R==null?void 0:R.afterOutsideRef.current,ao(p),ao(c)].includes(Z),ee=!(Ce(w,Z)||Ce(T,Z)||Ce(Z,T)||Ce(R==null?void 0:R.portalNode,Z)||se.some(te=>te===Z||Ce(te,Z))||Z!=null&&Pe.hasElement(Z)||Pe.hasMatchingElement(te=>Ce(te,Z))||$||U&&(Mo(U.nodesRef.current,he).find(te=>{var G,ge;return Ce((G=te.context)==null?void 0:G.elements.floating,Z)||Ce((ge=te.context)==null?void 0:ge.elements.domReference,Z)})||cc(U.nodesRef.current,he).find(te=>{var G,ge,xe;return[(G=te.context)==null?void 0:G.elements.floating,Za((ge=te.context)==null?void 0:ge.elements.floating)].includes(Z)||((xe=te.context)==null?void 0:xe.elements.domReference)===Z})));if(Fe===w&&q&&yc(q,D),a&&Fe!==w&&!Fs(we)&&vt(K)===K.body){if(Ve(q)&&(q.focus(),a==="popup")){B.request(()=>{q.focus()});return}const te=J(),G=x.current,ge=(G&&te.includes(G)?G:null)||te[te.length-1]||q;Ve(ge)&&ge.focus()}if(C.current.insideReactTree){C.current.insideReactTree=!1;return}(P||!i)&&Z&&ee&&!O.current&&(P||Z!==ua())&&(W.current=!0,b.setOpen(!1,Oe(dn,Se)))})}function me(){j.current||(C.current.insideReactTree=!0,V.start(0,()=>{C.current.insideReactTree=!1}))}const fe=Ve(w)?w:null;if(!(!T&&!fe))return Xt(fe&&Ne(fe,"focusout",De),fe&&Ne(fe,"pointerdown",de),T&&Ne(T,"focusin",le),T&&Ne(T,"focusout",De),T&&R&&Ne(T,"focusout",me,!0))},[n,w,T,q,i,U,R,b,m,a,J,P,S,D,C,V,_,B,c,p,Te]),l.useEffect(()=>{var Fe,we,he;if(n||!T||!f)return;const K=Array.from(((Fe=R==null?void 0:R.portalNode)==null?void 0:Fe.querySelectorAll(`[${gr("portal")}]`))||[]),le=(he=(we=(U?cc(U.nodesRef.current,S()):[]).find(Pe=>{var se;return Xa(((se=Pe.context)==null?void 0:se.elements.domReference)||null)}))==null?void 0:we.context)==null?void 0:he.elements.domReference,me=[...[T,...K,A.current,Q.current,R==null?void 0:R.beforeOutsideRef.current,R==null?void 0:R.afterOutsideRef.current,...Te()],le,ao(p),ao(c),P?w:null].filter(Pe=>Pe!=null),fe=mc(me,{ariaHidden:i||P,mark:!1}),Se=[T,...K].filter(Pe=>Pe!=null),Z=mc(Se);return()=>{Z(),fe()}},[f,n,w,T,i,R,P,U,S,c,p,Te]),ue(()=>{if(!f||n||!Ve(q))return;const K=Le(q),de=vt(K);queueMicrotask(()=>{const le=I.current,De=typeof le=="function"?le(z.current||""):le;if(De===void 0||De===!1||Ce(q,de))return;let fe=null;const Se=()=>(fe==null&&(fe=J(q)),fe[0]||q);let Z;De===!0||De===null?Z=Se():Z=ao(De),Z=Z||Se();const Fe=Ce(q,vt(K));ss(Z,{preventScroll:Z===q,shouldFocus(){if(Fe)return!0;const we=vt(K);return!(we!==Z&&Ce(q,we))}})})},[n,f,q,J,I,z]),ue(()=>{if(n||!q)return;const K=Le(q),de=vt(K);Xy(de);function le(me){if(me.open||(F.current=Qy(me.nativeEvent,H.current)),me.reason===Ye&&me.nativeEvent.type==="mouseleave"&&(W.current=!0),me.reason===Ii)if(me.nested)W.current=!1;else if(vu(me.nativeEvent)||Cu(me.nativeEvent))W.current=!1;else{let fe=!1;Le(q).createElement("div").focus({get preventScroll(){return fe=!0,!1}}),fe?W.current=!1:W.current=!0}}v.on("openchange",le);function De(){const me=N.current;let fe=typeof me=="function"?me(F.current):me;if(fe===void 0||fe===!1)return null;if(fe===null&&(fe=!0),typeof fe=="boolean")return w!=null&&w.isConnected?w:ua()||null;const Se=w!=null&&w.isConnected?w:ua();return ao(fe)||Se||null}return()=>{v.off("openchange",le);const me=vt(K),fe=Te(),Se=Ce(T,me)||fe.some(we=>we===me||Ce(we,me))||U&&Mo(U.nodesRef.current,S(),!1).some(we=>{var he;return Ce((he=we.context)==null?void 0:he.elements.floating,me)}),Z=N.current,Fe=De();queueMicrotask(()=>{const we=Zy(Fe),he=typeof Z!="boolean";Z&&!W.current&&Ve(we)&&(!(!he&&we!==me&&me!==K.body)||Se)&&we.focus({preventScroll:!0}),W.current=!1})}},[n,T,q,N,v,U,w,S,Te]),ue(()=>{if(!hu||f||!T)return;const K=vt(Le(T));!Ve(K)||!Is(K)||Ce(T,K)&&K.blur()},[f,T]),ue(()=>{if(!(n||!R))return R.setFocusManagerState({modal:i,closeOnFocusOut:m,open:f,onOpenChange:b.setOpen,domReference:w}),()=>{R.setFocusManagerState(null)}},[n,R,i,f,b,m,w]),ue(()=>{if(!(n||!q))return yc(q,D),()=>{queueMicrotask($i)}},[n,q,D]);const Re=!n&&(i?!P:!0)&&(Y||i);return u.jsxs(l.Fragment,{children:[Re&&u.jsx(Fo,{"data-type":"inside",ref:M,onFocus:K=>{var de;if(i){const le=J();ss(le[le.length-1])}else if(R!=null&&R.portalNode)if(W.current=!1,In(K,R.portalNode)){const le=ji(w);le==null||le.focus()}else(de=ao(p??R.beforeOutsideRef))==null||de.focus()}}),o,Re&&u.jsx(Fo,{"data-type":"inside",ref:L,onFocus:K=>{var de;if(i)ss(J()[0]);else if(R!=null&&R.portalNode)if(m&&(W.current=!0),In(K,R.portalNode)){const le=Bu(w);le==null||le.focus()}else(de=ao(c??R.afterOutsideRef))==null||de.focus()}})]})}function Ji(t,e={}){const{enabled:o=!0,event:n="click",toggle:r=!0,ignoreMouse:s=!1,stickIfOpen:a=!0,touchOpenDelay:i=0,reason:m=uo}=e,d="rootStore"in t?t.rootStore:t,c=d.context.dataRef,p=l.useRef(void 0),h=hr(),y=gt(),g=l.useMemo(()=>{function b(w,T,v,C){const S=Oe(m,T,v);w&&C==="touch"&&i>0?y.start(i,()=>{d.setOpen(!0,S)}):d.setOpen(w,S)}function f(w,T,v){const C=c.current.openEvent,S=d.select("domReferenceElement")!==T;return w&&S||!w||!r?!0:C&&a?!v(C.type):!1}return{onPointerDown(w){p.current=w.pointerType},onMouseDown(w){const T=p.current,v=w.nativeEvent,C=d.select("open");if(w.button!==0||n==="click"||cn(T,!0)&&s)return;const S=f(C,w.currentTarget,D=>D==="click"||D==="mousedown"),k=ht(v);if(Is(k)){b(S,v,k,T);return}const P=w.currentTarget;h.request(()=>{b(S,v,P,T)})},onClick(w){if(n==="mousedown-only")return;const T=p.current;if(n==="mousedown"&&T){p.current=void 0;return}if(cn(T,!0)&&s)return;const v=d.select("open"),C=f(v,w.currentTarget,S=>S==="click"||S==="mousedown"||S==="keydown"||S==="keyup");b(C,w.nativeEvent,w.currentTarget,T)},onKeyDown(){p.current=void 0}}},[c,n,s,m,d,a,r,h,y,i]);return l.useMemo(()=>o?{reference:g}:Je,[o,g])}function ew(t,e){let o=null,n=null,r=!1;return{contextElement:t||void 0,getBoundingClientRect(){var y;const s=(t==null?void 0:t.getBoundingClientRect())||{width:0,height:0,x:0,y:0},a=e.axis==="x"||e.axis==="both",i=e.axis==="y"||e.axis==="both",m=["mouseenter","mousemove"].includes(((y=e.dataRef.current.openEvent)==null?void 0:y.type)||"")&&e.pointerType!=="touch";let d=s.width,c=s.height,p=s.x,h=s.y;return o==null&&e.x&&a&&(o=s.x-e.x),n==null&&e.y&&i&&(n=s.y-e.y),p-=o||0,h-=n||0,d=0,c=0,!r||m?(d=e.axis==="y"?s.width:0,c=e.axis==="x"?s.height:0,p=a&&e.x!=null?e.x:p,h=i&&e.y!=null?e.y:h):r&&!m&&(c=e.axis==="x"?s.height:c,d=e.axis==="y"?s.width:d),r=!0,{width:d,height:c,x:p,y:h,top:h,right:p+d,bottom:h+c,left:p}}}}function wc(t){return t!=null&&t.clientX!=null}function tw(t,e={}){const{enabled:o=!0,axis:n="both"}=e,r="rootStore"in t?t.rootStore:t,s=r.useState("open"),a=r.useState("floatingElement"),i=r.useState("domReferenceElement"),m=r.context.dataRef,d=l.useRef(!1),c=l.useRef(null),[p,h]=l.useState(),[y,g]=l.useState([]),b=ke(C=>{r.set("positionReference",C)}),f=ke((C,S,k)=>{d.current||m.current.openEvent&&!wc(m.current.openEvent)||r.set("positionReference",ew(k??i,{x:C,y:S,axis:n,dataRef:m,pointerType:p}))}),w=ke(C=>{s?c.current||(f(C.clientX,C.clientY,C.currentTarget),g([])):f(C.clientX,C.clientY,C.currentTarget)}),T=cn(p)?a:s;l.useEffect(()=>{if(!o){b(i);return}if(!T)return;function C(){var P;(P=c.current)==null||P.call(c),c.current=null}const S=Ze(a);function k(P){const D=ht(P);Ce(a,D)?C():f(P.clientX,P.clientY)}return!m.current.openEvent||wc(m.current.openEvent)?c.current=Ne(S,"mousemove",k):b(i),C},[T,o,a,m,i,r,f,b,y]),l.useEffect(()=>()=>{r.set("positionReference",null)},[r]),l.useEffect(()=>{o&&!a&&(d.current=!1)},[o,a]),l.useEffect(()=>{!o&&s&&(d.current=!0)},[o,s]);const v=l.useMemo(()=>{function C(S){h(S.pointerType)}return{onPointerDown:C,onPointerEnter:C,onMouseMove:w,onMouseEnter:w}},[w]);return l.useMemo(()=>o?{reference:v,trigger:v}:{},[o,v])}const ow={intentional:"onClick",sloppy:"onPointerDown"};function nw(){return!1}function rw(t){return{escapeKey:typeof t=="boolean"?t:(t==null?void 0:t.escapeKey)??!1,outsidePress:typeof t=="boolean"?t:(t==null?void 0:t.outsidePress)??!0}}function Ms(t,e={}){const{enabled:o=!0,escapeKey:n=!0,outsidePress:r=!0,outsidePressEvent:s="sloppy",referencePress:a=nw,referencePressEvent:i="sloppy",bubbles:m,externalTree:d}=e,c="rootStore"in t?t.rootStore:t,p=c.useState("open"),h=c.useState("floatingElement"),{dataRef:y}=c.context,g=zo(d),b=ke(typeof r=="function"?r:()=>!1),f=typeof r=="function"?b:r,w=f!==!1,T=ke(()=>s),{escapeKey:v,outsidePress:C}=rw(m),S=l.useRef(!1),k=l.useRef(!1),P=l.useRef(!1),D=l.useRef(!1),I=l.useRef(""),N=l.useRef(null),z=gt(),U=gt(),R=ke(()=>{U.clear(),y.current.insideReactTree=!1}),W=ke(L=>{var B;const V=(B=y.current.floatingContext)==null?void 0:B.nodeId;return(g?Mo(g.nodesRef.current,V):[]).some(Y=>{var q;return((q=Y.context)==null?void 0:q.open)&&!Y.context.dataRef.current[L]})}),O=ke(L=>ra(L,c.select("floatingElement"))||ra(L,c.select("domReferenceElement"))),j=ke(L=>{a()&&c.setOpen(!1,Oe(uo,L.nativeEvent))}),x=ke(L=>{if(!p||!o||!n||L.key!=="Escape"||D.current||!v&&W("__escapeKeyBubbles"))return;const V=jb(L)?L.nativeEvent:L,_=Oe(Rr,V);c.setOpen(!1,_),_.isCanceled||L.preventDefault(),!v&&!_.isPropagationAllowed&&L.stopPropagation()}),F=ke(()=>{y.current.insideReactTree=!0,U.start(0,R)}),H=ke(L=>{if(!p||!o||L.button!==0)return;const V=ht(L.nativeEvent);Ce(c.select("floatingElement"),V)&&(S.current||(S.current=!0,k.current=!1))}),A=ke(L=>{!p||!o||(L.defaultPrevented||L.nativeEvent.defaultPrevented)&&S.current&&(k.current=!0)});l.useEffect(()=>{if(!p||!o)return;y.current.__escapeKeyBubbles=v,y.current.__outsidePressBubbles=C;const L=new Mt,V=new Mt;function _(){L.clear(),D.current=!0}function B(){L.start(As()?5:0,()=>{D.current=!1})}function Y(){P.current=!0,V.start(0,()=>{P.current=!1})}function q(){S.current=!1,k.current=!1}function J(){const $=I.current,ee=$==="pen"||!$?"mouse":$,te=T(),G=typeof te=="function"?te():te;return typeof G=="string"?G:G[ee]}function Te($){const ee=J();return ee==="intentional"&&$.type!=="click"||ee==="sloppy"&&$.type==="click"}function Re($){var G;const ee=(G=y.current.floatingContext)==null?void 0:G.nodeId,te=g&&Mo(g.nodesRef.current,ee).some(ge=>{var xe;return ra($,(xe=ge.context)==null?void 0:xe.elements.floating)});return O($)||te}function K($){if(Te($)){$.type!=="click"&&!O($)&&(V.clear(),P.current=!1),R();return}if(y.current.insideReactTree){R();return}const ee=ht($),te=`[${gr("inert")}]`,G=Ae(ee)?ee.getRootNode():null,ge=Array.from((Jn(G)?G:Le(c.select("floatingElement"))).querySelectorAll(te)),xe=c.context.triggerElements;if(ee&&(xe.hasElement(ee)||xe.hasMatchingElement(ze=>Ce(ze,ee))))return;let Ke=Ae(ee)?ee:null;for(;Ke&&!Qt(Ke);){const ze=to(Ke);if(Qt(ze)||!Ae(ze))break;Ke=ze}if(!(ge.length&&Ae(ee)&&!qb(ee)&&!Ce(ee,c.select("floatingElement"))&&ge.every(ze=>!Ce(Ke,ze)))){if(Ve(ee)&&!("touches"in $)){const ze=Qt(ee),Ge=kt(ee),it=/auto|scroll/,It=ze||it.test(Ge.overflowX),Bt=ze||it.test(Ge.overflowY),Vt=It&&ee.clientWidth>0&&ee.scrollWidth>ee.clientWidth,ho=Bt&&ee.clientHeight>0&&ee.scrollHeight>ee.clientHeight,St=Ge.direction==="rtl",Tn=ho&&(St?$.offsetX<=ee.offsetWidth-ee.clientWidth:$.offsetX>ee.clientWidth),je=Vt&&$.offsetY>ee.clientHeight;if(Tn||je)return}if(!Re($)){if(J()==="intentional"&&P.current){V.clear(),P.current=!1;return}typeof f=="function"&&!f($)||W("__outsidePressBubbles")||(c.setOpen(!1,Oe(Ii,$)),R())}}}function de($){J()!=="sloppy"||$.pointerType==="touch"||!c.select("open")||!o||O($)||K($)}function le($){if(J()!=="sloppy"||!c.select("open")||!o||O($))return;const ee=$.touches[0];ee&&(N.current={startTime:Date.now(),startX:ee.clientX,startY:ee.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},z.start(1e3,()=>{N.current&&(N.current.dismissOnTouchEnd=!1,N.current.dismissOnMouseDown=!1)}))}function De($,ee){const te=ht($);if(!te)return;const G=Ne(te,$.type,()=>{ee($),G()})}function me($){I.current="touch",De($,le)}function fe($){z.clear(),$.type==="pointerdown"&&(I.current=$.pointerType),!($.type==="mousedown"&&N.current&&!N.current.dismissOnMouseDown)&&De($,ee=>{ee.type==="pointerdown"?de(ee):K(ee)})}function Se($){if(!S.current)return;const ee=k.current;if(q(),J()==="intentional"){if($.type==="pointercancel"){ee&&Y();return}if(!Re($)){if(ee){Y();return}typeof f=="function"&&!f($)||(V.clear(),P.current=!0,R())}}}function Z($){if(J()!=="sloppy"||!N.current||O($))return;const ee=$.touches[0];if(!ee)return;const te=Math.abs(ee.clientX-N.current.startX),G=Math.abs(ee.clientY-N.current.startY),ge=Math.sqrt(te*te+G*G);ge>5&&(N.current.dismissOnTouchEnd=!0),ge>10&&(K($),z.clear(),N.current=null)}function Fe($){De($,Z)}function we($){J()!=="sloppy"||!N.current||O($)||(N.current.dismissOnTouchEnd&&K($),z.clear(),N.current=null)}function he($){De($,we)}const Pe=Le(h),se=Xt(n&&Xt(Ne(Pe,"keydown",x),Ne(Pe,"compositionstart",_),Ne(Pe,"compositionend",B)),w&&Xt(Ne(Pe,"click",fe,!0),Ne(Pe,"pointerdown",fe,!0),Ne(Pe,"pointerup",Se,!0),Ne(Pe,"pointercancel",Se,!0),Ne(Pe,"mousedown",fe,!0),Ne(Pe,"mouseup",Se,!0),Ne(Pe,"touchstart",me,!0),Ne(Pe,"touchmove",Fe,!0),Ne(Pe,"touchend",he,!0)));return()=>{se(),L.clear(),V.clear(),q(),P.current=!1}},[y,h,n,w,f,p,o,v,C,x,R,T,W,O,g,c,z]),l.useEffect(R,[f,R]);const Q=l.useMemo(()=>({onKeyDown:x,[ow[i]]:j,...i!=="intentional"&&{onClick:j}}),[x,j,i]),M=l.useMemo(()=>({onKeyDown:x,onPointerDown:A,onMouseDown:A,onClickCapture:F,onMouseDownCapture(L){F(),H(L)},onPointerDownCapture(L){F(),H(L)},onMouseUpCapture:F,onTouchEndCapture:F,onTouchMoveCapture:F}),[x,F,H,A]);return l.useMemo(()=>o?{reference:Q,floating:M,trigger:Q}:{},[o,Q,M])}function vc(t,e,o){let{reference:n,floating:r}=t;const s=Ft(e),a=Ui(e),i=Mi(a),m=Ct(e),d=s==="y",c=n.x+n.width/2-r.width/2,p=n.y+n.height/2-r.height/2,h=n[i]/2-r[i]/2;let y;switch(m){case"top":y={x:c,y:n.y-r.height};break;case"bottom":y={x:c,y:n.y+n.height};break;case"right":y={x:n.x+n.width,y:p};break;case"left":y={x:n.x-r.width,y:p};break;default:y={x:n.x,y:n.y}}switch(_o(e)){case"start":y[a]-=h*(o&&d?-1:1);break;case"end":y[a]+=h*(o&&d?-1:1);break}return y}async function sw(t,e){var o;e===void 0&&(e={});const{x:n,y:r,platform:s,rects:a,elements:i,strategy:m}=t,{boundary:d="clippingAncestors",rootBoundary:c="viewport",elementContext:p="floating",altBoundary:h=!1,padding:y=0}=po(e,t),g=Iu(y),f=i[h?p==="floating"?"reference":"floating":p],w=hs(await s.getClippingRect({element:(o=await(s.isElement==null?void 0:s.isElement(f)))==null||o?f:f.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(i.floating)),boundary:d,rootBoundary:c,strategy:m})),T=p==="floating"?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(i.floating)),C=await(s.isElement==null?void 0:s.isElement(v))?await(s.getScale==null?void 0:s.getScale(v))||{x:1,y:1}:{x:1,y:1},S=hs(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:i,rect:T,offsetParent:v,strategy:m}):T);return{top:(w.top-S.top+g.top)/C.y,bottom:(S.bottom-w.bottom+g.bottom)/C.y,left:(w.left-S.left+g.left)/C.x,right:(S.right-w.right+g.right)/C.x}}const aw=50,iw=async(t,e,o)=>{const{placement:n="bottom",strategy:r="absolute",middleware:s=[],platform:a}=o,i=a.detectOverflow?a:{...a,detectOverflow:sw},m=await(a.isRTL==null?void 0:a.isRTL(e));let d=await a.getElementRects({reference:t,floating:e,strategy:r}),{x:c,y:p}=vc(d,n,m),h=n,y=0;const g={};for(let b=0;bW<=0)){var z,U;const W=(((z=s.flip)==null?void 0:z.index)||0)+1,O=P[W];if(O&&(!(p==="alignment"?T!==Ft(O):!1)||N.every(F=>Ft(F.placement)===T?F.overflows[0]>0:!0)))return{data:{index:W,overflows:N},reset:{placement:O}};let j=(U=N.filter(x=>x.overflows[0]<=0).sort((x,F)=>x.overflows[1]-F.overflows[1])[0])==null?void 0:U.placement;if(!j)switch(y){case"bestFit":{var R;const x=(R=N.filter(F=>{if(k){const H=Ft(F.placement);return H===T||H==="y"}return!0}).map(F=>[F.placement,F.overflows.filter(H=>H>0).reduce((H,A)=>H+A,0)]).sort((F,H)=>F[1]-H[1])[0])==null?void 0:R[0];x&&(j=x);break}case"initialPlacement":j=i;break}if(r!==j)return{reset:{placement:j}}}return{}}}};function Cc(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Tc(t){return ly.some(e=>t[e]>=0)}const cw=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:o,platform:n}=e,{strategy:r="referenceHidden",...s}=po(t,e);switch(r){case"referenceHidden":{const a=await n.detectOverflow(e,{...s,elementContext:"reference"}),i=Cc(a,o.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:Tc(i)}}}case"escaped":{const a=await n.detectOverflow(e,{...s,altBoundary:!0}),i=Cc(a,o.floating);return{data:{escapedOffsets:i,escaped:Tc(i)}}}default:return{}}}}},sp=new Set(["left","top"]);async function dw(t,e){const{placement:o,platform:n,elements:r}=t,s=await(n.isRTL==null?void 0:n.isRTL(r.floating)),a=Ct(o),i=_o(o),m=Ft(o)==="y",d=sp.has(a)?-1:1,c=s&&m?-1:1,p=po(e,t);let{mainAxis:h,crossAxis:y,alignmentAxis:g}=typeof p=="number"?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return i&&typeof g=="number"&&(y=i==="end"?g*-1:g),m?{x:y*c,y:h*d}:{x:h*d,y:y*c}}const uw=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var o,n;const{x:r,y:s,placement:a,middlewareData:i}=e,m=await dw(e,t);return a===((o=i.offset)==null?void 0:o.placement)&&(n=i.arrow)!=null&&n.alignmentOffset?{}:{x:r+m.x,y:s+m.y,data:{...m,placement:a}}}}},pw=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:o,y:n,placement:r,platform:s}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:m={fn:w=>{let{x:T,y:v}=w;return{x:T,y:v}}},...d}=po(t,e),c={x:o,y:n},p=await s.detectOverflow(e,d),h=Ft(Ct(r)),y=Fi(h);let g=c[y],b=c[h];if(a){const w=y==="y"?"top":"left",T=y==="y"?"bottom":"right",v=g+p[w],C=g-p[T];g=oi(v,g,C)}if(i){const w=h==="y"?"top":"left",T=h==="y"?"bottom":"right",v=b+p[w],C=b-p[T];b=oi(v,b,C)}const f=m.fn({...e,[y]:g,[h]:b});return{...f,data:{x:f.x-o,y:f.y-n,enabled:{[y]:a,[h]:i}}}}}},mw=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:o,y:n,placement:r,rects:s,middlewareData:a}=e,{offset:i=0,mainAxis:m=!0,crossAxis:d=!0}=po(t,e),c={x:o,y:n},p=Ft(r),h=Fi(p);let y=c[h],g=c[p];const b=po(i,e),f=typeof b=="number"?{mainAxis:b,crossAxis:0}:{mainAxis:0,crossAxis:0,...b};if(m){const v=h==="y"?"height":"width",C=s.reference[h]-s.floating[v]+f.mainAxis,S=s.reference[h]+s.reference[v]-f.mainAxis;yS&&(y=S)}if(d){var w,T;const v=h==="y"?"width":"height",C=sp.has(Ct(r)),S=s.reference[p]-s.floating[v]+(C&&((w=a.offset)==null?void 0:w[p])||0)+(C?0:f.crossAxis),k=s.reference[p]+s.reference[v]+(C?0:((T=a.offset)==null?void 0:T[p])||0)-(C?f.crossAxis:0);gk&&(g=k)}return{[h]:y,[p]:g}}}},fw=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var o,n;const{placement:r,rects:s,platform:a,elements:i}=e,{apply:m=()=>{},...d}=po(t,e),c=await a.detectOverflow(e,d),p=Ct(r),h=_o(r),y=Ft(r)==="y",{width:g,height:b}=s.floating;let f,w;p==="top"||p==="bottom"?(f=p,w=h===(await(a.isRTL==null?void 0:a.isRTL(i.floating))?"start":"end")?"left":"right"):(w=p,f=h==="end"?"top":"bottom");const T=b-c.top-c.bottom,v=g-c.left-c.right,C=Yn(b-c[f],T),S=Yn(g-c[w],v),k=!e.middlewareData.shift;let P=C,D=S;if((o=e.middlewareData.shift)!=null&&o.enabled.x&&(D=v),(n=e.middlewareData.shift)!=null&&n.enabled.y&&(P=T),k&&!h){const N=At(c.left,0),z=At(c.right,0),U=At(c.top,0),R=At(c.bottom,0);y?D=g-2*(N!==0||z!==0?N+z:At(c.left,c.right)):P=b-2*(U!==0||R!==0?U+R:At(c.top,c.bottom))}await m({...e,availableWidth:D,availableHeight:P});const I=await a.getDimensions(i.floating);return g!==I.width||b!==I.height?{reset:{rects:!0}}:{}}}};function ap(t){const e=kt(t);let o=parseFloat(e.width)||0,n=parseFloat(e.height)||0;const r=Ve(t),s=r?t.offsetWidth:o,a=r?t.offsetHeight:n,i=ms(o)!==s||ms(n)!==a;return i&&(o=s,n=a),{width:o,height:n,$:i}}function Gi(t){return Ae(t)?t:t.contextElement}function On(t){const e=Gi(t);if(!Ve(e))return Zt(1);const o=e.getBoundingClientRect(),{width:n,height:r,$:s}=ap(e);let a=(s?ms(o.width):o.width)/n,i=(s?ms(o.height):o.height)/r;return(!a||!Number.isFinite(a))&&(a=1),(!i||!Number.isFinite(i))&&(i=1),{x:a,y:i}}const hw=Zt(0);function ip(t){const e=Ze(t);return!As()||!e.visualViewport?hw:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function gw(t,e,o){return e===void 0&&(e=!1),!o||e&&o!==Ze(t)?!1:e}function pn(t,e,o,n){e===void 0&&(e=!1),o===void 0&&(o=!1);const r=t.getBoundingClientRect(),s=Gi(t);let a=Zt(1);e&&(n?Ae(n)&&(a=On(n)):a=On(t));const i=gw(s,o,n)?ip(s):Zt(0);let m=(r.left+i.x)/a.x,d=(r.top+i.y)/a.y,c=r.width/a.x,p=r.height/a.y;if(s){const h=Ze(s),y=n&&Ae(n)?Ze(n):n;let g=h,b=Ya(g);for(;b&&n&&y!==g;){const f=On(b),w=b.getBoundingClientRect(),T=kt(b),v=w.left+(b.clientLeft+parseFloat(T.paddingLeft))*f.x,C=w.top+(b.clientTop+parseFloat(T.paddingTop))*f.y;m*=f.x,d*=f.y,c*=f.x,p*=f.y,m+=v,d+=C,g=Ze(b),b=Ya(g)}}return hs({width:c,height:p,x:m,y:d})}function Us(t,e){const o=Ns(t).scrollLeft;return e?e.left+o:pn(oo(t)).left+o}function lp(t,e){const o=t.getBoundingClientRect(),n=o.left+e.scrollLeft-Us(t,o),r=o.top+e.scrollTop;return{x:n,y:r}}function bw(t){let{elements:e,rect:o,offsetParent:n,strategy:r}=t;const s=r==="fixed",a=oo(n),i=e?Es(e.floating):!1;if(n===a||i&&s)return o;let m={scrollLeft:0,scrollTop:0},d=Zt(1);const c=Zt(0),p=Ve(n);if((p||!p&&!s)&&((ut(n)!=="body"||jo(a))&&(m=Ns(n)),p)){const y=pn(n);d=On(n),c.x=y.x+n.clientLeft,c.y=y.y+n.clientTop}const h=a&&!p&&!s?lp(a,m):Zt(0);return{width:o.width*d.x,height:o.height*d.y,x:o.x*d.x-m.scrollLeft*d.x+c.x+h.x,y:o.y*d.y-m.scrollTop*d.y+c.y+h.y}}function yw(t){return Array.from(t.getClientRects())}function ww(t){const e=oo(t),o=Ns(t),n=t.ownerDocument.body,r=At(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),s=At(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let a=-o.scrollLeft+Us(t);const i=-o.scrollTop;return kt(n).direction==="rtl"&&(a+=At(e.clientWidth,n.clientWidth)-r),{width:r,height:s,x:a,y:i}}const kc=25;function vw(t,e){const o=Ze(t),n=oo(t),r=o.visualViewport;let s=n.clientWidth,a=n.clientHeight,i=0,m=0;if(r){s=r.width,a=r.height;const c=As();(!c||c&&e==="fixed")&&(i=r.offsetLeft,m=r.offsetTop)}const d=Us(n);if(d<=0){const c=n.ownerDocument,p=c.body,h=getComputedStyle(p),y=c.compatMode==="CSS1Compat"&&parseFloat(h.marginLeft)+parseFloat(h.marginRight)||0,g=Math.abs(n.clientWidth-p.clientWidth-y);g<=kc&&(s-=g)}else d<=kc&&(s+=d);return{width:s,height:a,x:i,y:m}}function Cw(t,e){const o=pn(t,!0,e==="fixed"),n=o.top+t.clientTop,r=o.left+t.clientLeft,s=Ve(t)?On(t):Zt(1),a=t.clientWidth*s.x,i=t.clientHeight*s.y,m=r*s.x,d=n*s.y;return{width:a,height:i,x:m,y:d}}function Sc(t,e,o){let n;if(e==="viewport")n=vw(t,o);else if(e==="document")n=ww(oo(t));else if(Ae(e))n=Cw(e,o);else{const r=ip(t);n={x:e.x-r.x,y:e.y-r.y,width:e.width,height:e.height}}return hs(n)}function cp(t,e){const o=to(t);return o===e||!Ae(o)||Qt(o)?!1:kt(o).position==="fixed"||cp(o,e)}function Tw(t,e){const o=e.get(t);if(o)return o;let n=fr(t,[],!1).filter(i=>Ae(i)&&ut(i)!=="body"),r=null;const s=kt(t).position==="fixed";let a=s?to(t):t;for(;Ae(a)&&!Qt(a);){const i=kt(a),m=Ei(a);!m&&i.position==="fixed"&&(r=null),(s?!m&&!r:!m&&i.position==="static"&&!!r&&(r.position==="absolute"||r.position==="fixed")||jo(a)&&!m&&cp(t,a))?n=n.filter(c=>c!==a):r=i,a=to(a)}return e.set(t,n),n}function kw(t){let{element:e,boundary:o,rootBoundary:n,strategy:r}=t;const a=[...o==="clippingAncestors"?Es(e)?[]:Tw(e,this._c):[].concat(o),n],i=Sc(e,a[0],r);let m=i.top,d=i.right,c=i.bottom,p=i.left;for(let h=1;h{a(!1,1e-7)},1e3)}P===1&&!up(d,t.getBoundingClientRect())&&a(),C=!1}try{o=new IntersectionObserver(S,{...v,root:r.ownerDocument})}catch{o=new IntersectionObserver(S,v)}o.observe(t)}return a(!0),s}function Dc(t,e,o,n){n===void 0&&(n={});const{ancestorScroll:r=!0,ancestorResize:s=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:m=!1}=n,d=Gi(t),c=r||s?[...d?fr(d):[],...e?fr(e):[]]:[];c.forEach(w=>{r&&w.addEventListener("scroll",o,{passive:!0}),s&&w.addEventListener("resize",o)});const p=d&&i?Ew(d,o):null;let h=-1,y=null;a&&(y=new ResizeObserver(w=>{let[T]=w;T&&T.target===d&&y&&e&&(y.unobserve(e),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var v;(v=y)==null||v.observe(e)})),o()}),d&&!m&&y.observe(d),e&&y.observe(e));let g,b=m?pn(t):null;m&&f();function f(){const w=pn(t);b&&!up(b,w)&&o(),b=w,g=requestAnimationFrame(f)}return o(),()=>{var w;c.forEach(T=>{r&&T.removeEventListener("scroll",o),s&&T.removeEventListener("resize",o)}),p==null||p(),(w=y)==null||w.disconnect(),y=null,m&&cancelAnimationFrame(g)}}const Aw=uw,Nw=pw,Iw=lw,Ow=fw,Fw=cw,Mw=mw,Uw=(t,e,o)=>{const n=new Map,r={platform:Rw,...o},s={...r.platform,_c:n};return iw(t,e,{...r,platform:s})};var Lw=typeof document<"u",jw=function(){},as=Lw?l.useLayoutEffect:jw;function ws(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let o,n,r;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(o=t.length,o!==e.length)return!1;for(n=o;n--!==0;)if(!ws(t[n],e[n]))return!1;return!0}if(r=Object.keys(t),o=r.length,o!==Object.keys(e).length)return!1;for(n=o;n--!==0;)if(!{}.hasOwnProperty.call(e,r[n]))return!1;for(n=o;n--!==0;){const s=r[n];if(!(s==="_owner"&&t.$$typeof)&&!ws(t[s],e[s]))return!1}return!0}return t!==t&&e!==e}function pp(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function Pc(t,e){const o=pp(t);return Math.round(e*o)/o}function ma(t){const e=l.useRef(t);return as(()=>{e.current=t}),e}function _w(t){t===void 0&&(t={});const{placement:e="bottom",strategy:o="absolute",middleware:n=[],platform:r,elements:{reference:s,floating:a}={},transform:i=!0,whileElementsMounted:m,open:d}=t,[c,p]=l.useState({x:0,y:0,strategy:o,placement:e,middlewareData:{},isPositioned:!1}),[h,y]=l.useState(n);ws(h,n)||y(n);const[g,b]=l.useState(null),[f,w]=l.useState(null),T=l.useCallback(F=>{F!==k.current&&(k.current=F,b(F))},[]),v=l.useCallback(F=>{F!==P.current&&(P.current=F,w(F))},[]),C=s||g,S=a||f,k=l.useRef(null),P=l.useRef(null),D=l.useRef(c),I=m!=null,N=ma(m),z=ma(r),U=ma(d),R=l.useCallback(()=>{if(!k.current||!P.current)return;const F={placement:e,strategy:o,middleware:h};z.current&&(F.platform=z.current),Uw(k.current,P.current,F).then(H=>{const A={...H,isPositioned:U.current!==!1};W.current&&!ws(D.current,A)&&(D.current=A,_t.flushSync(()=>{p(A)}))})},[h,e,o,z,U]);as(()=>{d===!1&&D.current.isPositioned&&(D.current.isPositioned=!1,p(F=>({...F,isPositioned:!1})))},[d]);const W=l.useRef(!1);as(()=>(W.current=!0,()=>{W.current=!1}),[]),as(()=>{if(C&&(k.current=C),S&&(P.current=S),C&&S){if(N.current)return N.current(C,S,R);R()}},[C,S,R,N,I]);const O=l.useMemo(()=>({reference:k,floating:P,setReference:T,setFloating:v}),[T,v]),j=l.useMemo(()=>({reference:C,floating:S}),[C,S]),x=l.useMemo(()=>{const F={position:o,left:0,top:0};if(!j.floating)return F;const H=Pc(j.floating,c.x),A=Pc(j.floating,c.y);return i?{...F,transform:"translate("+H+"px, "+A+"px)",...pp(j.floating)>=1.5&&{willChange:"transform"}}:{position:o,left:H,top:A}},[o,i,j.floating,c.x,c.y]);return l.useMemo(()=>({...c,update:R,refs:O,elements:j,floatingStyles:x}),[c,R,O,j,x])}const zw=(t,e)=>{const o=Aw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Bw=(t,e)=>{const o=Nw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Vw=(t,e)=>({fn:Mw(t).fn,options:[t,e]}),Ww=(t,e)=>{const o=Iw(t);return{name:o.name,fn:o.fn,options:[t,e]}},qw=(t,e)=>{const o=Ow(t);return{name:o.name,fn:o.fn,options:[t,e]}},Hw=(t,e)=>{const o=Fw(t);return{name:o.name,fn:o.fn,options:[t,e]}},oe=(t,e,o,n,r,s,...a)=>{if(a.length>0)throw new Error(rt(1));let i;if(t)i=t;else throw new Error("Missing arguments");return i};var mp=Rf();const $w=_i(19),Kw=$w?Gw:Yw;function fp(t,e,o,n,r){return Kw(t,e,o,n,r)}function Jw(t,e,o,n,r){const s=l.useCallback(()=>e(t.getSnapshot(),o,n,r),[t,e,o,n,r]);return mp.useSyncExternalStore(t.subscribe,s,s)}Ab({before(t){t.syncIndex=0,t.didInitialize||(t.syncTick=1,t.syncHooks=[],t.didChangeStore=!0,t.getSnapshot=()=>{let e=!1;for(let o=0;o0&&(t.didChangeStore&&(t.didChangeStore=!1,t.subscribe=e=>{const o=new Set;for(const r of t.syncHooks)o.add(r.store);const n=[];for(const r of o)n.push(r.subscribe(e));return()=>{for(const r of n)r()}}),mp.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot))}});function Gw(t,e,o,n,r){const s=Eb();if(!s)return Jw(t,e,o,n,r);const a=s.syncIndex;s.syncIndex+=1;let i;return s.didInitialize?(i=s.syncHooks[a],(i.store!==t||i.selector!==e||!Object.is(i.a1,o)||!Object.is(i.a2,n)||!Object.is(i.a3,r))&&(i.store!==t&&(s.didChangeStore=!0),i.store=t,i.selector=e,i.a1=o,i.a2=n,i.a3=r,i.didChange=!0)):(i={store:t,selector:e,a1:o,a2:n,a3:r,value:e(t.getSnapshot(),o,n,r),didChange:!1},s.syncHooks.push(i)),i.value}function Yw(t,e,o,n,r){return Ef.useSyncExternalStoreWithSelector(t.subscribe,t.getSnapshot,t.getSnapshot,s=>e(s,o,n,r))}class Qw{constructor(e){_e(this,"subscribe",e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}));_e(this,"getSnapshot",()=>this.state);this.state=e,this.listeners=new Set,this.updateTick=0}setState(e){if(this.state===e)return;this.state=e,this.updateTick+=1;const o=this.updateTick;for(const n of this.listeners){if(o!==this.updateTick)return;n(e)}}update(e){for(const o in e)if(!Object.is(this.state[o],e[o])){this.setState({...this.state,...e});return}}set(e,o){Object.is(this.state[e],o)||this.setState({...this.state,[e]:o})}notifyAll(){const e={...this.state};this.setState(e)}use(e,o,n,r){return fp(this,e,o,n,r)}}class Ar extends Qw{constructor(e,o={},n){super(e),this.context=o,this.selectors=n}useSyncedValue(e,o){l.useDebugValue(e);const n=this;ue(()=>{n.state[e]!==o&&n.set(e,o)},[n,e,o])}useSyncedValueWithCleanup(e,o){const n=this;ue(()=>(n.state[e]!==o&&n.set(e,o),()=>{n.set(e,void 0)}),[n,e,o])}useSyncedValues(e){const o=this,n=Object.values(e);ue(()=>{o.update(e)},[o,...n])}useControlledProp(e,o){l.useDebugValue(e);const n=this,r=o!==void 0;ue(()=>{r&&!Object.is(n.state[e],o)&&n.setState({...n.state,[e]:o})},[n,e,o,r])}select(e,o,n,r){const s=this.selectors[e];return s(this.state,o,n,r)}useState(e,o,n,r){return l.useDebugValue(e),fp(this,this.selectors[e],o,n,r)}useContextCallback(e,o){l.useDebugValue(e);const n=ke(o??Ni);this.context[e]=n}useStateSetter(e){const o=l.useRef(void 0);return o.current===void 0&&(o.current=n=>{this.set(e,n)}),o.current}observe(e,o){let n;typeof e=="function"?n=e:n=this.selectors[e];let r=n(this.state);return o(r,r,this),this.subscribe(s=>{const a=n(s);if(!Object.is(r,a)){const i=r;r=a,o(a,i,this)}})}}const Xw={open:oe(t=>t.open),transitionStatus:oe(t=>t.transitionStatus),domReferenceElement:oe(t=>t.domReferenceElement),referenceElement:oe(t=>t.positionReference??t.referenceElement),floatingElement:oe(t=>t.floatingElement),floatingId:oe(t=>t.floatingId)};class Ls extends Ar{constructor(o){const{syncOnly:n,nested:r,onOpenChange:s,triggerElements:a,...i}=o;super({...i,positionReference:i.referenceElement,domReferenceElement:i.referenceElement},{onOpenChange:s,dataRef:{current:{}},events:ep(),nested:r,triggerElements:a},Xw);_e(this,"syncOpenEvent",(o,n)=>{(!o||!this.state.open||n!=null&&_b(n))&&(this.context.dataRef.current.openEvent=o?n:void 0)});_e(this,"dispatchOpenChange",(o,n)=>{this.syncOpenEvent(o,n.event);const r={open:o,reason:n.reason,nativeEvent:n.event,nested:this.context.nested,triggerElement:n.trigger};this.context.events.emit("openchange",r)});_e(this,"setOpen",(o,n)=>{var r,s,a,i;if(this.syncOnly){(s=(r=this.context).onOpenChange)==null||s.call(r,o,n);return}this.dispatchOpenChange(o,n),(i=(a=this.context).onOpenChange)==null||i.call(a,o,n)});this.syncOnly=n}}function hp(t){const{popupStore:e,treatPopupAsFloatingElement:o=!1,floatingRootContext:n,floatingId:r,nested:s,onOpenChange:a}=t,i=e.useState("open"),m=e.useState("activeTriggerElement"),d=e.useState(o?"popupElement":"positionerElement"),c=e.context.triggerElements,p=a,h=l.useRef(null);n===void 0&&h.current===null&&(h.current=new Ls({open:i,transitionStatus:void 0,referenceElement:m,floatingElement:d,triggerElements:c,onOpenChange:p,floatingId:r,syncOnly:!0,nested:s}));const y=n??h.current;return e.useSyncedValue("floatingId",r),ue(()=>{const g={open:i,floatingId:r,referenceElement:m,floatingElement:d};Ae(m)&&(g.domReferenceElement=m),y.state.positionReference===y.state.referenceElement&&(g.positionReference=m),y.update(g)},[i,r,m,d,y]),y.context.onOpenChange=p,y.context.nested=s,y}function Zw(t,e=!1,o=!1){const[n,r]=l.useState(t&&e?"idle":void 0),[s,a]=l.useState(t);return t&&!s&&(a(!0),r("starting")),!t&&s&&n!=="ending"&&!o&&r("ending"),!t&&!s&&n==="ending"&&r(void 0),ue(()=>{if(!t&&s&&n!=="ending"&&o){const i=Gt.request(()=>{r("ending")});return()=>{Gt.cancel(i)}}},[t,s,n,o]),ue(()=>{if(!t||e)return;const i=Gt.request(()=>{r(void 0)});return()=>{Gt.cancel(i)}},[e,t]),ue(()=>{if(!t||!e)return;t&&s&&n!=="idle"&&r("starting");const i=Gt.request(()=>{r("idle")});return()=>{Gt.cancel(i)}},[e,t,s,n]),{mounted:s,setMounted:a,transitionStatus:n}}let br=(function(t){return t.startingStyle="data-starting-style",t.endingStyle="data-ending-style",t})({});const ev={[br.startingStyle]:""},tv={[br.endingStyle]:""},Nr={transitionStatus(t){return t==="starting"?ev:t==="ending"?tv:null}};function Yi(t,e=!1,o=!0){const n=hr();return ke((r,s=null)=>{n.cancel();const a=ao(t);if(a==null)return;const i=a,m=()=>{_t.flushSync(r)};if(typeof i.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){r();return}function d(){Promise.all(i.getAnimations().map(c=>c.finished)).then(()=>{s!=null&&s.aborted||m()}).catch(()=>{if(o){s!=null&&s.aborted||m();return}const c=i.getAnimations();!(s!=null&&s.aborted)&&c.length>0&&c.some(p=>p.pending||p.playState!=="finished")&&d()})}if(e){const c=br.startingStyle;if(!i.hasAttribute(c)){n.request(d);return}const p=new MutationObserver(()=>{i.hasAttribute(c)||(p.disconnect(),d())});p.observe(i,{attributes:!0,attributeFilter:[c]}),s==null||s.addEventListener("abort",()=>p.disconnect(),{once:!0});return}n.request(d)})}function Ir(t){const{enabled:e=!0,open:o,ref:n,onComplete:r}=t,s=ke(r),a=Yi(n,o,!1);l.useEffect(()=>{if(!e)return;const i=new AbortController;return a(s,i.signal),()=>{i.abort()}},[e,o,s,a])}const Zn={tabIndex:-1,[Qa]:""};function Qi(t,e,o=!1){const n=un(),r=mo()!=null,s=l.useRef(null);t===void 0&&s.current===null&&(s.current=e(n,r));const a=t??s.current;return hp({popupStore:a,treatPopupAsFloatingElement:o,floatingRootContext:a.state.floatingRootContext,floatingId:n,nested:r,onOpenChange:a.setOpen}),{store:a,internalStore:s.current}}function gp(t,e){const o=l.useRef(null),n=l.useRef(null);return l.useCallback(r=>{if(t===void 0)return;let s=!1;if(o.current!==null){const a=o.current,i=n.current,m=e.context.triggerElements.getById(a);i&&m===i&&(e.context.triggerElements.delete(a),s=!0),o.current=null,n.current=null}if(r!==null&&(o.current=t,n.current=r,e.context.triggerElements.add(t,r),s=!0),s){const a=e.context.triggerElements.size;e.select("open")&&e.state.triggerCount!==a&&e.set("triggerCount",a)}},[e,t])}function Xi(t,e,o){const n=(o==null?void 0:o.id)??null;(n||e)&&(t.activeTriggerId=n,t.activeTriggerElement=o??null)}function Zi(t,e,o,n){const r=o.useState("isMountedByTrigger",t),s=gp(t,o),a=ke(i=>{if(s(i),!i)return;const m=o.select("open"),d=o.select("activeTriggerId");if(d===t){o.update({activeTriggerElement:i,...m?n:null});return}d==null&&m&&o.update({activeTriggerId:t,activeTriggerElement:i,...n})});return ue(()=>{r&&o.update({activeTriggerElement:e.current,...n})},[r,o,e,...Object.values(n)]),{registerTrigger:a,isMountedByThisTrigger:r}}function js(t){const e=t.useState("open"),o=t.useState("triggerCount");ue(()=>{if(!e){t.state.triggerCount!==0&&t.set("triggerCount",0);return}const n=t.context.triggerElements.size,r={};if(t.state.triggerCount!==n&&(r.triggerCount=n),!t.select("activeTriggerId")&&n===1){const s=t.context.triggerElements.entries().next();if(!s.done){const[a,i]=s.value;r.activeTriggerId=a,r.activeTriggerElement=i}}(r.triggerCount!==void 0||r.activeTriggerId!==void 0)&&t.update(r)},[e,t,o])}function _s(t,e,o){const{mounted:n,setMounted:r,transitionStatus:s}=Zw(t);e.useSyncedValues({mounted:n,transitionStatus:s});const a=ke(()=>{var m,d;r(!1),e.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),o==null||o(),(d=(m=e.context).onOpenChangeComplete)==null||d.call(m,!1)}),i=e.useState("preventUnmountingOnClose");return Ir({enabled:n&&!t&&!i,open:t,ref:e.context.popupRef,onComplete(){t||a()}}),{forceUnmount:a,transitionStatus:s}}function zs(t,e){t.useSyncedValues(e),ue(()=>()=>{t.update({activeTriggerProps:Je,inactiveTriggerProps:Je,popupProps:Je})},[t])}function bp(t,e){ue(()=>{!e&&t.state.openMethod!==null&&t.set("openMethod",null)},[e,t]),ue(()=>()=>{t.state.openMethod!==null&&t.set("openMethod",null)},[t])}class er{constructor(){this.elementsSet=new Set,this.idMap=new Map}add(e,o){const n=this.idMap.get(e);n!==o&&(n!==void 0&&this.elementsSet.delete(n),this.elementsSet.add(o),this.idMap.set(e,o))}delete(e){const o=this.idMap.get(e);o&&(this.elementsSet.delete(o),this.idMap.delete(e))}hasElement(e){return this.elementsSet.has(e)}hasMatchingElement(e){for(const o of this.elementsSet)if(e(o))return!0;return!1}getById(e){return this.idMap.get(e)}entries(){return this.idMap.entries()}elements(){return this.elementsSet.values()}get size(){return this.idMap.size}}function ov(){return new Ls({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:new er,floatingId:void 0,syncOnly:!1,nested:!1,onOpenChange:void 0})}function Bs(){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:ov(),floatingId:void 0,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:Je,inactiveTriggerProps:Je,popupProps:Je}}function el(t,e,o=!1){return new Ls({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:t,floatingId:e,syncOnly:!0,nested:o,onOpenChange:void 0})}const dr=oe(t=>t.triggerIdProp??t.activeTriggerId),tl=oe(t=>t.openProp??t.open),Rc=oe(t=>{var o;return(((o=t.popupElement)==null?void 0:o.id)??t.floatingId)||void 0});function yp(t,e){return e!==void 0&&tl(t)&&dr(t)===e}function nv(t,e){return yp(t,e)?!0:e!==void 0&&tl(t)&&dr(t)==null&&t.triggerCount===1}const Vs={open:tl,mounted:oe(t=>t.mounted),transitionStatus:oe(t=>t.transitionStatus),floatingRootContext:oe(t=>t.floatingRootContext),triggerCount:oe(t=>t.triggerCount),preventUnmountingOnClose:oe(t=>t.preventUnmountingOnClose),payload:oe(t=>t.payload),activeTriggerId:dr,activeTriggerElement:oe(t=>t.mounted?t.activeTriggerElement:null),popupId:Rc,isTriggerActive:oe((t,e)=>e!==void 0&&dr(t)===e),isOpenedByTrigger:oe((t,e)=>yp(t,e)),isMountedByTrigger:oe((t,e)=>e!==void 0&&dr(t)===e&&t.mounted),triggerProps:oe((t,e)=>e?t.activeTriggerProps:t.inactiveTriggerProps),triggerPopupId:oe((t,e)=>nv(t,e)?Rc(t):void 0),popupProps:oe(t=>t.popupProps),popupElement:oe(t=>t.popupElement),positionerElement:oe(t=>t.positionerElement)};function rv(t){const{open:e=!1,onOpenChange:o,elements:n={}}=t,r=un(),s=mo()!=null,a=Nt(()=>new Ls({open:e,transitionStatus:void 0,onOpenChange:o,referenceElement:n.reference??null,floatingElement:n.floating??null,triggerElements:new er,floatingId:r,syncOnly:!1,nested:s})).current;return ue(()=>{const i={open:e,floatingId:r};n.reference!==void 0&&(i.referenceElement=n.reference,i.domReferenceElement=Ae(n.reference)?n.reference:null),n.floating!==void 0&&(i.floatingElement=n.floating),a.update(i)},[e,r,n.reference,n.floating,a]),a.context.onOpenChange=o,a.context.nested=s,a}function sv(t={}){const{nodeId:e,externalTree:o}=t,n=rv(t),r=t.rootContext||n,s=r.useState("referenceElement"),a=r.useState("floatingElement"),i=r.useState("domReferenceElement"),m=r.useState("open"),d=r.useState("floatingId"),[c,p]=l.useState(null),[h,y]=l.useState(void 0),[g,b]=l.useState(void 0),f=l.useRef(null),w=zo(o),T=l.useMemo(()=>({reference:s,floating:a,domReference:i}),[s,a,i]),v=_w({...t,elements:{...T,...c&&{reference:c}}}),C=Ae(h)?h:null,S=g===void 0?r.state.floatingElement:g;r.useSyncedValue("referenceElement",h??null),r.useSyncedValue("domReferenceElement",h===void 0?i:C),r.useSyncedValue("floatingElement",S);const k=l.useCallback(U=>{const R=Ae(U)?{getBoundingClientRect:()=>U.getBoundingClientRect(),getClientRects:()=>U.getClientRects(),contextElement:U}:U;p(R),v.refs.setReference(R)},[v.refs]),P=l.useCallback(U=>{(Ae(U)||U===null)&&(f.current=U,y(U)),(Ae(v.refs.reference.current)||v.refs.reference.current===null||U!==null&&!Ae(U))&&v.refs.setReference(U)},[v.refs,y]),D=l.useCallback(U=>{b(U),v.refs.setFloating(U)},[v.refs]),I=l.useMemo(()=>({...v.refs,setReference:P,setFloating:D,setPositionReference:k,domReference:f}),[v.refs,P,D,k]),N=l.useMemo(()=>({...v.elements,domReference:i}),[v.elements,i]),z=l.useMemo(()=>({...v,dataRef:r.context.dataRef,open:m,onOpenChange:r.setOpen,events:r.context.events,floatingId:d,refs:I,elements:N,nodeId:e,rootStore:r}),[v,I,N,e,r,m,d]);return ue(()=>{i&&(f.current=i)},[i]),ue(()=>{r.context.dataRef.current.floatingContext=z;const U=w==null?void 0:w.nodesRef.current.find(R=>R.id===e);U&&(U.context=z)}),l.useMemo(()=>({...v,context:z,refs:I,elements:N,rootStore:r}),[v,I,N,z,r])}const fa=yu&&bu;function wp(t,e={}){const{enabled:o=!0,delay:n}=e,r="rootStore"in t?t.rootStore:t,{events:s,dataRef:a}=r.context,i=l.useRef(!1),m=l.useRef(null),d=l.useRef(!0),c=gt();l.useEffect(()=>{const h=r.select("domReferenceElement");if(!o)return;const y=Ze(h);function g(){const w=r.select("domReferenceElement");!r.select("open")&&Ve(w)&&w===vt(Le(w))&&(i.current=!0)}function b(){d.current=!0}function f(){d.current=!1}return Xt(Ne(y,"blur",g),fa&&Ne(y,"keydown",b,!0),fa&&Ne(y,"pointerdown",f,!0))},[r,o]),l.useEffect(()=>{if(!o)return;function h(y){if(y.reason===uo||y.reason===Rr){const g=r.select("domReferenceElement");Ae(g)&&(m.current=g,i.current=!0)}}return s.on("openchange",h),()=>{s.off("openchange",h)}},[s,o,r]);const p=l.useMemo(()=>{function h(){i.current=!1,m.current=null}return{onMouseLeave(){h()},onFocus(y){const g=y.currentTarget;if(i.current){if(m.current===g)return;h()}const b=ht(y.nativeEvent);if(Ae(b)){if(fa&&!y.relatedTarget){if(!d.current&&!Is(b))return}else if(!$b(b))return}const f=us(y.relatedTarget,r.context.triggerElements),{nativeEvent:w,currentTarget:T}=y,v=typeof n=="function"?n():n;if(r.select("open")&&f||v===0||v===void 0){r.setOpen(!0,Oe(An,w,T));return}c.start(v,()=>{i.current||r.setOpen(!0,Oe(An,w,T))})},onBlur(y){h();const g=y.relatedTarget,b=y.nativeEvent,f=Ae(g)&&g.hasAttribute(gr("focus-guard"))&&g.getAttribute("data-type")==="outside";c.start(0,()=>{var C;const w=r.select("domReferenceElement"),T=vt(Le(w));!g&&T===w||Ce((C=a.current.floatingContext)==null?void 0:C.refs.floating.current,T)||Ce(w,T)||f||us(g??T,r.context.triggerElements)||r.setOpen(!1,Oe(An,b))})}}},[a,n,r,c]);return l.useMemo(()=>o?{reference:p,trigger:p}:{},[o,p])}class ol{constructor(){_e(this,"dispose",()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()});_e(this,"disposeEffect",()=>this.dispose);this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new Mt,this.restTimeout=new Mt,this.handleCloseOptions=void 0}static create(){return new ol}}const vs=new WeakMap;function Cs(t){var o,n,r;if(!t.performedPointerEventsMutation)return;const e=t.pointerEventsScopeElement;e&&vs.get(e)===t&&((o=t.pointerEventsScopeElement)==null||o.style.removeProperty("pointer-events"),(n=t.pointerEventsReferenceElement)==null||n.style.removeProperty("pointer-events"),(r=t.pointerEventsFloatingElement)==null||r.style.removeProperty("pointer-events"),vs.delete(e)),t.performedPointerEventsMutation=!1,t.pointerEventsScopeElement=null,t.pointerEventsReferenceElement=null,t.pointerEventsFloatingElement=null}function vp(t,e){const{scopeElement:o,referenceElement:n,floatingElement:r}=e,s=vs.get(o);s&&s!==t&&Cs(s),Cs(t),t.performedPointerEventsMutation=!0,t.pointerEventsScopeElement=o,t.pointerEventsReferenceElement=n,t.pointerEventsFloatingElement=r,vs.set(o,t),o.style.pointerEvents="none",n.style.pointerEvents="auto",r.style.pointerEvents="auto"}function nl(t){const e=t.context.dataRef.current,o=Nt(()=>e.hoverInteractionState??ol.create()).current;return e.hoverInteractionState||(e.hoverInteractionState=o),Pi(e.hoverInteractionState.disposeEffect),e.hoverInteractionState}function rl(t,e={}){const{enabled:o=!0,closeDelay:n=0,nodeId:r}=e,s="rootStore"in t?t.rootStore:t,a=s.useState("open"),i=s.useState("floatingElement"),m=s.useState("domReferenceElement"),{dataRef:d}=s.context,c=zo(),p=mo(),h=nl(s),y=gt(),g=ke(()=>{var w;return Su((w=d.current.openEvent)==null?void 0:w.type,h.interactedInside)}),b=ke(()=>{var w;return Jb((w=d.current.openEvent)==null?void 0:w.type)}),f=ke(()=>{Cs(h)});ue(()=>{a||(h.pointerType=void 0,h.restTimeoutPending=!1,h.interactedInside=!1,f())},[a,h,f]),l.useEffect(()=>f,[f]),ue(()=>{var w,T,v,C,S;if(o&&a&&(w=h.handleCloseOptions)!=null&&w.blockPointerEvents&&b()&&Ae(m)&&i){const k=m,P=i,D=Le(i),I=(v=(T=c==null?void 0:c.nodesRef.current.find(R=>R.id===p))==null?void 0:T.context)==null?void 0:v.elements.floating;I&&(I.style.pointerEvents="");const N=h.pointerEventsScopeElement!==P?h.pointerEventsScopeElement:null,z=I!==P?I:null,U=((S=(C=h.handleCloseOptions)==null?void 0:C.getScope)==null?void 0:S.call(C))??N??z??k.closest("[data-rootownerid]")??D.body;return vp(h,{scopeElement:U,referenceElement:k,floatingElement:P}),()=>{f()}}},[o,a,m,i,h,b,c,p,f]),l.useEffect(()=>{if(!o)return;function w(){return!!(c&&p&&Mo(c.nodesRef.current,p).length>0)}function T(D){const I=ps(n,"close",h.pointerType),N=()=>{s.setOpen(!1,Oe(Ye,D)),c==null||c.events.emit("floating.closed",D)};I?h.openChangeTimeout.start(I,N):(h.openChangeTimeout.clear(),N())}function v(D){const I=ht(D);if(!Hb(I)){h.interactedInside=!1;return}h.interactedInside=(I==null?void 0:I.closest("[aria-haspopup]"))!=null}function C(){h.openChangeTimeout.clear(),y.clear(),c==null||c.events.off("floating.closed",k),f()}function S(D){var U;if(w()&&c){c.events.on("floating.closed",k);return}if(us(D.relatedTarget,s.context.triggerElements))return;const I=((U=d.current.floatingContext)==null?void 0:U.nodeId)??r,N=D.relatedTarget;if(!(c&&I&&Ae(N)&&Mo(c.nodesRef.current,I,!1).some(R=>{var W;return Ce((W=R.context)==null?void 0:W.elements.floating,N)}))){if(h.handler){h.handler(D);return}f(),g()||T(D)}}function k(D){!c||!p||w()||y.start(0,()=>{c.events.off("floating.closed",k),s.setOpen(!1,Oe(Ye,D)),c.events.emit("floating.closed",D)})}const P=i;return Xt(P&&Ne(P,"mouseenter",C),P&&Ne(P,"mouseleave",S),P&&Ne(P,"pointerdown",v,!0),()=>{c==null||c.events.off("floating.closed",k)})},[o,i,s,d,n,r,g,f,h,c,p,y])}const av={current:null};function Ws(t,e={}){var O;const{enabled:o=!0,delay:n=0,handleClose:r=null,mouseOnly:s=!1,restMs:a=0,move:i=!0,triggerElementRef:m=av,externalTree:d,isActiveTrigger:c=!0,getHandleCloseContext:p,isClosing:h,shouldOpen:y}=e,g="rootStore"in t?t.rootStore:t,{dataRef:b,events:f}=g.context,w=zo(d),T=nl(g),v=l.useRef(!1),C=nt(r),S=nt(n),k=nt(a),P=nt(o),D=nt(y),I=nt(h),N=ke(()=>{var j;return Su((j=b.current.openEvent)==null?void 0:j.type,T.interactedInside)}),z=ke(()=>{var j;return((j=D.current)==null?void 0:j.call(D))!==!1}),U=ke((j,x,F)=>{const H=g.context.triggerElements;if(H.hasElement(x))return!j||!Ce(j,x);if(!Ae(F))return!1;const A=F;return H.hasMatchingElement(Q=>Ce(Q,A))&&(!j||!Ce(j,A))}),R=ke(()=>{if(!T.handler)return;Le(g.select("domReferenceElement")).removeEventListener("mousemove",T.handler),T.handler=void 0}),W=ke(()=>{Cs(T)});return c&&(T.handleCloseOptions=(O=C.current)==null?void 0:O.__options),l.useEffect(()=>R,[R]),l.useEffect(()=>{if(!o)return;function j(x){x.open?v.current=!1:(v.current=x.reason===Ye,R(),T.openChangeTimeout.clear(),T.restTimeout.clear(),T.blockMouseMove=!0,T.restTimeoutPending=!1)}return f.on("openchange",j),()=>{f.off("openchange",j)}},[o,f,T,R]),l.useEffect(()=>{if(!o)return;function j(A,Q=!0){const M=ps(S.current,"close",T.pointerType);M?T.openChangeTimeout.start(M,()=>{g.setOpen(!1,Oe(Ye,A)),w==null||w.events.emit("floating.closed",A)}):Q&&(T.openChangeTimeout.clear(),g.setOpen(!1,Oe(Ye,A)),w==null||w.events.emit("floating.closed",A))}const x=m.current??(c?g.select("domReferenceElement"):null);if(!Ae(x))return;function F(A){var De;if(T.openChangeTimeout.clear(),T.blockMouseMove=!1,s&&!cn(T.pointerType))return;const Q=rc(k.current),M=ps(S.current,"open",T.pointerType),L=ht(A),V=A.currentTarget??null,_=g.select("domReferenceElement");let B=V;if(Ae(L)&&!g.context.triggerElements.hasElement(L)){for(const me of g.context.triggerElements.elements())if(Ce(me,L)){B=me;break}}Ae(V)&&Ae(_)&&!g.context.triggerElements.hasElement(V)&&Ce(V,_)&&(B=_);const Y=B==null?!1:U(_,B,L),q=g.select("open"),J=((De=I.current)==null?void 0:De.call(I))??g.select("transitionStatus")==="ending",Te=!q&&J&&v.current,Re=!Y&&Ae(B)&&Ae(_)&&Ce(_,B)&&Te,K=Q>0&&!M,de=Y&&(q||Te)||Re,le=!q||Y;if(de){z()&&g.setOpen(!0,Oe(Ye,A,B));return}K||(M?T.openChangeTimeout.start(M,()=>{le&&z()&&g.setOpen(!0,Oe(Ye,A,B))}):le&&z()&&g.setOpen(!0,Oe(Ye,A,B)))}function H(A){if(N()){W();return}R();const Q=g.select("domReferenceElement"),M=Le(Q);T.restTimeout.clear(),T.restTimeoutPending=!1;const L=b.current.floatingContext??(p==null?void 0:p());if(us(A.relatedTarget,g.context.triggerElements))return;if(C.current&&L){g.select("open")||T.openChangeTimeout.clear();const _=m.current;T.handler=C.current({...L,tree:w,x:A.clientX,y:A.clientY,onClose(){W(),R(),P.current&&!N()&&_===g.select("domReferenceElement")&&j(A,!0)}}),M.addEventListener("mousemove",T.handler),T.handler(A);return}(T.pointerType==="touch"?!Ce(g.select("floatingElement"),A.relatedTarget):!0)&&j(A)}return i?Xt(Ne(x,"mousemove",F,{once:!0}),Ne(x,"mouseenter",F),Ne(x,"mouseleave",H)):Xt(Ne(x,"mouseenter",F),Ne(x,"mouseleave",H))},[R,W,b,S,g,o,C,T,c,U,N,s,i,k,m,w,P,p,I,z]),l.useMemo(()=>{if(!o)return;function j(x){T.pointerType=x.pointerType}return{onPointerDown:j,onPointerEnter:j,onMouseMove(x){var _,B,Y;const{nativeEvent:F}=x,H=x.currentTarget,A=g.select("domReferenceElement"),Q=g.select("open"),M=U(A,H,x.target);if(s&&!cn(T.pointerType))return;if(Q&&M&&((_=T.handleCloseOptions)!=null&&_.blockPointerEvents)){const q=g.select("floatingElement");if(q){const J=((Y=(B=T.handleCloseOptions)==null?void 0:B.getScope)==null?void 0:Y.call(B))??H.ownerDocument.body;vp(T,{scopeElement:J,referenceElement:H,floatingElement:q})}}const L=rc(k.current);if(Q&&!M||L===0||!M&&T.restTimeoutPending&&x.movementX**2+x.movementY**2<2)return;T.restTimeout.clear();function V(){if(T.restTimeoutPending=!1,N())return;const q=g.select("open");!T.blockMouseMove&&(!q||M)&&z()&&g.setOpen(!0,Oe(Ye,F,H))}T.pointerType==="touch"?_t.flushSync(()=>{V()}):M&&Q?V():(T.restTimeoutPending=!0,T.restTimeout.start(L,V))}}},[o,T,N,U,s,g,k,z])}const iv="Escape";function qs(t,e,o){switch(t){case"vertical":return e;case"horizontal":return o;default:return e||o}}function Hr(t,e){return qs(e,t===Ai||t===Pr,t===No||t===Io)}function ha(t,e,o){return qs(e,t===Pr,o?t===No:t===Io)||t==="Enter"||t===" "||t===""}function lv(t,e,o){return qs(e,o?t===No:t===Io,t===Pr)}function cv(t,e,o,n){const r=o?t===Io:t===No,s=t===Ai;return e==="both"||e==="horizontal"&&n&&n>1?t===iv:qs(e,r,s)}function dv(t,e){const{listRef:o,activeIndex:n,onNavigate:r=()=>{},enabled:s=!0,selectedIndex:a=null,allowEscape:i=!1,loopFocus:m=!1,nested:d=!1,rtl:c=!1,virtual:p=!1,focusItemOnOpen:h="auto",focusItemOnHover:y=!0,openOnArrowKeyDown:g=!0,disabledIndices:b=void 0,orientation:f="vertical",parentOrientation:w,cols:T=1,id:v,resetOnPointerLeave:C=!0,externalTree:S}=e,k="rootStore"in t?t.rootStore:t,P=k.useState("open"),D=k.useState("floatingElement"),I=k.useState("domReferenceElement"),N=k.context.dataRef,z=Za(D),U=Xa(I),R=nt(z),W=mo(),O=zo(S),j=l.useRef(h),x=l.useRef(a??-1),F=l.useRef(null),H=l.useRef(!0),A=ke(se=>{r(x.current===-1?null:x.current,se)}),Q=l.useRef(A),M=l.useRef(!!D),L=l.useRef(P),V=l.useRef(!1),_=l.useRef(!1),B=l.useRef(null),Y=nt(b),q=nt(P),J=nt(a),Te=nt(C),Re=hr(),K=hr(),de=ke(()=>{function se(G){p?O==null||O.events.emit("virtualfocus",G):B.current=ss(G,{sync:V.current,preventScroll:!0})}const $=o.current[x.current],ee=_.current;$&&se($),(V.current?G=>G():G=>Re.request(G))(()=>{var xe;const G=o.current[x.current]||$;if(!G)return;$||se(G),Z&&(ee||!H.current)&&((xe=G.scrollIntoView)==null||xe.call(G,{block:"nearest",inline:"nearest"}))})});ue(()=>{N.current.orientation=f},[N,f]),ue(()=>{s&&(P&&D?(x.current=a??-1,j.current&&a!=null&&(_.current=!0,A())):M.current&&(x.current=-1,Q.current()))},[s,P,D,a,A]),ue(()=>{if(s){if(!P){V.current=!1;return}if(D)if(n==null){if(V.current=!1,J.current!=null)return;if(M.current&&(x.current=-1,de()),(!L.current||!M.current)&&j.current&&(F.current!=null||j.current===!0&&F.current==null)){let se=0;const $=()=>{o.current[0]==null?(se<2&&(se?te=>K.request(te):queueMicrotask)($),se+=1):(x.current=F.current==null||ha(F.current,f,c)||d?aa(o):ic(o),F.current=null,A())};$()}}else gs(o.current,n)||(x.current=n,de(),_.current=!1)}},[s,P,D,n,J,d,o,f,c,A,de,K]),ue(()=>{var G,ge;if(!s||D||!O||p||!M.current)return;const se=O.nodesRef.current,$=(ge=(G=se.find(xe=>xe.id===W))==null?void 0:G.context)==null?void 0:ge.elements.floating,ee=vt(Le(D)),te=se.some(xe=>xe.context&&Ce(xe.context.elements.floating,ee));$&&!te&&H.current&&$.focus({preventScroll:!0})},[s,D,O,W,p]),ue(()=>{Q.current=A,L.current=P,M.current=!!D}),ue(()=>{P||(F.current=null,j.current=h)},[P,h]);const le=n!=null,De=ke(se=>{if(!q.current)return;const $=o.current.indexOf(se.currentTarget);$!==-1&&(x.current!==$||n!==$)&&(x.current=$,A(se))}),me=ke(()=>{var se,$,ee;return w??((ee=($=(se=O==null?void 0:O.nodesRef.current.find(te=>te.id===W))==null?void 0:se.context)==null?void 0:$.dataRef)==null?void 0:ee.current.orientation)}),fe=ke(()=>aa(o,Y.current)),Se=ke(se=>{if(H.current=!1,V.current=!0,se.which===229||!q.current&&se.currentTarget===R.current)return;if(d&&cv(se.key,f,c,T)){Hr(se.key,me())||Et(se),k.setOpen(!1,Oe(ti,se.nativeEvent)),Ve(I)&&(p?O==null||O.events.emit("virtualfocus",I):I.focus());return}const $=x.current,ee=aa(o,b),te=ic(o,b);if(U||(se.key==="Home"&&(Et(se),x.current=ee,A(se)),se.key==="End"&&(Et(se),x.current=te,A(se))),T>1){const G=Array.from({length:o.current.length},()=>({width:1,height:1})),ge=yy(G,T,!1),xe=ge.findIndex(Ge=>Ge!=null&&!Nn(o.current,Ge,b)),Ke=ge.reduce((Ge,it,It)=>it!=null&&!Nn(o.current,it,b)?It:Ge,-1),ze=ge[by(ge.map(Ge=>Ge!=null?o.current[Ge]:null),{event:se,orientation:f,loopFocus:m,rtl:c,cols:T,disabledIndices:vy([...(typeof b!="function"?b:null)||o.current.map((Ge,it)=>Nn(o.current,it,b)?it:void 0),void 0],ge),minIndex:xe,maxIndex:Ke,prevIndex:wy(x.current>te?ee:x.current,G,ge,T,se.key===Pr?"bl":se.key===(c?No:Io)?"tr":"tl"),stopEvent:!0})];if(ze!=null&&(x.current=ze,A(se)),f==="both")return}if(Hr(se.key,f)){if(Et(se),P&&!p&&vt(se.currentTarget.ownerDocument)===se.currentTarget){x.current=ha(se.key,f,c)?ee:te,A(se);return}ha(se.key,f,c)?m?$>=te?i&&$!==o.current.length?x.current=-1:(V.current=!1,x.current=ee):x.current=ft(o.current,{startingIndex:$,disabledIndices:b}):x.current=Math.min(te,ft(o.current,{startingIndex:$,disabledIndices:b})):m?$<=ee?i&&$!==-1?x.current=o.current.length:(V.current=!1,x.current=te):x.current=ft(o.current,{startingIndex:$,decrement:!0,disabledIndices:b}):x.current=Math.max(ee,ft(o.current,{startingIndex:$,decrement:!0,disabledIndices:b})),gs(o.current,x.current)&&(x.current=-1),A(se)}}),Z=l.useMemo(()=>({onFocus($){V.current=!0,De($)},onClick:({currentTarget:$})=>$.focus({preventScroll:!0}),onMouseMove($){V.current=!0,_.current=!1,y&&De($)},onPointerLeave($){var te;if(!q.current||!H.current||$.pointerType==="touch")return;V.current=!0;const ee=$.relatedTarget;if(!(!y||o.current.includes(ee))&&Te.current&&((te=B.current)==null||te.call(B),B.current=null,x.current=-1,A($),!p)){const G=R.current,ge=vt(Le(G));G&&Ce(G,ge)&&G.focus({preventScroll:!0})}}}),[De,q,R,y,o,A,Te,p]),Fe=l.useMemo(()=>p&&P&&le&&{"aria-activedescendant":`${v}-${n}`},[p,P,le,v,n]),we=l.useMemo(()=>({"aria-orientation":f==="both"?void 0:f,...U?{}:Fe,onKeyDown(se){if(se.key==="Tab"&&se.shiftKey&&P&&!p){const $=ht(se.nativeEvent);if($&&!Ce(R.current,$))return;Et(se),k.setOpen(!1,Oe(dn,se.nativeEvent)),Ve(I)&&I.focus();return}Se(se)},onPointerMove(){H.current=!0}}),[Fe,Se,R,f,U,k,P,p,I]),he=l.useMemo(()=>{function se(te){k.setOpen(!0,Oe(ti,te.nativeEvent,te.currentTarget))}function $(te){h==="auto"&&vu(te.nativeEvent)&&(j.current=!p)}function ee(te){j.current=h,h==="auto"&&Cu(te.nativeEvent)&&(j.current=!0)}return{onKeyDown(te){const G=k.select("open");H.current=!1;const ge=te.key.startsWith("Arrow"),xe=lv(te.key,me(),c),Ke=Hr(te.key,f),ze=(d?xe:Ke)||te.key==="Enter"||te.key.trim()==="";if(p&&G)return Se(te);if(!(!G&&!g&&ge)){if(ze){const Ge=Hr(te.key,me());F.current=d&&Ge?null:te.key}if(d){xe&&(Et(te),G?(x.current=fe(),A(te)):se(te));return}Ke&&(J.current!=null&&(x.current=J.current),Et(te),!G&&g?se(te):Se(te),G&&A(te))}},onFocus(te){k.select("open")&&!p&&(x.current=-1,A(te))},onPointerDown:ee,onPointerEnter:ee,onMouseDown:$,onClick:$}},[Se,h,fe,d,A,k,g,f,me,c,J,p]),Pe=l.useMemo(()=>({...Fe,...he}),[Fe,he]);return l.useMemo(()=>s?{reference:Pe,floating:we,item:Z,trigger:he}:{},[s,Pe,we,he,Z])}function uv(t,e){const{listRef:o,elementsRef:n,activeIndex:r,onMatch:s,onTyping:a,enabled:i=!0,resetMs:m=750,selectedIndex:d=null}=e,c="rootStore"in t?t.rootStore:t,p=c.useState("open"),h=gt(),y=l.useRef(""),g=l.useRef(d??r??-1),b=l.useRef(null),f=ke(v=>{function C(U){const R=n==null?void 0:n.current[U];return!R||Fs(R)}function S(U,R,W=0){if(U.length===0)return-1;const O=(W%U.length+U.length)%U.length,j=R.toLocaleLowerCase();for(let x=0;x0&&v.key===" "&&(Et(v),a==null||a(!0)),y.current.length>0&&y.current[0]!==" "&&S(k,y.current)===-1&&v.key!==" "&&(a==null||a(!1)),k==null||v.key.length!==1||v.ctrlKey||v.metaKey||v.altKey)return;p&&v.key!==" "&&(Et(v),a==null||a(!0));const P=y.current==="";P&&(g.current=d??r??-1),k.every(U=>{var R,W;return U?((R=U[0])==null?void 0:R.toLocaleLowerCase())!==((W=U[1])==null?void 0:W.toLocaleLowerCase()):!0})&&y.current===v.key&&(y.current="",g.current=b.current),y.current+=v.key,h.start(m,()=>{y.current="",g.current=b.current,a==null||a(!1)});const N=((P?d??r??-1:g.current)??0)+1,z=S(k,y.current,N);z!==-1?(s==null||s(z),b.current=z):v.key!==" "&&(y.current="",a==null||a(!1))}),w=ke(v=>{const C=v.relatedTarget,S=c.select("domReferenceElement"),k=c.select("floatingElement");Ce(S,C)||Ce(k,C)||(h.clear(),y.current="",g.current=b.current,a==null||a(!1))});ue(()=>{!p&&d!==null||(h.clear(),b.current=null,y.current!==""&&(y.current=""))},[p,d,h]),ue(()=>{p&&y.current===""&&(g.current=d??r??-1)},[p,d,r]);const T=l.useMemo(()=>({onKeyDown:f,onBlur:w}),[f,w]);return l.useMemo(()=>i?{reference:T,floating:T}:{},[i,T])}const Ec=.1,pv=Ec*Ec,He=.5;function $r(t,e,o,n,r,s){return n>=e!=s>=e&&t<=(r-o)*(e-n)/(s-n)+o}function Kr(t,e,o,n,r,s,a,i,m,d){let c=!1;return $r(t,e,o,n,r,s)&&(c=!c),$r(t,e,r,s,a,i)&&(c=!c),$r(t,e,a,i,m,d)&&(c=!c),$r(t,e,m,d,o,n)&&(c=!c),c}function mv(t,e,o){return t>=o.x&&t<=o.x+o.width&&e>=o.y&&e<=o.y+o.height}function Jr(t,e,o,n,r,s){const a=Math.min(o,r),i=Math.max(o,r),m=Math.min(n,s),d=Math.max(n,s);return t>=a&&t<=i&&e>=m&&e<=d}function Hs(t={}){const{blockPointerEvents:e=!1}=t,o=new Mt,n=({x:r,y:s,placement:a,elements:i,onClose:m,nodeId:d,tree:c})=>{const p=a==null?void 0:a.split("-")[0];let h=!1,y=null,g=null,b=typeof performance<"u"?performance.now():0;function f(T,v){const C=performance.now(),S=C-b;if(y===null||g===null||S===0)return y=T,g=v,b=C,!1;const k=T-y,P=v-g,D=k*k+P*P,I=S*S*pv;return y=T,g=v,b=C,D0)}function R(){U()||w()}if(U())return;const W=C.getBoundingClientRect(),O=S.getBoundingClientRect(),j=r>O.right-O.width/2,x=s>O.bottom-O.height/2,F=O.width>W.width,H=O.height>W.height,A=(F?W:O).left,Q=(F?W:O).right,M=(H?W:O).top,L=(H?W:O).bottom;if(p==="top"&&s>=W.bottom-1||p==="bottom"&&s<=W.top+1||p==="left"&&r>=W.right-1||p==="right"&&r<=W.left+1){R();return}let V=!1;switch(p){case"top":V=Jr(k,P,A,W.top+1,Q,O.bottom-1);break;case"bottom":V=Jr(k,P,A,O.top+1,Q,W.bottom-1);break;case"left":V=Jr(k,P,O.right-1,L,W.left+1,M);break;case"right":V=Jr(k,P,W.right-1,L,O.left+1,M);break}if(V)return;if(h&&!mv(k,P,W)){R();return}if(!I&&f(k,P)){R();return}let _=!1;switch(p){case"top":{const B=F?He/2:He*4,Y=F||j?r+B:r-B,q=F?r-B:j?r+B:r-B,J=s+He+1,Te=j||F?O.bottom-He:O.top,Re=j?F?O.bottom-He:O.top:O.bottom-He;_=Kr(k,P,Y,J,q,J,O.left,Te,O.right,Re);break}case"bottom":{const B=F?He/2:He*4,Y=F||j?r+B:r-B,q=F?r-B:j?r+B:r-B,J=s-He,Te=j||F?O.top+He:O.bottom,Re=j?F?O.top+He:O.bottom:O.top+He;_=Kr(k,P,Y,J,q,J,O.left,Te,O.right,Re);break}case"left":{const B=H?He/2:He*4,Y=H||x?s+B:s-B,q=H?s-B:x?s+B:s-B,J=r+He+1,Te=x||H?O.right-He:O.left,Re=x?H?O.right-He:O.left:O.right-He;_=Kr(k,P,Te,O.top,Re,O.bottom,J,Y,J,q);break}case"right":{const B=H?He/2:He*4,Y=H||x?s+B:s-B,q=H?s-B:x?s+B:s-B,J=r-He,Te=x||H?O.left+He:O.right,Re=x?H?O.left+He:O.right:O.left+He;_=Kr(k,P,J,Y,J,q,Te,O.top,Re,O.bottom);break}}_?h||o.start(40,R):R()}};return n.__options={...t,blockPointerEvents:e},n}const fv={...Vs,disabled:oe(t=>t.disabled),instantType:oe(t=>t.instantType),isInstantPhase:oe(t=>t.isInstantPhase),trackCursorAxis:oe(t=>t.trackCursorAxis),disableHoverablePopup:oe(t=>t.disableHoverablePopup),lastOpenChangeReason:oe(t=>t.openChangeReason),closeOnClick:oe(t=>t.closeOnClick),closeDelay:oe(t=>t.closeDelay),hasViewport:oe(t=>t.hasViewport)};class sl extends Ar{constructor(o,n,r=!1){const s=new er,a={...hv(),...o};a.floatingRootContext=el(s,n,r);super(a,{popupRef:l.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:s},fv);_e(this,"setOpen",(o,n)=>{var d,c;const r=n.reason,s=r===Ye,a=o&&r===An,i=!o&&(r===uo||r===Rr);if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},(c=(d=this.context).onOpenChange)==null||c.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const p={open:o,openChangeReason:r};a?p.instantType="focus":i?p.instantType="dismiss":r===Ye&&(p.instantType=void 0),Xi(p,o,n.trigger),this.update(p)};s?_t.flushSync(m):m()})}cancelPendingOpen(o){this.state.floatingRootContext.dispatchOpenChange(!1,Oe(uo,o))}static useStore(o,n){return Qi(o,(s,a)=>new sl(n,s,a)).store}}function hv(){return{...Bs(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,hasViewport:!1}}const gv=Di(function(e){const{disabled:o=!1,defaultOpen:n=!1,open:r,disableHoverablePopup:s=!1,trackCursorAxis:a="none",actionsRef:i,onOpenChange:m,onOpenChangeComplete:d,handle:c,triggerId:p,defaultTriggerId:h=null,children:y}=e,g=sl.useStore(c==null?void 0:c.store,{open:n,openProp:r,activeTriggerId:h,triggerIdProp:p});Ps(()=>{r===void 0&&g.state.open===!1&&n===!0&&g.update({open:!0,activeTriggerId:h})}),g.useControlledProp("openProp",r),g.useControlledProp("triggerIdProp",p),g.useContextCallback("onOpenChange",m),g.useContextCallback("onOpenChangeComplete",d);const b=g.useState("open"),f=!o&&b,w=g.useState("activeTriggerId"),T=g.useState("mounted"),v=g.useState("payload");g.useSyncedValues({trackCursorAxis:a,disableHoverablePopup:s}),g.useSyncedValue("disabled",o),js(g);const{forceUnmount:C,transitionStatus:S}=_s(f,g),k=g.useState("isInstantPhase"),P=g.useState("instantType"),D=g.useState("lastOpenChangeReason"),I=l.useRef(null);ue(()=>{b&&o&&g.setOpen(!1,Oe(Yb))},[b,o,g]),ue(()=>{S==="ending"&&D===xu||S!=="ending"&&k?(P!=="delay"&&(I.current=P),g.set("instantType","delay")):I.current!==null&&(g.set("instantType",I.current),I.current=null)},[S,k,D,P,g]),ue(()=>{f&&w==null&&g.set("payload",void 0)},[g,w,f]);const N=l.useCallback(()=>{g.setOpen(!1,Oe(Os))},[g]);l.useImperativeHandle(i,()=>({unmount:C,close:N}),[C,N]);const z=f||T||!o&&a!=="none";return u.jsxs(pu.Provider,{value:g,children:[z&&u.jsx(bv,{store:g,disabled:o,trackCursorAxis:a}),typeof y=="function"?y({payload:v}):y]})});function bv({store:t,disabled:e,trackCursorAxis:o}){const n=t.useState("floatingRootContext"),r=Ms(n,{enabled:!e,referencePress:()=>t.select("closeOnClick")}),s=tw(n,{enabled:!e&&o!=="none",axis:o==="none"?void 0:o}),a=l.useMemo(()=>Tt(s.reference,r.reference),[s.reference,r.reference]),i=l.useMemo(()=>Tt(s.trigger,r.trigger),[s.trigger,r.trigger]),m=l.useMemo(()=>Tt(Zn,s.floating,r.floating),[s.floating,r.floating]);return zs(t,{activeTriggerProps:a,inactiveTriggerProps:i,popupProps:m}),null}let Qo=(function(t){return t.open="data-open",t.closed="data-closed",t[t.startingStyle=br.startingStyle]="startingStyle",t[t.endingStyle=br.endingStyle]="endingStyle",t.anchorHidden="data-anchor-hidden",t.side="data-side",t.align="data-align",t})({}),Ts=(function(t){return t.popupOpen="data-popup-open",t.pressed="data-pressed",t})({});const yv={[Ts.popupOpen]:""},wv={[Ts.popupOpen]:"",[Ts.pressed]:""},vv={[Qo.open]:""},Cv={[Qo.closed]:""},Tv={[Qo.anchorHidden]:""},al={open(t){return t?yv:null}},ii={open(t){return t?wv:null}},bn={open(t){return t?vv:Cv},anchorHidden(t){return t?Tv:null}};function yn(t){return un(t,"base-ui")}const Cp=l.createContext(void 0);function kv(){return l.useContext(Cp)}let Sv=(function(t){return t[t.popupOpen=Ts.popupOpen]="popupOpen",t.triggerDisabled="data-trigger-disabled",t})({});const xv=600,Tp="data-base-ui-tooltip-trigger";function Ac(t){if("composedPath"in t){const o=t.composedPath();for(let n=0;nb.select("transitionStatus")==="ending",shouldOpen(){return!H.current}}),B=wp(v,{enabled:!O}).reference,Y=K=>{const de=H.current,le=Ac(K),De=V(le),me=C.current,fe=me&&le&&Ce(me,le);if(De&&b.select("open")&&b.select("lastOpenChangeReason")===Ye){b.setOpen(!1,Oe(Ye,K));return}if(de&&!De&&fe&&!j.current&&!b.select("open")&&me&&cn(Q.current)){const Se=()=>{!H.current&&!j.current&&!b.select("open")&&b.setOpen(!0,Oe(Ye,K,me))},Z=M();Z===0?(A.clear(),Se()):A.start(Z,Se)}},q=b.useState("triggerProps",D);return st("button",e,{state:{open:T},ref:[o,P,C],props:[_,B,D||x!=="none"?q:void 0,{onMouseOver(K){Y(K.nativeEvent)},onFocus(K){L(Ac(K.nativeEvent))&&K.preventBaseUIHandler()},onMouseLeave(){H.current=!1,A.clear(),Q.current=void 0},onPointerEnter(K){Q.current=K.pointerType},onPointerDown(K){Q.current=K.pointerType,b.set("closeOnClick",c),c&&!b.select("open")&&b.cancelPendingOpen(K.nativeEvent)},onClick(K){c&&!b.select("open")&&b.cancelPendingOpen(K.nativeEvent)},id:f,[Sv.triggerDisabled]:O?"":void 0,[Tp]:O?void 0:""},y],stateAttributesMapping:al})}),kp=l.createContext(void 0);function Rv(){const t=l.useContext(kp);if(t===void 0)throw new Error(rt(70));return t}const Ev=l.forwardRef(function(e,o){const{children:n,container:r,className:s,render:a,style:i,...m}=e,{portalNode:d,portalSubtree:c}=Zu({container:r,ref:o,componentProps:e,elementProps:m});return!c&&!d?null:u.jsxs(l.Fragment,{children:[c,d&&_t.createPortal(n,d)]})}),Av=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e;return Dr().useState("mounted")||n?u.jsx(kp.Provider,{value:n,children:u.jsx(Ev,{ref:o,...r})}):null}),Sp=l.createContext(void 0);function xp(){const t=l.useContext(Sp);if(t===void 0)throw new Error(rt(71));return t}const Nv=l.createContext(void 0);function Dp(){const t=l.useContext(Nv);return(t==null?void 0:t.direction)??"ltr"}const Iv=t=>({name:"arrow",options:t,async fn(e){var H,A;const{x:o,y:n,placement:r,rects:s,platform:a,elements:i,middlewareData:m}=e,{element:d,padding:c=0,offsetParent:p="real"}=po(t,e)||{};if(d==null)return{};const h=Iu(c),y={x:o,y:n},g=Ui(r),b=Mi(g),f=await a.getDimensions(d),w=g==="y",T=w?"top":"left",v=w?"bottom":"right",C=w?"clientHeight":"clientWidth",S=s.reference[b]+s.reference[g]-y[g]-s.floating[b],k=y[g]-s.reference[g],P=p==="real"?await((H=a.getOffsetParent)==null?void 0:H.call(a,d)):i.floating;let D=i.floating[C]||s.floating[b];(!D||!await((A=a.isElement)==null?void 0:A.call(a,P)))&&(D=i.floating[C]||s.floating[b]);const I=S/2-k/2,N=D/2-f[b]/2-1,z=Math.min(h[T],N),U=Math.min(h[v],N),R=z,W=D-f[b]-U,O=D/2-f[b]/2+I,j=oi(R,O,W),x=!m.arrow&&_o(r)!=null&&O!==j&&s.reference[b]/2-(O({...Iv(t),options:[t,e]}),Fv={name:"hide",async fn(t){var i;const{width:e,height:o,x:n,y:r}=t.rects.reference,s=e===0&&o===0&&n===0&&r===0;return{data:{referenceHidden:((i=(await Hw().fn(t)).data)==null?void 0:i.referenceHidden)||s}}}},is={sideX:"left",sideY:"top"},il={name:"adaptiveOrigin",async fn(t){var T,v;const{x:e,y:o,rects:{floating:n},elements:{floating:r},platform:s,strategy:a,placement:i}=t,m=Ze(r),d=m.getComputedStyle(r);if(!(d.transitionDuration!=="0s"&&d.transitionDuration!==""))return{x:e,y:o,data:is};const p=await((T=s.getOffsetParent)==null?void 0:T.call(s,r));let h={width:0,height:0};if(a==="fixed"&&(m!=null&&m.visualViewport))h={width:m.visualViewport.width,height:m.visualViewport.height};else if(p===m){const C=Le(r);h={width:C.documentElement.clientWidth,height:C.documentElement.clientHeight}}else await((v=s.isElement)==null?void 0:v.call(s,p))&&(h=await s.getDimensions(p));const y=Ct(i);let g=e,b=o;y==="left"&&(g=h.width-(e+n.width)),y==="top"&&(b=h.height-(o+n.height));const f=y==="left"?"right":is.sideX,w=y==="top"?"bottom":is.sideY;return{x:g,y:b,data:{sideX:f,sideY:w}}}};function Pp(t,e,o){const n=t==="inline-start"||t==="inline-end";return{top:"top",right:n?o?"inline-start":"inline-end":"right",bottom:"bottom",left:n?o?"inline-end":"inline-start":"left"}[e]}function Nc(t,e,o){const{rects:n,placement:r}=t;return{side:Pp(e,Ct(r),o),align:_o(r)||"center",anchor:{width:n.reference.width,height:n.reference.height},positioner:{width:n.floating.width,height:n.floating.height}}}function ll(t){var St,Tn;const{anchor:e,positionMethod:o="absolute",side:n="bottom",sideOffset:r=0,align:s="center",alignOffset:a=0,collisionBoundary:i,collisionPadding:m=5,sticky:d=!1,arrowPadding:c=5,disableAnchorTracking:p=!1,inline:h,keepMounted:y=!1,floatingRootContext:g,mounted:b,collisionAvoidance:f,shiftCrossAxis:w=!1,nodeId:T,adaptiveOrigin:v,lazyFlip:C=!1,externalTree:S}=t,[k,P]=l.useState(null);!b&&k!==null&&P(null);const D=f.side||"flip",I=f.align||"flip",N=f.fallbackAxisSide||"end",z=typeof e=="function"?e:void 0,U=ke(z),R=z?U:e,W=nt(e),O=nt(b),x=Dp()==="rtl",F=k||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":x?"left":"right","inline-start":x?"right":"left"}[n],H=s==="center"?F:`${F}-${s}`;let A=m;const Q=1,M=n==="bottom"?Q:0,L=n==="top"?Q:0,V=n==="right"?Q:0,_=n==="left"?Q:0;typeof A=="number"?A={top:A+M,right:A+_,bottom:A+L,left:A+V}:A&&(A={top:(A.top||0)+M,right:(A.right||0)+_,bottom:(A.bottom||0)+L,left:(A.left||0)+V});const B={boundary:i==="clipping-ancestors"?"clippingAncestors":i,padding:A},Y=l.useRef(null),q=nt(r),J=nt(a),Te=typeof r!="function"?r:0,Re=typeof a!="function"?a:0,K=[];h&&K.push(h),K.push(zw(je=>{const tt=Nc(je,n,x),xt=typeof q.current=="function"?q.current(tt):q.current,be=typeof J.current=="function"?J.current(tt):J.current;return{mainAxis:xt,crossAxis:be,alignmentAxis:be}},[Te,Re,x,n]));const de=I==="none"&&D!=="shift",le=!de&&(d||w||D==="shift"),De=D==="none"?null:Ww({...B,padding:{top:A.top+Q,right:A.right+Q,bottom:A.bottom+Q,left:A.left+Q},mainAxis:!w&&D==="flip",crossAxis:I==="flip"?"alignment":!1,fallbackAxisSideDirection:N}),me=de?null:Bw(je=>{const tt=Le(je.elements.floating).documentElement;return{...B,rootBoundary:w?{x:0,y:0,width:tt.clientWidth,height:tt.clientHeight}:void 0,mainAxis:I!=="none",crossAxis:le,limiter:d||w?void 0:Vw(xt=>{if(!Y.current)return{};const{width:be,height:We}=Y.current.getBoundingClientRect(),qe=Ft(Ct(xt.placement)),et=qe==="y"?be:We,Ut=qe==="y"?A.left+A.right:A.top+A.bottom;return{offset:et/2+Ut/2}})}},[B,d,w,A,I]);D==="shift"||I==="shift"||s==="center"?K.push(me,De):K.push(De,me),K.push(qw({...B,apply({elements:{floating:je},availableWidth:tt,availableHeight:xt,rects:be}){if(!O.current)return;const We=je.style;We.setProperty("--available-width",`${tt}px`),We.setProperty("--available-height",`${xt}px`);const qe=Ze(je).devicePixelRatio||1,{x:et,y:Ut,width:$e,height:ct}=be.reference,go=(Math.round((et+$e)*qe)-Math.round(et*qe))/qe,pt=(Math.round((Ut+ct)*qe)-Math.round(Ut*qe))/qe;We.setProperty("--anchor-width",`${go}px`),We.setProperty("--anchor-height",`${pt}px`)}}),Ov(je=>({element:Y.current||Le(je.elements.floating).createElement("div"),padding:c,offsetParent:"floating"}),[c]),{name:"transformOrigin",fn(je){var Ul,Ll,jl;const{elements:tt,middlewareData:xt,placement:be,rects:We,y:qe}=je,et=Ct(be),Ut=Ft(et),$e=Y.current,ct=((Ul=xt.arrow)==null?void 0:Ul.x)||0,go=((Ll=xt.arrow)==null?void 0:Ll.y)||0,pt=($e==null?void 0:$e.clientWidth)||0,Dt=($e==null?void 0:$e.clientHeight)||0,kn=ct+pt/2,Wt=go+Dt/2,Ml=Math.abs(((jl=xt.shift)==null?void 0:jl.y)||0),ff=We.reference.height/2,tr=typeof r=="function"?r(Nc(je,n,x)):r,hf=Ml>tr,gf={top:`${kn}px calc(100% + ${tr}px)`,bottom:`${kn}px ${-tr}px`,left:`calc(100% + ${tr}px) ${Wt}px`,right:`${-tr}px ${Wt}px`}[et],bf=`${kn}px ${We.reference.y+ff-qe}px`;return tt.floating.style.setProperty("--transform-origin",le&&Ut==="y"&&hf?bf:gf),{}}},Fv,v),ue(()=>{!b&&g&&g.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[b,g]);const fe=l.useMemo(()=>({elementResize:!p&&typeof ResizeObserver<"u",layoutShift:!p&&typeof IntersectionObserver<"u"}),[p]),{refs:Se,elements:Z,x:Fe,y:we,middlewareData:he,update:Pe,placement:se,context:$,isPositioned:ee,floatingStyles:te}=sv({rootContext:g,open:y?b:void 0,placement:H,middleware:K,strategy:o,whileElementsMounted:y?void 0:(...je)=>Dc(...je,fe),nodeId:T,externalTree:S}),{sideX:G,sideY:ge}=he.adaptiveOrigin||is,xe=ee?o:"fixed",Ke=l.useMemo(()=>{const je=v?{position:xe,[G]:Fe,[ge]:we}:{position:xe,...te};return ee||(je.opacity=0),je},[v,xe,G,Fe,ge,we,te,ee]),ze=l.useRef(null);ue(()=>{if(!b)return;const je=W.current,tt=typeof je=="function"?je():je,be=(Ic(tt)?tt.current:tt)||null||null;be!==ze.current&&(Se.setPositionReference(be),ze.current=be)},[b,Se,R,W]),l.useEffect(()=>{if(!b)return;const je=W.current;typeof je!="function"&&Ic(je)&&je.current!==ze.current&&(Se.setPositionReference(je.current),ze.current=je.current)},[b,Se,R,W]),l.useEffect(()=>{if(y&&b&&Z.domReference&&Z.floating)return Dc(Z.domReference,Z.floating,Pe,fe)},[y,b,Z,Pe,fe]);const Ge=Ct(se),it=Pp(n,Ge,x),It=_o(se)||"center",Bt=!!((St=he.hide)!=null&&St.referenceHidden);ue(()=>{C&&b&&ee&&P(Ge)},[C,b,ee,Ge]);const Vt=l.useMemo(()=>{var je,tt;return{position:"absolute",top:(je=he.arrow)==null?void 0:je.y,left:(tt=he.arrow)==null?void 0:tt.x}},[he.arrow]),ho=((Tn=he.arrow)==null?void 0:Tn.centerOffset)!==0;return l.useMemo(()=>({positionerStyles:Ke,arrowStyles:Vt,arrowRef:Y,arrowUncentered:ho,side:it,align:It,physicalSide:Ge,anchorHidden:Bt,refs:Se,context:$,isPositioned:ee,update:Pe}),[Ke,Vt,Y,ho,it,It,Ge,Bt,Se,$,ee,Pe])}function Ic(t){return t!=null&&"current"in t}function $s(t){return t==="starting"?Ky:Je}function cl(t,e,{styles:o,transitionStatus:n,props:r,refs:s,hidden:a,inert:i=!1}){const m={...o};return i&&(m.pointerEvents="none"),st("div",t,{state:e,ref:s,props:[{role:"presentation",hidden:a,style:m},$s(n),r],stateAttributesMapping:bn})}const Mv=l.forwardRef(function(e,o){const{render:n,className:r,anchor:s,positionMethod:a="absolute",side:i="top",align:m="center",sideOffset:d=0,alignOffset:c=0,collisionBoundary:p="clipping-ancestors",collisionPadding:h=5,arrowPadding:y=5,sticky:g=!1,disableAnchorTracking:b=!1,collisionAvoidance:f=Vi,style:w,...T}=e,v=Dr(),C=Rv(),S=v.useState("open"),k=v.useState("mounted"),P=v.useState("trackCursorAxis"),D=v.useState("disableHoverablePopup"),I=v.useState("floatingRootContext"),N=v.useState("instantType"),z=v.useState("transitionStatus"),U=v.useState("hasViewport"),R=ll({anchor:s,positionMethod:a,floatingRootContext:I,mounted:k,side:i,sideOffset:d,align:m,alignOffset:c,collisionBoundary:p,collisionPadding:h,sticky:g,arrowPadding:y,disableAnchorTracking:b,keepMounted:C,collisionAvoidance:f,adaptiveOrigin:U?il:void 0}),W=l.useMemo(()=>({open:S,side:R.side,align:R.align,anchorHidden:R.anchorHidden,instant:P!=="none"?"tracking-cursor":N}),[S,R.side,R.align,R.anchorHidden,P,N]),O=cl(e,W,{styles:R.positionerStyles,transitionStatus:z,props:T,refs:[o,v.useStateSetter("positionerElement")],hidden:!k,inert:!S||P==="both"||D});return u.jsx(Sp.Provider,{value:R,children:O})}),Uv={...bn,...Nr},Lv=l.forwardRef(function(e,o){const{render:n,className:r,style:s,...a}=e,i=Dr(),{side:m,align:d}=xp(),c=i.useState("open"),p=i.useState("instantType"),h=i.useState("transitionStatus"),y=i.useState("popupProps"),g=i.useState("floatingRootContext"),b=i.useState("disabled"),f=i.useState("closeDelay");Ir({open:c,ref:i.context.popupRef,onComplete(){var C,S;c&&((S=(C=i.context).onOpenChangeComplete)==null||S.call(C,!0))}}),rl(g,{enabled:!b,closeDelay:f});const w=i.useStateSetter("popupElement");return st("div",e,{state:{open:c,side:m,align:d,instant:p,transitionStatus:h},ref:[o,i.context.popupRef,w],props:[y,$s(h),a],stateAttributesMapping:Uv})}),jv=l.forwardRef(function(e,o){const{render:n,className:r,style:s,...a}=e,i=Dr(),{arrowRef:m,side:d,align:c,arrowUncentered:p,arrowStyles:h}=xp(),y=i.useState("open"),g=i.useState("instantType");return st("div",e,{state:{open:y,side:d,align:c,uncentered:p,instant:g},ref:[o,m],props:[{style:h,"aria-hidden":!0},a],stateAttributesMapping:bn})}),_v=function(e){const{delay:o,closeDelay:n,timeout:r=400}=e,s=l.useMemo(()=>({delay:o,closeDelay:n}),[o,n]),a=l.useMemo(()=>({open:o,close:n}),[o,n]);return u.jsx(Cp.Provider,{value:s,children:u.jsx(Qb,{delay:a,timeoutMs:r,children:e.children})})};function dl(t){return _i(19)?t:t?"true":void 0}function Rp(t){var e,o,n="";if(typeof t=="string"||typeof t=="number")n+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(e=0;e{const o=new Array(t.length+e.length);for(let n=0;n({classGroupId:t,validator:e}),Ap=(t=new Map,e=null,o)=>({nextPart:t,validators:e,classGroupId:o}),ks="-",Oc=[],Vv="arbitrary..",Wv=t=>{const e=Hv(t),{conflictingClassGroups:o,conflictingClassGroupModifiers:n}=t;return{getClassGroupId:a=>{if(a.startsWith("[")&&a.endsWith("]"))return qv(a);const i=a.split(ks),m=i[0]===""&&i.length>1?1:0;return Np(i,m,e)},getConflictingClassGroupIds:(a,i)=>{if(i){const m=n[a],d=o[a];return m?d?zv(d,m):m:d||Oc}return o[a]||Oc}}},Np=(t,e,o)=>{if(t.length-e===0)return o.classGroupId;const r=t[e],s=o.nextPart.get(r);if(s){const d=Np(t,e+1,s);if(d)return d}const a=o.validators;if(a===null)return;const i=e===0?t.join(ks):t.slice(e).join(ks),m=a.length;for(let d=0;dt.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const e=t.slice(1,-1),o=e.indexOf(":"),n=e.slice(0,o);return n?Vv+n:void 0})(),Hv=t=>{const{theme:e,classGroups:o}=t;return $v(o,e)},$v=(t,e)=>{const o=Ap();for(const n in t){const r=t[n];ul(r,o,n,e)}return o},ul=(t,e,o,n)=>{const r=t.length;for(let s=0;s{if(typeof t=="string"){Jv(t,e,o);return}if(typeof t=="function"){Gv(t,e,o,n);return}Yv(t,e,o,n)},Jv=(t,e,o)=>{const n=t===""?e:Ip(e,t);n.classGroupId=o},Gv=(t,e,o,n)=>{if(Qv(t)){ul(t(n),e,o,n);return}e.validators===null&&(e.validators=[]),e.validators.push(Bv(o,t))},Yv=(t,e,o,n)=>{const r=Object.entries(t),s=r.length;for(let a=0;a{let o=t;const n=e.split(ks),r=n.length;for(let s=0;s"isThemeGetter"in t&&t.isThemeGetter===!0,Xv=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,o=Object.create(null),n=Object.create(null);const r=(s,a)=>{o[s]=a,e++,e>t&&(e=0,n=o,o=Object.create(null))};return{get(s){let a=o[s];if(a!==void 0)return a;if((a=n[s])!==void 0)return r(s,a),a},set(s,a){s in o?o[s]=a:r(s,a)}}},li="!",Fc=":",Zv=[],Mc=(t,e,o,n,r)=>({modifiers:t,hasImportantModifier:e,baseClassName:o,maybePostfixModifierPosition:n,isExternal:r}),eC=t=>{const{prefix:e,experimentalParseClassName:o}=t;let n=r=>{const s=[];let a=0,i=0,m=0,d;const c=r.length;for(let b=0;bm?d-m:void 0;return Mc(s,y,h,g)};if(e){const r=e+Fc,s=n;n=a=>a.startsWith(r)?s(a.slice(r.length)):Mc(Zv,!1,a,void 0,!0)}if(o){const r=n;n=s=>o({className:s,parseClassName:r})}return n},tC=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((o,n)=>{e.set(o,1e6+n)}),o=>{const n=[];let r=[];for(let s=0;s0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},oC=t=>({cache:Xv(t.cacheSize),parseClassName:eC(t),sortModifiers:tC(t),postfixLookupClassGroupIds:nC(t),...Wv(t)}),nC=t=>{const e=Object.create(null),o=t.postfixLookupClassGroups;if(o)for(let n=0;n{const{parseClassName:o,getClassGroupId:n,getConflictingClassGroupIds:r,sortModifiers:s,postfixLookupClassGroupIds:a}=e,i=[],m=t.trim().split(rC);let d="";for(let c=m.length-1;c>=0;c-=1){const p=m[c],{isExternal:h,modifiers:y,hasImportantModifier:g,baseClassName:b,maybePostfixModifierPosition:f}=o(p);if(h){d=p+(d.length>0?" "+d:d);continue}let w=!!f,T;if(w){const P=b.substring(0,f);T=n(P);const D=T&&a[T]?n(b):void 0;D&&D!==T&&(T=D,w=!1)}else T=n(b);if(!T){if(!w){d=p+(d.length>0?" "+d:d);continue}if(T=n(b),!T){d=p+(d.length>0?" "+d:d);continue}w=!1}const v=y.length===0?"":y.length===1?y[0]:s(y).join(":"),C=g?v+li:v,S=C+T;if(i.indexOf(S)>-1)continue;i.push(S);const k=r(T,w);for(let P=0;P0?" "+d:d)}return d},aC=(...t)=>{let e=0,o,n,r="";for(;e{if(typeof t=="string")return t;let e,o="";for(let n=0;n{let o,n,r,s;const a=m=>{const d=e.reduce((c,p)=>p(c),t());return o=oC(d),n=o.cache.get,r=o.cache.set,s=i,i(m)},i=m=>{const d=n(m);if(d)return d;const c=sC(m,o);return r(m,c),c};return s=a,(...m)=>s(aC(...m))},lC=[],ot=t=>{const e=o=>o[t]||lC;return e.isThemeGetter=!0,e},Fp=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Mp=/^\((?:(\w[\w-]*):)?(.+)\)$/i,cC=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,dC=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,uC=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,pC=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,mC=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,fC=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,bo=t=>cC.test(t),Ee=t=>!!t&&!Number.isNaN(Number(t)),Ht=t=>!!t&&Number.isInteger(Number(t)),ga=t=>t.endsWith("%")&&Ee(t.slice(0,-1)),ro=t=>dC.test(t),Up=()=>!0,hC=t=>uC.test(t)&&!pC.test(t),pl=()=>!1,gC=t=>mC.test(t),bC=t=>fC.test(t),yC=t=>!ae(t)&&!ie(t),wC=t=>t.startsWith("@container")&&(t[10]==="/"&&t[11]!==void 0||t[11]==="s"&&t[16]!==void 0&&t.startsWith("-size/",10)||t[11]==="n"&&t[18]!==void 0&&t.startsWith("-normal/",10)),vC=t=>Bo(t,_p,pl),ae=t=>Fp.test(t),Ho=t=>Bo(t,zp,hC),Uc=t=>Bo(t,RC,Ee),CC=t=>Bo(t,Vp,Up),TC=t=>Bo(t,Bp,pl),Lc=t=>Bo(t,Lp,pl),kC=t=>Bo(t,jp,bC),Gr=t=>Bo(t,Wp,gC),ie=t=>Mp.test(t),rr=t=>wn(t,zp),SC=t=>wn(t,Bp),jc=t=>wn(t,Lp),xC=t=>wn(t,_p),DC=t=>wn(t,jp),Yr=t=>wn(t,Wp,!0),PC=t=>wn(t,Vp,!0),Bo=(t,e,o)=>{const n=Fp.exec(t);return n?n[1]?e(n[1]):o(n[2]):!1},wn=(t,e,o=!1)=>{const n=Mp.exec(t);return n?n[1]?e(n[1]):o:!1},Lp=t=>t==="position"||t==="percentage",jp=t=>t==="image"||t==="url",_p=t=>t==="length"||t==="size"||t==="bg-size",zp=t=>t==="length",RC=t=>t==="number",Bp=t=>t==="family-name",Vp=t=>t==="number"||t==="weight",Wp=t=>t==="shadow",EC=()=>{const t=ot("color"),e=ot("font"),o=ot("text"),n=ot("font-weight"),r=ot("tracking"),s=ot("leading"),a=ot("breakpoint"),i=ot("container"),m=ot("spacing"),d=ot("radius"),c=ot("shadow"),p=ot("inset-shadow"),h=ot("text-shadow"),y=ot("drop-shadow"),g=ot("blur"),b=ot("perspective"),f=ot("aspect"),w=ot("ease"),T=ot("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],S=()=>[...C(),ie,ae],k=()=>["auto","hidden","clip","visible","scroll"],P=()=>["auto","contain","none"],D=()=>[ie,ae,m],I=()=>[bo,"full","auto",...D()],N=()=>[Ht,"none","subgrid",ie,ae],z=()=>["auto",{span:["full",Ht,ie,ae]},Ht,ie,ae],U=()=>[Ht,"auto",ie,ae],R=()=>["auto","min","max","fr",ie,ae],W=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],O=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...D()],x=()=>[bo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...D()],F=()=>[bo,"screen","full","dvw","lvw","svw","min","max","fit",...D()],H=()=>[bo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...D()],A=()=>[t,ie,ae],Q=()=>[...C(),jc,Lc,{position:[ie,ae]}],M=()=>["no-repeat",{repeat:["","x","y","space","round"]}],L=()=>["auto","cover","contain",xC,vC,{size:[ie,ae]}],V=()=>[ga,rr,Ho],_=()=>["","none","full",d,ie,ae],B=()=>["",Ee,rr,Ho],Y=()=>["solid","dashed","dotted","double"],q=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],J=()=>[Ee,ga,jc,Lc],Te=()=>["","none",g,ie,ae],Re=()=>["none",Ee,ie,ae],K=()=>["none",Ee,ie,ae],de=()=>[Ee,ie,ae],le=()=>[bo,"full",...D()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[ro],breakpoint:[ro],color:[Up],container:[ro],"drop-shadow":[ro],ease:["in","out","in-out"],font:[yC],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[ro],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[ro],shadow:[ro],spacing:["px",Ee],text:[ro],"text-shadow":[ro],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",bo,ae,ie,f]}],container:["container"],"container-type":[{"@container":["","normal","size",ie,ae]}],"container-named":[wC],columns:[{columns:[Ee,ae,ie,i]}],"break-after":[{"break-after":v()}],"break-before":[{"break-before":v()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:S()}],overflow:[{overflow:k()}],"overflow-x":[{"overflow-x":k()}],"overflow-y":[{"overflow-y":k()}],overscroll:[{overscroll:P()}],"overscroll-x":[{"overscroll-x":P()}],"overscroll-y":[{"overscroll-y":P()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:I()}],"inset-x":[{"inset-x":I()}],"inset-y":[{"inset-y":I()}],start:[{"inset-s":I(),start:I()}],end:[{"inset-e":I(),end:I()}],"inset-bs":[{"inset-bs":I()}],"inset-be":[{"inset-be":I()}],top:[{top:I()}],right:[{right:I()}],bottom:[{bottom:I()}],left:[{left:I()}],visibility:["visible","invisible","collapse"],z:[{z:[Ht,"auto",ie,ae]}],basis:[{basis:[bo,"full","auto",i,...D()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ee,bo,"auto","initial","none",ae]}],grow:[{grow:["",Ee,ie,ae]}],shrink:[{shrink:["",Ee,ie,ae]}],order:[{order:[Ht,"first","last","none",ie,ae]}],"grid-cols":[{"grid-cols":N()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":U()}],"col-end":[{"col-end":U()}],"grid-rows":[{"grid-rows":N()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":U()}],"row-end":[{"row-end":U()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":R()}],"auto-rows":[{"auto-rows":R()}],gap:[{gap:D()}],"gap-x":[{"gap-x":D()}],"gap-y":[{"gap-y":D()}],"justify-content":[{justify:[...W(),"normal"]}],"justify-items":[{"justify-items":[...O(),"normal"]}],"justify-self":[{"justify-self":["auto",...O()]}],"align-content":[{content:["normal",...W()]}],"align-items":[{items:[...O(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...O(),{baseline:["","last"]}]}],"place-content":[{"place-content":W()}],"place-items":[{"place-items":[...O(),"baseline"]}],"place-self":[{"place-self":["auto",...O()]}],p:[{p:D()}],px:[{px:D()}],py:[{py:D()}],ps:[{ps:D()}],pe:[{pe:D()}],pbs:[{pbs:D()}],pbe:[{pbe:D()}],pt:[{pt:D()}],pr:[{pr:D()}],pb:[{pb:D()}],pl:[{pl:D()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":D()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":D()}],"space-y-reverse":["space-y-reverse"],size:[{size:x()}],"inline-size":[{inline:["auto",...F()]}],"min-inline-size":[{"min-inline":["auto",...F()]}],"max-inline-size":[{"max-inline":["none",...F()]}],"block-size":[{block:["auto",...H()]}],"min-block-size":[{"min-block":["auto",...H()]}],"max-block-size":[{"max-block":["none",...H()]}],w:[{w:[i,"screen",...x()]}],"min-w":[{"min-w":[i,"screen","none",...x()]}],"max-w":[{"max-w":[i,"screen","none","prose",{screen:[a]},...x()]}],h:[{h:["screen","lh",...x()]}],"min-h":[{"min-h":["screen","lh","none",...x()]}],"max-h":[{"max-h":["screen","lh",...x()]}],"font-size":[{text:["base",o,rr,Ho]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[n,PC,CC]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",ga,ae]}],"font-family":[{font:[SC,TC,e]}],"font-features":[{"font-features":[ae]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[r,ie,ae]}],"line-clamp":[{"line-clamp":[Ee,"none",ie,Uc]}],leading:[{leading:[s,...D()]}],"list-image":[{"list-image":["none",ie,ae]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ie,ae]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:A()}],"text-color":[{text:A()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Y(),"wavy"]}],"text-decoration-thickness":[{decoration:[Ee,"from-font","auto",ie,Ho]}],"text-decoration-color":[{decoration:A()}],"underline-offset":[{"underline-offset":[Ee,"auto",ie,ae]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:D()}],"tab-size":[{tab:[Ht,ie,ae]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ie,ae]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ie,ae]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:Q()}],"bg-repeat":[{bg:M()}],"bg-size":[{bg:L()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ht,ie,ae],radial:["",ie,ae],conic:[Ht,ie,ae]},DC,kC]}],"bg-color":[{bg:A()}],"gradient-from-pos":[{from:V()}],"gradient-via-pos":[{via:V()}],"gradient-to-pos":[{to:V()}],"gradient-from":[{from:A()}],"gradient-via":[{via:A()}],"gradient-to":[{to:A()}],rounded:[{rounded:_()}],"rounded-s":[{"rounded-s":_()}],"rounded-e":[{"rounded-e":_()}],"rounded-t":[{"rounded-t":_()}],"rounded-r":[{"rounded-r":_()}],"rounded-b":[{"rounded-b":_()}],"rounded-l":[{"rounded-l":_()}],"rounded-ss":[{"rounded-ss":_()}],"rounded-se":[{"rounded-se":_()}],"rounded-ee":[{"rounded-ee":_()}],"rounded-es":[{"rounded-es":_()}],"rounded-tl":[{"rounded-tl":_()}],"rounded-tr":[{"rounded-tr":_()}],"rounded-br":[{"rounded-br":_()}],"rounded-bl":[{"rounded-bl":_()}],"border-w":[{border:B()}],"border-w-x":[{"border-x":B()}],"border-w-y":[{"border-y":B()}],"border-w-s":[{"border-s":B()}],"border-w-e":[{"border-e":B()}],"border-w-bs":[{"border-bs":B()}],"border-w-be":[{"border-be":B()}],"border-w-t":[{"border-t":B()}],"border-w-r":[{"border-r":B()}],"border-w-b":[{"border-b":B()}],"border-w-l":[{"border-l":B()}],"divide-x":[{"divide-x":B()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":B()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Y(),"hidden","none"]}],"divide-style":[{divide:[...Y(),"hidden","none"]}],"border-color":[{border:A()}],"border-color-x":[{"border-x":A()}],"border-color-y":[{"border-y":A()}],"border-color-s":[{"border-s":A()}],"border-color-e":[{"border-e":A()}],"border-color-bs":[{"border-bs":A()}],"border-color-be":[{"border-be":A()}],"border-color-t":[{"border-t":A()}],"border-color-r":[{"border-r":A()}],"border-color-b":[{"border-b":A()}],"border-color-l":[{"border-l":A()}],"divide-color":[{divide:A()}],"outline-style":[{outline:[...Y(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Ee,ie,ae]}],"outline-w":[{outline:["",Ee,rr,Ho]}],"outline-color":[{outline:A()}],shadow:[{shadow:["","none",c,Yr,Gr]}],"shadow-color":[{shadow:A()}],"inset-shadow":[{"inset-shadow":["none",p,Yr,Gr]}],"inset-shadow-color":[{"inset-shadow":A()}],"ring-w":[{ring:B()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:A()}],"ring-offset-w":[{"ring-offset":[Ee,Ho]}],"ring-offset-color":[{"ring-offset":A()}],"inset-ring-w":[{"inset-ring":B()}],"inset-ring-color":[{"inset-ring":A()}],"text-shadow":[{"text-shadow":["none",h,Yr,Gr]}],"text-shadow-color":[{"text-shadow":A()}],opacity:[{opacity:[Ee,ie,ae]}],"mix-blend":[{"mix-blend":[...q(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":q()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Ee]}],"mask-image-linear-from-pos":[{"mask-linear-from":J()}],"mask-image-linear-to-pos":[{"mask-linear-to":J()}],"mask-image-linear-from-color":[{"mask-linear-from":A()}],"mask-image-linear-to-color":[{"mask-linear-to":A()}],"mask-image-t-from-pos":[{"mask-t-from":J()}],"mask-image-t-to-pos":[{"mask-t-to":J()}],"mask-image-t-from-color":[{"mask-t-from":A()}],"mask-image-t-to-color":[{"mask-t-to":A()}],"mask-image-r-from-pos":[{"mask-r-from":J()}],"mask-image-r-to-pos":[{"mask-r-to":J()}],"mask-image-r-from-color":[{"mask-r-from":A()}],"mask-image-r-to-color":[{"mask-r-to":A()}],"mask-image-b-from-pos":[{"mask-b-from":J()}],"mask-image-b-to-pos":[{"mask-b-to":J()}],"mask-image-b-from-color":[{"mask-b-from":A()}],"mask-image-b-to-color":[{"mask-b-to":A()}],"mask-image-l-from-pos":[{"mask-l-from":J()}],"mask-image-l-to-pos":[{"mask-l-to":J()}],"mask-image-l-from-color":[{"mask-l-from":A()}],"mask-image-l-to-color":[{"mask-l-to":A()}],"mask-image-x-from-pos":[{"mask-x-from":J()}],"mask-image-x-to-pos":[{"mask-x-to":J()}],"mask-image-x-from-color":[{"mask-x-from":A()}],"mask-image-x-to-color":[{"mask-x-to":A()}],"mask-image-y-from-pos":[{"mask-y-from":J()}],"mask-image-y-to-pos":[{"mask-y-to":J()}],"mask-image-y-from-color":[{"mask-y-from":A()}],"mask-image-y-to-color":[{"mask-y-to":A()}],"mask-image-radial":[{"mask-radial":[ie,ae]}],"mask-image-radial-from-pos":[{"mask-radial-from":J()}],"mask-image-radial-to-pos":[{"mask-radial-to":J()}],"mask-image-radial-from-color":[{"mask-radial-from":A()}],"mask-image-radial-to-color":[{"mask-radial-to":A()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[Ee]}],"mask-image-conic-from-pos":[{"mask-conic-from":J()}],"mask-image-conic-to-pos":[{"mask-conic-to":J()}],"mask-image-conic-from-color":[{"mask-conic-from":A()}],"mask-image-conic-to-color":[{"mask-conic-to":A()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:Q()}],"mask-repeat":[{mask:M()}],"mask-size":[{mask:L()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ie,ae]}],filter:[{filter:["","none",ie,ae]}],blur:[{blur:Te()}],brightness:[{brightness:[Ee,ie,ae]}],contrast:[{contrast:[Ee,ie,ae]}],"drop-shadow":[{"drop-shadow":["","none",y,Yr,Gr]}],"drop-shadow-color":[{"drop-shadow":A()}],grayscale:[{grayscale:["",Ee,ie,ae]}],"hue-rotate":[{"hue-rotate":[Ee,ie,ae]}],invert:[{invert:["",Ee,ie,ae]}],saturate:[{saturate:[Ee,ie,ae]}],sepia:[{sepia:["",Ee,ie,ae]}],"backdrop-filter":[{"backdrop-filter":["","none",ie,ae]}],"backdrop-blur":[{"backdrop-blur":Te()}],"backdrop-brightness":[{"backdrop-brightness":[Ee,ie,ae]}],"backdrop-contrast":[{"backdrop-contrast":[Ee,ie,ae]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ee,ie,ae]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ee,ie,ae]}],"backdrop-invert":[{"backdrop-invert":["",Ee,ie,ae]}],"backdrop-opacity":[{"backdrop-opacity":[Ee,ie,ae]}],"backdrop-saturate":[{"backdrop-saturate":[Ee,ie,ae]}],"backdrop-sepia":[{"backdrop-sepia":["",Ee,ie,ae]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":D()}],"border-spacing-x":[{"border-spacing-x":D()}],"border-spacing-y":[{"border-spacing-y":D()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",ie,ae]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ee,"initial",ie,ae]}],ease:[{ease:["linear","initial",w,ie,ae]}],delay:[{delay:[Ee,ie,ae]}],animate:[{animate:["none",T,ie,ae]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[b,ie,ae]}],"perspective-origin":[{"perspective-origin":S()}],rotate:[{rotate:Re()}],"rotate-x":[{"rotate-x":Re()}],"rotate-y":[{"rotate-y":Re()}],"rotate-z":[{"rotate-z":Re()}],scale:[{scale:K()}],"scale-x":[{"scale-x":K()}],"scale-y":[{"scale-y":K()}],"scale-z":[{"scale-z":K()}],"scale-3d":["scale-3d"],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[ie,ae,"","none","gpu","cpu"]}],"transform-origin":[{origin:S()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:le()}],"translate-x":[{"translate-x":le()}],"translate-y":[{"translate-y":le()}],"translate-z":[{"translate-z":le()}],"translate-none":["translate-none"],zoom:[{zoom:[Ht,ie,ae]}],accent:[{accent:A()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:A()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ie,ae]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":A()}],"scrollbar-track-color":[{"scrollbar-track":A()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":D()}],"scroll-mx":[{"scroll-mx":D()}],"scroll-my":[{"scroll-my":D()}],"scroll-ms":[{"scroll-ms":D()}],"scroll-me":[{"scroll-me":D()}],"scroll-mbs":[{"scroll-mbs":D()}],"scroll-mbe":[{"scroll-mbe":D()}],"scroll-mt":[{"scroll-mt":D()}],"scroll-mr":[{"scroll-mr":D()}],"scroll-mb":[{"scroll-mb":D()}],"scroll-ml":[{"scroll-ml":D()}],"scroll-p":[{"scroll-p":D()}],"scroll-px":[{"scroll-px":D()}],"scroll-py":[{"scroll-py":D()}],"scroll-ps":[{"scroll-ps":D()}],"scroll-pe":[{"scroll-pe":D()}],"scroll-pbs":[{"scroll-pbs":D()}],"scroll-pbe":[{"scroll-pbe":D()}],"scroll-pt":[{"scroll-pt":D()}],"scroll-pr":[{"scroll-pr":D()}],"scroll-pb":[{"scroll-pb":D()}],"scroll-pl":[{"scroll-pl":D()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ie,ae]}],fill:[{fill:["none",...A()]}],"stroke-w":[{stroke:[Ee,rr,Ho,Uc]}],stroke:[{stroke:["none",...A()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},AC=iC(EC);function Ie(...t){return AC(Ep(t))}function qp({delay:t=0,...e}){return u.jsx(_v,{"data-slot":"tooltip-provider",delay:t,...e})}function Hp({...t}){return u.jsx(gv,{"data-slot":"tooltip",...t})}function $p({...t}){return u.jsx(Pv,{"data-slot":"tooltip-trigger",...t})}function Kp({className:t,side:e="top",sideOffset:o=4,align:n="center",alignOffset:r=0,children:s,...a}){return u.jsx(Av,{children:u.jsx(Mv,{align:n,alignOffset:r,side:e,sideOffset:o,className:"isolate z-50",children:u.jsxs(Lv,{"data-slot":"tooltip-content",className:Ie("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-[oklch(0.55_0.20_30)] px-3 py-1.5 text-xs text-white shadow-lg dark:bg-[oklch(0.63_0.22_30)] has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...a,children:[s,u.jsx(jv,{className:"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-[oklch(0.55_0.20_30)] fill-[oklch(0.55_0.20_30)] dark:bg-[oklch(0.63_0.22_30)] dark:fill-[oklch(0.63_0.22_30)] data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}function Jp(){const t=vf();return{push:e=>t(e),replace:e=>t(e,{replace:!0}),back:()=>t(-1),forward:()=>t(1),refresh:()=>t(0)}}function Gp(){return Tf().pathname}function p0(){return Cf()[0]}const _c=t=>{let e;const o=new Set,n=(d,c)=>{const p=typeof d=="function"?d(e):d;if(!Object.is(p,e)){const h=e;e=c??(typeof p!="object"||p===null)?p:Object.assign({},e,p),o.forEach(y=>y(e,h))}},r=()=>e,i={setState:n,getState:r,getInitialState:()=>m,subscribe:d=>(o.add(d),()=>o.delete(d))},m=e=t(n,r,i);return i},NC=(t=>t?_c(t):_c),IC=t=>t;function OC(t,e=IC){const o=X.useSyncExternalStore(t.subscribe,X.useCallback(()=>e(t.getState()),[t,e]),X.useCallback(()=>e(t.getInitialState()),[t,e]));return X.useDebugValue(o),o}const FC=t=>{const e=NC(t),o=n=>OC(e,n);return Object.assign(o,e),o},ml=(t=>FC);function MC(t,e){let o;try{o=t()}catch{return}return{getItem:r=>{var s;const a=m=>m===null?null:JSON.parse(m,void 0),i=(s=o.getItem(r))!=null?s:null;return i instanceof Promise?i.then(a):a(i)},setItem:(r,s)=>o.setItem(r,JSON.stringify(s,void 0)),removeItem:r=>o.removeItem(r)}}const ci=t=>e=>{try{const o=t(e);return o instanceof Promise?o:{then(n){return ci(n)(o)},catch(n){return this}}}catch(o){return{then(n){return this},catch(n){return ci(n)(o)}}}},UC=(t,e)=>(o,n,r)=>{let s={storage:MC(()=>window.localStorage),partialize:f=>f,version:0,merge:(f,w)=>({...w,...f}),...e},a=!1,i=0;const m=new Set,d=new Set;let c=s.storage;if(!c)return t((...f)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),o(...f)},n,r);const p=()=>{const f=s.partialize({...n()});return c.setItem(s.name,{state:f,version:s.version})},h=r.setState;r.setState=(f,w)=>(h(f,w),p());const y=t((...f)=>(o(...f),p()),n,r);r.getInitialState=()=>y;let g;const b=()=>{var f,w;if(!c)return;const T=++i;a=!1,m.forEach(C=>{var S;return C((S=n())!=null?S:y)});const v=((w=s.onRehydrateStorage)==null?void 0:w.call(s,(f=n())!=null?f:y))||void 0;return ci(c.getItem.bind(c))(s.name).then(C=>{if(C)if(typeof C.version=="number"&&C.version!==s.version){if(s.migrate){const S=s.migrate(C.state,C.version);return S instanceof Promise?S.then(k=>[!0,k]):[!0,S]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,C.state];return[!1,void 0]}).then(C=>{var S;if(T!==i)return;const[k,P]=C;if(g=s.merge(P,(S=n())!=null?S:y),o(g,!0),k)return p()}).then(()=>{T===i&&(v==null||v(n(),void 0),g=n(),a=!0,d.forEach(C=>C(g)))}).catch(C=>{T===i&&(v==null||v(void 0,C))})};return r.persist={setOptions:f=>{s={...s,...f},f.storage&&(c=f.storage)},clearStorage:()=>{c==null||c.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>b(),hasHydrated:()=>a,onHydrate:f=>(m.add(f),()=>{m.delete(f)}),onFinishHydration:f=>(d.add(f),()=>{d.delete(f)})},s.skipHydration||b(),g||y},fl=UC,LC={"layout.brand":"RaisFast","layout.adminPanel":"Admin Panel","layout.dashboard":"Dashboard","layout.content":"Content","layout.extension":"Extensions","layout.system":"System","layout.posts":"Posts","layout.categories":"Categories","layout.tags":"Tags","layout.comments":"Comments","layout.media":"Media","layout.contentTypes":"Content Types","layout.users":"Users","layout.plugins":"Plugins","layout.rolesPermissions":"Roles & Permissions","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"API Tokens","layout.workflows":"Workflows","layout.auditLog":"Audit Log","layout.options":"Options","layout.tenant":"Tenant","layout.clearTenant":"Clear tenant filter","layout.all":"All","layout.accessDenied":"Access Denied","layout.accessDeniedMsg":"You need to be logged in as an author or admin to access this area.","layout.goToLogin":"Go to Login","layout.toggleTheme":"Toggle theme","templates.title":"Templates","templates.all":"All","templates.search":"Search templates...","templates.empty":"No templates found","layout.signOut":"Sign out","layout.profile":"Profile","common.loading":"Loading...","common.save":"Save","common.cancel":"Cancel","common.ok":"OK","common.create":"Create","common.creating":"Creating...","common.saving":"Saving...","common.delete":"Delete","common.confirmDeleteTitle":"Confirm Delete","common.edit":"Edit","common.content":"Content","common.view":"View","common.remove":"Remove","common.download":"Download","common.back":"Back","common.clear":"Clear","common.actions":"Actions","common.status":"Status","common.retry":"Retry","common.previous":"Previous","common.next":"Next","common.pageOf":"Page {page} of {total}","common.totalRecords":"{count} records","common.noData":"No data","common.all":"All","common.draft":"Draft","common.published":"Published","common.archived":"Archived","common.enabled":"Enabled","common.disabled":"Disabled","common.name":"Name","common.description":"Description","common.enabledCount":"{count} enabled","common.disabledCount":"{count} disabled","common.adminOnly":"Admin Only","common.adminOnlyMsg":"Only administrators can manage this section.","common.backToDashboard":"Back to Dashboard","common.confirmDelete":"Are you sure you want to delete this item?","common.notFound":"Not Found","common.failedToLoad":"Failed to load","common.selectStatus":"Select status","common.titleRequired":"Title is required","common.contentRequired":"Content is required","common.nameRequired":"Name is required","common.invalidJson":"Invalid JSON","common.isRequired":"{field} is required","common.created":"{name} created","common.updated":"{name} updated","common.deleted":"{name} deleted","common.failedToCreate":"Failed to create {name}","common.failedToUpdate":"Failed to update {name}","common.failedToDelete":"Failed to delete {name}","common.none":"None","common.noDependencies":"No dependencies","dashboard.title":"Dashboard","dashboard.posts":"Posts","dashboard.comments":"Comments","dashboard.categories":"Categories","dashboard.tags":"Tags","dashboard.media":"Media","dashboard.users":"Users","dashboard.contentTypes":"Content Types","dashboard.postsLast14Days":"Posts (Last 14 Days)","dashboard.ordersAndProducts14Days":"Orders & Products (Last 14 Days)","dashboard.viewAll":"View All","dashboard.failedToLoad":"Failed to load dashboard stats. Data may be stale.","dashboard.noDataYet":"No data yet.","dashboard.recentActivity":"Recent Activity","dashboard.noActivity":"No activity yet.","dashboard.type":"Type","dashboard.detail":"Detail","dashboard.time":"Time","dashboard.post":"Post","dashboard.comment":"Comment","dashboard.product":"Product","dashboard.order":"Order","dashboard.products":"Products","dashboard.orders":"Orders","dashboard.revenue":"Revenue","dashboard.coupons":"Coupons","dashboard.orderStatus":"Order Status","dashboard.justNow":"just now","dashboard.minutesAgo":"m ago","dashboard.hoursAgo":"h ago","dashboard.daysAgo":"d ago","posts.title":"Posts","posts.newPost":"New Post","posts.editPost":"Edit Post","posts.postTitle":"Post title","posts.titleCol":"Title","posts.categoryCol":"Category","posts.authorCol":"Author","posts.createdCol":"Created","posts.allStatus":"All Status","posts.searchPlaceholder":"Search posts...","posts.content":"Content","posts.excerpt":"Excerpt","posts.briefSummary":"Brief summary (optional)","posts.coverImage":"Cover Image","posts.writeContent":"Write your post content in Markdown...","posts.selectCategory":"Select category","posts.tags":"Tags","posts.slug":"Slug","posts.slugPlaceholder":"Auto-generated from title if empty","posts.noTags":"No tags available","posts.addTag":"Add tag...","posts.createTag":"Create","posts.createPost":"Create Post","posts.saveChanges":"Save Changes","posts.postCreated":"Post created","posts.postUpdated":"Post updated","posts.postDeleted":"Post deleted","posts.failedToCreate":"Failed to create post","posts.failedToUpdate":"Failed to update post","posts.failedToDelete":"Failed to delete post","posts.confirmDelete":"Are you sure you want to delete this post?","posts.confirmBatchDelete":"Are you sure you want to delete {count} posts?","posts.batchPublish":"Publish","posts.batchUnpublish":"Unpublish","posts.batchSuccess":"{count} posts updated","posts.noPosts":"No posts found.","posts.noPostsDesc":"Create your first blog post to share your ideas.","posts.failedToLoad":"Failed to load post.","categories.title":"Categories","categories.newCategory":"New Category","categories.createCategory":"Create a new category for organizing posts.","categories.categoryName":"Category name","categories.optionalDesc":"Optional description","categories.sortOrder":"Sort Order","categories.slug":"Slug","categories.categoryCreated":"Category created","categories.categoryUpdated":"Category updated","categories.categoryDeleted":"Category deleted","categories.failedToCreate":"Failed to create category","categories.failedToUpdate":"Failed to update category","categories.failedToDelete":"Failed to delete category","categories.confirmDelete":"Are you sure you want to delete this category?","categories.confirmDeleteTitle":"Delete Category","categories.noCategories":"No Categories Yet","categories.noCategoriesDesc":"Organize your posts with categories.","categories.treeTitle":"Categories","categories.selectCategory":"Select a category to view details","categories.addChild":"Add Sub","categories.parent":"Parent Category","categories.noParent":"No Parent","categories.editCategory":"Edit Category","categories.cannotDeleteHasChildren":"Cannot delete this category because it has {count} sub-categories. Please move or delete them first.","categories.coverImage":"Cover Image","tags.title":"Tags","tags.newTag":"New Tag","tags.createTag":"Create a new tag for posts.","tags.tagName":"Tag name","tags.tagCreated":"Tag created","tags.tagUpdated":"Tag updated","tags.tagDeleted":"Tag deleted","tags.failedToCreate":"Failed to create tag","tags.failedToUpdate":"Failed to update tag","tags.failedToDelete":"Failed to delete tag","tags.confirmDelete":"Are you sure you want to delete this tag?","tags.noTags":"No tags found.","tags.noTagsDesc":"Add tags to help organize and filter your content.","comments.title":"Comments","comments.total":"{count} total","comments.all":"All","comments.pending":"Pending","comments.approved":"Approved","comments.rejected":"Rejected","comments.spam":"Spam","comments.approve":"Approve","comments.reject":"Reject","comments.author":"Author","comments.contentCol":"Content","comments.post":"Post","comments.date":"Date","comments.selected":"{count} selected","comments.commentStatusUpdated":"Comment status updated","comments.commentDeleted":"Comment deleted","comments.bulkActionDone":"{count} comment(s) {status}","comments.bulkDeleted":"{count} comment(s) deleted","comments.bulkActionFailed":"Bulk action failed","comments.bulkDeleteFailed":"Bulk delete failed","comments.failedToUpdateStatus":"Failed to update status","comments.failedToDelete":"Failed to delete comment","comments.confirmDelete":"Are you sure you want to delete this comment?","comments.confirmBulkDelete":"Delete {count} selected comment(s)?","comments.noComments":"No comments found.","comments.noCommentsDesc":"Comments will appear here once readers start engaging.","contentTypes.title":"Content Types","contentTypes.noFields":"This content type has no editable fields.","contentTypes.createContentType":"Create Content Type","contentTypes.builder":"Builder","contentTypes.ungrouped":"Ungrouped","contentTypes.noContentTypes":"No content types yet","contentTypes.noContentTypesDesc":"Create your first content type to start building your CMS.","contentTypes.contentTypeDeleted":"Content type deleted","contentTypes.failedToDelete":"Failed to delete","contentTypes.confirmDelete":'Delete content type "{singular}"? This removes the schema file but NOT the database table.',"contentTypes.notFound":"Content Type Not Found","contentTypes.notFoundMsg":'Content type "{singular}" not found.',"contentTypes.itemDeleted":"Item deleted","contentTypes.failedToDeleteItem":"Failed to delete item","contentTypes.confirmDeleteItem":"Are you sure you want to delete this item?","contentTypes.batchDeleteSuccess":"{count} items deleted","contentTypes.confirmBatchDelete":"Are you sure you want to delete {count} items?","contentTypes.export":"Export","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} items exported","contentTypes.import":"Import","contentTypes.importJson":"Import JSON","contentTypes.importCsv":"Import CSV","contentTypes.importExcel":"Import Excel","contentTypes.importSuccess":"{count} records imported","contentTypes.importPartial":"{ok} imported, {failed} failed","contentTypes.importEmpty":"No records found in file","contentTypes.importTooMany":"Too many records (max {max})","contentTypes.importFailed":"Import failed","contentTypes.importTooLarge":"File exceeds the 8 MB limit","contentTypes.noItems":"No items found.","contentTypes.noItemsDesc":"Create your first item to populate this collection.","contentTypes.newItem":"New {name}","contentTypes.editStructure":"Edit Structure","contentTypes.addRecord":"Add","contentTypes.browseRecords":"Browse","contentTypes.editItem":"Edit {name}","contentTypes.itemNotFound":"Item not found.","contentTypes.fields":"{count} field(s)","contentTypes.fieldsLabel":"fields","contentTypes.totalRecords":"{count} records","contentTypes.createdAt":"Created","contentTypes.updatedAt":"Updated","contentTypes.searchPlaceholder":"Search records...","contentTypes.searchTypes":"Search name, singular, plural, table...","contentTypes.noSearchResults":"No content types found","contentTypes.noSearchResultsDesc":'No content types match "{keyword}".',"contentTypes.exportData":"Export","contentTypes.api":"API","contentTypes.apiSaved":"API settings saved","contentTypes.apiSaveFailed":"Failed to save API settings","contentTypes.exportDataSuccess":"Export complete","contentTypes.exportDataFailed":"Export failed","contentTypes.exportEmpty":"No records to export","users.title":"Users","users.newUser":"New User","users.createUser":"Create User","users.registerNew":"Register a new user account.","users.username":"Username","users.email":"Email","users.password":"Password","users.minChars":"At least 8 characters, must contain uppercase, lowercase letters and digits","users.role":"Role","users.joined":"Joined","users.editRole":"Edit User Role","users.editUser":"Edit User","users.changeRoleFor":"Change role for {username} ({email})","users.reader":"Reader","users.author":"Author","users.admin":"Admin","users.active":"Active","users.suspended":"Suspended","users.banned":"Banned","users.newPassword":"New Password","users.userCreated":"User created","users.userUpdated":"User updated","users.userRoleUpdated":"User role updated","users.failedToCreate":"Failed to create user","users.failedToUpdate":"Failed to update user","users.noUsers":"No users found.","users.noUsersDesc":"Invite users and manage their roles.","users.registeredVia":"Source","users.userDeleted":"User deleted","users.failedToDelete":"Failed to delete user","users.confirmDeleteUser":'Are you sure you want to delete user "{username}"? This action cannot be undone.',"webhooks.title":"Webhooks","webhooks.name":"Name","webhooks.namePlaceholder":"e.g. Slack notifier","webhooks.nameCol":"Name","webhooks.newWebhook":"New Webhook","webhooks.createWebhook":"Create a new webhook subscription to receive event notifications.","webhooks.callbackUrl":"Callback URL","webhooks.eventsComma":"Events (comma-separated)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Use * to subscribe to all events","webhooks.descriptionOptional":"Description (optional)","webhooks.secretOptional":"Secret (optional)","webhooks.secretPlaceholder":"Leave empty if not needed","webhooks.secretHint":"Used for HMAC-SHA256 signature verification (X-Webhook-Signature header).","webhooks.deliveryHistory":"Delivery History","webhooks.colTime":"Time","webhooks.colEvent":"Event","webhooks.colStatus":"Status","webhooks.colStatusCode":"Code","webhooks.colDuration":"Duration","webhooks.colError":"Error","webhooks.noDeliveries":"No delivery records yet.","webhooks.urlCol":"URL","webhooks.events":"Events","webhooks.webhookCreated":"Webhook created","webhooks.webhookUpdated":"Webhook updated","webhooks.webhookDeleted":"Webhook deleted","webhooks.failedToCreate":"Failed to create webhook","webhooks.failedToUpdate":"Failed to update webhook","webhooks.failedToDelete":"Failed to delete webhook","webhooks.confirmDelete":"Delete this webhook subscription?","webhooks.noWebhooks":"No webhooks found.","webhooks.noWebhooksDesc":"Set up webhooks to receive real-time event notifications.","tokens.title":"API Tokens","tokens.newToken":"New Token","tokens.createToken":"Create API Token","tokens.createTokenDesc":"Generate a new personal access token. The token value will only be shown once.","tokens.scopesComma":"Scopes (comma-separated)","tokens.expiresOptional":"Expires At (optional)","tokens.tokenCreated":"Token created","tokens.tokenRevoked":"Token revoked","tokens.failedToCreate":"Failed to create token","tokens.failedToRevoke":"Failed to revoke token","tokens.confirmRevoke":'Revoke token "{name}"? This cannot be undone.',"tokens.tokenCopied":"Token copied to clipboard","tokens.tokenCreatedCopy":"Token Created — copy it now!","tokens.copied":"Copied","tokens.copy":"Copy","tokens.dismiss":"Dismiss","tokens.notShownAgain":"This token will not be shown again. Store it securely.","tokens.scopesCol":"Scopes","tokens.expiresCol":"Expires","tokens.lastUsed":"Last Used","tokens.never":"Never","tokens.noTokens":"No API tokens found. Create one to get started.","tokens.noTokensDesc":"Create API tokens for programmatic access.","tokens.editToken":"Edit Token","tokens.editTokenDesc":"Update token name and scopes","tokens.tokenUpdated":"Token updated","tokens.failedToUpdate":"Failed to update token","tokens.expiresAt":"Expires At","tokens.scopes":"Scopes","tokens.fullAccess":"Full Access","tokens.selectResource":"Select resources from the left to configure scopes","tokens.searchResources":"Search resources...","tokens.month1":"1 Month","tokens.months3":"3 Months","tokens.months6":"6 Months","tokens.year1":"1 Year","tokens.custom":"Custom","tokens.resource":"Resource","tokens.created":"Created","tokens.name":"Name","tokens.description":"Description","workflows.title":"Workflows","workflows.instances":"Instances","workflows.visualEditor":"Visual Editor","workflows.newWorkflow":"New Workflow","workflows.createWorkflow":"Create Workflow","workflows.createWorkflowDesc":"Define a new workflow with steps. Steps are configured as JSON.","workflows.stepsJson":"Steps (JSON)","workflows.stepFormat":'Each step: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow created","workflows.workflowDeleted":"Workflow deleted","workflows.failedToCreate":"Failed to create workflow","workflows.failedToDelete":"Failed to delete workflow","workflows.confirmDelete":'Delete workflow "{name}"?',"workflows.noWorkflows":"No workflows found. Create one to get started.","workflows.noWorkflowsDesc":"Define workflows to automate your content pipeline.","workflows.steps":"{count} steps","workflows.workflowStarted":"Workflow started","workflows.editor.title":"Workflow Editor","workflows.editor.newWorkflow":"New Workflow","workflows.editor.stepName":"Step name","workflows.editor.branchesJson":"Branches (JSON array)","workflows.editor.connectEdges":"Connect edges from this node to define branches.","workflows.editor.configJson":"Config (JSON)","workflows.editor.apply":"Apply","workflows.editor.deleteStep":"Delete step","workflows.editor.addStep":"Add Step","workflows.editor.invalidJson":"Invalid JSON in config","workflows.editor.workflowSaved":"Workflow saved","workflows.editor.failedToSave":"Failed to save workflow","audit.title":"Audit Log","audit.clearFilters":"Clear Filters","audit.noLogs":"No audit log entries found.","audit.action":"Action","audit.actor":"Actor","audit.resource":"Resource","audit.timestamp":"Timestamp","options.title":"Options","options.saved":"Options saved","options.failedToSave":"Failed to save options","plugins.title":"Plugins","plugins.loaded":"{count} loaded","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Health","plugins.pluginEnabled":"Plugin enabled","plugins.pluginDisabled":"Plugin disabled","plugins.pluginReloaded":"Plugin reloaded","plugins.pluginRemoved":"Plugin removed","plugins.failedToEnable":"Failed to enable plugin","plugins.failedToDisable":"Failed to disable plugin","plugins.failedToReload":"Failed to reload plugin","plugins.failedToRemove":"Failed to remove plugin","plugins.noPlugins":"No plugins loaded.","plugins.placePlugins":"Place plugins in the configured plugin directory.","plugins.confirmRemove":'Remove plugin "{name}"? This will unload it from memory.',"plugins.autoDisabled":"Auto-disabled","plugins.tooManyErrors":"Too many errors","plugins.errorCount":"{count} error(s)","plugins.errorsOccurred":"Errors occurred","plugins.calls":"{count} calls","plugins.idle":"Idle","plugins.notFound":"Plugin Not Found","plugins.notFoundMsg":"Plugin not found.","plugins.backToPlugins":"Back to Plugins","plugins.general":"General","plugins.version":"Version","plugins.reload":"Reload","plugins.remove":"Remove","plugins.errorTracking":"Error tracking and auto-disable status","plugins.healthy":"Healthy","plugins.errorCountLabel":"Error Count","plugins.lastError":"Last Error","plugins.lastErrorAt":"Last Error At","plugins.autoDisabledLabel":"Auto-disabled","plugins.permissions":"Permissions","permissions.declaredFromManifest":"Declared permissions from plugin manifest","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Registered hook points and their execution metrics","plugins.noHooks":"No hooks registered.","plugins.totalCalls":"Total Calls","plugins.totalErrors":"Total Errors","plugins.totalDuration":"Total Duration","plugins.noMetrics":"No metrics yet","plugins.performance":"Performance Overview","plugins.maxMemory":"Max Memory","plugins.timeout":"Timeout","plugins.default":"Default","media.title":"Media","media.files":"{count} files","media.searchFiles":"Search files...","media.fileDeleted":"File deleted","media.failedToDelete":"Failed to delete file","media.confirmDelete":"Are you sure you want to delete this file?","media.date":"Date","media.size":"Size","media.ascending":"Ascending","media.descending":"Descending","field.mediaUrl":"Media URL","field.blobBase64":"Base64 encoded binary data","field.mediaItems":"items","field.blobChooseFile":"Choose file","field.blobReplace":"Replace","field.blobBytes":"{size} bytes","field.blobTooLarge":"File exceeds {max} MB limit","field.blobReadError":"Failed to read file","field.blobMaxSize":"Max {max}","field.supportsTypes":"Supports: {types}","field.maxFiles":"max {max} files","field.allTypes":"All file types","field.startWriting":"Start writing...","field.yes":"Yes","field.no":"No","field.relatedItemId":"Related item ID","cron.title":"Cron Jobs","cron.newCron":"New Cron Job","cron.expression":"Expression","cron.handler":"Handler","cron.lastRun":"Last Run","cron.nextRun":"Next Run","cron.cronCreated":"Cron job created","cron.cronDeleted":"Cron job deleted","cron.failedToCreate":"Failed to create cron job","cron.failedToDelete":"Failed to delete cron job","cron.noCrons":"No cron jobs found.","cron.confirmDelete":'Delete cron job "{name}"?',"tenants.title":"Tenants","tenants.newTenant":"New Tenant","tenants.createTenant":"Create a new tenant for multi-tenant isolation.","tenants.tenantName":"Tenant name","tenants.slug":"Slug","tenants.domain":"Domain","tenants.owner":"Owner","tenants.tenantCreated":"Tenant created","tenants.tenantUpdated":"Tenant updated","tenants.tenantDeleted":"Tenant deleted","tenants.failedToCreate":"Failed to create tenant","tenants.failedToUpdate":"Failed to update tenant","tenants.failedToDelete":"Failed to delete tenant","tenants.confirmDelete":"Are you sure you want to delete this tenant?","tenants.noTenants":"No tenants found.","tenants.noTenantsDesc":"Create tenants for multi-tenant SaaS.","rbac.title":"Roles & Permissions","rbac.roles":"Roles","rbac.newRole":"New Role","rbac.createRole":"Create a new role for access control.","rbac.roleName":"Role name","rbac.roleDesc":"Role description","rbac.roleCreated":"Role created","rbac.roleUpdated":"Role updated","rbac.roleDeleted":"Role deleted","rbac.failedToCreate":"Failed to create role","rbac.failedToUpdate":"Failed to update role","rbac.failedToDelete":"Failed to delete role","rbac.confirmDelete":'Delete role "{name}"? This will remove all associated permissions.',"rbac.systemRole":"System","rbac.permissions":"Permissions","rbac.addPermission":"Add Permission","rbac.clearAllPermissions":"Clear All","rbac.clearAllPermissionsTitle":"Clear all permissions?","rbac.clearAllPermissionsDesc":'Remove all permissions from role "{name}"? This action cannot be undone.',"rbac.allPermissionsCleared":"All permissions cleared","rbac.permissionsRemoved":"Permissions removed","rbac.searchResource":"Search resource...","rbac.noSearchResults":"No matching permissions.","rbac.deleteSelected":"Delete selected","rbac.deleteSelectedTitle":"Delete selected permissions?","rbac.deleteSelectedDesc":"{count} resource group(s) will be removed. This action cannot be undone.","rbac.op.create":"Create","rbac.op.read":"Read","rbac.op.update":"Update","rbac.op.delete":"Delete","rbac.op.publish":"Publish","rbac.op.*":"All","rbac.subject":"Subject","rbac.resource":"Resource","rbac.operations":"Operations","rbac.noRoles":"No roles found.","builder.title":"Content Type Builder","builder.editContentType":"Edit Content Type","builder.createContentType":"Create Content Type","builder.baseConfig":"Base Configuration","builder.singularName":"Singular Name","builder.pluralName":"Plural Name","builder.tableName":"Table Name","builder.groupName":"Group","builder.groupPlaceholder":"e.g. forum (optional)","builder.groupHint":"Namespace for grouping. Leave empty for flat. API: /cms/{group}/{plural}","builder.fieldsSection":"Fields","builder.addField":"Add Field","builder.preview":"Preview","builder.save":"Save Content Type","builder.saving":"Saving...","builder.saved":"Content type saved","builder.failedToSave":"Failed to save content type","builder.confirmDeleteField":'Delete field "{name}"?',"builder.text":"Text","builder.richText":"Rich Text","builder.email":"Email","builder.password":"Password","builder.uid":"UID","builder.integer":"Integer","builder.bigInt":"Big Int","builder.decimal":"Decimal","builder.float":"Float","builder.boolean":"Boolean","builder.date":"Date","builder.datetime":"Datetime","builder.time":"Time","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relation","builder.mediaType":"Media","builder.link":"Link","builder.required":"Required","builder.unique":"Unique","builder.privateField":"Private","builder.immutable":"Immutable","builder.label":"Label","builder.defaultValue":"Default Value","builder.maxLength":"Max Length","builder.minValue":"Min","builder.maxValue":"Max","builder.enumValues":"Enum Values (comma-separated)","builder.relationType":"Relation Type","builder.relationTarget":"Target Table","builder.foreignKey":"Foreign Key","builder.throughTable":"Through Table","builder.draftPublish":"Draft/Publish","builder.timestamps":"Timestamps","builder.softDelete":"Soft Delete","builder.slugField":"Slug Field","media.name":"Name","media.type":"Type","media.other":"Other","media.uploadFailed":"Upload failed","media.dropFiles":"Drop files here, paste, or {browse}","media.dropHint":"Click to upload or drop files here","media.cover":"Cover","media.file":"File","media.maxReached":"Maximum {max} files reached","media.typeNotAllowed":"File type not allowed","media.downloadFailed":"Failed to download file","media.uploading":"Uploading {count} file(s)...","media.done":"Done","media.failedUpload":"Failed","media.urlCopied":"URL copied","media.copyUrl":"Copy URL","media.download":"Download","media.dimensions":"Dimensions","media.uploaded":"Uploaded","media.urlLabel":"URL","media.noVideoSupport":"Your browser does not support video.","media.downloadFile":"Download file","workflows.instances.title":"Workflow Instances","workflows.instances.showLogs":"Show logs","workflows.instances.hideLogs":"Hide logs","workflows.instances.currentStep":"Current","workflows.instances.context":"Context","workflows.instances.stepLogs":"Step Logs ({count})","workflows.instances.noStepLogs":"No step logs.","workflows.instances.noInstances":"No workflow instances found.","workflows.instances.instanceCount":"{count} instance(s)","workflows.instances.definitions":"Definitions","workflows.instances.filterStatus":"Filter status","workflows.instances.cancelled":"Instance cancelled","workflows.editor.editStep":"Edit Step","workflows.editor.name":"Name","workflows.editor.type":"Type","workflows.editor.backToList":"Back to list","workflows.editor.workflowName":"Workflow name...","workflows.editor.failedToLoad":"Failed to load workflow","workflows.editor.immutableNotice":"Workflow definitions are immutable. Create a new one to change steps.","workflows.editor.untitled":"Untitled Workflow","workflows.editor.save":"Save","workflows.editor.saving":"Saving...","cron.createSchedule":"Create Cron Schedule","cron.labelField":"Label","cron.jobType":"Job Type","cron.jobTypeHint":"Select a built-in task","cron.cronExpression":"Cron Expression (6 segments)","cron.format":"Format: sec min hour day month weekday","cron.payload":"Params","cron.schedule":"Schedule","cron.scheduleTitle":"Frequency","cron.pluginCol":"Plugin","cron.scheduleCreated":"Schedule created","cron.scheduleToggled":"Schedule toggled","cron.scheduleDeleted":"Schedule deleted","cron.scheduleUpdated":"Schedule updated","cron.seedHint":'Click "New Schedule" to create your first cron job',"cron.confirmDeleteSchedule":'Delete schedule "{name}"? This cannot be undone.',"cron.scheduleNotFound":"Schedule Not Found","cron.backToCronSchedules":"Back to Cron Schedules","cron.builtIn":"Built-in","cron.executionHistory":"Execution History","cron.cleanupOld":"Cleanup Old","cron.cleanedUp":"Cleaned up {count} old log(s)","cron.noExecutionLogs":"No execution logs yet.","cron.success":"Success","cron.failedStatus":"Failed","cron.running":"Running","cron.dispatched":"Dispatched","cron.dead":"Dead","cron.timedOut":"Timed Out","cron.newSchedule":"New Schedule","cron.idField":"ID","cron.started":"Started","cron.finished":"Finished","cron.duration":"Duration","cron.error":"Error","cron.created":"Created","cron.updated":"Updated","cron.executionType":"Execution Type","cron.builtinTab":"Built-in Task","cron.scriptTab":"Custom Script","cron.scriptLang":"Script Language","cron.scriptSource":"Script Code","cron.scriptHint":"Available APIs: host.log, host.getData, host.setData, host.dbQuery, host.dbExecute, host.httpGet, etc.","cron.systemTab":"System Command","cron.systemWarning":"System scripts run shell commands with full system access. Requires cron-system feature + CRON_ALLOW_SYSTEM_SCRIPTS=true.","cron.useShell":"Shell Wrapper","cron.timeoutSecs":"Timeout (seconds)","cron.systemCommand":"Shell Command","cron.systemHint":"Commands run in the working directory; the CRON_PAYLOAD env var contains the payload JSON","cron.presetHint":"Presets","cron.presetGroupMinute":"Minutes","cron.presetGroupHour":"Hours","cron.presetGroupDay":"Day/Week/Month","cron.presetEveryMinute":"Every minute","cron.presetEvery5Min":"Every 5 min","cron.presetEvery15Min":"Every 15 min","cron.presetEvery30Min":"Every 30 min","cron.presetHourly":"Hourly","cron.presetEvery6Hours":"Every 6 hours","cron.presetEvery12Hours":"Every 12 hours","cron.presetDailyMidnight":"Daily at 0:00","cron.presetDaily3am":"Daily at 3:00","cron.presetWeekly":"Mon at 3:00","cron.presetWeeklySun":"Sun at 3:00","cron.presetMonthly":"1st at 0:00","tenants.createForIsolation":"Create a new tenant for data isolation.","tenants.cannotDeleteDefault":"Cannot delete the default tenant","tenants.confirmDeleteMsg":"Delete this tenant? Data belonging to this tenant will NOT be removed.","tenants.created":"Created","rbac.addRoleDesc":"Add a new role to the system.","rbac.updateRoleDesc":'Update "{name}" role.',"rbac.deleteRoleTitle":"Delete Role","rbac.deleteRoleConfirm":'Are you sure you want to delete "{name}"? This action cannot be undone.',"rbac.addPermissionTitle":"Add Permission","rbac.addPermissionDesc":'Grant a new permission to "{name}". Use * for wildcard.',"rbac.fieldsCol":"Fields","rbac.conditionsCol":"Conditions","rbac.fieldsOptional":"Fields (comma-separated, optional)","rbac.removePermissionTitle":"Remove Permission","rbac.removePermissionDesc":"Remove {action} on {subject}?","rbac.noPermissions":"No permissions configured.","rbac.selectRole":"Select a role to view permissions","rbac.prev":"Prev","scopeMatrix.fullAccess":"Full Access","scopeMatrix.action":"Action","scopeMatrix.allResources":"All Resources","scopeMatrix.search":"Search...","scopeMatrix.selectAll":"Select all","scopeMatrix.clearAll":"Clear all","scopeMatrix.empty":"Select resources from the left to configure scopes","scopeMatrix.resource":"Resource","scopeMatrix.selected":"{count} selected","scopeMatrix.fieldsOptional":"Fields (comma-separated, optional)","scopeMatrix.conditionsOptional":"Conditions (key=value per line, optional)","options.noChanges":"No changes","options.noOptions":"No options available.","options.reset":"Reset","options.saveChanges":"Save Changes","audit.failedToLoad":"Failed to load audit log. Please try again.","audit.noEntries":"No audit entries found.","audit.noEntriesDesc":"Audit entries will appear as actions are performed.","audit.timeCol":"Time","audit.subjectId":"Subject ID","audit.detailCol":"Detail","audit.system":"system","audit.from":"From","audit.to":"To","audit.search":"Search","audit.clear":"Clear","audit.today":"Today","audit.dateRange":"Date Range","audit.custom":"Custom range","audit.export":"Export","audit.viewEntry":"Audit Entry","audit.ipAddress":"IP Address","audit.userAgent":"User Agent","builder.untitled":"Untitled Content Type","builder.fieldCount":"{count} field(s)","builder.fieldList":"Fields","builder.protocols":"Protocols","builder.systemFields":"System Fields","builder.system":"system","builder.newField":"New field","builder.addAnotherField":"Add another field","builder.addAField":"Add a field","builder.chooseFieldType":"Choose a field type to add to your content type.","builder.fieldConfiguration":"Field Configuration","builder.fieldName":"Field Name","builder.fieldTypeLabel":"Field Type","builder.displayLabel":"Display label","builder.helpText":"Help text","builder.removeField":"Remove Field","builder.removeFieldConfirm":"Remove this field?","builder.noAdditionalOptions":"No additional options for this field type.","builder.acceptedTypes":"Accepted Types","builder.acceptAll":"All file types","builder.searchTypes":"Search types...","builder.noMatch":"No matching types","builder.viewData":"View Data","builder.viewToml":"View TOML","builder.tomlDescription":"Generated TOML source of this content type.","builder.tomlCopied":"TOML copied to clipboard","builder.copy":"Copy","common.copied":"Copied","builder.viewApi":"API","builder.apiDescription":"Configure API access control for each endpoint. Saved together with the content type.","builder.apiList":"List","builder.apiEndpoint":"Endpoint","builder.apiGet":"Get","builder.apiCreate":"Create","builder.apiUpdate":"Update","builder.apiDelete":"Delete","builder.apiAccess":"Access","builder.apiAccessShort":"access","builder.apiCache":"Cache","builder.apiCacheEnable":"Enable server-side caching","builder.apiCacheShort":"cache","builder.apiFilter":"Filter expression","builder.apiFilterShort":"filter","builder.apiFilterAuth":"Auth filter","builder.apiFilterAuthShort":"auth filter","builder.apiFields":"Return fields (comma-separated)","builder.apiFieldsShort":"fields","builder.apiCopied":"URL copied to clipboard","builder.saveApi":"Save API","builder.apiSaved":"API settings saved","builder.apiSaveNeedsCreate":"Save the content type first — API settings are included in creation","builder.apiAccessHelpNone":"Endpoint disabled, no access","builder.apiAccessHelpPublic":"Public, no auth required","builder.apiAccessHelpAuthed":"Any authenticated user","builder.apiAccessHelpOwner":"The record creator only","builder.apiAccessHelpAdmin":"Admins only","builder.icon":"Icon","builder.color":"Color","builder.invalidFieldName":'Field "{field}" must start with a letter and contain only letters, digits, or underscores',"builder.requiredField":"Please fill in required field: {field}","builder.enumValuesRequired":'Enum field "{field}" requires at least one value',"builder.relationTargetRequired":'Relation field "{field}" requires a target content type',"builder.maxCount":"Max Count","builder.target":"Target","builder.valuesComma":"Values (comma-separated)","builder.describeContentType":"Describe this content type...","builder.contentTypeUpdated":"Content type updated","builder.contentTypeCreated":"Content type created","builder.newFieldCategory":"Number","layout.crm":"CRM","layout.pages":"Pages","layout.reusableBlocks":"Blocks","crm.dashboard":"CRM Dashboard","crm.pipeline":"Pipeline","crm.contacts":"Contacts","crm.companies":"Companies","crm.deals":"Deals","crm.activities":"Activities","crm.notes":"Notes","crm.reports":"Reports","crm.totalCompanies":"Total Companies","crm.totalContacts":"Total Contacts","crm.openDeals":"Open Deals","crm.wonDeals":"Won Deals","crm.pipelineValue":"Pipeline Value","crm.weightedValue":"Weighted Value","crm.winRate":"Win Rate","crm.avgDealSize":"Avg Deal Size","crm.recentActivities":"This Week Activities","crm.totalActivities":"Total Activities","crm.leaderboard":"Leaderboard","crm.noData":"No data available.","crm.newDeal":"New Deal","crm.createDeal":"Create Deal","crm.dealTitle":"Title","crm.dealTitlePlaceholder":"Enter deal title...","crm.amount":"Amount","crm.probability":"Probability","crm.stage":"Stage","crm.advanceStage":"Advance to next stage","crm.totalValue":"Total Value","crm.dealCreated":"Deal created","crm.failedToCreateDeal":"Failed to create deal","crm.dealStageUpdated":"Deal stage updated","crm.failedToUpdateStage":"Failed to update stage","crm.titleRequired":"Title is required","crm.newContact":"New Contact","crm.editContact":"Edit Contact","crm.contact":"Contact","crm.name":"Name","crm.email":"Email","crm.phone":"Phone","crm.company":"Company","crm.source":"Source","crm.lifecycleStage":"Lifecycle Stage","crm.noContacts":"No contacts found.","crm.firstName":"First Name","crm.lastName":"Last Name","crm.jobTitle":"Job Title","crm.newCompany":"New Company","crm.editCompany":"Edit Company","crm.companyName":"Company Name","crm.industry":"Industry","crm.size":"Size","crm.website":"Website","crm.city":"City","crm.country":"Country","crm.noCompanies":"No companies found.","crm.deal":"Deal","crm.editDeal":"Edit Deal","crm.closeDate":"Close Date","crm.lossReason":"Loss Reason","crm.noDeals":"No deals found.","crm.dealInfo":"Deal Info","crm.newActivity":"New Activity","crm.editActivity":"Edit Activity","crm.activity":"Activity","crm.type":"Type","crm.subject":"Subject","crm.content":"Content","crm.date":"Date","crm.duration":"Duration","crm.outcome":"Outcome","crm.noActivities":"No activities found.","crm.newNote":"New Note","crm.editNote":"Edit Note","crm.note":"Note","crm.relatedTo":"Related To","crm.pinned":"Pinned","crm.createdAt":"Created","crm.noNotes":"No notes found.","crm.contentRequired":"Content is required","crm.relatedContactId":"Related Contact ID","crm.relatedCompanyId":"Related Company ID","crm.relatedDealId":"Related Deal ID","crm.contactInfo":"Contact Info","crm.timeline":"Timeline","crm.noTimeline":"No timeline events.","crm.addNote":"Add Note","crm.notePlaceholder":"Type a note...","crm.lifecycleUpdated":"Lifecycle stage updated","crm.failedToUpdateLifecycle":"Failed to update lifecycle stage","crm.companyInfo":"Company Info","crm.funnelReport":"Funnel Report","crm.activityReport":"Activity Report","crm.conversionRate":"Conversion","crm.byType":"By Type","crm.byOutcome":"By Outcome","pages.title":"Pages","pages.newPage":"New Page","pages.editPage":"Edit Page","pages.pageDeleted":"Page deleted","pages.pageCreated":"Page created","pages.pageUpdated":"Page updated","pages.failedToDelete":"Failed to delete page","pages.failedToCreate":"Failed to create page","pages.failedToUpdate":"Failed to update page","pages.statusUpdated":"Page status updated","pages.failedToUpdateStatus":"Failed to update status","pages.confirmDelete":"Are you sure you want to delete this page?","pages.noPages":"No pages found.","pages.noPagesDesc":"Create your first page to start building your site.","pages.noBlocks":"No reusable blocks yet.","pages.noBlocksDesc":"Create reusable blocks to use across your pages.","pages.publish":"Publish","pages.unpublish":"Unpublish","pages.preview":"Preview","pages.slug":"Slug","pages.template":"Template","pages.createdAt":"Created","pages.basicInfo":"Basic Info","pages.titleLabel":"Title","pages.titlePlaceholder":"Enter page title...","pages.coverImage":"Cover Image","pages.metaTitle":"Meta Title","pages.metaDescription":"Meta Description","pages.ogImage":"OG Image","pages.content":"Content","pages.blockMode":"Blocks","pages.saveDraft":"Save Draft","pages.writeContent":"Write your page content...","pages.addBlock":"Add Block","pages.chooseBlock":"Choose a block type","pages.reusableBlocks":"Reusable Blocks","pages.createReusable":"Create Reusable Block","pages.editReusable":"Edit Reusable Block","pages.rbName":"Name","pages.rbType":"Block Type","pages.rbDescription":"Description","pages.rbContent":"Content","command.search":"Search...","command.placeholder":"Type a command or search...","command.noResults":"No results found.","command.actions":"Actions","command.switchToLight":"Switch to Light Mode","command.switchToDark":"Switch to Dark Mode","layout.ecommerce":"E-Commerce","layout.products":"Products","layout.productCategories":"Product Categories","layout.orders":"Orders","layout.finance":"Finance","layout.currencies":"Currencies","layout.wallets":"Wallets","layout.paymentChannels":"Payment Channels","layout.productComments":"Reviews","layout.coupons":"Coupons","layout.shippingTemplates":"Shipping","layout.plans":"Plans","products.title":"Products","products.newProduct":"New Product","products.editProduct":"Edit Product","products.productTitle":"Product Title","products.price":"Price","products.originalPrice":"Original Price","products.stock":"Stock","products.sales":"Sales","products.coverUrl":"Cover URL","products.description":"Description","products.content":"Content","products.slug":"Slug","products.status":"Status","products.category":"Category","products.unit":"Unit","products.minPurchase":"Min Purchase","products.maxPurchase":"Max Purchase","products.sortOrder":"Sort Order","products.metaTitle":"Meta Title","products.metaDescription":"Meta Description","products.productCreated":"Product created","products.productUpdated":"Product updated","products.productDeleted":"Product deleted","products.batchDeleted":"{{count}} products deleted","products.batchSuccess":"{{count}} products updated","products.batchActivate":"Activate","products.batchDeactivate":"Deactivate","products.failedToCreate":"Failed to create product","products.failedToUpdate":"Failed to update product","products.failedToDelete":"Failed to delete product","products.confirmDelete":"Are you sure you want to delete this product?","products.confirmBatchDelete":"Are you sure you want to delete {{count}} products?","products.noProducts":"No products yet","products.noProductsDesc":"Create your first product to start selling.","products.allStatus":"All Status","products.searchPlaceholder":"Search product title...","products.active":"Active","products.draft":"Draft","products.archived":"Archived","products.general":"General","products.media":"Media","products.pricing":"Pricing","products.purchaseSettings":"Purchase Settings","products.summary":"Summary","products.phTitle":"Enter product title...","products.phSummary":"Brief description of the product...","products.images":"Images","products.cover":"Cover","products.dropImages":"Drop images here, paste, or click to upload","productCategories.categoryName":"Category Name","productCategories.newCategory":"New Category","productCategories.createCategory":"Create Category","productCategories.editCategory":"Edit Category","productCategories.optionalDesc":"Description (optional)","productCategories.parent":"Parent Category","productCategories.noParent":"No Parent","productCategories.sortOrder":"Sort Order","productCategories.slug":"Slug","productCategories.noCategories":"No Categories Yet","productCategories.noCategoriesDesc":"Create your first product category to organize your products.","productCategories.categoryCreated":"Category created","productCategories.categoryUpdated":"Category updated","productCategories.categoryDeleted":"Category deleted","productCategories.failedToCreate":"Failed to create category","productCategories.failedToUpdate":"Failed to update category","productCategories.failedToDelete":"Failed to delete category","productCategories.confirmDelete":"Are you sure you want to delete this category?","productCategories.confirmDeleteTitle":"Delete Category","productCategories.cannotDeleteHasChildren":"Cannot delete this category because it has {count} sub-categories. Please move or delete them first.","productCategories.treeTitle":"Categories","productCategories.selectCategory":"Select a category to view details","productCategories.addChild":"Add Sub","orders.title":"Orders","orders.orderNo":"Order No","orders.buyer":"Buyer","orders.total":"Total","orders.status":"Status","orders.items":"Items","orders.remark":"Remark","orders.adminRemark":"Admin Remark","orders.createdAt":"Created","orders.actions":"Actions","orders.allStatus":"All Status","orders.searchPlaceholder":"Search order number, buyer name...","orders.pending":"Pending","orders.paid":"Paid","orders.shipped":"Shipped","orders.completed":"Completed","orders.cancelled":"Cancelled","orders.refunded":"Refunded","orders.confirmPay":"Confirm payment?","orders.orderPaid":"Order marked as paid","orders.confirmShip":"Ship this order?","orders.orderShipped":"Order shipped","orders.confirmCancel":"Cancel this order?","orders.orderCancelled":"Order cancelled","orders.confirmRefund":"Refund this order?","orders.orderRefunded":"Order refunded","orders.failedToPay":"Failed to mark as paid","orders.failedToShip":"Failed to ship","orders.failedToCancel":"Failed to cancel","orders.failedToRefund":"Failed to refund","orders.noOrders":"No orders yet","orders.noOrdersDesc":"Orders will appear here when customers make purchases.","orders.trackingNo":"Tracking No","orders.carrier":"Carrier","orders.shipInfo":"Shipping Info","orders.buyerInfo":"Buyer Info","orders.shippingAddress":"Shipping Address","orders.orderDetail":"Order Detail","orders.stats.totalOrders":"Total Orders","orders.stats.totalRevenue":"Total Revenue","orders.stats.pending":"Pending","orders.stats.completed":"Completed","orders.stats.todayOrders":"Today Orders","orders.stats.todayRevenue":"Today Revenue","payments.title":"Payment Channels","payments.newChannel":"New Channel","payments.provider":"Provider","payments.name":"Channel Name","payments.mode":"Mode","payments.active":"Active","payments.live":"Live","payments.test":"Test","payments.credentials":"Credentials","payments.webhookSecret":"Webhook Secret","payments.settings":"Settings","payments.channelCreated":"Payment channel created","payments.channelUpdated":"Payment channel updated","payments.channelDeleted":"Payment channel deleted","payments.failedToCreate":"Failed to create payment channel","payments.failedToUpdate":"Failed to update payment channel","payments.failedToDelete":"Failed to delete payment channel","payments.confirmDelete":"Delete this payment channel?","payments.noChannels":"No payment channels","payments.noChannelsDesc":"Add a payment channel to start accepting payments.","payments.selectProvider":"Select a provider...","payments.testMode":"Test Mode (Sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"Merchant ID","payments.fPrivateKey":"Private Key (RSA)","payments.fSerialNo":"Certificate Serial No.","payments.fWebhookSecret":"Webhook Signing Secret","payments.fAlipayPublicKey":"Alipay Public Key","payments.fPlatformCert":"Platform Certificate (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"Notify URL","payments.phSk":"sk_live_... or sk_test_...","payments.phRsaKey":"Paste RSA private key (PEM or Base64)","payments.phUrl":"https://...","payments.editChannel":"Edit Channel","payments.leaveBlankToKeep":"Leave blank to keep current","layout.paymentOrders":"Payment Orders","paymentOrders.title":"Payment Orders","paymentOrders.orderId":"Order","paymentOrders.title_col":"Title","paymentOrders.amount":"Amount","paymentOrders.provider":"Provider","paymentOrders.noOrders":"No payment orders","paymentOrders.noOrdersDesc":"Payment orders will appear here when customers make payments.","paymentOrders.refund":"Refund","paymentOrders.refundTitle":"Refund Payment Order","paymentOrders.refundOrder":"Refund order","paymentOrders.refundAmount":"Refund Amount","paymentOrders.refundReason":"Reason","paymentOrders.refundSuccess":"Refund submitted","paymentOrders.refundFailed":"Failed to refund","layout.paymentTransactions":"Payment Transactions","paymentTransactions.title":"Payment Transactions","paymentTransactions.orderId":"Order","paymentTransactions.type":"Type","paymentTransactions.amount":"Amount","paymentTransactions.providerTxId":"Provider TX ID","paymentTransactions.noTransactions":"No transactions","paymentTransactions.noTransactionsDesc":"Transactions will appear here when payment events occur.","currencies.title":"Currencies","currencies.newCurrency":"New Currency","currencies.code":"Code","currencies.name":"Name","currencies.decimals":"Decimals","currencies.active":"Active","currencies.currencyCreated":"Currency created","currencies.currencyUpdated":"Currency updated","currencies.failedToCreate":"Failed to create currency","currencies.failedToUpdate":"Failed to update currency","currencies.noCurrencies":"No currencies","currencies.noCurrenciesDesc":"Add a currency to enable multi-currency support.","wallets.title":"Wallets","wallets.user":"User","wallets.currency":"Currency","wallets.balance":"Balance","wallets.frozen":"Frozen","wallets.credit":"Credit","wallets.debit":"Debit","wallets.transactions":"Transactions","wallets.amount":"Amount","wallets.type":"Type","wallets.reference":"Reference","wallets.creditTitle":"Credit Wallet","wallets.debitTitle":"Debit Wallet","wallets.userId":"User ID","wallets.remark":"Remark","wallets.creditSuccess":"Wallet credited","wallets.debitSuccess":"Wallet debited","wallets.failedToCredit":"Failed to credit wallet","wallets.failedToDebit":"Failed to debit wallet","wallets.noWallets":"No wallets","wallets.noWalletsDesc":"Wallets are created when users receive their first transaction.","wallets.noTransactions":"No transactions yet.","adminLogin.title":"Admin Panel","adminLogin.subtitle":"Sign in with your admin credentials","adminLogin.email":"Email","adminLogin.password":"Password","adminLogin.submit":"Sign In","adminLogin.loading":"Signing in…","adminLogin.error":"Invalid email or password","adminLogin.footer":"RaisFast Admin — authorized personnel only","adminLogin.sessionExpired":"Your session has expired. Please sign in again.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.mustContainUppercase":"Password must contain at least one uppercase letter","setup.admin.mustContainLowercase":"Password must contain at least one lowercase letter","setup.admin.mustContainDigit":"Password must contain at least one digit","setup.admin.passwordsNotMatch":"Passwords do not match","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update review status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Are you sure you want to delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Product reviews will appear here when customers leave feedback.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Are you sure you want to delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons to offer discounts to your customers.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create shipping template","shippingTemplates.failedToUpdate":"Failed to update shipping template","shippingTemplates.failedToDelete":"Failed to delete shipping template","shippingTemplates.confirmDelete":"Are you sure you want to delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates to calculate delivery costs.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Are you sure you want to delete this variant?","productVariants.noVariants":"No variants yet. Add variants for different options.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","plans.title":"Plans","plans.name":"Name","plans.slug":"Slug","plans.dbType":"Database Type","plans.price":"Price","plans.maxStorage":"Max Storage","plans.maxUsers":"Max Users","plans.sortOrder":"Sort","plans.active":"Active","plans.createPlan":"Create Plan","plans.editPlan":"Edit Plan","plans.deletePlan":"Delete Plan","plans.planCreated":"Plan created","plans.planUpdated":"Plan updated","plans.planDeleted":"Plan deleted","plans.failedToCreate":"Failed to create plan","plans.failedToUpdate":"Failed to update plan","plans.failedToDelete":"Failed to delete plan","plans.confirmDelete":'Delete plan "{slug}"?',"plans.confirmPassword":"Confirm Password","plans.confirmPasswordPlaceholder":"Enter your password to confirm","plans.starter":"Starter","plans.pro":"Pro","plans.business":"Business","plans.monthly":"/mo","plans.sqlite":"SQLite","plans.postgresShared":"PG Shared","plans.postgresDedicated":"PG Dedicated","plans.noPlans":"No plans configured","layout.integration":"Integration","layout.channels":"Channels","layout.receipts":"Receipts","layout.apiClients":"API Clients","common.reset":"Reset","common.close":"Close","integration.newChannel":"New Channel","integration.editChannel":"Edit Channel","integration.channelKey":"Channel Key","integration.displayName":"Display Name","integration.provider":"Provider","integration.mode":"Mode","integration.transport":"Transport","integration.framing":"Framing","integration.endpoint":"Endpoint","integration.verifyKind":"Verification","integration.verifyConfig":"Verify Config (JSON)","integration.credentials":"Credentials (JSON)","integration.credentialsKeepHint":"Leave blank to keep the sealed credentials","integration.mapping":"Mapping (JSONPath)","integration.pullConfig":"Pull Config (JSON)","integration.streamConfig":"Stream Config (JSON)","integration.targetType":"Target Content Type","integration.routeExtra":"Route Extra (JSON)","integration.redeliveryMax":"Max Redeliveries","integration.stack":"Stack","integration.noChannels":"No integration channels","integration.noChannelsDesc":"Add a channel to start receiving inbound webhooks, streams and polls.","integration.ownerApp":"Owner app","integration.ownerAppAll":"All apps","integration.ownerAppNone":"Platform (no app)","integration.ownerAppHint":"Blank = platform-owned. Set an installed app id to make this an app-owned channel.","integration.channelCreated":"Channel created","integration.channelUpdated":"Channel updated","integration.channelDeleted":"Channel deleted","integration.failedToCreate":"Failed to create","integration.failedToUpdate":"Failed to update","integration.failedToDelete":"Failed to delete","integration.failedToTest":"Test failed","integration.confirmDeleteChannel":'Delete channel "{key}"? Its receipts stay for audit.',"integration.testMapping":"Test Mapping","integration.sampleBody":"Sample request body","integration.preview":"Normalized envelope preview","integration.runTest":"Run","integration.hasCredentials":"Credentials sealed in vault","integration.oauthAuthorize":"Authorize","integration.oauthReauthorize":"Re-authorize","integration.oauthAuthorized":"Authorized","integration.oauthNotAuthorized":"Not authorized","integration.oauthStartFailed":"Failed to start OAuth","integration.allChannels":"All channels","integration.allStatuses":"All statuses","integration.traceIdFilter":"Filter by trace ID…","integration.noReceipts":"No receipts","integration.noReceiptsDesc":"Inbound deliveries will appear here with their full trace.","integration.receivedAt":"Received","integration.attempts":"Attempts","integration.nextRetryAt":"Next retry","integration.noSteps":"No steps recorded","integration.pending":"pending","integration.receiptInfo":"Receipt","integration.trace":"Trace","integration.complete":"complete","integration.firstPass":"First pass","integration.asyncChain":"Async chain","integration.envelopeSnapshot":"Envelope snapshot","integration.fullSteps":"Full step timeline","integration.egressCalls":"Egress calls","integration.noEgress":"No egress calls","integration.noEgressDesc":"Outbound calls triggered by this receipt will appear here.","integration.replayed":"Replayed","integration.dryRunDone":"Dry-run complete — see the report in the trace","integration.failedToReplay":"Replay failed","integration.replay":"Replay","integration.dryRunReplay":"Dry-run Replay","integration.replayConfirmTitle":"Replay this receipt?","integration.replayConfirmDesc":"The route stage re-runs from the stored envelope snapshot (upsert by external_id).","integration.receiptNotFound":"Receipt not found","integration.newClient":"New API Client","integration.editClient":"Edit API Client","integration.clientKey":"Client Key","integration.baseUrl":"Base URL","integration.authConfig":"Auth Config (JSON)","integration.rateLimit":"Rate Limit (JSON)","integration.ops":"Ops (JSON)","integration.opsCount":"Ops","integration.noClients":"No API clients","integration.noClientsDesc":"Add a declarative API client to call third-party APIs outbound.","integration.clientCreated":"API client created","integration.clientUpdated":"API client updated","integration.clientDeleted":"API client deleted","integration.confirmDeleteClient":'Delete API client "{key}"?',"integration.testCall":"Test Call","integration.selectOp":"Select an op","integration.input":"Input (JSON)","integration.result":"Result","integration.allClients":"All clients","integration.egressLog":"Egress Log","integration.latency":"Latency","integration.createdAt":"Created","integration.basicInfo":"Basic","integration.trustSection":"Trust (L0)","integration.normalizeSection":"Normalization (L2)","integration.routingSection":"Routing & Reliability (L3/L4)","integration.presetTitle":"Start from a preset","integration.presetPlaceholder":"Pick a battle-tested configuration…","integration.presetHint":"Fills the whole form — adapt keys, secrets and target content type afterwards. Examples come from real integrations (GitHub / Feishu / DingTalk).","integration.presetApplied":"Preset applied — review and adapt","integration.jsonInvalid":"Invalid JSON","integration.insertExample":"Insert example","integration.presetGeneric":"Generic webhook (no verification)","integration.presetGenericDesc":"Plain push endpoint, JSONPath mapping","integration.presetHmac":"HMAC webhook","integration.presetHmacDesc":"push + hmac-sha256 signature check","integration.presetGithub":"GitHub webhook","integration.presetGithubDesc":"x-hub-signature-256, delivery GUID idempotency","integration.presetShopify":"Shopify webhook","integration.presetShopifyDesc":"base64 HMAC, webhook-id idempotency","integration.presetDingtalk":"DingTalk Stream bot","integration.presetDingtalkDesc":"ws stream + dispatch framing + pre_connect","integration.presetFeishu":"Feishu bot (long connection)","integration.presetFeishuDesc":"ws stream + pb-frame + oauth handshake","integration.presetPull":"HTTP poll (cursor)","integration.presetPullDesc":"pull + since_id pagination + checkpoint","integration.presetImap":"IMAP mailbox (native)","integration.presetImapDesc":"pull + imap + mime, mark-read semantics, IDLE-ready"},jC={"layout.brand":"RaisFast","layout.adminPanel":"管理后台","layout.dashboard":"控制台","layout.content":"内容","layout.extension":"扩展","layout.system":"系统","layout.posts":"文章","layout.categories":"分类","layout.tags":"标签","layout.comments":"评论","layout.media":"媒体","layout.contentTypes":"内容类型","layout.users":"用户","layout.plugins":"插件","layout.rolesPermissions":"角色与权限","layout.cron":"定时任务","layout.tenants":"租户","layout.webhooks":"Webhooks","layout.apiTokens":"API 令牌","layout.workflows":"工作流","layout.auditLog":"审计日志","layout.options":"选项","layout.tenant":"租户","layout.clearTenant":"清除租户筛选","layout.all":"全部","layout.accessDenied":"拒绝访问","layout.accessDeniedMsg":"您需要以作者或管理员身份登录才能访问此区域。","layout.goToLogin":"前往登录","layout.toggleTheme":"切换主题","templates.title":"模板","templates.all":"全部","templates.search":"搜索模板...","templates.empty":"未找到模板","layout.signOut":"退出登录","layout.profile":"个人资料","common.loading":"加载中...","common.save":"保存","common.cancel":"取消","common.ok":"确定","common.create":"创建","common.creating":"创建中...","common.saving":"保存中...","common.delete":"删除","common.confirmDeleteTitle":"确认删除","common.edit":"编辑","common.content":"内容","common.remove":"移除","common.download":"下载","common.view":"查看","common.back":"返回","common.clear":"清除","common.actions":"操作","common.status":"状态","common.retry":"重试","common.previous":"上一页","common.next":"下一页","common.pageOf":"第 {page} 页,共 {total} 页","common.totalRecords":"共 {count} 条","common.noData":"暂无数据","common.all":"全部","common.draft":"草稿","common.published":"已发布","common.archived":"已归档","common.enabled":"已启用","common.disabled":"已禁用","common.name":"名称","common.description":"描述","common.enabledCount":"{count} 已启用","common.disabledCount":"{count} 已禁用","common.adminOnly":"仅管理员","common.adminOnlyMsg":"只有管理员才能管理此区域。","common.backToDashboard":"返回控制台","common.confirmDelete":"确定要删除此项吗?","common.notFound":"未找到","common.failedToLoad":"加载失败","common.selectStatus":"选择状态","common.titleRequired":"标题不能为空","common.contentRequired":"内容不能为空","common.nameRequired":"名称不能为空","common.invalidJson":"无效的 JSON","common.isRequired":"{field} 不能为空","common.created":"{name} 已创建","common.updated":"{name} 已更新","common.deleted":"{name} 已删除","common.failedToCreate":"创建 {name} 失败","common.failedToUpdate":"更新 {name} 失败","common.failedToDelete":"删除 {name} 失败","common.none":"无","common.noDependencies":"无依赖","dashboard.title":"控制台","dashboard.posts":"文章","dashboard.comments":"评论","dashboard.categories":"分类","dashboard.tags":"标签","dashboard.media":"媒体","dashboard.users":"用户","dashboard.contentTypes":"内容类型","dashboard.postsLast14Days":"文章(近 14 天)","dashboard.ordersAndProducts14Days":"订单与商品(近14天)","dashboard.viewAll":"查看全部","dashboard.failedToLoad":"加载控制台统计失败,数据可能已过期。","dashboard.noDataYet":"暂无数据。","dashboard.recentActivity":"最近活动","dashboard.noActivity":"暂无活动。","dashboard.type":"类型","dashboard.detail":"详情","dashboard.time":"时间","dashboard.post":"文章","dashboard.comment":"评论","dashboard.product":"产品","dashboard.order":"订单","dashboard.products":"商品","dashboard.orders":"订单","dashboard.revenue":"营收","dashboard.coupons":"优惠券","dashboard.orderStatus":"订单状态","dashboard.justNow":"刚刚","dashboard.minutesAgo":"分钟前","dashboard.hoursAgo":"小时前","dashboard.daysAgo":"天前","posts.title":"文章","posts.newPost":"新建文章","posts.editPost":"编辑文章","posts.postTitle":"文章标题","posts.titleCol":"标题","posts.categoryCol":"分类","posts.authorCol":"作者","posts.createdCol":"创建时间","posts.allStatus":"全部状态","posts.searchPlaceholder":"搜索文章...","posts.content":"内容","posts.excerpt":"摘要","posts.briefSummary":"简短摘要(可选)","posts.coverImage":"封面图片","posts.writeContent":"用 Markdown 编写文章内容...","posts.selectCategory":"选择分类","posts.tags":"标签","posts.slug":"Slug","posts.slugPlaceholder":"留空则从标题自动生成","posts.noTags":"暂无可用标签","posts.addTag":"添加标签...","posts.createTag":"创建","posts.createPost":"创建文章","posts.saveChanges":"保存修改","posts.postCreated":"文章已创建","posts.postUpdated":"文章已更新","posts.postDeleted":"文章已删除","posts.failedToCreate":"创建文章失败","posts.failedToUpdate":"更新文章失败","posts.failedToDelete":"删除文章失败","posts.confirmDelete":"确定要删除这篇文章吗?","posts.confirmBatchDelete":"确定要删除 {count} 篇文章吗?","posts.batchPublish":"发布","posts.batchUnpublish":"取消发布","posts.batchSuccess":"{count} 篇文章已更新","posts.noPosts":"未找到文章。","posts.noPostsDesc":"创建您的第一篇博文来分享想法。","posts.failedToLoad":"加载文章失败。","categories.title":"分类","categories.newCategory":"新建分类","categories.createCategory":"创建一个新分类来组织文章。","categories.categoryName":"分类名称","categories.optionalDesc":"可选描述","categories.sortOrder":"排序","categories.slug":"别名","categories.categoryCreated":"分类已创建","categories.categoryUpdated":"分类已更新","categories.categoryDeleted":"分类已删除","categories.failedToCreate":"创建分类失败","categories.failedToUpdate":"更新分类失败","categories.failedToDelete":"删除分类失败","categories.confirmDelete":"确定要删除这个分类吗?","categories.confirmDeleteTitle":"删除分类","categories.noCategories":"暂无分类","categories.noCategoriesDesc":"使用分类来组织您的文章。","categories.treeTitle":"分类","categories.selectCategory":"选择一个分类查看详情","categories.addChild":"添加子分类","categories.parent":"父分类","categories.noParent":"无父分类","categories.editCategory":"编辑分类","categories.cannotDeleteHasChildren":"该分类下有 {count} 个子分类,无法删除。请先移动或删除子分类。","categories.coverImage":"封面图","tags.title":"标签","tags.newTag":"新建标签","tags.createTag":"创建一个新标签。","tags.tagName":"标签名称","tags.tagCreated":"标签已创建","tags.tagUpdated":"标签已更新","tags.tagDeleted":"标签已删除","tags.failedToCreate":"创建标签失败","tags.failedToUpdate":"更新标签失败","tags.failedToDelete":"删除标签失败","tags.confirmDelete":"确定要删除这个标签吗?","tags.noTags":"未找到标签。","tags.noTagsDesc":"添加标签来帮助组织和筛选内容。","comments.title":"评论","comments.total":"共 {count} 条","comments.all":"全部","comments.pending":"待审核","comments.approved":"已批准","comments.rejected":"已拒绝","comments.spam":"垃圾评论","comments.approve":"批准","comments.reject":"拒绝","comments.author":"作者","comments.contentCol":"内容","comments.post":"文章","comments.date":"日期","comments.selected":"已选 {count} 项","comments.commentStatusUpdated":"评论状态已更新","comments.commentDeleted":"评论已删除","comments.bulkActionDone":"{count} 条评论已{status}","comments.bulkDeleted":"{count} 条评论已删除","comments.bulkActionFailed":"批量操作失败","comments.bulkDeleteFailed":"批量删除失败","comments.failedToUpdateStatus":"更新状态失败","comments.failedToDelete":"删除评论失败","comments.confirmDelete":"确定要删除这条评论吗?","comments.confirmBulkDelete":"确定删除选中的 {count} 条评论?","comments.noComments":"未找到评论。","comments.noCommentsDesc":"读者开始互动后,评论将显示在这里。","contentTypes.title":"内容类型","contentTypes.noFields":"此内容类型没有可编辑的字段。","contentTypes.createContentType":"创建内容类型","contentTypes.builder":"构建器","contentTypes.ungrouped":"未分组","contentTypes.noContentTypes":"暂无内容类型","contentTypes.noContentTypesDesc":"创建您的第一个内容类型来开始构建 CMS。","contentTypes.contentTypeDeleted":"内容类型已删除","contentTypes.failedToDelete":"删除失败","contentTypes.confirmDelete":"删除内容类型“{singular}”?这将移除模式文件但不会删除数据库表。","contentTypes.notFound":"内容类型未找到","contentTypes.notFoundMsg":"内容类型“{singular}”未找到。","contentTypes.itemDeleted":"项目已删除","contentTypes.failedToDeleteItem":"删除项目失败","contentTypes.confirmDeleteItem":"确定要删除此项吗?","contentTypes.batchDeleteSuccess":"已删除 {count} 条记录","contentTypes.confirmBatchDelete":"确定要删除 {count} 条记录吗?","contentTypes.export":"导出","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"已导出 {count} 条记录","contentTypes.import":"导入","contentTypes.importJson":"导入 JSON","contentTypes.importCsv":"导入 CSV","contentTypes.importExcel":"导入 Excel","contentTypes.importSuccess":"成功导入 {count} 条记录","contentTypes.importPartial":"成功 {ok} 条,失败 {failed} 条","contentTypes.importEmpty":"文件中没有可导入的记录","contentTypes.importTooMany":"记录数超过上限(最多 {max} 条)","contentTypes.importFailed":"导入失败","contentTypes.importTooLarge":"文件超过 8MB 大小限制","contentTypes.noItems":"未找到项目。","contentTypes.noItemsDesc":"创建您的第一个项目来填充此集合。","contentTypes.newItem":"新建 {name}","contentTypes.editStructure":"编辑表结构","contentTypes.addRecord":"添加","contentTypes.browseRecords":"浏览","contentTypes.editItem":"编辑 {name}","contentTypes.itemNotFound":"项目未找到。","contentTypes.fields":"{count} 个字段","contentTypes.fieldsLabel":"个字段","contentTypes.totalRecords":"{count} 条记录","contentTypes.createdAt":"创建时间","contentTypes.updatedAt":"更新时间","contentTypes.searchPlaceholder":"搜索记录...","contentTypes.searchTypes":"搜索名称、singular、plural、表名...","contentTypes.noSearchResults":"没有匹配的内容类型","contentTypes.noSearchResultsDesc":'没有与 "{keyword}" 匹配的内容类型。',"contentTypes.exportData":"导出","contentTypes.api":"API","contentTypes.apiSaved":"API 设置已保存","contentTypes.apiSaveFailed":"保存 API 设置失败","contentTypes.exportDataSuccess":"导出完成","contentTypes.exportDataFailed":"导出失败","contentTypes.exportEmpty":"没有可导出的记录","users.title":"用户","users.newUser":"新建用户","users.createUser":"创建用户","users.registerNew":"注册一个新用户账户。","users.username":"用户名","users.email":"邮箱","users.password":"密码","users.minChars":"至少 8 个字符,必须包含大写字母、小写字母和数字","users.role":"角色","users.joined":"加入时间","users.editRole":"编辑用户角色","users.editUser":"编辑用户","users.changeRoleFor":"更改 {username} ({email}) 的角色","users.reader":"读者","users.author":"作者","users.admin":"管理员","users.active":"正常","users.suspended":"停用","users.banned":"封禁","users.newPassword":"新密码","users.userCreated":"用户已创建","users.userUpdated":"用户已更新","users.userRoleUpdated":"用户角色已更新","users.failedToCreate":"创建用户失败","users.failedToUpdate":"更新用户失败","users.noUsers":"未找到用户。","users.noUsersDesc":"邀请用户并管理他们的角色。","users.registeredVia":"注册来源","users.userDeleted":"用户已删除","users.failedToDelete":"删除用户失败","users.confirmDeleteUser":'确定要删除用户 "{username}" 吗?此操作不可撤销。',"webhooks.title":"Webhooks","webhooks.name":"名称","webhooks.namePlaceholder":"如:Slack 通知","webhooks.nameCol":"名称","webhooks.newWebhook":"新建 Webhook","webhooks.createWebhook":"创建一个新的 Webhook 订阅以接收事件通知。","webhooks.callbackUrl":"回调 URL","webhooks.eventsComma":"事件(逗号分隔)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"使用 * 订阅所有事件","webhooks.descriptionOptional":"描述(可选)","webhooks.secretOptional":"密钥(可选)","webhooks.secretPlaceholder":"留空表示不使用","webhooks.secretHint":"用于 HMAC-SHA256 签名验证(X-Webhook-Signature 头)。","webhooks.deliveryHistory":"投递记录","webhooks.colTime":"时间","webhooks.colEvent":"事件","webhooks.colStatus":"状态","webhooks.colStatusCode":"状态码","webhooks.colDuration":"耗时","webhooks.colError":"错误","webhooks.noDeliveries":"暂无投递记录。","webhooks.urlCol":"URL","webhooks.events":"事件","webhooks.webhookCreated":"Webhook 已创建","webhooks.webhookUpdated":"Webhook 已更新","webhooks.webhookDeleted":"Webhook 已删除","webhooks.failedToCreate":"创建 Webhook 失败","webhooks.failedToUpdate":"更新 Webhook 失败","webhooks.failedToDelete":"删除 Webhook 失败","webhooks.confirmDelete":"删除此 Webhook 订阅?","webhooks.noWebhooks":"未找到 Webhook。","webhooks.noWebhooksDesc":"设置 Webhook 以接收实时事件通知。","tokens.title":"API 令牌","tokens.newToken":"新建令牌","tokens.createToken":"创建 API 令牌","tokens.createTokenDesc":"生成一个新的个人访问令牌。令牌值只会显示一次。","tokens.scopesComma":"权限范围(逗号分隔)","tokens.expiresOptional":"过期时间(可选)","tokens.tokenCreated":"令牌已创建","tokens.tokenRevoked":"令牌已撤销","tokens.failedToCreate":"创建令牌失败","tokens.failedToRevoke":"撤销令牌失败","tokens.confirmRevoke":"撤销令牌“{name}”?此操作不可恢复。","tokens.tokenCopied":"令牌已复制到剪贴板","tokens.tokenCreatedCopy":"令牌已创建——请立即复制!","tokens.copied":"已复制","tokens.copy":"复制","tokens.dismiss":"关闭","tokens.notShownAgain":"此令牌不会再次显示,请安全存储。","tokens.scopesCol":"权限","tokens.expiresCol":"过期","tokens.lastUsed":"上次使用","tokens.never":"永不","tokens.noTokens":"未找到 API 令牌。创建一个以开始使用。","tokens.noTokensDesc":"创建 API 令牌以进行程序化访问。","tokens.editToken":"编辑令牌","tokens.editTokenDesc":"更新令牌名称和权限","tokens.tokenUpdated":"令牌已更新","tokens.failedToUpdate":"更新令牌失败","tokens.expiresAt":"过期时间","tokens.scopes":"权限","tokens.fullAccess":"完全访问","tokens.selectResource":"从左侧选择资源以配置权限","tokens.searchResources":"搜索资源...","tokens.month1":"1 个月","tokens.months3":"3 个月","tokens.months6":"6 个月","tokens.year1":"1 年","tokens.custom":"自定义","tokens.resource":"资源","tokens.created":"创建时间","tokens.name":"名称","tokens.description":"描述","workflows.title":"工作流","workflows.instances":"实例","workflows.visualEditor":"可视化编辑器","workflows.newWorkflow":"新建工作流","workflows.createWorkflow":"创建工作流","workflows.createWorkflowDesc":"定义一个包含步骤的新工作流。步骤配置为 JSON 格式。","workflows.stepsJson":"步骤 (JSON)","workflows.stepFormat":'每个步骤:{ id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"工作流已创建","workflows.workflowDeleted":"工作流已删除","workflows.failedToCreate":"创建工作流失败","workflows.failedToDelete":"删除工作流失败","workflows.confirmDelete":"删除工作流“{name}”?","workflows.noWorkflows":"未找到工作流。创建一个以开始使用。","workflows.noWorkflowsDesc":"定义工作流以自动化您的内容管道。","workflows.steps":"{count} 个步骤","workflows.workflowStarted":"工作流已启动","workflows.editor.title":"工作流编辑器","workflows.editor.newWorkflow":"新建工作流","workflows.editor.stepName":"步骤名称","workflows.editor.branchesJson":"分支(JSON 数组)","workflows.editor.connectEdges":"从此节点连接边以定义分支。","workflows.editor.configJson":"配置 (JSON)","workflows.editor.apply":"应用","workflows.editor.deleteStep":"删除步骤","workflows.editor.addStep":"添加步骤","workflows.editor.invalidJson":"配置中的 JSON 无效","workflows.editor.workflowSaved":"工作流已保存","workflows.editor.failedToSave":"保存工作流失败","audit.title":"审计日志","audit.clearFilters":"清除筛选","audit.noLogs":"未找到审计日志。","audit.action":"操作","audit.actor":"操作者","audit.resource":"资源","audit.timestamp":"时间戳","options.title":"选项","options.saved":"选项已保存","options.failedToSave":"保存选项失败","plugins.title":"插件","plugins.loaded":"{count} 已加载","plugins.plugin":"插件","plugins.runtime":"运行时","plugins.hooks":"钩子","plugins.health":"健康","plugins.pluginEnabled":"插件已启用","plugins.pluginDisabled":"插件已禁用","plugins.pluginReloaded":"插件已重载","plugins.pluginRemoved":"插件已移除","plugins.failedToEnable":"启用插件失败","plugins.failedToDisable":"禁用插件失败","plugins.failedToReload":"重载插件失败","plugins.failedToRemove":"移除插件失败","plugins.noPlugins":"未加载插件。","plugins.placePlugins":"将插件放置在配置的插件目录中。","plugins.confirmRemove":"移除插件“{name}”?这将从内存中卸载。","plugins.autoDisabled":"自动禁用","plugins.tooManyErrors":"错误过多","plugins.errorCount":"{count} 个错误","plugins.errorsOccurred":"发生错误","plugins.calls":"{count} 次调用","plugins.idle":"空闲","plugins.notFound":"插件未找到","plugins.notFoundMsg":"插件未找到。","plugins.backToPlugins":"返回插件","plugins.general":"概览","plugins.version":"版本","plugins.reload":"重载","plugins.remove":"移除","plugins.errorTracking":"错误跟踪和自动禁用状态","plugins.healthy":"健康","plugins.errorCountLabel":"错误计数","plugins.lastError":"最后错误","plugins.lastErrorAt":"最后错误时间","plugins.autoDisabledLabel":"自动禁用","plugins.permissions":"权限","permissions.declaredFromManifest":"从插件清单声明的权限","plugins.hooksTitle":"钩子","plugins.hooksDesc":"已注册的钩子点及其执行指标","plugins.noHooks":"未注册钩子。","plugins.totalCalls":"总调用次数","plugins.totalErrors":"总错误数","plugins.totalDuration":"总耗时","plugins.noMetrics":"暂无指标","plugins.performance":"性能概览","plugins.maxMemory":"最大内存","plugins.timeout":"超时","plugins.default":"默认","media.title":"媒体","media.files":"{count} 个文件","media.searchFiles":"搜索文件...","media.fileDeleted":"文件已删除","media.failedToDelete":"删除文件失败","media.confirmDelete":"确定要删除这个文件吗?","media.date":"日期","media.size":"大小","media.ascending":"升序","media.descending":"降序","field.mediaUrl":"媒体 URL","field.blobBase64":"Base64 编码的二进制数据","field.mediaItems":"项","field.blobChooseFile":"选择文件","field.blobReplace":"替换","field.blobBytes":"{size} 字节","field.blobTooLarge":"文件超过 {max} MB 上限","field.blobReadError":"读取文件失败","field.blobMaxSize":"最大 {max}","field.supportsTypes":"支持类型: {types}","field.maxFiles":"最多 {max} 个文件","field.allTypes":"所有文件类型","field.startWriting":"开始编写...","field.yes":"是","field.no":"否","field.relatedItemId":"关联项目 ID","cron.title":"定时任务","cron.newCron":"新建定时任务","cron.expression":"表达式","cron.handler":"处理函数","cron.lastRun":"上次运行","cron.nextRun":"下次运行","cron.cronCreated":"定时任务已创建","cron.cronDeleted":"定时任务已删除","cron.failedToCreate":"创建定时任务失败","cron.failedToDelete":"删除定时任务失败","cron.confirmDelete":"删除定时任务“{name}”?","tenants.title":"租户","tenants.newTenant":"新建租户","tenants.createTenant":"创建一个新租户用于多租户隔离。","tenants.tenantName":"租户名称","tenants.slug":"别名","tenants.domain":"域名","tenants.owner":"所有者","tenants.tenantCreated":"租户已创建","tenants.tenantUpdated":"租户已更新","tenants.tenantDeleted":"租户已删除","tenants.failedToCreate":"创建租户失败","tenants.failedToUpdate":"更新租户失败","tenants.failedToDelete":"删除租户失败","tenants.confirmDelete":"确定要删除这个租户吗?","tenants.noTenants":"未找到租户。","tenants.noTenantsDesc":"为多租户 SaaS 创建租户。","rbac.title":"角色与权限","rbac.roles":"角色","rbac.newRole":"新建角色","rbac.createRole":"创建一个新角色用于访问控制。","rbac.roleName":"角色名称","rbac.roleDesc":"角色描述","rbac.roleCreated":"角色已创建","rbac.roleUpdated":"角色已更新","rbac.roleDeleted":"角色已删除","rbac.failedToCreate":"创建角色失败","rbac.failedToUpdate":"更新角色失败","rbac.failedToDelete":"删除角色失败","rbac.confirmDelete":"删除角色“{name}”?这将移除所有关联的权限。","rbac.systemRole":"系统","rbac.permissions":"权限","rbac.addPermission":"添加权限","rbac.clearAllPermissions":"全部清除","rbac.clearAllPermissionsTitle":"清除所有权限?","rbac.clearAllPermissionsDesc":'确定要移除角色 "{name}" 的所有权限吗?此操作不可撤销。',"rbac.allPermissionsCleared":"所有权限已清除","rbac.permissionsRemoved":"权限已删除","rbac.searchResource":"搜索资源...","rbac.noSearchResults":"没有匹配的权限。","rbac.deleteSelected":"删除所选","rbac.deleteSelectedTitle":"删除所选权限?","rbac.deleteSelectedDesc":"将删除 {count} 个资源组的权限,此操作不可撤销。","rbac.op.create":"创建","rbac.op.read":"读取","rbac.op.update":"更新","rbac.op.delete":"删除","rbac.op.publish":"发布","rbac.op.*":"全部","rbac.action":"操作","rbac.subject":"主体","rbac.resource":"资源","rbac.operations":"操作","rbac.noRoles":"未找到角色。","builder.title":"内容类型构建器","builder.editContentType":"编辑内容类型","builder.createContentType":"创建内容类型","builder.baseConfig":"基本配置","builder.singularName":"单数名称","builder.pluralName":"复数名称","builder.tableName":"表名","builder.groupName":"分组","builder.groupPlaceholder":"如 forum(可选)","builder.groupHint":"命名空间分组,留空则为扁平结构。API: /cms/{group}/{plural}","builder.fieldsSection":"字段","builder.addField":"添加字段","builder.preview":"预览","builder.save":"保存内容类型","builder.saving":"保存中...","builder.saved":"内容类型已保存","builder.failedToSave":"保存内容类型失败","builder.confirmDeleteField":"删除字段“{name}”?","builder.text":"文本","builder.richText":"富文本","builder.email":"邮箱","builder.password":"密码","builder.uid":"UID","builder.integer":"整数","builder.bigInt":"大整数","builder.decimal":"小数","builder.float":"浮点数","builder.boolean":"布尔","builder.date":"日期","builder.datetime":"日期时间","builder.time":"时间","builder.enumType":"枚举","builder.jsonType":"JSON","builder.relation":"关联","builder.mediaType":"媒体","builder.link":"链接","builder.required":"必填","builder.unique":"唯一","builder.privateField":"私有","builder.immutable":"不可变","builder.label":"标签","builder.defaultValue":"默认值","builder.maxLength":"最大长度","builder.minValue":"最小值","builder.maxValue":"最大值","builder.enumValues":"枚举值(逗号分隔)","builder.relationType":"关联类型","builder.relationTarget":"目标表","builder.foreignKey":"外键","builder.throughTable":"中间表","builder.draftPublish":"草稿/发布","builder.timestamps":"时间戳","builder.softDelete":"软删除","builder.slugField":"Slug 字段","media.name":"名称","media.type":"类型","media.other":"其他","media.uploadFailed":"上传失败","media.dropFiles":"拖放文件、粘贴或{browse}","media.dropHint":"点击上传或拖拽文件到此处","media.cover":"封面","media.file":"文件","media.maxReached":"最多只能上传 {max} 个文件","media.typeNotAllowed":"不支持的文件类型","media.downloadFailed":"下载文件失败","media.uploading":"正在上传 {count} 个文件...","media.done":"完成","media.failedUpload":"失败","media.urlCopied":"URL 已复制","media.copyUrl":"复制 URL","media.download":"下载","media.dimensions":"尺寸","media.uploaded":"上传时间","media.urlLabel":"URL","media.noVideoSupport":"您的浏览器不支持视频播放。","media.downloadFile":"下载文件","workflows.instances.title":"工作流实例","workflows.instances.showLogs":"显示日志","workflows.instances.hideLogs":"隐藏日志","workflows.instances.currentStep":"当前","workflows.instances.context":"上下文","workflows.instances.stepLogs":"步骤日志 ({count})","workflows.instances.noStepLogs":"暂无步骤日志。","workflows.instances.noInstances":"未找到工作流实例。","workflows.instances.instanceCount":"{count} 个实例","workflows.instances.definitions":"定义","workflows.instances.filterStatus":"筛选状态","workflows.instances.cancelled":"实例已取消","workflows.editor.editStep":"编辑步骤","workflows.editor.name":"名称","workflows.editor.type":"类型","workflows.editor.backToList":"返回列表","workflows.editor.workflowName":"工作流名称...","workflows.editor.failedToLoad":"加载工作流失败","workflows.editor.immutableNotice":"工作流定义不可变。请创建新的工作流来更改步骤。","workflows.editor.untitled":"未命名工作流","workflows.editor.save":"保存","workflows.editor.saving":"保存中...","cron.createSchedule":"创建定时计划","cron.labelField":"标签","cron.jobType":"任务类型","cron.jobTypeHint":"选择内置任务","cron.cronExpression":"Cron 表达式(6 段)","cron.format":"格式:秒 分 时 日 月 周","cron.payload":"参数","cron.schedule":"计划","cron.scheduleTitle":"触发频率","cron.pluginCol":"插件","cron.scheduleCreated":"计划已创建","cron.scheduleToggled":"计划已切换","cron.scheduleDeleted":"计划已删除","cron.scheduleUpdated":"计划已更新","cron.seedHint":"点击右上角创建第一个定时任务","cron.confirmDeleteSchedule":"删除计划“{name}”?此操作不可恢复。","cron.scheduleNotFound":"计划未找到","cron.backToCronSchedules":"返回定时任务","cron.builtIn":"内置","cron.executionHistory":"执行历史","cron.cleanupOld":"清理旧日志","cron.cleanedUp":"已清理 {count} 条旧日志","cron.noExecutionLogs":"暂无执行日志。","cron.success":"成功","cron.failedStatus":"失败","cron.running":"运行中","cron.dispatched":"已入队","cron.dead":"已放弃","cron.timedOut":"已超时","cron.newSchedule":"新建计划","cron.idField":"ID","cron.started":"开始","cron.finished":"完成","cron.duration":"耗时","cron.error":"错误","cron.created":"创建时间","cron.updated":"更新时间","cron.executionType":"执行方式","cron.builtinTab":"内置任务","cron.scriptTab":"自定义脚本","cron.scriptLang":"脚本语言","cron.scriptSource":"脚本代码","cron.scriptHint":"可用 API: host.log, host.getData, host.setData, host.dbQuery, host.dbExecute, host.httpGet 等","cron.systemTab":"系统命令","cron.systemWarning":"系统脚本以完整系统权限运行 shell 命令。需要 cron-system 特性 + CRON_ALLOW_SYSTEM_SCRIPTS=true。","cron.useShell":"Shell 包装","cron.timeoutSecs":"超时(秒)","cron.systemCommand":"Shell 命令","cron.systemHint":"命令在工作目录下执行,CRON_PAYLOAD 环境变量包含 payload JSON","cron.presetHint":"常用预设","cron.presetGroupMinute":"分钟级","cron.presetGroupHour":"小时级","cron.presetGroupDay":"天/周/月","cron.presetEveryMinute":"每分钟","cron.presetEvery5Min":"每 5 分钟","cron.presetEvery15Min":"每 15 分钟","cron.presetEvery30Min":"每 30 分钟","cron.presetHourly":"每小时","cron.presetEvery6Hours":"每 6 小时","cron.presetEvery12Hours":"每 12 小时","cron.presetDailyMidnight":"每天 0:00","cron.presetDaily3am":"每天 3:00","cron.presetWeekly":"每周一 3:00","cron.presetWeeklySun":"每周日 3:00","cron.presetMonthly":"每月 1 号 0:00","cron.noCrons":"暂无定时任务","tenants.createForIsolation":"创建一个新租户用于数据隔离。","tenants.cannotDeleteDefault":"无法删除默认租户","tenants.confirmDeleteMsg":"删除此租户?属于此租户的数据不会被删除。","tenants.created":"创建时间","rbac.addRoleDesc":"向系统添加新角色。","rbac.updateRoleDesc":"更新“{name}”角色。","rbac.deleteRoleTitle":"删除角色","rbac.deleteRoleConfirm":"确定要删除“{name}”吗?此操作不可恢复。","rbac.addPermissionTitle":"添加权限","rbac.addPermissionDesc":"为“{name}”授予新权限。使用 * 作为通配符。","rbac.fieldsCol":"字段","rbac.conditionsCol":"条件","rbac.fieldsOptional":"字段(逗号分隔,可选)","rbac.removePermissionTitle":"移除权限","rbac.removePermissionDesc":"移除 {action} 对 {subject} 的权限?","rbac.noPermissions":"未配置权限。","rbac.selectRole":"选择角色以查看权限","rbac.prev":"上一页","scopeMatrix.fullAccess":"完全访问","scopeMatrix.action":"操作","scopeMatrix.allResources":"所有资源","scopeMatrix.search":"搜索...","scopeMatrix.selectAll":"全选","scopeMatrix.clearAll":"清除全部","scopeMatrix.empty":"从左侧选择资源以配置权限","scopeMatrix.resource":"资源","scopeMatrix.selected":"已选 {count} 个","scopeMatrix.fieldsOptional":"字段(逗号分隔,可选)","scopeMatrix.conditionsOptional":"条件(每行 key=value,可选)","options.noChanges":"没有修改","options.noOptions":"暂无配置项。","options.reset":"撤销","options.saveChanges":"保存更改","audit.failedToLoad":"加载审计日志失败,请重试。","audit.noEntries":"未找到审计条目。","audit.noEntriesDesc":"执行操作后,审计条目将显示在这里。","audit.timeCol":"时间","audit.subjectId":"资源 ID","audit.detailCol":"详情","audit.system":"系统","audit.from":"从","audit.to":"到","audit.search":"搜索","audit.clear":"清除","audit.today":"今天","audit.dateRange":"日期范围","audit.custom":"自定义范围","audit.export":"导出","audit.viewEntry":"审计条目","audit.ipAddress":"IP 地址","audit.userAgent":"User Agent","builder.untitled":"未命名内容类型","builder.fieldCount":"{count} 个字段","builder.fieldList":"字段列表","builder.protocols":"协议","builder.systemFields":"系统字段","builder.system":"系统","builder.newField":"新字段","builder.addAnotherField":"添加另一个字段","builder.addAField":"添加字段","builder.chooseFieldType":"选择要添加到内容类型的字段类型。","builder.fieldConfiguration":"字段配置","builder.fieldName":"字段名称","builder.fieldTypeLabel":"字段类型","builder.displayLabel":"显示标签","builder.helpText":"帮助文本","builder.removeField":"移除字段","builder.removeFieldConfirm":"移除此字段?","builder.noAdditionalOptions":"此字段类型无额外选项。","builder.acceptedTypes":"接受的类型","builder.acceptAll":"所有文件类型","builder.searchTypes":"搜索类型...","builder.noMatch":"没有匹配的类型","builder.viewData":"查看数据","builder.viewToml":"查看 TOML","builder.tomlDescription":"该内容类型生成的 TOML 源码。","builder.tomlCopied":"TOML 已复制到剪贴板","builder.copy":"复制","common.copied":"已复制","builder.viewApi":"API","builder.apiDescription":"配置每个端点的 API 访问控制,随内容类型一起保存。","builder.apiList":"列表","builder.apiEndpoint":"端点","builder.apiGet":"详情","builder.apiCreate":"创建","builder.apiUpdate":"更新","builder.apiDelete":"删除","builder.apiAccess":"访问级别","builder.apiAccessShort":"权限","builder.apiCache":"缓存","builder.apiCacheEnable":"启用服务端缓存","builder.apiCacheShort":"缓存","builder.apiFilter":"过滤表达式","builder.apiFilterShort":"过滤","builder.apiFilterAuth":"登录用户过滤","builder.apiFilterAuthShort":"登录过滤","builder.apiFields":"返回字段(逗号分隔)","builder.apiFieldsShort":"字段","builder.apiCopied":"URL 已复制到剪贴板","builder.saveApi":"保存 API","builder.apiSaved":"API 设置已保存","builder.apiSaveNeedsCreate":"请先创建内容类型,API 配置会随创建一起保存","builder.apiAccessHelpNone":"完全禁用,端点不开放","builder.apiAccessHelpPublic":"公开,无需认证","builder.apiAccessHelpAuthed":"任何已登录用户","builder.apiAccessHelpOwner":"仅记录创建者","builder.apiAccessHelpAdmin":"仅管理员","builder.icon":"图标","builder.color":"颜色","builder.invalidFieldName":'字段 "{field}" 必须以字母开头,只能包含字母、数字和下划线',"builder.requiredField":"请填写必填字段: {field}","builder.enumValuesRequired":'枚举字段 "{field}" 至少需要一个值',"builder.relationTargetRequired":'关系字段 "{field}" 必须指定目标内容类型',"builder.maxCount":"最大数量","builder.target":"目标","builder.valuesComma":"值(逗号分隔)","builder.describeContentType":"描述此内容类型...","builder.contentTypeUpdated":"内容类型已更新","builder.contentTypeCreated":"内容类型已创建","builder.newFieldCategory":"数字","layout.crm":"CRM","layout.pages":"页面","layout.reusableBlocks":"可复用块","crm.dashboard":"CRM 仪表盘","crm.pipeline":"销售漏斗","crm.contacts":"联系人","crm.companies":"公司","crm.deals":"商机","crm.activities":"活动","crm.notes":"备注","crm.reports":"报表","crm.totalCompanies":"公司总数","crm.totalContacts":"联系人总数","crm.openDeals":"进行中商机","crm.wonDeals":"已赢单","crm.pipelineValue":"漏斗总值","crm.weightedValue":"加权值","crm.winRate":"赢单率","crm.avgDealSize":"平均商机金额","crm.recentActivities":"本周活动","crm.totalActivities":"活动总数","crm.leaderboard":"排行榜","crm.noData":"暂无数据。","crm.newDeal":"新建商机","crm.createDeal":"创建商机","crm.dealTitle":"标题","crm.dealTitlePlaceholder":"输入商机标题...","crm.amount":"金额","crm.probability":"概率","crm.stage":"阶段","crm.advanceStage":"推进到下一阶段","crm.totalValue":"总值","crm.dealCreated":"商机已创建","crm.failedToCreateDeal":"创建商机失败","crm.dealStageUpdated":"商机阶段已更新","crm.failedToUpdateStage":"更新阶段失败","crm.titleRequired":"标题不能为空","crm.newContact":"新建联系人","crm.editContact":"编辑联系人","crm.contact":"联系人","crm.name":"姓名","crm.email":"邮箱","crm.phone":"电话","crm.company":"公司","crm.source":"来源","crm.lifecycleStage":"生命周期阶段","crm.noContacts":"暂无联系人。","crm.firstName":"名","crm.lastName":"姓","crm.jobTitle":"职位","crm.newCompany":"新建公司","crm.editCompany":"编辑公司","crm.companyName":"公司名称","crm.industry":"行业","crm.size":"规模","crm.website":"网站","crm.city":"城市","crm.country":"国家","crm.noCompanies":"暂无公司。","crm.deal":"商机","crm.editDeal":"编辑商机","crm.closeDate":"预计成交日期","crm.lossReason":"丢单原因","crm.noDeals":"暂无商机。","crm.dealInfo":"商机信息","crm.newActivity":"新建活动","crm.editActivity":"编辑活动","crm.activity":"活动","crm.type":"类型","crm.subject":"主题","crm.content":"内容","crm.date":"日期","crm.duration":"时长","crm.outcome":"结果","crm.noActivities":"暂无活动。","crm.newNote":"新建备注","crm.editNote":"编辑备注","crm.note":"备注","crm.relatedTo":"关联","crm.pinned":"置顶","crm.createdAt":"创建时间","crm.noNotes":"暂无备注。","crm.contentRequired":"内容不能为空","crm.relatedContactId":"关联联系人 ID","crm.relatedCompanyId":"关联公司 ID","crm.relatedDealId":"关联商机 ID","crm.contactInfo":"联系人信息","crm.timeline":"时间线","crm.noTimeline":"暂无时间线事件。","crm.addNote":"添加备注","crm.notePlaceholder":"输入备注...","crm.lifecycleUpdated":"生命周期阶段已更新","crm.failedToUpdateLifecycle":"更新生命周期阶段失败","crm.companyInfo":"公司信息","crm.funnelReport":"漏斗报表","crm.activityReport":"活动报表","crm.conversionRate":"转化率","crm.byType":"按类型","crm.byOutcome":"按结果","pages.title":"页面","pages.newPage":"新建页面","pages.editPage":"编辑页面","pages.pageDeleted":"页面已删除","pages.pageCreated":"页面已创建","pages.pageUpdated":"页面已更新","pages.failedToDelete":"删除页面失败","pages.failedToCreate":"创建页面失败","pages.failedToUpdate":"更新页面失败","pages.statusUpdated":"页面状态已更新","pages.failedToUpdateStatus":"更新状态失败","pages.confirmDelete":"确定要删除此页面吗?","pages.noPages":"暂无页面。","pages.noPagesDesc":"创建您的第一个页面来开始构建您的站点。","pages.noBlocks":"暂无可复用区块。","pages.noBlocksDesc":"创建可复用区块以在页面中使用。","pages.publish":"发布","pages.unpublish":"取消发布","pages.preview":"预览","pages.slug":"路径别名","pages.template":"模板","pages.createdAt":"创建时间","pages.basicInfo":"基本信息","pages.titleLabel":"标题","pages.titlePlaceholder":"输入页面标题...","pages.coverImage":"封面图","pages.metaTitle":"SEO 标题","pages.metaDescription":"SEO 描述","pages.ogImage":"OG 图片","pages.content":"内容","pages.blockMode":"可视化块","pages.saveDraft":"保存草稿","pages.writeContent":"输入页面内容...","pages.addBlock":"添加块","pages.chooseBlock":"选择块类型","pages.reusableBlocks":"可复用块","pages.createReusable":"创建可复用块","pages.editReusable":"编辑可复用块","pages.rbName":"名称","pages.rbType":"块类型","pages.rbDescription":"描述","pages.rbContent":"内容","command.search":"搜索...","command.placeholder":"输入命令或搜索...","command.noResults":"没有找到结果。","command.actions":"操作","command.switchToLight":"切换到亮色模式","command.switchToDark":"切换到暗色模式","layout.ecommerce":"电商","layout.products":"商品","layout.productCategories":"商品分类","layout.orders":"订单","layout.finance":"金融","layout.currencies":"币种","layout.wallets":"钱包","layout.paymentChannels":"支付渠道","layout.productComments":"商品评价","layout.coupons":"优惠券","layout.shippingTemplates":"运费模板","layout.plans":"套餐","products.title":"商品","products.newProduct":"新建商品","products.editProduct":"编辑商品","products.productTitle":"商品名称","products.price":"价格","products.originalPrice":"原价","products.stock":"库存","products.sales":"销量","products.coverUrl":"封面图","products.description":"描述","products.content":"详情","products.slug":"别名","products.status":"状态","products.category":"分类","products.unit":"单位","products.minPurchase":"最小购买","products.maxPurchase":"最大购买","products.sortOrder":"排序","products.metaTitle":"Meta 标题","products.metaDescription":"Meta 描述","products.productCreated":"商品已创建","products.productUpdated":"商品已更新","products.productDeleted":"商品已删除","products.batchDeleted":"{{count}} 个商品已删除","products.batchSuccess":"{{count}} 个商品已更新","products.batchActivate":"上架","products.batchDeactivate":"下架","products.failedToCreate":"创建商品失败","products.failedToUpdate":"更新商品失败","products.failedToDelete":"删除商品失败","products.confirmDelete":"确定要删除此商品吗?","products.confirmBatchDelete":"确定要删除 {{count}} 个商品吗?","products.noProducts":"暂无商品","products.noProductsDesc":"创建第一个商品开始销售。","products.allStatus":"全部状态","products.searchPlaceholder":"搜索商品标题...","products.active":"上架","products.draft":"草稿","products.archived":"已下架","products.general":"基本信息","products.media":"媒体","products.pricing":"定价","products.purchaseSettings":"购买设置","products.summary":"摘要","products.phTitle":"输入商品标题...","products.phSummary":"商品简短描述...","products.images":"商品图片","products.cover":"封面","products.dropImages":"拖拽图片到此处、粘贴或点击上传","productCategories.categoryName":"分类名称","productCategories.newCategory":"新建分类","productCategories.createCategory":"创建分类","productCategories.editCategory":"编辑分类","productCategories.optionalDesc":"描述(可选)","productCategories.parent":"父分类","productCategories.noParent":"无父分类","productCategories.sortOrder":"排序","productCategories.slug":"别名","productCategories.noCategories":"暂无分类","productCategories.noCategoriesDesc":"创建第一个商品分类来组织你的商品。","productCategories.categoryCreated":"分类已创建","productCategories.categoryUpdated":"分类已更新","productCategories.categoryDeleted":"分类已删除","productCategories.failedToCreate":"创建分类失败","productCategories.failedToUpdate":"更新分类失败","productCategories.failedToDelete":"删除分类失败","productCategories.confirmDelete":"确定要删除该分类吗?","productCategories.confirmDeleteTitle":"删除分类","productCategories.cannotDeleteHasChildren":"该分类下有 {count} 个子分类,无法删除。请先移动或删除子分类。","productCategories.treeTitle":"分类列表","productCategories.selectCategory":"选择一个分类查看详情","productCategories.addChild":"添加子分类","orders.title":"订单","orders.orderNo":"订单号","orders.buyer":"买家","orders.total":"金额","orders.status":"状态","orders.items":"商品","orders.remark":"备注","orders.adminRemark":"管理员备注","orders.createdAt":"创建时间","orders.actions":"操作","orders.allStatus":"全部状态","orders.searchPlaceholder":"搜索订单号、买家姓名...","orders.pending":"待付款","orders.paid":"已付款","orders.shipped":"已发货","orders.completed":"已完成","orders.cancelled":"已取消","orders.refunded":"已退款","orders.confirmPay":"确认已收到付款?","orders.orderPaid":"订单已标记为已付款","orders.confirmShip":"确认发货?","orders.orderShipped":"订单已发货","orders.confirmCancel":"确定取消此订单?","orders.orderCancelled":"订单已取消","orders.confirmRefund":"确定退款?","orders.orderRefunded":"订单已退款","orders.failedToPay":"标记付款失败","orders.failedToShip":"发货失败","orders.failedToCancel":"取消失败","orders.failedToRefund":"退款失败","orders.noOrders":"暂无订单","orders.noOrdersDesc":"客户下单后订单会显示在这里。","orders.trackingNo":"快递单号","orders.carrier":"快递公司","orders.shipInfo":"物流信息","orders.buyerInfo":"买家信息","orders.shippingAddress":"收货地址","orders.orderDetail":"订单详情","orders.stats.totalOrders":"总订单","orders.stats.totalRevenue":"总收入","orders.stats.pending":"待处理","orders.stats.completed":"已完成","orders.stats.todayOrders":"今日订单","orders.stats.todayRevenue":"今日收入","payments.title":"支付渠道","payments.newChannel":"新建渠道","payments.provider":"支付方式","payments.name":"渠道名称","payments.mode":"模式","payments.active":"启用","payments.live":"正式","payments.test":"测试","payments.credentials":"凭证","payments.webhookSecret":"Webhook 密钥","payments.settings":"设置","payments.channelCreated":"支付渠道已创建","payments.channelUpdated":"支付渠道已更新","payments.channelDeleted":"支付渠道已删除","payments.failedToCreate":"创建支付渠道失败","payments.failedToUpdate":"更新支付渠道失败","payments.failedToDelete":"删除支付渠道失败","payments.confirmDelete":"确定删除此支付渠道?","payments.noChannels":"暂无支付渠道","payments.noChannelsDesc":"添加支付渠道以开始收款。","payments.selectProvider":"选择支付方式...","payments.testMode":"沙箱模式","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"商户号","payments.fPrivateKey":"RSA 私钥","payments.fSerialNo":"证书序列号","payments.fWebhookSecret":"Webhook 签名密钥","payments.fAlipayPublicKey":"支付宝公钥","payments.fPlatformCert":"平台证书 (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"回调通知 URL","payments.phSk":"sk_live_... 或 sk_test_...","payments.phRsaKey":"粘贴 RSA 私钥(PEM 或 Base64)","payments.phUrl":"https://...","payments.editChannel":"编辑渠道","payments.leaveBlankToKeep":"留空保持不变","layout.paymentOrders":"支付订单","paymentOrders.title":"支付订单","paymentOrders.orderId":"关联订单","paymentOrders.title_col":"标题","paymentOrders.amount":"金额","paymentOrders.provider":"支付渠道","paymentOrders.noOrders":"暂无支付订单","paymentOrders.noOrdersDesc":"客户付款后,支付订单将显示在此处。","paymentOrders.refund":"退款","paymentOrders.refundTitle":"退款","paymentOrders.refundOrder":"退款订单","paymentOrders.refundAmount":"退款金额","paymentOrders.refundReason":"原因","paymentOrders.refundSuccess":"退款已提交","paymentOrders.refundFailed":"退款失败","layout.paymentTransactions":"支付流水","paymentTransactions.title":"支付流水","paymentTransactions.orderId":"关联订单","paymentTransactions.type":"类型","paymentTransactions.amount":"金额","paymentTransactions.providerTxId":"渠道流水号","paymentTransactions.noTransactions":"暂无交易记录","paymentTransactions.noTransactionsDesc":"支付事件发生后,交易记录将显示在此处。","currencies.title":"币种","currencies.newCurrency":"新建币种","currencies.code":"代码","currencies.name":"名称","currencies.decimals":"小数位","currencies.active":"启用","currencies.currencyCreated":"币种已创建","currencies.currencyUpdated":"币种已更新","currencies.failedToCreate":"创建币种失败","currencies.failedToUpdate":"更新币种失败","currencies.noCurrencies":"暂无币种","currencies.noCurrenciesDesc":"添加币种以启用多币种支持。","wallets.title":"钱包","wallets.user":"用户","wallets.currency":"币种","wallets.balance":"余额","wallets.frozen":"冻结","wallets.credit":"充值","wallets.debit":"扣款","wallets.transactions":"交易记录","wallets.amount":"金额","wallets.type":"类型","wallets.reference":"关联","wallets.creditTitle":"钱包充值","wallets.debitTitle":"钱包扣款","wallets.userId":"用户 ID","wallets.remark":"备注","wallets.creditSuccess":"充值成功","wallets.debitSuccess":"扣款成功","wallets.failedToCredit":"充值失败","wallets.failedToDebit":"扣款失败","wallets.noWallets":"暂无钱包","wallets.noWalletsDesc":"用户收到首笔交易后钱包会自动创建。","wallets.noTransactions":"暂无交易记录。","adminLogin.title":"管理后台","adminLogin.subtitle":"请使用管理员账号登录","adminLogin.email":"邮箱","adminLogin.password":"密码","adminLogin.submit":"登录","adminLogin.loading":"登录中…","adminLogin.error":"邮箱或密码错误","adminLogin.footer":"RaisFast 管理后台 — 仅限授权人员访问","adminLogin.sessionExpired":"会话已过期,请重新登录。","setup.title":"安装向导","setup.subtitle":"让我们准备好您的 RaisFast 实例","setup.failedToFetch":"获取系统状态失败","setup.step.check":"检查","setup.step.database":"数据库","setup.step.admin":"管理员","setup.check.title":"系统检查","setup.check.desc":"验证您的环境是否就绪","setup.check.database":"数据库","setup.check.connected":"已连接","setup.check.disconnected":"未连接","setup.check.storage":"文件存储","setup.check.extensions":"扩展目录","setup.check.writable":"可写入","setup.check.notWritable":"不可写入","setup.check.adminUser":"管理员账户","setup.check.adminExists":"已存在","setup.check.adminNeeded":"未创建","setup.check.next":"下一步:配置数据库","setup.check.nextAdmin":"下一步:创建管理员","setup.database.title":"数据库配置","setup.database.desc":"连接到您的数据库","setup.database.path":"数据库文件路径","setup.database.pathHint":"相对于工作目录的路径","setup.database.connectionString":"连接字符串","setup.database.manualInput":"手动填写","setup.database.url":"数据库 URL","setup.database.urlHint":"粘贴您的数据库服务商提供的连接 URL(如 Supabase、Neon、PlanetScale)","setup.database.host":"主机","setup.database.port":"端口","setup.database.username":"用户名","setup.database.password":"密码","setup.database.name":"数据库名称","setup.database.testConnection":"测试连接","setup.database.testing":"测试中...","setup.database.testSuccess":"连接成功!","setup.database.testFailed":"连接失败","setup.database.saveAndRestart":"保存并重启","setup.database.saving":"保存中...","setup.database.connectionError":"连接错误","setup.database.failedToSave":"保存数据库配置失败","setup.restarting.title":"正在重启...","setup.restarting.desc":"服务器正在使用新的数据库配置重启,请稍候。","setup.admin.title":"创建管理员账户","setup.admin.desc":"为您的实例设置第一个管理员","setup.admin.username":"用户名","setup.admin.email":"邮箱","setup.admin.password":"密码","setup.admin.passwordHint":"至少 8 个字符,必须包含大写字母、小写字母和数字","setup.admin.mustContainUppercase":"密码必须包含至少一个大写字母","setup.admin.mustContainLowercase":"密码必须包含至少一个小写字母","setup.admin.mustContainDigit":"密码必须包含至少一个数字","setup.admin.passwordsNotMatch":"两次输入的密码不一致","setup.admin.confirmPassword":"确认密码","setup.admin.create":"创建管理员并进入","setup.admin.creating":"创建中...","setup.adminCreated":"管理员账户创建成功!","setup.failedToCreateAdmin":"创建管理员账户失败","setup.done.title":"一切就绪!","setup.done.desc":"您的 RaisFast 实例已准备就绪。管理员账户已存在。","setup.done.goToLogin":"前往登录","productComments.title":"商品评价","productComments.content":"内容","productComments.rating":"评分","productComments.reply":"回复","productComments.pending":"待审核","productComments.approved":"已通过","productComments.rejected":"已拒绝","productComments.approve":"通过","productComments.reject":"拒绝","productComments.replyAction":"回复","productComments.editReply":"编辑回复","productComments.replyPlaceholder":"输入回复内容...","productComments.sendReply":"发送回复","productComments.statusUpdated":"评价状态已更新","productComments.replySent":"回复已发送","productComments.failedToUpdateStatus":"更新评价状态失败","productComments.failedToReply":"回复失败","productComments.commentDeleted":"评价已删除","productComments.failedToDelete":"删除评价失败","productComments.confirmDelete":"确定要删除此评价吗?","productComments.noComments":"暂无评价","productComments.noCommentsDesc":"客户评价将显示在这里。","coupons.title":"优惠券","coupons.newCoupon":"新建优惠券","coupons.editCoupon":"编辑优惠券","coupons.code":"优惠码","coupons.type":"类型","coupons.value":"面值","coupons.percentage":"百分比折扣","coupons.fixed":"固定金额","coupons.minOrder":"最低订单金额","coupons.maxUses":"最大使用次数","coupons.usedCount":"已使用","coupons.startsAt":"开始时间","coupons.expiresAt":"过期时间","coupons.couponCreated":"优惠券已创建","coupons.couponUpdated":"优惠券已更新","coupons.couponDeleted":"优惠券已删除","coupons.failedToCreate":"创建优惠券失败","coupons.failedToUpdate":"更新优惠券失败","coupons.failedToDelete":"删除优惠券失败","coupons.confirmDelete":"确定要删除此优惠券吗?","coupons.noCoupons":"暂无优惠券","coupons.noCouponsDesc":"创建优惠券为客户提供折扣。","shippingTemplates.title":"运费模板","shippingTemplates.newTemplate":"新建模板","shippingTemplates.editTemplate":"编辑模板","shippingTemplates.type":"计费方式","shippingTemplates.byWeight":"按重量","shippingTemplates.byQuantity":"按数量","shippingTemplates.fixed":"固定运费","shippingTemplates.firstUnit":"首件/首重","shippingTemplates.firstPrice":"首费","shippingTemplates.additionalUnit":"续件/续重","shippingTemplates.additionalPrice":"续费","shippingTemplates.freeShipping":"满额包邮","shippingTemplates.regions":"地区 (JSON)","shippingTemplates.templateCreated":"运费模板已创建","shippingTemplates.templateUpdated":"运费模板已更新","shippingTemplates.templateDeleted":"运费模板已删除","shippingTemplates.failedToCreate":"创建运费模板失败","shippingTemplates.failedToUpdate":"更新运费模板失败","shippingTemplates.failedToDelete":"删除运费模板失败","shippingTemplates.confirmDelete":"确定要删除此运费模板吗?","shippingTemplates.noTemplates":"暂无运费模板","shippingTemplates.noTemplatesDesc":"创建运费模板以计算配送费用。","productVariants.title":"商品变体","productVariants.newVariant":"新建变体","productVariants.editVariant":"编辑变体","productVariants.attributes":"属性","productVariants.weight":"重量","productVariants.imageUrl":"图片","productVariants.variantCreated":"变体已创建","productVariants.variantUpdated":"变体已更新","productVariants.variantDeleted":"变体已删除","productVariants.failedToCreate":"创建变体失败","productVariants.failedToUpdate":"更新变体失败","productVariants.failedToDelete":"删除变体失败","productVariants.confirmDelete":"确定要删除此变体吗?","productVariants.noVariants":"暂无变体,添加变体以提供不同规格。","profile.title":"个人资料","profile.email":"邮箱","profile.username":"用户名","profile.avatar":"头像","profile.website":"网站","profile.bio":"简介","profile.changePassword":"修改密码","profile.currentPassword":"当前密码","profile.newPassword":"新密码","profile.confirmNewPassword":"确认新密码","profile.updated":"资料已更新","profile.failedToUpdate":"更新资料失败","profile.passwordChanged":"密码已修改","profile.failedToChangePassword":"修改密码失败","profile.allFieldsRequired":"请填写所有密码字段","profile.passwordsNotMatch":"两次输入的密码不一致","profile.passwordTooShort":"密码至少需要8个字符","plans.title":"套餐","plans.name":"名称","plans.slug":"标识","plans.dbType":"数据库类型","plans.price":"价格","plans.maxStorage":"最大存储","plans.maxUsers":"最大用户数","plans.sortOrder":"排序","plans.active":"启用","plans.createPlan":"创建套餐","plans.editPlan":"编辑套餐","plans.deletePlan":"删除套餐","plans.planCreated":"套餐已创建","plans.planUpdated":"套餐已更新","plans.planDeleted":"套餐已删除","plans.failedToCreate":"创建套餐失败","plans.failedToUpdate":"更新套餐失败","plans.failedToDelete":"删除套餐失败","plans.confirmDelete":"确定要删除套餐「{slug}」吗?","plans.confirmPassword":"确认密码","plans.confirmPasswordPlaceholder":"输入密码以确认","plans.starter":"入门版","plans.pro":"专业版","plans.business":"企业版","plans.monthly":"/月","plans.sqlite":"SQLite","plans.postgresShared":"PG 共享","plans.postgresDedicated":"PG 独享","plans.noPlans":"暂无套餐","layout.integration":"集成","layout.channels":"渠道","layout.receipts":"投递记录","layout.apiClients":"API 客户端","common.reset":"重置","common.close":"关闭","integration.newChannel":"新建渠道","integration.editChannel":"编辑渠道","integration.channelKey":"渠道键","integration.displayName":"显示名称","integration.provider":"提供方","integration.mode":"模式","integration.transport":"传输","integration.framing":"成帧","integration.endpoint":"端点","integration.verifyKind":"验证方式","integration.verifyConfig":"验证配置(JSON)","integration.credentials":"凭据(JSON)","integration.credentialsKeepHint":"留空保留已封存的凭据","integration.mapping":"字段映射(JSONPath)","integration.pullConfig":"拉取配置(JSON)","integration.streamConfig":"流式配置(JSON)","integration.targetType":"目标内容类型","integration.routeExtra":"路由扩展(JSON)","integration.redeliveryMax":"最大重投次数","integration.stack":"层栈","integration.noChannels":"暂无集成渠道","integration.noChannelsDesc":"添加渠道以接收入站 webhook、长连接与轮询数据。","integration.ownerApp":"归属应用","integration.ownerAppAll":"全部应用","integration.ownerAppNone":"平台(无应用)","integration.ownerAppHint":"留空 = 平台级渠道。填入已安装应用 id 即创建应用自有渠道。","integration.channelCreated":"渠道已创建","integration.channelUpdated":"渠道已更新","integration.channelDeleted":"渠道已删除","integration.failedToCreate":"创建失败","integration.failedToUpdate":"更新失败","integration.failedToDelete":"删除失败","integration.failedToTest":"测试失败","integration.confirmDeleteChannel":"确定删除渠道「{key}」?投递记录将保留以供审计。","integration.testMapping":"测试映射","integration.sampleBody":"样例请求报文","integration.preview":"归一化信封预览","integration.runTest":"运行","integration.hasCredentials":"凭据已封存于保险库","integration.oauthAuthorize":"去授权","integration.oauthReauthorize":"重新授权","integration.oauthAuthorized":"已授权","integration.oauthNotAuthorized":"未授权","integration.oauthStartFailed":"启动 OAuth 失败","integration.allChannels":"全部渠道","integration.allStatuses":"全部状态","integration.traceIdFilter":"按 Trace ID 过滤…","integration.noReceipts":"暂无投递记录","integration.noReceiptsDesc":"入站投递将在此展示完整链路追踪。","integration.receivedAt":"接收时间","integration.attempts":"尝试次数","integration.nextRetryAt":"下次重试","integration.noSteps":"暂无步骤记录","integration.pending":"等待中","integration.receiptInfo":"回执信息","integration.trace":"链路追踪","integration.complete":"已完成","integration.firstPass":"首遍管道","integration.asyncChain":"异步链","integration.envelopeSnapshot":"信封快照","integration.fullSteps":"完整步骤时间线","integration.egressCalls":"出站调用","integration.noEgress":"暂无出站调用","integration.noEgressDesc":"该回执触发的出站调用将在此展示。","integration.replayed":"已重放","integration.dryRunDone":"试跑完成 — 报告见链路追踪","integration.failedToReplay":"重放失败","integration.replay":"重放","integration.dryRunReplay":"试跑重放","integration.replayConfirmTitle":"重放该回执?","integration.replayConfirmDesc":"将基于信封快照重跑路由阶段(按 external_id upsert)。","integration.receiptNotFound":"回执不存在","integration.newClient":"新建 API 客户端","integration.editClient":"编辑 API 客户端","integration.clientKey":"客户端键","integration.baseUrl":"基础 URL","integration.authConfig":"认证配置(JSON)","integration.rateLimit":"限流(JSON)","integration.ops":"操作(JSON)","integration.opsCount":"操作数","integration.noClients":"暂无 API 客户端","integration.noClientsDesc":"添加声明式 API 客户端以进行出站调用。","integration.clientCreated":"API 客户端已创建","integration.clientUpdated":"API 客户端已更新","integration.clientDeleted":"API 客户端已删除","integration.confirmDeleteClient":"确定删除 API 客户端「{key}」?","integration.testCall":"测试调用","integration.selectOp":"选择操作","integration.input":"输入(JSON)","integration.result":"结果","integration.allClients":"全部客户端","integration.egressLog":"出站日志","integration.latency":"延迟","integration.createdAt":"创建时间","integration.basicInfo":"基本信息","integration.trustSection":"信任(L0)","integration.normalizeSection":"归一化(L2)","integration.routingSection":"路由与可靠性(L3/L4)","integration.presetTitle":"从预设开始","integration.presetPlaceholder":"选择一个经过实战验证的配置…","integration.presetHint":"预设会填满整个表单——之后改掉 key、密钥和目标内容类型即可。示例取自真实接入(GitHub / 飞书 / 钉钉)。","integration.presetApplied":"预设已应用——请检查并调整","integration.jsonInvalid":"JSON 无效","integration.insertExample":"插入示例","integration.presetGeneric":"通用 Webhook(无验签)","integration.presetGenericDesc":"普通 push 端点 + JSONPath 映射","integration.presetHmac":"HMAC Webhook","integration.presetHmacDesc":"push + hmac-sha256 签名校验","integration.presetGithub":"GitHub Webhook","integration.presetGithubDesc":"x-hub-signature-256,delivery GUID 幂等","integration.presetShopify":"Shopify Webhook","integration.presetShopifyDesc":"base64 HMAC,webhook-id 幂等","integration.presetDingtalk":"钉钉 Stream 机器人","integration.presetDingtalkDesc":"ws 长连接 + dispatch 成帧 + 换址握手","integration.presetFeishu":"飞书机器人(长连接)","integration.presetFeishuDesc":"ws 长连接 + pb-frame + oauth 握手","integration.presetPull":"HTTP 轮询(cursor)","integration.presetPullDesc":"pull + since_id 分页 + 断点续拉","integration.presetImap":"IMAP 邮箱(原生)","integration.presetImapDesc":"pull + imap + mime,mark-read 语义,支持 IDLE 长驻"},_C={"layout.brand":"RaisFast","layout.adminPanel":"管理パネル","layout.dashboard":"ダッシュボード","layout.content":"コンテンツ","layout.extension":"拡張機能","layout.system":"システム","layout.posts":"投稿","layout.categories":"カテゴリ","layout.tags":"タグ","layout.comments":"コメント","layout.media":"メディア","layout.contentTypes":"コンテンツタイプ","layout.users":"ユーザー","layout.plugins":"プラグイン","layout.rolesPermissions":"権限管理","layout.cron":"Cron","layout.tenants":"テナント","layout.webhooks":"Webhook","layout.apiTokens":"APIトークン","layout.workflows":"ワークフロー","layout.auditLog":"監査ログ","layout.options":"オプション","layout.tenant":"テナント","layout.clearTenant":"テナントフィルターをクリア","layout.all":"すべて","layout.accessDenied":"アクセス拒否","layout.accessDeniedMsg":"このエリアにアクセスするには、著者または管理者としてログインする必要があります。","layout.goToLogin":"ログインへ","layout.toggleTheme":"テーマ切替","layout.signOut":"ログアウト","layout.profile":"プロフィール","common.loading":"読み込み中...","common.save":"保存","common.cancel":"キャンセル","common.ok":"OK","common.create":"作成","common.creating":"作成中...","common.saving":"保存中...","common.delete":"削除","common.confirmDeleteTitle":"削除の確認","common.edit":"編集","common.content":"コンテンツ","common.remove":"削除","common.view":"表示","common.back":"戻る","common.actions":"操作","common.status":"ステータス","common.retry":"再試行","common.previous":"前へ","common.next":"次へ","common.pageOf":"{total}ページ中{page}ページ目","common.noData":"データがありません","common.all":"すべて","common.draft":"下書き","common.published":"公開済み","common.archived":"アーカイブ","common.enabled":"有効","common.disabled":"無効","common.name":"名前","common.description":"説明","common.enabledCount":"{count}件有効","common.disabledCount":"{count}件無効","common.adminOnly":"管理者のみ","common.adminOnlyMsg":"このセクションは管理者のみ管理できます。","common.backToDashboard":"ダッシュボードに戻る","common.confirmDelete":"このアイテムを削除してもよろしいですか?","common.notFound":"見つかりません","common.failedToLoad":"読み込みに失敗しました","common.selectStatus":"ステータスを選択","common.titleRequired":"タイトルは必須です","common.contentRequired":"コンテンツは必須です","common.nameRequired":"名前は必須です","common.invalidJson":"無効なJSONです","common.isRequired":"{field}は必須です","common.created":"{name}を作成しました","common.updated":"{name}を更新しました","common.deleted":"{name}を削除しました","common.failedToCreate":"{name}の作成に失敗しました","common.failedToUpdate":"{name}の更新に失敗しました","common.failedToDelete":"{name}の削除に失敗しました","common.none":"なし","common.noDependencies":"依存関係はありません","dashboard.title":"ダッシュボード","dashboard.posts":"投稿","dashboard.comments":"コメント","dashboard.categories":"カテゴリ","dashboard.tags":"タグ","dashboard.media":"メディア","dashboard.users":"ユーザー","dashboard.contentTypes":"コンテンツタイプ","dashboard.postsLast14Days":"投稿(過去14日間)","dashboard.ordersAndProducts14Days":"注文と商品(過去14日間)","dashboard.viewAll":"すべて表示","dashboard.failedToLoad":"ダッシュボードの読み込みに失敗しました。データが古い可能性があります。","dashboard.noDataYet":"まだデータがありません。","dashboard.recentActivity":"最近のアクティビティ","dashboard.noActivity":"まだアクティビティがありません。","dashboard.type":"タイプ","dashboard.detail":"詳細","dashboard.time":"時間","dashboard.post":"投稿","dashboard.comment":"コメント","dashboard.product":"商品","dashboard.order":"注文","dashboard.products":"商品","dashboard.orders":"注文","dashboard.revenue":"売上","dashboard.coupons":"クーポン","dashboard.orderStatus":"注文ステータス","dashboard.justNow":"たった今","dashboard.minutesAgo":"分前","dashboard.hoursAgo":"時間前","dashboard.daysAgo":"日前","posts.title":"投稿","posts.newPost":"新規投稿","posts.editPost":"投稿を編集","posts.postTitle":"投稿タイトル","posts.titleCol":"タイトル","posts.categoryCol":"カテゴリ","posts.authorCol":"著者","posts.createdCol":"作成日","posts.allStatus":"すべてのステータス","posts.searchPlaceholder":"記事を検索...","posts.content":"コンテンツ","posts.excerpt":"抜粋","posts.briefSummary":"簡単な要約(任意)","posts.coverImage":"カバー画像","posts.writeContent":"Markdownで投稿内容を入力...","posts.selectCategory":"カテゴリを選択","posts.tags":"タグ","posts.slug":"Slug","posts.slugPlaceholder":"空欄の場合はタイトルから自動生成","posts.noTags":"利用可能なタグがありません","posts.addTag":"タグを追加...","posts.createTag":"作成","posts.createPost":"投稿を作成","posts.saveChanges":"変更を保存","posts.postCreated":"投稿を作成しました","posts.postUpdated":"投稿を更新しました","posts.postDeleted":"投稿を削除しました","posts.failedToCreate":"投稿の作成に失敗しました","posts.failedToUpdate":"投稿の更新に失敗しました","posts.failedToDelete":"投稿の削除に失敗しました","posts.confirmDelete":"この投稿を削除してもよろしいですか?","posts.confirmBatchDelete":"{count}件の投稿を削除しますか?","posts.batchPublish":"公開","posts.batchUnpublish":"非公開","posts.batchSuccess":"{count}件の投稿を更新しました","posts.noPosts":"投稿が見つかりません。","posts.noPostsDesc":"最初のブログ投稿を作成してアイデアを共有しましょう。","posts.failedToLoad":"投稿の読み込みに失敗しました。","categories.title":"カテゴリ","categories.newCategory":"新規カテゴリ","categories.createCategory":"投稿を整理するための新しいカテゴリを作成します。","categories.categoryName":"カテゴリ名","categories.optionalDesc":"説明(任意)","categories.sortOrder":"並び順","categories.slug":"Slug","categories.categoryCreated":"カテゴリを作成しました","categories.categoryUpdated":"カテゴリを更新しました","categories.categoryDeleted":"カテゴリを削除しました","categories.failedToCreate":"カテゴリの作成に失敗しました","categories.failedToUpdate":"カテゴリの更新に失敗しました","categories.failedToDelete":"カテゴリの削除に失敗しました","categories.confirmDelete":"このカテゴリを削除してもよろしいですか?","categories.confirmDeleteTitle":"カテゴリーを削除","categories.noCategories":"カテゴリなし","categories.noCategoriesDesc":"カテゴリを使って投稿を整理しましょう。","categories.treeTitle":"カテゴリー","categories.selectCategory":"カテゴリーを選択して詳細を表示","categories.addChild":"サブ追加","categories.parent":"親カテゴリ","categories.noParent":"親なし","categories.editCategory":"カテゴリを編集","categories.cannotDeleteHasChildren":"このカテゴリーには {count} つのサブカテゴリーがあるため削除できません。先に移動または削除してください。","categories.coverImage":"カバー画像","tags.title":"タグ","tags.newTag":"新規タグ","tags.createTag":"投稿用の新しいタグを作成します。","tags.tagName":"タグ名","tags.tagCreated":"タグを作成しました","tags.tagUpdated":"タグを更新しました","tags.tagDeleted":"タグを削除しました","tags.failedToCreate":"タグの作成に失敗しました","tags.failedToUpdate":"タグの更新に失敗しました","tags.failedToDelete":"タグの削除に失敗しました","tags.confirmDelete":"このタグを削除してもよろしいですか?","tags.noTags":"タグが見つかりません。","tags.noTagsDesc":"タグを追加してコンテンツを整理・フィルタリングしましょう。","comments.title":"コメント","comments.total":"合計{count}件","comments.all":"すべて","comments.pending":"承認待ち","comments.approved":"承認済み","comments.rejected":"却下","comments.spam":"スパム","comments.approve":"承認","comments.reject":"却下","comments.author":"投稿者","comments.contentCol":"コンテンツ","comments.post":"投稿","comments.date":"日付","comments.selected":"{count}件選択中","comments.commentStatusUpdated":"コメントのステータスを更新しました","comments.commentDeleted":"コメントを削除しました","comments.bulkActionDone":"{count}件のコメントを{status}にしました","comments.bulkDeleted":"{count}件のコメントを削除しました","comments.bulkActionFailed":"一括操作に失敗しました","comments.bulkDeleteFailed":"一括削除に失敗しました","comments.failedToUpdateStatus":"ステータスの更新に失敗しました","comments.failedToDelete":"コメントの削除に失敗しました","comments.confirmDelete":"このコメントを削除してもよろしいですか?","comments.confirmBulkDelete":"選択した{count}件のコメントを削除しますか?","comments.noComments":"コメントが見つかりません。","comments.noCommentsDesc":"読者が反応し始めると、コメントがここに表示されます。","contentTypes.title":"コンテンツタイプ","contentTypes.noFields":"このコンテンツタイプには編集可能なフィールドがありません。","contentTypes.createContentType":"コンテンツタイプを作成","contentTypes.builder":"ビルダー","contentTypes.noContentTypes":"コンテンツタイプがまだありません","contentTypes.noContentTypesDesc":"最初のコンテンツタイプを作成してCMSを構築しましょう。","contentTypes.contentTypeDeleted":"コンテンツタイプを削除しました","contentTypes.failedToDelete":"削除に失敗しました","contentTypes.confirmDelete":"コンテンツタイプ「{singular}」を削除しますか?スキーマファイルは削除されますが、データベーステーブルは削除されません。","contentTypes.notFound":"コンテンツタイプが見つかりません","contentTypes.notFoundMsg":"コンテンツタイプ「{singular}」が見つかりません。","contentTypes.itemDeleted":"アイテムを削除しました","contentTypes.failedToDeleteItem":"アイテムの削除に失敗しました","contentTypes.confirmDeleteItem":"このアイテムを削除してもよろしいですか?","contentTypes.batchDeleteSuccess":"{count} 件を削除しました","contentTypes.confirmBatchDelete":"{count} 件を削除してもよろしいですか?","contentTypes.export":"エクスポート","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} 件をエクスポートしました","contentTypes.import":"インポート","contentTypes.importJson":"JSON をインポート","contentTypes.importCsv":"CSV をインポート","contentTypes.importExcel":"Excel をインポート","contentTypes.importSuccess":"{count} 件をインポートしました","contentTypes.importPartial":"{ok} 件成功、{failed} 件失敗","contentTypes.importEmpty":"ファイルにインポート可能なレコードがありません","contentTypes.importTooMany":"レコード数が上限を超えています(最大 {max})","contentTypes.importFailed":"インポートに失敗しました","contentTypes.importTooLarge":"ファイルが 8MB の上限を超えています","contentTypes.noItems":"アイテムが見つかりません。","contentTypes.noItemsDesc":"最初のアイテムを作成してこのコレクションに追加しましょう。","contentTypes.newItem":"新規{name}","contentTypes.editItem":"{name}を編集","contentTypes.itemNotFound":"アイテムが見つかりません。","contentTypes.fields":"{count}フィールド","contentTypes.fieldsLabel":"フィールド","contentTypes.totalRecords":"{count} 件","contentTypes.createdAt":"作成日時","contentTypes.updatedAt":"更新日時","users.title":"ユーザー","users.newUser":"新規ユーザー","users.createUser":"ユーザーを作成","users.registerNew":"新しいユーザーアカウントを登録します。","users.username":"ユーザー名","users.email":"メールアドレス","users.password":"パスワード","users.minChars":"8文字以上、大文字・小文字・数字をそれぞれ含めてください","users.role":"権限","users.joined":"登録日","users.editRole":"ユーザー権限を編集","users.editUser":"ユーザー編集","users.changeRoleFor":"{username}({email})の権限を変更","users.reader":"読者","users.author":"著者","users.admin":"管理者","users.active":"アクティブ","users.suspended":"停止","users.banned":"禁止","users.newPassword":"新しいパスワード","users.userCreated":"ユーザーを作成しました","users.userUpdated":"ユーザーを更新しました","users.userRoleUpdated":"ユーザー権限を更新しました","users.failedToCreate":"ユーザーの作成に失敗しました","users.failedToUpdate":"ユーザーの更新に失敗しました","users.noUsers":"ユーザーが見つかりません。","users.noUsersDesc":"ユーザーを招待して権限を管理しましょう。","users.registeredVia":"登録経路","users.userDeleted":"ユーザーを削除しました","users.failedToDelete":"ユーザーの削除に失敗しました","users.confirmDeleteUser":'ユーザー "{username}" を削除しますか?この操作は取り消せません。',"webhooks.title":"Webhook","webhooks.newWebhook":"新規Webhook","webhooks.createWebhook":"イベント通知を受け取るための新しいWebhookサブスクリプションを作成します。","webhooks.callbackUrl":"コールバックURL","webhooks.eventsComma":"イベント(カンマ区切り)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"* を使用するとすべてのイベントを購読します","webhooks.descriptionOptional":"説明(任意)","webhooks.urlCol":"URL","webhooks.events":"イベント","webhooks.webhookCreated":"Webhookを作成しました","webhooks.webhookUpdated":"Webhookを更新しました","webhooks.webhookDeleted":"Webhookを削除しました","webhooks.failedToCreate":"Webhookの作成に失敗しました","webhooks.failedToUpdate":"Webhookの更新に失敗しました","webhooks.failedToDelete":"Webhookの削除に失敗しました","webhooks.confirmDelete":"このWebhookサブスクリプションを削除しますか?","webhooks.noWebhooks":"Webhookが見つかりません。","webhooks.noWebhooksDesc":"Webhookを設定してリアルタイムのイベント通知を受け取りましょう。","tokens.title":"APIトークン","tokens.newToken":"新規トークン","tokens.createToken":"APIトークンを作成","tokens.createTokenDesc":"新しいパーソナルアクセストークンを生成します。トークン値は一度だけ表示されます。","tokens.scopesComma":"スコープ(カンマ区切り)","tokens.expiresOptional":"有効期限(任意)","tokens.tokenCreated":"トークンを作成しました","tokens.tokenRevoked":"トークンを無効化しました","tokens.failedToCreate":"トークンの作成に失敗しました","tokens.failedToRevoke":"トークンの無効化に失敗しました","tokens.confirmRevoke":"トークン「{name}」を無効化しますか?この操作は取り消せません。","tokens.tokenCopied":"トークンをクリップボードにコピーしました","tokens.tokenCreatedCopy":"トークンを作成しました — 今すぐコピーしてください!","tokens.copied":"コピーしました","tokens.copy":"コピー","tokens.dismiss":"閉じる","tokens.notShownAgain":"このトークンは二度と表示されません。安全に保管してください。","tokens.scopesCol":"スコープ","tokens.expiresCol":"有効期限","tokens.lastUsed":"最終使用","tokens.never":"未使用","tokens.noTokens":"APIトークンが見つかりません。作成して始めましょう。","tokens.noTokensDesc":"プログラムからのアクセス用にAPIトークンを作成しましょう。","tokens.description":"説明","workflows.title":"ワークフロー","workflows.instances":"インスタンス","workflows.visualEditor":"ビジュアルエディタ","workflows.newWorkflow":"新規ワークフロー","workflows.createWorkflow":"ワークフローを作成","workflows.createWorkflowDesc":"ステップ付きの新しいワークフローを定義します。ステップはJSONで設定します。","workflows.stepsJson":"ステップ(JSON)","workflows.stepFormat":'各ステップ: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"ワークフローを作成しました","workflows.workflowDeleted":"ワークフローを削除しました","workflows.failedToCreate":"ワークフローの作成に失敗しました","workflows.failedToDelete":"ワークフローの削除に失敗しました","workflows.confirmDelete":"ワークフロー「{name}」を削除しますか?","workflows.noWorkflows":"ワークフローが見つかりません。作成して始めましょう。","workflows.noWorkflowsDesc":"ワークフローを定義してコンテンツパイプラインを自動化しましょう。","workflows.steps":"{count}ステップ","workflows.workflowStarted":"ワークフローを開始しました","workflows.editor.title":"ワークフローエディタ","workflows.editor.newWorkflow":"新規ワークフロー","workflows.editor.stepName":"ステップ名","workflows.editor.branchesJson":"ブランチ(JSON配列)","workflows.editor.connectEdges":"このノードからエッジを接続してブランチを定義してください。","workflows.editor.configJson":"設定(JSON)","workflows.editor.apply":"適用","workflows.editor.deleteStep":"ステップを削除","workflows.editor.addStep":"ステップを追加","workflows.editor.invalidJson":"設定のJSONが無効です","workflows.editor.workflowSaved":"ワークフローを保存しました","workflows.editor.failedToSave":"ワークフローの保存に失敗しました","audit.title":"監査ログ","audit.clearFilters":"フィルターをクリア","audit.noLogs":"監査ログエントリが見つかりません。","audit.action":"アクション","audit.actor":"実行者","audit.resource":"リソース","audit.timestamp":"タイムスタンプ","options.title":"オプション","options.saved":"オプションを保存しました","options.failedToSave":"オプションの保存に失敗しました","plugins.title":"プラグイン","plugins.loaded":"{count}件読み込み済み","plugins.plugin":"プラグイン","plugins.runtime":"ランタイム","plugins.hooks":"フック","plugins.health":"ヘルス","plugins.pluginEnabled":"プラグインを有効にしました","plugins.pluginDisabled":"プラグインを無効にしました","plugins.pluginReloaded":"プラグインをリロードしました","plugins.pluginRemoved":"プラグインを削除しました","plugins.failedToEnable":"プラグインの有効化に失敗しました","plugins.failedToDisable":"プラグインの無効化に失敗しました","plugins.failedToReload":"プラグインのリロードに失敗しました","plugins.failedToRemove":"プラグインの削除に失敗しました","plugins.noPlugins":"読み込まれたプラグインがありません。","plugins.placePlugins":"設定されたプラグインディレクトリにプラグインを配置してください。","plugins.confirmRemove":"プラグイン「{name}」を削除しますか?メモリからアンロードされます。","plugins.autoDisabled":"自動無効化","plugins.tooManyErrors":"エラーが多すぎます","plugins.errorCount":"{count}件のエラー","plugins.errorsOccurred":"エラーが発生しました","plugins.calls":"{count}回呼び出し","plugins.idle":"アイドル","plugins.notFound":"プラグインが見つかりません","plugins.notFoundMsg":"プラグインが見つかりません。","plugins.backToPlugins":"プラグイン一覧に戻る","plugins.general":"一般","plugins.version":"バージョン","plugins.reload":"リロード","plugins.remove":"削除","plugins.errorTracking":"エラートラッキングと自動無効化ステータス","plugins.healthy":"正常","plugins.errorCountLabel":"エラー数","plugins.lastError":"最新のエラー","plugins.lastErrorAt":"最新エラー日時","plugins.autoDisabledLabel":"自動無効化","plugins.permissions":"権限","permissions.declaredFromManifest":"プラグインマニフェストで宣言された権限","plugins.hooksTitle":"フック","plugins.hooksDesc":"登録されたフックポイントとその実行メトリクス","plugins.noHooks":"フックが登録されていません。","plugins.totalCalls":"合計呼び出し","plugins.totalErrors":"合計エラー","plugins.totalDuration":"合計所要時間","plugins.noMetrics":"メトリクスがまだありません","plugins.performance":"パフォーマンス概要","plugins.maxMemory":"最大メモリ","plugins.timeout":"タイムアウト","plugins.default":"デフォルト","media.title":"メディア","media.files":"{count}ファイル","media.searchFiles":"ファイルを検索...","media.fileDeleted":"ファイルを削除しました","media.failedToDelete":"ファイルの削除に失敗しました","media.confirmDelete":"このファイルを削除してもよろしいですか?","media.date":"日付","media.size":"サイズ","media.ascending":"昇順","media.descending":"降順","field.mediaUrl":"メディアURL","field.startWriting":"入力を開始...","field.yes":"はい","field.no":"いいえ","field.relatedItemId":"関連アイテムID","cron.title":"Cronジョブ","cron.newCron":"新規Cronジョブ","cron.expression":"式","cron.handler":"ハンドラー","cron.lastRun":"最終実行","cron.nextRun":"次回実行","cron.cronCreated":"Cronジョブを作成しました","cron.cronDeleted":"Cronジョブを削除しました","cron.failedToCreate":"Cronジョブの作成に失敗しました","cron.failedToDelete":"Cronジョブの削除に失敗しました","cron.noCrons":"Cronジョブが見つかりません。","cron.confirmDelete":"Cronジョブ「{name}」を削除しますか?","tenants.title":"テナント","tenants.newTenant":"新規テナント","tenants.createTenant":"マルチテナント分離用の新しいテナントを作成します。","tenants.tenantName":"テナント名","tenants.slug":"Slug","tenants.domain":"ドメイン","tenants.owner":"オーナー","tenants.tenantCreated":"テナントを作成しました","tenants.tenantUpdated":"テナントを更新しました","tenants.tenantDeleted":"テナントを削除しました","tenants.failedToCreate":"テナントの作成に失敗しました","tenants.failedToUpdate":"テナントの更新に失敗しました","tenants.failedToDelete":"テナントの削除に失敗しました","tenants.confirmDelete":"このテナントを削除してもよろしいですか?","tenants.noTenants":"テナントが見つかりません。","tenants.noTenantsDesc":"マルチテナントSaaS用にテナントを作成しましょう。","rbac.title":"権限管理","rbac.roles":"ロール","rbac.newRole":"新規ロール","rbac.createRole":"アクセス制御用の新しいロールを作成します。","rbac.roleName":"ロール名","rbac.roleDesc":"ロールの説明","rbac.roleCreated":"ロールを作成しました","rbac.roleUpdated":"ロールを更新しました","rbac.roleDeleted":"ロールを削除しました","rbac.failedToCreate":"ロールの作成に失敗しました","rbac.failedToUpdate":"ロールの更新に失敗しました","rbac.failedToDelete":"ロールの削除に失敗しました","rbac.confirmDelete":"ロール「{name}」を削除しますか?関連するすべての権限が削除されます。","rbac.systemRole":"システム","rbac.permissions":"権限","rbac.addPermission":"権限を追加","rbac.action":"アクション","rbac.subject":"サブジェクト","rbac.noRoles":"ロールが見つかりません。","builder.title":"コンテンツタイプビルダー","builder.editContentType":"コンテンツタイプを編集","builder.createContentType":"コンテンツタイプを作成","builder.baseConfig":"基本設定","builder.singularName":"単数名","builder.pluralName":"複数名","builder.tableName":"テーブル名","builder.fieldsSection":"フィールド","builder.addField":"フィールドを追加","builder.preview":"プレビュー","builder.save":"コンテンツタイプを保存","builder.saving":"保存中...","builder.saved":"コンテンツタイプを保存しました","builder.failedToSave":"コンテンツタイプの保存に失敗しました","builder.confirmDeleteField":"フィールド「{name}」を削除しますか?","builder.text":"テキスト","builder.richText":"リッチテキスト","builder.email":"メール","builder.password":"パスワード","builder.uid":"UID","builder.integer":"整数","builder.bigInt":"Big Int","builder.decimal":"小数","builder.float":"浮動小数点","builder.boolean":"真偽値","builder.date":"日付","builder.datetime":"日時","builder.time":"時刻","builder.enumType":"列挙型","builder.jsonType":"JSON","builder.relation":"リレーション","builder.mediaType":"メディア","builder.link":"リンク","builder.required":"必須","builder.unique":"ユニーク","builder.privateField":"非公開","builder.immutable":"不変","builder.label":"ラベル","builder.defaultValue":"デフォルト値","builder.maxLength":"最大長","builder.minValue":"最小値","builder.maxValue":"最大値","builder.enumValues":"列挙値(カンマ区切り)","builder.relationType":"リレーションタイプ","builder.relationTarget":"対象テーブル","builder.foreignKey":"外部キー","builder.throughTable":"中間テーブル","builder.draftPublish":"下書き/公開","builder.timestamps":"タイムスタンプ","builder.softDelete":"論理削除","builder.slugField":"Slugフィールド","media.name":"名前","media.type":"タイプ","media.other":"その他","media.uploadFailed":"アップロードに失敗しました","media.dropFiles":"ファイルをドロップ、貼り付け、または{browse}","media.uploading":"{count}ファイルをアップロード中...","media.done":"完了","media.failedUpload":"失敗","media.urlCopied":"URLをコピーしました","media.copyUrl":"URLをコピー","media.download":"ダウンロード","media.dimensions":"寸法","media.uploaded":"アップロード済み","media.urlLabel":"URL","media.noVideoSupport":"お使いのブラウザは動画再生に対応していません。","media.downloadFile":"ファイルをダウンロード","workflows.instances.title":"ワークフローインスタンス","workflows.instances.showLogs":"ログを表示","workflows.instances.hideLogs":"ログを非表示","workflows.instances.currentStep":"現在","workflows.instances.context":"コンテキスト","workflows.instances.stepLogs":"ステップログ({count})","workflows.instances.noStepLogs":"ステップログがありません。","workflows.instances.noInstances":"ワークフローインスタンスが見つかりません。","workflows.instances.instanceCount":"{count}インスタンス","workflows.instances.definitions":"定義","workflows.instances.filterStatus":"ステータスで絞り込み","workflows.instances.cancelled":"インスタンスをキャンセルしました","workflows.editor.editStep":"ステップを編集","workflows.editor.name":"名前","workflows.editor.type":"タイプ","workflows.editor.backToList":"一覧に戻る","workflows.editor.workflowName":"ワークフロー名...","workflows.editor.failedToLoad":"ワークフローの読み込みに失敗しました","workflows.editor.immutableNotice":"ワークフロー定義は不変です。ステップを変更するには新しく作成してください。","workflows.editor.untitled":"無題のワークフロー","workflows.editor.save":"保存","workflows.editor.saving":"保存中...","cron.createSchedule":"Cronスケジュールを作成","cron.labelField":"ラベル","cron.jobType":"ジョブタイプ","cron.cronExpression":"Cron式(7セグメント)","cron.format":"形式: 秒 分 時 日 月 曜日","cron.payload":"ペイロード(JSON、任意)","cron.schedules":"{count}スケジュール","cron.schedule":"スケジュール","cron.pluginCol":"プラグイン","cron.scheduleCreated":"スケジュールを作成しました","cron.scheduleToggled":"スケジュールを切り替えました","cron.scheduleDeleted":"スケジュールを削除しました","cron.scheduleUpdated":"スケジュールを更新しました","cron.noCronSchedules":"Cronスケジュールがありません。","cron.seedHint":"上で作成するか、CRON_SEED_ENABLEDを有効にしてデフォルトをシードしてください。","cron.confirmDeleteSchedule":"スケジュール「{name}」を削除しますか?この操作は取り消せません。","cron.scheduleNotFound":"スケジュールが見つかりません","cron.backToCronSchedules":"Cronスケジュール一覧に戻る","cron.scheduleDetails":"スケジュール詳細","cron.cronExpression7":"7セグメント: 秒 分 時 日 月 曜日","cron.builtIn":"組み込み","cron.executionHistory":"実行履歴","cron.recentLogs":"このスケジュールの最近の実行ログ","cron.cleanupOld":"古いログを削除","cron.cleanedUp":"{count}件の古いログを削除しました","cron.noExecutionLogs":"実行ログがまだありません。","cron.success":"成功","cron.failedStatus":"失敗","cron.running":"実行中","cron.newSchedule":"新規スケジュール","cron.idField":"ID","cron.started":"開始","cron.finished":"完了","cron.duration":"所要時間","cron.error":"エラー","cron.created":"作成日","cron.updated":"更新日","tenants.createForIsolation":"データ分離用の新しいテナントを作成します。","tenants.cannotDeleteDefault":"デフォルトテナントは削除できません","tenants.confirmDeleteMsg":"このテナントを削除しますか?このテナントに属するデータは削除されません。","tenants.created":"作成日","rbac.addRoleDesc":"システムに新しいロールを追加します。","rbac.updateRoleDesc":"「{name}」ロールを更新します。","rbac.deleteRoleTitle":"ロールを削除","rbac.deleteRoleConfirm":"「{name}」を削除してもよろしいですか?この操作は取り消せません。","rbac.addPermissionTitle":"権限を追加","rbac.addPermissionDesc":"「{name}」に新しい権限を付与します。* でワイルドカードを使用できます。","rbac.fieldsCol":"フィールド","rbac.conditionsCol":"条件","rbac.fieldsOptional":"フィールド(カンマ区切り、任意)","rbac.removePermissionTitle":"権限を削除","rbac.removePermissionDesc":"{subject}に対する{action}を削除しますか?","rbac.noPermissions":"権限が設定されていません。","rbac.selectRole":"ロールを選択して権限を表示","rbac.prev":"前へ","options.noChanges":"変更はありません","options.noOptions":"利用可能なオプションがありません。","options.reset":"リセット","options.saveChanges":"変更を保存","audit.failedToLoad":"監査ログの読み込みに失敗しました。もう一度お試しください。","audit.noEntries":"監査エントリが見つかりません。","audit.noEntriesDesc":"アクションが実行されると監査エントリが表示されます。","audit.timeCol":"時間","audit.subjectId":"サブジェクトID","audit.detailCol":"詳細","audit.system":"システム","audit.from":"開始","audit.to":"終了","audit.search":"検索","audit.clear":"クリア","audit.today":"今日","builder.untitled":"無題のコンテンツタイプ","builder.fieldCount":"{count}フィールド","builder.fieldList":"フィールド一覧","builder.protocols":"プロトコル","builder.systemFields":"システムフィールド","builder.system":"システム","builder.newField":"新規フィールド","builder.addAnotherField":"別のフィールドを追加","builder.addAField":"フィールドを追加","builder.chooseFieldType":"コンテンツタイプに追加するフィールドタイプを選択してください。","builder.fieldConfiguration":"フィールド設定","builder.fieldName":"フィールド名","builder.fieldTypeLabel":"フィールドタイプ","builder.displayLabel":"表示ラベル","builder.helpText":"ヘルプテキスト","builder.removeField":"フィールドを削除","builder.removeFieldConfirm":"このフィールドを削除しますか?","builder.noAdditionalOptions":"このフィールドタイプに追加のオプションはありません。","builder.acceptedTypes":"許可タイプ","builder.maxCount":"最大数","builder.target":"対象","builder.valuesComma":"値(カンマ区切り)","builder.describeContentType":"このコンテンツタイプの説明...","builder.contentTypeUpdated":"コンテンツタイプを更新しました","builder.contentTypeCreated":"コンテンツタイプを作成しました","builder.newFieldCategory":"数値","layout.crm":"CRM","layout.pages":"ページ","layout.reusableBlocks":"ブロック","crm.dashboard":"CRMダッシュボード","crm.pipeline":"パイプライン","crm.contacts":"連絡先","crm.companies":"企業","crm.deals":"案件","crm.activities":"活動","crm.notes":"メモ","crm.reports":"レポート","crm.totalCompanies":"企業総数","crm.totalContacts":"連絡先総数","crm.openDeals":"進行中の案件","crm.wonDeals":"受注済み","crm.pipelineValue":"パイプライン価値","crm.weightedValue":"加重値","crm.winRate":"受注率","crm.avgDealSize":"平均案件規模","crm.recentActivities":"今週の活動","crm.totalActivities":"活動総数","crm.leaderboard":"リーダーボード","crm.noData":"データがありません。","crm.newDeal":"新規案件","crm.createDeal":"案件を作成","crm.dealTitle":"タイトル","crm.dealTitlePlaceholder":"案件タイトルを入力...","crm.amount":"金額","crm.probability":"確率","crm.stage":"ステージ","crm.advanceStage":"次のステージに進む","crm.totalValue":"合計金額","crm.dealCreated":"案件を作成しました","crm.failedToCreateDeal":"案件の作成に失敗しました","crm.dealStageUpdated":"案件ステージを更新しました","crm.failedToUpdateStage":"ステージの更新に失敗しました","crm.titleRequired":"タイトルは必須です","crm.newContact":"新規連絡先","crm.editContact":"連絡先を編集","crm.contact":"連絡先","crm.name":"名前","crm.email":"メールアドレス","crm.phone":"電話番号","crm.company":"企業","crm.source":"来源","crm.lifecycleStage":"ライフサイクルステージ","crm.noContacts":"連絡先が見つかりません。","crm.firstName":"名","crm.lastName":"姓","crm.jobTitle":"役職","crm.newCompany":"新規企業","crm.editCompany":"企業を編集","crm.companyName":"企業名","crm.industry":"業界","crm.size":"規模","crm.website":"ウェブサイト","crm.city":"都市","crm.country":"国","crm.noCompanies":"企業が見つかりません。","crm.deal":"案件","crm.editDeal":"案件を編集","crm.closeDate":"クローズ予定日","crm.lossReason":"失注理由","crm.noDeals":"案件が見つかりません。","crm.dealInfo":"案件情報","crm.newActivity":"新規活動","crm.editActivity":"活動を編集","crm.activity":"活動","crm.type":"タイプ","crm.subject":"件名","crm.content":"内容","crm.date":"日付","crm.duration":"所要時間","crm.outcome":"結果","crm.noActivities":"活動が見つかりません。","crm.newNote":"新規メモ","crm.editNote":"メモを編集","crm.note":"メモ","crm.relatedTo":"関連先","crm.pinned":"ピン留め","crm.createdAt":"作成日","crm.noNotes":"メモが見つかりません。","crm.contentRequired":"内容は必須です","crm.relatedContactId":"関連連絡先ID","crm.relatedCompanyId":"関連企業ID","crm.relatedDealId":"関連案件ID","crm.contactInfo":"連絡先情報","crm.timeline":"タイムライン","crm.noTimeline":"タイムラインイベントがありません。","crm.addNote":"メモを追加","crm.notePlaceholder":"メモを入力...","crm.lifecycleUpdated":"ライフサイクルステージを更新しました","crm.failedToUpdateLifecycle":"ライフサイクルステージの更新に失敗しました","crm.companyInfo":"企業情報","crm.funnelReport":"ファネルレポート","crm.activityReport":"活動レポート","crm.conversionRate":"コンバージョン率","crm.byType":"タイプ別","crm.byOutcome":"結果別","pages.title":"ページ","pages.newPage":"新規ページ","pages.editPage":"ページを編集","pages.pageDeleted":"ページを削除しました","pages.pageCreated":"ページを作成しました","pages.pageUpdated":"ページを更新しました","pages.failedToDelete":"ページの削除に失敗しました","pages.failedToCreate":"ページの作成に失敗しました","pages.failedToUpdate":"ページの更新に失敗しました","pages.statusUpdated":"ページステータスを更新しました","pages.failedToUpdateStatus":"ステータスの更新に失敗しました","pages.confirmDelete":"このページを削除してもよろしいですか?","pages.noPages":"ページが見つかりません。","pages.noPagesDesc":"最初のページを作成してサイト構築を始めましょう。","pages.noBlocks":"再利用可能なブロックがまだありません。","pages.noBlocksDesc":"ページ間で使い回せる再利用可能なブロックを作成しましょう。","pages.publish":"公開","pages.unpublish":"非公開","pages.preview":"プレビュー","pages.slug":"Slug","pages.template":"テンプレート","pages.createdAt":"作成日","pages.basicInfo":"基本情報","pages.titleLabel":"タイトル","pages.titlePlaceholder":"ページタイトルを入力...","pages.coverImage":"カバー画像","pages.metaTitle":"メタタイトル","pages.metaDescription":"メタディスクリプション","pages.ogImage":"OG画像","pages.content":"コンテンツ","pages.blockMode":"ブロック","pages.saveDraft":"下書きを保存","pages.writeContent":"ページ内容を入力...","pages.addBlock":"ブロックを追加","pages.chooseBlock":"ブロックタイプを選択","pages.reusableBlocks":"再利用可能なブロック","pages.createReusable":"再利用可能なブロックを作成","pages.editReusable":"再利用可能なブロックを編集","pages.rbName":"名前","pages.rbType":"ブロックタイプ","pages.rbDescription":"説明","pages.rbContent":"コンテンツ","command.search":"検索...","command.placeholder":"コマンドを入力または検索...","command.noResults":"結果が見つかりません。","command.actions":"アクション","command.switchToLight":"ライトモードに切替","command.switchToDark":"ダークモードに切替","layout.ecommerce":"EC","layout.products":"商品","layout.productCategories":"商品カテゴリ","layout.orders":"注文","layout.finance":"財務","layout.currencies":"通貨","layout.wallets":"ウォレット","layout.paymentChannels":"決済チャネル","layout.productComments":"レビュー","layout.coupons":"クーポン","layout.shippingTemplates":"配送テンプレート","products.title":"商品","products.newProduct":"新規商品","products.editProduct":"商品を編集","products.productTitle":"商品名","products.price":"価格","products.originalPrice":"通常価格","products.stock":"在庫","products.sales":"販売数","products.coverUrl":"カバーURL","products.description":"説明","products.content":"コンテンツ","products.slug":"Slug","products.status":"ステータス","products.category":"カテゴリ","products.unit":"単位","products.minPurchase":"最小購入数","products.maxPurchase":"最大購入数","products.sortOrder":"並び順","products.metaTitle":"メタタイトル","products.metaDescription":"メタディスクリプション","products.productCreated":"商品を作成しました","products.productUpdated":"商品を更新しました","products.productDeleted":"商品を削除しました","products.batchDeleted":"{{count}}件の商品を削除しました","products.batchSuccess":"{{count}}件の商品を更新しました","products.batchActivate":"公開","products.batchDeactivate":"非公開","products.failedToCreate":"商品の作成に失敗しました","products.failedToUpdate":"商品の更新に失敗しました","products.failedToDelete":"商品の削除に失敗しました","products.confirmDelete":"この商品を削除してもよろしいですか?","products.confirmBatchDelete":"{{count}}件の商品を削除してもよろしいですか?","products.noProducts":"商品がまだありません","products.noProductsDesc":"最初の商品を作成して販売を始めましょう。","products.allStatus":"すべてのステータス","products.searchPlaceholder":"商品名で検索...","products.active":"販売中","products.draft":"下書き","products.archived":"アーカイブ","products.general":"基本情報","products.media":"メディア","products.pricing":"価格設定","products.purchaseSettings":"購入設定","products.summary":"概要","products.phTitle":"商品名を入力...","products.phSummary":"商品の簡単な説明...","products.images":"商品画像","products.cover":"表紙","products.dropImages":"画像をドロップ、貼り付け、またはクリックしてアップロード","productCategories.categoryName":"カテゴリ名","productCategories.newCategory":"新規カテゴリ","productCategories.createCategory":"カテゴリを作成","productCategories.editCategory":"カテゴリを編集","productCategories.optionalDesc":"説明(任意)","productCategories.parent":"親カテゴリ","productCategories.noParent":"親なし","productCategories.sortOrder":"並び順","productCategories.slug":"スラッグ","productCategories.noCategories":"カテゴリなし","productCategories.noCategoriesDesc":"最初の商品カテゴリを作成して商品を整理しましょう。","productCategories.categoryCreated":"カテゴリを作成しました","productCategories.categoryUpdated":"カテゴリを更新しました","productCategories.categoryDeleted":"カテゴリを削除しました","productCategories.failedToCreate":"カテゴリの作成に失敗しました","productCategories.failedToUpdate":"カテゴリの更新に失敗しました","productCategories.failedToDelete":"カテゴリの削除に失敗しました","productCategories.confirmDelete":"このカテゴリを削除しますか?","productCategories.confirmDeleteTitle":"カテゴリーを削除","productCategories.cannotDeleteHasChildren":"このカテゴリーには {count} つのサブカテゴリーがあるため削除できません。先に移動または削除してください。","productCategories.treeTitle":"カテゴリー","productCategories.selectCategory":"カテゴリーを選択して詳細を表示","productCategories.addChild":"サブ追加","orders.title":"注文","orders.orderNo":"注文番号","orders.buyer":"購入者","orders.total":"合計","orders.status":"ステータス","orders.items":"商品","orders.remark":"備考","orders.adminRemark":"管理者備考","orders.createdAt":"作成日","orders.actions":"操作","orders.allStatus":"すべてのステータス","orders.searchPlaceholder":"注文番号、購入者名で検索...","orders.pending":"未払い","orders.paid":"支払済み","orders.shipped":"発送済み","orders.completed":"完了","orders.cancelled":"キャンセル","orders.refunded":"返金済み","orders.confirmPay":"支払を確認しますか?","orders.orderPaid":"注文を支払済みにしました","orders.confirmShip":"この注文を発送しますか?","orders.orderShipped":"注文を発送しました","orders.confirmCancel":"この注文をキャンセルしますか?","orders.orderCancelled":"注文をキャンセルしました","orders.confirmRefund":"この注文を返金しますか?","orders.orderRefunded":"注文を返金しました","orders.failedToPay":"支払済みマークに失敗しました","orders.failedToShip":"発送に失敗しました","orders.failedToCancel":"キャンセルに失敗しました","orders.failedToRefund":"返金に失敗しました","orders.noOrders":"注文がまだありません","orders.noOrdersDesc":"顧客が購入すると、注文がここに表示されます。","orders.trackingNo":"追跡番号","orders.carrier":"配送業者","orders.shipInfo":"配送情報","orders.buyerInfo":"購入者情報","orders.shippingAddress":"配送先住所","orders.orderDetail":"注文詳細","orders.stats.totalOrders":"注文総数","orders.stats.totalRevenue":"総売上","orders.stats.pending":"未払い","orders.stats.completed":"完了","orders.stats.todayOrders":"今日の注文","orders.stats.todayRevenue":"今日の売上","payments.title":"決済チャネル","payments.newChannel":"新規チャネル","payments.provider":"プロバイダー","payments.name":"チャネル名","payments.mode":"モード","payments.active":"有効","payments.live":"本番","payments.test":"テスト","payments.credentials":"認証情報","payments.webhookSecret":"Webhookシークレット","payments.settings":"設定","payments.channelCreated":"決済チャネルを作成しました","payments.channelUpdated":"決済チャネルを更新しました","payments.channelDeleted":"決済チャネルを削除しました","payments.failedToCreate":"決済チャネルの作成に失敗しました","payments.failedToUpdate":"決済チャネルの更新に失敗しました","payments.failedToDelete":"決済チャネルの削除に失敗しました","payments.confirmDelete":"この決済チャネルを削除しますか?","payments.noChannels":"決済チャネルがありません","payments.noChannelsDesc":"決済チャネルを追加して支払いの受け付けを始めましょう。","payments.selectProvider":"プロバイダーを選択...","payments.testMode":"テストモード(サンドボックス)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"マーチャントID","payments.fPrivateKey":"RSA 秘密鍵","payments.fSerialNo":"証明書シリアル番号","payments.fWebhookSecret":"Webhook 署名シークレット","payments.fAlipayPublicKey":"Alipay 公開鍵","payments.fPlatformCert":"プラットフォーム証明書 (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"通知 URL","payments.phSk":"sk_live_... または sk_test_...","payments.phRsaKey":"RSA 秘密鍵を貼り付け(PEM または Base64)","payments.phUrl":"https://...","payments.editChannel":"チャンネル編集","payments.leaveBlankToKeep":"空白で現在の値を維持","layout.paymentOrders":"決済注文","paymentOrders.title":"決済注文","paymentOrders.orderId":"注文","paymentOrders.title_col":"タイトル","paymentOrders.amount":"金額","paymentOrders.provider":"プロバイダー","paymentOrders.noOrders":"決済注文がありません","paymentOrders.noOrdersDesc":"顧客が支払いを行うと、ここに表示されます。","paymentOrders.refund":"返金","paymentOrders.refundTitle":"返金","paymentOrders.refundOrder":"返金注文","paymentOrders.refundAmount":"返金額","paymentOrders.refundReason":"理由","paymentOrders.refundSuccess":"返金を送信しました","paymentOrders.refundFailed":"返金に失敗しました","layout.paymentTransactions":"決済トランザクション","paymentTransactions.title":"決済トランザクション","paymentTransactions.orderId":"注文","paymentTransactions.type":"タイプ","paymentTransactions.amount":"金額","paymentTransactions.providerTxId":"プロバイダー取引ID","paymentTransactions.noTransactions":"トランザクションがありません","paymentTransactions.noTransactionsDesc":"決済イベントが発生すると、ここに表示されます。","currencies.title":"通貨","currencies.newCurrency":"新規通貨","currencies.code":"コード","currencies.name":"名前","currencies.decimals":"小数桁","currencies.active":"有効","currencies.currencyCreated":"通貨を作成しました","currencies.currencyUpdated":"通貨を更新しました","currencies.failedToCreate":"通貨の作成に失敗しました","currencies.failedToUpdate":"通貨の更新に失敗しました","currencies.noCurrencies":"通貨がありません","currencies.noCurrenciesDesc":"通貨を追加してマルチ通貨対応を有効にしましょう。","wallets.title":"ウォレット","wallets.user":"ユーザー","wallets.currency":"通貨","wallets.balance":"残高","wallets.frozen":"凍結","wallets.credit":"入金","wallets.debit":"出金","wallets.transactions":"取引履歴","wallets.amount":"金額","wallets.type":"タイプ","wallets.reference":"参照","wallets.creditTitle":"ウォレットに入金","wallets.debitTitle":"ウォレットから出金","wallets.userId":"ユーザーID","wallets.remark":"備考","wallets.creditSuccess":"ウォレットに入金しました","wallets.debitSuccess":"ウォレットから出金しました","wallets.failedToCredit":"ウォレットへの入金に失敗しました","wallets.failedToDebit":"ウォレットからの出金に失敗しました","wallets.noWallets":"ウォレットがありません","wallets.noWalletsDesc":"ユーザーが最初の取引を行うとウォレットが作成されます。","wallets.noTransactions":"取引履歴がまだありません。","adminLogin.title":"管理パネル","adminLogin.subtitle":"管理者の認証情報でサインインしてください","adminLogin.email":"メールアドレス","adminLogin.password":"パスワード","adminLogin.submit":"サインイン","adminLogin.loading":"サインイン中…","adminLogin.error":"メールアドレスまたはパスワードが正しくありません","adminLogin.footer":"RaisFast Admin — 承認された担当者のみ","adminLogin.sessionExpired":"セッションの有効期限が切れました。再度サインインしてください。","setup.title":"セットアップウィザード","setup.subtitle":"RaisFastインスタンスを準備しましょう","setup.failedToFetch":"システム状態の取得に失敗しました","setup.step.check":"確認","setup.step.database":"データベース","setup.step.admin":"管理者","setup.check.title":"システムチェック","setup.check.desc":"環境が準備できているか確認しています","setup.check.database":"データベース","setup.check.connected":"接続済み","setup.check.disconnected":"未接続","setup.check.storage":"ファイルストレージ","setup.check.extensions":"拡張ディレクトリ","setup.check.writable":"書き込み可能","setup.check.notWritable":"書き込み不可","setup.check.adminUser":"管理者ユーザー","setup.check.adminExists":"存在します","setup.check.adminNeeded":"未作成","setup.check.next":"次へ:データベース設定","setup.check.nextAdmin":"次へ:管理者を作成","setup.database.title":"データベース設定","setup.database.desc":"データベースに接続します","setup.database.path":"データベースファイルパス","setup.database.pathHint":"作業ディレクトリからの相対パス","setup.database.connectionString":"接続文字列","setup.database.manualInput":"手動入力","setup.database.url":"データベースURL","setup.database.urlHint":"プロバイダーから提供された接続URLを貼り付けてください(Supabase、Neonなど)","setup.database.host":"ホスト","setup.database.port":"ポート","setup.database.username":"ユーザー名","setup.database.password":"パスワード","setup.database.name":"データベース名","setup.database.testConnection":"接続テスト","setup.database.testing":"テスト中...","setup.database.testSuccess":"接続成功!","setup.database.testFailed":"接続失敗","setup.database.saveAndRestart":"保存して再起動","setup.database.saving":"保存中...","setup.database.connectionError":"接続エラー","setup.database.failedToSave":"データベース設定の保存に失敗しました","setup.restarting.title":"再起動中...","setup.restarting.desc":"新しいデータベース設定でサーバーを再起動しています。お待ちください。","setup.admin.title":"管理者アカウントの作成","setup.admin.desc":"インスタンスの最初の管理者を設定します","setup.admin.username":"ユーザー名","setup.admin.email":"メール","setup.admin.password":"パスワード","setup.admin.passwordHint":"8文字以上、大文字・小文字・数字をすべて含めてください","setup.admin.confirmPassword":"パスワード確認","setup.admin.create":"管理者を作成してログイン","setup.admin.creating":"作成中...","setup.adminCreated":"管理者アカウントが作成されました!","setup.failedToCreateAdmin":"管理者アカウントの作成に失敗しました","setup.done.title":"完了!","setup.done.desc":"RaisFastインスタンスの準備が整いました。管理者アカウントは既に存在します。","setup.done.goToLogin":"ログインへ","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"連携","layout.channels":"チャネル","layout.receipts":"受信記録","layout.apiClients":"API クライアント","common.reset":"リセット","common.close":"閉じる","integration.newChannel":"チャネルを作成","integration.editChannel":"チャネルを編集","integration.channelKey":"チャネルキー","integration.displayName":"表示名","integration.provider":"プロバイダー","integration.mode":"モード","integration.transport":"トランスポート","integration.framing":"フレーミング","integration.endpoint":"エンドポイント","integration.verifyKind":"検証方式","integration.verifyConfig":"検証設定(JSON)","integration.credentials":"認証情報(JSON)","integration.credentialsKeepHint":"空欄で密封済み認証情報を保持","integration.mapping":"マッピング(JSONPath)","integration.pullConfig":"プル設定(JSON)","integration.streamConfig":"ストリーム設定(JSON)","integration.targetType":"ターゲットコンテンツタイプ","integration.routeExtra":"ルート拡張(JSON)","integration.redeliveryMax":"最大再配送回数","integration.stack":"スタック","integration.noChannels":"連携チャネルがありません","integration.noChannelsDesc":"チャネルを追加すると受信 webhook・ストリーム・ポーリングを開始できます。","integration.channelCreated":"チャネルを作成しました","integration.channelUpdated":"チャネルを更新しました","integration.channelDeleted":"チャネルを削除しました","integration.failedToCreate":"作成に失敗しました","integration.failedToUpdate":"更新に失敗しました","integration.failedToDelete":"削除に失敗しました","integration.failedToTest":"テストに失敗しました","integration.confirmDeleteChannel":"チャネル「{key}」を削除しますか?受信記録は監査用に保持されます。","integration.testMapping":"マッピングをテスト","integration.sampleBody":"サンプルリクエスト本文","integration.preview":"正規化エンベローププレビュー","integration.runTest":"実行","integration.hasCredentials":"認証情報はボールトに密封済み","integration.allChannels":"すべてのチャネル","integration.allStatuses":"すべてのステータス","integration.traceIdFilter":"Trace ID で絞り込み…","integration.noReceipts":"受信記録がありません","integration.noReceiptsDesc":"受信配送はここに完全なトレース付きで表示されます。","integration.receivedAt":"受信日時","integration.attempts":"試行回数","integration.nextRetryAt":"次回リトライ","integration.noSteps":"ステップ記録なし","integration.pending":"待機中","integration.receiptInfo":"レシート","integration.trace":"トレース","integration.complete":"完了","integration.firstPass":"初回パイプライン","integration.asyncChain":"非同期チェーン","integration.envelopeSnapshot":"エンベロープスナップショット","integration.fullSteps":"ステップタイムライン全体","integration.egressCalls":"送信呼び出し","integration.noEgress":"送信呼び出しなし","integration.noEgressDesc":"このレシートがトリガーした送信呼び出しがここに表示されます。","integration.replayed":"リプレイしました","integration.dryRunDone":"ドライラン完了 — レポートはトレースで確認","integration.failedToReplay":"リプレイに失敗しました","integration.replay":"リプレイ","integration.dryRunReplay":"ドライランリプレイ","integration.replayConfirmTitle":"このレシートをリプレイしますか?","integration.replayConfirmDesc":"保存済みエンベロープスナップショットからルート段階を再実行します(external_id で upsert)。","integration.receiptNotFound":"レシートが見つかりません","integration.newClient":"API クライアントを作成","integration.editClient":"API クライアントを編集","integration.clientKey":"クライアントキー","integration.baseUrl":"ベース URL","integration.authConfig":"認証設定(JSON)","integration.rateLimit":"レート制限(JSON)","integration.ops":"操作(JSON)","integration.opsCount":"操作数","integration.noClients":"API クライアントがありません","integration.noClientsDesc":"宣言型 API クライアントを追加して外部 API を送信呼び出しします。","integration.clientCreated":"API クライアントを作成しました","integration.clientUpdated":"API クライアントを更新しました","integration.clientDeleted":"API クライアントを削除しました","integration.confirmDeleteClient":"API クライアント「{key}」を削除しますか?","integration.testCall":"テスト呼び出し","integration.selectOp":"操作を選択","integration.input":"入力(JSON)","integration.result":"結果","integration.allClients":"すべてのクライアント","integration.egressLog":"送信ログ","integration.latency":"レイテンシ","integration.createdAt":"作成日時","integration.basicInfo":"基本情報","integration.trustSection":"トラスト(L0)","integration.normalizeSection":"正規化(L2)","integration.routingSection":"ルーティングと信頼性(L3/L4)","integration.presetTitle":"プリセットから開始","integration.presetPlaceholder":"実戦検証済みの構成を選択…","integration.presetHint":"フォーム全体を自動入力します。キー・シークレット・ターゲットCTは後で調整してください。実例(GitHub / Feishu / DingTalk)ベース。","integration.presetApplied":"プリセット適用済み — 確認して調整してください","integration.jsonInvalid":"JSON が無効です","integration.insertExample":"例を挿入","integration.presetGeneric":"汎用 Webhook(検証なし)","integration.presetGenericDesc":"シンプルな push + JSONPath マッピング","integration.presetHmac":"HMAC Webhook","integration.presetHmacDesc":"push + hmac-sha256 署名検証","integration.presetGithub":"GitHub Webhook","integration.presetGithubDesc":"x-hub-signature-256、delivery GUID 冪等","integration.presetShopify":"Shopify Webhook","integration.presetShopifyDesc":"base64 HMAC、webhook-id 冪等","integration.presetDingtalk":"DingTalk Stream ボット","integration.presetDingtalkDesc":"ws ストリーム + dispatch フレーミング + pre_connect","integration.presetFeishu":"Feishu ボット(長接続)","integration.presetFeishuDesc":"ws ストリーム + pb-frame + oauth ハンドシェイク","integration.presetPull":"HTTP ポーリング(cursor)","integration.presetPullDesc":"pull + since_id ページング + チェックポイント","integration.presetImap":"IMAP メールボックス(ネイティブ)","integration.presetImapDesc":"pull + imap + mime、mark-read セマンティクス、IDLE 対応"},zC={"layout.brand":"RaisFast","layout.adminPanel":"관리자 패널","layout.dashboard":"대시보드","layout.content":"콘텐츠","layout.extension":"확장","layout.system":"시스템","layout.posts":"게시물","layout.categories":"카테고리","layout.tags":"태그","layout.comments":"댓글","layout.media":"미디어","layout.contentTypes":"콘텐츠 유형","layout.users":"사용자","layout.plugins":"플러그인","layout.rolesPermissions":"역할 및 권한","layout.cron":"Cron","layout.tenants":"테넌트","layout.webhooks":"Webhook","layout.apiTokens":"API 토큰","layout.workflows":"워크플로우","layout.auditLog":"감사 로그","layout.options":"옵션","layout.tenant":"테넌트","layout.clearTenant":"테넌트 필터 초기화","layout.all":"전체","layout.accessDenied":"접근 거부","layout.accessDeniedMsg":"작성자 또는 관리자로 로그인해야 이 영역에 접근할 수 있습니다.","layout.goToLogin":"로그인으로 이동","layout.toggleTheme":"테마 전환","layout.signOut":"로그아웃","layout.profile":"프로필","common.loading":"로딩 중...","common.save":"저장","common.cancel":"취소","common.ok":"확인","common.create":"만들기","common.creating":"생성 중...","common.saving":"저장 중...","common.delete":"삭제","common.confirmDeleteTitle":"삭제 확인","common.edit":"수정","common.content":"콘텐츠","common.remove":"제거","common.view":"보기","common.back":"뒤로","common.actions":"작업","common.status":"상태","common.retry":"재시도","common.previous":"이전","common.next":"다음","common.pageOf":"{total}페이지 중 {page}페이지","common.noData":"데이터 없음","common.all":"전체","common.draft":"임시저장","common.published":"게시됨","common.archived":"보관됨","common.enabled":"활성화","common.disabled":"비활성화","common.name":"이름","common.description":"설명","common.enabledCount":"{count}개 활성화","common.disabledCount":"{count}개 비활성화","common.adminOnly":"관리자 전용","common.adminOnlyMsg":"관리자만 이 섹션을 관리할 수 있습니다.","common.backToDashboard":"대시보드로 돌아가기","common.confirmDelete":"이 항목을 삭제하시겠습니까?","common.notFound":"찾을 수 없음","common.failedToLoad":"로딩 실패","common.selectStatus":"상태 선택","common.titleRequired":"제목은 필수입니다","common.contentRequired":"내용은 필수입니다","common.nameRequired":"이름은 필수입니다","common.invalidJson":"잘못된 JSON 형식입니다","common.isRequired":"{field}은(는) 필수입니다","common.created":"{name}이(가) 생성되었습니다","common.updated":"{name}이(가) 수정되었습니다","common.deleted":"{name}이(가) 삭제되었습니다","common.failedToCreate":"{name} 생성에 실패했습니다","common.failedToUpdate":"{name} 수정에 실패했습니다","common.failedToDelete":"{name} 삭제에 실패했습니다","common.none":"없음","common.noDependencies":"종속성 없음","dashboard.title":"대시보드","dashboard.posts":"게시물","dashboard.comments":"댓글","dashboard.categories":"카테고리","dashboard.tags":"태그","dashboard.media":"미디어","dashboard.users":"사용자","dashboard.contentTypes":"콘텐츠 유형","dashboard.postsLast14Days":"게시물 (최근 14일)","dashboard.ordersAndProducts14Days":"주문 및 상품 (최근 14일)","dashboard.viewAll":"전체 보기","dashboard.failedToLoad":"대시보드 통계를 불러오지 못했습니다. 데이터가 최신이 아닐 수 있습니다.","dashboard.noDataYet":"아직 데이터가 없습니다.","dashboard.recentActivity":"최근 활동","dashboard.noActivity":"아직 활동이 없습니다.","dashboard.type":"유형","dashboard.detail":"상세","dashboard.time":"시간","dashboard.post":"게시물","dashboard.comment":"댓글","dashboard.product":"상품","dashboard.order":"주문","dashboard.products":"상품","dashboard.orders":"주문","dashboard.revenue":"수익","dashboard.coupons":"쿠폰","dashboard.orderStatus":"주문 상태","dashboard.justNow":"방금","dashboard.minutesAgo":"분 전","dashboard.hoursAgo":"시간 전","dashboard.daysAgo":"일 전","posts.title":"게시물","posts.newPost":"새 게시물","posts.editPost":"게시물 수정","posts.postTitle":"게시물 제목","posts.titleCol":"제목","posts.categoryCol":"카테고리","posts.authorCol":"작성자","posts.createdCol":"작성일","posts.allStatus":"전체 상태","posts.searchPlaceholder":"게시물 검색...","posts.content":"내용","posts.excerpt":"요약","posts.briefSummary":"간단한 요약 (선택)","posts.coverImage":"커버 이미지","posts.writeContent":"Markdown으로 게시물 내용을 작성하세요...","posts.selectCategory":"카테고리 선택","posts.tags":"태그","posts.slug":"Slug","posts.slugPlaceholder":"비어있으면 제목에서 자동 생성","posts.noTags":"사용 가능한 태그가 없습니다","posts.addTag":"태그 추가...","posts.createTag":"생성","posts.createPost":"게시물 만들기","posts.saveChanges":"변경사항 저장","posts.postCreated":"게시물이 생성되었습니다","posts.postUpdated":"게시물이 수정되었습니다","posts.postDeleted":"게시물이 삭제되었습니다","posts.failedToCreate":"게시물 생성에 실패했습니다","posts.failedToUpdate":"게시물 수정에 실패했습니다","posts.failedToDelete":"게시물 삭제에 실패했습니다","posts.confirmDelete":"이 게시물을 삭제하시겠습니까?","posts.confirmBatchDelete":"{count}개의 게시물을 삭제하시겠습니까?","posts.batchPublish":"게시","posts.batchUnpublish":"게시 취소","posts.batchSuccess":"{count}개의 게시물이 업데이트됨","posts.noPosts":"게시물이 없습니다.","posts.noPostsDesc":"첫 번째 블로그 게시물을 작성하여 아이디어를 공유하세요.","posts.failedToLoad":"게시물을 불러오지 못했습니다.","categories.title":"카테고리","categories.newCategory":"새 카테고리","categories.createCategory":"게시물 정리를 위한 새 카테고리를 만드세요.","categories.categoryName":"카테고리 이름","categories.optionalDesc":"설명 (선택)","categories.sortOrder":"정렬 순서","categories.slug":"Slug","categories.categoryCreated":"카테고리가 생성되었습니다","categories.categoryUpdated":"카테고리가 수정되었습니다","categories.categoryDeleted":"카테고리가 삭제되었습니다","categories.failedToCreate":"카테고리 생성에 실패했습니다","categories.failedToUpdate":"카테고리 수정에 실패했습니다","categories.failedToDelete":"카테고리 삭제에 실패했습니다","categories.confirmDelete":"이 카테고리를 삭제하시겠습니까?","categories.confirmDeleteTitle":"카테고리 삭제","categories.noCategories":"카테고리 없음","categories.noCategoriesDesc":"카테고리로 게시물을 정리하세요.","categories.treeTitle":"카테고리","categories.selectCategory":"카테고리를 선택하여 상세 보기","categories.addChild":"하위 추가","categories.parent":"상위 카테고리","categories.noParent":"상위 없음","categories.editCategory":"카테고리 편집","categories.cannotDeleteHasChildren":"이 카테고리에는 {count}개의 하위 카테고리가 있어 삭제할 수 없습니다. 먼저 이동하거나 삭제해 주세요.","categories.coverImage":"표지 이미지","tags.title":"태그","tags.newTag":"새 태그","tags.createTag":"게시물을 위한 새 태그를 만드세요.","tags.tagName":"태그 이름","tags.tagCreated":"태그가 생성되었습니다","tags.tagUpdated":"태그가 수정되었습니다","tags.tagDeleted":"태그가 삭제되었습니다","tags.failedToCreate":"태그 생성에 실패했습니다","tags.failedToUpdate":"태그 수정에 실패했습니다","tags.failedToDelete":"태그 삭제에 실패했습니다","tags.confirmDelete":"이 태그를 삭제하시겠습니까?","tags.noTags":"태그가 없습니다.","tags.noTagsDesc":"태그를 추가하여 콘텐츠를 정리하고 필터링하세요.","comments.title":"댓글","comments.total":"총 {count}개","comments.all":"전체","comments.pending":"대기 중","comments.approved":"승인됨","comments.rejected":"거부됨","comments.spam":"스팸","comments.approve":"승인","comments.reject":"거부","comments.author":"작성자","comments.contentCol":"내용","comments.post":"게시물","comments.date":"날짜","comments.selected":"{count}개 선택됨","comments.commentStatusUpdated":"댓글 상태가 변경되었습니다","comments.commentDeleted":"댓글이 삭제되었습니다","comments.bulkActionDone":"{count}개의 댓글이 {status} 처리되었습니다","comments.bulkDeleted":"{count}개의 댓글이 삭제되었습니다","comments.bulkActionFailed":"일괄 작업에 실패했습니다","comments.bulkDeleteFailed":"일괄 삭제에 실패했습니다","comments.failedToUpdateStatus":"상태 변경에 실패했습니다","comments.failedToDelete":"댓글 삭제에 실패했습니다","comments.confirmDelete":"이 댓글을 삭제하시겠습니까?","comments.confirmBulkDelete":"선택한 {count}개의 댓글을 삭제하시겠습니까?","comments.noComments":"댓글이 없습니다.","comments.noCommentsDesc":"독자가 참여하기 시작하면 댓글이 여기에 표시됩니다.","contentTypes.title":"콘텐츠 유형","contentTypes.noFields":"이 콘텐츠 유형에 편집 가능한 필드가 없습니다.","contentTypes.createContentType":"콘텐츠 유형 만들기","contentTypes.builder":"빌더","contentTypes.noContentTypes":"콘텐츠 유형이 아직 없습니다","contentTypes.noContentTypesDesc":"첫 번째 콘텐츠 유형을 만들어 CMS 구축을 시작하세요.","contentTypes.contentTypeDeleted":"콘텐츠 유형이 삭제되었습니다","contentTypes.failedToDelete":"삭제에 실패했습니다","contentTypes.confirmDelete":'콘텐츠 유형 "{singular}"을(를) 삭제하시겠습니까? 스키마 파일은 삭제되지만 데이터베이스 테이블은 유지됩니다.',"contentTypes.notFound":"콘텐츠 유형을 찾을 수 없음","contentTypes.notFoundMsg":'콘텐츠 유형 "{singular}"을(를) 찾을 수 없습니다.',"contentTypes.itemDeleted":"항목이 삭제되었습니다","contentTypes.failedToDeleteItem":"항목 삭제에 실패했습니다","contentTypes.confirmDeleteItem":"이 항목을 삭제하시겠습니까?","contentTypes.batchDeleteSuccess":"{count}개 항목을 삭제했습니다","contentTypes.confirmBatchDelete":"{count}개 항목을 삭제하시겠습니까?","contentTypes.export":"내보내기","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count}개 항목을 내보냈습니다","contentTypes.import":"가져오기","contentTypes.importJson":"JSON 가져오기","contentTypes.importCsv":"CSV 가져오기","contentTypes.importExcel":"Excel 가져오기","contentTypes.importSuccess":"{count}개 레코드를 가져왔습니다","contentTypes.importPartial":"{ok}개 성공, {failed}개 실패","contentTypes.importEmpty":"파일에 가져올 레코드가 없습니다","contentTypes.importTooMany":"레코드 수가 한도를 초과했습니다(최대 {max})","contentTypes.importFailed":"가져오기 실패","contentTypes.importTooLarge":"파일이 8MB 제한을 초과했습니다","contentTypes.noItems":"항목이 없습니다.","contentTypes.noItemsDesc":"첫 번째 항목을 만들어 이 컬렉션을 채우세요.","contentTypes.newItem":"새 {name}","contentTypes.editItem":"{name} 수정","contentTypes.itemNotFound":"항목을 찾을 수 없습니다.","contentTypes.fields":"{count}개 필드","contentTypes.fieldsLabel":"필드","contentTypes.totalRecords":"{count}개 레코드","contentTypes.createdAt":"생성 시간","contentTypes.updatedAt":"수정 시간","users.title":"사용자","users.newUser":"새 사용자","users.createUser":"사용자 만들기","users.registerNew":"새 사용자 계정을 등록하세요.","users.username":"사용자 이름","users.email":"이메일","users.password":"비밀번호","users.minChars":"최소 8자, 대문자·소문자·숫자를 모두 포함해야 합니다","users.role":"역할","users.joined":"가입일","users.editRole":"사용자 역할 수정","users.editUser":"사용자 편집","users.changeRoleFor":"{username} ({email})의 역할 변경","users.reader":"독자","users.author":"작성자","users.admin":"관리자","users.active":"활성","users.suspended":"정지","users.banned":"차단","users.newPassword":"새 비밀번호","users.userCreated":"사용자가 생성되었습니다","users.userUpdated":"사용자 업데이트됨","users.userRoleUpdated":"사용자 역할이 변경되었습니다","users.failedToCreate":"사용자 생성에 실패했습니다","users.failedToUpdate":"사용자 수정에 실패했습니다","users.noUsers":"사용자가 없습니다.","users.noUsersDesc":"사용자를 초대하고 역할을 관리하세요.","users.registeredVia":"가입 경로","users.userDeleted":"사용자 삭제됨","users.failedToDelete":"사용자 삭제 실패","users.confirmDeleteUser":'사용자 "{username}"을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.',"webhooks.title":"Webhook","webhooks.newWebhook":"새 Webhook","webhooks.createWebhook":"이벤트 알림을 받기 위한 새 Webhook 구독을 만드세요.","webhooks.callbackUrl":"콜백 URL","webhooks.eventsComma":"이벤트 (쉼표로 구분)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"*를 사용하여 모든 이벤트를 구독하세요","webhooks.descriptionOptional":"설명 (선택)","webhooks.urlCol":"URL","webhooks.events":"이벤트","webhooks.webhookCreated":"Webhook이 생성되었습니다","webhooks.webhookUpdated":"Webhook이 수정되었습니다","webhooks.webhookDeleted":"Webhook이 삭제되었습니다","webhooks.failedToCreate":"Webhook 생성에 실패했습니다","webhooks.failedToUpdate":"Webhook 수정에 실패했습니다","webhooks.failedToDelete":"Webhook 삭제에 실패했습니다","webhooks.confirmDelete":"이 Webhook 구독을 삭제하시겠습니까?","webhooks.noWebhooks":"Webhook이 없습니다.","webhooks.noWebhooksDesc":"실시간 이벤트 알림을 받으려면 Webhook을 설정하세요.","tokens.title":"API 토큰","tokens.newToken":"새 토큰","tokens.createToken":"API 토큰 만들기","tokens.createTokenDesc":"새 개인 액세스 토큰을 생성합니다. 토큰 값은 한 번만 표시됩니다.","tokens.scopesComma":"스코프 (쉼표로 구분)","tokens.expiresOptional":"만료일 (선택)","tokens.tokenCreated":"토큰이 생성되었습니다","tokens.tokenRevoked":"토큰이 폐기되었습니다","tokens.failedToCreate":"토큰 생성에 실패했습니다","tokens.failedToRevoke":"토큰 폐기에 실패했습니다","tokens.confirmRevoke":'토큰 "{name}"을(를) 폐기하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"tokens.tokenCopied":"토큰이 클립보드에 복사되었습니다","tokens.tokenCreatedCopy":"토큰 생성됨 — 지금 복사하세요!","tokens.copied":"복사됨","tokens.copy":"복사","tokens.dismiss":"닫기","tokens.notShownAgain":"이 토큰은 다시 표시되지 않습니다. 안전하게 보관하세요.","tokens.scopesCol":"스코프","tokens.expiresCol":"만료","tokens.lastUsed":"마지막 사용","tokens.never":"없음","tokens.noTokens":"API 토큰이 없습니다. 시작하려면 하나 만드세요.","tokens.noTokensDesc":"프로그래밍 방식 액세스를 위한 API 토큰을 만드세요.","tokens.description":"설명","workflows.title":"워크플로우","workflows.instances":"인스턴스","workflows.visualEditor":"시각 편집기","workflows.newWorkflow":"새 워크플로우","workflows.createWorkflow":"워크플로우 만들기","workflows.createWorkflowDesc":"단계가 있는 새 워크플로우를 정의합니다. 단계는 JSON으로 구성됩니다.","workflows.stepsJson":"단계 (JSON)","workflows.stepFormat":'각 단계: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"워크플로우가 생성되었습니다","workflows.workflowDeleted":"워크플로우가 삭제되었습니다","workflows.failedToCreate":"워크플로우 생성에 실패했습니다","workflows.failedToDelete":"워크플로우 삭제에 실패했습니다","workflows.confirmDelete":'워크플로우 "{name}"을(를) 삭제하시겠습니까?',"workflows.noWorkflows":"워크플로우가 없습니다. 시작하려면 하나 만드세요.","workflows.noWorkflowsDesc":"콘텐츠 파이프라인을 자동화하는 워크플로우를 정의하세요.","workflows.steps":"{count}단계","workflows.workflowStarted":"워크플로우가 시작되었습니다","workflows.editor.title":"워크플로우 편집기","workflows.editor.newWorkflow":"새 워크플로우","workflows.editor.stepName":"단계 이름","workflows.editor.branchesJson":"분기 (JSON 배열)","workflows.editor.connectEdges":"분기를 정의하려면 이 노드에서 간선을 연결하세요.","workflows.editor.configJson":"설정 (JSON)","workflows.editor.apply":"적용","workflows.editor.deleteStep":"단계 삭제","workflows.editor.addStep":"단계 추가","workflows.editor.invalidJson":"설정에 잘못된 JSON 형식이 있습니다","workflows.editor.workflowSaved":"워크플로우가 저장되었습니다","workflows.editor.failedToSave":"워크플로우 저장에 실패했습니다","audit.title":"감사 로그","audit.clearFilters":"필터 초기화","audit.noLogs":"감사 로그 항목이 없습니다.","audit.action":"작업","audit.actor":"실행자","audit.resource":"리소스","audit.timestamp":"시간","options.title":"옵션","options.saved":"옵션이 저장되었습니다","options.failedToSave":"옵션 저장에 실패했습니다","plugins.title":"플러그인","plugins.loaded":"{count}개 로드됨","plugins.plugin":"플러그인","plugins.runtime":"런타임","plugins.hooks":"훅","plugins.health":"상태","plugins.pluginEnabled":"플러그인이 활성화되었습니다","plugins.pluginDisabled":"플러그인이 비활성화되었습니다","plugins.pluginReloaded":"플러그인이 새로고침되었습니다","plugins.pluginRemoved":"플러그인이 제거되었습니다","plugins.failedToEnable":"플러그인 활성화에 실패했습니다","plugins.failedToDisable":"플러그인 비활성화에 실패했습니다","plugins.failedToReload":"플러그인 새로고침에 실패했습니다","plugins.failedToRemove":"플러그인 제거에 실패했습니다","plugins.noPlugins":"로드된 플러그인이 없습니다.","plugins.placePlugins":"설정된 플러그인 디렉터리에 플러그인을 배치하세요.","plugins.confirmRemove":'플러그인 "{name}"을(를) 제거하시겠습니까? 메모리에서 언로드됩니다.',"plugins.autoDisabled":"자동 비활성화됨","plugins.tooManyErrors":"오류가 너무 많습니다","plugins.errorCount":"{count}개 오류","plugins.errorsOccurred":"오류가 발생했습니다","plugins.calls":"{count}회 호출","plugins.idle":"대기 중","plugins.notFound":"플러그인을 찾을 수 없음","plugins.notFoundMsg":"플러그인을 찾을 수 없습니다.","plugins.backToPlugins":"플러그인 목록으로","plugins.general":"일반","plugins.version":"버전","plugins.reload":"새로고침","plugins.remove":"제거","plugins.errorTracking":"오류 추적 및 자동 비활성화 상태","plugins.healthy":"정상","plugins.errorCountLabel":"오류 수","plugins.lastError":"마지막 오류","plugins.lastErrorAt":"마지막 오류 발생 시간","plugins.autoDisabledLabel":"자동 비활성화","plugins.permissions":"권한","permissions.declaredFromManifest":"플러그인 매니페스트에 선언된 권한","plugins.hooksTitle":"훅","plugins.hooksDesc":"등록된 훅 지점과 실행 메트릭","plugins.noHooks":"등록된 훅이 없습니다.","plugins.totalCalls":"총 호출","plugins.totalErrors":"총 오류","plugins.totalDuration":"총 소요 시간","plugins.noMetrics":"아직 메트릭이 없습니다","plugins.performance":"성능 개요","plugins.maxMemory":"최대 메모리","plugins.timeout":"시간 초과","plugins.default":"기본값","media.title":"미디어","media.files":"{count}개 파일","media.searchFiles":"파일 검색...","media.fileDeleted":"파일이 삭제되었습니다","media.failedToDelete":"파일 삭제에 실패했습니다","media.confirmDelete":"이 파일을 삭제하시겠습니까?","media.date":"날짜","media.size":"크기","media.ascending":"오름차순","media.descending":"내림차순","field.mediaUrl":"미디어 URL","field.startWriting":"작성을 시작하세요...","field.yes":"예","field.no":"아니요","field.relatedItemId":"관련 항목 ID","cron.title":"Cron 작업","cron.newCron":"새 Cron 작업","cron.expression":"표현식","cron.handler":"핸들러","cron.lastRun":"마지막 실행","cron.nextRun":"다음 실행","cron.cronCreated":"Cron 작업이 생성되었습니다","cron.cronDeleted":"Cron 작업이 삭제되었습니다","cron.failedToCreate":"Cron 작업 생성에 실패했습니다","cron.failedToDelete":"Cron 작업 삭제에 실패했습니다","cron.noCrons":"Cron 작업이 없습니다.","cron.confirmDelete":'Cron 작업 "{name}"을(를) 삭제하시겠습니까?',"tenants.title":"테넌트","tenants.newTenant":"새 테넌트","tenants.createTenant":"멀티 테넌트 격리를 위한 새 테넌트를 만드세요.","tenants.tenantName":"테넌트 이름","tenants.slug":"Slug","tenants.domain":"도메인","tenants.owner":"소유자","tenants.tenantCreated":"테넌트가 생성되었습니다","tenants.tenantUpdated":"테넌트가 수정되었습니다","tenants.tenantDeleted":"테넌트가 삭제되었습니다","tenants.failedToCreate":"테넌트 생성에 실패했습니다","tenants.failedToUpdate":"테넌트 수정에 실패했습니다","tenants.failedToDelete":"테넌트 삭제에 실패했습니다","tenants.confirmDelete":"이 테넌트를 삭제하시겠습니까?","tenants.noTenants":"테넌트가 없습니다.","tenants.noTenantsDesc":"멀티 테넌트 SaaS를 위해 테넌트를 만드세요.","rbac.title":"역할 및 권한","rbac.roles":"역할","rbac.newRole":"새 역할","rbac.createRole":"접근 제어를 위한 새 역할을 만드세요.","rbac.roleName":"역할 이름","rbac.roleDesc":"역할 설명","rbac.roleCreated":"역할이 생성되었습니다","rbac.roleUpdated":"역할이 수정되었습니다","rbac.roleDeleted":"역할이 삭제되었습니다","rbac.failedToCreate":"역할 생성에 실패했습니다","rbac.failedToUpdate":"역할 수정에 실패했습니다","rbac.failedToDelete":"역할 삭제에 실패했습니다","rbac.confirmDelete":'역할 "{name}"을(를) 삭제하시겠습니까? 관련된 모든 권한이 제거됩니다.',"rbac.systemRole":"시스템","rbac.permissions":"권한","rbac.addPermission":"권한 추가","rbac.action":"작업","rbac.subject":"대상","rbac.noRoles":"역할이 없습니다.","builder.title":"콘텐츠 유형 빌더","builder.editContentType":"콘텐츠 유형 수정","builder.createContentType":"콘텐츠 유형 만들기","builder.baseConfig":"기본 설정","builder.singularName":"단수형 이름","builder.pluralName":"복수형 이름","builder.tableName":"테이블 이름","builder.fieldsSection":"필드","builder.addField":"필드 추가","builder.preview":"미리보기","builder.save":"콘텐츠 유형 저장","builder.saving":"저장 중...","builder.saved":"콘텐츠 유형이 저장되었습니다","builder.failedToSave":"콘텐츠 유형 저장에 실패했습니다","builder.confirmDeleteField":'필드 "{name}"을(를) 삭제하시겠습니까?',"builder.text":"텍스트","builder.richText":"리치 텍스트","builder.email":"이메일","builder.password":"비밀번호","builder.uid":"UID","builder.integer":"정수","builder.bigInt":"BigInt","builder.decimal":"Decimal","builder.float":"Float","builder.boolean":"불리언","builder.date":"날짜","builder.datetime":"날짜/시간","builder.time":"시간","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"관계","builder.mediaType":"미디어","builder.link":"링크","builder.required":"필수","builder.unique":"고유","builder.privateField":"비공개","builder.immutable":"불변","builder.label":"레이블","builder.defaultValue":"기본값","builder.maxLength":"최대 길이","builder.minValue":"최솟값","builder.maxValue":"최댓값","builder.enumValues":"Enum 값 (쉼표로 구분)","builder.relationType":"관계 유형","builder.relationTarget":"대상 테이블","builder.foreignKey":"외래 키","builder.throughTable":"중간 테이블","builder.draftPublish":"임시저장/게시","builder.timestamps":"타임스탬프","builder.softDelete":"소프트 삭제","builder.slugField":"Slug 필드","media.name":"이름","media.type":"유형","media.other":"기타","media.uploadFailed":"업로드 실패","media.dropFiles":"파일을 여기에 드롭하거나 붙여넣기, 또는 {browse}","media.uploading":"{count}개 파일 업로드 중...","media.done":"완료","media.failedUpload":"실패","media.urlCopied":"URL이 복사되었습니다","media.copyUrl":"URL 복사","media.download":"다운로드","media.dimensions":"크기","media.uploaded":"업로드됨","media.urlLabel":"URL","media.noVideoSupport":"브라우저가 비디오를 지원하지 않습니다.","media.downloadFile":"파일 다운로드","workflows.instances.title":"워크플로우 인스턴스","workflows.instances.showLogs":"로그 보기","workflows.instances.hideLogs":"로그 숨기기","workflows.instances.currentStep":"현재","workflows.instances.context":"컨텍스트","workflows.instances.stepLogs":"단계 로그 ({count})","workflows.instances.noStepLogs":"단계 로그가 없습니다.","workflows.instances.noInstances":"워크플로우 인스턴스가 없습니다.","workflows.instances.instanceCount":"{count}개 인스턴스","workflows.instances.definitions":"정의","workflows.instances.filterStatus":"상태 필터","workflows.instances.cancelled":"인스턴스가 취소되었습니다","workflows.editor.editStep":"단계 수정","workflows.editor.name":"이름","workflows.editor.type":"유형","workflows.editor.backToList":"목록으로 돌아가기","workflows.editor.workflowName":"워크플로우 이름...","workflows.editor.failedToLoad":"워크플로우를 불러오지 못했습니다","workflows.editor.immutableNotice":"워크플로우 정의는 변경할 수 없습니다. 단계를 변경하려면 새로 만드세요.","workflows.editor.untitled":"제목 없는 워크플로우","workflows.editor.save":"저장","workflows.editor.saving":"저장 중...","cron.createSchedule":"Cron 스케줄 만들기","cron.labelField":"레이블","cron.jobType":"작업 유형","cron.cronExpression":"Cron 표현식 (7세그먼트)","cron.format":"형식: 초 분 시 일 월 요일","cron.payload":"페이로드 (JSON, 선택)","cron.schedules":"{count}개 스케줄","cron.schedule":"스케줄","cron.pluginCol":"플러그인","cron.scheduleCreated":"스케줄이 생성되었습니다","cron.scheduleToggled":"스케줄이 전환되었습니다","cron.scheduleDeleted":"스케줄이 삭제되었습니다","cron.scheduleUpdated":"스케줄이 수정되었습니다","cron.noCronSchedules":"Cron 스케줄이 없습니다.","cron.seedHint":"위에서 만들거나 CRON_SEED_ENABLED를 활성화하여 기본값을 시드하세요.","cron.confirmDeleteSchedule":'스케줄 "{name}"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"cron.scheduleNotFound":"스케줄을 찾을 수 없음","cron.backToCronSchedules":"Cron 스케줄로 돌아가기","cron.scheduleDetails":"스케줄 상세","cron.cronExpression7":"7세그먼트: 초 분 시 일 월 요일","cron.builtIn":"내장","cron.executionHistory":"실행 기록","cron.recentLogs":"이 스케줄의 최근 실행 로그","cron.cleanupOld":"오래된 항목 정리","cron.cleanedUp":"{count}개의 오래된 로그가 정리되었습니다","cron.noExecutionLogs":"아직 실행 로그가 없습니다.","cron.success":"성공","cron.failedStatus":"실패","cron.running":"실행 중","cron.newSchedule":"새 스케줄","cron.idField":"ID","cron.started":"시작","cron.finished":"완료","cron.duration":"소요 시간","cron.error":"오류","cron.created":"생성일","cron.updated":"수정일","tenants.createForIsolation":"데이터 격리를 위한 새 테넌트를 만드세요.","tenants.cannotDeleteDefault":"기본 테넌트는 삭제할 수 없습니다","tenants.confirmDeleteMsg":"이 테넌트를 삭제하시겠습니까? 이 테넌트의 데이터는 삭제되지 않습니다.","tenants.created":"생성일","rbac.addRoleDesc":"시스템에 새 역할을 추가하세요.","rbac.updateRoleDesc":'"{name}" 역할을 수정합니다.',"rbac.deleteRoleTitle":"역할 삭제","rbac.deleteRoleConfirm":'"{name}"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"rbac.addPermissionTitle":"권한 추가","rbac.addPermissionDesc":'"{name}"에 새 권한을 부여합니다. 와일드카드는 *를 사용하세요.',"rbac.fieldsCol":"필드","rbac.conditionsCol":"조건","rbac.fieldsOptional":"필드 (쉼표로 구분, 선택)","rbac.removePermissionTitle":"권한 제거","rbac.removePermissionDesc":"{subject}에 대한 {action} 권한을 제거하시겠습니까?","rbac.noPermissions":"설정된 권한이 없습니다.","rbac.selectRole":"권한을 보려면 역할을 선택하세요","rbac.prev":"이전","options.noChanges":"변경사항 없음","options.noOptions":"사용 가능한 옵션이 없습니다.","options.reset":"초기화","options.saveChanges":"변경사항 저장","audit.failedToLoad":"감사 로그를 불러오지 못했습니다. 다시 시도해 주세요.","audit.noEntries":"감사 항목이 없습니다.","audit.noEntriesDesc":"작업이 수행되면 감사 항목이 여기에 나타납니다.","audit.timeCol":"시간","audit.subjectId":"대상 ID","audit.detailCol":"상세","audit.system":"시스템","audit.from":"시작","audit.to":"종료","audit.search":"검색","audit.clear":"초기화","audit.today":"오늘","builder.untitled":"제목 없는 콘텐츠 유형","builder.fieldCount":"{count}개 필드","builder.fieldList":"필드 목록","builder.protocols":"프로토콜","builder.systemFields":"시스템 필드","builder.system":"시스템","builder.newField":"새 필드","builder.addAnotherField":"다른 필드 추가","builder.addAField":"필드 추가","builder.chooseFieldType":"콘텐츠 유형에 추가할 필드 유형을 선택하세요.","builder.fieldConfiguration":"필드 설정","builder.fieldName":"필드 이름","builder.fieldTypeLabel":"필드 유형","builder.displayLabel":"표시 레이블","builder.helpText":"도움말 텍스트","builder.removeField":"필드 제거","builder.removeFieldConfirm":"이 필드를 제거하시겠습니까?","builder.noAdditionalOptions":"이 필드 유형에는 추가 옵션이 없습니다.","builder.acceptedTypes":"허용 유형","builder.maxCount":"최대 수","builder.target":"대상","builder.valuesComma":"값 (쉼표로 구분)","builder.describeContentType":"이 콘텐츠 유형을 설명하세요...","builder.contentTypeUpdated":"콘텐츠 유형이 수정되었습니다","builder.contentTypeCreated":"콘텐츠 유형이 생성되었습니다","builder.newFieldCategory":"숫자","layout.crm":"CRM","layout.pages":"페이지","layout.reusableBlocks":"블록","crm.dashboard":"CRM 대시보드","crm.pipeline":"파이프라인","crm.contacts":"연락처","crm.companies":"회사","crm.deals":"거래","crm.activities":"활동","crm.notes":"메모","crm.reports":"보고서","crm.totalCompanies":"전체 회사","crm.totalContacts":"전체 연락처","crm.openDeals":"진행 중인 거래","crm.wonDeals":"성사된 거래","crm.pipelineValue":"파이프라인 가치","crm.weightedValue":"가중치 적용 가치","crm.winRate":"성사율","crm.avgDealSize":"평균 거래 규모","crm.recentActivities":"이번 주 활동","crm.totalActivities":"전체 활동","crm.leaderboard":"리더보드","crm.noData":"데이터가 없습니다.","crm.newDeal":"새 거래","crm.createDeal":"거래 만들기","crm.dealTitle":"제목","crm.dealTitlePlaceholder":"거래 제목을 입력하세요...","crm.amount":"금액","crm.probability":"확률","crm.stage":"단계","crm.advanceStage":"다음 단계로 진행","crm.totalValue":"총 가치","crm.dealCreated":"거래가 생성되었습니다","crm.failedToCreateDeal":"거래 생성에 실패했습니다","crm.dealStageUpdated":"거래 단계가 변경되었습니다","crm.failedToUpdateStage":"단계 변경에 실패했습니다","crm.titleRequired":"제목은 필수입니다","crm.newContact":"새 연락처","crm.editContact":"연락처 수정","crm.contact":"연락처","crm.name":"이름","crm.email":"이메일","crm.phone":"전화번호","crm.company":"회사","crm.source":"출처","crm.lifecycleStage":"라이프사이클 단계","crm.noContacts":"연락처가 없습니다.","crm.firstName":"이름","crm.lastName":"성","crm.jobTitle":"직책","crm.newCompany":"새 회사","crm.editCompany":"회사 수정","crm.companyName":"회사 이름","crm.industry":"업종","crm.size":"규모","crm.website":"웹사이트","crm.city":"도시","crm.country":"국가","crm.noCompanies":"회사가 없습니다.","crm.deal":"거래","crm.editDeal":"거래 수정","crm.closeDate":"마감일","crm.lossReason":"실패 사유","crm.noDeals":"거래가 없습니다.","crm.dealInfo":"거래 정보","crm.newActivity":"새 활동","crm.editActivity":"활동 수정","crm.activity":"활동","crm.type":"유형","crm.subject":"제목","crm.content":"내용","crm.date":"날짜","crm.duration":"소요 시간","crm.outcome":"결과","crm.noActivities":"활동이 없습니다.","crm.newNote":"새 메모","crm.editNote":"메모 수정","crm.note":"메모","crm.relatedTo":"관련 항목","crm.pinned":"고정됨","crm.createdAt":"생성일","crm.noNotes":"메모가 없습니다.","crm.contentRequired":"내용은 필수입니다","crm.relatedContactId":"관련 연락처 ID","crm.relatedCompanyId":"관련 회사 ID","crm.relatedDealId":"관련 거래 ID","crm.contactInfo":"연락처 정보","crm.timeline":"타임라인","crm.noTimeline":"타임라인 이벤트가 없습니다.","crm.addNote":"메모 추가","crm.notePlaceholder":"메모를 입력하세요...","crm.lifecycleUpdated":"라이프사이클 단계가 변경되었습니다","crm.failedToUpdateLifecycle":"라이프사이클 단계 변경에 실패했습니다","crm.companyInfo":"회사 정보","crm.funnelReport":"퍼널 보고서","crm.activityReport":"활동 보고서","crm.conversionRate":"전환율","crm.byType":"유형별","crm.byOutcome":"결과별","pages.title":"페이지","pages.newPage":"새 페이지","pages.editPage":"페이지 수정","pages.pageDeleted":"페이지가 삭제되었습니다","pages.pageCreated":"페이지가 생성되었습니다","pages.pageUpdated":"페이지가 수정되었습니다","pages.failedToDelete":"페이지 삭제에 실패했습니다","pages.failedToCreate":"페이지 생성에 실패했습니다","pages.failedToUpdate":"페이지 수정에 실패했습니다","pages.statusUpdated":"페이지 상태가 변경되었습니다","pages.failedToUpdateStatus":"상태 변경에 실패했습니다","pages.confirmDelete":"이 페이지를 삭제하시겠습니까?","pages.noPages":"페이지가 없습니다.","pages.noPagesDesc":"첫 번째 페이지를 만들어 사이트 구축을 시작하세요.","pages.noBlocks":"재사용 블록이 아직 없습니다.","pages.noBlocksDesc":"페이지에서 사용할 재사용 블록을 만드세요.","pages.publish":"게시","pages.unpublish":"게시 취소","pages.preview":"미리보기","pages.slug":"Slug","pages.template":"템플릿","pages.createdAt":"생성일","pages.basicInfo":"기본 정보","pages.titleLabel":"제목","pages.titlePlaceholder":"페이지 제목을 입력하세요...","pages.coverImage":"표지 이미지","pages.metaTitle":"메타 제목","pages.metaDescription":"메타 설명","pages.ogImage":"OG 이미지","pages.content":"내용","pages.blockMode":"블록","pages.saveDraft":"임시저장","pages.writeContent":"페이지 내용을 작성하세요...","pages.addBlock":"블록 추가","pages.chooseBlock":"블록 유형을 선택하세요","pages.reusableBlocks":"재사용 블록","pages.createReusable":"재사용 블록 만들기","pages.editReusable":"재사용 블록 수정","pages.rbName":"이름","pages.rbType":"블록 유형","pages.rbDescription":"설명","pages.rbContent":"내용","command.search":"검색...","command.placeholder":"명령어를 입력하거나 검색하세요...","command.noResults":"검색 결과가 없습니다.","command.actions":"작업","command.switchToLight":"라이트 모드로 전환","command.switchToDark":"다크 모드로 전환","layout.ecommerce":"이커머스","layout.products":"상품","layout.productCategories":"상품 카테고리","layout.orders":"주문","layout.finance":"재무","layout.currencies":"통화","layout.wallets":"지갑","layout.paymentChannels":"결제 채널","layout.productComments":"리뷰","layout.coupons":"쿠폰","layout.shippingTemplates":"배송 템플릿","products.title":"상품","products.newProduct":"새 상품","products.editProduct":"상품 수정","products.productTitle":"상품명","products.price":"가격","products.originalPrice":"원가","products.stock":"재고","products.sales":"판매량","products.coverUrl":"표지 URL","products.description":"설명","products.content":"내용","products.slug":"Slug","products.status":"상태","products.category":"카테고리","products.unit":"단위","products.minPurchase":"최소 구매 수량","products.maxPurchase":"최대 구매 수량","products.sortOrder":"정렬 순서","products.metaTitle":"메타 제목","products.metaDescription":"메타 설명","products.productCreated":"상품이 생성되었습니다","products.productUpdated":"상품이 수정되었습니다","products.productDeleted":"상품이 삭제되었습니다","products.batchDeleted":"상품 {{count}}개 삭제됨","products.batchSuccess":"상품 {{count}}개 업데이트됨","products.batchActivate":"활성화","products.batchDeactivate":"비활성화","products.failedToCreate":"상품 생성에 실패했습니다","products.failedToUpdate":"상품 수정에 실패했습니다","products.failedToDelete":"상품 삭제에 실패했습니다","products.confirmDelete":"이 상품을 삭제하시겠습니까?","products.confirmBatchDelete":"상품 {{count}}개를 삭제하시겠습니까?","products.noProducts":"상품이 없습니다","products.noProductsDesc":"첫 번째 상품을 만들어 판매를 시작하세요.","products.allStatus":"전체 상태","products.searchPlaceholder":"상품명 검색...","products.active":"활성","products.draft":"임시저장","products.archived":"보관됨","products.general":"기본 정보","products.media":"미디어","products.pricing":"가격 설정","products.purchaseSettings":"구매 설정","products.summary":"요약","products.phTitle":"상품명 입력...","products.phSummary":"상품 간단 설명...","products.images":"상품 이미지","products.cover":"표지","products.dropImages":"이미지를 드롭, 붙여넣기 또는 클릭하여 업로드","productCategories.categoryName":"카테고리 이름","productCategories.newCategory":"새 카테고리","productCategories.createCategory":"카테고리 만들기","productCategories.editCategory":"카테고리 편집","productCategories.optionalDesc":"설명 (선택)","productCategories.parent":"상위 카테고리","productCategories.noParent":"상위 없음","productCategories.sortOrder":"정렬 순서","productCategories.slug":"슬러그","productCategories.noCategories":"카테고리 없음","productCategories.noCategoriesDesc":"첫 상품 카테고리를 만들어 상품을 정리하세요.","productCategories.categoryCreated":"카테고리가 생성되었습니다","productCategories.categoryUpdated":"카테고리가 업데이트되었습니다","productCategories.categoryDeleted":"카테고리가 삭제되었습니다","productCategories.failedToCreate":"카테고리 생성 실패","productCategories.failedToUpdate":"카테고리 업데이트 실패","productCategories.failedToDelete":"카테고리 삭제 실패","productCategories.confirmDelete":"이 카테고리를 삭제하시겠습니까?","productCategories.confirmDeleteTitle":"카테고리 삭제","productCategories.cannotDeleteHasChildren":"이 카테고리에는 {count}개의 하위 카테고리가 있어 삭제할 수 없습니다. 먼저 이동하거나 삭제해 주세요.","productCategories.treeTitle":"카테고리","productCategories.selectCategory":"카테고리를 선택하여 상세 보기","productCategories.addChild":"하위 추가","orders.title":"주문","orders.orderNo":"주문 번호","orders.buyer":"구매자","orders.total":"합계","orders.status":"상태","orders.items":"항목","orders.remark":"참고","orders.adminRemark":"관리자 참고","orders.createdAt":"주문일","orders.actions":"작업","orders.allStatus":"전체 상태","orders.searchPlaceholder":"주문번호, 구매자 이름 검색...","orders.pending":"대기 중","orders.paid":"결제 완료","orders.shipped":"배송 중","orders.completed":"완료","orders.cancelled":"취소됨","orders.refunded":"환불됨","orders.confirmPay":"결제를 확인하시겠습니까?","orders.orderPaid":"주문이 결제 완료로 표시되었습니다","orders.confirmShip":"이 주문을 배송하시겠습니까?","orders.orderShipped":"주문이 배송되었습니다","orders.confirmCancel":"이 주문을 취소하시겠습니까?","orders.orderCancelled":"주문이 취소되었습니다","orders.confirmRefund":"이 주문을 환불하시겠습니까?","orders.orderRefunded":"주문이 환불되었습니다","orders.failedToPay":"결제 완료 표시에 실패했습니다","orders.failedToShip":"배송 처리에 실패했습니다","orders.failedToCancel":"주문 취소에 실패했습니다","orders.failedToRefund":"환불 처리에 실패했습니다","orders.noOrders":"주문이 없습니다","orders.noOrdersDesc":"고객이 구매하면 주문이 여기에 표시됩니다.","orders.trackingNo":"송장 번호","orders.carrier":"배송업체","orders.shipInfo":"배송 정보","orders.buyerInfo":"구매자 정보","orders.shippingAddress":"배송 주소","orders.orderDetail":"주문 상세","orders.stats.totalOrders":"전체 주문","orders.stats.totalRevenue":"총 매출","orders.stats.pending":"대기 중","orders.stats.completed":"완료","orders.stats.todayOrders":"오늘 주문","orders.stats.todayRevenue":"오늘 매출","payments.title":"결제 채널","payments.newChannel":"새 채널","payments.provider":"제공자","payments.name":"채널 이름","payments.mode":"모드","payments.active":"활성","payments.live":"실운영","payments.test":"테스트","payments.credentials":"자격 증명","payments.webhookSecret":"Webhook 시크릿","payments.settings":"설정","payments.channelCreated":"결제 채널이 생성되었습니다","payments.channelUpdated":"결제 채널이 수정되었습니다","payments.channelDeleted":"결제 채널이 삭제되었습니다","payments.failedToCreate":"결제 채널 생성에 실패했습니다","payments.failedToUpdate":"결제 채널 수정에 실패했습니다","payments.failedToDelete":"결제 채널 삭제에 실패했습니다","payments.confirmDelete":"이 결제 채널을 삭제하시겠습니까?","payments.noChannels":"결제 채널이 없습니다","payments.noChannelsDesc":"결제를 시작하려면 결제 채널을 추가하세요.","payments.selectProvider":"제공자 선택...","payments.testMode":"테스트 모드 (샌드박스)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"가맹점 ID","payments.fPrivateKey":"RSA 개인키","payments.fSerialNo":"인증서 일련번호","payments.fWebhookSecret":"Webhook 서명 비밀키","payments.fAlipayPublicKey":"Alipay 공개키","payments.fPlatformCert":"플랫폼 인증서 (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"알림 URL","payments.phSk":"sk_live_... 또는 sk_test_...","payments.phRsaKey":"RSA 개인키 붙여넣기 (PEM 또는 Base64)","payments.phUrl":"https://...","payments.editChannel":"채널 편집","payments.leaveBlankToKeep":"비워두면 현재 값 유지","layout.paymentOrders":"결제 주문","paymentOrders.title":"결제 주문","paymentOrders.orderId":"주문","paymentOrders.title_col":"제목","paymentOrders.amount":"금액","paymentOrders.provider":"제공자","paymentOrders.noOrders":"결제 주문이 없습니다","paymentOrders.noOrdersDesc":"고객이 결제하면 여기에 표시됩니다.","paymentOrders.refund":"환불","paymentOrders.refundTitle":"환불","paymentOrders.refundOrder":"환불 주문","paymentOrders.refundAmount":"환불 금액","paymentOrders.refundReason":"사유","paymentOrders.refundSuccess":"환불이 제출되었습니다","paymentOrders.refundFailed":"환불에 실패했습니다","layout.paymentTransactions":"결제 거래","paymentTransactions.title":"결제 거래","paymentTransactions.orderId":"주문","paymentTransactions.type":"유형","paymentTransactions.amount":"금액","paymentTransactions.providerTxId":"제공자 거래 ID","paymentTransactions.noTransactions":"거래가 없습니다","paymentTransactions.noTransactionsDesc":"결제 이벤트가 발생하면 여기에 표시됩니다.","currencies.title":"통화","currencies.newCurrency":"새 통화","currencies.code":"코드","currencies.name":"이름","currencies.decimals":"소수점 자리","currencies.active":"활성","currencies.currencyCreated":"통화가 생성되었습니다","currencies.currencyUpdated":"통화가 수정되었습니다","currencies.failedToCreate":"통화 생성에 실패했습니다","currencies.failedToUpdate":"통화 수정에 실패했습니다","currencies.noCurrencies":"통화가 없습니다","currencies.noCurrenciesDesc":"다중 통화 지원을 활성화하려면 통화를 추가하세요.","wallets.title":"지갑","wallets.user":"사용자","wallets.currency":"통화","wallets.balance":"잔액","wallets.frozen":"동결","wallets.credit":"입금","wallets.debit":"출금","wallets.transactions":"거래 내역","wallets.amount":"금액","wallets.type":"유형","wallets.reference":"참조","wallets.creditTitle":"지갑 입금","wallets.debitTitle":"지갑 출금","wallets.userId":"사용자 ID","wallets.remark":"참고","wallets.creditSuccess":"지갑에 입금되었습니다","wallets.debitSuccess":"지갑에서 출금되었습니다","wallets.failedToCredit":"지갑 입금에 실패했습니다","wallets.failedToDebit":"지갑 출금에 실패했습니다","wallets.noWallets":"지갑이 없습니다","wallets.noWalletsDesc":"사용자가 첫 거래를 받으면 지갑이 생성됩니다.","wallets.noTransactions":"아직 거래 내역이 없습니다.","adminLogin.title":"관리자 패널","adminLogin.subtitle":"관리자 계정으로 로그인하세요","adminLogin.email":"이메일","adminLogin.password":"비밀번호","adminLogin.submit":"로그인","adminLogin.loading":"로그인 중…","adminLogin.error":"이메일 또는 비밀번호가 올바르지 않습니다","adminLogin.footer":"RaisFast Admin — 승인된 담당자만 접근 가능","adminLogin.sessionExpired":"세션이 만료되었습니다. 다시 로그인해 주세요.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"통합","layout.channels":"채널","layout.receipts":"수신 기록","layout.apiClients":"API 클라이언트","common.reset":"재설정","common.close":"닫기","integration.newChannel":"새 채널","integration.editChannel":"채널 편집","integration.channelKey":"채널 키","integration.displayName":"표시 이름","integration.provider":"공급자","integration.mode":"모드","integration.transport":"전송","integration.framing":"프레이밍","integration.endpoint":"엔드포인트","integration.verifyKind":"검증 방식","integration.verifyConfig":"검증 설정 (JSON)","integration.credentials":"자격 증명 (JSON)","integration.credentialsKeepHint":"비워 두면 봉인된 자격 증명 유지","integration.mapping":"매핑 (JSONPath)","integration.pullConfig":"풀 설정 (JSON)","integration.streamConfig":"스트림 설정 (JSON)","integration.targetType":"대상 콘텐츠 타입","integration.routeExtra":"라우트 확장 (JSON)","integration.redeliveryMax":"최대 재전송 횟수","integration.stack":"스택","integration.noChannels":"통합 채널이 없습니다","integration.noChannelsDesc":"채널을 추가하여 인바운드 webhook, 스트림, 폴링을 시작하세요.","integration.channelCreated":"채널이 생성되었습니다","integration.channelUpdated":"채널이 업데이트되었습니다","integration.channelDeleted":"채널이 삭제되었습니다","integration.failedToCreate":"생성 실패","integration.failedToUpdate":"업데이트 실패","integration.failedToDelete":"삭제 실패","integration.failedToTest":"테스트 실패","integration.confirmDeleteChannel":'채널 "{key}"을(를) 삭제하시겠습니까? 수신 기록은 감사용으로 유지됩니다.',"integration.testMapping":"매핑 테스트","integration.sampleBody":"샘플 요청 본문","integration.preview":"정규화 엔벨로프 미리보기","integration.runTest":"실행","integration.hasCredentials":"자격 증명이 볼트에 봉인됨","integration.allChannels":"모든 채널","integration.allStatuses":"모든 상태","integration.traceIdFilter":"Trace ID로 필터…","integration.noReceipts":"수신 기록이 없습니다","integration.noReceiptsDesc":"인바운드 배달이 전체 트레이스와 함께 여기에 표시됩니다.","integration.receivedAt":"수신 시간","integration.attempts":"시도 횟수","integration.nextRetryAt":"다음 재시도","integration.noSteps":"기록된 단계 없음","integration.pending":"대기 중","integration.receiptInfo":"영수증","integration.trace":"트레이스","integration.complete":"완료","integration.firstPass":"첫 번째 패스","integration.asyncChain":"비동기 체인","integration.envelopeSnapshot":"엔벨로프 스냅샷","integration.fullSteps":"전체 단계 타임라인","integration.egressCalls":"아웃바운드 호출","integration.noEgress":"아웃바운드 호출 없음","integration.noEgressDesc":"이 영수증이 트리거한 아웃바운드 호출이 여기에 표시됩니다.","integration.replayed":"리플레이되었습니다","integration.dryRunDone":"드라이런 완료 — 보고서는 트레이스에서 확인","integration.failedToReplay":"리플레이 실패","integration.replay":"리플레이","integration.dryRunReplay":"드라이런 리플레이","integration.replayConfirmTitle":"이 영수증을 리플레이하시겠습니까?","integration.replayConfirmDesc":"저장된 엔벨로프 스냅샷에서 라우트 단계를 다시 실행합니다 (external_id로 upsert).","integration.receiptNotFound":"영수증을 찾을 수 없습니다","integration.newClient":"새 API 클라이언트","integration.editClient":"API 클라이언트 편집","integration.clientKey":"클라이언트 키","integration.baseUrl":"기본 URL","integration.authConfig":"인증 설정 (JSON)","integration.rateLimit":"속도 제한 (JSON)","integration.ops":"작업 (JSON)","integration.opsCount":"작업 수","integration.noClients":"API 클라이언트가 없습니다","integration.noClientsDesc":"선언적 API 클라이언트를 추가하여 아웃바운드 호출을 수행합니다.","integration.clientCreated":"API 클라이언트가 생성되었습니다","integration.clientUpdated":"API 클라이언트가 업데이트되었습니다","integration.clientDeleted":"API 클라이언트가 삭제되었습니다","integration.confirmDeleteClient":'API 클라이언트 "{key}"을(를) 삭제하시겠습니까?',"integration.testCall":"테스트 호출","integration.selectOp":"작업 선택","integration.input":"입력 (JSON)","integration.result":"결과","integration.allClients":"모든 클라이언트","integration.egressLog":"아웃바운드 로그","integration.latency":"지연 시간","integration.createdAt":"생성 시간","integration.basicInfo":"기본 정보","integration.trustSection":"신뢰 (L0)","integration.normalizeSection":"정규화 (L2)","integration.routingSection":"라우팅 및 신뢰성 (L3/L4)","integration.presetTitle":"프리셋으로 시작","integration.presetPlaceholder":"검증된 구성 선택…","integration.presetHint":"전체 양식을 채웁니다 — 키·시크릿·대상 CT는 이후 조정하세요. 실제 통합 사례(GitHub / Feishu / DingTalk) 기반.","integration.presetApplied":"프리셋 적용됨 — 확인 후 조정하세요","integration.jsonInvalid":"잘못된 JSON","integration.insertExample":"예시 삽입","integration.presetGeneric":"일반 Webhook (검증 없음)","integration.presetGenericDesc":"단순 push + JSONPath 매핑","integration.presetHmac":"HMAC Webhook","integration.presetHmacDesc":"push + hmac-sha256 서명 검증","integration.presetGithub":"GitHub Webhook","integration.presetGithubDesc":"x-hub-signature-256, delivery GUID 멱등","integration.presetShopify":"Shopify Webhook","integration.presetShopifyDesc":"base64 HMAC, webhook-id 멱등","integration.presetDingtalk":"DingTalk Stream 봇","integration.presetDingtalkDesc":"ws 스트림 + dispatch 프레이밍 + pre_connect","integration.presetFeishu":"Feishu 봇 (롱 커넥션)","integration.presetFeishuDesc":"ws 스트림 + pb-frame + oauth 핸드셰이크","integration.presetPull":"HTTP 폴링 (cursor)","integration.presetPullDesc":"pull + since_id 페이징 + 체크포인트","integration.presetImap":"IMAP 메일박스 (네이티브)","integration.presetImapDesc":"pull + imap + mime, mark-read 시맨틱, IDLE 지원"},BC={"layout.brand":"RaisFast","layout.adminPanel":"Panel de Administración","layout.dashboard":"Panel de Control","layout.content":"Contenido","layout.extension":"Extensiones","layout.system":"Sistema","layout.posts":"Artículos","layout.categories":"Categorías","layout.tags":"Etiquetas","layout.comments":"Comentarios","layout.media":"Multimedia","layout.contentTypes":"Tipos de Contenido","layout.users":"Usuarios","layout.plugins":"Plugins","layout.rolesPermissions":"Roles y Permisos","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"Tokens de API","layout.workflows":"Flujos de Trabajo","layout.auditLog":"Registro de Auditoría","layout.options":"Opciones","layout.tenant":"Tenant","layout.clearTenant":"Limpiar filtro de tenant","layout.all":"Todos","layout.accessDenied":"Acceso Denegado","layout.accessDeniedMsg":"Debes iniciar sesión como autor o administrador para acceder a esta área.","layout.goToLogin":"Ir a Iniciar Sesión","layout.toggleTheme":"Cambiar tema","layout.signOut":"Cerrar sesión","layout.profile":"Perfil","common.loading":"Cargando...","common.save":"Guardar","common.cancel":"Cancelar","common.ok":"OK","common.create":"Crear","common.creating":"Creando...","common.saving":"Guardando...","common.delete":"Eliminar","common.confirmDeleteTitle":"Confirmar eliminación","common.edit":"Editar","common.content":"Contenido","common.remove":"Eliminar","common.view":"Ver","common.back":"Atrás","common.actions":"Acciones","common.status":"Estado","common.retry":"Reintentar","common.previous":"Anterior","common.next":"Siguiente","common.pageOf":"Página {page} de {total}","common.noData":"Sin datos","common.all":"Todos","common.draft":"Borrador","common.published":"Publicado","common.archived":"Archivado","common.enabled":"Habilitado","common.disabled":"Deshabilitado","common.name":"Nombre","common.description":"Descripción","common.enabledCount":"{count} habilitados","common.disabledCount":"{count} deshabilitados","common.adminOnly":"Solo Administradores","common.adminOnlyMsg":"Solo los administradores pueden gestionar esta sección.","common.backToDashboard":"Volver al Panel de Control","common.confirmDelete":"¿Estás seguro de que deseas eliminar este elemento?","common.notFound":"No Encontrado","common.failedToLoad":"Error al cargar","common.selectStatus":"Seleccionar estado","common.titleRequired":"El título es obligatorio","common.contentRequired":"El contenido es obligatorio","common.nameRequired":"El nombre es obligatorio","common.invalidJson":"JSON inválido","common.isRequired":"{field} es obligatorio","common.created":"{name} creado","common.updated":"{name} actualizado","common.deleted":"{name} eliminado","common.failedToCreate":"Error al crear {name}","common.failedToUpdate":"Error al actualizar {name}","common.failedToDelete":"Error al eliminar {name}","common.none":"Ninguno","common.noDependencies":"Sin dependencias","dashboard.title":"Panel de Control","dashboard.posts":"Artículos","dashboard.comments":"Comentarios","dashboard.categories":"Categorías","dashboard.tags":"Etiquetas","dashboard.media":"Multimedia","dashboard.users":"Usuarios","dashboard.contentTypes":"Tipos de Contenido","dashboard.postsLast14Days":"Artículos (Últimos 14 Días)","dashboard.ordersAndProducts14Days":"Pedidos y productos (últimos 14 días)","dashboard.viewAll":"Ver Todos","dashboard.failedToLoad":"Error al cargar las estadísticas. Los datos pueden estar desactualizados.","dashboard.noDataYet":"Aún no hay datos.","dashboard.recentActivity":"Actividad Reciente","dashboard.noActivity":"Aún no hay actividad.","dashboard.type":"Tipo","dashboard.detail":"Detalle","dashboard.time":"Hora","dashboard.post":"Artículo","dashboard.comment":"Comentario","dashboard.product":"Producto","dashboard.order":"Pedido","dashboard.products":"Productos","dashboard.orders":"Pedidos","dashboard.revenue":"Ingresos","dashboard.coupons":"Cupones","dashboard.orderStatus":"Estado de pedidos","dashboard.justNow":"ahora mismo","dashboard.minutesAgo":"min","dashboard.hoursAgo":"h","dashboard.daysAgo":"d","posts.title":"Artículos","posts.newPost":"Nuevo Artículo","posts.editPost":"Editar Artículo","posts.postTitle":"Título del artículo","posts.titleCol":"Título","posts.categoryCol":"Categoría","posts.authorCol":"Autor","posts.createdCol":"Creado","posts.allStatus":"Todos los Estados","posts.searchPlaceholder":"Buscar artículos...","posts.content":"Contenido","posts.excerpt":"Extracto","posts.briefSummary":"Resumen breve (opcional)","posts.coverImage":"Imagen de portada","posts.writeContent":"Escribe el contenido de tu artículo en Markdown...","posts.selectCategory":"Seleccionar categoría","posts.tags":"Etiquetas","posts.slug":"Slug","posts.slugPlaceholder":"Se genera desde el título si está vacío","posts.noTags":"No hay etiquetas disponibles","posts.addTag":"Añadir etiqueta...","posts.createTag":"Crear","posts.createPost":"Crear Artículo","posts.saveChanges":"Guardar Cambios","posts.postCreated":"Artículo creado","posts.postUpdated":"Artículo actualizado","posts.postDeleted":"Artículo eliminado","posts.failedToCreate":"Error al crear el artículo","posts.failedToUpdate":"Error al actualizar el artículo","posts.failedToDelete":"Error al eliminar el artículo","posts.confirmDelete":"¿Estás seguro de que deseas eliminar este artículo?","posts.confirmBatchDelete":"¿Eliminar {count} artículos?","posts.batchPublish":"Publicar","posts.batchUnpublish":"Despublicar","posts.batchSuccess":"{count} artículos actualizados","posts.noPosts":"No se encontraron artículos.","posts.noPostsDesc":"Crea tu primer artículo para compartir tus ideas.","posts.failedToLoad":"Error al cargar el artículo.","categories.title":"Categorías","categories.newCategory":"Nueva Categoría","categories.createCategory":"Crea una nueva categoría para organizar los artículos.","categories.categoryName":"Nombre de la categoría","categories.optionalDesc":"Descripción opcional","categories.sortOrder":"Orden","categories.slug":"Slug","categories.categoryCreated":"Categoría creada","categories.categoryUpdated":"Categoría actualizada","categories.categoryDeleted":"Categoría eliminada","categories.failedToCreate":"Error al crear la categoría","categories.failedToUpdate":"Error al actualizar la categoría","categories.failedToDelete":"Error al eliminar la categoría","categories.confirmDelete":"¿Estás seguro de que deseas eliminar esta categoría?","categories.confirmDeleteTitle":"Eliminar categoría","categories.noCategories":"Sin categorías","categories.noCategoriesDesc":"Organiza tus artículos con categorías.","categories.treeTitle":"Categorías","categories.selectCategory":"Selecciona una categoría para ver detalles","categories.addChild":"Añadir sub","categories.parent":"Categoría padre","categories.noParent":"Sin padre","categories.editCategory":"Editar categoría","categories.cannotDeleteHasChildren":"No se puede eliminar esta categoría porque tiene {count} subcategorías. Mueve o elimínalas primero.","categories.coverImage":"Imagen de portada","tags.title":"Etiquetas","tags.newTag":"Nueva Etiqueta","tags.createTag":"Crea una nueva etiqueta para los artículos.","tags.tagName":"Nombre de la etiqueta","tags.tagCreated":"Etiqueta creada","tags.tagUpdated":"Etiqueta actualizada","tags.tagDeleted":"Etiqueta eliminada","tags.failedToCreate":"Error al crear la etiqueta","tags.failedToUpdate":"Error al actualizar la etiqueta","tags.failedToDelete":"Error al eliminar la etiqueta","tags.confirmDelete":"¿Estás seguro de que deseas eliminar esta etiqueta?","tags.noTags":"No se encontraron etiquetas.","tags.noTagsDesc":"Añade etiquetas para organizar y filtrar tu contenido.","comments.title":"Comentarios","comments.total":"{count} en total","comments.all":"Todos","comments.pending":"Pendientes","comments.approved":"Aprobados","comments.rejected":"Rechazados","comments.spam":"Spam","comments.approve":"Aprobar","comments.reject":"Rechazar","comments.author":"Autor","comments.contentCol":"Contenido","comments.post":"Artículo","comments.date":"Fecha","comments.selected":"{count} seleccionados","comments.commentStatusUpdated":"Estado del comentario actualizado","comments.commentDeleted":"Comentario eliminado","comments.bulkActionDone":"{count} comentario(s) {status}","comments.bulkDeleted":"{count} comentario(s) eliminados","comments.bulkActionFailed":"Error en la acción masiva","comments.bulkDeleteFailed":"Error al eliminar masivamente","comments.failedToUpdateStatus":"Error al actualizar el estado","comments.failedToDelete":"Error al eliminar el comentario","comments.confirmDelete":"¿Estás seguro de que deseas eliminar este comentario?","comments.confirmBulkDelete":"¿Eliminar {count} comentario(s) seleccionados?","comments.noComments":"No se encontraron comentarios.","comments.noCommentsDesc":"Los comentarios aparecerán aquí cuando los lectores comiencen a interactuar.","contentTypes.title":"Tipos de Contenido","contentTypes.noFields":"Este tipo de contenido no tiene campos editables.","contentTypes.createContentType":"Crear Tipo de Contenido","contentTypes.builder":"Constructor","contentTypes.noContentTypes":"Aún no hay tipos de contenido","contentTypes.noContentTypesDesc":"Crea tu primer tipo de contenido para comenzar a construir tu CMS.","contentTypes.contentTypeDeleted":"Tipo de contenido eliminado","contentTypes.failedToDelete":"Error al eliminar","contentTypes.confirmDelete":'¿Eliminar el tipo de contenido "{singular}"? Esto elimina el archivo de esquema pero NO la tabla de la base de datos.',"contentTypes.notFound":"Tipo de Contenido No Encontrado","contentTypes.notFoundMsg":'Tipo de contenido "{singular}" no encontrado.',"contentTypes.itemDeleted":"Elemento eliminado","contentTypes.failedToDeleteItem":"Error al eliminar el elemento","contentTypes.confirmDeleteItem":"¿Estás seguro de que deseas eliminar este elemento?","contentTypes.batchDeleteSuccess":"{count} elementos eliminados","contentTypes.confirmBatchDelete":"¿Seguro que deseas eliminar {count} elementos?","contentTypes.export":"Exportar","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} elementos exportados","contentTypes.import":"Importar","contentTypes.importJson":"Importar JSON","contentTypes.importCsv":"Importar CSV","contentTypes.importExcel":"Importar Excel","contentTypes.importSuccess":"{count} registros importados","contentTypes.importPartial":"{ok} importados, {failed} fallidos","contentTypes.importEmpty":"No se encontraron registros en el archivo","contentTypes.importTooMany":"Demasiados registros (máximo {max})","contentTypes.importFailed":"Error de importación","contentTypes.importTooLarge":"El archivo supera el límite de 8 MB","contentTypes.noItems":"No se encontraron elementos.","contentTypes.noItemsDesc":"Crea tu primer elemento para poblar esta colección.","contentTypes.newItem":"Nuevo {name}","contentTypes.editItem":"Editar {name}","contentTypes.itemNotFound":"Elemento no encontrado.","contentTypes.fields":"{count} campo(s)","contentTypes.fieldsLabel":"campos","contentTypes.totalRecords":"{count} registros","contentTypes.createdAt":"Creado","contentTypes.updatedAt":"Actualizado","users.title":"Usuarios","users.newUser":"Nuevo Usuario","users.createUser":"Crear Usuario","users.registerNew":"Registra una nueva cuenta de usuario.","users.username":"Nombre de usuario","users.email":"Correo electrónico","users.password":"Contraseña","users.minChars":"Mínimo 8 caracteres, debe contener mayúsculas, minúsculas y números","users.role":"Rol","users.joined":"Registro","users.editRole":"Editar Rol de Usuario","users.editUser":"Editar usuario","users.changeRoleFor":"Cambiar rol de {username} ({email})","users.reader":"Lector","users.author":"Autor","users.admin":"Administrador","users.active":"Activo","users.suspended":"Suspendido","users.banned":"Prohibido","users.newPassword":"Nueva contraseña","users.userCreated":"Usuario creado","users.userUpdated":"Usuario actualizado","users.userRoleUpdated":"Rol de usuario actualizado","users.failedToCreate":"Error al crear el usuario","users.failedToUpdate":"Error al actualizar el usuario","users.noUsers":"No se encontraron usuarios.","users.noUsersDesc":"Invita usuarios y gestiona sus roles.","users.registeredVia":"Origen","users.userDeleted":"Usuario eliminado","users.failedToDelete":"Error al eliminar usuario","users.confirmDeleteUser":'¿Eliminar usuario "{username}"? Esta acción no se puede deshacer.',"webhooks.title":"Webhooks","webhooks.newWebhook":"Nuevo Webhook","webhooks.createWebhook":"Crea una nueva suscripción de webhook para recibir notificaciones de eventos.","webhooks.callbackUrl":"URL de Callback","webhooks.eventsComma":"Eventos (separados por comas)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Usa * para suscribirte a todos los eventos","webhooks.descriptionOptional":"Descripción (opcional)","webhooks.urlCol":"URL","webhooks.events":"Eventos","webhooks.webhookCreated":"Webhook creado","webhooks.webhookUpdated":"Webhook actualizado","webhooks.webhookDeleted":"Webhook eliminado","webhooks.failedToCreate":"Error al crear el webhook","webhooks.failedToUpdate":"Error al actualizar el webhook","webhooks.failedToDelete":"Error al eliminar el webhook","webhooks.confirmDelete":"¿Eliminar esta suscripción de webhook?","webhooks.noWebhooks":"No se encontraron webhooks.","webhooks.noWebhooksDesc":"Configura webhooks para recibir notificaciones de eventos en tiempo real.","tokens.title":"Tokens de API","tokens.newToken":"Nuevo Token","tokens.createToken":"Crear Token de API","tokens.createTokenDesc":"Genera un nuevo token de acceso personal. El valor del token solo se mostrará una vez.","tokens.scopesComma":"Ámbitos (separados por comas)","tokens.expiresOptional":"Expira el (opcional)","tokens.tokenCreated":"Token creado","tokens.tokenRevoked":"Token revocado","tokens.failedToCreate":"Error al crear el token","tokens.failedToRevoke":"Error al revocar el token","tokens.confirmRevoke":'¿Revocar el token "{name}"? Esta acción no se puede deshacer.',"tokens.tokenCopied":"Token copiado al portapapeles","tokens.tokenCreatedCopy":"Token Creado — ¡cópialo ahora!","tokens.copied":"Copiado","tokens.copy":"Copiar","tokens.dismiss":"Descartar","tokens.notShownAgain":"Este token no se volverá a mostrar. Guárdalo de forma segura.","tokens.scopesCol":"Ámbitos","tokens.expiresCol":"Expiración","tokens.lastUsed":"Último Uso","tokens.never":"Nunca","tokens.noTokens":"No se encontraron tokens de API. Crea uno para comenzar.","tokens.noTokensDesc":"Crea tokens de API para acceso programático.","tokens.description":"Descripción","workflows.title":"Flujos de Trabajo","workflows.instances":"Instancias","workflows.visualEditor":"Editor Visual","workflows.newWorkflow":"Nuevo Flujo de Trabajo","workflows.createWorkflow":"Crear Flujo de Trabajo","workflows.createWorkflowDesc":"Define un nuevo flujo de trabajo con pasos. Los pasos se configuran como JSON.","workflows.stepsJson":"Pasos (JSON)","workflows.stepFormat":'Cada paso: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Flujo de trabajo creado","workflows.workflowDeleted":"Flujo de trabajo eliminado","workflows.failedToCreate":"Error al crear el flujo de trabajo","workflows.failedToDelete":"Error al eliminar el flujo de trabajo","workflows.confirmDelete":'¿Eliminar el flujo de trabajo "{name}"?',"workflows.noWorkflows":"No se encontraron flujos de trabajo. Crea uno para comenzar.","workflows.noWorkflowsDesc":"Define flujos de trabajo para automatizar tu pipeline de contenido.","workflows.steps":"{count} pasos","workflows.workflowStarted":"Flujo de trabajo iniciado","workflows.editor.title":"Editor de Flujos de Trabajo","workflows.editor.newWorkflow":"Nuevo Flujo de Trabajo","workflows.editor.stepName":"Nombre del paso","workflows.editor.branchesJson":"Ramas (array JSON)","workflows.editor.connectEdges":"Conecta los bordes desde este nodo para definir las ramas.","workflows.editor.configJson":"Configuración (JSON)","workflows.editor.apply":"Aplicar","workflows.editor.deleteStep":"Eliminar paso","workflows.editor.addStep":"Añadir Paso","workflows.editor.invalidJson":"JSON inválido en la configuración","workflows.editor.workflowSaved":"Flujo de trabajo guardado","workflows.editor.failedToSave":"Error al guardar el flujo de trabajo","audit.title":"Registro de Auditoría","audit.clearFilters":"Limpiar Filtros","audit.noLogs":"No se encontraron entradas en el registro de auditoría.","audit.action":"Acción","audit.actor":"Actor","audit.resource":"Recurso","audit.timestamp":"Marca de Tiempo","options.title":"Opciones","options.saved":"Opciones guardadas","options.failedToSave":"Error al guardar las opciones","plugins.title":"Plugins","plugins.loaded":"{count} cargados","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Salud","plugins.pluginEnabled":"Plugin habilitado","plugins.pluginDisabled":"Plugin deshabilitado","plugins.pluginReloaded":"Plugin recargado","plugins.pluginRemoved":"Plugin eliminado","plugins.failedToEnable":"Error al habilitar el plugin","plugins.failedToDisable":"Error al deshabilitar el plugin","plugins.failedToReload":"Error al recargar el plugin","plugins.failedToRemove":"Error al eliminar el plugin","plugins.noPlugins":"No hay plugins cargados.","plugins.placePlugins":"Coloca los plugins en el directorio configurado.","plugins.confirmRemove":'¿Eliminar el plugin "{name}"? Se descargará de la memoria.',"plugins.autoDisabled":"Auto-deshabilitado","plugins.tooManyErrors":"Demasiados errores","plugins.errorCount":"{count} error(es)","plugins.errorsOccurred":"Se produjeron errores","plugins.calls":"{count} llamadas","plugins.idle":"Inactivo","plugins.notFound":"Plugin No Encontrado","plugins.notFoundMsg":"Plugin no encontrado.","plugins.backToPlugins":"Volver a Plugins","plugins.general":"General","plugins.version":"Versión","plugins.reload":"Recargar","plugins.remove":"Eliminar","plugins.errorTracking":"Seguimiento de errores y estado de auto-deshabilitación","plugins.healthy":"Saludable","plugins.errorCountLabel":"Conteo de Errores","plugins.lastError":"Último Error","plugins.lastErrorAt":"Último Error El","plugins.autoDisabledLabel":"Auto-deshabilitado","plugins.permissions":"Permisos","permissions.declaredFromManifest":"Permisos declarados en el manifiesto del plugin","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Puntos de hook registrados y sus métricas de ejecución","plugins.noHooks":"No hay hooks registrados.","plugins.totalCalls":"Total de Llamadas","plugins.totalErrors":"Total de Errores","plugins.totalDuration":"Duración Total","plugins.noMetrics":"Aún no hay métricas","plugins.performance":"Resumen de Rendimiento","plugins.maxMemory":"Memoria Máxima","plugins.timeout":"Tiempo de Espera","plugins.default":"Predeterminado","media.title":"Multimedia","media.files":"{count} archivos","media.searchFiles":"Buscar archivos...","media.fileDeleted":"Archivo eliminado","media.failedToDelete":"Error al eliminar el archivo","media.confirmDelete":"¿Estás seguro de que deseas eliminar este archivo?","media.date":"Fecha","media.size":"Tamaño","media.ascending":"Ascendente","media.descending":"Descendente","field.mediaUrl":"URL de Multimedia","field.startWriting":"Comienza a escribir...","field.yes":"Sí","field.no":"No","field.relatedItemId":"ID del elemento relacionado","cron.title":"Tareas de Cron","cron.newCron":"Nueva Tarea de Cron","cron.expression":"Expresión","cron.handler":"Handler","cron.lastRun":"Última Ejecución","cron.nextRun":"Próxima Ejecución","cron.cronCreated":"Tarea de Cron creada","cron.cronDeleted":"Tarea de Cron eliminada","cron.failedToCreate":"Error al crear la tarea de Cron","cron.failedToDelete":"Error al eliminar la tarea de Cron","cron.noCrons":"No se encontraron tareas de Cron.","cron.confirmDelete":'¿Eliminar la tarea de Cron "{name}"?',"tenants.title":"Tenants","tenants.newTenant":"Nuevo Tenant","tenants.createTenant":"Crea un nuevo tenant para el aislamiento multi-tenant.","tenants.tenantName":"Nombre del tenant","tenants.slug":"Slug","tenants.domain":"Dominio","tenants.owner":"Propietario","tenants.tenantCreated":"Tenant creado","tenants.tenantUpdated":"Tenant actualizado","tenants.tenantDeleted":"Tenant eliminado","tenants.failedToCreate":"Error al crear el tenant","tenants.failedToUpdate":"Error al actualizar el tenant","tenants.failedToDelete":"Error al eliminar el tenant","tenants.confirmDelete":"¿Estás seguro de que deseas eliminar este tenant?","tenants.noTenants":"No se encontraron tenants.","tenants.noTenantsDesc":"Crea tenants para SaaS multi-tenant.","rbac.title":"Roles y Permisos","rbac.roles":"Roles","rbac.newRole":"Nuevo Rol","rbac.createRole":"Crea un nuevo rol para el control de acceso.","rbac.roleName":"Nombre del rol","rbac.roleDesc":"Descripción del rol","rbac.roleCreated":"Rol creado","rbac.roleUpdated":"Rol actualizado","rbac.roleDeleted":"Rol eliminado","rbac.failedToCreate":"Error al crear el rol","rbac.failedToUpdate":"Error al actualizar el rol","rbac.failedToDelete":"Error al eliminar el rol","rbac.confirmDelete":'¿Eliminar el rol "{name}"? Esto eliminará todos los permisos asociados.',"rbac.systemRole":"Sistema","rbac.permissions":"Permisos","rbac.addPermission":"Añadir Permiso","rbac.action":"Acción","rbac.subject":"Sujeto","rbac.noRoles":"No se encontraron roles.","builder.title":"Constructor de Tipos de Contenido","builder.editContentType":"Editar Tipo de Contenido","builder.createContentType":"Crear Tipo de Contenido","builder.baseConfig":"Configuración Base","builder.singularName":"Nombre Singular","builder.pluralName":"Nombre Plural","builder.tableName":"Nombre de Tabla","builder.fieldsSection":"Campos","builder.addField":"Añadir Campo","builder.preview":"Vista Previa","builder.save":"Guardar Tipo de Contenido","builder.saving":"Guardando...","builder.saved":"Tipo de contenido guardado","builder.failedToSave":"Error al guardar el tipo de contenido","builder.confirmDeleteField":'¿Eliminar el campo "{name}"?',"builder.text":"Texto","builder.richText":"Texto Enriquecido","builder.email":"Correo electrónico","builder.password":"Contraseña","builder.uid":"UID","builder.integer":"Entero","builder.bigInt":"Entero Grande","builder.decimal":"Decimal","builder.float":"Flotante","builder.boolean":"Booleano","builder.date":"Fecha","builder.datetime":"Fecha y Hora","builder.time":"Hora","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relación","builder.mediaType":"Multimedia","builder.link":"Enlace","builder.required":"Obligatorio","builder.unique":"Único","builder.privateField":"Privado","builder.immutable":"Inmutable","builder.label":"Etiqueta","builder.defaultValue":"Valor Predeterminado","builder.maxLength":"Longitud Máxima","builder.minValue":"Mínimo","builder.maxValue":"Máximo","builder.enumValues":"Valores Enum (separados por comas)","builder.relationType":"Tipo de Relación","builder.relationTarget":"Tabla Destino","builder.foreignKey":"Clave Foránea","builder.throughTable":"Tabla Intermedia","builder.draftPublish":"Borrador/Publicar","builder.timestamps":"Marcas de Tiempo","builder.softDelete":"Eliminación Suave","builder.slugField":"Campo Slug","media.name":"Nombre","media.type":"Tipo","media.other":"Otro","media.uploadFailed":"Error al subir","media.dropFiles":"Suelta archivos aquí, pega o {browse}","media.uploading":"Subiendo {count} archivo(s)...","media.done":"Listo","media.failedUpload":"Fallido","media.urlCopied":"URL copiada","media.copyUrl":"Copiar URL","media.download":"Descargar","media.dimensions":"Dimensiones","media.uploaded":"Subido","media.urlLabel":"URL","media.noVideoSupport":"Tu navegador no soporta video.","media.downloadFile":"Descargar archivo","workflows.instances.title":"Instancias de Flujos de Trabajo","workflows.instances.showLogs":"Mostrar registros","workflows.instances.hideLogs":"Ocultar registros","workflows.instances.currentStep":"Actual","workflows.instances.context":"Contexto","workflows.instances.stepLogs":"Registros de Pasos ({count})","workflows.instances.noStepLogs":"No hay registros de pasos.","workflows.instances.noInstances":"No se encontraron instancias de flujos de trabajo.","workflows.instances.instanceCount":"{count} instancia(s)","workflows.instances.definitions":"Definiciones","workflows.instances.filterStatus":"Filtrar estado","workflows.instances.cancelled":"Instancia cancelada","workflows.editor.editStep":"Editar Paso","workflows.editor.name":"Nombre","workflows.editor.type":"Tipo","workflows.editor.backToList":"Volver a la lista","workflows.editor.workflowName":"Nombre del flujo de trabajo...","workflows.editor.failedToLoad":"Error al cargar el flujo de trabajo","workflows.editor.immutableNotice":"Las definiciones de flujos de trabajo son inmutables. Crea una nueva para cambiar los pasos.","workflows.editor.untitled":"Flujo de Trabajo Sin Título","workflows.editor.save":"Guardar","workflows.editor.saving":"Guardando...","cron.createSchedule":"Crear Programación de Cron","cron.labelField":"Etiqueta","cron.jobType":"Tipo de Tarea","cron.cronExpression":"Expresión Cron (6 segmentos)","cron.format":"Formato: seg min hora día mes día-semana","cron.payload":"Payload (JSON, opcional)","cron.schedules":"{count} programación(es)","cron.schedule":"Programación","cron.pluginCol":"Plugin","cron.scheduleCreated":"Programación creada","cron.scheduleToggled":"Programación activada/desactivada","cron.scheduleDeleted":"Programación eliminada","cron.scheduleUpdated":"Programación actualizada","cron.noCronSchedules":"No hay programaciones de Cron.","cron.seedHint":"Crea una arriba o habilita CRON_SEED_ENABLED para sembrar los valores predeterminados.","cron.confirmDeleteSchedule":'¿Eliminar la programación "{name}"? Esta acción no se puede deshacer.',"cron.scheduleNotFound":"Programación No Encontrada","cron.backToCronSchedules":"Volver a Programaciones de Cron","cron.scheduleDetails":"Detalles de la Programación","cron.cronExpression7":"6 segmentos: seg min hora día mes día-semana","cron.builtIn":"Integrado","cron.executionHistory":"Historial de Ejecución","cron.recentLogs":"Registros de ejecución recientes para esta programación","cron.cleanupOld":"Limpiar Antiguos","cron.cleanedUp":"Se limpiaron {count} registro(s) antiguo(s)","cron.noExecutionLogs":"Aún no hay registros de ejecución.","cron.success":"Éxito","cron.failedStatus":"Fallido","cron.running":"En Ejecución","cron.newSchedule":"Nueva Programación","cron.idField":"ID","cron.started":"Iniciado","cron.finished":"Finalizado","cron.duration":"Duración","cron.error":"Error","cron.created":"Creado","cron.updated":"Actualizado","tenants.createForIsolation":"Crea un nuevo tenant para el aislamiento de datos.","tenants.cannotDeleteDefault":"No se puede eliminar el tenant predeterminado","tenants.confirmDeleteMsg":"¿Eliminar este tenant? Los datos pertenecientes a este tenant NO serán eliminados.","tenants.created":"Creado","rbac.addRoleDesc":"Añade un nuevo rol al sistema.","rbac.updateRoleDesc":'Actualiza el rol "{name}".',"rbac.deleteRoleTitle":"Eliminar Rol","rbac.deleteRoleConfirm":'¿Estás seguro de que deseas eliminar "{name}"? Esta acción no se puede deshacer.',"rbac.addPermissionTitle":"Añadir Permiso","rbac.addPermissionDesc":'Concede un nuevo permiso a "{name}". Usa * como comodín.',"rbac.fieldsCol":"Campos","rbac.conditionsCol":"Condiciones","rbac.fieldsOptional":"Campos (separados por comas, opcional)","rbac.removePermissionTitle":"Eliminar Permiso","rbac.removePermissionDesc":"¿Eliminar {action} sobre {subject}?","rbac.noPermissions":"No hay permisos configurados.","rbac.selectRole":"Selecciona un rol para ver los permisos","rbac.prev":"Anterior","options.noChanges":"Sin cambios","options.noOptions":"No hay opciones disponibles.","options.reset":"Restablecer","options.saveChanges":"Guardar Cambios","audit.failedToLoad":"Error al cargar el registro de auditoría. Inténtalo de nuevo.","audit.noEntries":"No se encontraron entradas de auditoría.","audit.noEntriesDesc":"Las entradas de auditoría aparecerán a medida que se realicen acciones.","audit.timeCol":"Hora","audit.subjectId":"ID del Sujeto","audit.detailCol":"Detalle","audit.system":"sistema","audit.from":"Desde","audit.to":"Hasta","audit.search":"Buscar","audit.clear":"Limpiar","audit.today":"Hoy","builder.untitled":"Tipo de Contenido Sin Título","builder.fieldCount":"{count} campo(s)","builder.fieldList":"Campos","builder.protocols":"Protocolos","builder.systemFields":"Campos del sistema","builder.system":"sistema","builder.newField":"Nuevo campo","builder.addAnotherField":"Añadir otro campo","builder.addAField":"Añadir un campo","builder.chooseFieldType":"Elige un tipo de campo para añadir a tu tipo de contenido.","builder.fieldConfiguration":"Configuración del Campo","builder.fieldName":"Nombre del Campo","builder.fieldTypeLabel":"Tipo de Campo","builder.displayLabel":"Etiqueta de visualización","builder.helpText":"Texto de ayuda","builder.removeField":"Eliminar Campo","builder.removeFieldConfirm":"¿Eliminar este campo?","builder.noAdditionalOptions":"No hay opciones adicionales para este tipo de campo.","builder.acceptedTypes":"Tipos Aceptados","builder.maxCount":"Cantidad Máxima","builder.target":"Destino","builder.valuesComma":"Valores (separados por comas)","builder.describeContentType":"Describe este tipo de contenido...","builder.contentTypeUpdated":"Tipo de contenido actualizado","builder.contentTypeCreated":"Tipo de contenido creado","builder.newFieldCategory":"Número","layout.crm":"CRM","layout.pages":"Páginas","layout.reusableBlocks":"Bloques","crm.dashboard":"Panel de CRM","crm.pipeline":"Pipeline","crm.contacts":"Contactos","crm.companies":"Empresas","crm.deals":"Ofertas","crm.activities":"Actividades","crm.notes":"Notas","crm.reports":"Informes","crm.totalCompanies":"Total de Empresas","crm.totalContacts":"Total de Contactos","crm.openDeals":"Ofertas Abiertas","crm.wonDeals":"Ofertas Ganadas","crm.pipelineValue":"Valor del Pipeline","crm.weightedValue":"Valor Ponderado","crm.winRate":"Tasa de Éxito","crm.avgDealSize":"Tamaño Promedio de Oferta","crm.recentActivities":"Actividades de Esta Semana","crm.totalActivities":"Total de Actividades","crm.leaderboard":"Tabla de Líderes","crm.noData":"No hay datos disponibles.","crm.newDeal":"Nueva Oferta","crm.createDeal":"Crear Oferta","crm.dealTitle":"Título","crm.dealTitlePlaceholder":"Ingresa el título de la oferta...","crm.amount":"Monto","crm.probability":"Probabilidad","crm.stage":"Etapa","crm.advanceStage":"Avanzar a la siguiente etapa","crm.totalValue":"Valor Total","crm.dealCreated":"Oferta creada","crm.failedToCreateDeal":"Error al crear la oferta","crm.dealStageUpdated":"Etapa de la oferta actualizada","crm.failedToUpdateStage":"Error al actualizar la etapa","crm.titleRequired":"El título es obligatorio","crm.newContact":"Nuevo Contacto","crm.editContact":"Editar Contacto","crm.contact":"Contacto","crm.name":"Nombre","crm.email":"Correo electrónico","crm.phone":"Teléfono","crm.company":"Empresa","crm.source":"Origen","crm.lifecycleStage":"Etapa del Ciclo de Vida","crm.noContacts":"No se encontraron contactos.","crm.firstName":"Nombre","crm.lastName":"Apellido","crm.jobTitle":"Cargo","crm.newCompany":"Nueva Empresa","crm.editCompany":"Editar Empresa","crm.companyName":"Nombre de la Empresa","crm.industry":"Industria","crm.size":"Tamaño","crm.website":"Sitio Web","crm.city":"Ciudad","crm.country":"País","crm.noCompanies":"No se encontraron empresas.","crm.deal":"Oferta","crm.editDeal":"Editar Oferta","crm.closeDate":"Fecha de Cierre","crm.lossReason":"Motivo de Pérdida","crm.noDeals":"No se encontraron ofertas.","crm.dealInfo":"Información de la Oferta","crm.newActivity":"Nueva Actividad","crm.editActivity":"Editar Actividad","crm.activity":"Actividad","crm.type":"Tipo","crm.subject":"Asunto","crm.content":"Contenido","crm.date":"Fecha","crm.duration":"Duración","crm.outcome":"Resultado","crm.noActivities":"No se encontraron actividades.","crm.newNote":"Nueva Nota","crm.editNote":"Editar Nota","crm.note":"Nota","crm.relatedTo":"Relacionado Con","crm.pinned":"Fijado","crm.createdAt":"Creado","crm.noNotes":"No se encontraron notas.","crm.contentRequired":"El contenido es obligatorio","crm.relatedContactId":"ID del Contacto Relacionado","crm.relatedCompanyId":"ID de la Empresa Relacionada","crm.relatedDealId":"ID de la Oferta Relacionada","crm.contactInfo":"Información del Contacto","crm.timeline":"Línea de Tiempo","crm.noTimeline":"No hay eventos en la línea de tiempo.","crm.addNote":"Añadir Nota","crm.notePlaceholder":"Escribe una nota...","crm.lifecycleUpdated":"Etapa del ciclo de vida actualizada","crm.failedToUpdateLifecycle":"Error al actualizar la etapa del ciclo de vida","crm.companyInfo":"Información de la Empresa","crm.funnelReport":"Informe de Embudo","crm.activityReport":"Informe de Actividades","crm.conversionRate":"Conversión","crm.byType":"Por Tipo","crm.byOutcome":"Por Resultado","pages.title":"Páginas","pages.newPage":"Nueva Página","pages.editPage":"Editar Página","pages.pageDeleted":"Página eliminada","pages.pageCreated":"Página creada","pages.pageUpdated":"Página actualizada","pages.failedToDelete":"Error al eliminar la página","pages.failedToCreate":"Error al crear la página","pages.failedToUpdate":"Error al actualizar la página","pages.statusUpdated":"Estado de la página actualizado","pages.failedToUpdateStatus":"Error al actualizar el estado","pages.confirmDelete":"¿Estás seguro de que deseas eliminar esta página?","pages.noPages":"No se encontraron páginas.","pages.noPagesDesc":"Crea tu primera página para comenzar a construir tu sitio.","pages.noBlocks":"Aún no hay bloques reutilizables.","pages.noBlocksDesc":"Crea bloques reutilizables para usar en tus páginas.","pages.publish":"Publicar","pages.unpublish":"Despublicar","pages.preview":"Vista Previa","pages.slug":"Slug","pages.template":"Plantilla","pages.createdAt":"Creado","pages.basicInfo":"Información Básica","pages.titleLabel":"Título","pages.titlePlaceholder":"Ingresa el título de la página...","pages.coverImage":"Imagen de Portada","pages.metaTitle":"Meta Título","pages.metaDescription":"Meta Descripción","pages.ogImage":"Imagen OG","pages.content":"Contenido","pages.blockMode":"Bloques","pages.saveDraft":"Guardar Borrador","pages.writeContent":"Escribe el contenido de tu página...","pages.addBlock":"Añadir Bloque","pages.chooseBlock":"Elige un tipo de bloque","pages.reusableBlocks":"Bloques Reutilizables","pages.createReusable":"Crear Bloque Reutilizable","pages.editReusable":"Editar Bloque Reutilizable","pages.rbName":"Nombre","pages.rbType":"Tipo de Bloque","pages.rbDescription":"Descripción","pages.rbContent":"Contenido","command.search":"Buscar...","command.placeholder":"Escribe un comando o busca...","command.noResults":"No se encontraron resultados.","command.actions":"Acciones","command.switchToLight":"Cambiar a Modo Claro","command.switchToDark":"Cambiar a Modo Oscuro","layout.ecommerce":"E-Commerce","layout.products":"Productos","layout.productCategories":"Categorías de productos","layout.orders":"Pedidos","layout.finance":"Finanzas","layout.currencies":"Monedas","layout.wallets":"Billeteras","layout.paymentChannels":"Canales de pago","layout.productComments":"Reseñas","layout.coupons":"Cupones","layout.shippingTemplates":"Plantillas de envío","products.title":"Productos","products.newProduct":"Nuevo Producto","products.editProduct":"Editar Producto","products.productTitle":"Título del Producto","products.price":"Precio","products.originalPrice":"Precio Original","products.stock":"Inventario","products.sales":"Ventas","products.coverUrl":"URL de Portada","products.description":"Descripción","products.content":"Contenido","products.slug":"Slug","products.status":"Estado","products.category":"Categoría","products.unit":"Unidad","products.minPurchase":"Compra Mínima","products.maxPurchase":"Compra Máxima","products.sortOrder":"Orden","products.metaTitle":"Meta Título","products.metaDescription":"Meta Descripción","products.productCreated":"Producto creado","products.productUpdated":"Producto actualizado","products.productDeleted":"Producto eliminado","products.batchDeleted":"{{count}} productos eliminados","products.batchSuccess":"{{count}} productos actualizados","products.batchActivate":"Activar","products.batchDeactivate":"Desactivar","products.failedToCreate":"Error al crear el producto","products.failedToUpdate":"Error al actualizar el producto","products.failedToDelete":"Error al eliminar el producto","products.confirmDelete":"¿Estás seguro de que deseas eliminar este producto?","products.confirmBatchDelete":"¿Está seguro de que desea eliminar {{count}} productos?","products.noProducts":"Aún no hay productos","products.noProductsDesc":"Crea tu primer producto para comenzar a vender.","products.allStatus":"Todos los Estados","products.searchPlaceholder":"Buscar producto...","products.active":"Activo","products.draft":"Borrador","products.archived":"Archivado","products.general":"General","products.media":"Medios","products.pricing":"Precios","products.purchaseSettings":"Configuración de compra","products.summary":"Resumen","products.phTitle":"Título del producto...","products.phSummary":"Breve descripción del producto...","products.images":"Imágenes","products.cover":"Portada","products.dropImages":"Suelta, pega o haz clic para subir imágenes","productCategories.categoryName":"Nombre de categoría","productCategories.newCategory":"Nueva categoría","productCategories.createCategory":"Crear categoría","productCategories.editCategory":"Editar categoría","productCategories.optionalDesc":"Descripción (opcional)","productCategories.parent":"Categoría padre","productCategories.noParent":"Sin padre","productCategories.sortOrder":"Orden","productCategories.slug":"Slug","productCategories.noCategories":"Sin categorías","productCategories.noCategoriesDesc":"Crea tu primera categoría de productos para organizarlos.","productCategories.categoryCreated":"Categoría creada","productCategories.categoryUpdated":"Categoría actualizada","productCategories.categoryDeleted":"Categoría eliminada","productCategories.failedToCreate":"Error al crear categoría","productCategories.failedToUpdate":"Error al actualizar categoría","productCategories.failedToDelete":"Error al eliminar categoría","productCategories.confirmDelete":"¿Estás seguro de eliminar esta categoría?","productCategories.confirmDeleteTitle":"Eliminar categoría","productCategories.cannotDeleteHasChildren":"No se puede eliminar esta categoría porque tiene {count} subcategorías. Mueve o elimínalas primero.","productCategories.treeTitle":"Categorías","productCategories.selectCategory":"Selecciona una categoría para ver detalles","productCategories.addChild":"Añadir sub","orders.title":"Pedidos","orders.orderNo":"N.º de Pedido","orders.buyer":"Comprador","orders.total":"Total","orders.status":"Estado","orders.items":"Artículos","orders.remark":"Observación","orders.adminRemark":"Observación del Admin","orders.createdAt":"Creado","orders.actions":"Acciones","orders.allStatus":"Todos los Estados","orders.searchPlaceholder":"Buscar n° pedido, comprador...","orders.pending":"Pendiente","orders.paid":"Pagado","orders.shipped":"Enviado","orders.completed":"Completado","orders.cancelled":"Cancelado","orders.refunded":"Reembolsado","orders.confirmPay":"¿Confirmar el pago?","orders.orderPaid":"Pedido marcado como pagado","orders.confirmShip":"¿Enviar este pedido?","orders.orderShipped":"Pedido enviado","orders.confirmCancel":"¿Cancelar este pedido?","orders.orderCancelled":"Pedido cancelado","orders.confirmRefund":"¿Reembolsar este pedido?","orders.orderRefunded":"Pedido reembolsado","orders.failedToPay":"Error al marcar como pagado","orders.failedToShip":"Error al enviar","orders.failedToCancel":"Error al cancelar","orders.failedToRefund":"Error al reembolsar","orders.noOrders":"Aún no hay pedidos","orders.noOrdersDesc":"Los pedidos aparecerán aquí cuando los clientes realicen compras.","orders.trackingNo":"N.º de Seguimiento","orders.carrier":"Transportista","orders.shipInfo":"Información de Envío","orders.buyerInfo":"Información del Comprador","orders.shippingAddress":"Dirección de Envío","orders.orderDetail":"Detalle del Pedido","orders.stats.totalOrders":"Total de Pedidos","orders.stats.totalRevenue":"Ingresos Totales","orders.stats.pending":"Pendientes","orders.stats.completed":"Completados","orders.stats.todayOrders":"Pedidos hoy","orders.stats.todayRevenue":"Ingresos hoy","payments.title":"Canales de Pago","payments.newChannel":"Nuevo Canal","payments.provider":"Proveedor","payments.name":"Nombre del Canal","payments.mode":"Modo","payments.active":"Activo","payments.live":"Producción","payments.test":"Prueba","payments.credentials":"Credenciales","payments.webhookSecret":"Secreto del Webhook","payments.settings":"Configuración","payments.channelCreated":"Canal de pago creado","payments.channelUpdated":"Canal de pago actualizado","payments.channelDeleted":"Canal de pago eliminado","payments.failedToCreate":"Error al crear el canal de pago","payments.failedToUpdate":"Error al actualizar el canal de pago","payments.failedToDelete":"Error al eliminar el canal de pago","payments.confirmDelete":"¿Eliminar este canal de pago?","payments.noChannels":"No hay canales de pago","payments.noChannelsDesc":"Añade un canal de pago para comenzar a aceptar pagos.","payments.selectProvider":"Seleccionar proveedor...","payments.testMode":"Modo de prueba (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"ID de comerciante","payments.fPrivateKey":"Clave privada RSA","payments.fSerialNo":"N.º de serie del certificado","payments.fWebhookSecret":"Secreto de firma webhook","payments.fAlipayPublicKey":"Clave pública de Alipay","payments.fPlatformCert":"Certificado de plataforma (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"URL de notificación","payments.phSk":"sk_live_... o sk_test_...","payments.phRsaKey":"Pegar clave privada RSA (PEM o Base64)","payments.phUrl":"https://...","payments.editChannel":"Editar canal","payments.leaveBlankToKeep":"Dejar vacío para mantener","layout.paymentOrders":"Órdenes de pago","paymentOrders.title":"Órdenes de pago","paymentOrders.orderId":"Pedido","paymentOrders.title_col":"Título","paymentOrders.amount":"Monto","paymentOrders.provider":"Proveedor","paymentOrders.noOrders":"Sin órdenes de pago","paymentOrders.noOrdersDesc":"Las órdenes de pago aparecerán aquí cuando los clientes realicen pagos.","paymentOrders.refund":"Reembolsar","paymentOrders.refundTitle":"Reembolso","paymentOrders.refundOrder":"Reembolsar pedido","paymentOrders.refundAmount":"Monto de reembolso","paymentOrders.refundReason":"Razón","paymentOrders.refundSuccess":"Reembolso enviado","paymentOrders.refundFailed":"Error al reembolsar","layout.paymentTransactions":"Transacciones de pago","paymentTransactions.title":"Transacciones de pago","paymentTransactions.orderId":"Pedido","paymentTransactions.type":"Tipo","paymentTransactions.amount":"Monto","paymentTransactions.providerTxId":"ID de transacción del proveedor","paymentTransactions.noTransactions":"Sin transacciones","paymentTransactions.noTransactionsDesc":"Las transacciones aparecerán aquí cuando ocurran eventos de pago.","currencies.title":"Monedas","currencies.newCurrency":"Nueva Moneda","currencies.code":"Código","currencies.name":"Nombre","currencies.decimals":"Decimales","currencies.active":"Activo","currencies.currencyCreated":"Moneda creada","currencies.currencyUpdated":"Moneda actualizada","currencies.failedToCreate":"Error al crear la moneda","currencies.failedToUpdate":"Error al actualizar la moneda","currencies.noCurrencies":"No hay monedas","currencies.noCurrenciesDesc":"Añade una moneda para habilitar el soporte multi-moneda.","wallets.title":"Billeteras","wallets.user":"Usuario","wallets.currency":"Moneda","wallets.balance":"Saldo","wallets.frozen":"Congelado","wallets.credit":"Acreditar","wallets.debit":"Debitar","wallets.transactions":"Transacciones","wallets.amount":"Monto","wallets.type":"Tipo","wallets.reference":"Referencia","wallets.creditTitle":"Acreditar Billetera","wallets.debitTitle":"Debitar Billetera","wallets.userId":"ID de Usuario","wallets.remark":"Observación","wallets.creditSuccess":"Billetera acreditada","wallets.debitSuccess":"Billetera debitada","wallets.failedToCredit":"Error al acreditar la billetera","wallets.failedToDebit":"Error al debitar la billetera","wallets.noWallets":"No hay billeteras","wallets.noWalletsDesc":"Las billeteras se crean cuando los usuarios reciben su primera transacción.","wallets.noTransactions":"Aún no hay transacciones.","adminLogin.title":"Panel de Administración","adminLogin.subtitle":"Inicia sesión con tus credenciales de administrador","adminLogin.email":"Correo electrónico","adminLogin.password":"Contraseña","adminLogin.submit":"Iniciar Sesión","adminLogin.loading":"Iniciando sesión…","adminLogin.error":"Correo electrónico o contraseña inválidos","adminLogin.footer":"RaisFast Admin — solo personal autorizado","adminLogin.sessionExpired":"Tu sesión ha expirado. Por favor, inicia sesión de nuevo.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Integración","layout.channels":"Canales","layout.receipts":"Recibos","layout.apiClients":"Clientes API","common.reset":"Restablecer","common.close":"Cerrar","integration.newChannel":"Nuevo canal","integration.editChannel":"Editar canal","integration.channelKey":"Clave del canal","integration.displayName":"Nombre visible","integration.provider":"Proveedor","integration.mode":"Modo","integration.transport":"Transporte","integration.framing":"Encuadre","integration.endpoint":"Endpoint","integration.verifyKind":"Verificación","integration.verifyConfig":"Config de verificación (JSON)","integration.credentials":"Credenciales (JSON)","integration.credentialsKeepHint":"Dejar en blanco para conservar las credenciales selladas","integration.mapping":"Mapeo (JSONPath)","integration.pullConfig":"Config de pull (JSON)","integration.streamConfig":"Config de stream (JSON)","integration.targetType":"Content type destino","integration.routeExtra":"Extra de ruta (JSON)","integration.redeliveryMax":"Reentregas máx.","integration.stack":"Pila","integration.noChannels":"Sin canales de integración","integration.noChannelsDesc":"Añade un canal para recibir webhooks, streams y sondeos entrantes.","integration.channelCreated":"Canal creado","integration.channelUpdated":"Canal actualizado","integration.channelDeleted":"Canal eliminado","integration.failedToCreate":"Error al crear","integration.failedToUpdate":"Error al actualizar","integration.failedToDelete":"Error al eliminar","integration.failedToTest":"Prueba fallida","integration.confirmDeleteChannel":"¿Eliminar el canal «{key}»? Los recibos se conservan para auditoría.","integration.testMapping":"Probar mapeo","integration.sampleBody":"Cuerpo de solicitud de ejemplo","integration.preview":"Vista previa del sobre normalizado","integration.runTest":"Ejecutar","integration.hasCredentials":"Credenciales selladas en el vault","integration.allChannels":"Todos los canales","integration.allStatuses":"Todos los estados","integration.traceIdFilter":"Filtrar por trace ID…","integration.noReceipts":"Sin recibos","integration.noReceiptsDesc":"Las entregas entrantes aparecerán aquí con su traza completa.","integration.receivedAt":"Recibido","integration.attempts":"Intentos","integration.nextRetryAt":"Próximo reintento","integration.noSteps":"Sin pasos registrados","integration.pending":"pendiente","integration.receiptInfo":"Recibo","integration.trace":"Traza","integration.complete":"completo","integration.firstPass":"Primera pasada","integration.asyncChain":"Cadena asíncrona","integration.envelopeSnapshot":"Snapshot del sobre","integration.fullSteps":"Cronología completa de pasos","integration.egressCalls":"Llamadas salientes","integration.noEgress":"Sin llamadas salientes","integration.noEgressDesc":"Las llamadas salientes disparadas por este recibo aparecerán aquí.","integration.replayed":"Reproducido","integration.dryRunDone":"Simulación completa — informe en la traza","integration.failedToReplay":"Error al reproducir","integration.replay":"Reproducir","integration.dryRunReplay":"Simular reproducción","integration.replayConfirmTitle":"¿Reproducir este recibo?","integration.replayConfirmDesc":"La etapa de ruta se reejecuta desde el snapshot del sobre (upsert por external_id).","integration.receiptNotFound":"Recibo no encontrado","integration.newClient":"Nuevo cliente API","integration.editClient":"Editar cliente API","integration.clientKey":"Clave del cliente","integration.baseUrl":"URL base","integration.authConfig":"Config de auth (JSON)","integration.rateLimit":"Límite de tasa (JSON)","integration.ops":"Operaciones (JSON)","integration.opsCount":"Ops","integration.noClients":"Sin clientes API","integration.noClientsDesc":"Añade un cliente API declarativo para llamadas salientes a terceros.","integration.clientCreated":"Cliente API creado","integration.clientUpdated":"Cliente API actualizado","integration.clientDeleted":"Cliente API eliminado","integration.confirmDeleteClient":"¿Eliminar el cliente API «{key}»?","integration.testCall":"Llamada de prueba","integration.selectOp":"Selecciona una op","integration.input":"Entrada (JSON)","integration.result":"Resultado","integration.allClients":"Todos los clientes","integration.egressLog":"Registro saliente","integration.latency":"Latencia","integration.createdAt":"Creado","integration.basicInfo":"Básico","integration.trustSection":"Confianza (L0)","integration.normalizeSection":"Normalización (L2)","integration.routingSection":"Enrutado y fiabilidad (L3/L4)","integration.presetTitle":"Empezar desde un preset","integration.presetPlaceholder":"Elige una configuración probada…","integration.presetHint":"Rellena todo el formulario — adapta después las claves, secretos y el content type destino. Ejemplos de integraciones reales (GitHub / Feishu / DingTalk).","integration.presetApplied":"Preset aplicado — revísalo y ajústalo","integration.jsonInvalid":"JSON inválido","integration.insertExample":"Insertar ejemplo","integration.presetGeneric":"Webhook genérico (sin verificación)","integration.presetGenericDesc":"push simple + mapeo JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + verificación de firma hmac-sha256","integration.presetGithub":"Webhook de GitHub","integration.presetGithubDesc":"x-hub-signature-256, idempotencia por delivery GUID","integration.presetShopify":"Webhook de Shopify","integration.presetShopifyDesc":"HMAC base64, idempotencia por webhook-id","integration.presetDingtalk":"Bot DingTalk Stream","integration.presetDingtalkDesc":"stream ws + framing dispatch + pre_connect","integration.presetFeishu":"Bot Feishu (conexión larga)","integration.presetFeishuDesc":"stream ws + pb-frame + handshake oauth","integration.presetPull":"Sondeo HTTP (cursor)","integration.presetPullDesc":"pull + paginación since_id + checkpoint","integration.presetImap":"Buzón IMAP (nativo)","integration.presetImapDesc":"pull + imap + mime, semántica mark-read, con IDLE"},VC={"layout.brand":"RaisFast","layout.adminPanel":"Painel Administrativo","layout.dashboard":"Painel","layout.content":"Conteúdo","layout.extension":"Extensões","layout.system":"Sistema","layout.posts":"Postagens","layout.categories":"Categorias","layout.tags":"Tags","layout.comments":"Comentários","layout.media":"Mídia","layout.contentTypes":"Tipos de Conteúdo","layout.users":"Usuários","layout.plugins":"Plugins","layout.rolesPermissions":"Funções e Permissões","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"Tokens de API","layout.workflows":"Workflows","layout.auditLog":"Log de Auditoria","layout.options":"Opções","layout.tenant":"Tenant","layout.clearTenant":"Limpar filtro de tenant","layout.all":"Todos","layout.accessDenied":"Acesso Negado","layout.accessDeniedMsg":"Você precisa estar logado como autor ou administrador para acessar esta área.","layout.goToLogin":"Ir para Login","layout.toggleTheme":"Alternar tema","layout.signOut":"Sair","layout.profile":"Perfil","common.loading":"Carregando...","common.save":"Salvar","common.cancel":"Cancelar","common.ok":"OK","common.create":"Criar","common.creating":"Criando...","common.saving":"Salvando...","common.delete":"Excluir","common.confirmDeleteTitle":"Confirmar exclusão","common.edit":"Editar","common.content":"Conteúdo","common.remove":"Remover","common.view":"Ver","common.back":"Voltar","common.actions":"Ações","common.status":"Status","common.retry":"Tentar novamente","common.previous":"Anterior","common.next":"Próximo","common.pageOf":"Página {page} de {total}","common.noData":"Nenhum dado","common.all":"Todos","common.draft":"Rascunho","common.published":"Publicado","common.archived":"Arquivado","common.enabled":"Ativado","common.disabled":"Desativado","common.name":"Nome","common.description":"Descrição","common.enabledCount":"{count} ativados","common.disabledCount":"{count} desativados","common.adminOnly":"Somente Admin","common.adminOnlyMsg":"Apenas administradores podem gerenciar esta seção.","common.backToDashboard":"Voltar ao Painel","common.confirmDelete":"Tem certeza de que deseja excluir este item?","common.notFound":"Não Encontrado","common.failedToLoad":"Falha ao carregar","common.selectStatus":"Selecionar status","common.titleRequired":"O título é obrigatório","common.contentRequired":"O conteúdo é obrigatório","common.nameRequired":"O nome é obrigatório","common.invalidJson":"JSON inválido","common.isRequired":"{field} é obrigatório","common.created":"{name} criado","common.updated":"{name} atualizado","common.deleted":"{name} excluído","common.failedToCreate":"Falha ao criar {name}","common.failedToUpdate":"Falha ao atualizar {name}","common.failedToDelete":"Falha ao excluir {name}","common.none":"Nenhum","common.noDependencies":"Sem dependências","dashboard.title":"Painel","dashboard.posts":"Postagens","dashboard.comments":"Comentários","dashboard.categories":"Categorias","dashboard.tags":"Tags","dashboard.media":"Mídia","dashboard.users":"Usuários","dashboard.contentTypes":"Tipos de Conteúdo","dashboard.postsLast14Days":"Postagens (Últimos 14 Dias)","dashboard.ordersAndProducts14Days":"Pedidos e produtos (últimos 14 dias)","dashboard.viewAll":"Ver Todos","dashboard.failedToLoad":"Falha ao carregar estatísticas do painel. Os dados podem estar desatualizados.","dashboard.noDataYet":"Nenhum dado ainda.","dashboard.recentActivity":"Atividade Recente","dashboard.noActivity":"Nenhuma atividade ainda.","dashboard.type":"Tipo","dashboard.detail":"Detalhe","dashboard.time":"Hora","dashboard.post":"Postagem","dashboard.comment":"Comentário","dashboard.product":"Produto","dashboard.order":"Pedido","dashboard.products":"Produtos","dashboard.orders":"Pedidos","dashboard.revenue":"Receita","dashboard.coupons":"Cupons","dashboard.orderStatus":"Status dos pedidos","dashboard.justNow":"agora","dashboard.minutesAgo":"min","dashboard.hoursAgo":"h","dashboard.daysAgo":"d","posts.title":"Postagens","posts.newPost":"Nova Postagem","posts.editPost":"Editar Postagem","posts.postTitle":"Título da postagem","posts.titleCol":"Título","posts.categoryCol":"Categoria","posts.authorCol":"Autor","posts.createdCol":"Criado","posts.allStatus":"Todos os Status","posts.searchPlaceholder":"Buscar artigos...","posts.content":"Conteúdo","posts.excerpt":"Resumo","posts.briefSummary":"Resumo breve (opcional)","posts.coverImage":"Imagem de capa","posts.writeContent":"Escreva o conteúdo da postagem em Markdown...","posts.selectCategory":"Selecionar categoria","posts.tags":"Tags","posts.slug":"Slug","posts.slugPlaceholder":"Gerado do título se vazio","posts.noTags":"Nenhuma tag disponível","posts.addTag":"Adicionar tag...","posts.createTag":"Criar","posts.createPost":"Criar Postagem","posts.saveChanges":"Salvar Alterações","posts.postCreated":"Postagem criada","posts.postUpdated":"Postagem atualizada","posts.postDeleted":"Postagem excluída","posts.failedToCreate":"Falha ao criar postagem","posts.failedToUpdate":"Falha ao atualizar postagem","posts.failedToDelete":"Falha ao excluir postagem","posts.confirmDelete":"Tem certeza de que deseja excluir esta postagem?","posts.confirmBatchDelete":"Excluir {count} postagens?","posts.batchPublish":"Publicar","posts.batchUnpublish":"Despublicar","posts.batchSuccess":"{count} postagens atualizadas","posts.noPosts":"Nenhuma postagem encontrada.","posts.noPostsDesc":"Crie sua primeira postagem para compartilhar suas ideias.","posts.failedToLoad":"Falha ao carregar postagem.","categories.title":"Categorias","categories.newCategory":"Nova Categoria","categories.createCategory":"Crie uma nova categoria para organizar as postagens.","categories.categoryName":"Nome da categoria","categories.optionalDesc":"Descrição opcional","categories.sortOrder":"Ordem","categories.slug":"Slug","categories.categoryCreated":"Categoria criada","categories.categoryUpdated":"Categoria atualizada","categories.categoryDeleted":"Categoria excluída","categories.failedToCreate":"Falha ao criar categoria","categories.failedToUpdate":"Falha ao atualizar categoria","categories.failedToDelete":"Falha ao excluir categoria","categories.confirmDelete":"Tem certeza de que deseja excluir esta categoria?","categories.confirmDeleteTitle":"Excluir categoria","categories.noCategories":"Sem categorias","categories.noCategoriesDesc":"Organize suas postagens com categorias.","categories.treeTitle":"Categorias","categories.selectCategory":"Selecione uma categoria para ver detalhes","categories.addChild":"Adicionar sub","categories.parent":"Categoria pai","categories.noParent":"Sem pai","categories.editCategory":"Editar categoria","categories.cannotDeleteHasChildren":"Não é possível excluir esta categoria pois ela tem {count} subcategorias. Mova ou exclua-as primeiro.","categories.coverImage":"Imagem de capa","tags.title":"Tags","tags.newTag":"Nova Tag","tags.createTag":"Crie uma nova tag para postagens.","tags.tagName":"Nome da tag","tags.tagCreated":"Tag criada","tags.tagUpdated":"Tag atualizada","tags.tagDeleted":"Tag excluída","tags.failedToCreate":"Falha ao criar tag","tags.failedToUpdate":"Falha ao atualizar tag","tags.failedToDelete":"Falha ao excluir tag","tags.confirmDelete":"Tem certeza de que deseja excluir esta tag?","tags.noTags":"Nenhuma tag encontrada.","tags.noTagsDesc":"Adicione tags para ajudar a organizar e filtrar seu conteúdo.","comments.title":"Comentários","comments.total":"{count} total","comments.all":"Todos","comments.pending":"Pendente","comments.approved":"Aprovado","comments.rejected":"Rejeitado","comments.spam":"Spam","comments.approve":"Aprovar","comments.reject":"Rejeitar","comments.author":"Autor","comments.contentCol":"Conteúdo","comments.post":"Postagem","comments.date":"Data","comments.selected":"{count} selecionados","comments.commentStatusUpdated":"Status do comentário atualizado","comments.commentDeleted":"Comentário excluído","comments.bulkActionDone":"{count} comentário(s) {status}","comments.bulkDeleted":"{count} comentário(s) excluídos","comments.bulkActionFailed":"Falha na ação em lote","comments.bulkDeleteFailed":"Falha ao excluir em lote","comments.failedToUpdateStatus":"Falha ao atualizar status","comments.failedToDelete":"Falha ao excluir comentário","comments.confirmDelete":"Tem certeza de que deseja excluir este comentário?","comments.confirmBulkDelete":"Excluir {count} comentário(s) selecionados?","comments.noComments":"Nenhum comentário encontrado.","comments.noCommentsDesc":"Os comentários aparecerão aqui quando os leitores começarem a interagir.","contentTypes.title":"Tipos de Conteúdo","contentTypes.noFields":"Este tipo de conteúdo não tem campos editáveis.","contentTypes.createContentType":"Criar Tipo de Conteúdo","contentTypes.builder":"Construtor","contentTypes.noContentTypes":"Nenhum tipo de conteúdo ainda","contentTypes.noContentTypesDesc":"Crie seu primeiro tipo de conteúdo para começar a construir seu CMS.","contentTypes.contentTypeDeleted":"Tipo de conteúdo excluído","contentTypes.failedToDelete":"Falha ao excluir","contentTypes.confirmDelete":'Excluir tipo de conteúdo "{singular}"? Isso remove o arquivo de schema, mas NÃO a tabela do banco de dados.',"contentTypes.notFound":"Tipo de Conteúdo Não Encontrado","contentTypes.notFoundMsg":'Tipo de conteúdo "{singular}" não encontrado.',"contentTypes.itemDeleted":"Item excluído","contentTypes.failedToDeleteItem":"Falha ao excluir item","contentTypes.confirmDeleteItem":"Tem certeza de que deseja excluir este item?","contentTypes.batchDeleteSuccess":"{count} itens excluídos","contentTypes.confirmBatchDelete":"Tem certeza de que deseja excluir {count} itens?","contentTypes.export":"Exportar","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} itens exportados","contentTypes.import":"Importar","contentTypes.importJson":"Importar JSON","contentTypes.importCsv":"Importar CSV","contentTypes.importExcel":"Importar Excel","contentTypes.importSuccess":"{count} registros importados","contentTypes.importPartial":"{ok} importados, {failed} com falha","contentTypes.importEmpty":"Nenhum registro encontrado no arquivo","contentTypes.importTooMany":"Muitos registros (máximo {max})","contentTypes.importFailed":"Falha na importação","contentTypes.importTooLarge":"O arquivo excede o limite de 8 MB","contentTypes.noItems":"Nenhum item encontrado.","contentTypes.noItemsDesc":"Crie seu primeiro item para popular esta coleção.","contentTypes.newItem":"Novo {name}","contentTypes.editItem":"Editar {name}","contentTypes.itemNotFound":"Item não encontrado.","contentTypes.fields":"{count} campo(s)","contentTypes.fieldsLabel":"campos","contentTypes.totalRecords":"{count} registros","contentTypes.createdAt":"Criado","contentTypes.updatedAt":"Atualizado","users.title":"Usuários","users.newUser":"Novo Usuário","users.createUser":"Criar Usuário","users.registerNew":"Registre uma nova conta de usuário.","users.username":"Nome de usuário","users.email":"E-mail","users.password":"Senha","users.minChars":"Mínimo de 8 caracteres, deve conter maiúsculas, minúsculas e números","users.role":"Função","users.joined":"Ingressou","users.editRole":"Editar Função do Usuário","users.editUser":"Editar usuário","users.changeRoleFor":"Alterar função de {username} ({email})","users.reader":"Leitor","users.author":"Autor","users.admin":"Admin","users.active":"Ativo","users.suspended":"Suspenso","users.banned":"Banido","users.newPassword":"Nova senha","users.userCreated":"Usuário criado","users.userUpdated":"Usuário atualizado","users.userRoleUpdated":"Função do usuário atualizada","users.failedToCreate":"Falha ao criar usuário","users.failedToUpdate":"Falha ao atualizar usuário","users.noUsers":"Nenhum usuário encontrado.","users.noUsersDesc":"Convide usuários e gerencie suas funções.","users.registeredVia":"Origem","users.userDeleted":"Usuário excluído","users.failedToDelete":"Falha ao excluir usuário","users.confirmDeleteUser":'Excluir usuário "{username}"? Esta ação não pode ser desfeita.',"webhooks.title":"Webhooks","webhooks.newWebhook":"Novo Webhook","webhooks.createWebhook":"Crie uma nova assinatura de webhook para receber notificações de eventos.","webhooks.callbackUrl":"URL de Callback","webhooks.eventsComma":"Eventos (separados por vírgula)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Use * para assinar todos os eventos","webhooks.descriptionOptional":"Descrição (opcional)","webhooks.urlCol":"URL","webhooks.events":"Eventos","webhooks.webhookCreated":"Webhook criado","webhooks.webhookUpdated":"Webhook atualizado","webhooks.webhookDeleted":"Webhook excluído","webhooks.failedToCreate":"Falha ao criar webhook","webhooks.failedToUpdate":"Falha ao atualizar webhook","webhooks.failedToDelete":"Falha ao excluir webhook","webhooks.confirmDelete":"Excluir esta assinatura de webhook?","webhooks.noWebhooks":"Nenhum webhook encontrado.","webhooks.noWebhooksDesc":"Configure webhooks para receber notificações de eventos em tempo real.","tokens.title":"Tokens de API","tokens.newToken":"Novo Token","tokens.createToken":"Criar Token de API","tokens.createTokenDesc":"Gere um novo token de acesso pessoal. O valor do token será exibido apenas uma vez.","tokens.scopesComma":"Escopos (separados por vírgula)","tokens.expiresOptional":"Expira em (opcional)","tokens.tokenCreated":"Token criado","tokens.tokenRevoked":"Token revogado","tokens.failedToCreate":"Falha ao criar token","tokens.failedToRevoke":"Falha ao revogar token","tokens.confirmRevoke":'Revogar token "{name}"? Esta ação não pode ser desfeita.',"tokens.tokenCopied":"Token copiado para a área de transferência","tokens.tokenCreatedCopy":"Token Criado — copie agora!","tokens.copied":"Copiado","tokens.copy":"Copiar","tokens.dismiss":"Descartar","tokens.notShownAgain":"Este token não será exibido novamente. Armazene-o com segurança.","tokens.scopesCol":"Escopos","tokens.expiresCol":"Expira","tokens.lastUsed":"Último Uso","tokens.never":"Nunca","tokens.noTokens":"Nenhum token de API encontrado. Crie um para começar.","tokens.noTokensDesc":"Crie tokens de API para acesso programático.","tokens.description":"Descrição","workflows.title":"Workflows","workflows.instances":"Instâncias","workflows.visualEditor":"Editor Visual","workflows.newWorkflow":"Novo Workflow","workflows.createWorkflow":"Criar Workflow","workflows.createWorkflowDesc":"Defina um novo workflow com etapas. As etapas são configuradas como JSON.","workflows.stepsJson":"Etapas (JSON)","workflows.stepFormat":'Cada etapa: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow criado","workflows.workflowDeleted":"Workflow excluído","workflows.failedToCreate":"Falha ao criar workflow","workflows.failedToDelete":"Falha ao excluir workflow","workflows.confirmDelete":'Excluir workflow "{name}"?',"workflows.noWorkflows":"Nenhum workflow encontrado. Crie um para começar.","workflows.noWorkflowsDesc":"Defina workflows para automatizar seu pipeline de conteúdo.","workflows.steps":"{count} etapas","workflows.workflowStarted":"Workflow iniciado","workflows.editor.title":"Editor de Workflow","workflows.editor.newWorkflow":"Novo Workflow","workflows.editor.stepName":"Nome da etapa","workflows.editor.branchesJson":"Ramificações (array JSON)","workflows.editor.connectEdges":"Conecte arestas deste nó para definir ramificações.","workflows.editor.configJson":"Configuração (JSON)","workflows.editor.apply":"Aplicar","workflows.editor.deleteStep":"Excluir etapa","workflows.editor.addStep":"Adicionar Etapa","workflows.editor.invalidJson":"JSON inválido na configuração","workflows.editor.workflowSaved":"Workflow salvo","workflows.editor.failedToSave":"Falha ao salvar workflow","audit.title":"Log de Auditoria","audit.clearFilters":"Limpar Filtros","audit.noLogs":"Nenhuma entrada de log de auditoria encontrada.","audit.action":"Ação","audit.actor":"Ator","audit.resource":"Recurso","audit.timestamp":"Data/Hora","options.title":"Opções","options.saved":"Opções salvas","options.failedToSave":"Falha ao salvar opções","plugins.title":"Plugins","plugins.loaded":"{count} carregados","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Saúde","plugins.pluginEnabled":"Plugin ativado","plugins.pluginDisabled":"Plugin desativado","plugins.pluginReloaded":"Plugin recarregado","plugins.pluginRemoved":"Plugin removido","plugins.failedToEnable":"Falha ao ativar plugin","plugins.failedToDisable":"Falha ao desativar plugin","plugins.failedToReload":"Falha ao recarregar plugin","plugins.failedToRemove":"Falha ao remover plugin","plugins.noPlugins":"Nenhum plugin carregado.","plugins.placePlugins":"Coloque os plugins no diretório de plugins configurado.","plugins.confirmRemove":'Remover plugin "{name}"? Isso irá descarregá-lo da memória.',"plugins.autoDisabled":"Auto-desativado","plugins.tooManyErrors":"Muitos erros","plugins.errorCount":"{count} erro(s)","plugins.errorsOccurred":"Ocorreram erros","plugins.calls":"{count} chamadas","plugins.idle":"Inativo","plugins.notFound":"Plugin Não Encontrado","plugins.notFoundMsg":"Plugin não encontrado.","plugins.backToPlugins":"Voltar para Plugins","plugins.general":"Geral","plugins.version":"Versão","plugins.reload":"Recarregar","plugins.remove":"Remover","plugins.errorTracking":"Rastreamento de erros e status de auto-desativação","plugins.healthy":"Saudável","plugins.errorCountLabel":"Contagem de Erros","plugins.lastError":"Último Erro","plugins.lastErrorAt":"Último Erro Em","plugins.autoDisabledLabel":"Auto-desativado","plugins.permissions":"Permissões","permissions.declaredFromManifest":"Permissões declaradas no manifesto do plugin","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Pontos de hook registrados e suas métricas de execução","plugins.noHooks":"Nenhum hook registrado.","plugins.totalCalls":"Total de Chamadas","plugins.totalErrors":"Total de Erros","plugins.totalDuration":"Duração Total","plugins.noMetrics":"Sem métricas ainda","plugins.performance":"Visão Geral de Desempenho","plugins.maxMemory":"Memória Máxima","plugins.timeout":"Timeout","plugins.default":"Padrão","media.title":"Mídia","media.files":"{count} arquivos","media.searchFiles":"Pesquisar arquivos...","media.fileDeleted":"Arquivo excluído","media.failedToDelete":"Falha ao excluir arquivo","media.confirmDelete":"Tem certeza de que deseja excluir este arquivo?","media.date":"Data","media.size":"Tamanho","media.ascending":"Crescente","media.descending":"Decrescente","field.mediaUrl":"URL da Mídia","field.startWriting":"Comece a escrever...","field.yes":"Sim","field.no":"Não","field.relatedItemId":"ID do item relacionado","cron.title":"Tarefas Cron","cron.newCron":"Nova Tarefa Cron","cron.expression":"Expressão","cron.handler":"Handler","cron.lastRun":"Última Execução","cron.nextRun":"Próxima Execução","cron.cronCreated":"Tarefa cron criada","cron.cronDeleted":"Tarefa cron excluída","cron.failedToCreate":"Falha ao criar tarefa cron","cron.failedToDelete":"Falha ao excluir tarefa cron","cron.noCrons":"Nenhuma tarefa cron encontrada.","cron.confirmDelete":'Excluir tarefa cron "{name}"?',"tenants.title":"Tenants","tenants.newTenant":"Novo Tenant","tenants.createTenant":"Crie um novo tenant para isolamento multi-tenant.","tenants.tenantName":"Nome do tenant","tenants.slug":"Slug","tenants.domain":"Domínio","tenants.owner":"Proprietário","tenants.tenantCreated":"Tenant criado","tenants.tenantUpdated":"Tenant atualizado","tenants.tenantDeleted":"Tenant excluído","tenants.failedToCreate":"Falha ao criar tenant","tenants.failedToUpdate":"Falha ao atualizar tenant","tenants.failedToDelete":"Falha ao excluir tenant","tenants.confirmDelete":"Tem certeza de que deseja excluir este tenant?","tenants.noTenants":"Nenhum tenant encontrado.","tenants.noTenantsDesc":"Crie tenants para SaaS multi-tenant.","rbac.title":"Funções e Permissões","rbac.roles":"Funções","rbac.newRole":"Nova Função","rbac.createRole":"Crie uma nova função para controle de acesso.","rbac.roleName":"Nome da função","rbac.roleDesc":"Descrição da função","rbac.roleCreated":"Função criada","rbac.roleUpdated":"Função atualizada","rbac.roleDeleted":"Função excluída","rbac.failedToCreate":"Falha ao criar função","rbac.failedToUpdate":"Falha ao atualizar função","rbac.failedToDelete":"Falha ao excluir função","rbac.confirmDelete":'Excluir função "{name}"? Isso removerá todas as permissões associadas.',"rbac.systemRole":"Sistema","rbac.permissions":"Permissões","rbac.addPermission":"Adicionar Permissão","rbac.action":"Ação","rbac.subject":"Recurso","rbac.noRoles":"Nenhuma função encontrada.","builder.title":"Construtor de Tipos de Conteúdo","builder.editContentType":"Editar Tipo de Conteúdo","builder.createContentType":"Criar Tipo de Conteúdo","builder.baseConfig":"Configuração Base","builder.singularName":"Nome Singular","builder.pluralName":"Nome Plural","builder.tableName":"Nome da Tabela","builder.fieldsSection":"Campos","builder.addField":"Adicionar Campo","builder.preview":"Pré-visualização","builder.save":"Salvar Tipo de Conteúdo","builder.saving":"Salvando...","builder.saved":"Tipo de conteúdo salvo","builder.failedToSave":"Falha ao salvar tipo de conteúdo","builder.confirmDeleteField":'Excluir campo "{name}"?',"builder.text":"Texto","builder.richText":"Texto Rico","builder.email":"E-mail","builder.password":"Senha","builder.uid":"UID","builder.integer":"Inteiro","builder.bigInt":"Big Int","builder.decimal":"Decimal","builder.float":"Float","builder.boolean":"Booleano","builder.date":"Data","builder.datetime":"Data e Hora","builder.time":"Hora","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relação","builder.mediaType":"Mídia","builder.link":"Link","builder.required":"Obrigatório","builder.unique":"Único","builder.privateField":"Privado","builder.immutable":"Imutável","builder.label":"Rótulo","builder.defaultValue":"Valor Padrão","builder.maxLength":"Comprimento Máximo","builder.minValue":"Mínimo","builder.maxValue":"Máximo","builder.enumValues":"Valores Enum (separados por vírgula)","builder.relationType":"Tipo de Relação","builder.relationTarget":"Tabela de Destino","builder.foreignKey":"Chave Estrangeira","builder.throughTable":"Tabela Intermediária","builder.draftPublish":"Rascunho/Publicar","builder.timestamps":"Timestamps","builder.softDelete":"Exclusão Suave","builder.slugField":"Campo Slug","media.name":"Nome","media.type":"Tipo","media.other":"Outro","media.uploadFailed":"Falha no upload","media.dropFiles":"Solte arquivos aqui, cole ou {browse}","media.uploading":"Enviando {count} arquivo(s)...","media.done":"Concluído","media.failedUpload":"Falhou","media.urlCopied":"URL copiada","media.copyUrl":"Copiar URL","media.download":"Baixar","media.dimensions":"Dimensões","media.uploaded":"Enviado","media.urlLabel":"URL","media.noVideoSupport":"Seu navegador não suporta vídeo.","media.downloadFile":"Baixar arquivo","workflows.instances.title":"Instâncias de Workflow","workflows.instances.showLogs":"Mostrar logs","workflows.instances.hideLogs":"Ocultar logs","workflows.instances.currentStep":"Atual","workflows.instances.context":"Contexto","workflows.instances.stepLogs":"Logs da Etapa ({count})","workflows.instances.noStepLogs":"Nenhum log de etapa.","workflows.instances.noInstances":"Nenhuma instância de workflow encontrada.","workflows.instances.instanceCount":"{count} instância(s)","workflows.instances.definitions":"Definições","workflows.instances.filterStatus":"Filtrar status","workflows.instances.cancelled":"Instância cancelada","workflows.editor.editStep":"Editar Etapa","workflows.editor.name":"Nome","workflows.editor.type":"Tipo","workflows.editor.backToList":"Voltar à lista","workflows.editor.workflowName":"Nome do workflow...","workflows.editor.failedToLoad":"Falha ao carregar workflow","workflows.editor.immutableNotice":"Definições de workflow são imutáveis. Crie uma nova para alterar as etapas.","workflows.editor.untitled":"Workflow Sem Título","workflows.editor.save":"Salvar","workflows.editor.saving":"Salvando...","cron.createSchedule":"Criar Agendamento Cron","cron.labelField":"Rótulo","cron.jobType":"Tipo de Tarefa","cron.cronExpression":"Expressão Cron (6 segmentos)","cron.format":"Formato: seg min hora dia mês dia-semana","cron.payload":"Payload (JSON, opcional)","cron.schedules":"{count} agendamento(s)","cron.schedule":"Agendamento","cron.pluginCol":"Plugin","cron.scheduleCreated":"Agendamento criado","cron.scheduleToggled":"Agendamento alternado","cron.scheduleDeleted":"Agendamento excluído","cron.scheduleUpdated":"Agendamento atualizado","cron.noCronSchedules":"Nenhum agendamento cron.","cron.seedHint":"Crie um acima ou ative CRON_SEED_ENABLED para semear os padrões.","cron.confirmDeleteSchedule":'Excluir agendamento "{name}"? Esta ação não pode ser desfeita.',"cron.scheduleNotFound":"Agendamento Não Encontrado","cron.backToCronSchedules":"Voltar para Agendamentos Cron","cron.scheduleDetails":"Detalhes do Agendamento","cron.cronExpression7":"6 segmentos: seg min hora dia mês dia-semana","cron.builtIn":"Integrado","cron.executionHistory":"Histórico de Execução","cron.recentLogs":"Logs de execução recentes deste agendamento","cron.cleanupOld":"Limpar Antigos","cron.cleanedUp":"{count} log(s) antigo(s) limpo(s)","cron.noExecutionLogs":"Nenhum log de execução ainda.","cron.success":"Sucesso","cron.failedStatus":"Falhou","cron.running":"Em Execução","cron.newSchedule":"Novo Agendamento","cron.idField":"ID","cron.started":"Iniciado","cron.finished":"Finalizado","cron.duration":"Duração","cron.error":"Erro","cron.created":"Criado","cron.updated":"Atualizado","tenants.createForIsolation":"Crie um novo tenant para isolamento de dados.","tenants.cannotDeleteDefault":"Não é possível excluir o tenant padrão","tenants.confirmDeleteMsg":"Excluir este tenant? Os dados pertencentes a este tenant NÃO serão removidos.","tenants.created":"Criado","rbac.addRoleDesc":"Adicione uma nova função ao sistema.","rbac.updateRoleDesc":'Atualizar função "{name}".',"rbac.deleteRoleTitle":"Excluir Função","rbac.deleteRoleConfirm":'Tem certeza de que deseja excluir "{name}"? Esta ação não pode ser desfeita.',"rbac.addPermissionTitle":"Adicionar Permissão","rbac.addPermissionDesc":'Conceda uma nova permissão a "{name}". Use * para curinga.',"rbac.fieldsCol":"Campos","rbac.conditionsCol":"Condições","rbac.fieldsOptional":"Campos (separados por vírgula, opcional)","rbac.removePermissionTitle":"Remover Permissão","rbac.removePermissionDesc":"Remover {action} em {subject}?","rbac.noPermissions":"Nenhuma permissão configurada.","rbac.selectRole":"Selecione uma função para ver as permissões","rbac.prev":"Anterior","options.noChanges":"Nenhuma alteração","options.noOptions":"Nenhuma opção disponível.","options.reset":"Redefinir","options.saveChanges":"Salvar Alterações","audit.failedToLoad":"Falha ao carregar log de auditoria. Tente novamente.","audit.noEntries":"Nenhuma entrada de auditoria encontrada.","audit.noEntriesDesc":"Entradas de auditoria aparecerão conforme as ações são realizadas.","audit.timeCol":"Hora","audit.subjectId":"ID do Sujeito","audit.detailCol":"Detalhe","audit.system":"sistema","audit.from":"De","audit.to":"Para","audit.search":"Pesquisar","audit.clear":"Limpar","audit.today":"Hoje","builder.untitled":"Tipo de Conteúdo Sem Título","builder.fieldCount":"{count} campo(s)","builder.fieldList":"Campos","builder.protocols":"Protocolos","builder.systemFields":"Campos do sistema","builder.system":"sistema","builder.newField":"Novo campo","builder.addAnotherField":"Adicionar outro campo","builder.addAField":"Adicionar um campo","builder.chooseFieldType":"Escolha um tipo de campo para adicionar ao seu tipo de conteúdo.","builder.fieldConfiguration":"Configuração do Campo","builder.fieldName":"Nome do Campo","builder.fieldTypeLabel":"Tipo do Campo","builder.displayLabel":"Rótulo de exibição","builder.helpText":"Texto de ajuda","builder.removeField":"Remover Campo","builder.removeFieldConfirm":"Remover este campo?","builder.noAdditionalOptions":"Nenhuma opção adicional para este tipo de campo.","builder.acceptedTypes":"Tipos Aceitos","builder.maxCount":"Quantidade Máxima","builder.target":"Destino","builder.valuesComma":"Valores (separados por vírgula)","builder.describeContentType":"Descreva este tipo de conteúdo...","builder.contentTypeUpdated":"Tipo de conteúdo atualizado","builder.contentTypeCreated":"Tipo de conteúdo criado","builder.newFieldCategory":"Número","layout.crm":"CRM","layout.pages":"Páginas","layout.reusableBlocks":"Blocos","crm.dashboard":"Painel do CRM","crm.pipeline":"Pipeline","crm.contacts":"Contatos","crm.companies":"Empresas","crm.deals":"Negócios","crm.activities":"Atividades","crm.notes":"Notas","crm.reports":"Relatórios","crm.totalCompanies":"Total de Empresas","crm.totalContacts":"Total de Contatos","crm.openDeals":"Negócios Abertos","crm.wonDeals":"Negócios Ganhos","crm.pipelineValue":"Valor do Pipeline","crm.weightedValue":"Valor Ponderado","crm.winRate":"Taxa de Conversão","crm.avgDealSize":"Tamanho Médio do Negócio","crm.recentActivities":"Atividades da Semana","crm.totalActivities":"Total de Atividades","crm.leaderboard":"Ranking","crm.noData":"Nenhum dado disponível.","crm.newDeal":"Novo Negócio","crm.createDeal":"Criar Negócio","crm.dealTitle":"Título","crm.dealTitlePlaceholder":"Informe o título do negócio...","crm.amount":"Valor","crm.probability":"Probabilidade","crm.stage":"Estágio","crm.advanceStage":"Avançar para o próximo estágio","crm.totalValue":"Valor Total","crm.dealCreated":"Negócio criado","crm.failedToCreateDeal":"Falha ao criar negócio","crm.dealStageUpdated":"Estágio do negócio atualizado","crm.failedToUpdateStage":"Falha ao atualizar estágio","crm.titleRequired":"O título é obrigatório","crm.newContact":"Novo Contato","crm.editContact":"Editar Contato","crm.contact":"Contato","crm.name":"Nome","crm.email":"E-mail","crm.phone":"Telefone","crm.company":"Empresa","crm.source":"Origem","crm.lifecycleStage":"Estágio do Ciclo de Vida","crm.noContacts":"Nenhum contato encontrado.","crm.firstName":"Nome","crm.lastName":"Sobrenome","crm.jobTitle":"Cargo","crm.newCompany":"Nova Empresa","crm.editCompany":"Editar Empresa","crm.companyName":"Nome da Empresa","crm.industry":"Indústria","crm.size":"Porte","crm.website":"Website","crm.city":"Cidade","crm.country":"País","crm.noCompanies":"Nenhuma empresa encontrada.","crm.deal":"Negócio","crm.editDeal":"Editar Negócio","crm.closeDate":"Data de Fechamento","crm.lossReason":"Motivo da Perda","crm.noDeals":"Nenhum negócio encontrado.","crm.dealInfo":"Informações do Negócio","crm.newActivity":"Nova Atividade","crm.editActivity":"Editar Atividade","crm.activity":"Atividade","crm.type":"Tipo","crm.subject":"Assunto","crm.content":"Conteúdo","crm.date":"Data","crm.duration":"Duração","crm.outcome":"Resultado","crm.noActivities":"Nenhuma atividade encontrada.","crm.newNote":"Nova Nota","crm.editNote":"Editar Nota","crm.note":"Nota","crm.relatedTo":"Relacionado a","crm.pinned":"Fixado","crm.createdAt":"Criado","crm.noNotes":"Nenhuma nota encontrada.","crm.contentRequired":"O conteúdo é obrigatório","crm.relatedContactId":"ID do Contato Relacionado","crm.relatedCompanyId":"ID da Empresa Relacionada","crm.relatedDealId":"ID do Negócio Relacionado","crm.contactInfo":"Informações do Contato","crm.timeline":"Linha do Tempo","crm.noTimeline":"Nenhum evento na linha do tempo.","crm.addNote":"Adicionar Nota","crm.notePlaceholder":"Digite uma nota...","crm.lifecycleUpdated":"Estágio do ciclo de vida atualizado","crm.failedToUpdateLifecycle":"Falha ao atualizar estágio do ciclo de vida","crm.companyInfo":"Informações da Empresa","crm.funnelReport":"Relatório de Funil","crm.activityReport":"Relatório de Atividades","crm.conversionRate":"Conversão","crm.byType":"Por Tipo","crm.byOutcome":"Por Resultado","pages.title":"Páginas","pages.newPage":"Nova Página","pages.editPage":"Editar Página","pages.pageDeleted":"Página excluída","pages.pageCreated":"Página criada","pages.pageUpdated":"Página atualizada","pages.failedToDelete":"Falha ao excluir página","pages.failedToCreate":"Falha ao criar página","pages.failedToUpdate":"Falha ao atualizar página","pages.statusUpdated":"Status da página atualizado","pages.failedToUpdateStatus":"Falha ao atualizar status","pages.confirmDelete":"Tem certeza de que deseja excluir esta página?","pages.noPages":"Nenhuma página encontrada.","pages.noPagesDesc":"Crie sua primeira página para começar a construir seu site.","pages.noBlocks":"Nenhum bloco reutilizável ainda.","pages.noBlocksDesc":"Crie blocos reutilizáveis para usar em suas páginas.","pages.publish":"Publicar","pages.unpublish":"Despublicar","pages.preview":"Pré-visualizar","pages.slug":"Slug","pages.template":"Template","pages.createdAt":"Criado","pages.basicInfo":"Informações Básicas","pages.titleLabel":"Título","pages.titlePlaceholder":"Informe o título da página...","pages.coverImage":"Imagem de Capa","pages.metaTitle":"Meta Título","pages.metaDescription":"Meta Descrição","pages.ogImage":"Imagem OG","pages.content":"Conteúdo","pages.blockMode":"Blocos","pages.saveDraft":"Salvar Rascunho","pages.writeContent":"Escreva o conteúdo da página...","pages.addBlock":"Adicionar Bloco","pages.chooseBlock":"Escolha um tipo de bloco","pages.reusableBlocks":"Blocos Reutilizáveis","pages.createReusable":"Criar Bloco Reutilizável","pages.editReusable":"Editar Bloco Reutilizável","pages.rbName":"Nome","pages.rbType":"Tipo de Bloco","pages.rbDescription":"Descrição","pages.rbContent":"Conteúdo","command.search":"Pesquisar...","command.placeholder":"Digite um comando ou pesquise...","command.noResults":"Nenhum resultado encontrado.","command.actions":"Ações","command.switchToLight":"Mudar para Modo Claro","command.switchToDark":"Mudar para Modo Escuro","layout.ecommerce":"E-Commerce","layout.products":"Produtos","layout.productCategories":"Categorias de produtos","layout.orders":"Pedidos","layout.finance":"Finanças","layout.currencies":"Moedas","layout.wallets":"Carteiras","layout.paymentChannels":"Canais de pagamento","layout.productComments":"Avaliações","layout.coupons":"Cupons","layout.shippingTemplates":"Modelos de envio","products.title":"Produtos","products.newProduct":"Novo Produto","products.editProduct":"Editar Produto","products.productTitle":"Título do Produto","products.price":"Preço","products.originalPrice":"Preço Original","products.stock":"Estoque","products.sales":"Vendas","products.coverUrl":"URL da Capa","products.description":"Descrição","products.content":"Conteúdo","products.slug":"Slug","products.status":"Status","products.category":"Categoria","products.unit":"Unidade","products.minPurchase":"Compra Mínima","products.maxPurchase":"Compra Máxima","products.sortOrder":"Ordem","products.metaTitle":"Meta Título","products.metaDescription":"Meta Descrição","products.productCreated":"Produto criado","products.productUpdated":"Produto atualizado","products.productDeleted":"Produto excluído","products.batchDeleted":"{{count}} produtos excluídos","products.batchSuccess":"{{count}} produtos atualizados","products.batchActivate":"Ativar","products.batchDeactivate":"Desativar","products.failedToCreate":"Falha ao criar produto","products.failedToUpdate":"Falha ao atualizar produto","products.failedToDelete":"Falha ao excluir produto","products.confirmDelete":"Tem certeza de que deseja excluir este produto?","products.confirmBatchDelete":"Tem certeza de que deseja excluir {{count}} produtos?","products.noProducts":"Nenhum produto ainda","products.noProductsDesc":"Crie seu primeiro produto para começar a vender.","products.allStatus":"Todos os Status","products.searchPlaceholder":"Pesquisar produto...","products.active":"Ativo","products.draft":"Rascunho","products.archived":"Arquivado","products.general":"Geral","products.media":"Mídia","products.pricing":"Preços","products.purchaseSettings":"Configurações de compra","products.summary":"Resumo","products.phTitle":"Título do produto...","products.phSummary":"Breve descrição do produto...","products.images":"Imagens","products.cover":"Capa","products.dropImages":"Solte, cole ou clique para enviar imagens","productCategories.categoryName":"Nome da categoria","productCategories.newCategory":"Nova categoria","productCategories.createCategory":"Criar categoria","productCategories.editCategory":"Editar categoria","productCategories.optionalDesc":"Descrição (opcional)","productCategories.parent":"Categoria pai","productCategories.noParent":"Sem pai","productCategories.sortOrder":"Ordem","productCategories.slug":"Slug","productCategories.noCategories":"Sem categorias","productCategories.noCategoriesDesc":"Crie sua primeira categoria de produtos para organizá-los.","productCategories.categoryCreated":"Categoria criada","productCategories.categoryUpdated":"Categoria atualizada","productCategories.categoryDeleted":"Categoria excluída","productCategories.failedToCreate":"Falha ao criar categoria","productCategories.failedToUpdate":"Falha ao atualizar categoria","productCategories.failedToDelete":"Falha ao excluir categoria","productCategories.confirmDelete":"Tem certeza de que deseja excluir esta categoria?","productCategories.confirmDeleteTitle":"Excluir categoria","productCategories.cannotDeleteHasChildren":"Não é possível excluir esta categoria pois ela tem {count} subcategorias. Mova ou exclua-as primeiro.","productCategories.treeTitle":"Categorias","productCategories.selectCategory":"Selecione uma categoria para ver detalhes","productCategories.addChild":"Adicionar sub","orders.title":"Pedidos","orders.orderNo":"Nº do Pedido","orders.buyer":"Comprador","orders.total":"Total","orders.status":"Status","orders.items":"Itens","orders.remark":"Observação","orders.adminRemark":"Observação do Admin","orders.createdAt":"Criado","orders.actions":"Ações","orders.allStatus":"Todos os Status","orders.searchPlaceholder":"Pesquisar n° pedido, comprador...","orders.pending":"Pendente","orders.paid":"Pago","orders.shipped":"Enviado","orders.completed":"Concluído","orders.cancelled":"Cancelado","orders.refunded":"Reembolsado","orders.confirmPay":"Confirmar pagamento?","orders.orderPaid":"Pedido marcado como pago","orders.confirmShip":"Enviar este pedido?","orders.orderShipped":"Pedido enviado","orders.confirmCancel":"Cancelar este pedido?","orders.orderCancelled":"Pedido cancelado","orders.confirmRefund":"Reembolsar este pedido?","orders.orderRefunded":"Pedido reembolsado","orders.failedToPay":"Falha ao marcar como pago","orders.failedToShip":"Falha ao enviar","orders.failedToCancel":"Falha ao cancelar","orders.failedToRefund":"Falha ao reembolsar","orders.noOrders":"Nenhum pedido ainda","orders.noOrdersDesc":"Os pedidos aparecerão aqui quando os clientes realizarem compras.","orders.trackingNo":"Nº de Rastreio","orders.carrier":"Transportadora","orders.shipInfo":"Informações de Envio","orders.buyerInfo":"Informações do Comprador","orders.shippingAddress":"Endereço de Entrega","orders.orderDetail":"Detalhes do Pedido","orders.stats.totalOrders":"Total de Pedidos","orders.stats.totalRevenue":"Receita Total","orders.stats.pending":"Pendentes","orders.stats.completed":"Concluídos","orders.stats.todayOrders":"Pedidos hoje","orders.stats.todayRevenue":"Receita hoje","payments.title":"Canais de Pagamento","payments.newChannel":"Novo Canal","payments.provider":"Provedor","payments.name":"Nome do Canal","payments.mode":"Modo","payments.active":"Ativo","payments.live":"Produção","payments.test":"Teste","payments.credentials":"Credenciais","payments.webhookSecret":"Segredo do Webhook","payments.settings":"Configurações","payments.channelCreated":"Canal de pagamento criado","payments.channelUpdated":"Canal de pagamento atualizado","payments.channelDeleted":"Canal de pagamento excluído","payments.failedToCreate":"Falha ao criar canal de pagamento","payments.failedToUpdate":"Falha ao atualizar canal de pagamento","payments.failedToDelete":"Falha ao excluir canal de pagamento","payments.confirmDelete":"Excluir este canal de pagamento?","payments.noChannels":"Nenhum canal de pagamento","payments.noChannelsDesc":"Adicione um canal de pagamento para começar a receber pagamentos.","payments.selectProvider":"Selecionar provedor...","payments.testMode":"Modo de teste (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"ID do comerciante","payments.fPrivateKey":"Chave privada RSA","payments.fSerialNo":"Nº de série do certificado","payments.fWebhookSecret":"Segredo de assinatura webhook","payments.fAlipayPublicKey":"Chave pública Alipay","payments.fPlatformCert":"Certificado da plataforma (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"URL de notificação","payments.phSk":"sk_live_... ou sk_test_...","payments.phRsaKey":"Cole a chave privada RSA (PEM ou Base64)","payments.phUrl":"https://...","payments.editChannel":"Editar canal","payments.leaveBlankToKeep":"Deixe em branco para manter","layout.paymentOrders":"Ordens de pagamento","paymentOrders.title":"Ordens de pagamento","paymentOrders.orderId":"Pedido","paymentOrders.title_col":"Título","paymentOrders.amount":"Valor","paymentOrders.provider":"Provedor","paymentOrders.noOrders":"Sem ordens de pagamento","paymentOrders.noOrdersDesc":"As ordens de pagamento aparecerão aqui quando os clientes pagarem.","paymentOrders.refund":"Reembolsar","paymentOrders.refundTitle":"Reembolso","paymentOrders.refundOrder":"Reembolsar pedido","paymentOrders.refundAmount":"Valor do reembolso","paymentOrders.refundReason":"Motivo","paymentOrders.refundSuccess":"Reembolso enviado","paymentOrders.refundFailed":"Falha ao reembolsar","layout.paymentTransactions":"Transações de pagamento","paymentTransactions.title":"Transações de pagamento","paymentTransactions.orderId":"Pedido","paymentTransactions.type":"Tipo","paymentTransactions.amount":"Valor","paymentTransactions.providerTxId":"ID da transação do provedor","paymentTransactions.noTransactions":"Sem transações","paymentTransactions.noTransactionsDesc":"As transações aparecerão aqui quando ocorrerem eventos de pagamento.","currencies.title":"Moedas","currencies.newCurrency":"Nova Moeda","currencies.code":"Código","currencies.name":"Nome","currencies.decimals":"Decimais","currencies.active":"Ativa","currencies.currencyCreated":"Moeda criada","currencies.currencyUpdated":"Moeda atualizada","currencies.failedToCreate":"Falha ao criar moeda","currencies.failedToUpdate":"Falha ao atualizar moeda","currencies.noCurrencies":"Nenhuma moeda","currencies.noCurrenciesDesc":"Adicione uma moeda para habilitar suporte a múltiplas moedas.","wallets.title":"Carteiras","wallets.user":"Usuário","wallets.currency":"Moeda","wallets.balance":"Saldo","wallets.frozen":"Congelado","wallets.credit":"Creditar","wallets.debit":"Debitar","wallets.transactions":"Transações","wallets.amount":"Valor","wallets.type":"Tipo","wallets.reference":"Referência","wallets.creditTitle":"Creditar Carteira","wallets.debitTitle":"Debitar Carteira","wallets.userId":"ID do Usuário","wallets.remark":"Observação","wallets.creditSuccess":"Carteira creditada","wallets.debitSuccess":"Carteira debitada","wallets.failedToCredit":"Falha ao creditar carteira","wallets.failedToDebit":"Falha ao debitar carteira","wallets.noWallets":"Nenhuma carteira","wallets.noWalletsDesc":"Carteiras são criadas quando os usuários recebem sua primeira transação.","wallets.noTransactions":"Nenhuma transação ainda.","adminLogin.title":"Painel Administrativo","adminLogin.subtitle":"Entre com suas credenciais de administrador","adminLogin.email":"E-mail","adminLogin.password":"Senha","adminLogin.submit":"Entrar","adminLogin.loading":"Entrando…","adminLogin.error":"E-mail ou senha inválidos","adminLogin.footer":"RaisFast Admin — apenas pessoal autorizado","adminLogin.sessionExpired":"Sua sessão expirou. Por favor, entre novamente.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Integração","layout.channels":"Canais","layout.receipts":"Recibos","layout.apiClients":"Clientes API","common.reset":"Redefinir","common.close":"Fechar","integration.newChannel":"Novo canal","integration.editChannel":"Editar canal","integration.channelKey":"Chave do canal","integration.displayName":"Nome de exibição","integration.provider":"Provedor","integration.mode":"Modo","integration.transport":"Transporte","integration.framing":"Enquadramento","integration.endpoint":"Endpoint","integration.verifyKind":"Verificação","integration.verifyConfig":"Config de verificação (JSON)","integration.credentials":"Credenciais (JSON)","integration.credentialsKeepHint":"Deixe em branco para manter as credenciais seladas","integration.mapping":"Mapeamento (JSONPath)","integration.pullConfig":"Config de pull (JSON)","integration.streamConfig":"Config de stream (JSON)","integration.targetType":"Content type de destino","integration.routeExtra":"Extra de rota (JSON)","integration.redeliveryMax":"Max. de reentregas","integration.stack":"Pilha","integration.noChannels":"Sem canais de integração","integration.noChannelsDesc":"Adicione um canal para receber webhooks, streams e polls de entrada.","integration.channelCreated":"Canal criado","integration.channelUpdated":"Canal atualizado","integration.channelDeleted":"Canal excluído","integration.failedToCreate":"Falha ao criar","integration.failedToUpdate":"Falha ao atualizar","integration.failedToDelete":"Falha ao excluir","integration.failedToTest":"Teste falhou","integration.confirmDeleteChannel":'Excluir o canal "{key}"? Os recibos permanecem para auditoria.',"integration.testMapping":"Testar mapeamento","integration.sampleBody":"Corpo de requisição de exemplo","integration.preview":"Pré-visualização do envelope normalizado","integration.runTest":"Executar","integration.hasCredentials":"Credenciais seladas no vault","integration.allChannels":"Todos os canais","integration.allStatuses":"Todos os status","integration.traceIdFilter":"Filtrar por trace ID…","integration.noReceipts":"Sem recibos","integration.noReceiptsDesc":"As entregas de entrada aparecerão aqui com o rastreio completo.","integration.receivedAt":"Recebido","integration.attempts":"Tentativas","integration.nextRetryAt":"Próxima tentativa","integration.noSteps":"Nenhuma etapa registrada","integration.pending":"pendente","integration.receiptInfo":"Recibo","integration.trace":"Rastreio","integration.complete":"completo","integration.firstPass":"Primeira passagem","integration.asyncChain":"Cadeia assíncrona","integration.envelopeSnapshot":"Snapshot do envelope","integration.fullSteps":"Cronologia completa de etapas","integration.egressCalls":"Chamadas de saída","integration.noEgress":"Sem chamadas de saída","integration.noEgressDesc":"As chamadas de saída disparadas por este recibo aparecerão aqui.","integration.replayed":"Reproduzido","integration.dryRunDone":"Simulação concluída — relatório no rastreio","integration.failedToReplay":"Falha ao reproduzir","integration.replay":"Reproduzir","integration.dryRunReplay":"Simular reprodução","integration.replayConfirmTitle":"Reproduzir este recibo?","integration.replayConfirmDesc":"A etapa de rota é reexecutada a partir do snapshot do envelope (upsert por external_id).","integration.receiptNotFound":"Recibo não encontrado","integration.newClient":"Novo cliente API","integration.editClient":"Editar cliente API","integration.clientKey":"Chave do cliente","integration.baseUrl":"URL base","integration.authConfig":"Config de auth (JSON)","integration.rateLimit":"Limite de taxa (JSON)","integration.ops":"Operações (JSON)","integration.opsCount":"Ops","integration.noClients":"Sem clientes API","integration.noClientsDesc":"Adicione um cliente API declarativo para chamadas de saída.","integration.clientCreated":"Cliente API criado","integration.clientUpdated":"Cliente API atualizado","integration.clientDeleted":"Cliente API excluído","integration.confirmDeleteClient":'Excluir o cliente API "{key}"?',"integration.testCall":"Chamada de teste","integration.selectOp":"Selecione uma op","integration.input":"Entrada (JSON)","integration.result":"Resultado","integration.allClients":"Todos os clientes","integration.egressLog":"Registro de saída","integration.latency":"Latência","integration.createdAt":"Criado","integration.basicInfo":"Básico","integration.trustSection":"Confiança (L0)","integration.normalizeSection":"Normalização (L2)","integration.routingSection":"Roteamento e confiabilidade (L3/L4)","integration.presetTitle":"Começar de um preset","integration.presetPlaceholder":"Escolha uma configuração testada…","integration.presetHint":"Preenche todo o formulário — ajuste depois chaves, segredos e o content type alvo. Exemplos de integrações reais (GitHub / Feishu / DingTalk).","integration.presetApplied":"Preset aplicado — revise e ajuste","integration.jsonInvalid":"JSON inválido","integration.insertExample":"Inserir exemplo","integration.presetGeneric":"Webhook genérico (sem verificação)","integration.presetGenericDesc":"push simples + mapeamento JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + verificação de assinatura hmac-sha256","integration.presetGithub":"Webhook do GitHub","integration.presetGithubDesc":"x-hub-signature-256, idempotência por delivery GUID","integration.presetShopify":"Webhook do Shopify","integration.presetShopifyDesc":"HMAC base64, idempotência por webhook-id","integration.presetDingtalk":"Bot DingTalk Stream","integration.presetDingtalkDesc":"stream ws + framing dispatch + pre_connect","integration.presetFeishu":"Bot Feishu (conexão longa)","integration.presetFeishuDesc":"stream ws + pb-frame + handshake oauth","integration.presetPull":"Polling HTTP (cursor)","integration.presetPullDesc":"pull + paginação since_id + checkpoint","integration.presetImap":"Caixa IMAP (nativa)","integration.presetImapDesc":"pull + imap + mime, semântica mark-read, com IDLE"},WC={"layout.brand":"RaisFast","layout.adminPanel":"Admin-Panel","layout.dashboard":"Dashboard","layout.content":"Inhalt","layout.extension":"Erweiterungen","layout.system":"System","layout.posts":"Beiträge","layout.categories":"Kategorien","layout.tags":"Schlagwörter","layout.comments":"Kommentare","layout.media":"Medien","layout.contentTypes":"Inhaltstypen","layout.users":"Benutzer","layout.plugins":"Plugins","layout.rolesPermissions":"Rollen & Berechtigungen","layout.cron":"Cron","layout.tenants":"Mandanten","layout.webhooks":"Webhooks","layout.apiTokens":"API-Token","layout.workflows":"Workflows","layout.auditLog":"Audit-Log","layout.options":"Einstellungen","layout.tenant":"Mandant","layout.clearTenant":"Mandantenfilter zurücksetzen","layout.all":"Alle","layout.accessDenied":"Zugriff verweigert","layout.accessDeniedMsg":"Sie müssen als Autor oder Administrator angemeldet sein, um auf diesen Bereich zuzugreifen.","layout.goToLogin":"Zum Login","layout.toggleTheme":"Design umschalten","layout.signOut":"Abmelden","layout.profile":"Profil","common.loading":"Laden...","common.save":"Speichern","common.cancel":"Abbrechen","common.ok":"OK","common.create":"Erstellen","common.creating":"Wird erstellt...","common.saving":"Wird gespeichert...","common.delete":"Löschen","common.confirmDeleteTitle":"Löschen bestätigen","common.edit":"Bearbeiten","common.content":"Inhalt","common.remove":"Entfernen","common.view":"Anzeigen","common.back":"Zurück","common.actions":"Aktionen","common.status":"Status","common.retry":"Erneut versuchen","common.previous":"Zurück","common.next":"Weiter","common.pageOf":"Seite {page} von {total}","common.noData":"Keine Daten","common.all":"Alle","common.draft":"Entwurf","common.published":"Veröffentlicht","common.archived":"Archiviert","common.enabled":"Aktiviert","common.disabled":"Deaktiviert","common.name":"Name","common.description":"Beschreibung","common.enabledCount":"{count} aktiviert","common.disabledCount":"{count} deaktiviert","common.adminOnly":"Nur für Administratoren","common.adminOnlyMsg":"Nur Administratoren können diesen Bereich verwalten.","common.backToDashboard":"Zum Dashboard","common.confirmDelete":"Sind Sie sicher, dass Sie dieses Element löschen möchten?","common.notFound":"Nicht gefunden","common.failedToLoad":"Laden fehlgeschlagen","common.selectStatus":"Status auswählen","common.titleRequired":"Titel ist erforderlich","common.contentRequired":"Inhalt ist erforderlich","common.nameRequired":"Name ist erforderlich","common.invalidJson":"Ungültiges JSON","common.isRequired":"{field} ist erforderlich","common.created":"{name} erstellt","common.updated":"{name} aktualisiert","common.deleted":"{name} gelöscht","common.failedToCreate":"{name} konnte nicht erstellt werden","common.failedToUpdate":"{name} konnte nicht aktualisiert werden","common.failedToDelete":"{name} konnte nicht gelöscht werden","common.none":"Keine","common.noDependencies":"Keine Abhängigkeiten","dashboard.title":"Dashboard","dashboard.posts":"Beiträge","dashboard.comments":"Kommentare","dashboard.categories":"Kategorien","dashboard.tags":"Schlagwörter","dashboard.media":"Medien","dashboard.users":"Benutzer","dashboard.contentTypes":"Inhaltstypen","dashboard.postsLast14Days":"Beiträge (letzte 14 Tage)","dashboard.ordersAndProducts14Days":"Bestellungen & Produkte (letzte 14 Tage)","dashboard.viewAll":"Alle anzeigen","dashboard.failedToLoad":"Dashboard-Statistiken konnten nicht geladen werden. Daten sind möglicherweise veraltet.","dashboard.noDataYet":"Noch keine Daten.","dashboard.recentActivity":"Letzte Aktivitäten","dashboard.noActivity":"Noch keine Aktivitäten.","dashboard.type":"Typ","dashboard.detail":"Detail","dashboard.time":"Zeit","dashboard.post":"Beitrag","dashboard.comment":"Kommentar","dashboard.product":"Produkt","dashboard.order":"Bestellung","dashboard.products":"Produkte","dashboard.orders":"Bestellungen","dashboard.revenue":"Umsatz","dashboard.coupons":"Gutscheine","dashboard.orderStatus":"Bestellstatus","dashboard.justNow":"gerade eben","dashboard.minutesAgo":"Min.","dashboard.hoursAgo":"Std.","dashboard.daysAgo":"Tg.","posts.title":"Beiträge","posts.newPost":"Neuer Beitrag","posts.editPost":"Beitrag bearbeiten","posts.postTitle":"Beitragstitel","posts.titleCol":"Titel","posts.categoryCol":"Kategorie","posts.authorCol":"Autor","posts.createdCol":"Erstellt","posts.allStatus":"Alle Status","posts.searchPlaceholder":"Beiträge suchen...","posts.content":"Inhalt","posts.excerpt":"Auszug","posts.briefSummary":"Kurze Zusammenfassung (optional)","posts.coverImage":"Titelbild","posts.writeContent":"Schreiben Sie Ihren Beitrag in Markdown...","posts.selectCategory":"Kategorie auswählen","posts.tags":"Schlagwörter","posts.slug":"Slug","posts.slugPlaceholder":"Leer = automatisch aus Titel generiert","posts.noTags":"Keine Schlagwörter verfügbar","posts.addTag":"Tag hinzufügen...","posts.createTag":"Erstellen","posts.createPost":"Beitrag erstellen","posts.saveChanges":"Änderungen speichern","posts.postCreated":"Beitrag erstellt","posts.postUpdated":"Beitrag aktualisiert","posts.postDeleted":"Beitrag gelöscht","posts.failedToCreate":"Beitrag konnte nicht erstellt werden","posts.failedToUpdate":"Beitrag konnte nicht aktualisiert werden","posts.failedToDelete":"Beitrag konnte nicht gelöscht werden","posts.confirmDelete":"Sind Sie sicher, dass Sie diesen Beitrag löschen möchten?","posts.confirmBatchDelete":"{count} Beiträge wirklich löschen?","posts.batchPublish":"Veröffentlichen","posts.batchUnpublish":"Veröffentlichung aufheben","posts.batchSuccess":"{count} Beiträge aktualisiert","posts.noPosts":"Keine Beiträge gefunden.","posts.noPostsDesc":"Erstellen Sie Ihren ersten Blogbeitrag, um Ihre Ideen zu teilen.","posts.failedToLoad":"Beitrag konnte nicht geladen werden.","categories.title":"Kategorien","categories.newCategory":"Neue Kategorie","categories.createCategory":"Erstellen Sie eine neue Kategorie zur Organisation von Beiträgen.","categories.categoryName":"Kategoriename","categories.optionalDesc":"Optionale Beschreibung","categories.sortOrder":"Sortierreihenfolge","categories.slug":"Slug","categories.categoryCreated":"Kategorie erstellt","categories.categoryUpdated":"Kategorie aktualisiert","categories.categoryDeleted":"Kategorie gelöscht","categories.failedToCreate":"Kategorie konnte nicht erstellt werden","categories.failedToUpdate":"Kategorie konnte nicht aktualisiert werden","categories.failedToDelete":"Kategorie konnte nicht gelöscht werden","categories.confirmDelete":"Sind Sie sicher, dass Sie diese Kategorie löschen möchten?","categories.confirmDeleteTitle":"Kategorie löschen","categories.noCategories":"Keine Kategorien","categories.noCategoriesDesc":"Organisieren Sie Ihre Beiträge mit Kategorien.","categories.treeTitle":"Kategorien","categories.selectCategory":"Wählen Sie eine Kategorie für Details","categories.addChild":"Unterkategorie","categories.parent":"Übergeordnete Kategorie","categories.noParent":"Keine","categories.editCategory":"Kategorie bearbeiten","categories.cannotDeleteHasChildren":"Diese Kategorie kann nicht gelöscht werden, da sie {count} Unterkategorien hat. Bitte verschieben oder löschen Sie diese zuerst.","categories.coverImage":"Titelbild","tags.title":"Schlagwörter","tags.newTag":"Neues Schlagwort","tags.createTag":"Erstellen Sie ein neues Schlagwort für Beiträge.","tags.tagName":"Schlagwortname","tags.tagCreated":"Schlagwort erstellt","tags.tagUpdated":"Schlagwort aktualisiert","tags.tagDeleted":"Schlagwort gelöscht","tags.failedToCreate":"Schlagwort konnte nicht erstellt werden","tags.failedToUpdate":"Schlagwort konnte nicht aktualisiert werden","tags.failedToDelete":"Schlagwort konnte nicht gelöscht werden","tags.confirmDelete":"Sind Sie sicher, dass Sie dieses Schlagwort löschen möchten?","tags.noTags":"Keine Schlagwörter gefunden.","tags.noTagsDesc":"Fügen Sie Schlagwörter hinzu, um Ihren Inhalt zu organisieren und zu filtern.","comments.title":"Kommentare","comments.total":"{count} gesamt","comments.all":"Alle","comments.pending":"Ausstehend","comments.approved":"Genehmigt","comments.rejected":"Abgelehnt","comments.spam":"Spam","comments.approve":"Genehmigen","comments.reject":"Ablehnen","comments.author":"Autor","comments.contentCol":"Inhalt","comments.post":"Beitrag","comments.date":"Datum","comments.selected":"{count} ausgewählt","comments.commentStatusUpdated":"Kommentarstatus aktualisiert","comments.commentDeleted":"Kommentar gelöscht","comments.bulkActionDone":"{count} Kommentar(e) {status}","comments.bulkDeleted":"{count} Kommentar(e) gelöscht","comments.bulkActionFailed":"Massenaktion fehlgeschlagen","comments.bulkDeleteFailed":"Massenlöschung fehlgeschlagen","comments.failedToUpdateStatus":"Status konnte nicht aktualisiert werden","comments.failedToDelete":"Kommentar konnte nicht gelöscht werden","comments.confirmDelete":"Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?","comments.confirmBulkDelete":"{count} ausgewählte Kommentar(e) löschen?","comments.noComments":"Keine Kommentare gefunden.","comments.noCommentsDesc":"Kommentare werden hier angezeigt, sobald Leser beginnen zu interagieren.","contentTypes.title":"Inhaltstypen","contentTypes.noFields":"Dieser Inhaltstyp hat keine bearbeitbaren Felder.","contentTypes.createContentType":"Inhaltstyp erstellen","contentTypes.builder":"Builder","contentTypes.noContentTypes":"Noch keine Inhaltstypen","contentTypes.noContentTypesDesc":"Erstellen Sie Ihren ersten Inhaltstyp, um Ihr CMS aufzubauen.","contentTypes.contentTypeDeleted":"Inhaltstyp gelöscht","contentTypes.failedToDelete":"Löschen fehlgeschlagen","contentTypes.confirmDelete":'Inhaltstyp "{singular}" löschen? Dies entfernt die Schemadatei, aber NICHT die Datenbanktabelle.',"contentTypes.notFound":"Inhaltstyp nicht gefunden","contentTypes.notFoundMsg":'Inhaltstyp "{singular}" nicht gefunden.',"contentTypes.itemDeleted":"Element gelöscht","contentTypes.failedToDeleteItem":"Element konnte nicht gelöscht werden","contentTypes.confirmDeleteItem":"Sind Sie sicher, dass Sie dieses Element löschen möchten?","contentTypes.batchDeleteSuccess":"{count} Elemente gelöscht","contentTypes.confirmBatchDelete":"Möchten Sie wirklich {count} Elemente löschen?","contentTypes.export":"Exportieren","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} Elemente exportiert","contentTypes.import":"Importieren","contentTypes.importJson":"JSON importieren","contentTypes.importCsv":"CSV importieren","contentTypes.importExcel":"Excel importieren","contentTypes.importSuccess":"{count} Datensätze importiert","contentTypes.importPartial":"{ok} importiert, {failed} fehlgeschlagen","contentTypes.importEmpty":"Keine Datensätze in der Datei gefunden","contentTypes.importTooMany":"Zu viele Datensätze (maximal {max})","contentTypes.importFailed":"Import fehlgeschlagen","contentTypes.importTooLarge":"Datei überschreitet das 8-MB-Limit","contentTypes.noItems":"Keine Elemente gefunden.","contentTypes.noItemsDesc":"Erstellen Sie Ihr erstes Element, um diese Sammlung zu füllen.","contentTypes.newItem":"Neue/r {name}","contentTypes.editItem":"{name} bearbeiten","contentTypes.itemNotFound":"Element nicht gefunden.","contentTypes.fields":"{count} Feld(er)","contentTypes.fieldsLabel":"Felder","contentTypes.totalRecords":"{count} Datensätze","contentTypes.createdAt":"Erstellt","contentTypes.updatedAt":"Aktualisiert","users.title":"Benutzer","users.newUser":"Neuer Benutzer","users.createUser":"Benutzer erstellen","users.registerNew":"Neues Benutzerkonto registrieren.","users.username":"Benutzername","users.email":"E-Mail","users.password":"Passwort","users.minChars":"Mindestens 8 Zeichen, muss Groß-, Kleinbuchstaben und Ziffern enthalten","users.role":"Rolle","users.joined":"Beigetreten","users.editRole":"Benutzerrolle bearbeiten","users.editUser":"Benutzer bearbeiten","users.changeRoleFor":"Rolle für {username} ({email}) ändern","users.reader":"Leser","users.author":"Autor","users.admin":"Administrator","users.active":"Aktiv","users.suspended":"Gesperrt","users.banned":"Verbannt","users.newPassword":"Neues Passwort","users.userCreated":"Benutzer erstellt","users.userUpdated":"Benutzer aktualisiert","users.userRoleUpdated":"Benutzerrolle aktualisiert","users.failedToCreate":"Benutzer konnte nicht erstellt werden","users.failedToUpdate":"Benutzer konnte nicht aktualisiert werden","users.noUsers":"Keine Benutzer gefunden.","users.noUsersDesc":"Laden Sie Benutzer ein und verwalten Sie deren Rollen.","users.registeredVia":"Registrierung über","users.userDeleted":"Benutzer gelöscht","users.failedToDelete":"Benutzer konnte nicht gelöscht werden","users.confirmDeleteUser":'Benutzer "{username}" wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.',"webhooks.title":"Webhooks","webhooks.newWebhook":"Neuer Webhook","webhooks.createWebhook":"Erstellen Sie ein neues Webhook-Abonnement, um Ereignisbenachrichtigungen zu erhalten.","webhooks.callbackUrl":"Callback-URL","webhooks.eventsComma":"Ereignisse (kommagetrennt)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"* verwenden, um alle Ereignisse zu abonnieren","webhooks.descriptionOptional":"Beschreibung (optional)","webhooks.urlCol":"URL","webhooks.events":"Ereignisse","webhooks.webhookCreated":"Webhook erstellt","webhooks.webhookUpdated":"Webhook aktualisiert","webhooks.webhookDeleted":"Webhook gelöscht","webhooks.failedToCreate":"Webhook konnte nicht erstellt werden","webhooks.failedToUpdate":"Webhook konnte nicht aktualisiert werden","webhooks.failedToDelete":"Webhook konnte nicht gelöscht werden","webhooks.confirmDelete":"Dieses Webhook-Abonnement löschen?","webhooks.noWebhooks":"Keine Webhooks gefunden.","webhooks.noWebhooksDesc":"Richten Sie Webhooks ein, um Echtzeit-Ereignisbenachrichtigungen zu erhalten.","tokens.title":"API-Token","tokens.newToken":"Neues Token","tokens.createToken":"API-Token erstellen","tokens.createTokenDesc":"Erstellen Sie ein neues persönliches Zugriffstoken. Der Token-Wert wird nur einmal angezeigt.","tokens.scopesComma":"Bereiche (kommagetrennt)","tokens.expiresOptional":"Läuft ab am (optional)","tokens.tokenCreated":"Token erstellt","tokens.tokenRevoked":"Token widerrufen","tokens.failedToCreate":"Token konnte nicht erstellt werden","tokens.failedToRevoke":"Token konnte nicht widerrufen werden","tokens.confirmRevoke":'Token "{name}" widerrufen? Dies kann nicht rückgängig gemacht werden.',"tokens.tokenCopied":"Token in die Zwischenablage kopiert","tokens.tokenCreatedCopy":"Token erstellt — jetzt kopieren!","tokens.copied":"Kopiert","tokens.copy":"Kopieren","tokens.dismiss":"Schließen","tokens.notShownAgain":"Dieses Token wird nicht erneut angezeigt. Bewahren Sie es sicher auf.","tokens.scopesCol":"Bereiche","tokens.expiresCol":"Ablaufdatum","tokens.lastUsed":"Zuletzt verwendet","tokens.never":"Nie","tokens.noTokens":"Keine API-Token gefunden. Erstellen Sie eines, um zu beginnen.","tokens.noTokensDesc":"Erstellen Sie API-Token für den programmatischen Zugriff.","tokens.description":"Beschreibung","workflows.title":"Workflows","workflows.instances":"Instanzen","workflows.visualEditor":"Visueller Editor","workflows.newWorkflow":"Neuer Workflow","workflows.createWorkflow":"Workflow erstellen","workflows.createWorkflowDesc":"Definieren Sie einen neuen Workflow mit Schritten. Schritte werden als JSON konfiguriert.","workflows.stepsJson":"Schritte (JSON)","workflows.stepFormat":'Jeder Schritt: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow erstellt","workflows.workflowDeleted":"Workflow gelöscht","workflows.failedToCreate":"Workflow konnte nicht erstellt werden","workflows.failedToDelete":"Workflow konnte nicht gelöscht werden","workflows.confirmDelete":'Workflow "{name}" löschen?',"workflows.noWorkflows":"Keine Workflows gefunden. Erstellen Sie einen, um zu beginnen.","workflows.noWorkflowsDesc":"Definieren Sie Workflows zur Automatisierung Ihrer Inhaltspipeline.","workflows.steps":"{count} Schritte","workflows.workflowStarted":"Workflow gestartet","workflows.editor.title":"Workflow-Editor","workflows.editor.newWorkflow":"Neuer Workflow","workflows.editor.stepName":"Schrittname","workflows.editor.branchesJson":"Verzweigungen (JSON-Array)","workflows.editor.connectEdges":"Verbinden Sie Kanten von diesem Knoten, um Verzweigungen zu definieren.","workflows.editor.configJson":"Konfiguration (JSON)","workflows.editor.apply":"Anwenden","workflows.editor.deleteStep":"Schritt löschen","workflows.editor.addStep":"Schritt hinzufügen","workflows.editor.invalidJson":"Ungültiges JSON in der Konfiguration","workflows.editor.workflowSaved":"Workflow gespeichert","workflows.editor.failedToSave":"Workflow konnte nicht gespeichert werden","audit.title":"Audit-Log","audit.clearFilters":"Filter zurücksetzen","audit.noLogs":"Keine Audit-Log-Einträge gefunden.","audit.action":"Aktion","audit.actor":"Akteur","audit.resource":"Ressource","audit.timestamp":"Zeitstempel","options.title":"Einstellungen","options.saved":"Einstellungen gespeichert","options.failedToSave":"Einstellungen konnten nicht gespeichert werden","plugins.title":"Plugins","plugins.loaded":"{count} geladen","plugins.plugin":"Plugin","plugins.runtime":"Laufzeitumgebung","plugins.hooks":"Hooks","plugins.health":"Zustand","plugins.pluginEnabled":"Plugin aktiviert","plugins.pluginDisabled":"Plugin deaktiviert","plugins.pluginReloaded":"Plugin neu geladen","plugins.pluginRemoved":"Plugin entfernt","plugins.failedToEnable":"Plugin konnte nicht aktiviert werden","plugins.failedToDisable":"Plugin konnte nicht deaktiviert werden","plugins.failedToReload":"Plugin konnte nicht neu geladen werden","plugins.failedToRemove":"Plugin konnte nicht entfernt werden","plugins.noPlugins":"Keine Plugins geladen.","plugins.placePlugins":"Platzieren Sie Plugins im konfigurierten Plugin-Verzeichnis.","plugins.confirmRemove":'Plugin "{name}" entfernen? Es wird aus dem Speicher entladen.',"plugins.autoDisabled":"Automatisch deaktiviert","plugins.tooManyErrors":"Zu viele Fehler","plugins.errorCount":"{count} Fehler","plugins.errorsOccurred":"Fehler aufgetreten","plugins.calls":"{count} Aufrufe","plugins.idle":"Inaktiv","plugins.notFound":"Plugin nicht gefunden","plugins.notFoundMsg":"Plugin nicht gefunden.","plugins.backToPlugins":"Zurück zu Plugins","plugins.general":"Allgemein","plugins.version":"Version","plugins.reload":"Neu laden","plugins.remove":"Entfernen","plugins.errorTracking":"Fehlerverfolgung und automatischer Deaktivierungsstatus","plugins.healthy":"Gesund","plugins.errorCountLabel":"Fehleranzahl","plugins.lastError":"Letzter Fehler","plugins.lastErrorAt":"Letzter Fehler am","plugins.autoDisabledLabel":"Automatisch deaktiviert","plugins.permissions":"Berechtigungen","permissions.declaredFromManifest":"Deklarierte Berechtigungen aus dem Plugin-Manifest","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Registrierte Hook-Punkte und deren Ausführungsmetriken","plugins.noHooks":"Keine Hooks registriert.","plugins.totalCalls":"Gesamtaufrufe","plugins.totalErrors":"Gesamtfehler","plugins.totalDuration":"Gesamtdauer","plugins.noMetrics":"Noch keine Metriken","plugins.performance":"Leistungsübersicht","plugins.maxMemory":"Max. Speicher","plugins.timeout":"Zeitüberschreitung","plugins.default":"Standard","media.title":"Medien","media.files":"{count} Dateien","media.searchFiles":"Dateien suchen...","media.fileDeleted":"Datei gelöscht","media.failedToDelete":"Datei konnte nicht gelöscht werden","media.confirmDelete":"Sind Sie sicher, dass Sie diese Datei löschen möchten?","media.date":"Datum","media.size":"Größe","media.ascending":"Aufsteigend","media.descending":"Absteigend","field.mediaUrl":"Medien-URL","field.startWriting":"Schreiben Sie...","field.yes":"Ja","field.no":"Nein","field.relatedItemId":"Verknüpfte Element-ID","cron.title":"Cron-Jobs","cron.newCron":"Neuer Cron-Job","cron.expression":"Ausdruck","cron.handler":"Handler","cron.lastRun":"Letzte Ausführung","cron.nextRun":"Nächste Ausführung","cron.cronCreated":"Cron-Job erstellt","cron.cronDeleted":"Cron-Job gelöscht","cron.failedToCreate":"Cron-Job konnte nicht erstellt werden","cron.failedToDelete":"Cron-Job konnte nicht gelöscht werden","cron.noCrons":"Keine Cron-Jobs gefunden.","cron.confirmDelete":'Cron-Job "{name}" löschen?',"tenants.title":"Mandanten","tenants.newTenant":"Neuer Mandant","tenants.createTenant":"Erstellen Sie einen neuen Mandanten für mandantenweite Isolation.","tenants.tenantName":"Mandantenname","tenants.slug":"Slug","tenants.domain":"Domäne","tenants.owner":"Besitzer","tenants.tenantCreated":"Mandant erstellt","tenants.tenantUpdated":"Mandant aktualisiert","tenants.tenantDeleted":"Mandant gelöscht","tenants.failedToCreate":"Mandant konnte nicht erstellt werden","tenants.failedToUpdate":"Mandant konnte nicht aktualisiert werden","tenants.failedToDelete":"Mandant konnte nicht gelöscht werden","tenants.confirmDelete":"Sind Sie sicher, dass Sie diesen Mandanten löschen möchten?","tenants.noTenants":"Keine Mandanten gefunden.","tenants.noTenantsDesc":"Erstellen Sie Mandanten für Multi-Mandanten-SaaS.","rbac.title":"Rollen & Berechtigungen","rbac.roles":"Rollen","rbac.newRole":"Neue Rolle","rbac.createRole":"Erstellen Sie eine neue Rolle für die Zugriffskontrolle.","rbac.roleName":"Rollenname","rbac.roleDesc":"Rollenbeschreibung","rbac.roleCreated":"Rolle erstellt","rbac.roleUpdated":"Rolle aktualisiert","rbac.roleDeleted":"Rolle gelöscht","rbac.failedToCreate":"Rolle konnte nicht erstellt werden","rbac.failedToUpdate":"Rolle konnte nicht aktualisiert werden","rbac.failedToDelete":"Rolle konnte nicht gelöscht werden","rbac.confirmDelete":'Rolle "{name}" löschen? Dies entfernt alle zugehörigen Berechtigungen.',"rbac.systemRole":"System","rbac.permissions":"Berechtigungen","rbac.addPermission":"Berechtigung hinzufügen","rbac.action":"Aktion","rbac.subject":"Subjekt","rbac.noRoles":"Keine Rollen gefunden.","builder.title":"Inhaltstyp-Builder","builder.editContentType":"Inhaltstyp bearbeiten","builder.createContentType":"Inhaltstyp erstellen","builder.baseConfig":"Grundkonfiguration","builder.singularName":"Singularname","builder.pluralName":"Pluralname","builder.tableName":"Tabellenname","builder.fieldsSection":"Felder","builder.addField":"Feld hinzufügen","builder.preview":"Vorschau","builder.save":"Inhaltstyp speichern","builder.saving":"Wird gespeichert...","builder.saved":"Inhaltstyp gespeichert","builder.failedToSave":"Inhaltstyp konnte nicht gespeichert werden","builder.confirmDeleteField":'Feld "{name}" löschen?',"builder.text":"Text","builder.richText":"Rich Text","builder.email":"E-Mail","builder.password":"Passwort","builder.uid":"UID","builder.integer":"Ganzzahl","builder.bigInt":"Big Int","builder.decimal":"Dezimal","builder.float":"Gleitkommazahl","builder.boolean":"Boolesch","builder.date":"Datum","builder.datetime":"Datum/Uhrzeit","builder.time":"Uhrzeit","builder.enumType":"Enum","builder.jsonType":"JSON","builder.relation":"Relation","builder.mediaType":"Medien","builder.link":"Link","builder.required":"Pflichtfeld","builder.unique":"Eindeutig","builder.privateField":"Privat","builder.immutable":"Unveränderlich","builder.label":"Beschriftung","builder.defaultValue":"Standardwert","builder.maxLength":"Max. Länge","builder.minValue":"Min","builder.maxValue":"Max","builder.enumValues":"Enum-Werte (kommagetrennt)","builder.relationType":"Relationstyp","builder.relationTarget":"Zieltabelle","builder.foreignKey":"Fremdschlüssel","builder.throughTable":"Durchlauftabelle","builder.draftPublish":"Entwurf/Veröffentlichung","builder.timestamps":"Zeitstempel","builder.softDelete":"Weiches Löschen","builder.slugField":"Slug-Feld","media.name":"Name","media.type":"Typ","media.other":"Sonstige","media.uploadFailed":"Upload fehlgeschlagen","media.dropFiles":"Dateien hierher ziehen, einfügen oder {browse}","media.uploading":"{count} Datei(en) werden hochgeladen...","media.done":"Fertig","media.failedUpload":"Fehlgeschlagen","media.urlCopied":"URL kopiert","media.copyUrl":"URL kopieren","media.download":"Herunterladen","media.dimensions":"Abmessungen","media.uploaded":"Hochgeladen","media.urlLabel":"URL","media.noVideoSupport":"Ihr Browser unterstützt kein Video.","media.downloadFile":"Datei herunterladen","workflows.instances.title":"Workflow-Instanzen","workflows.instances.showLogs":"Logs anzeigen","workflows.instances.hideLogs":"Logs ausblenden","workflows.instances.currentStep":"Aktuell","workflows.instances.context":"Kontext","workflows.instances.stepLogs":"Schritt-Logs ({count})","workflows.instances.noStepLogs":"Keine Schritt-Logs.","workflows.instances.noInstances":"Keine Workflow-Instanzen gefunden.","workflows.instances.instanceCount":"{count} Instanz(en)","workflows.instances.definitions":"Definitionen","workflows.instances.filterStatus":"Status filtern","workflows.instances.cancelled":"Instanz abgebrochen","workflows.editor.editStep":"Schritt bearbeiten","workflows.editor.name":"Name","workflows.editor.type":"Typ","workflows.editor.backToList":"Zurück zur Liste","workflows.editor.workflowName":"Workflow-Name...","workflows.editor.failedToLoad":"Workflow konnte nicht geladen werden","workflows.editor.immutableNotice":"Workflow-Definitionen sind unveränderlich. Erstellen Sie eine neue, um Schritte zu ändern.","workflows.editor.untitled":"Unbenannter Workflow","workflows.editor.save":"Speichern","workflows.editor.saving":"Wird gespeichert...","cron.createSchedule":"Cron-Zeitplan erstellen","cron.labelField":"Bezeichnung","cron.jobType":"Job-Typ","cron.cronExpression":"Cron-Ausdruck (7-Segment)","cron.format":"Format: Sek Min Std Tag Monat Wochentag","cron.payload":"Nutzdaten (JSON, optional)","cron.schedules":"{count} Zeitplan/Zeitpläne","cron.schedule":"Zeitplan","cron.pluginCol":"Plugin","cron.scheduleCreated":"Zeitplan erstellt","cron.scheduleToggled":"Zeitplan umgeschaltet","cron.scheduleDeleted":"Zeitplan gelöscht","cron.scheduleUpdated":"Zeitplan aktualisiert","cron.noCronSchedules":"Keine Cron-Zeitpläne.","cron.seedHint":"Erstellen Sie einen oben oder aktivieren Sie CRON_SEED_ENABLED, um Standardwerte zu laden.","cron.confirmDeleteSchedule":'Zeitplan "{name}" löschen? Dies kann nicht rückgängig gemacht werden.',"cron.scheduleNotFound":"Zeitplan nicht gefunden","cron.backToCronSchedules":"Zurück zu Cron-Zeitplänen","cron.scheduleDetails":"Zeitplandetails","cron.cronExpression7":"7-Segment: Sek Min Std Tag Monat Wochentag","cron.builtIn":"Integriert","cron.executionHistory":"Ausführungsverlauf","cron.recentLogs":"Aktuelle Ausführungsprotokolle für diesen Zeitplan","cron.cleanupOld":"Alte bereinigen","cron.cleanedUp":"{count} alte(s) Log(s) bereinigt","cron.noExecutionLogs":"Noch keine Ausführungsprotokolle.","cron.success":"Erfolg","cron.failedStatus":"Fehlgeschlagen","cron.running":"Läuft","cron.newSchedule":"Neuer Zeitplan","cron.idField":"ID","cron.started":"Gestartet","cron.finished":"Abgeschlossen","cron.duration":"Dauer","cron.error":"Fehler","cron.created":"Erstellt","cron.updated":"Aktualisiert","tenants.createForIsolation":"Erstellen Sie einen neuen Mandanten zur Datenisolation.","tenants.cannotDeleteDefault":"Standardmandant kann nicht gelöscht werden","tenants.confirmDeleteMsg":"Diesen Mandanten löschen? Daten dieses Mandanten werden NICHT entfernt.","tenants.created":"Erstellt","rbac.addRoleDesc":"Neue Rolle zum System hinzufügen.","rbac.updateRoleDesc":'Rolle "{name}" aktualisieren.',"rbac.deleteRoleTitle":"Rolle löschen","rbac.deleteRoleConfirm":'Sind Sie sicher, dass Sie "{name}" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.',"rbac.addPermissionTitle":"Berechtigung hinzufügen","rbac.addPermissionDesc":'Gewähren Sie eine neue Berechtigung für "{name}". Verwenden Sie * als Platzhalter.',"rbac.fieldsCol":"Felder","rbac.conditionsCol":"Bedingungen","rbac.fieldsOptional":"Felder (kommagetrennt, optional)","rbac.removePermissionTitle":"Berechtigung entfernen","rbac.removePermissionDesc":"{action} auf {subject} entfernen?","rbac.noPermissions":"Keine Berechtigungen konfiguriert.","rbac.selectRole":"Rolle auswählen, um Berechtigungen anzuzeigen","rbac.prev":"Zurück","options.noChanges":"Keine Änderungen","options.noOptions":"Keine Einstellungen verfügbar.","options.reset":"Zurücksetzen","options.saveChanges":"Änderungen speichern","audit.failedToLoad":"Audit-Log konnte nicht geladen werden. Bitte versuchen Sie es erneut.","audit.noEntries":"Keine Audit-Einträge gefunden.","audit.noEntriesDesc":"Audit-Einträge werden angezeigt, sobald Aktionen ausgeführt werden.","audit.timeCol":"Zeit","audit.subjectId":"Subjekt-ID","audit.detailCol":"Detail","audit.system":"System","audit.from":"Von","audit.to":"Bis","audit.search":"Suchen","audit.clear":"Löschen","audit.today":"Heute","builder.untitled":"Unbenannter Inhaltstyp","builder.fieldCount":"{count} Feld(er)","builder.fieldList":"Felder","builder.protocols":"Protokolle","builder.systemFields":"Systemfelder","builder.system":"System","builder.newField":"Neues Feld","builder.addAnotherField":"Weiteres Feld hinzufügen","builder.addAField":"Feld hinzufügen","builder.chooseFieldType":"Wählen Sie einen Feldtyp, der Ihrem Inhaltstyp hinzugefügt werden soll.","builder.fieldConfiguration":"Feldkonfiguration","builder.fieldName":"Feldname","builder.fieldTypeLabel":"Feldtyp","builder.displayLabel":"Anzeigebeschriftung","builder.helpText":"Hilfetext","builder.removeField":"Feld entfernen","builder.removeFieldConfirm":"Dieses Feld entfernen?","builder.noAdditionalOptions":"Keine zusätzlichen Optionen für diesen Feldtyp.","builder.acceptedTypes":"Akzeptierte Typen","builder.maxCount":"Max. Anzahl","builder.target":"Ziel","builder.valuesComma":"Werte (kommagetrennt)","builder.describeContentType":"Beschreiben Sie diesen Inhaltstyp...","builder.contentTypeUpdated":"Inhaltstyp aktualisiert","builder.contentTypeCreated":"Inhaltstyp erstellt","builder.newFieldCategory":"Zahl","layout.crm":"CRM","layout.pages":"Seiten","layout.reusableBlocks":"Blöcke","crm.dashboard":"CRM-Dashboard","crm.pipeline":"Pipeline","crm.contacts":"Kontakte","crm.companies":"Unternehmen","crm.deals":"Deals","crm.activities":"Aktivitäten","crm.notes":"Notizen","crm.reports":"Berichte","crm.totalCompanies":"Unternehmen gesamt","crm.totalContacts":"Kontakte gesamt","crm.openDeals":"Offene Deals","crm.wonDeals":"Gewonnene Deals","crm.pipelineValue":"Pipeline-Wert","crm.weightedValue":"Gewichteter Wert","crm.winRate":"Gewinnquote","crm.avgDealSize":"Durchschn. Deal-Größe","crm.recentActivities":"Aktivitäten diese Woche","crm.totalActivities":"Aktivitäten gesamt","crm.leaderboard":"Bestenliste","crm.noData":"Keine Daten verfügbar.","crm.newDeal":"Neuer Deal","crm.createDeal":"Deal erstellen","crm.dealTitle":"Titel","crm.dealTitlePlaceholder":"Deal-Titel eingeben...","crm.amount":"Betrag","crm.probability":"Wahrscheinlichkeit","crm.stage":"Phase","crm.advanceStage":"Zur nächsten Phase weiterrücken","crm.totalValue":"Gesamtwert","crm.dealCreated":"Deal erstellt","crm.failedToCreateDeal":"Deal konnte nicht erstellt werden","crm.dealStageUpdated":"Deal-Phase aktualisiert","crm.failedToUpdateStage":"Phase konnte nicht aktualisiert werden","crm.titleRequired":"Titel ist erforderlich","crm.newContact":"Neuer Kontakt","crm.editContact":"Kontakt bearbeiten","crm.contact":"Kontakt","crm.name":"Name","crm.email":"E-Mail","crm.phone":"Telefon","crm.company":"Unternehmen","crm.source":"Quelle","crm.lifecycleStage":"Lebenszyklusphase","crm.noContacts":"Keine Kontakte gefunden.","crm.firstName":"Vorname","crm.lastName":"Nachname","crm.jobTitle":"Position","crm.newCompany":"Neues Unternehmen","crm.editCompany":"Unternehmen bearbeiten","crm.companyName":"Unternehmensname","crm.industry":"Branche","crm.size":"Größe","crm.website":"Website","crm.city":"Stadt","crm.country":"Land","crm.noCompanies":"Keine Unternehmen gefunden.","crm.deal":"Deal","crm.editDeal":"Deal bearbeiten","crm.closeDate":"Abschlussdatum","crm.lossReason":"Verlustgrund","crm.noDeals":"Keine Deals gefunden.","crm.dealInfo":"Deal-Info","crm.newActivity":"Neue Aktivität","crm.editActivity":"Aktivität bearbeiten","crm.activity":"Aktivität","crm.type":"Typ","crm.subject":"Betreff","crm.content":"Inhalt","crm.date":"Datum","crm.duration":"Dauer","crm.outcome":"Ergebnis","crm.noActivities":"Keine Aktivitäten gefunden.","crm.newNote":"Neue Notiz","crm.editNote":"Notiz bearbeiten","crm.note":"Notiz","crm.relatedTo":"Verknüpft mit","crm.pinned":"Angeheftet","crm.createdAt":"Erstellt","crm.noNotes":"Keine Notizen gefunden.","crm.contentRequired":"Inhalt ist erforderlich","crm.relatedContactId":"Verknüpfte Kontakt-ID","crm.relatedCompanyId":"Verknüpfte Unternehmens-ID","crm.relatedDealId":"Verknüpfte Deal-ID","crm.contactInfo":"Kontaktinformationen","crm.timeline":"Zeitstrahl","crm.noTimeline":"Keine Zeitstrahl-Ereignisse.","crm.addNote":"Notiz hinzufügen","crm.notePlaceholder":"Notiz eingeben...","crm.lifecycleUpdated":"Lebenszyklusphase aktualisiert","crm.failedToUpdateLifecycle":"Lebenszyklusphase konnte nicht aktualisiert werden","crm.companyInfo":"Unternehmensinformationen","crm.funnelReport":"Trichterbericht","crm.activityReport":"Aktivitätsbericht","crm.conversionRate":"Konversion","crm.byType":"Nach Typ","crm.byOutcome":"Nach Ergebnis","pages.title":"Seiten","pages.newPage":"Neue Seite","pages.editPage":"Seite bearbeiten","pages.pageDeleted":"Seite gelöscht","pages.pageCreated":"Seite erstellt","pages.pageUpdated":"Seite aktualisiert","pages.failedToDelete":"Seite konnte nicht gelöscht werden","pages.failedToCreate":"Seite konnte nicht erstellt werden","pages.failedToUpdate":"Seite konnte nicht aktualisiert werden","pages.statusUpdated":"Seitenstatus aktualisiert","pages.failedToUpdateStatus":"Status konnte nicht aktualisiert werden","pages.confirmDelete":"Sind Sie sicher, dass Sie diese Seite löschen möchten?","pages.noPages":"Keine Seiten gefunden.","pages.noPagesDesc":"Erstellen Sie Ihre erste Seite, um Ihre Website aufzubauen.","pages.noBlocks":"Noch keine wiederverwendbaren Blöcke.","pages.noBlocksDesc":"Erstellen Sie wiederverwendbare Blöcke für Ihre Seiten.","pages.publish":"Veröffentlichen","pages.unpublish":"Veröffentlichung aufheben","pages.preview":"Vorschau","pages.slug":"Slug","pages.template":"Vorlage","pages.createdAt":"Erstellt","pages.basicInfo":"Grundinformationen","pages.titleLabel":"Titel","pages.titlePlaceholder":"Seitentitel eingeben...","pages.coverImage":"Titelbild","pages.metaTitle":"Meta-Titel","pages.metaDescription":"Meta-Beschreibung","pages.ogImage":"OG-Bild","pages.content":"Inhalt","pages.blockMode":"Blöcke","pages.saveDraft":"Entwurf speichern","pages.writeContent":"Schreiben Sie Ihren Seiteninhalt...","pages.addBlock":"Block hinzufügen","pages.chooseBlock":"Blocktyp auswählen","pages.reusableBlocks":"Wiederverwendbare Blöcke","pages.createReusable":"Wiederverwendbaren Block erstellen","pages.editReusable":"Wiederverwendbaren Block bearbeiten","pages.rbName":"Name","pages.rbType":"Blocktyp","pages.rbDescription":"Beschreibung","pages.rbContent":"Inhalt","command.search":"Suchen...","command.placeholder":"Befehl eingeben oder suchen...","command.noResults":"Keine Ergebnisse gefunden.","command.actions":"Aktionen","command.switchToLight":"Zum hellen Design wechseln","command.switchToDark":"Zum dunklen Design wechseln","layout.ecommerce":"E-Commerce","layout.products":"Produkte","layout.productCategories":"Produktkategorien","layout.orders":"Bestellungen","layout.finance":"Finanzen","layout.currencies":"Währungen","layout.wallets":"Geldbörsen","layout.paymentChannels":"Zahlungskanäle","layout.productComments":"Bewertungen","layout.coupons":"Gutscheine","layout.shippingTemplates":"Versandvorlagen","products.title":"Produkte","products.newProduct":"Neues Produkt","products.editProduct":"Produkt bearbeiten","products.productTitle":"Produkttitel","products.price":"Preis","products.originalPrice":"Originalpreis","products.stock":"Lagerbestand","products.sales":"Verkäufe","products.coverUrl":"Cover-URL","products.description":"Beschreibung","products.content":"Inhalt","products.slug":"Slug","products.status":"Status","products.category":"Kategorie","products.unit":"Einheit","products.minPurchase":"Mindestbestellung","products.maxPurchase":"Höchstbestellung","products.sortOrder":"Sortierreihenfolge","products.metaTitle":"Meta-Titel","products.metaDescription":"Meta-Beschreibung","products.productCreated":"Produkt erstellt","products.productUpdated":"Produkt aktualisiert","products.productDeleted":"Produkt gelöscht","products.batchDeleted":"{{count}} Produkte gelöscht","products.batchSuccess":"{{count}} Produkte aktualisiert","products.batchActivate":"Aktivieren","products.batchDeactivate":"Deaktivieren","products.failedToCreate":"Produkt konnte nicht erstellt werden","products.failedToUpdate":"Produkt konnte nicht aktualisiert werden","products.failedToDelete":"Produkt konnte nicht gelöscht werden","products.confirmDelete":"Sind Sie sicher, dass Sie dieses Produkt löschen möchten?","products.confirmBatchDelete":"Möchten Sie {{count}} Produkte wirklich löschen?","products.noProducts":"Noch keine Produkte","products.noProductsDesc":"Erstellen Sie Ihr erstes Produkt, um mit dem Verkauf zu beginnen.","products.allStatus":"Alle Status","products.searchPlaceholder":"Produkt suchen...","products.active":"Aktiv","products.draft":"Entwurf","products.archived":"Archiviert","products.general":"Allgemein","products.media":"Medien","products.pricing":"Preise","products.purchaseSettings":"Kaufeinstellungen","products.summary":"Zusammenfassung","products.phTitle":"Produkttitel eingeben...","products.phSummary":"Kurze Produktbeschreibung...","products.images":"Bilder","products.cover":"Titelbild","products.dropImages":"Bilder ablegen, einfügen oder klicken zum Upload","productCategories.categoryName":"Kategoriename","productCategories.newCategory":"Neue Kategorie","productCategories.createCategory":"Kategorie erstellen","productCategories.editCategory":"Kategorie bearbeiten","productCategories.optionalDesc":"Beschreibung (optional)","productCategories.parent":"Übergeordnete Kategorie","productCategories.noParent":"Keine","productCategories.sortOrder":"Sortierung","productCategories.slug":"Slug","productCategories.noCategories":"Keine Kategorien","productCategories.noCategoriesDesc":"Erstellen Sie Ihre erste Produktkategorie, um Ihre Produkte zu organisieren.","productCategories.categoryCreated":"Kategorie erstellt","productCategories.categoryUpdated":"Kategorie aktualisiert","productCategories.categoryDeleted":"Kategorie gelöscht","productCategories.failedToCreate":"Fehler beim Erstellen","productCategories.failedToUpdate":"Fehler beim Aktualisieren","productCategories.failedToDelete":"Fehler beim Löschen","productCategories.confirmDelete":"Möchten Sie diese Kategorie wirklich löschen?","productCategories.confirmDeleteTitle":"Kategorie löschen","productCategories.cannotDeleteHasChildren":"Diese Kategorie kann nicht gelöscht werden, da sie {count} Unterkategorien hat. Bitte verschieben oder löschen Sie diese zuerst.","productCategories.treeTitle":"Kategorien","productCategories.selectCategory":"Wählen Sie eine Kategorie für Details","productCategories.addChild":"Unterkategorie","orders.title":"Bestellungen","orders.orderNo":"Bestellnummer","orders.buyer":"Käufer","orders.total":"Gesamt","orders.status":"Status","orders.items":"Artikel","orders.remark":"Anmerkung","orders.adminRemark":"Admin-Anmerkung","orders.createdAt":"Erstellt","orders.actions":"Aktionen","orders.allStatus":"Alle Status","orders.searchPlaceholder":"Bestellnummer, Käufer suchen...","orders.pending":"Ausstehend","orders.paid":"Bezahlt","orders.shipped":"Versendet","orders.completed":"Abgeschlossen","orders.cancelled":"Storniert","orders.refunded":"Erstattet","orders.confirmPay":"Zahlung bestätigen?","orders.orderPaid":"Bestellung als bezahlt markiert","orders.confirmShip":"Bestellung versenden?","orders.orderShipped":"Bestellung versendet","orders.confirmCancel":"Bestellung stornieren?","orders.orderCancelled":"Bestellung storniert","orders.confirmRefund":"Bestellung erstatten?","orders.orderRefunded":"Bestellung erstattet","orders.failedToPay":"Konnte nicht als bezahlt markiert werden","orders.failedToShip":"Versenden fehlgeschlagen","orders.failedToCancel":"Stornierung fehlgeschlagen","orders.failedToRefund":"Erstattung fehlgeschlagen","orders.noOrders":"Noch keine Bestellungen","orders.noOrdersDesc":"Bestellungen werden hier angezeigt, wenn Kunden Einkäufe tätigen.","orders.trackingNo":"Sendungsverfolgungsnummer","orders.carrier":"Versanddienstleister","orders.shipInfo":"Versandinformationen","orders.buyerInfo":"Käuferinformationen","orders.shippingAddress":"Lieferadresse","orders.orderDetail":"Bestelldetails","orders.stats.totalOrders":"Bestellungen gesamt","orders.stats.totalRevenue":"Gesamtumsatz","orders.stats.pending":"Ausstehend","orders.stats.completed":"Abgeschlossen","orders.stats.todayOrders":"Heutige Bestellungen","orders.stats.todayRevenue":"Heutiger Umsatz","payments.title":"Zahlungskanäle","payments.newChannel":"Neuer Kanal","payments.provider":"Anbieter","payments.name":"Kanalname","payments.mode":"Modus","payments.active":"Aktiv","payments.live":"Live","payments.test":"Test","payments.credentials":"Zugangsdaten","payments.webhookSecret":"Webhook-Secret","payments.settings":"Einstellungen","payments.channelCreated":"Zahlungskanal erstellt","payments.channelUpdated":"Zahlungskanal aktualisiert","payments.channelDeleted":"Zahlungskanal gelöscht","payments.failedToCreate":"Zahlungskanal konnte nicht erstellt werden","payments.failedToUpdate":"Zahlungskanal konnte nicht aktualisiert werden","payments.failedToDelete":"Zahlungskanal konnte nicht gelöscht werden","payments.confirmDelete":"Diesen Zahlungskanal löschen?","payments.noChannels":"Keine Zahlungskanäle","payments.noChannelsDesc":"Fügen Sie einen Zahlungskanal hinzu, um Zahlungen zu akzeptieren.","payments.selectProvider":"Anbieter auswählen...","payments.testMode":"Testmodus (Sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"Händler-ID","payments.fPrivateKey":"RSA-Privatschlüssel","payments.fSerialNo":"Zertifikat-Seriennummer","payments.fWebhookSecret":"Webhook-Signaturgeheimnis","payments.fAlipayPublicKey":"Alipay-Öffentlicher Schlüssel","payments.fPlatformCert":"Plattformzertifikat (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"Benachrichtigungs-URL","payments.phSk":"sk_live_... oder sk_test_...","payments.phRsaKey":"RSA-Privatschlüssel einfügen (PEM oder Base64)","payments.phUrl":"https://...","payments.editChannel":"Kanal bearbeiten","payments.leaveBlankToKeep":"Leer lassen, um beizubehalten","layout.paymentOrders":"Zahlungsaufträge","paymentOrders.title":"Zahlungsaufträge","paymentOrders.orderId":"Bestellung","paymentOrders.title_col":"Titel","paymentOrders.amount":"Betrag","paymentOrders.provider":"Anbieter","paymentOrders.noOrders":"Keine Zahlungsaufträge","paymentOrders.noOrdersDesc":"Zahlungsaufträge erscheinen hier, wenn Kunden Zahlungen leisten.","paymentOrders.refund":"Erstatten","paymentOrders.refundTitle":"Erstattung","paymentOrders.refundOrder":"Bestellung erstatten","paymentOrders.refundAmount":"Erstattungsbetrag","paymentOrders.refundReason":"Grund","paymentOrders.refundSuccess":"Erstattung eingereicht","paymentOrders.refundFailed":"Erstattung fehlgeschlagen","layout.paymentTransactions":"Zahlungstransaktionen","paymentTransactions.title":"Zahlungstransaktionen","paymentTransactions.orderId":"Bestellung","paymentTransactions.type":"Typ","paymentTransactions.amount":"Betrag","paymentTransactions.providerTxId":"Anbieter-TX-ID","paymentTransactions.noTransactions":"Keine Transaktionen","paymentTransactions.noTransactionsDesc":"Transaktionen erscheinen hier bei Zahlungsereignissen.","currencies.title":"Währungen","currencies.newCurrency":"Neue Währung","currencies.code":"Code","currencies.name":"Name","currencies.decimals":"Dezimalstellen","currencies.active":"Aktiv","currencies.currencyCreated":"Währung erstellt","currencies.currencyUpdated":"Währung aktualisiert","currencies.failedToCreate":"Währung konnte nicht erstellt werden","currencies.failedToUpdate":"Währung konnte nicht aktualisiert werden","currencies.noCurrencies":"Keine Währungen","currencies.noCurrenciesDesc":"Fügen Sie eine Währung hinzu, um Mehrwährungsfähigkeit zu aktivieren.","wallets.title":"Geldbörsen","wallets.user":"Benutzer","wallets.currency":"Währung","wallets.balance":"Guthaben","wallets.frozen":"Eingefroren","wallets.credit":"Gutschreiben","wallets.debit":"Abbuchen","wallets.transactions":"Transaktionen","wallets.amount":"Betrag","wallets.type":"Typ","wallets.reference":"Referenz","wallets.creditTitle":"Geldbörse gutschreiben","wallets.debitTitle":"Geldbörse abbuchen","wallets.userId":"Benutzer-ID","wallets.remark":"Anmerkung","wallets.creditSuccess":"Geldbörse gutgeschrieben","wallets.debitSuccess":"Geldbörse abgebucht","wallets.failedToCredit":"Gutschrift fehlgeschlagen","wallets.failedToDebit":"Abbuchung fehlgeschlagen","wallets.noWallets":"Keine Geldbörsen","wallets.noWalletsDesc":"Geldbörsen werden erstellt, wenn Benutzer ihre erste Transaktion erhalten.","wallets.noTransactions":"Noch keine Transaktionen.","adminLogin.title":"Admin-Panel","adminLogin.subtitle":"Melden Sie sich mit Ihren Administrator-Zugangsdaten an","adminLogin.email":"E-Mail","adminLogin.password":"Passwort","adminLogin.submit":"Anmelden","adminLogin.loading":"Anmeldung…","adminLogin.error":"Ungültige E-Mail oder Passwort","adminLogin.footer":"RaisFast Admin — nur autorisiertes Personal","adminLogin.sessionExpired":"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Integration","layout.channels":"Kanäle","layout.receipts":"Empfangsbelege","layout.apiClients":"API-Clients","common.reset":"Zurücksetzen","common.close":"Schließen","integration.newChannel":"Neuer Kanal","integration.editChannel":"Kanal bearbeiten","integration.channelKey":"Kanalschlüssel","integration.displayName":"Anzeigename","integration.provider":"Anbieter","integration.mode":"Modus","integration.transport":"Transport","integration.framing":"Framing","integration.endpoint":"Endpunkt","integration.verifyKind":"Verifizierung","integration.verifyConfig":"Verify-Konfiguration (JSON)","integration.credentials":"Credentials (JSON)","integration.credentialsKeepHint":"Leer lassen, um versiegelte Credentials zu behalten","integration.mapping":"Mapping (JSONPath)","integration.pullConfig":"Pull-Konfiguration (JSON)","integration.streamConfig":"Stream-Konfiguration (JSON)","integration.targetType":"Ziel-Content-Type","integration.routeExtra":"Route-Extra (JSON)","integration.redeliveryMax":"Max. Zustellversuche","integration.stack":"Stack","integration.noChannels":"Keine Integrationskanäle","integration.noChannelsDesc":"Füge einen Kanal hinzu, um Inbound-Webhooks, Streams und Polling zu empfangen.","integration.channelCreated":"Kanal erstellt","integration.channelUpdated":"Kanal aktualisiert","integration.channelDeleted":"Kanal gelöscht","integration.failedToCreate":"Erstellen fehlgeschlagen","integration.failedToUpdate":"Aktualisieren fehlgeschlagen","integration.failedToDelete":"Löschen fehlgeschlagen","integration.failedToTest":"Test fehlgeschlagen","integration.confirmDeleteChannel":"Kanal „{key}“ löschen? Belege bleiben zur Prüfung erhalten.","integration.testMapping":"Mapping testen","integration.sampleBody":"Beispiel-Request-Body","integration.preview":"Vorschau des normalisierten Envelopes","integration.runTest":"Ausführen","integration.hasCredentials":"Credentials im Vault versiegelt","integration.allChannels":"Alle Kanäle","integration.allStatuses":"Alle Status","integration.traceIdFilter":"Nach Trace-ID filtern…","integration.noReceipts":"Keine Belege","integration.noReceiptsDesc":"Eingehende Zustellungen erscheinen hier mit vollständiger Trace.","integration.receivedAt":"Empfangen","integration.attempts":"Versuche","integration.nextRetryAt":"Nächster Wiederholungsversuch","integration.noSteps":"Keine Schritte aufgezeichnet","integration.pending":"ausstehend","integration.receiptInfo":"Beleg","integration.trace":"Trace","integration.complete":"vollständig","integration.firstPass":"Erster Durchlauf","integration.asyncChain":"Asynchrone Kette","integration.envelopeSnapshot":"Envelope-Snapshot","integration.fullSteps":"Vollständige Schritt-Chronologie","integration.egressCalls":"Ausgehende Aufrufe","integration.noEgress":"Keine ausgehenden Aufrufe","integration.noEgressDesc":"Von diesem Beleg ausgelöste ausgehende Aufrufe erscheinen hier.","integration.replayed":"Wiedergegeben","integration.dryRunDone":"Probelauf abgeschlossen — Bericht im Trace","integration.failedToReplay":"Wiedergabe fehlgeschlagen","integration.replay":"Wiedergeben","integration.dryRunReplay":"Wiedergabe simulieren","integration.replayConfirmTitle":"Diesen Beleg wiedergeben?","integration.replayConfirmDesc":"Die Route-Stufe wird vom gespeicherten Envelope-Snapshot neu ausgeführt (Upsert per external_id).","integration.receiptNotFound":"Beleg nicht gefunden","integration.newClient":"Neuer API-Client","integration.editClient":"API-Client bearbeiten","integration.clientKey":"Client-Schlüssel","integration.baseUrl":"Basis-URL","integration.authConfig":"Auth-Konfiguration (JSON)","integration.rateLimit":"Rate-Limit (JSON)","integration.ops":"Operationen (JSON)","integration.opsCount":"Ops","integration.noClients":"Keine API-Clients","integration.noClientsDesc":"Füge einen deklarativen API-Client für ausgehende Aufrufe hinzu.","integration.clientCreated":"API-Client erstellt","integration.clientUpdated":"API-Client aktualisiert","integration.clientDeleted":"API-Client gelöscht","integration.confirmDeleteClient":"API-Client „{key}“ löschen?","integration.testCall":"Testaufruf","integration.selectOp":"Op auswählen","integration.input":"Eingabe (JSON)","integration.result":"Ergebnis","integration.allClients":"Alle Clients","integration.egressLog":"Ausgehendes Protokoll","integration.latency":"Latenz","integration.createdAt":"Erstellt","integration.basicInfo":"Grundlagen","integration.trustSection":"Vertrauen (L0)","integration.normalizeSection":"Normalisierung (L2)","integration.routingSection":"Routing & Zuverlässigkeit (L3/L4)","integration.presetTitle":"Mit einer Vorlage starten","integration.presetPlaceholder":"Erprobte Konfiguration wählen…","integration.presetHint":"Füllt das gesamte Formular — Schlüssel, Secrets und Ziel-CT danach anpassen. Beispiele aus echten Integrationen (GitHub / Feishu / DingTalk).","integration.presetApplied":"Vorlage angewendet — prüfen und anpassen","integration.jsonInvalid":"Ungültiges JSON","integration.insertExample":"Beispiel einfügen","integration.presetGeneric":"Generischer Webhook (ohne Verifizierung)","integration.presetGenericDesc":"einfaches push + JSONPath-Mapping","integration.presetHmac":"HMAC-Webhook","integration.presetHmacDesc":"push + hmac-sha256-Signaturprüfung","integration.presetGithub":"GitHub-Webhook","integration.presetGithubDesc":"x-hub-signature-256, Delivery-GUID-Idempotenz","integration.presetShopify":"Shopify-Webhook","integration.presetShopifyDesc":"base64-HMAC, webhook-id-Idempotenz","integration.presetDingtalk":"DingTalk-Stream-Bot","integration.presetDingtalkDesc":"ws-Stream + Dispatch-Framing + pre_connect","integration.presetFeishu":"Feishu-Bot (Long Connection)","integration.presetFeishuDesc":"ws-Stream + pb-frame + OAuth-Handshake","integration.presetPull":"HTTP-Polling (Cursor)","integration.presetPullDesc":"pull + since_id-Paging + Checkpoint","integration.presetImap":"IMAP-Postfach (nativ)","integration.presetImapDesc":"pull + imap + mime, Mark-read-Semantik, IDLE-fähig"},qC={"layout.brand":"RaisFast","layout.adminPanel":"Panneau d'administration","layout.dashboard":"Tableau de bord","layout.content":"Contenu","layout.extension":"Extensions","layout.system":"Système","layout.posts":"Articles","layout.categories":"Catégories","layout.tags":"Étiquettes","layout.comments":"Commentaires","layout.media":"Médias","layout.contentTypes":"Types de contenu","layout.users":"Utilisateurs","layout.plugins":"Plugins","layout.rolesPermissions":"Rôles et permissions","layout.cron":"Cron","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"Jetons API","layout.workflows":"Workflows","layout.auditLog":"Journal d'audit","layout.options":"Options","layout.tenant":"Tenant","layout.clearTenant":"Effacer le filtre de tenant","layout.all":"Tout","layout.accessDenied":"Accès refusé","layout.accessDeniedMsg":"Vous devez être connecté en tant qu'auteur ou administrateur pour accéder à cette section.","layout.goToLogin":"Aller à la connexion","layout.toggleTheme":"Changer le thème","layout.signOut":"Déconnexion","layout.profile":"Profil","common.loading":"Chargement...","common.save":"Enregistrer","common.cancel":"Annuler","common.ok":"OK","common.create":"Créer","common.creating":"Création...","common.saving":"Enregistrement...","common.delete":"Supprimer","common.confirmDeleteTitle":"Confirmer la suppression","common.edit":"Modifier","common.content":"Contenu","common.remove":"Supprimer","common.view":"Voir","common.back":"Retour","common.actions":"Actions","common.status":"Statut","common.retry":"Réessayer","common.previous":"Précédent","common.next":"Suivant","common.pageOf":"Page {page} sur {total}","common.noData":"Aucune donnée","common.all":"Tout","common.draft":"Brouillon","common.published":"Publié","common.archived":"Archivé","common.enabled":"Activé","common.disabled":"Désactivé","common.name":"Nom","common.description":"Description","common.enabledCount":"{count} activé(s)","common.disabledCount":"{count} désactivé(s)","common.adminOnly":"Administrateurs uniquement","common.adminOnlyMsg":"Seuls les administrateurs peuvent gérer cette section.","common.backToDashboard":"Retour au tableau de bord","common.confirmDelete":"Êtes-vous sûr de vouloir supprimer cet élément ?","common.notFound":"Non trouvé","common.failedToLoad":"Échec du chargement","common.selectStatus":"Sélectionner un statut","common.titleRequired":"Le titre est requis","common.contentRequired":"Le contenu est requis","common.nameRequired":"Le nom est requis","common.invalidJson":"JSON invalide","common.isRequired":"{field} est requis","common.created":"{name} créé","common.updated":"{name} mis à jour","common.deleted":"{name} supprimé","common.failedToCreate":"Échec de la création de {name}","common.failedToUpdate":"Échec de la mise à jour de {name}","common.failedToDelete":"Échec de la suppression de {name}","common.none":"Aucun","common.noDependencies":"Aucune dépendance","dashboard.title":"Tableau de bord","dashboard.posts":"Articles","dashboard.comments":"Commentaires","dashboard.categories":"Catégories","dashboard.tags":"Étiquettes","dashboard.media":"Médias","dashboard.users":"Utilisateurs","dashboard.contentTypes":"Types de contenu","dashboard.postsLast14Days":"Articles (14 derniers jours)","dashboard.ordersAndProducts14Days":"Commandes et produits (14 derniers jours)","dashboard.viewAll":"Voir tout","dashboard.failedToLoad":"Échec du chargement des statistiques. Les données peuvent être obsolètes.","dashboard.noDataYet":"Aucune donnée pour le moment.","dashboard.recentActivity":"Activité récente","dashboard.noActivity":"Aucune activité pour le moment.","dashboard.type":"Type","dashboard.detail":"Détail","dashboard.time":"Heure","dashboard.post":"Article","dashboard.comment":"Commentaire","dashboard.product":"Produit","dashboard.order":"Commande","dashboard.products":"Produits","dashboard.orders":"Commandes","dashboard.revenue":"Revenu","dashboard.coupons":"Coupons","dashboard.orderStatus":"Statut des commandes","dashboard.justNow":"à l'instant","dashboard.minutesAgo":"min","dashboard.hoursAgo":"h","dashboard.daysAgo":"j","posts.title":"Articles","posts.newPost":"Nouvel article","posts.editPost":"Modifier l'article","posts.postTitle":"Titre de l'article","posts.titleCol":"Titre","posts.categoryCol":"Catégorie","posts.authorCol":"Auteur","posts.createdCol":"Créé","posts.allStatus":"Tous les statuts","posts.searchPlaceholder":"Rechercher des articles...","posts.content":"Contenu","posts.excerpt":"Extrait","posts.briefSummary":"Résumé court (facultatif)","posts.coverImage":"Image de couverture","posts.writeContent":"Rédigez le contenu de votre article en Markdown...","posts.selectCategory":"Sélectionner une catégorie","posts.tags":"Étiquettes","posts.slug":"Slug","posts.slugPlaceholder":"Généré depuis le titre si vide","posts.noTags":"Aucune étiquette disponible","posts.addTag":"Ajouter un tag...","posts.createTag":"Créer","posts.createPost":"Créer l'article","posts.saveChanges":"Enregistrer les modifications","posts.postCreated":"Article créé","posts.postUpdated":"Article mis à jour","posts.postDeleted":"Article supprimé","posts.failedToCreate":"Échec de la création de l'article","posts.failedToUpdate":"Échec de la mise à jour de l'article","posts.failedToDelete":"Échec de la suppression de l'article","posts.confirmDelete":"Êtes-vous sûr de vouloir supprimer cet article ?","posts.confirmBatchDelete":"Supprimer {count} articles ?","posts.batchPublish":"Publier","posts.batchUnpublish":"Dépublier","posts.batchSuccess":"{count} articles mis à jour","posts.noPosts":"Aucun article trouvé.","posts.noPostsDesc":"Créez votre premier article de blog pour partager vos idées.","posts.failedToLoad":"Échec du chargement de l'article.","categories.title":"Catégories","categories.newCategory":"Nouvelle catégorie","categories.createCategory":"Créez une nouvelle catégorie pour organiser les articles.","categories.categoryName":"Nom de la catégorie","categories.optionalDesc":"Description (facultatif)","categories.sortOrder":"Ordre de tri","categories.slug":"Slug","categories.categoryCreated":"Catégorie créée","categories.categoryUpdated":"Catégorie mise à jour","categories.categoryDeleted":"Catégorie supprimée","categories.failedToCreate":"Échec de la création de la catégorie","categories.failedToUpdate":"Échec de la mise à jour de la catégorie","categories.failedToDelete":"Échec de la suppression de la catégorie","categories.confirmDelete":"Êtes-vous sûr de vouloir supprimer cette catégorie ?","categories.confirmDeleteTitle":"Supprimer la catégorie","categories.noCategories":"Aucune catégorie","categories.noCategoriesDesc":"Organisez vos articles avec des catégories.","categories.treeTitle":"Catégories","categories.selectCategory":"Sélectionnez une catégorie pour voir les détails","categories.addChild":"Ajouter sous","categories.parent":"Catégorie parente","categories.noParent":"Aucune","categories.editCategory":"Modifier la catégorie","categories.cannotDeleteHasChildren":"Impossible de supprimer cette catégorie car elle contient {count} sous-catégories. Veuillez les déplacer ou les supprimer d'abord.","categories.coverImage":"Image de couverture","tags.title":"Étiquettes","tags.newTag":"Nouvelle étiquette","tags.createTag":"Créez une nouvelle étiquette pour les articles.","tags.tagName":"Nom de l'étiquette","tags.tagCreated":"Étiquette créée","tags.tagUpdated":"Étiquette mise à jour","tags.tagDeleted":"Étiquette supprimée","tags.failedToCreate":"Échec de la création de l'étiquette","tags.failedToUpdate":"Échec de la mise à jour de l'étiquette","tags.failedToDelete":"Échec de la suppression de l'étiquette","tags.confirmDelete":"Êtes-vous sûr de vouloir supprimer cette étiquette ?","tags.noTags":"Aucune étiquette trouvée.","tags.noTagsDesc":"Ajoutez des étiquettes pour organiser et filtrer votre contenu.","comments.title":"Commentaires","comments.total":"{count} au total","comments.all":"Tous","comments.pending":"En attente","comments.approved":"Approuvé","comments.rejected":"Rejeté","comments.spam":"Indésirable","comments.approve":"Approuver","comments.reject":"Rejeter","comments.author":"Auteur","comments.contentCol":"Contenu","comments.post":"Article","comments.date":"Date","comments.selected":"{count} sélectionné(s)","comments.commentStatusUpdated":"Statut du commentaire mis à jour","comments.commentDeleted":"Commentaire supprimé","comments.bulkActionDone":"{count} commentaire(s) {status}","comments.bulkDeleted":"{count} commentaire(s) supprimé(s)","comments.bulkActionFailed":"L'action groupée a échoué","comments.bulkDeleteFailed":"La suppression groupée a échoué","comments.failedToUpdateStatus":"Échec de la mise à jour du statut","comments.failedToDelete":"Échec de la suppression du commentaire","comments.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce commentaire ?","comments.confirmBulkDelete":"Supprimer {count} commentaire(s) sélectionné(s) ?","comments.noComments":"Aucun commentaire trouvé.","comments.noCommentsDesc":"Les commentaires apparaîtront ici lorsque les lecteurs commenceront à interagir.","contentTypes.title":"Types de contenu","contentTypes.noFields":"Ce type de contenu n'a pas de champs modifiables.","contentTypes.createContentType":"Créer un type de contenu","contentTypes.builder":"Constructeur","contentTypes.noContentTypes":"Aucun type de contenu","contentTypes.noContentTypesDesc":"Créez votre premier type de contenu pour commencer à construire votre CMS.","contentTypes.contentTypeDeleted":"Type de contenu supprimé","contentTypes.failedToDelete":"Échec de la suppression","contentTypes.confirmDelete":"Supprimer le type de contenu « {singular} » ? Cela supprime le fichier de schéma mais PAS la table de base de données.","contentTypes.notFound":"Type de contenu non trouvé","contentTypes.notFoundMsg":"Le type de contenu « {singular} » est introuvable.","contentTypes.itemDeleted":"Élément supprimé","contentTypes.failedToDeleteItem":"Échec de la suppression de l'élément","contentTypes.confirmDeleteItem":"Êtes-vous sûr de vouloir supprimer cet élément ?","contentTypes.batchDeleteSuccess":"{count} éléments supprimés","contentTypes.confirmBatchDelete":"Voulez-vous vraiment supprimer {count} éléments ?","contentTypes.export":"Exporter","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"{count} éléments exportés","contentTypes.import":"Importer","contentTypes.importJson":"Importer JSON","contentTypes.importCsv":"Importer CSV","contentTypes.importExcel":"Importer Excel","contentTypes.importSuccess":"{count} enregistrements importés","contentTypes.importPartial":"{ok} importés, {failed} échoués","contentTypes.importEmpty":"Aucun enregistrement trouvé dans le fichier","contentTypes.importTooMany":"Trop d'enregistrements (max {max})","contentTypes.importFailed":"Échec de l'importation","contentTypes.importTooLarge":"Le fichier dépasse la limite de 8 Mo","contentTypes.noItems":"Aucun élément trouvé.","contentTypes.noItemsDesc":"Créez votre premier élément pour remplir cette collection.","contentTypes.newItem":"Nouveau {name}","contentTypes.editItem":"Modifier {name}","contentTypes.itemNotFound":"Élément introuvable.","contentTypes.fields":"{count} champ(s)","contentTypes.fieldsLabel":"champs","contentTypes.totalRecords":"{count} enregistrements","contentTypes.createdAt":"Créé","contentTypes.updatedAt":"Mis à jour","users.title":"Utilisateurs","users.newUser":"Nouvel utilisateur","users.createUser":"Créer un utilisateur","users.registerNew":"Inscrivez un nouveau compte utilisateur.","users.username":"Nom d'utilisateur","users.email":"E-mail","users.password":"Mot de passe","users.minChars":"Minimum 8 caractères, doit contenir majuscules, minuscules et chiffres","users.role":"Rôle","users.joined":"Inscrit","users.editRole":"Modifier le rôle de l'utilisateur","users.editUser":"Modifier l'utilisateur","users.changeRoleFor":"Changer le rôle de {username} ({email})","users.reader":"Lecteur","users.author":"Auteur","users.admin":"Administrateur","users.active":"Actif","users.suspended":"Suspendu","users.banned":"Banni","users.newPassword":"Nouveau mot de passe","users.userCreated":"Utilisateur créé","users.userUpdated":"Utilisateur mis à jour","users.userRoleUpdated":"Rôle de l'utilisateur mis à jour","users.failedToCreate":"Échec de la création de l'utilisateur","users.failedToUpdate":"Échec de la mise à jour de l'utilisateur","users.noUsers":"Aucun utilisateur trouvé.","users.noUsersDesc":"Invitez des utilisateurs et gérez leurs rôles.","users.registeredVia":"Source","users.userDeleted":"Utilisateur supprimé","users.failedToDelete":"Échec de la suppression","users.confirmDeleteUser":`Supprimer l'utilisateur "{username}" ? Cette action est irréversible.`,"webhooks.title":"Webhooks","webhooks.newWebhook":"Nouveau Webhook","webhooks.createWebhook":"Créez un nouvel abonnement Webhook pour recevoir des notifications d'événements.","webhooks.callbackUrl":"URL de rappel","webhooks.eventsComma":"Événements (séparés par des virgules)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"Utilisez * pour vous abonner à tous les événements","webhooks.descriptionOptional":"Description (facultatif)","webhooks.urlCol":"URL","webhooks.events":"Événements","webhooks.webhookCreated":"Webhook créé","webhooks.webhookUpdated":"Webhook mis à jour","webhooks.webhookDeleted":"Webhook supprimé","webhooks.failedToCreate":"Échec de la création du Webhook","webhooks.failedToUpdate":"Échec de la mise à jour du Webhook","webhooks.failedToDelete":"Échec de la suppression du Webhook","webhooks.confirmDelete":"Supprimer cet abonnement Webhook ?","webhooks.noWebhooks":"Aucun Webhook trouvé.","webhooks.noWebhooksDesc":"Configurez des Webhooks pour recevoir des notifications d'événements en temps réel.","tokens.title":"Jetons API","tokens.newToken":"Nouveau jeton","tokens.createToken":"Créer un jeton API","tokens.createTokenDesc":"Générez un nouveau jeton d'accès personnel. La valeur du jeton ne sera affichée qu'une seule fois.","tokens.scopesComma":"Portées (séparées par des virgules)","tokens.expiresOptional":"Expire le (facultatif)","tokens.tokenCreated":"Jeton créé","tokens.tokenRevoked":"Jeton révoqué","tokens.failedToCreate":"Échec de la création du jeton","tokens.failedToRevoke":"Échec de la révocation du jeton","tokens.confirmRevoke":"Révoquer le jeton « {name} » ? Cette action est irréversible.","tokens.tokenCopied":"Jeton copié dans le presse-papiers","tokens.tokenCreatedCopy":"Jeton créé — copiez-le maintenant !","tokens.copied":"Copié","tokens.copy":"Copier","tokens.dismiss":"Fermer","tokens.notShownAgain":"Ce jeton ne sera plus affiché. Conservez-le en lieu sûr.","tokens.scopesCol":"Portées","tokens.expiresCol":"Expiration","tokens.lastUsed":"Dernière utilisation","tokens.never":"Jamais","tokens.noTokens":"Aucun jeton API trouvé. Créez-en un pour commencer.","tokens.noTokensDesc":"Créez des jetons API pour un accès programmatique.","tokens.description":"Description","workflows.title":"Workflows","workflows.instances":"Instances","workflows.visualEditor":"Éditeur visuel","workflows.newWorkflow":"Nouveau workflow","workflows.createWorkflow":"Créer un workflow","workflows.createWorkflowDesc":"Définissez un nouveau workflow avec des étapes. Les étapes sont configurées en JSON.","workflows.stepsJson":"Étapes (JSON)","workflows.stepFormat":'Chaque étape : { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"Workflow créé","workflows.workflowDeleted":"Workflow supprimé","workflows.failedToCreate":"Échec de la création du workflow","workflows.failedToDelete":"Échec de la suppression du workflow","workflows.confirmDelete":"Supprimer le workflow « {name} » ?","workflows.noWorkflows":"Aucun workflow trouvé. Créez-en un pour commencer.","workflows.noWorkflowsDesc":"Définissez des workflows pour automatiser votre pipeline de contenu.","workflows.steps":"{count} étape(s)","workflows.workflowStarted":"Workflow démarré","workflows.editor.title":"Éditeur de workflow","workflows.editor.newWorkflow":"Nouveau workflow","workflows.editor.stepName":"Nom de l'étape","workflows.editor.branchesJson":"Branches (tableau JSON)","workflows.editor.connectEdges":"Connectez les arêtes depuis ce nœud pour définir les branches.","workflows.editor.configJson":"Configuration (JSON)","workflows.editor.apply":"Appliquer","workflows.editor.deleteStep":"Supprimer l'étape","workflows.editor.addStep":"Ajouter une étape","workflows.editor.invalidJson":"JSON invalide dans la configuration","workflows.editor.workflowSaved":"Workflow enregistré","workflows.editor.failedToSave":"Échec de l'enregistrement du workflow","audit.title":"Journal d'audit","audit.clearFilters":"Effacer les filtres","audit.noLogs":"Aucune entrée de journal d'audit trouvée.","audit.action":"Action","audit.actor":"Acteur","audit.resource":"Ressource","audit.timestamp":"Horodatage","options.title":"Options","options.saved":"Options enregistrées","options.failedToSave":"Échec de l'enregistrement des options","plugins.title":"Plugins","plugins.loaded":"{count} chargé(s)","plugins.plugin":"Plugin","plugins.runtime":"Runtime","plugins.hooks":"Hooks","plugins.health":"Santé","plugins.pluginEnabled":"Plugin activé","plugins.pluginDisabled":"Plugin désactivé","plugins.pluginReloaded":"Plugin rechargé","plugins.pluginRemoved":"Plugin supprimé","plugins.failedToEnable":"Échec de l'activation du plugin","plugins.failedToDisable":"Échec de la désactivation du plugin","plugins.failedToReload":"Échec du rechargement du plugin","plugins.failedToRemove":"Échec de la suppression du plugin","plugins.noPlugins":"Aucun plugin chargé.","plugins.placePlugins":"Placez les plugins dans le répertoire configuré.","plugins.confirmRemove":"Supprimer le plugin « {name} » ? Il sera déchargé de la mémoire.","plugins.autoDisabled":"Désactivé automatiquement","plugins.tooManyErrors":"Trop d'erreurs","plugins.errorCount":"{count} erreur(s)","plugins.errorsOccurred":"Des erreurs se sont produites","plugins.calls":"{count} appel(s)","plugins.idle":"Inactif","plugins.notFound":"Plugin non trouvé","plugins.notFoundMsg":"Plugin introuvable.","plugins.backToPlugins":"Retour aux plugins","plugins.general":"Général","plugins.version":"Version","plugins.reload":"Recharger","plugins.remove":"Supprimer","plugins.errorTracking":"Suivi des erreurs et statut de désactivation automatique","plugins.healthy":"En bonne santé","plugins.errorCountLabel":"Nombre d'erreurs","plugins.lastError":"Dernière erreur","plugins.lastErrorAt":"Dernière erreur le","plugins.autoDisabledLabel":"Désactivé automatiquement","plugins.permissions":"Permissions","permissions.declaredFromManifest":"Permissions déclarées dans le manifeste du plugin","plugins.hooksTitle":"Hooks","plugins.hooksDesc":"Points de hook enregistrés et leurs métriques d'exécution","plugins.noHooks":"Aucun hook enregistré.","plugins.totalCalls":"Total des appels","plugins.totalErrors":"Total des erreurs","plugins.totalDuration":"Durée totale","plugins.noMetrics":"Aucune métrique pour le moment","plugins.performance":"Aperçu des performances","plugins.maxMemory":"Mémoire maximale","plugins.timeout":"Délai d'attente","plugins.default":"Par défaut","media.title":"Médias","media.files":"{count} fichier(s)","media.searchFiles":"Rechercher des fichiers...","media.fileDeleted":"Fichier supprimé","media.failedToDelete":"Échec de la suppression du fichier","media.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce fichier ?","media.date":"Date","media.size":"Taille","media.ascending":"Croissant","media.descending":"Décroissant","field.mediaUrl":"URL du média","field.startWriting":"Commencez à écrire...","field.yes":"Oui","field.no":"Non","field.relatedItemId":"ID de l'élément associé","cron.title":"Tâches Cron","cron.newCron":"Nouvelle tâche Cron","cron.expression":"Expression","cron.handler":"Gestionnaire","cron.lastRun":"Dernière exécution","cron.nextRun":"Prochaine exécution","cron.cronCreated":"Tâche Cron créée","cron.cronDeleted":"Tâche Cron supprimée","cron.failedToCreate":"Échec de la création de la tâche Cron","cron.failedToDelete":"Échec de la suppression de la tâche Cron","cron.noCrons":"Aucune tâche Cron trouvée.","cron.confirmDelete":"Supprimer la tâche Cron « {name} » ?","tenants.title":"Tenants","tenants.newTenant":"Nouveau tenant","tenants.createTenant":"Créez un nouveau tenant pour l'isolation multi-tenant.","tenants.tenantName":"Nom du tenant","tenants.slug":"Slug","tenants.domain":"Domaine","tenants.owner":"Propriétaire","tenants.tenantCreated":"Tenant créé","tenants.tenantUpdated":"Tenant mis à jour","tenants.tenantDeleted":"Tenant supprimé","tenants.failedToCreate":"Échec de la création du tenant","tenants.failedToUpdate":"Échec de la mise à jour du tenant","tenants.failedToDelete":"Échec de la suppression du tenant","tenants.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce tenant ?","tenants.noTenants":"Aucun tenant trouvé.","tenants.noTenantsDesc":"Créez des tenants pour le SaaS multi-tenant.","rbac.title":"Rôles et permissions","rbac.roles":"Rôles","rbac.newRole":"Nouveau rôle","rbac.createRole":"Créez un nouveau rôle pour le contrôle d'accès.","rbac.roleName":"Nom du rôle","rbac.roleDesc":"Description du rôle","rbac.roleCreated":"Rôle créé","rbac.roleUpdated":"Rôle mis à jour","rbac.roleDeleted":"Rôle supprimé","rbac.failedToCreate":"Échec de la création du rôle","rbac.failedToUpdate":"Échec de la mise à jour du rôle","rbac.failedToDelete":"Échec de la suppression du rôle","rbac.confirmDelete":"Supprimer le rôle « {name} » ? Cela supprimera toutes les permissions associées.","rbac.systemRole":"Système","rbac.permissions":"Permissions","rbac.addPermission":"Ajouter une permission","rbac.action":"Action","rbac.subject":"Sujet","rbac.noRoles":"Aucun rôle trouvé.","builder.title":"Constructeur de types de contenu","builder.editContentType":"Modifier le type de contenu","builder.createContentType":"Créer un type de contenu","builder.baseConfig":"Configuration de base","builder.singularName":"Nom singulier","builder.pluralName":"Nom pluriel","builder.tableName":"Nom de la table","builder.fieldsSection":"Champs","builder.addField":"Ajouter un champ","builder.preview":"Aperçu","builder.save":"Enregistrer le type de contenu","builder.saving":"Enregistrement...","builder.saved":"Type de contenu enregistré","builder.failedToSave":"Échec de l'enregistrement du type de contenu","builder.confirmDeleteField":"Supprimer le champ « {name} » ?","builder.text":"Texte","builder.richText":"Texte enrichi","builder.email":"E-mail","builder.password":"Mot de passe","builder.uid":"UID","builder.integer":"Entier","builder.bigInt":"Grand entier","builder.decimal":"Décimal","builder.float":"Flottant","builder.boolean":"Booléen","builder.date":"Date","builder.datetime":"Date et heure","builder.time":"Heure","builder.enumType":"Énumération","builder.jsonType":"JSON","builder.relation":"Relation","builder.mediaType":"Média","builder.link":"Lien","builder.required":"Requis","builder.unique":"Unique","builder.privateField":"Privé","builder.immutable":"Immutable","builder.label":"Étiquette","builder.defaultValue":"Valeur par défaut","builder.maxLength":"Longueur maximale","builder.minValue":"Min","builder.maxValue":"Max","builder.enumValues":"Valeurs d'énumération (séparées par des virgules)","builder.relationType":"Type de relation","builder.relationTarget":"Table cible","builder.foreignKey":"Clé étrangère","builder.throughTable":"Table intermédiaire","builder.draftPublish":"Brouillon/Publication","builder.timestamps":"Horodatages","builder.softDelete":"Suppression douce","builder.slugField":"Champ Slug","media.name":"Nom","media.type":"Type","media.other":"Autre","media.uploadFailed":"Échec du téléversement","media.dropFiles":"Déposez des fichiers ici, collez ou {browse}","media.uploading":"Téléversement de {count} fichier(s)...","media.done":"Terminé","media.failedUpload":"Échoué","media.urlCopied":"URL copiée","media.copyUrl":"Copier l'URL","media.download":"Télécharger","media.dimensions":"Dimensions","media.uploaded":"Téléversé","media.urlLabel":"URL","media.noVideoSupport":"Votre navigateur ne prend pas en charge la vidéo.","media.downloadFile":"Télécharger le fichier","workflows.instances.title":"Instances de workflow","workflows.instances.showLogs":"Afficher les journaux","workflows.instances.hideLogs":"Masquer les journaux","workflows.instances.currentStep":"En cours","workflows.instances.context":"Contexte","workflows.instances.stepLogs":"Journaux d'étape ({count})","workflows.instances.noStepLogs":"Aucun journal d'étape.","workflows.instances.noInstances":"Aucune instance de workflow trouvée.","workflows.instances.instanceCount":"{count} instance(s)","workflows.instances.definitions":"Définitions","workflows.instances.filterStatus":"Filtrer par statut","workflows.instances.cancelled":"Instance annulée","workflows.editor.editStep":"Modifier l'étape","workflows.editor.name":"Nom","workflows.editor.type":"Type","workflows.editor.backToList":"Retour à la liste","workflows.editor.workflowName":"Nom du workflow...","workflows.editor.failedToLoad":"Échec du chargement du workflow","workflows.editor.immutableNotice":"Les définitions de workflow sont immuables. Créez-en un nouveau pour modifier les étapes.","workflows.editor.untitled":"Workflow sans titre","workflows.editor.save":"Enregistrer","workflows.editor.saving":"Enregistrement...","cron.createSchedule":"Créer une planification Cron","cron.labelField":"Libellé","cron.jobType":"Type de tâche","cron.cronExpression":"Expression Cron (6 segments)","cron.format":"Format : sec min heure jour mois jour-sem","cron.payload":"Charge utile (JSON, facultatif)","cron.schedules":"{count} planification(s)","cron.schedule":"Planification","cron.pluginCol":"Plugin","cron.scheduleCreated":"Planification créée","cron.scheduleToggled":"Planification basculée","cron.scheduleDeleted":"Planification supprimée","cron.scheduleUpdated":"Planification mise à jour","cron.noCronSchedules":"Aucune planification Cron.","cron.seedHint":"Créez-en une ci-dessus ou activez CRON_SEED_ENABLED pour les valeurs par défaut.","cron.confirmDeleteSchedule":"Supprimer la planification « {name} » ? Cette action est irréversible.","cron.scheduleNotFound":"Planification non trouvée","cron.backToCronSchedules":"Retour aux planifications Cron","cron.scheduleDetails":"Détails de la planification","cron.cronExpression7":"6 segments : sec min heure jour mois jour-sem","cron.builtIn":"Intégré","cron.executionHistory":"Historique d'exécution","cron.recentLogs":"Journaux d'exécution récents pour cette planification","cron.cleanupOld":"Nettoyer les anciens","cron.cleanedUp":"{count} ancien(s) journal(s) nettoyé(s)","cron.noExecutionLogs":"Aucun journal d'exécution pour le moment.","cron.success":"Succès","cron.failedStatus":"Échoué","cron.running":"En cours","cron.newSchedule":"Nouvelle planification","cron.idField":"ID","cron.started":"Démarré","cron.finished":"Terminé","cron.duration":"Durée","cron.error":"Erreur","cron.created":"Créé","cron.updated":"Mis à jour","tenants.createForIsolation":"Créez un nouveau tenant pour l'isolation des données.","tenants.cannotDeleteDefault":"Impossible de supprimer le tenant par défaut","tenants.confirmDeleteMsg":"Supprimer ce tenant ? Les données appartenant à ce tenant ne seront PAS supprimées.","tenants.created":"Créé","rbac.addRoleDesc":"Ajoutez un nouveau rôle au système.","rbac.updateRoleDesc":"Mettre à jour le rôle « {name} ».","rbac.deleteRoleTitle":"Supprimer le rôle","rbac.deleteRoleConfirm":"Êtes-vous sûr de vouloir supprimer « {name} » ? Cette action est irréversible.","rbac.addPermissionTitle":"Ajouter une permission","rbac.addPermissionDesc":"Accordez une nouvelle permission à « {name} ». Utilisez * comme joker.","rbac.fieldsCol":"Champs","rbac.conditionsCol":"Conditions","rbac.fieldsOptional":"Champs (séparés par des virgules, facultatif)","rbac.removePermissionTitle":"Supprimer la permission","rbac.removePermissionDesc":"Supprimer {action} sur {subject} ?","rbac.noPermissions":"Aucune permission configurée.","rbac.selectRole":"Sélectionnez un rôle pour voir les permissions","rbac.prev":"Préc.","options.noChanges":"Aucune modification","options.noOptions":"Aucune option disponible.","options.reset":"Réinitialiser","options.saveChanges":"Enregistrer les modifications","audit.failedToLoad":"Échec du chargement du journal d'audit. Veuillez réessayer.","audit.noEntries":"Aucune entrée d'audit trouvée.","audit.noEntriesDesc":"Les entrées d'audit apparaîtront à mesure que des actions sont effectuées.","audit.timeCol":"Heure","audit.subjectId":"ID du sujet","audit.detailCol":"Détail","audit.system":"système","audit.from":"De","audit.to":"À","audit.search":"Rechercher","audit.clear":"Effacer","audit.today":"Aujourd'hui","builder.untitled":"Type de contenu sans titre","builder.fieldCount":"{count} champ(s)","builder.fieldList":"Champs","builder.protocols":"Protocoles","builder.systemFields":"Champs système","builder.system":"système","builder.newField":"Nouveau champ","builder.addAnotherField":"Ajouter un autre champ","builder.addAField":"Ajouter un champ","builder.chooseFieldType":"Choisissez un type de champ à ajouter à votre type de contenu.","builder.fieldConfiguration":"Configuration du champ","builder.fieldName":"Nom du champ","builder.fieldTypeLabel":"Type de champ","builder.displayLabel":"Étiquette d'affichage","builder.helpText":"Texte d'aide","builder.removeField":"Supprimer le champ","builder.removeFieldConfirm":"Supprimer ce champ ?","builder.noAdditionalOptions":"Aucune option supplémentaire pour ce type de champ.","builder.acceptedTypes":"Types acceptés","builder.maxCount":"Nombre maximal","builder.target":"Cible","builder.valuesComma":"Valeurs (séparées par des virgules)","builder.describeContentType":"Décrivez ce type de contenu...","builder.contentTypeUpdated":"Type de contenu mis à jour","builder.contentTypeCreated":"Type de contenu créé","builder.newFieldCategory":"Nombre","layout.crm":"CRM","layout.pages":"Pages","layout.reusableBlocks":"Blocs","crm.dashboard":"Tableau de bord CRM","crm.pipeline":"Pipeline","crm.contacts":"Contacts","crm.companies":"Entreprises","crm.deals":"Affaires","crm.activities":"Activités","crm.notes":"Notes","crm.reports":"Rapports","crm.totalCompanies":"Total entreprises","crm.totalContacts":"Total contacts","crm.openDeals":"Affaires ouvertes","crm.wonDeals":"Affaires gagnées","crm.pipelineValue":"Valeur du pipeline","crm.weightedValue":"Valeur pondérée","crm.winRate":"Taux de gain","crm.avgDealSize":"Taille moyenne des affaires","crm.recentActivities":"Activités de la semaine","crm.totalActivities":"Total des activités","crm.leaderboard":"Classement","crm.noData":"Aucune donnée disponible.","crm.newDeal":"Nouvelle affaire","crm.createDeal":"Créer une affaire","crm.dealTitle":"Titre","crm.dealTitlePlaceholder":"Entrez le titre de l'affaire...","crm.amount":"Montant","crm.probability":"Probabilité","crm.stage":"Étape","crm.advanceStage":"Passer à l'étape suivante","crm.totalValue":"Valeur totale","crm.dealCreated":"Affaire créée","crm.failedToCreateDeal":"Échec de la création de l'affaire","crm.dealStageUpdated":"Étape de l'affaire mise à jour","crm.failedToUpdateStage":"Échec de la mise à jour de l'étape","crm.titleRequired":"Le titre est requis","crm.newContact":"Nouveau contact","crm.editContact":"Modifier le contact","crm.contact":"Contact","crm.name":"Nom","crm.email":"E-mail","crm.phone":"Téléphone","crm.company":"Entreprise","crm.source":"Source","crm.lifecycleStage":"Étape du cycle de vie","crm.noContacts":"Aucun contact trouvé.","crm.firstName":"Prénom","crm.lastName":"Nom de famille","crm.jobTitle":"Fonction","crm.newCompany":"Nouvelle entreprise","crm.editCompany":"Modifier l'entreprise","crm.companyName":"Nom de l'entreprise","crm.industry":"Secteur","crm.size":"Taille","crm.website":"Site web","crm.city":"Ville","crm.country":"Pays","crm.noCompanies":"Aucune entreprise trouvée.","crm.deal":"Affaire","crm.editDeal":"Modifier l'affaire","crm.closeDate":"Date de clôture","crm.lossReason":"Raison de la perte","crm.noDeals":"Aucune affaire trouvée.","crm.dealInfo":"Informations sur l'affaire","crm.newActivity":"Nouvelle activité","crm.editActivity":"Modifier l'activité","crm.activity":"Activité","crm.type":"Type","crm.subject":"Sujet","crm.content":"Contenu","crm.date":"Date","crm.duration":"Durée","crm.outcome":"Résultat","crm.noActivities":"Aucune activité trouvée.","crm.newNote":"Nouvelle note","crm.editNote":"Modifier la note","crm.note":"Note","crm.relatedTo":"Lié à","crm.pinned":"Épinglé","crm.createdAt":"Créé","crm.noNotes":"Aucune note trouvée.","crm.contentRequired":"Le contenu est requis","crm.relatedContactId":"ID du contact associé","crm.relatedCompanyId":"ID de l'entreprise associée","crm.relatedDealId":"ID de l'affaire associée","crm.contactInfo":"Informations du contact","crm.timeline":"Chronologie","crm.noTimeline":"Aucun événement dans la chronologie.","crm.addNote":"Ajouter une note","crm.notePlaceholder":"Saisissez une note...","crm.lifecycleUpdated":"Étape du cycle de vie mise à jour","crm.failedToUpdateLifecycle":"Échec de la mise à jour de l'étape du cycle de vie","crm.companyInfo":"Informations sur l'entreprise","crm.funnelReport":"Rapport d'entonnoir","crm.activityReport":"Rapport d'activité","crm.conversionRate":"Conversion","crm.byType":"Par type","crm.byOutcome":"Par résultat","pages.title":"Pages","pages.newPage":"Nouvelle page","pages.editPage":"Modifier la page","pages.pageDeleted":"Page supprimée","pages.pageCreated":"Page créée","pages.pageUpdated":"Page mise à jour","pages.failedToDelete":"Échec de la suppression de la page","pages.failedToCreate":"Échec de la création de la page","pages.failedToUpdate":"Échec de la mise à jour de la page","pages.statusUpdated":"Statut de la page mis à jour","pages.failedToUpdateStatus":"Échec de la mise à jour du statut","pages.confirmDelete":"Êtes-vous sûr de vouloir supprimer cette page ?","pages.noPages":"Aucune page trouvée.","pages.noPagesDesc":"Créez votre première page pour commencer à construire votre site.","pages.noBlocks":"Aucun bloc réutilisable.","pages.noBlocksDesc":"Créez des blocs réutilisables pour les utiliser dans vos pages.","pages.publish":"Publier","pages.unpublish":"Dépublier","pages.preview":"Aperçu","pages.slug":"Slug","pages.template":"Modèle","pages.createdAt":"Créé","pages.basicInfo":"Informations de base","pages.titleLabel":"Titre","pages.titlePlaceholder":"Entrez le titre de la page...","pages.coverImage":"Image de couverture","pages.metaTitle":"Titre méta","pages.metaDescription":"Description méta","pages.ogImage":"Image OG","pages.content":"Contenu","pages.blockMode":"Blocs","pages.saveDraft":"Enregistrer le brouillon","pages.writeContent":"Rédigez le contenu de votre page...","pages.addBlock":"Ajouter un bloc","pages.chooseBlock":"Choisissez un type de bloc","pages.reusableBlocks":"Blocs réutilisables","pages.createReusable":"Créer un bloc réutilisable","pages.editReusable":"Modifier le bloc réutilisable","pages.rbName":"Nom","pages.rbType":"Type de bloc","pages.rbDescription":"Description","pages.rbContent":"Contenu","command.search":"Rechercher...","command.placeholder":"Tapez une commande ou recherchez...","command.noResults":"Aucun résultat trouvé.","command.actions":"Actions","command.switchToLight":"Passer en mode clair","command.switchToDark":"Passer en mode sombre","layout.ecommerce":"E-Commerce","layout.products":"Produits","layout.productCategories":"Catégories de produits","layout.orders":"Commandes","layout.finance":"Finance","layout.currencies":"Devises","layout.wallets":"Portefeuilles","layout.paymentChannels":"Canaux de paiement","layout.productComments":"Avis","layout.coupons":"Coupons","layout.shippingTemplates":"Modèles de livraison","products.title":"Produits","products.newProduct":"Nouveau produit","products.editProduct":"Modifier le produit","products.productTitle":"Titre du produit","products.price":"Prix","products.originalPrice":"Prix d'origine","products.stock":"Stock","products.sales":"Ventes","products.coverUrl":"URL de couverture","products.description":"Description","products.content":"Contenu","products.slug":"Slug","products.status":"Statut","products.category":"Catégorie","products.unit":"Unité","products.minPurchase":"Achat minimum","products.maxPurchase":"Achat maximum","products.sortOrder":"Ordre de tri","products.metaTitle":"Titre méta","products.metaDescription":"Description méta","products.productCreated":"Produit créé","products.productUpdated":"Produit mis à jour","products.productDeleted":"Produit supprimé","products.batchDeleted":"{{count}} produits supprimés","products.batchSuccess":"{{count}} produits mis à jour","products.batchActivate":"Activer","products.batchDeactivate":"Désactiver","products.failedToCreate":"Échec de la création du produit","products.failedToUpdate":"Échec de la mise à jour du produit","products.failedToDelete":"Échec de la suppression du produit","products.confirmDelete":"Êtes-vous sûr de vouloir supprimer ce produit ?","products.confirmBatchDelete":"Voulez-vous vraiment supprimer {{count}} produits ?","products.noProducts":"Aucun produit","products.noProductsDesc":"Créez votre premier produit pour commencer à vendre.","products.allStatus":"Tous les statuts","products.searchPlaceholder":"Rechercher un produit...","products.active":"Actif","products.draft":"Brouillon","products.archived":"Archivé","products.general":"Général","products.media":"Média","products.pricing":"Tarification","products.purchaseSettings":"Paramètres d'achat","products.summary":"Résumé","products.phTitle":"Titre du produit...","products.phSummary":"Brève description du produit...","products.images":"Images","products.cover":"Couverture","products.dropImages":"Déposez, collez ou cliquez pour uploader","productCategories.categoryName":"Nom de la catégorie","productCategories.newCategory":"Nouvelle catégorie","productCategories.createCategory":"Créer la catégorie","productCategories.editCategory":"Modifier la catégorie","productCategories.optionalDesc":"Description (facultatif)","productCategories.parent":"Catégorie parente","productCategories.noParent":"Aucune","productCategories.sortOrder":"Ordre de tri","productCategories.slug":"Slug","productCategories.noCategories":"Aucune catégorie","productCategories.noCategoriesDesc":"Créez votre première catégorie de produits pour organiser vos produits.","productCategories.categoryCreated":"Catégorie créée","productCategories.categoryUpdated":"Catégorie mise à jour","productCategories.categoryDeleted":"Catégorie supprimée","productCategories.failedToCreate":"Échec de la création","productCategories.failedToUpdate":"Échec de la mise à jour","productCategories.failedToDelete":"Échec de la suppression","productCategories.confirmDelete":"Voulez-vous vraiment supprimer cette catégorie ?","productCategories.confirmDeleteTitle":"Supprimer la catégorie","productCategories.cannotDeleteHasChildren":"Impossible de supprimer cette catégorie car elle contient {count} sous-catégories. Veuillez les déplacer ou les supprimer d'abord.","productCategories.treeTitle":"Catégories","productCategories.selectCategory":"Sélectionnez une catégorie pour voir les détails","productCategories.addChild":"Ajouter sous","orders.title":"Commandes","orders.orderNo":"N° de commande","orders.buyer":"Acheteur","orders.total":"Total","orders.status":"Statut","orders.items":"Articles","orders.remark":"Remarque","orders.adminRemark":"Remarque admin","orders.createdAt":"Créé","orders.actions":"Actions","orders.allStatus":"Tous les statuts","orders.searchPlaceholder":"Rechercher n° commande, acheteur...","orders.pending":"En attente","orders.paid":"Payé","orders.shipped":"Expédié","orders.completed":"Terminé","orders.cancelled":"Annulé","orders.refunded":"Remboursé","orders.confirmPay":"Confirmer le paiement ?","orders.orderPaid":"Commande marquée comme payée","orders.confirmShip":"Expédier cette commande ?","orders.orderShipped":"Commande expédiée","orders.confirmCancel":"Annuler cette commande ?","orders.orderCancelled":"Commande annulée","orders.confirmRefund":"Rembourser cette commande ?","orders.orderRefunded":"Commande remboursée","orders.failedToPay":"Échec du marquage comme payé","orders.failedToShip":"Échec de l'expédition","orders.failedToCancel":"Échec de l'annulation","orders.failedToRefund":"Échec du remboursement","orders.noOrders":"Aucune commande","orders.noOrdersDesc":"Les commandes apparaîtront ici lorsque les clients effectueront des achats.","orders.trackingNo":"N° de suivi","orders.carrier":"Transporteur","orders.shipInfo":"Informations d'expédition","orders.buyerInfo":"Informations sur l'acheteur","orders.shippingAddress":"Adresse de livraison","orders.orderDetail":"Détail de la commande","orders.stats.totalOrders":"Total des commandes","orders.stats.totalRevenue":"Chiffre d'affaires total","orders.stats.pending":"En attente","orders.stats.completed":"Terminées","orders.stats.todayOrders":"Commandes aujourd'hui","orders.stats.todayRevenue":"Revenus aujourd'hui","payments.title":"Canaux de paiement","payments.newChannel":"Nouveau canal","payments.provider":"Fournisseur","payments.name":"Nom du canal","payments.mode":"Mode","payments.active":"Actif","payments.live":"Production","payments.test":"Test","payments.credentials":"Identifiants","payments.webhookSecret":"Secret Webhook","payments.settings":"Paramètres","payments.channelCreated":"Canal de paiement créé","payments.channelUpdated":"Canal de paiement mis à jour","payments.channelDeleted":"Canal de paiement supprimé","payments.failedToCreate":"Échec de la création du canal de paiement","payments.failedToUpdate":"Échec de la mise à jour du canal de paiement","payments.failedToDelete":"Échec de la suppression du canal de paiement","payments.confirmDelete":"Supprimer ce canal de paiement ?","payments.noChannels":"Aucun canal de paiement","payments.noChannelsDesc":"Ajoutez un canal de paiement pour commencer à accepter les paiements.","payments.selectProvider":"Sélectionner un fournisseur...","payments.testMode":"Mode test (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"ID marchand","payments.fPrivateKey":"Clé privée RSA","payments.fSerialNo":"N° de série du certificat","payments.fWebhookSecret":"Secret de signature webhook","payments.fAlipayPublicKey":"Clé publique Alipay","payments.fPlatformCert":"Certificat plateforme (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"URL de notification","payments.phSk":"sk_live_... ou sk_test_...","payments.phRsaKey":"Collez la clé privée RSA (PEM ou Base64)","payments.phUrl":"https://...","payments.editChannel":"Modifier le canal","payments.leaveBlankToKeep":"Laisser vide pour conserver","layout.paymentOrders":"Ordres de paiement","paymentOrders.title":"Ordres de paiement","paymentOrders.orderId":"Commande","paymentOrders.title_col":"Titre","paymentOrders.amount":"Montant","paymentOrders.provider":"Fournisseur","paymentOrders.noOrders":"Aucun ordre de paiement","paymentOrders.noOrdersDesc":"Les ordres de paiement apparaîtront ici lorsque les clients paieront.","paymentOrders.refund":"Rembourser","paymentOrders.refundTitle":"Remboursement","paymentOrders.refundOrder":"Rembourser la commande","paymentOrders.refundAmount":"Montant du remboursement","paymentOrders.refundReason":"Raison","paymentOrders.refundSuccess":"Remboursement soumis","paymentOrders.refundFailed":"Échec du remboursement","layout.paymentTransactions":"Transactions de paiement","paymentTransactions.title":"Transactions de paiement","paymentTransactions.orderId":"Commande","paymentTransactions.type":"Type","paymentTransactions.amount":"Montant","paymentTransactions.providerTxId":"ID transaction fournisseur","paymentTransactions.noTransactions":"Aucune transaction","paymentTransactions.noTransactionsDesc":"Les transactions apparaîtront ici lors des événements de paiement.","currencies.title":"Devises","currencies.newCurrency":"Nouvelle devise","currencies.code":"Code","currencies.name":"Nom","currencies.decimals":"Décimales","currencies.active":"Active","currencies.currencyCreated":"Devise créée","currencies.currencyUpdated":"Devise mise à jour","currencies.failedToCreate":"Échec de la création de la devise","currencies.failedToUpdate":"Échec de la mise à jour de la devise","currencies.noCurrencies":"Aucune devise","currencies.noCurrenciesDesc":"Ajoutez une devise pour activer la prise en charge multi-devises.","wallets.title":"Portefeuilles","wallets.user":"Utilisateur","wallets.currency":"Devise","wallets.balance":"Solde","wallets.frozen":"Gelé","wallets.credit":"Créditer","wallets.debit":"Débiter","wallets.transactions":"Transactions","wallets.amount":"Montant","wallets.type":"Type","wallets.reference":"Référence","wallets.creditTitle":"Créditer le portefeuille","wallets.debitTitle":"Débiter le portefeuille","wallets.userId":"ID utilisateur","wallets.remark":"Remarque","wallets.creditSuccess":"Portefeuille crédité","wallets.debitSuccess":"Portefeuille débité","wallets.failedToCredit":"Échec du crédit du portefeuille","wallets.failedToDebit":"Échec du débit du portefeuille","wallets.noWallets":"Aucun portefeuille","wallets.noWalletsDesc":"Les portefeuilles sont créés lorsque les utilisateurs reçoivent leur première transaction.","wallets.noTransactions":"Aucune transaction pour le moment.","adminLogin.title":"Panneau d'administration","adminLogin.subtitle":"Connectez-vous avec vos identifiants administrateur","adminLogin.email":"E-mail","adminLogin.password":"Mot de passe","adminLogin.submit":"Se connecter","adminLogin.loading":"Connexion en cours…","adminLogin.error":"E-mail ou mot de passe invalide","adminLogin.footer":"RaisFast Admin — accès réservé au personnel autorisé","adminLogin.sessionExpired":"Votre session a expiré. Veuillez vous reconnecter.","setup.title":"Setup Wizard","setup.subtitle":"Let's get your RaisFast instance ready","setup.failedToFetch":"Failed to fetch system status","setup.step.check":"Check","setup.step.database":"Database","setup.step.admin":"Admin","setup.check.title":"System Check","setup.check.desc":"Verifying your environment is ready","setup.check.database":"Database","setup.check.connected":"Connected","setup.check.disconnected":"Disconnected","setup.check.storage":"File Storage","setup.check.extensions":"Extensions","setup.check.writable":"Writable","setup.check.notWritable":"Not writable","setup.check.adminUser":"Admin User","setup.check.adminExists":"Exists","setup.check.adminNeeded":"Not created","setup.check.next":"Next: Configure Database","setup.check.nextAdmin":"Next: Create Admin Account","setup.database.title":"Database Configuration","setup.database.desc":"Connect to your database","setup.database.path":"Database file path","setup.database.pathHint":"Relative to the working directory","setup.database.connectionString":"Connection String","setup.database.manualInput":"Manual Input","setup.database.url":"Database URL","setup.database.urlHint":"Paste the connection URL from your provider (e.g. Supabase, Neon, PlanetScale)","setup.database.host":"Host","setup.database.port":"Port","setup.database.username":"Username","setup.database.password":"Password","setup.database.name":"Database Name","setup.database.testConnection":"Test Connection","setup.database.testing":"Testing...","setup.database.testSuccess":"Connection successful!","setup.database.testFailed":"Connection failed","setup.database.saveAndRestart":"Save & Restart","setup.database.saving":"Saving...","setup.database.connectionError":"Connection error","setup.database.failedToSave":"Failed to save database configuration","setup.restarting.title":"Restarting...","setup.restarting.desc":"The server is restarting with the new database configuration. Please wait.","setup.admin.title":"Create Admin Account","setup.admin.desc":"Set up the first administrator for your instance","setup.admin.username":"Username","setup.admin.email":"Email","setup.admin.password":"Password","setup.admin.passwordHint":"At least 8 characters, must contain uppercase, lowercase letters and digits","setup.admin.confirmPassword":"Confirm Password","setup.admin.create":"Create Admin & Enter","setup.admin.creating":"Creating...","setup.adminCreated":"Admin account created successfully!","setup.failedToCreateAdmin":"Failed to create admin account","setup.done.title":"All Done!","setup.done.desc":"Your RaisFast instance is ready. An admin account already exists.","setup.done.goToLogin":"Go to Login","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"Intégration","layout.channels":"Canaux","layout.receipts":"Reçus","layout.apiClients":"Clients API","common.reset":"Réinitialiser","common.close":"Fermer","integration.newChannel":"Nouveau canal","integration.editChannel":"Modifier le canal","integration.channelKey":"Clé du canal","integration.displayName":"Nom d'affichage","integration.provider":"Fournisseur","integration.mode":"Mode","integration.transport":"Transport","integration.framing":"Cadrage","integration.endpoint":"Endpoint","integration.verifyKind":"Vérification","integration.verifyConfig":"Config de vérification (JSON)","integration.credentials":"Identifiants (JSON)","integration.credentialsKeepHint":"Laisser vide pour conserver les identifiants scellés","integration.mapping":"Mapping (JSONPath)","integration.pullConfig":"Config pull (JSON)","integration.streamConfig":"Config stream (JSON)","integration.targetType":"Content type cible","integration.routeExtra":"Extra de routage (JSON)","integration.redeliveryMax":"Max. de relivraisons","integration.stack":"Pile","integration.noChannels":"Aucun canal d'intégration","integration.noChannelsDesc":"Ajoutez un canal pour recevoir webhooks, flux et sondages entrants.","integration.channelCreated":"Canal créé","integration.channelUpdated":"Canal mis à jour","integration.channelDeleted":"Canal supprimé","integration.failedToCreate":"Échec de la création","integration.failedToUpdate":"Échec de la mise à jour","integration.failedToDelete":"Échec de la suppression","integration.failedToTest":"Échec du test","integration.confirmDeleteChannel":"Supprimer le canal « {key} » ? Les reçus sont conservés pour audit.","integration.testMapping":"Tester le mapping","integration.sampleBody":"Corps de requête d'exemple","integration.preview":"Aperçu de l'enveloppe normalisée","integration.runTest":"Exécuter","integration.hasCredentials":"Identifiants scellés dans le coffre","integration.allChannels":"Tous les canaux","integration.allStatuses":"Tous les statuts","integration.traceIdFilter":"Filtrer par trace ID…","integration.noReceipts":"Aucun reçu","integration.noReceiptsDesc":"Les livraisons entrantes apparaîtront ici avec leur trace complète.","integration.receivedAt":"Reçu le","integration.attempts":"Tentatives","integration.nextRetryAt":"Prochaine tentative","integration.noSteps":"Aucune étape enregistrée","integration.pending":"en attente","integration.receiptInfo":"Reçu","integration.trace":"Trace","integration.complete":"complet","integration.firstPass":"Première passe","integration.asyncChain":"Chaîne asynchrone","integration.envelopeSnapshot":"Snapshot de l'enveloppe","integration.fullSteps":"Chronologie complète des étapes","integration.egressCalls":"Appels sortants","integration.noEgress":"Aucun appel sortant","integration.noEgressDesc":"Les appels sortants déclenchés par ce reçu apparaîtront ici.","integration.replayed":"Rejoué","integration.dryRunDone":"Simulation terminée — rapport dans la trace","integration.failedToReplay":"Échec du rejeu","integration.replay":"Rejouer","integration.dryRunReplay":"Simuler le rejeu","integration.replayConfirmTitle":"Rejouer ce reçu ?","integration.replayConfirmDesc":"L'étape de routage est réexécutée depuis le snapshot d'enveloppe (upsert par external_id).","integration.receiptNotFound":"Reçu introuvable","integration.newClient":"Nouveau client API","integration.editClient":"Modifier le client API","integration.clientKey":"Clé du client","integration.baseUrl":"URL de base","integration.authConfig":"Config d'auth (JSON)","integration.rateLimit":"Limite de débit (JSON)","integration.ops":"Opérations (JSON)","integration.opsCount":"Ops","integration.noClients":"Aucun client API","integration.noClientsDesc":"Ajoutez un client API déclaratif pour les appels sortants.","integration.clientCreated":"Client API créé","integration.clientUpdated":"Client API mis à jour","integration.clientDeleted":"Client API supprimé","integration.confirmDeleteClient":"Supprimer le client API « {key} » ?","integration.testCall":"Appel de test","integration.selectOp":"Choisir une op","integration.input":"Entrée (JSON)","integration.result":"Résultat","integration.allClients":"Tous les clients","integration.egressLog":"Journal sortant","integration.latency":"Latence","integration.createdAt":"Créé le","integration.basicInfo":"Général","integration.trustSection":"Confiance (L0)","integration.normalizeSection":"Normalisation (L2)","integration.routingSection":"Routage et fiabilité (L3/L4)","integration.presetTitle":"Partir d'un préréglage","integration.presetPlaceholder":"Choisissez une configuration éprouvée…","integration.presetHint":"Préremplit tout le formulaire — ajustez ensuite clés, secrets et content type cible. Exemples issus d'intégrations réelles (GitHub / Feishu / DingTalk).","integration.presetApplied":"Préréglage appliqué — vérifiez et ajustez","integration.jsonInvalid":"JSON invalide","integration.insertExample":"Insérer un exemple","integration.presetGeneric":"Webhook générique (sans vérification)","integration.presetGenericDesc":"push simple + mapping JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + vérification de signature hmac-sha256","integration.presetGithub":"Webhook GitHub","integration.presetGithubDesc":"x-hub-signature-256, idempotence par delivery GUID","integration.presetShopify":"Webhook Shopify","integration.presetShopifyDesc":"HMAC base64, idempotence par webhook-id","integration.presetDingtalk":"Bot DingTalk Stream","integration.presetDingtalkDesc":"flux ws + framing dispatch + pre_connect","integration.presetFeishu":"Bot Feishu (connexion longue)","integration.presetFeishuDesc":"flux ws + pb-frame + poignée de main oauth","integration.presetPull":"Sondage HTTP (curseur)","integration.presetPullDesc":"pull + pagination since_id + checkpoint","integration.presetImap":"Boîte IMAP (native)","integration.presetImapDesc":"pull + imap + mime, sémantique mark-read, avec IDLE"},HC={"layout.brand":"RaisFast","layout.adminPanel":"لوحة الإدارة","layout.dashboard":"لوحة التحكم","layout.content":"المحتوى","layout.extension":"الإضافات","layout.system":"النظام","layout.posts":"المقالات","layout.categories":"التصنيفات","layout.tags":"الوسوم","layout.comments":"التعليقات","layout.media":"الوسائط","layout.contentTypes":"أنواع المحتوى","layout.users":"المستخدمون","layout.plugins":"الإضافات البرمجية","layout.rolesPermissions":"الأدوار والصلاحيات","layout.cron":"المهام المجدولة","layout.tenants":"المستأجرون","layout.webhooks":"ويب هوكس","layout.apiTokens":"رموز API","layout.workflows":"سير العمل","layout.auditLog":"سجل التدقيق","layout.options":"الخيارات","layout.tenant":"المستأجر","layout.clearTenant":"مسح فلتر المستأجر","layout.all":"الكل","layout.accessDenied":"تم رفض الوصول","layout.accessDeniedMsg":"يجب تسجيل الدخول ككاتب أو مسؤول للوصول إلى هذه المنطقة.","layout.goToLogin":"الذهاب لتسجيل الدخول","layout.toggleTheme":"تبديل السمة","layout.signOut":"تسجيل الخروج","layout.profile":"الملف الشخصي","common.loading":"جاري التحميل...","common.save":"حفظ","common.cancel":"إلغاء","common.ok":"حسناً","common.create":"إنشاء","common.creating":"جاري الإنشاء...","common.saving":"جاري الحفظ...","common.delete":"حذف","common.confirmDeleteTitle":"تأكيد الحذف","common.edit":"تعديل","common.content":"المحتوى","common.remove":"إزالة","common.view":"عرض","common.back":"رجوع","common.actions":"الإجراءات","common.status":"الحالة","common.retry":"إعادة المحاولة","common.previous":"السابق","common.next":"التالي","common.pageOf":"صفحة {page} من {total}","common.noData":"لا توجد بيانات","common.all":"الكل","common.draft":"مسودة","common.published":"منشور","common.archived":"مؤرشف","common.enabled":"مفعّل","common.disabled":"معطّل","common.name":"الاسم","common.description":"الوصف","common.enabledCount":"{count} مفعّل","common.disabledCount":"{count} معطّل","common.adminOnly":"للمسؤولين فقط","common.adminOnlyMsg":"فقط المسؤولون يمكنهم إدارة هذا القسم.","common.backToDashboard":"العودة للوحة التحكم","common.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا العنصر؟","common.notFound":"غير موجود","common.failedToLoad":"فشل التحميل","common.selectStatus":"اختر الحالة","common.titleRequired":"العنوان مطلوب","common.contentRequired":"المحتوى مطلوب","common.nameRequired":"الاسم مطلوب","common.invalidJson":"JSON غير صالح","common.isRequired":"{field} مطلوب","common.created":"تم إنشاء {name}","common.updated":"تم تحديث {name}","common.deleted":"تم حذف {name}","common.failedToCreate":"فشل إنشاء {name}","common.failedToUpdate":"فشل تحديث {name}","common.failedToDelete":"فشل حذف {name}","common.none":"لا شيء","common.noDependencies":"لا توجد تبعيات","dashboard.title":"لوحة التحكم","dashboard.posts":"المقالات","dashboard.comments":"التعليقات","dashboard.categories":"التصنيفات","dashboard.tags":"الوسوم","dashboard.media":"الوسائط","dashboard.users":"المستخدمون","dashboard.contentTypes":"أنواع المحتوى","dashboard.postsLast14Days":"المقالات (آخر 14 يوماً)","dashboard.ordersAndProducts14Days":"الطلبات والمنتجات (آخر 14 يومًا)","dashboard.viewAll":"عرض الكل","dashboard.failedToLoad":"فشل تحميل إحصائيات لوحة التحكم. قد تكون البيانات قديمة.","dashboard.noDataYet":"لا توجد بيانات بعد.","dashboard.recentActivity":"النشاط الأخير","dashboard.noActivity":"لا يوجد نشاط بعد.","dashboard.type":"النوع","dashboard.detail":"التفاصيل","dashboard.time":"الوقت","dashboard.post":"مقال","dashboard.comment":"تعليق","dashboard.product":"منتج","dashboard.order":"طلب","dashboard.products":"المنتجات","dashboard.orders":"الطلبات","dashboard.revenue":"الإيرادات","dashboard.coupons":"كوبونات","dashboard.orderStatus":"حالة الطلب","dashboard.justNow":"الآن","dashboard.minutesAgo":"د","dashboard.hoursAgo":"س","dashboard.daysAgo":"ي","posts.title":"المقالات","posts.newPost":"مقال جديد","posts.editPost":"تعديل المقال","posts.postTitle":"عنوان المقال","posts.titleCol":"العنوان","posts.categoryCol":"التصنيف","posts.authorCol":"الكاتب","posts.createdCol":"تاريخ الإنشاء","posts.allStatus":"جميع الحالات","posts.searchPlaceholder":"البحث عن المقالات...","posts.content":"المحتوى","posts.excerpt":"المقتطف","posts.briefSummary":"ملخص مختصر (اختياري)","posts.coverImage":"صورة الغلاف","posts.writeContent":"اكتب محتوى مقالك بصيغة Markdown...","posts.selectCategory":"اختر التصنيف","posts.tags":"الوسوم","posts.slug":"الرابط الثابت","posts.slugPlaceholder":"يُولّد تلقائيًا من العنوان إذا كان فارغًا","posts.noTags":"لا توجد وسوم متاحة","posts.addTag":"إضافة وسم...","posts.createTag":"إنشاء","posts.createPost":"إنشاء مقال","posts.saveChanges":"حفظ التغييرات","posts.postCreated":"تم إنشاء المقال","posts.postUpdated":"تم تحديث المقال","posts.postDeleted":"تم حذف المقال","posts.failedToCreate":"فشل إنشاء المقال","posts.failedToUpdate":"فشل تحديث المقال","posts.failedToDelete":"فشل حذف المقال","posts.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا المقال؟","posts.confirmBatchDelete":"هل أنت متأكد من حذف {count} مقال؟","posts.batchPublish":"نشر","posts.batchUnpublish":"إلغاء النشر","posts.batchSuccess":"تم تحديث {count} مقال","posts.noPosts":"لا توجد مقالات.","posts.noPostsDesc":"أنشئ أول مقال مدونة لمشاركة أفكارك.","posts.failedToLoad":"فشل تحميل المقال.","categories.title":"التصنيفات","categories.newCategory":"تصنيف جديد","categories.createCategory":"أنشئ تصنيفاً جديداً لتنظيم المقالات.","categories.categoryName":"اسم التصنيف","categories.optionalDesc":"وصف اختياري","categories.sortOrder":"ترتيب الفرز","categories.slug":"الرابط المختصر","categories.categoryCreated":"تم إنشاء التصنيف","categories.categoryUpdated":"تم تحديث التصنيف","categories.categoryDeleted":"تم حذف التصنيف","categories.failedToCreate":"فشل إنشاء التصنيف","categories.failedToUpdate":"فشل تحديث التصنيف","categories.failedToDelete":"فشل حذف التصنيف","categories.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا التصنيف؟","categories.confirmDeleteTitle":"حذف الفئة","categories.noCategories":"لا توجد تصنيفات بعد","categories.noCategoriesDesc":"نظّم مقالاتك باستخدام التصنيفات.","categories.treeTitle":"الفئات","categories.selectCategory":"اختر فئة لعرض التفاصيل","categories.addChild":"إضافة فرعي","categories.parent":"التصنيف الأب","categories.noParent":"بدون أب","categories.editCategory":"تعديل التصنيف","categories.cannotDeleteHasChildren":"لا يمكن حذف هذه الفئة لأنها تحتوي على {count} فئة فرعية. يرجى نقلها أو حذفها أولاً.","categories.coverImage":"صورة الغلاف","tags.title":"الوسوم","tags.newTag":"وسم جديد","tags.createTag":"أنشئ وسماً جديداً للمقالات.","tags.tagName":"اسم الوسم","tags.tagCreated":"تم إنشاء الوسم","tags.tagUpdated":"تم تحديث الوسم","tags.tagDeleted":"تم حذف الوسم","tags.failedToCreate":"فشل إنشاء الوسم","tags.failedToUpdate":"فشل تحديث الوسم","tags.failedToDelete":"فشل حذف الوسم","tags.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا الوسم؟","tags.noTags":"لا توجد وسوم.","tags.noTagsDesc":"أضف وسوماً للمساعدة في تنظيم وتصفية المحتوى.","comments.title":"التعليقات","comments.total":"{count} إجمالي","comments.all":"الكل","comments.pending":"قيد الانتظار","comments.approved":"تمت الموافقة","comments.rejected":"مرفوض","comments.spam":"مزعج","comments.approve":"موافقة","comments.reject":"رفض","comments.author":"الكاتب","comments.contentCol":"المحتوى","comments.post":"المقال","comments.date":"التاريخ","comments.selected":"{count} محدد","comments.commentStatusUpdated":"تم تحديث حالة التعليق","comments.commentDeleted":"تم حذف التعليق","comments.bulkActionDone":"{count} تعليق {status}","comments.bulkDeleted":"تم حذف {count} تعليق","comments.bulkActionFailed":"فشل الإجراء الجماعي","comments.bulkDeleteFailed":"فشل الحذف الجماعي","comments.failedToUpdateStatus":"فشل تحديث الحالة","comments.failedToDelete":"فشل حذف التعليق","comments.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا التعليق؟","comments.confirmBulkDelete":"حذف {count} تعليق محدد؟","comments.noComments":"لا توجد تعليقات.","comments.noCommentsDesc":"ستظهر التعليقات هنا بمجرد بدء القراء بالتفاعل.","contentTypes.title":"أنواع المحتوى","contentTypes.noFields":"لا توجد حقول قابلة للتعديل في هذا النوع من المحتوى.","contentTypes.createContentType":"إنشاء نوع محتوى","contentTypes.builder":"منشئ","contentTypes.noContentTypes":"لا توجد أنواع محتوى بعد","contentTypes.noContentTypesDesc":"أنشئ أول نوع محتوى لبدء بناء نظام إدارة المحتوى الخاص بك.","contentTypes.contentTypeDeleted":"تم حذف نوع المحتوى","contentTypes.failedToDelete":"فشل الحذف","contentTypes.confirmDelete":'حذف نوع المحتوى "{singular}"؟ سيؤدي هذا إلى إزالة ملف المخطط وليس جدول قاعدة البيانات.',"contentTypes.notFound":"نوع المحتوى غير موجود","contentTypes.notFoundMsg":'نوع المحتوى "{singular}" غير موجود.',"contentTypes.itemDeleted":"تم حذف العنصر","contentTypes.failedToDeleteItem":"فشل حذف العنصر","contentTypes.confirmDeleteItem":"هل أنت متأكد أنك تريد حذف هذا العنصر؟","contentTypes.batchDeleteSuccess":"تم حذف {count} عناصر","contentTypes.confirmBatchDelete":"هل تريد بالتأكيد حذف {count} عناصر؟","contentTypes.export":"تصدير","contentTypes.exportJson":"JSON","contentTypes.exportCsv":"CSV","contentTypes.exportExcel":"Excel","contentTypes.exportSuccess":"تم تصدير {count} عناصر","contentTypes.import":"استيراد","contentTypes.importJson":"استيراد JSON","contentTypes.importCsv":"استيراد CSV","contentTypes.importExcel":"استيراد Excel","contentTypes.importSuccess":"تم استيراد {count} سجلات","contentTypes.importPartial":"{ok} نجحت، {failed} فشلت","contentTypes.importEmpty":"لا توجد سجلات في الملف","contentTypes.importTooMany":"عدد كبير جداً من السجلات (الحد الأقصى {max})","contentTypes.importFailed":"فشل الاستيراد","contentTypes.importTooLarge":"الملف يتجاوز حد 8 ميغابايت","contentTypes.noItems":"لا توجد عناصر.","contentTypes.noItemsDesc":"أنشئ أول عنصر لتعبئة هذه المجموعة.","contentTypes.newItem":"{name} جديد","contentTypes.editItem":"تعديل {name}","contentTypes.itemNotFound":"العنصر غير موجود.","contentTypes.fields":"{count} حقل","contentTypes.fieldsLabel":"حقول","contentTypes.totalRecords":"{count} سجلات","contentTypes.createdAt":"تاريخ الإنشاء","contentTypes.updatedAt":"تاريخ التحديث","users.title":"المستخدمون","users.newUser":"مستخدم جديد","users.createUser":"إنشاء مستخدم","users.registerNew":"تسجيل حساب مستخدم جديد.","users.username":"اسم المستخدم","users.email":"البريد الإلكتروني","users.password":"كلمة المرور","users.minChars":"8 أحرف على الأقل، يجب أن يحتوي على أحرف كبيرة وصغيرة وأرقام","users.role":"الدور","users.joined":"تاريخ الانضمام","users.editRole":"تعديل دور المستخدم","users.editUser":"تعديل المستخدم","users.changeRoleFor":"تغيير دور {username} ({email})","users.reader":"قارئ","users.author":"كاتب","users.admin":"مسؤول","users.active":"نشط","users.suspended":"موقوف","users.banned":"محظور","users.newPassword":"كلمة المرور الجديدة","users.userCreated":"تم إنشاء المستخدم","users.userUpdated":"تم تحديث المستخدم","users.userRoleUpdated":"تم تحديث دور المستخدم","users.failedToCreate":"فشل إنشاء المستخدم","users.failedToUpdate":"فشل تحديث المستخدم","users.noUsers":"لا يوجد مستخدمون.","users.noUsersDesc":"ادعُ مستخدمين وأدر أدوارهم.","users.registeredVia":"مصدر التسجيل","users.userDeleted":"تم حذف المستخدم","users.failedToDelete":"فشل حذف المستخدم","users.confirmDeleteUser":'هل أنت متأكد من حذف المستخدم "{username}"؟ لا يمكن التراجع عن هذا.',"webhooks.title":"ويب هوكس","webhooks.newWebhook":"ويب هوك جديد","webhooks.createWebhook":"أنشئ اشتراك ويب هوك جديد لتلقي إشعارات الأحداث.","webhooks.callbackUrl":"رابط الاستدعاء","webhooks.eventsComma":"الأحداث (مفصولة بفواصل)","webhooks.eventsPlaceholder":"post.created, post.updated, comment.created","webhooks.useStar":"استخدم * للاشتراك في جميع الأحداث","webhooks.descriptionOptional":"الوصف (اختياري)","webhooks.urlCol":"الرابط","webhooks.events":"الأحداث","webhooks.webhookCreated":"تم إنشاء الويب هوك","webhooks.webhookUpdated":"تم تحديث الويب هوك","webhooks.webhookDeleted":"تم حذف الويب هوك","webhooks.failedToCreate":"فشل إنشاء الويب هوك","webhooks.failedToUpdate":"فشل تحديث الويب هوك","webhooks.failedToDelete":"فشل حذف الويب هوك","webhooks.confirmDelete":"حذف اشتراك الويب هوك هذا؟","webhooks.noWebhooks":"لا توجد ويب هوكس.","webhooks.noWebhooksDesc":"أعدّ ويب هوكس لتلقي إشعارات الأحداث في الوقت الفعلي.","tokens.title":"رموز API","tokens.newToken":"رمز جديد","tokens.createToken":"إنشاء رمز API","tokens.createTokenDesc":"أنشئ رمز وصول شخصي جديد. ستظهر قيمة الرمز مرة واحدة فقط.","tokens.scopesComma":"النطاقات (مفصولة بفواصل)","tokens.expiresOptional":"تاريخ الانتهاء (اختياري)","tokens.tokenCreated":"تم إنشاء الرمز","tokens.tokenRevoked":"تم إلغاء الرمز","tokens.failedToCreate":"فشل إنشاء الرمز","tokens.failedToRevoke":"فشل إلغاء الرمز","tokens.confirmRevoke":'إلغاء الرمز "{name}"؟ لا يمكن التراجع عن هذا.',"tokens.tokenCopied":"تم نسخ الرمز إلى الحافظة","tokens.tokenCreatedCopy":"تم إنشاء الرمز — انسخه الآن!","tokens.copied":"تم النسخ","tokens.copy":"نسخ","tokens.dismiss":"إغلاق","tokens.notShownAgain":"لن يظهر هذا الرمز مرة أخرى. احفظه بأمان.","tokens.scopesCol":"النطاقات","tokens.expiresCol":"الانتهاء","tokens.lastUsed":"آخر استخدام","tokens.never":"أبداً","tokens.noTokens":"لا توجد رموز API. أنشئ واحداً للبدء.","tokens.noTokensDesc":"أنشئ رموز API للوصول البرمجي.","tokens.description":"الوصف","workflows.title":"سير العمل","workflows.instances":"المثيلات","workflows.visualEditor":"المحرر المرئي","workflows.newWorkflow":"سير عمل جديد","workflows.createWorkflow":"إنشاء سير عمل","workflows.createWorkflowDesc":"حدد سير عمل جديد بالخطوات. يتم تكوين الخطوات كـ JSON.","workflows.stepsJson":"الخطوات (JSON)","workflows.stepFormat":'كل خطوة: { id, name, type: "task"|"await"|"branch"|"parallel"|"delay", config, next }',"workflows.workflowCreated":"تم إنشاء سير العمل","workflows.workflowDeleted":"تم حذف سير العمل","workflows.failedToCreate":"فشل إنشاء سير العمل","workflows.failedToDelete":"فشل حذف سير العمل","workflows.confirmDelete":'حذف سير العمل "{name}"؟',"workflows.noWorkflows":"لا توجد سير عمل. أنشئ واحداً للبدء.","workflows.noWorkflowsDesc":"حدد سير عمل لأتمتة خط أنابيب المحتوى الخاص بك.","workflows.steps":"{count} خطوة","workflows.workflowStarted":"تم بدء سير العمل","workflows.editor.title":"محرر سير العمل","workflows.editor.newWorkflow":"سير عمل جديد","workflows.editor.stepName":"اسم الخطوة","workflows.editor.branchesJson":"الفروع (مصفوفة JSON)","workflows.editor.connectEdges":"صل الحواف من هذه العقدة لتحديد الفروع.","workflows.editor.configJson":"التهيئة (JSON)","workflows.editor.apply":"تطبيق","workflows.editor.deleteStep":"حذف الخطوة","workflows.editor.addStep":"إضافة خطوة","workflows.editor.invalidJson":"JSON غير صالح في التهيئة","workflows.editor.workflowSaved":"تم حفظ سير العمل","workflows.editor.failedToSave":"فشل حفظ سير العمل","audit.title":"سجل التدقيق","audit.clearFilters":"مسح الفلاتر","audit.noLogs":"لا توجد سجلات تدقيق.","audit.action":"الإجراء","audit.actor":"الفاعل","audit.resource":"المورد","audit.timestamp":"الطابع الزمني","options.title":"الخيارات","options.saved":"تم حفظ الخيارات","options.failedToSave":"فشل حفظ الخيارات","plugins.title":"الإضافات البرمجية","plugins.loaded":"{count} محمّلة","plugins.plugin":"الإضافة","plugins.runtime":"بيئة التشغيل","plugins.hooks":"الخطافات","plugins.health":"الصحة","plugins.pluginEnabled":"تم تفعيل الإضافة","plugins.pluginDisabled":"تم تعطيل الإضافة","plugins.pluginReloaded":"تم إعادة تحميل الإضافة","plugins.pluginRemoved":"تمت إزالة الإضافة","plugins.failedToEnable":"فشل تفعيل الإضافة","plugins.failedToDisable":"فشل تعطيل الإضافة","plugins.failedToReload":"فشل إعادة تحميل الإضافة","plugins.failedToRemove":"فشل إزالة الإضافة","plugins.noPlugins":"لا توجد إضافات محمّلة.","plugins.placePlugins":"ضع الإضافات في مجلد الإضافات المحدد.","plugins.confirmRemove":'إزالة الإضافة "{name}"؟ سيتم تفريغها من الذاكرة.',"plugins.autoDisabled":"تم التعطيل تلقائياً","plugins.tooManyErrors":"أخطاء كثيرة جداً","plugins.errorCount":"{count} خطأ","plugins.errorsOccurred":"حدثت أخطاء","plugins.calls":"{count} استدعاء","plugins.idle":"خامل","plugins.notFound":"الإضافة غير موجودة","plugins.notFoundMsg":"الإضافة غير موجودة.","plugins.backToPlugins":"العودة للإضافات","plugins.general":"عام","plugins.version":"الإصدار","plugins.reload":"إعادة تحميل","plugins.remove":"إزالة","plugins.errorTracking":"تتبع الأخطاء وحالة التعطيل التلقائي","plugins.healthy":"سليم","plugins.errorCountLabel":"عدد الأخطاء","plugins.lastError":"آخر خطأ","plugins.lastErrorAt":"آخر خطأ في","plugins.autoDisabledLabel":"تم التعطيل تلقائياً","plugins.permissions":"الصلاحيات","permissions.declaredFromManifest":"الصلاحيات المعلنة من بيان الإضافة","plugins.hooksTitle":"الخطافات","plugins.hooksDesc":"نقاط الخطافات المسجلة ومقاييس تنفيذها","plugins.noHooks":"لا توجد خطافات مسجلة.","plugins.totalCalls":"إجمالي الاستدعاءات","plugins.totalErrors":"إجمالي الأخطاء","plugins.totalDuration":"إجمالي المدة","plugins.noMetrics":"لا توجد مقاييس بعد","plugins.performance":"نظرة عامة على الأداء","plugins.maxMemory":"الحد الأقصى للذاكرة","plugins.timeout":"المهلة","plugins.default":"افتراضي","media.title":"الوسائط","media.files":"{count} ملف","media.searchFiles":"البحث في الملفات...","media.fileDeleted":"تم حذف الملف","media.failedToDelete":"فشل حذف الملف","media.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا الملف؟","media.date":"التاريخ","media.size":"الحجم","media.ascending":"تصاعدي","media.descending":"تنازلي","field.mediaUrl":"رابط الوسائط","field.startWriting":"ابدأ الكتابة...","field.yes":"نعم","field.no":"لا","field.relatedItemId":"معرف العنصر المرتبط","cron.title":"المهام المجدولة","cron.newCron":"مهمة مجدولة جديدة","cron.expression":"التعبير","cron.handler":"المعالج","cron.lastRun":"آخر تشغيل","cron.nextRun":"التشغيل التالي","cron.cronCreated":"تم إنشاء المهمة المجدولة","cron.cronDeleted":"تم حذف المهمة المجدولة","cron.failedToCreate":"فشل إنشاء المهمة المجدولة","cron.failedToDelete":"فشل حذف المهمة المجدولة","cron.noCrons":"لا توجد مهام مجدولة.","cron.confirmDelete":'حذف المهمة المجدولة "{name}"؟',"cron.createSchedule":"إنشاء جدول","cron.labelField":"التسمية","cron.jobType":"نوع المهمة","cron.cronExpression":"تعبير كرون (7 أجزاء)","cron.format":"الصيغة: ثانية دقيقة ساعة يوم شهر يوم_أسبوع","cron.payload":"الحمولة (JSON، اختياري)","cron.schedules":"{count} جدول","cron.schedule":"الجدول","cron.pluginCol":"الإضافة","cron.scheduleCreated":"تم إنشاء الجدول","cron.scheduleToggled":"تم تبديل الجدول","cron.scheduleDeleted":"تم حذف الجدول","cron.scheduleUpdated":"تم تحديث الجدول","cron.noCronSchedules":"لا توجد جداول.","cron.seedHint":"أنشئ واحدة أعلاه أو فعّل CRON_SEED_ENABLED للبذر الافتراضي.","cron.confirmDeleteSchedule":'حذف الجدول "{name}"؟ لا يمكن التراجع عن هذا.',"cron.scheduleNotFound":"الجدول غير موجود","cron.backToCronSchedules":"العودة لجداول المهام","cron.scheduleDetails":"تفاصيل الجدول","cron.cronExpression7":"7 أجزاء: ثانية دقيقة ساعة يوم شهر يوم_أسبوع","cron.builtIn":"مدمج","cron.executionHistory":"سجل التنفيذ","cron.recentLogs":"سجلات التنفيذ الأخيرة لهذا الجدول","cron.cleanupOld":"تنظيف القديم","cron.cleanedUp":"تم تنظيف {count} سجل قديم","cron.noExecutionLogs":"لا توجد سجلات تنفيذ بعد.","cron.success":"ناجح","cron.failedStatus":"فاشل","cron.running":"قيد التشغيل","cron.newSchedule":"جدول جديد","cron.idField":"المعرف","cron.started":"البداية","cron.finished":"النهاية","cron.duration":"المدة","cron.error":"خطأ","cron.created":"تاريخ الإنشاء","cron.updated":"تاريخ التحديث","tenants.title":"المستأجرون","tenants.newTenant":"مستأجر جديد","tenants.createTenant":"أنشئ مستأجراً جديداً لعزل البيانات.","tenants.tenantName":"اسم المستأجر","tenants.slug":"الرابط المختصر","tenants.domain":"النطاق","tenants.owner":"المالك","tenants.tenantCreated":"تم إنشاء المستأجر","tenants.tenantUpdated":"تم تحديث المستأجر","tenants.tenantDeleted":"تم حذف المستأجر","tenants.failedToCreate":"فشل إنشاء المستأجر","tenants.failedToUpdate":"فشل تحديث المستأجر","tenants.failedToDelete":"فشل حذف المستأجر","tenants.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا المستأجر؟","tenants.noTenants":"لا يوجد مستأجرون.","tenants.noTenantsDesc":"أنشئ مستأجرين لـ SaaS متعدد المستأجرين.","tenants.createForIsolation":"أنشئ مستأجراً جديداً لعزل البيانات.","tenants.cannotDeleteDefault":"لا يمكن حذف المستأجر الافتراضي","tenants.confirmDeleteMsg":"حذف هذا المستأجر؟ لن تُحذف البيانات التابعة له.","tenants.created":"تاريخ الإنشاء","rbac.title":"الأدوار والصلاحيات","rbac.roles":"الأدوار","rbac.newRole":"دور جديد","rbac.createRole":"أنشئ دوراً جديداً للتحكم في الوصول.","rbac.roleName":"اسم الدور","rbac.roleDesc":"وصف الدور","rbac.roleCreated":"تم إنشاء الدور","rbac.roleUpdated":"تم تحديث الدور","rbac.roleDeleted":"تم حذف الدور","rbac.failedToCreate":"فشل إنشاء الدور","rbac.failedToUpdate":"فشل تحديث الدور","rbac.failedToDelete":"فشل حذف الدور","rbac.confirmDelete":'حذف الدور "{name}"؟ سيؤدي هذا لإزالة جميع الصلاحيات المرتبطة.',"rbac.systemRole":"النظام","rbac.permissions":"الصلاحيات","rbac.addPermission":"إضافة صلاحية","rbac.action":"الإجراء","rbac.subject":"الموضوع","rbac.noRoles":"لا توجد أدوار.","rbac.addRoleDesc":"أضف دوراً جديداً للنظام.","rbac.updateRoleDesc":'تحديث دور "{name}".',"rbac.deleteRoleTitle":"حذف الدور","rbac.deleteRoleConfirm":'هل أنت متأكد أنك تريد حذف "{name}"؟ لا يمكن التراجع عن هذا.',"rbac.addPermissionTitle":"إضافة صلاحية","rbac.addPermissionDesc":'منح صلاحية جديدة لـ "{name}". استخدم * للبدل.',"rbac.fieldsCol":"الحقول","rbac.conditionsCol":"الشروط","rbac.fieldsOptional":"الحقول (مفصولة بفواصل، اختياري)","rbac.removePermissionTitle":"إزالة صلاحية","rbac.removePermissionDesc":"إزالة {action} على {subject}؟","rbac.noPermissions":"لا توجد صلاحيات مُعدة.","rbac.selectRole":"اختر دوراً لعرض الصلاحيات","rbac.prev":"السابق","builder.title":"مُنشئ نوع المحتوى","builder.editContentType":"تعديل نوع المحتوى","builder.createContentType":"إنشاء نوع محتوى","builder.baseConfig":"التهيئة الأساسية","builder.singularName":"الاسم المفرد","builder.pluralName":"اسم الجمع","builder.tableName":"اسم الجدول","builder.fieldsSection":"الحقول","builder.addField":"إضافة حقل","builder.preview":"معاينة","builder.save":"حفظ نوع المحتوى","builder.saving":"جاري الحفظ...","builder.saved":"تم حفظ نوع المحتوى","builder.failedToSave":"فشل حفظ نوع المحتوى","builder.confirmDeleteField":'حذف الحقل "{name}"؟',"builder.text":"نص","builder.richText":"نص منسق","builder.email":"بريد إلكتروني","builder.password":"كلمة المرور","builder.uid":"معرف فريد","builder.integer":"عدد صحيح","builder.bigInt":"عدد صحيح كبير","builder.decimal":"عشري","builder.float":"فاصلة عائمة","builder.boolean":"منطقي","builder.date":"تاريخ","builder.datetime":"تاريخ ووقت","builder.time":"وقت","builder.enumType":"تعداد","builder.jsonType":"JSON","builder.relation":"علاقة","builder.mediaType":"وسائط","builder.link":"رابط","builder.required":"مطلوب","builder.unique":"فريد","builder.privateField":"خاص","builder.immutable":"غير قابل للتعديل","builder.label":"التسمية","builder.defaultValue":"القيمة الافتراضية","builder.maxLength":"الحد الأقصى للطول","builder.minValue":"الحد الأدنى","builder.maxValue":"الحد الأقصى","builder.enumValues":"قيم التعداد (مفصولة بفواصل)","builder.relationType":"نوع العلاقة","builder.relationTarget":"الجدول الهدف","builder.foreignKey":"المفتاح الأجنبي","builder.throughTable":"جدول الوساطة","builder.draftPublish":"مسودة/نشر","builder.timestamps":"الطوابع الزمنية","builder.softDelete":"حذف ناعم","builder.slugField":"حقل الرابط المختصر","media.name":"الاسم","media.type":"النوع","media.other":"أخرى","media.uploadFailed":"فشل الرفع","media.dropFiles":"أسقط الملفات هنا، الصقها، أو {browse}","media.uploading":"جاري رفع {count} ملف...","media.done":"تم","media.failedUpload":"فشل","media.urlCopied":"تم نسخ الرابط","media.copyUrl":"نسخ الرابط","media.download":"تنزيل","media.dimensions":"الأبعاد","media.uploaded":"تاريخ الرفع","media.urlLabel":"الرابط","media.noVideoSupport":"متصفحك لا يدعم الفيديو.","media.downloadFile":"تنزيل الملف","workflows.instances.title":"مثيلات سير العمل","workflows.instances.showLogs":"عرض السجلات","workflows.instances.hideLogs":"إخفاء السجلات","workflows.instances.currentStep":"الحالي","workflows.instances.context":"السياق","workflows.instances.stepLogs":"سجلات الخطوة ({count})","workflows.instances.noStepLogs":"لا توجد سجلات خطوة.","workflows.instances.noInstances":"لا توجد مثيلات سير عمل.","workflows.instances.instanceCount":"{count} مثيل","workflows.instances.definitions":"التعريفات","workflows.instances.filterStatus":"فلتر الحالة","workflows.instances.cancelled":"تم إلغاء المثيل","workflows.editor.editStep":"تعديل الخطوة","workflows.editor.name":"الاسم","workflows.editor.type":"النوع","workflows.editor.backToList":"العودة للقائمة","workflows.editor.workflowName":"اسم سير العمل...","workflows.editor.failedToLoad":"فشل تحميل سير العمل","workflows.editor.immutableNotice":"تعريفات سير العمل غير قابلة للتعديل. أنشئ واحداً جديداً لتغيير الخطوات.","workflows.editor.untitled":"سير عمل بدون عنوان","workflows.editor.save":"حفظ","workflows.editor.saving":"جاري الحفظ...","options.noChanges":"لا توجد تغييرات","options.noOptions":"لا توجد خيارات متاحة.","options.reset":"إعادة تعيين","options.saveChanges":"حفظ التغييرات","audit.failedToLoad":"فشل تحميل سجل التدقيق. يرجى المحاولة مرة أخرى.","audit.noEntries":"لا توجد سجلات تدقيق.","audit.noEntriesDesc":"ستظهر سجلات التدقيق عند تنفيذ الإجراءات.","audit.timeCol":"الوقت","audit.subjectId":"معرف الموضوع","audit.detailCol":"التفاصيل","audit.system":"النظام","audit.from":"من","audit.to":"إلى","audit.search":"بحث","audit.clear":"مسح","audit.today":"اليوم","builder.untitled":"نوع محتوى بدون عنوان","builder.fieldCount":"{count} حقل","builder.fieldList":"الحقول","builder.protocols":"البروتوكولات","builder.systemFields":"حقول النظام","builder.system":"نظام","builder.newField":"حقل جديد","builder.addAnotherField":"إضافة حقل آخر","builder.addAField":"إضافة حقل","builder.chooseFieldType":"اختر نوع حقل لإضافته لنوع المحتوى.","builder.fieldConfiguration":"تهيئة الحقل","builder.fieldName":"اسم الحقل","builder.fieldTypeLabel":"نوع الحقل","builder.displayLabel":"تسمية العرض","builder.helpText":"نص المساعدة","builder.removeField":"إزالة الحقل","builder.removeFieldConfirm":"إزالة هذا الحقل؟","builder.noAdditionalOptions":"لا توجد خيارات إضافية لهذا النوع من الحقول.","builder.acceptedTypes":"الأنواع المقبولة","builder.maxCount":"الحد الأقصى للعدد","builder.target":"الهدف","builder.valuesComma":"القيم (مفصولة بفواصل)","builder.describeContentType":"صف نوع المحتوى هذا...","builder.contentTypeUpdated":"تم تحديث نوع المحتوى","builder.contentTypeCreated":"تم إنشاء نوع المحتوى","builder.newFieldCategory":"رقم","layout.crm":"إدارة العملاء","layout.pages":"الصفحات","layout.reusableBlocks":"الكتل","crm.dashboard":"لوحة إدارة العملاء","crm.pipeline":"خط الأنابيب","crm.contacts":"جهات الاتصال","crm.companies":"الشركات","crm.deals":"الصفقات","crm.activities":"الأنشطة","crm.notes":"الملاحظات","crm.reports":"التقارير","crm.totalCompanies":"إجمالي الشركات","crm.totalContacts":"إجمالي جهات الاتصال","crm.openDeals":"الصفقات المفتوحة","crm.wonDeals":"الصفقات الرابحة","crm.pipelineValue":"قيمة خط الأنابيب","crm.weightedValue":"القيمة المرجحة","crm.winRate":"معدل الفوز","crm.avgDealSize":"متوسط حجم الصفقة","crm.recentActivities":"أنشطة هذا الأسبوع","crm.totalActivities":"إجمالي الأنشطة","crm.leaderboard":"لوحة المتصدرين","crm.noData":"لا توجد بيانات متاحة.","crm.newDeal":"صفقة جديدة","crm.createDeal":"إنشاء صفقة","crm.dealTitle":"العنوان","crm.dealTitlePlaceholder":"أدخل عنوان الصفقة...","crm.amount":"المبلغ","crm.probability":"الاحتمالية","crm.stage":"المرحلة","crm.advanceStage":"التقدم للمرحلة التالية","crm.totalValue":"القيمة الإجمالية","crm.dealCreated":"تم إنشاء الصفقة","crm.failedToCreateDeal":"فشل إنشاء الصفقة","crm.dealStageUpdated":"تم تحديث مرحلة الصفقة","crm.failedToUpdateStage":"فشل تحديث المرحلة","crm.titleRequired":"العنوان مطلوب","crm.newContact":"جهة اتصال جديدة","crm.editContact":"تعديل جهة الاتصال","crm.contact":"جهة اتصال","crm.name":"الاسم","crm.email":"البريد الإلكتروني","crm.phone":"الهاتف","crm.company":"الشركة","crm.source":"المصدر","crm.lifecycleStage":"مرحلة دورة الحياة","crm.noContacts":"لا توجد جهات اتصال.","crm.firstName":"الاسم الأول","crm.lastName":"اسم العائلة","crm.jobTitle":"المسمى الوظيفي","crm.newCompany":"شركة جديدة","crm.editCompany":"تعديل الشركة","crm.companyName":"اسم الشركة","crm.industry":"الصناعة","crm.size":"الحجم","crm.website":"الموقع الإلكتروني","crm.city":"المدينة","crm.country":"الدولة","crm.noCompanies":"لا توجد شركات.","crm.deal":"صفقة","crm.editDeal":"تعديل الصفقة","crm.closeDate":"تاريخ الإغلاق","crm.lossReason":"سبب الخسارة","crm.noDeals":"لا توجد صفقات.","crm.dealInfo":"معلومات الصفقة","crm.newActivity":"نشاط جديد","crm.editActivity":"تعديل النشاط","crm.activity":"النشاط","crm.type":"النوع","crm.subject":"الموضوع","crm.content":"المحتوى","crm.date":"التاريخ","crm.duration":"المدة","crm.outcome":"النتيجة","crm.noActivities":"لا توجد أنشطة.","crm.newNote":"ملاحظة جديدة","crm.editNote":"تعديل الملاحظة","crm.note":"ملاحظة","crm.relatedTo":"مرتبط بـ","crm.pinned":"مثبّت","crm.createdAt":"تاريخ الإنشاء","crm.noNotes":"لا توجد ملاحظات.","crm.contentRequired":"المحتوى مطلوب","crm.relatedContactId":"معرف جهة الاتصال المرتبطة","crm.relatedCompanyId":"معرف الشركة المرتبطة","crm.relatedDealId":"معرف الصفقة المرتبطة","crm.contactInfo":"معلومات جهة الاتصال","crm.timeline":"الجدول الزمني","crm.noTimeline":"لا توجد أحداث في الجدول الزمني.","crm.addNote":"إضافة ملاحظة","crm.notePlaceholder":"اكتب ملاحظة...","crm.lifecycleUpdated":"تم تحديث مرحلة دورة الحياة","crm.failedToUpdateLifecycle":"فشل تحديث مرحلة دورة الحياة","crm.companyInfo":"معلومات الشركة","crm.funnelReport":"تقرير القمع","crm.activityReport":"تقرير الأنشطة","crm.conversionRate":"التحويل","crm.byType":"حسب النوع","crm.byOutcome":"حسب النتيجة","pages.title":"الصفحات","pages.newPage":"صفحة جديدة","pages.editPage":"تعديل الصفحة","pages.pageDeleted":"تم حذف الصفحة","pages.pageCreated":"تم إنشاء الصفحة","pages.pageUpdated":"تم تحديث الصفحة","pages.failedToDelete":"فشل حذف الصفحة","pages.failedToCreate":"فشل إنشاء الصفحة","pages.failedToUpdate":"فشل تحديث الصفحة","pages.statusUpdated":"تم تحديث حالة الصفحة","pages.failedToUpdateStatus":"فشل تحديث الحالة","pages.confirmDelete":"هل أنت متأكد أنك تريد حذف هذه الصفحة؟","pages.noPages":"لا توجد صفحات.","pages.noPagesDesc":"أنشئ أول صفحة لبدء بناء موقعك.","pages.noBlocks":"لا توجد كتل قابلة لإعادة الاستخدام.","pages.noBlocksDesc":"أنشئ كتل قابلة لإعادة الاستخدام لاستخدامها عبر صفحاتك.","pages.publish":"نشر","pages.unpublish":"إلغاء النشر","pages.preview":"معاينة","pages.slug":"الرابط المختصر","pages.template":"القالب","pages.createdAt":"تاريخ الإنشاء","pages.basicInfo":"معلومات أساسية","pages.titleLabel":"العنوان","pages.titlePlaceholder":"أدخل عنوان الصفحة...","pages.coverImage":"صورة الغلاف","pages.metaTitle":"عنوان Meta","pages.metaDescription":"وصف Meta","pages.ogImage":"صورة OG","pages.content":"المحتوى","pages.blockMode":"الكتل","pages.saveDraft":"حفظ كمسودة","pages.writeContent":"اكتب محتوى صفحتك...","pages.addBlock":"إضافة كتلة","pages.chooseBlock":"اختر نوع كتلة","pages.reusableBlocks":"الكتل القابلة لإعادة الاستخدام","pages.createReusable":"إنشاء كتلة قابلة لإعادة الاستخدام","pages.editReusable":"تعديل كتلة قابلة لإعادة الاستخدام","pages.rbName":"الاسم","pages.rbType":"نوع الكتلة","pages.rbDescription":"الوصف","pages.rbContent":"المحتوى","command.search":"بحث...","command.placeholder":"اكتب أمراً أو ابحث...","command.noResults":"لا توجد نتائج.","command.actions":"الإجراءات","command.switchToLight":"التبديل للوضع الفاتح","command.switchToDark":"التبديل للوضع الداكن","layout.ecommerce":"التجارة الإلكترونية","layout.products":"المنتجات","layout.productCategories":"تصنيفات المنتجات","layout.orders":"الطلبات","layout.finance":"المالية","layout.currencies":"العملات","layout.wallets":"المحافظ","layout.paymentChannels":"قنوات الدفع","layout.productComments":"المراجعات","layout.coupons":"الكوبونات","layout.shippingTemplates":"قوالب الشحن","products.title":"المنتجات","products.newProduct":"منتج جديد","products.editProduct":"تعديل المنتج","products.productTitle":"عنوان المنتج","products.price":"السعر","products.originalPrice":"السعر الأصلي","products.stock":"المخزون","products.sales":"المبيعات","products.coverUrl":"رابط الغلاف","products.description":"الوصف","products.content":"المحتوى","products.slug":"الرابط المختصر","products.status":"الحالة","products.category":"التصنيف","products.unit":"الوحدة","products.minPurchase":"الحد الأدنى للشراء","products.maxPurchase":"الحد الأقصى للشراء","products.sortOrder":"ترتيب الفرز","products.metaTitle":"عنوان Meta","products.metaDescription":"وصف Meta","products.productCreated":"تم إنشاء المنتج","products.productUpdated":"تم تحديث المنتج","products.productDeleted":"تم حذف المنتج","products.batchDeleted":"تم حذف {{count}} منتج","products.batchSuccess":"تم تحديث {{count}} منتج","products.batchActivate":"تفعيل","products.batchDeactivate":"إلغاء التفعيل","products.failedToCreate":"فشل إنشاء المنتج","products.failedToUpdate":"فشل تحديث المنتج","products.failedToDelete":"فشل حذف المنتج","products.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا المنتج؟","products.confirmBatchDelete":"هل أنت متأكد من حذف {{count}} منتج؟","products.noProducts":"لا توجد منتجات بعد","products.noProductsDesc":"أنشئ أول منتج لبدء البيع.","products.allStatus":"جميع الحالات","products.searchPlaceholder":"البحث عن منتج...","products.active":"نشط","products.draft":"مسودة","products.archived":"مؤرشف","products.general":"عام","products.media":"وسائط","products.pricing":"التسعير","products.purchaseSettings":"إعدادات الشراء","products.summary":"ملخص","products.phTitle":"أدخل عنوان المنتج...","products.phSummary":"وصف مختصر للمنتج...","products.images":"الصور","products.cover":"الغلاف","products.dropImages":"اسحب الصور هنا، أو الصقها، أو انقر للتحميل","productCategories.categoryName":"اسم التصنيف","productCategories.newCategory":"تصنيف جديد","productCategories.createCategory":"إنشاء تصنيف","productCategories.editCategory":"تعديل التصنيف","productCategories.optionalDesc":"الوصف (اختياري)","productCategories.parent":"التصنيف الأب","productCategories.noParent":"بدون أب","productCategories.sortOrder":"ترتيب الفرز","productCategories.slug":"الرابط المختصر","productCategories.noCategories":"لا توجد تصنيفات بعد","productCategories.noCategoriesDesc":"أنشئ أول تصنيف منتجات لتنظيم منتجاتك.","productCategories.categoryCreated":"تم إنشاء التصنيف","productCategories.categoryUpdated":"تم تحديث التصنيف","productCategories.categoryDeleted":"تم حذف التصنيف","productCategories.failedToCreate":"فشل إنشاء التصنيف","productCategories.failedToUpdate":"فشل تحديث التصنيف","productCategories.failedToDelete":"فشل حذف التصنيف","productCategories.confirmDelete":"هل أنت متأكد أنك تريد حذف هذا التصنيف؟","productCategories.confirmDeleteTitle":"حذف الفئة","productCategories.cannotDeleteHasChildren":"لا يمكن حذف هذه الفئة لأنها تحتوي على {count} فئة فرعية. يرجى نقلها أو حذفها أولاً.","productCategories.treeTitle":"الفئات","productCategories.selectCategory":"اختر فئة لعرض التفاصيل","productCategories.addChild":"إضافة فرعي","orders.title":"الطلبات","orders.orderNo":"رقم الطلب","orders.buyer":"المشتري","orders.total":"الإجمالي","orders.status":"الحالة","orders.items":"العناصر","orders.remark":"ملاحظة","orders.adminRemark":"ملاحظة المسؤول","orders.createdAt":"تاريخ الإنشاء","orders.actions":"الإجراءات","orders.allStatus":"جميع الحالات","orders.searchPlaceholder":"البحث برقم الطلب، اسم المشتري...","orders.pending":"قيد الانتظار","orders.paid":"مدفوع","orders.shipped":"تم الشحن","orders.completed":"مكتمل","orders.cancelled":"ملغى","orders.refunded":"مسترد","orders.confirmPay":"تأكيد الدفع؟","orders.orderPaid":"تم تعليم الطلب كمدفوع","orders.confirmShip":"شحن هذا الطلب؟","orders.orderShipped":"تم شحن الطلب","orders.confirmCancel":"إلغاء هذا الطلب؟","orders.orderCancelled":"تم إلغاء الطلب","orders.confirmRefund":"استرداد هذا الطلب؟","orders.orderRefunded":"تم استرداد الطلب","orders.failedToPay":"فشل التعليم كمدفوع","orders.failedToShip":"فشل الشحن","orders.failedToCancel":"فشل الإلغاء","orders.failedToRefund":"فشل الاسترداد","orders.noOrders":"لا توجد طلبات بعد","orders.noOrdersDesc":"ستظهر الطلبات هنا عند قيام العملاء بالشراء.","orders.trackingNo":"رقم التتبع","orders.carrier":"شركة الشحن","orders.shipInfo":"معلومات الشحن","orders.buyerInfo":"معلومات المشتري","orders.shippingAddress":"عنوان الشحن","orders.orderDetail":"تفاصيل الطلب","orders.stats.totalOrders":"إجمالي الطلبات","orders.stats.totalRevenue":"إجمالي الإيرادات","orders.stats.pending":"قيد الانتظار","orders.stats.completed":"مكتمل","orders.stats.todayOrders":"طلبات اليوم","orders.stats.todayRevenue":"إيرادات اليوم","payments.title":"قنوات الدفع","payments.newChannel":"قناة جديدة","payments.provider":"مزود الخدمة","payments.name":"اسم القناة","payments.mode":"الوضع","payments.active":"نشط","payments.live":"مباشر","payments.test":"اختبار","payments.credentials":"بيانات الاعتماد","payments.webhookSecret":"سر الويب هوك","payments.settings":"الإعدادات","payments.channelCreated":"تم إنشاء قناة الدفع","payments.channelUpdated":"تم تحديث قناة الدفع","payments.channelDeleted":"تم حذف قناة الدفع","payments.failedToCreate":"فشل إنشاء قناة الدفع","payments.failedToUpdate":"فشل تحديث قناة الدفع","payments.failedToDelete":"فشل حذف قناة الدفع","payments.confirmDelete":"حذف قناة الدفع هذه؟","payments.noChannels":"لا توجد قنوات دفع","payments.noChannelsDesc":"أضف قناة دفع لبدء قبول المدفوعات.","payments.selectProvider":"اختر مزود الدفع...","payments.testMode":"وضع الاختبار (sandbox)","payments.fSecretKey":"Secret Key","payments.fApiKey":"API Key","payments.fAppId":"App ID","payments.fMchId":"معرف التاجر","payments.fPrivateKey":"مفتاح RSA الخاص","payments.fSerialNo":"الرقم التسلسلي للشهادة","payments.fWebhookSecret":"سر توقيع Webhook","payments.fAlipayPublicKey":"مفتاح Alipay العام","payments.fPlatformCert":"شهادة المنصة (PEM)","payments.fProductId":"Product ID","payments.fNotifyUrl":"رابط الإشعار","payments.phSk":"sk_live_... أو sk_test_...","payments.phRsaKey":"الصق مفتاح RSA الخاص (PEM أو Base64)","payments.phUrl":"https://...","payments.editChannel":"تحرير القناة","payments.leaveBlankToKeep":"اترك فارغاً للإبقاء على الحالي","layout.paymentOrders":"أوامر الدفع","paymentOrders.title":"أوامر الدفع","paymentOrders.orderId":"الطلب","paymentOrders.title_col":"العنوان","paymentOrders.amount":"المبلغ","paymentOrders.provider":"مزود الدفع","paymentOrders.noOrders":"لا توجد أوامر دفع","paymentOrders.noOrdersDesc":"ستظهر أوامر الدفع هنا عندما يقوم العملاء بالدفع.","paymentOrders.refund":"استرداد","paymentOrders.refundTitle":"استرداد الأموال","paymentOrders.refundOrder":"استرداد الطلب","paymentOrders.refundAmount":"مبلغ الاسترداد","paymentOrders.refundReason":"السبب","paymentOrders.refundSuccess":"تم تقديم الاسترداد","paymentOrders.refundFailed":"فشل الاسترداد","layout.paymentTransactions":"معاملات الدفع","paymentTransactions.title":"معاملات الدفع","paymentTransactions.orderId":"الطلب","paymentTransactions.type":"النوع","paymentTransactions.amount":"المبلغ","paymentTransactions.providerTxId":"معرف معاملة المزود","paymentTransactions.noTransactions":"لا توجد معاملات","paymentTransactions.noTransactionsDesc":"ستظهر المعاملات هنا عند حدوث أحداث الدفع.","currencies.title":"العملات","currencies.newCurrency":"عملة جديدة","currencies.code":"الرمز","currencies.name":"الاسم","currencies.decimals":"المنازل العشرية","currencies.active":"نشط","currencies.currencyCreated":"تم إنشاء العملة","currencies.currencyUpdated":"تم تحديث العملة","currencies.failedToCreate":"فشل إنشاء العملة","currencies.failedToUpdate":"فشل تحديث العملة","currencies.noCurrencies":"لا توجد عملات","currencies.noCurrenciesDesc":"أضف عملة لتفعيل دعم العملات المتعددة.","wallets.title":"المحافظ","wallets.user":"المستخدم","wallets.currency":"العملة","wallets.balance":"الرصيد","wallets.frozen":"مجمّد","wallets.credit":"إيداع","wallets.debit":"سحب","wallets.transactions":"المعاملات","wallets.amount":"المبلغ","wallets.type":"النوع","wallets.reference":"المرجع","wallets.creditTitle":"إيداع في المحفظة","wallets.debitTitle":"سحب من المحفظة","wallets.userId":"معرف المستخدم","wallets.remark":"ملاحظة","wallets.creditSuccess":"تم الإيداع في المحفظة","wallets.debitSuccess":"تم السحب من المحفظة","wallets.failedToCredit":"فشل الإيداع في المحفظة","wallets.failedToDebit":"فشل السحب من المحفظة","wallets.noWallets":"لا توجد محافظ","wallets.noWalletsDesc":"تُنشأ المحافظ عند تلقي المستخدمين أول معاملة.","wallets.noTransactions":"لا توجد معاملات بعد.","adminLogin.title":"لوحة الإدارة","adminLogin.subtitle":"سجل الدخول باستخدام بيانات المسؤول","adminLogin.email":"البريد الإلكتروني","adminLogin.password":"كلمة المرور","adminLogin.submit":"تسجيل الدخول","adminLogin.loading":"جاري تسجيل الدخول...","adminLogin.error":"بريد إلكتروني أو كلمة مرور غير صحيحة","adminLogin.footer":"RaisFast Admin — للموظفين المصرح لهم فقط","adminLogin.sessionExpired":"انتهت جلستك. يرجى تسجيل الدخول مرة أخرى.","setup.title":"معالج الإعداد","setup.subtitle":"لنُعدّ مثيل RaisFast الخاص بك","setup.failedToFetch":"فشل جلب حالة النظام","setup.step.check":"فحص","setup.step.database":"قاعدة البيانات","setup.step.admin":"المسؤول","setup.check.title":"فحص النظام","setup.check.desc":"جاري التحقق من جاهزية البيئة","setup.check.database":"قاعدة البيانات","setup.check.connected":"متصل","setup.check.disconnected":"غير متصل","setup.check.storage":"تخزين الملفات","setup.check.extensions":"الامتدادات","setup.check.writable":"قابل للكتابة","setup.check.notWritable":"غير قابل للكتابة","setup.check.adminUser":"مستخدم المسؤول","setup.check.adminExists":"موجود","setup.check.adminNeeded":"لم يتم الإنشاء","setup.check.next":"التالي: تهيئة قاعدة البيانات","setup.check.nextAdmin":"التالي: إنشاء حساب المسؤول","setup.database.title":"تهيئة قاعدة البيانات","setup.database.desc":"اتصل بقاعدة البيانات الخاصة بك","setup.database.path":"مسار ملف قاعدة البيانات","setup.database.pathHint":"نسبي لمجلد العمل","setup.database.connectionString":"سلسلة الاتصال","setup.database.manualInput":"إدخال يدوي","setup.database.url":"رابط قاعدة البيانات","setup.database.urlHint":"الصق رابط الاتصال من مزود الخدمة (مثل Supabase, Neon, PlanetScale)","setup.database.host":"المضيف","setup.database.port":"المنفذ","setup.database.username":"اسم المستخدم","setup.database.password":"كلمة المرور","setup.database.name":"اسم قاعدة البيانات","setup.database.testConnection":"اختبار الاتصال","setup.database.testing":"جاري الاختبار...","setup.database.testSuccess":"نجح الاتصال!","setup.database.testFailed":"فشل الاتصال","setup.database.saveAndRestart":"حفظ وإعادة التشغيل","setup.database.saving":"جاري الحفظ...","setup.database.connectionError":"خطأ في الاتصال","setup.database.failedToSave":"فشل حفظ تهيئة قاعدة البيانات","setup.restarting.title":"جاري إعادة التشغيل...","setup.restarting.desc":"يقوم الخادم بإعادة التشغيل بتهيئة قاعدة البيانات الجديدة. يرجى الانتظار.","setup.admin.title":"إنشاء حساب المسؤول","setup.admin.desc":"أنشئ أول مسؤول لمثيلك","setup.admin.username":"اسم المستخدم","setup.admin.email":"البريد الإلكتروني","setup.admin.password":"كلمة المرور","setup.admin.passwordHint":"8 أحرف على الأقل، يجب أن تحتوي على حروف كبيرة وصغيرة وأرقام","setup.admin.mustContainUppercase":"يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل","setup.admin.mustContainLowercase":"يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل","setup.admin.mustContainDigit":"يجب أن تحتوي كلمة المرور على رقم واحد على الأقل","setup.admin.passwordsNotMatch":"كلمات المرور غير متطابقة","setup.admin.confirmPassword":"تأكيد كلمة المرور","setup.admin.create":"إنشاء المسؤول والدخول","setup.admin.creating":"جاري الإنشاء...","setup.adminCreated":"تم إنشاء حساب المسؤول بنجاح!","setup.failedToCreateAdmin":"فشل إنشاء حساب المسؤول","setup.done.title":"تم الكل!","setup.done.desc":"مثيل RaisFast الخاص بك جاهز. حساب المسؤول موجود بالفعل.","setup.done.goToLogin":"الذهاب لتسجيل الدخول","productComments.title":"Product Reviews","productComments.content":"Content","productComments.rating":"Rating","productComments.reply":"Reply","productComments.pending":"Pending","productComments.approved":"Approved","productComments.rejected":"Rejected","productComments.approve":"Approve","productComments.reject":"Reject","productComments.replyAction":"Reply","productComments.editReply":"Edit Reply","productComments.replyPlaceholder":"Write your reply...","productComments.sendReply":"Send Reply","productComments.statusUpdated":"Review status updated","productComments.replySent":"Reply sent","productComments.failedToUpdateStatus":"Failed to update status","productComments.failedToReply":"Failed to send reply","productComments.commentDeleted":"Review deleted","productComments.failedToDelete":"Failed to delete review","productComments.confirmDelete":"Delete this review?","productComments.noComments":"No reviews yet","productComments.noCommentsDesc":"Reviews will appear here.","coupons.title":"Coupons","coupons.newCoupon":"New Coupon","coupons.editCoupon":"Edit Coupon","coupons.code":"Code","coupons.type":"Type","coupons.value":"Value","coupons.percentage":"Percentage","coupons.fixed":"Fixed Amount","coupons.minOrder":"Min Order","coupons.maxUses":"Max Uses","coupons.usedCount":"Used","coupons.startsAt":"Starts At","coupons.expiresAt":"Expires At","coupons.couponCreated":"Coupon created","coupons.couponUpdated":"Coupon updated","coupons.couponDeleted":"Coupon deleted","coupons.failedToCreate":"Failed to create coupon","coupons.failedToUpdate":"Failed to update coupon","coupons.failedToDelete":"Failed to delete coupon","coupons.confirmDelete":"Delete this coupon?","coupons.noCoupons":"No coupons yet","coupons.noCouponsDesc":"Create coupons for discounts.","shippingTemplates.title":"Shipping Templates","shippingTemplates.newTemplate":"New Template","shippingTemplates.editTemplate":"Edit Template","shippingTemplates.type":"Calculation Type","shippingTemplates.byWeight":"By Weight","shippingTemplates.byQuantity":"By Quantity","shippingTemplates.fixed":"Fixed","shippingTemplates.firstUnit":"First Unit","shippingTemplates.firstPrice":"First Price","shippingTemplates.additionalUnit":"Additional Unit","shippingTemplates.additionalPrice":"Additional Price","shippingTemplates.freeShipping":"Free Shipping Over","shippingTemplates.regions":"Regions (JSON)","shippingTemplates.templateCreated":"Shipping template created","shippingTemplates.templateUpdated":"Shipping template updated","shippingTemplates.templateDeleted":"Shipping template deleted","shippingTemplates.failedToCreate":"Failed to create template","shippingTemplates.failedToUpdate":"Failed to update template","shippingTemplates.failedToDelete":"Failed to delete template","shippingTemplates.confirmDelete":"Delete this shipping template?","shippingTemplates.noTemplates":"No shipping templates","shippingTemplates.noTemplatesDesc":"Create shipping templates.","productVariants.title":"Variants","productVariants.newVariant":"New Variant","productVariants.editVariant":"Edit Variant","productVariants.attributes":"Attributes","productVariants.weight":"Weight","productVariants.imageUrl":"Image URL","productVariants.variantCreated":"Variant created","productVariants.variantUpdated":"Variant updated","productVariants.variantDeleted":"Variant deleted","productVariants.failedToCreate":"Failed to create variant","productVariants.failedToUpdate":"Failed to update variant","productVariants.failedToDelete":"Failed to delete variant","productVariants.confirmDelete":"Delete this variant?","productVariants.noVariants":"No variants yet.","profile.title":"Profile","profile.email":"Email","profile.username":"Username","profile.avatar":"Avatar URL","profile.website":"Website","profile.bio":"Bio","profile.changePassword":"Change Password","profile.currentPassword":"Current Password","profile.newPassword":"New Password","profile.confirmNewPassword":"Confirm New Password","profile.updated":"Profile updated","profile.failedToUpdate":"Failed to update profile","profile.passwordChanged":"Password changed","profile.failedToChangePassword":"Failed to change password","profile.allFieldsRequired":"All password fields are required","profile.passwordsNotMatch":"Passwords do not match","profile.passwordTooShort":"Password must be at least 8 characters","layout.integration":"التكامل","layout.channels":"القنوات","layout.receipts":"الإيصالات","layout.apiClients":"عملاء API","common.reset":"إعادة تعيين","common.close":"إغلاق","integration.newChannel":"قناة جديدة","integration.editChannel":"تعديل القناة","integration.channelKey":"مفتاح القناة","integration.displayName":"اسم العرض","integration.provider":"المزوّد","integration.mode":"الوضع","integration.transport":"النقل","integration.framing":"التأطير","integration.endpoint":"نقطة النهاية","integration.verifyKind":"التحقق","integration.verifyConfig":"إعدادات التحقق (JSON)","integration.credentials":"بيانات الاعتماد (JSON)","integration.credentialsKeepHint":"اتركه فارغًا للإبقاء على بيانات الاعتماد المختومة","integration.mapping":"التعيين (JSONPath)","integration.pullConfig":"إعدادات السحب (JSON)","integration.streamConfig":"إعدادات البث (JSON)","integration.targetType":"نوع المحتوى الهدف","integration.routeExtra":"امتداد التوجيه (JSON)","integration.redeliveryMax":"أقصى إعادات تسليم","integration.stack":"الحزمة","integration.noChannels":"لا توجد قنوات تكامل","integration.noChannelsDesc":"أضف قناة لبدء استقبال webhooks والبث والاستطلاع الواردة.","integration.channelCreated":"تم إنشاء القناة","integration.channelUpdated":"تم تحديث القناة","integration.channelDeleted":"تم حذف القناة","integration.failedToCreate":"فشل الإنشاء","integration.failedToUpdate":"فشل التحديث","integration.failedToDelete":"فشل الحذف","integration.failedToTest":"فشل الاختبار","integration.confirmDeleteChannel":'حذف القناة "{key}"؟ تبقى الإيصالات للتدقيق.',"integration.testMapping":"اختبار التعيين","integration.sampleBody":"نص طلب نموذجي","integration.preview":"معاينة الظرف المُطبَّع","integration.runTest":"تشغيل","integration.hasCredentials":"بيانات الاعتماد مختومة في الخزنة","integration.allChannels":"كل القنوات","integration.allStatuses":"كل الحالات","integration.traceIdFilter":"تصفية بمعرف التتبع…","integration.noReceipts":"لا توجد إيصالات","integration.noReceiptsDesc":"ستظهر التسليمات الواردة هنا مع التتبع الكامل.","integration.receivedAt":"وقت الاستلام","integration.attempts":"المحاولات","integration.nextRetryAt":"إعادة المحاولة التالية","integration.noSteps":"لا خطوات مسجلة","integration.pending":"قيد الانتظار","integration.receiptInfo":"الإيصال","integration.trace":"التتبع","integration.complete":"مكتمل","integration.firstPass":"التمريرة الأولى","integration.asyncChain":"السلسلة غير المتزامنة","integration.envelopeSnapshot":"لقطة الظرف","integration.fullSteps":"الخط الزمني الكامل للخطوات","integration.egressCalls":"المكالمات الصادرة","integration.noEgress":"لا مكالمات صادرة","integration.noEgressDesc":"ستظهر هنا المكالمات الصادرة التي أطلقها هذا الإيصال.","integration.replayed":"تمت الإعادة","integration.dryRunDone":"اكتمل التشغيل التجريبي — التقرير في التتبع","integration.failedToReplay":"فشلت الإعادة","integration.replay":"إعادة","integration.dryRunReplay":"إعادة تجريبية","integration.replayConfirmTitle":"إعادة تشغيل هذا الإيصال؟","integration.replayConfirmDesc":"تُعاد مرحلة التوجيه من لقطة الظرف المخزنة (upsert عبر external_id).","integration.receiptNotFound":"الإيصال غير موجود","integration.newClient":"عميل API جديد","integration.editClient":"تعديل عميل API","integration.clientKey":"مفتاح العميل","integration.baseUrl":"العنوان الأساسي","integration.authConfig":"إعدادات المصادقة (JSON)","integration.rateLimit":"حد المعدل (JSON)","integration.ops":"العمليات (JSON)","integration.opsCount":"العمليات","integration.noClients":"لا يوجد عملاء API","integration.noClientsDesc":"أضف عميل API تصريحيًا للمكالمات الصادرة.","integration.clientCreated":"تم إنشاء عميل API","integration.clientUpdated":"تم تحديث عميل API","integration.clientDeleted":"تم حذف عميل API","integration.confirmDeleteClient":'حذف عميل API "{key}"؟',"integration.testCall":"مكالمة اختبار","integration.selectOp":"اختر عملية","integration.input":"المدخل (JSON)","integration.result":"النتيجة","integration.allClients":"كل العملاء","integration.egressLog":"سجل الصادر","integration.latency":"زمن الاستجابة","integration.createdAt":"وقت الإنشاء","integration.basicInfo":"أساسي","integration.trustSection":"الثقة (L0)","integration.normalizeSection":"التطبيع (L2)","integration.routingSection":"التوجيه والموثوقية (L3/L4)","integration.presetTitle":"البدء من قالب","integration.presetPlaceholder":"اختر تكوينًا مجربًا…","integration.presetHint":"يملأ النموذج بالكامل — عدّل المفاتيح والأسرار ونوع المحتوى الهدف بعدها. أمثلة من تكاملات حقيقية (GitHub / Feishu / DingTalk).","integration.presetApplied":"تم تطبيق القالب — راجعه وعدّله","integration.jsonInvalid":"JSON غير صالح","integration.insertExample":"إدراج مثال","integration.presetGeneric":"Webhook عام (بدون تحقق)","integration.presetGenericDesc":"push بسيط + تعيين JSONPath","integration.presetHmac":"Webhook HMAC","integration.presetHmacDesc":"push + تحقق توقيع hmac-sha256","integration.presetGithub":"Webhook لـ GitHub","integration.presetGithubDesc":"x-hub-signature-256، تكرار عبر delivery GUID","integration.presetShopify":"Webhook لـ Shopify","integration.presetShopifyDesc":"HMAC بـ base64، تكرار عبر webhook-id","integration.presetDingtalk":"بوت DingTalk Stream","integration.presetDingtalkDesc":"بث ws + تأطير dispatch + pre_connect","integration.presetFeishu":"بوت Feishu (اتصال طويل)","integration.presetFeishuDesc":"بث ws + pb-frame + مصافحة oauth","integration.presetPull":"استطلاع HTTP (مؤشر)","integration.presetPullDesc":"pull + ترقيم since_id + نقطة تفتيش","integration.presetImap":"صندوق IMAP (أصلي)","integration.presetImapDesc":"pull + imap + mime، دلالة mark-read، مع IDLE"},zc={en:LC,zh:jC,ja:_C,ko:zC,es:BC,pt:VC,de:WC,fr:qC,ar:HC},$C=["ar"];function KC(t){return $C.includes(t)}const mn=ml()(fl(t=>({locale:"en",setLocale:e=>t({locale:e})}),{name:"i18n-locale"}));function no(){const t=mn(n=>n.locale),e=zc[t];function o(n,r){let s=e[n]??zc.en[n]??n;if(r)for(const[a,i]of Object.entries(r))s=s.replace(`{${a}}`,String(i));return s}return{t:o,locale:t}}function Yp(){const t=mn(e=>e.locale);return KC(t)?"rtl":"ltr"}var Bc=1,JC=.9,GC=.8,YC=.17,ba=.1,ya=.999,QC=.9999,XC=.99,ZC=/[\\\/_+.#"@\[\(\{&]/,eT=/[\\\/_+.#"@\[\(\{&]/g,tT=/[\s-]/,Qp=/[\s-]/g;function di(t,e,o,n,r,s,a){if(s===e.length)return r===t.length?Bc:XC;var i=`${r},${s}`;if(a[i]!==void 0)return a[i];for(var m=n.charAt(s),d=o.indexOf(m,r),c=0,p,h,y,g;d>=0;)p=di(t,e,o,n,d+1,s+1,a),p>c&&(d===r?p*=Bc:ZC.test(t.charAt(d-1))?(p*=GC,y=t.slice(r,d-1).match(eT),y&&r>0&&(p*=Math.pow(ya,y.length))):tT.test(t.charAt(d-1))?(p*=JC,g=t.slice(r,d-1).match(Qp),g&&r>0&&(p*=Math.pow(ya,g.length))):(p*=YC,r>0&&(p*=Math.pow(ya,d-r))),t.charAt(d)!==e.charAt(s)&&(p*=QC)),(pp&&(p=h*ba)),p>c&&(c=p),d=o.indexOf(m,d+1);return a[i]=c,c}function Vc(t){return t.toLowerCase().replace(Qp," ")}function oT(t,e,o){return t=o&&o.length>0?`${t+" "+o.join(" ")}`:t,di(t,e,Vc(t),Vc(e),0,0,{})}function Oo(t,e,{checkForDefaultPrevented:o=!0}={}){return function(r){if(t==null||t(r),o===!1||!r.defaultPrevented)return e==null?void 0:e(r)}}function Wc(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function Uo(...t){return e=>{let o=!1;const n=t.map(r=>{const s=Wc(r,e);return!o&&typeof s=="function"&&(o=!0),s});if(o)return()=>{for(let r=0;r{const{children:a,...i}=s,m=l.useMemo(()=>i,Object.values(i));return u.jsx(o.Provider,{value:m,children:a})};n.displayName=t+"Provider";function r(s){const a=l.useContext(o);if(a)return a;if(e!==void 0)return e;throw new Error(`\`${s}\` must be used within \`${t}\``)}return[n,r]}function rT(t,e=[]){let o=[];function n(s,a){const i=l.createContext(a),m=o.length;o=[...o,a];const d=p=>{var w;const{scope:h,children:y,...g}=p,b=((w=h==null?void 0:h[t])==null?void 0:w[m])||i,f=l.useMemo(()=>g,Object.values(g));return u.jsx(b.Provider,{value:f,children:y})};d.displayName=s+"Provider";function c(p,h){var b;const y=((b=h==null?void 0:h[t])==null?void 0:b[m])||i,g=l.useContext(y);if(g)return g;if(a!==void 0)return a;throw new Error(`\`${p}\` must be used within \`${s}\``)}return[d,c]}const r=()=>{const s=o.map(a=>l.createContext(a));return function(i){const m=(i==null?void 0:i[t])||s;return l.useMemo(()=>({[`__scope${t}`]:{...i,[t]:m}}),[i,m])}};return r.scopeName=t,[n,sT(r,...e)]}function sT(...t){const e=t[0];if(t.length===1)return e;const o=()=>{const n=t.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(s){const a=n.reduce((i,{useScope:m,scopeName:d})=>{const p=m(s)[`__scope${d}`];return{...i,...p}},{});return l.useMemo(()=>({[`__scope${e.scopeName}`]:a}),[a])}};return o.scopeName=e.scopeName,o}var yr=globalThis!=null&&globalThis.document?l.useLayoutEffect:()=>{},aT=Ds[" useId ".trim().toString()]||(()=>{}),iT=0;function co(t){const[e,o]=l.useState(aT());return yr(()=>{o(n=>n??String(iT++))},[t]),e?`radix-${e}`:""}var lT=Ds[" useInsertionEffect ".trim().toString()]||yr;function cT({prop:t,defaultProp:e,onChange:o=()=>{},caller:n}){const[r,s,a]=dT({defaultProp:e,onChange:o}),i=t!==void 0,m=i?t:r;{const c=l.useRef(t!==void 0);l.useEffect(()=>{const p=c.current;p!==i&&console.warn(`${n} is changing from ${p?"controlled":"uncontrolled"} to ${i?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),c.current=i},[i,n])}const d=l.useCallback(c=>{var p;if(i){const h=uT(c)?c(t):c;h!==t&&((p=a.current)==null||p.call(a,h))}else s(c)},[i,t,s,a]);return[m,d]}function dT({defaultProp:t,onChange:e}){const[o,n]=l.useState(t),r=l.useRef(o),s=l.useRef(e);return lT(()=>{s.current=e},[e]),l.useEffect(()=>{var a;r.current!==o&&((a=s.current)==null||a.call(s,o),r.current=o)},[o,r]),[o,n,s]}function uT(t){return typeof t=="function"}function Or(t){const e=pT(t),o=l.forwardRef((n,r)=>{const{children:s,...a}=n,i=l.Children.toArray(s),m=i.find(fT);if(m){const d=m.props.children,c=i.map(p=>p===m?l.Children.count(d)>1?l.Children.only(null):l.isValidElement(d)?d.props.children:null:p);return u.jsx(e,{...a,ref:r,children:l.isValidElement(d)?l.cloneElement(d,void 0,c):null})}return u.jsx(e,{...a,ref:r,children:s})});return o.displayName=`${t}.Slot`,o}function pT(t){const e=l.forwardRef((o,n)=>{const{children:r,...s}=o;if(l.isValidElement(r)){const a=gT(r),i=hT(s,r.props);return r.type!==l.Fragment&&(i.ref=n?Uo(n,a):a),l.cloneElement(r,i)}return l.Children.count(r)>1?l.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var mT=Symbol("radix.slottable");function fT(t){return l.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===mT}function hT(t,e){const o={...e};for(const n in e){const r=t[n],s=e[n];/^on[A-Z]/.test(n)?r&&s?o[n]=(...i)=>{const m=s(...i);return r(...i),m}:r&&(o[n]=r):n==="style"?o[n]={...r,...s}:n==="className"&&(o[n]=[r,s].filter(Boolean).join(" "))}return{...t,...o}}function gT(t){var n,r;let e=(n=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:n.get,o=e&&"isReactWarning"in e&&e.isReactWarning;return o?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var bT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Xp=bT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{});function yT(t,e){t&&_t.flushSync(()=>t.dispatchEvent(e))}function wr(t){const e=l.useRef(t);return l.useEffect(()=>{e.current=t}),l.useMemo(()=>(...o)=>{var n;return(n=e.current)==null?void 0:n.call(e,...o)},[])}function wT(t,e=globalThis==null?void 0:globalThis.document){const o=wr(t);l.useEffect(()=>{const n=r=>{r.key==="Escape"&&o(r)};return e.addEventListener("keydown",n,{capture:!0}),()=>e.removeEventListener("keydown",n,{capture:!0})},[o,e])}var vT="DismissableLayer",ui="dismissableLayer.update",CT="dismissableLayer.pointerDownOutside",TT="dismissableLayer.focusOutside",qc,Zp=l.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),em=l.forwardRef((t,e)=>{const{disableOutsidePointerEvents:o=!1,onEscapeKeyDown:n,onPointerDownOutside:r,onFocusOutside:s,onInteractOutside:a,onDismiss:i,...m}=t,d=l.useContext(Zp),[c,p]=l.useState(null),h=(c==null?void 0:c.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=l.useState({}),g=vn(e,P=>p(P)),b=Array.from(d.layers),[f]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),w=b.indexOf(f),T=c?b.indexOf(c):-1,v=d.layersWithOutsidePointerEventsDisabled.size>0,C=T>=w,S=xT(P=>{const D=P.target,I=[...d.branches].some(N=>N.contains(D));!C||I||(r==null||r(P),a==null||a(P),P.defaultPrevented||i==null||i())},h),k=DT(P=>{const D=P.target;[...d.branches].some(N=>N.contains(D))||(s==null||s(P),a==null||a(P),P.defaultPrevented||i==null||i())},h);return wT(P=>{T===d.layers.size-1&&(n==null||n(P),!P.defaultPrevented&&i&&(P.preventDefault(),i()))},h),l.useEffect(()=>{if(c)return o&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(qc=h.body.style.pointerEvents,h.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(c)),d.layers.add(c),Hc(),()=>{o&&d.layersWithOutsidePointerEventsDisabled.size===1&&(h.body.style.pointerEvents=qc)}},[c,h,o,d]),l.useEffect(()=>()=>{c&&(d.layers.delete(c),d.layersWithOutsidePointerEventsDisabled.delete(c),Hc())},[c,d]),l.useEffect(()=>{const P=()=>y({});return document.addEventListener(ui,P),()=>document.removeEventListener(ui,P)},[]),u.jsx(Xp.div,{...m,ref:g,style:{pointerEvents:v?C?"auto":"none":void 0,...t.style},onFocusCapture:Oo(t.onFocusCapture,k.onFocusCapture),onBlurCapture:Oo(t.onBlurCapture,k.onBlurCapture),onPointerDownCapture:Oo(t.onPointerDownCapture,S.onPointerDownCapture)})});em.displayName=vT;var kT="DismissableLayerBranch",ST=l.forwardRef((t,e)=>{const o=l.useContext(Zp),n=l.useRef(null),r=vn(e,n);return l.useEffect(()=>{const s=n.current;if(s)return o.branches.add(s),()=>{o.branches.delete(s)}},[o.branches]),u.jsx(Xp.div,{...t,ref:r})});ST.displayName=kT;function xT(t,e=globalThis==null?void 0:globalThis.document){const o=wr(t),n=l.useRef(!1),r=l.useRef(()=>{});return l.useEffect(()=>{const s=i=>{if(i.target&&!n.current){let m=function(){tm(CT,o,d,{discrete:!0})};const d={originalEvent:i};i.pointerType==="touch"?(e.removeEventListener("click",r.current),r.current=m,e.addEventListener("click",r.current,{once:!0})):m()}else e.removeEventListener("click",r.current);n.current=!1},a=window.setTimeout(()=>{e.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(a),e.removeEventListener("pointerdown",s),e.removeEventListener("click",r.current)}},[e,o]),{onPointerDownCapture:()=>n.current=!0}}function DT(t,e=globalThis==null?void 0:globalThis.document){const o=wr(t),n=l.useRef(!1);return l.useEffect(()=>{const r=s=>{s.target&&!n.current&&tm(TT,o,{originalEvent:s},{discrete:!1})};return e.addEventListener("focusin",r),()=>e.removeEventListener("focusin",r)},[e,o]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function Hc(){const t=new CustomEvent(ui);document.dispatchEvent(t)}function tm(t,e,o,{discrete:n}){const r=o.originalEvent.target,s=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:o});e&&r.addEventListener(t,e,{once:!0}),n?yT(r,s):r.dispatchEvent(s)}var PT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],RT=PT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),wa="focusScope.autoFocusOnMount",va="focusScope.autoFocusOnUnmount",$c={bubbles:!1,cancelable:!0},ET="FocusScope",om=l.forwardRef((t,e)=>{const{loop:o=!1,trapped:n=!1,onMountAutoFocus:r,onUnmountAutoFocus:s,...a}=t,[i,m]=l.useState(null),d=wr(r),c=wr(s),p=l.useRef(null),h=vn(e,b=>m(b)),y=l.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;l.useEffect(()=>{if(n){let b=function(v){if(y.paused||!i)return;const C=v.target;i.contains(C)?p.current=C:wo(p.current,{select:!0})},f=function(v){if(y.paused||!i)return;const C=v.relatedTarget;C!==null&&(i.contains(C)||wo(p.current,{select:!0}))},w=function(v){if(document.activeElement===document.body)for(const S of v)S.removedNodes.length>0&&wo(i)};document.addEventListener("focusin",b),document.addEventListener("focusout",f);const T=new MutationObserver(w);return i&&T.observe(i,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",b),document.removeEventListener("focusout",f),T.disconnect()}}},[n,i,y.paused]),l.useEffect(()=>{if(i){Jc.add(y);const b=document.activeElement;if(!i.contains(b)){const w=new CustomEvent(wa,$c);i.addEventListener(wa,d),i.dispatchEvent(w),w.defaultPrevented||(AT(MT(nm(i)),{select:!0}),document.activeElement===b&&wo(i))}return()=>{i.removeEventListener(wa,d),setTimeout(()=>{const w=new CustomEvent(va,$c);i.addEventListener(va,c),i.dispatchEvent(w),w.defaultPrevented||wo(b??document.body,{select:!0}),i.removeEventListener(va,c),Jc.remove(y)},0)}}},[i,d,c,y]);const g=l.useCallback(b=>{if(!o&&!n||y.paused)return;const f=b.key==="Tab"&&!b.altKey&&!b.ctrlKey&&!b.metaKey,w=document.activeElement;if(f&&w){const T=b.currentTarget,[v,C]=NT(T);v&&C?!b.shiftKey&&w===C?(b.preventDefault(),o&&wo(v,{select:!0})):b.shiftKey&&w===v&&(b.preventDefault(),o&&wo(C,{select:!0})):w===T&&b.preventDefault()}},[o,n,y.paused]);return u.jsx(RT.div,{tabIndex:-1,...a,ref:h,onKeyDown:g})});om.displayName=ET;function AT(t,{select:e=!1}={}){const o=document.activeElement;for(const n of t)if(wo(n,{select:e}),document.activeElement!==o)return}function NT(t){const e=nm(t),o=Kc(e,t),n=Kc(e.reverse(),t);return[o,n]}function nm(t){const e=[],o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const r=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||r?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;o.nextNode();)e.push(o.currentNode);return e}function Kc(t,e){for(const o of t)if(!IT(o,{upTo:e}))return o}function IT(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function OT(t){return t instanceof HTMLInputElement&&"select"in t}function wo(t,{select:e=!1}={}){if(t&&t.focus){const o=document.activeElement;t.focus({preventScroll:!0}),t!==o&&OT(t)&&e&&t.select()}}var Jc=FT();function FT(){let t=[];return{add(e){const o=t[0];e!==o&&(o==null||o.pause()),t=Gc(t,e),t.unshift(e)},remove(e){var o;t=Gc(t,e),(o=t[0])==null||o.resume()}}}function Gc(t,e){const o=[...t],n=o.indexOf(e);return n!==-1&&o.splice(n,1),o}function MT(t){return t.filter(e=>e.tagName!=="A")}var UT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],LT=UT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),jT="Portal",rm=l.forwardRef((t,e)=>{var i;const{container:o,...n}=t,[r,s]=l.useState(!1);yr(()=>s(!0),[]);const a=o||r&&((i=globalThis==null?void 0:globalThis.document)==null?void 0:i.body);return a?Pd.createPortal(u.jsx(LT.div,{...n,ref:e}),a):null});rm.displayName=jT;function _T(t,e){return l.useReducer((o,n)=>e[o][n]??o,t)}var Ks=t=>{const{present:e,children:o}=t,n=zT(e),r=typeof o=="function"?o({present:n.isPresent}):l.Children.only(o),s=vn(n.ref,BT(r));return typeof o=="function"||n.isPresent?l.cloneElement(r,{ref:s}):null};Ks.displayName="Presence";function zT(t){const[e,o]=l.useState(),n=l.useRef(null),r=l.useRef(t),s=l.useRef("none"),a=t?"mounted":"unmounted",[i,m]=_T(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return l.useEffect(()=>{const d=Qr(n.current);s.current=i==="mounted"?d:"none"},[i]),yr(()=>{const d=n.current,c=r.current;if(c!==t){const h=s.current,y=Qr(d);t?m("MOUNT"):y==="none"||(d==null?void 0:d.display)==="none"?m("UNMOUNT"):m(c&&h!==y?"ANIMATION_OUT":"UNMOUNT"),r.current=t}},[t,m]),yr(()=>{if(e){let d;const c=e.ownerDocument.defaultView??window,p=y=>{const b=Qr(n.current).includes(CSS.escape(y.animationName));if(y.target===e&&b&&(m("ANIMATION_END"),!r.current)){const f=e.style.animationFillMode;e.style.animationFillMode="forwards",d=c.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=f)})}},h=y=>{y.target===e&&(s.current=Qr(n.current))};return e.addEventListener("animationstart",h),e.addEventListener("animationcancel",p),e.addEventListener("animationend",p),()=>{c.clearTimeout(d),e.removeEventListener("animationstart",h),e.removeEventListener("animationcancel",p),e.removeEventListener("animationend",p)}}else m("ANIMATION_END")},[e,m]),{isPresent:["mounted","unmountSuspended"].includes(i),ref:l.useCallback(d=>{n.current=d?getComputedStyle(d):null,o(d)},[])}}function Qr(t){return(t==null?void 0:t.animationName)||"none"}function BT(t){var n,r;let e=(n=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:n.get,o=e&&"isReactWarning"in e&&e.isReactWarning;return o?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var VT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Fr=VT.reduce((t,e)=>{const o=Or(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),Ca=0;function WT(){l.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??Yc()),document.body.insertAdjacentElement("beforeend",t[1]??Yc()),Ca++,()=>{Ca===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),Ca--}},[])}function Yc(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var Yt=function(){return Yt=Object.assign||function(e){for(var o,n=1,r=arguments.length;n"u")return ak;var e=ik(t),o=document.documentElement.clientWidth,n=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,n-o+e[2]-e[0])}},ck=lm(),Fn="data-scroll-locked",dk=function(t,e,o,n){var r=t.left,s=t.top,a=t.right,i=t.gap;return o===void 0&&(o="margin"),` .`.concat(HT,` { overflow: hidden `).concat(n,`; padding-right: `).concat(i,"px ").concat(n,`; @@ -343,7 +343,7 @@ var yf=Object.defineProperty;var _l=t=>{throw TypeError(t)};var wf=(t,e,o)=>e in If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component. -For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return l.useEffect(()=>{t&&(document.getElementById(t)||console.error(o))},[o,t]),null},Bk="DialogDescriptionWarning",Vk=({contentRef:t,descriptionId:e})=>{const n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${xm(Bk).contentName}}.`;return l.useEffect(()=>{var s;const r=(s=t.current)==null?void 0:s.getAttribute("aria-describedby");e&&r&&(document.getElementById(e)||console.warn(n))},[n,t,e]),null},Wk=hm,qk=ym,Hk=wm,$k=vm,Kk=Symbol.for("react.lazy"),xs=Ds[" use ".trim().toString()];function Jk(t){return typeof t=="object"&&t!==null&&"then"in t}function Dm(t){return t!=null&&typeof t=="object"&&"$$typeof"in t&&t.$$typeof===Kk&&"_payload"in t&&Jk(t._payload)}function Gk(t){const e=Yk(t),o=l.forwardRef((n,r)=>{let{children:s,...a}=n;Dm(s)&&typeof xs=="function"&&(s=xs(s._payload));const i=l.Children.toArray(s),m=i.find(Xk);if(m){const d=m.props.children,c=i.map(p=>p===m?l.Children.count(d)>1?l.Children.only(null):l.isValidElement(d)?d.props.children:null:p);return u.jsx(e,{...a,ref:r,children:l.isValidElement(d)?l.cloneElement(d,void 0,c):null})}return u.jsx(e,{...a,ref:r,children:s})});return o.displayName=`${t}.Slot`,o}function Yk(t){const e=l.forwardRef((o,n)=>{let{children:r,...s}=o;if(Dm(r)&&typeof xs=="function"&&(r=xs(r._payload)),l.isValidElement(r)){const a=eS(r),i=Zk(s,r.props);return r.type!==l.Fragment&&(i.ref=n?Uo(n,a):a),l.cloneElement(r,i)}return l.Children.count(r)>1?l.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var Qk=Symbol("radix.slottable");function Xk(t){return l.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===Qk}function Zk(t,e){const o={...e};for(const n in e){const r=t[n],s=e[n];/^on[A-Z]/.test(n)?r&&s?o[n]=(...i)=>{const m=s(...i);return r(...i),m}:r&&(o[n]=r):n==="style"?o[n]={...r,...s}:n==="className"&&(o[n]=[r,s].filter(Boolean).join(" "))}return{...t,...o}}function eS(t){var n,r;let e=(n=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:n.get,o=e&&"isReactWarning"in e&&e.isReactWarning;return o?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var tS=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Vo=tS.reduce((t,e)=>{const o=Gk(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),sr='[cmdk-group=""]',Da='[cmdk-group-items=""]',oS='[cmdk-group-heading=""]',Pm='[cmdk-item=""]',od=`${Pm}:not([aria-disabled="true"])`,mi="cmdk-item-select",Rn="data-value",nS=(t,e,o)=>oT(t,e,o),Rm=l.createContext(void 0),Mr=()=>l.useContext(Rm),Em=l.createContext(void 0),yl=()=>l.useContext(Em),Am=l.createContext(void 0),Nm=l.forwardRef((t,e)=>{let o=En(()=>{var M,L;return{search:"",value:(L=(M=t.value)!=null?M:t.defaultValue)!=null?L:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),n=En(()=>new Set),r=En(()=>new Map),s=En(()=>new Map),a=En(()=>new Set),i=Im(t),{label:m,children:d,value:c,onValueChange:p,filter:h,shouldFilter:y,loop:g,disablePointerSelection:b=!1,vimBindings:f=!0,...w}=t,T=co(),v=co(),C=co(),S=l.useRef(null),k=fS();hn(()=>{if(c!==void 0){let M=c.trim();o.current.value=M,P.emit()}},[c]),hn(()=>{k(6,R)},[]);let P=l.useMemo(()=>({subscribe:M=>(a.current.add(M),()=>a.current.delete(M)),snapshot:()=>o.current,setState:(M,L,V)=>{var _,B,Y,q;if(!Object.is(o.current[M],L)){if(o.current[M]=L,M==="search")U(),N(),k(1,z);else if(M==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let J=document.getElementById(C);J?J.focus():(_=document.getElementById(T))==null||_.focus()}if(k(7,()=>{var J;o.current.selectedItemId=(J=W())==null?void 0:J.id,P.emit()}),V||k(5,R),((B=i.current)==null?void 0:B.value)!==void 0){let J=L??"";(q=(Y=i.current).onValueChange)==null||q.call(Y,J);return}}P.emit()}},emit:()=>{a.current.forEach(M=>M())}}),[]),D=l.useMemo(()=>({value:(M,L,V)=>{var _;L!==((_=s.current.get(M))==null?void 0:_.value)&&(s.current.set(M,{value:L,keywords:V}),o.current.filtered.items.set(M,I(L,V)),k(2,()=>{N(),P.emit()}))},item:(M,L)=>(n.current.add(M),L&&(r.current.has(L)?r.current.get(L).add(M):r.current.set(L,new Set([M]))),k(3,()=>{U(),N(),o.current.value||z(),P.emit()}),()=>{s.current.delete(M),n.current.delete(M),o.current.filtered.items.delete(M);let V=W();k(4,()=>{U(),(V==null?void 0:V.getAttribute("id"))===M&&z(),P.emit()})}),group:M=>(r.current.has(M)||r.current.set(M,new Set),()=>{s.current.delete(M),r.current.delete(M)}),filter:()=>i.current.shouldFilter,label:m||t["aria-label"],getDisablePointerSelection:()=>i.current.disablePointerSelection,listId:T,inputId:C,labelId:v,listInnerRef:S}),[]);function I(M,L){var V,_;let B=(_=(V=i.current)==null?void 0:V.filter)!=null?_:nS;return M?B(M,o.current.search,L):0}function N(){if(!o.current.search||i.current.shouldFilter===!1)return;let M=o.current.filtered.items,L=[];o.current.filtered.groups.forEach(_=>{let B=r.current.get(_),Y=0;B.forEach(q=>{let J=M.get(q);Y=Math.max(J,Y)}),L.push([_,Y])});let V=S.current;O().sort((_,B)=>{var Y,q;let J=_.getAttribute("id"),Te=B.getAttribute("id");return((Y=M.get(Te))!=null?Y:0)-((q=M.get(J))!=null?q:0)}).forEach(_=>{let B=_.closest(Da);B?B.appendChild(_.parentElement===B?_:_.closest(`${Da} > *`)):V.appendChild(_.parentElement===V?_:_.closest(`${Da} > *`))}),L.sort((_,B)=>B[1]-_[1]).forEach(_=>{var B;let Y=(B=S.current)==null?void 0:B.querySelector(`${sr}[${Rn}="${encodeURIComponent(_[0])}"]`);Y==null||Y.parentElement.appendChild(Y)})}function z(){let M=O().find(V=>V.getAttribute("aria-disabled")!=="true"),L=M==null?void 0:M.getAttribute(Rn);P.setState("value",L||void 0)}function U(){var M,L,V,_;if(!o.current.search||i.current.shouldFilter===!1){o.current.filtered.count=n.current.size;return}o.current.filtered.groups=new Set;let B=0;for(let Y of n.current){let q=(L=(M=s.current.get(Y))==null?void 0:M.value)!=null?L:"",J=(_=(V=s.current.get(Y))==null?void 0:V.keywords)!=null?_:[],Te=I(q,J);o.current.filtered.items.set(Y,Te),Te>0&&B++}for(let[Y,q]of r.current)for(let J of q)if(o.current.filtered.items.get(J)>0){o.current.filtered.groups.add(Y);break}o.current.filtered.count=B}function R(){var M,L,V;let _=W();_&&(((M=_.parentElement)==null?void 0:M.firstChild)===_&&((V=(L=_.closest(sr))==null?void 0:L.querySelector(oS))==null||V.scrollIntoView({block:"nearest"})),_.scrollIntoView({block:"nearest"}))}function W(){var M;return(M=S.current)==null?void 0:M.querySelector(`${Pm}[aria-selected="true"]`)}function O(){var M;return Array.from(((M=S.current)==null?void 0:M.querySelectorAll(od))||[])}function j(M){let L=O()[M];L&&P.setState("value",L.getAttribute(Rn))}function x(M){var L;let V=W(),_=O(),B=_.findIndex(q=>q===V),Y=_[B+M];(L=i.current)!=null&&L.loop&&(Y=B+M<0?_[_.length-1]:B+M===_.length?_[0]:_[B+M]),Y&&P.setState("value",Y.getAttribute(Rn))}function F(M){let L=W(),V=L==null?void 0:L.closest(sr),_;for(;V&&!_;)V=M>0?pS(V,sr):mS(V,sr),_=V==null?void 0:V.querySelector(od);_?P.setState("value",_.getAttribute(Rn)):x(M)}let H=()=>j(O().length-1),A=M=>{M.preventDefault(),M.metaKey?H():M.altKey?F(1):x(1)},Q=M=>{M.preventDefault(),M.metaKey?j(0):M.altKey?F(-1):x(-1)};return l.createElement(Vo.div,{ref:e,tabIndex:-1,...w,"cmdk-root":"",onKeyDown:M=>{var L;(L=w.onKeyDown)==null||L.call(w,M);let V=M.nativeEvent.isComposing||M.keyCode===229;if(!(M.defaultPrevented||V))switch(M.key){case"n":case"j":{f&&M.ctrlKey&&A(M);break}case"ArrowDown":{A(M);break}case"p":case"k":{f&&M.ctrlKey&&Q(M);break}case"ArrowUp":{Q(M);break}case"Home":{M.preventDefault(),j(0);break}case"End":{M.preventDefault(),H();break}case"Enter":{M.preventDefault();let _=W();if(_){let B=new Event(mi);_.dispatchEvent(B)}}}}},l.createElement("label",{"cmdk-label":"",htmlFor:D.inputId,id:D.labelId,style:gS},m),Ys(t,M=>l.createElement(Em.Provider,{value:P},l.createElement(Rm.Provider,{value:D},M))))}),rS=l.forwardRef((t,e)=>{var o,n;let r=co(),s=l.useRef(null),a=l.useContext(Am),i=Mr(),m=Im(t),d=(n=(o=m.current)==null?void 0:o.forceMount)!=null?n:a==null?void 0:a.forceMount;hn(()=>{if(!d)return i.item(r,a==null?void 0:a.id)},[d]);let c=Om(r,s,[t.value,t.children,s],t.keywords),p=yl(),h=Lo(k=>k.value&&k.value===c.current),y=Lo(k=>d||i.filter()===!1?!0:k.search?k.filtered.items.get(r)>0:!0);l.useEffect(()=>{let k=s.current;if(!(!k||t.disabled))return k.addEventListener(mi,g),()=>k.removeEventListener(mi,g)},[y,t.onSelect,t.disabled]);function g(){var k,P;b(),(P=(k=m.current).onSelect)==null||P.call(k,c.current)}function b(){p.setState("value",c.current,!0)}if(!y)return null;let{disabled:f,value:w,onSelect:T,forceMount:v,keywords:C,...S}=t;return l.createElement(Vo.div,{ref:Uo(s,e),...S,id:r,"cmdk-item":"",role:"option","aria-disabled":!!f,"aria-selected":!!h,"data-disabled":!!f,"data-selected":!!h,onPointerMove:f||i.getDisablePointerSelection()?void 0:b,onClick:f?void 0:g},t.children)}),sS=l.forwardRef((t,e)=>{let{heading:o,children:n,forceMount:r,...s}=t,a=co(),i=l.useRef(null),m=l.useRef(null),d=co(),c=Mr(),p=Lo(y=>r||c.filter()===!1?!0:y.search?y.filtered.groups.has(a):!0);hn(()=>c.group(a),[]),Om(a,i,[t.value,t.heading,m]);let h=l.useMemo(()=>({id:a,forceMount:r}),[r]);return l.createElement(Vo.div,{ref:Uo(i,e),...s,"cmdk-group":"",role:"presentation",hidden:p?void 0:!0},o&&l.createElement("div",{ref:m,"cmdk-group-heading":"","aria-hidden":!0,id:d},o),Ys(t,y=>l.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":o?d:void 0},l.createElement(Am.Provider,{value:h},y))))}),aS=l.forwardRef((t,e)=>{let{alwaysRender:o,...n}=t,r=l.useRef(null),s=Lo(a=>!a.search);return!o&&!s?null:l.createElement(Vo.div,{ref:Uo(r,e),...n,"cmdk-separator":"",role:"separator"})}),iS=l.forwardRef((t,e)=>{let{onValueChange:o,...n}=t,r=t.value!=null,s=yl(),a=Lo(d=>d.search),i=Lo(d=>d.selectedItemId),m=Mr();return l.useEffect(()=>{t.value!=null&&s.setState("search",t.value)},[t.value]),l.createElement(Vo.input,{ref:e,...n,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":m.listId,"aria-labelledby":m.labelId,"aria-activedescendant":i,id:m.inputId,type:"text",value:r?t.value:a,onChange:d=>{r||s.setState("search",d.target.value),o==null||o(d.target.value)}})}),lS=l.forwardRef((t,e)=>{let{children:o,label:n="Suggestions",...r}=t,s=l.useRef(null),a=l.useRef(null),i=Lo(d=>d.selectedItemId),m=Mr();return l.useEffect(()=>{if(a.current&&s.current){let d=a.current,c=s.current,p,h=new ResizeObserver(()=>{p=requestAnimationFrame(()=>{let y=d.offsetHeight;c.style.setProperty("--cmdk-list-height",y.toFixed(1)+"px")})});return h.observe(d),()=>{cancelAnimationFrame(p),h.unobserve(d)}}},[]),l.createElement(Vo.div,{ref:Uo(s,e),...r,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":i,"aria-label":n,id:m.listId},Ys(t,d=>l.createElement("div",{ref:Uo(a,m.listInnerRef),"cmdk-list-sizer":""},d)))}),cS=l.forwardRef((t,e)=>{let{open:o,onOpenChange:n,overlayClassName:r,contentClassName:s,container:a,...i}=t;return l.createElement(Wk,{open:o,onOpenChange:n},l.createElement(qk,{container:a},l.createElement(Hk,{"cmdk-overlay":"",className:r}),l.createElement($k,{"aria-label":t.label,"cmdk-dialog":"",className:s},l.createElement(Nm,{ref:e,...i}))))}),dS=l.forwardRef((t,e)=>Lo(o=>o.filtered.count===0)?l.createElement(Vo.div,{ref:e,...t,"cmdk-empty":"",role:"presentation"}):null),uS=l.forwardRef((t,e)=>{let{progress:o,children:n,label:r="Loading...",...s}=t;return l.createElement(Vo.div,{ref:e,...s,"cmdk-loading":"",role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":100,"aria-label":r},Ys(t,a=>l.createElement("div",{"aria-hidden":!0},a)))}),Wo=Object.assign(Nm,{List:lS,Item:rS,Input:iS,Group:sS,Separator:aS,Dialog:cS,Empty:dS,Loading:uS});function pS(t,e){let o=t.nextElementSibling;for(;o;){if(o.matches(e))return o;o=o.nextElementSibling}}function mS(t,e){let o=t.previousElementSibling;for(;o;){if(o.matches(e))return o;o=o.previousElementSibling}}function Im(t){let e=l.useRef(t);return hn(()=>{e.current=t}),e}var hn=typeof window>"u"?l.useEffect:l.useLayoutEffect;function En(t){let e=l.useRef();return e.current===void 0&&(e.current=t()),e}function Lo(t){let e=yl(),o=()=>t(e.snapshot());return l.useSyncExternalStore(e.subscribe,o,o)}function Om(t,e,o,n=[]){let r=l.useRef(),s=Mr();return hn(()=>{var a;let i=(()=>{var d;for(let c of o){if(typeof c=="string")return c.trim();if(typeof c=="object"&&"current"in c)return c.current?(d=c.current.textContent)==null?void 0:d.trim():r.current}})(),m=n.map(d=>d.trim());s.value(t,i,m),(a=e.current)==null||a.setAttribute(Rn,i),r.current=i}),r}var fS=()=>{let[t,e]=l.useState(),o=En(()=>new Map);return hn(()=>{o.current.forEach(n=>n()),o.current=new Map},[t]),(n,r)=>{o.current.set(n,r),e({})}};function hS(t){let e=t.type;return typeof e=="function"?e(t.props):"render"in e?e.render(t.props):t}function Ys({asChild:t,children:e},o){return t&&l.isValidElement(e)?l.cloneElement(hS(e),{ref:e.ref},o(e.props.children)):o(e)}var gS={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function bS({className:t,...e}){return u.jsx(Wo,{className:Ie("flex size-full flex-col overflow-hidden rounded-xl bg-popover text-popover-foreground shadow-lg",t),...e})}function yS({className:t,children:e,onOpenChange:o,...n}){return u.jsxs(Wo.Dialog,{className:Ie("fixed inset-0 z-50 flex items-start justify-center pt-[15vh]",t),onOpenChange:o,...n,children:[u.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm",onClick:()=>o==null?void 0:o(!1)}),u.jsx("div",{className:"relative z-50 h-auto max-h-[85vh] w-full max-w-lg overflow-hidden rounded-xl border bg-popover text-popover-foreground shadow-2xl duration-200 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",children:u.jsx(bS,{className:"[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:size-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-3 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:size-5",children:e})})]})}function wS({className:t,...e}){return u.jsxs("div",{className:"flex items-center border-b px-4","cmdk-input-wrapper":"",children:[u.jsxs("svg",{className:"me-2 size-4 shrink-0 opacity-50",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"11",cy:"11",r:"8"}),u.jsx("path",{d:"m21 21-4.3-4.3"})]}),u.jsx(Wo.Input,{className:Ie("flex h-12 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",t),...e})]})}function vS({className:t,...e}){return u.jsx(Wo.List,{className:Ie("max-h-80 overflow-y-auto overscroll-contain p-1",t),...e})}function CS({...t}){return u.jsx(Wo.Empty,{className:"py-6 text-center text-sm text-muted-foreground",...t})}function os({className:t,...e}){return u.jsx(Wo.Group,{className:Ie("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",t),...e})}function TS({className:t,...e}){return u.jsx(Wo.Separator,{className:Ie("-mx-1 h-px bg-border",t),...e})}function ar({className:t,...e}){return u.jsx(Wo.Item,{className:Ie("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",t),...e})}function kS(){const[t,e]=l.useState(!1);return l.useEffect(()=>{function o(r){r.key==="k"&&(r.metaKey||r.ctrlKey)&&(r.preventDefault(),e(s=>!s))}function n(){e(!0)}return document.addEventListener("keydown",o),window.addEventListener("open-command-palette",n),()=>{document.removeEventListener("keydown",o),window.removeEventListener("open-command-palette",n)}},[]),{open:t,setOpen:e}}function SS({open:t,setOpen:e}){const o=Jp(),{resolvedTheme:n,setTheme:r}=Ci(),{t:s}=no(),a=l.useCallback(c=>{e(!1),o.push(c)},[o]),i=[{label:s("layout.posts"),href:"/posts",icon:Ti,keywords:["blog","article"]},{label:s("layout.categories"),href:"/categories",icon:Jd},{label:s("layout.tags"),href:"/tags",icon:xi},{label:s("layout.comments"),href:"/comments",icon:tu},{label:s("layout.media"),href:"/media",icon:Gd,keywords:["upload","image","file"]},{label:s("layout.pages"),href:"/pages",icon:Zd},{label:s("layout.reusableBlocks"),href:"/reusable-blocks",icon:Wd}],m=[{label:s("layout.contentTypes"),href:"/content-types",icon:Qd,keywords:["cms","schema","model"]},{label:s("layout.plugins"),href:"/plugins",icon:ki,keywords:["extension","addon"]}],d=[{label:s("layout.users"),href:"/users",icon:iu,keywords:["member","account"]},{label:s("layout.rolesPermissions"),href:"/rbac",icon:ru,keywords:["role","permission","rbac","admin"]},{label:s("layout.cron"),href:"/crons",icon:Kd,keywords:["schedule","job","task"]},{label:s("layout.tenants"),href:"/tenants",icon:qd,keywords:["tenant","multi"]},{label:s("layout.webhooks"),href:"/webhooks",icon:cu},{label:s("layout.apiTokens"),href:"/tokens",icon:Yd,keywords:["api","token","key"]},{label:s("layout.workflows"),href:"/workflows",icon:Ng,keywords:["automation","flow"]},{label:s("layout.auditLog"),href:"/audit",icon:$d,keywords:["log","history"]},{label:s("layout.options"),href:"/options",icon:Si,keywords:["setting","config","preference"]}];return u.jsxs(yS,{open:t,onOpenChange:e,children:[u.jsx(wS,{placeholder:s("command.placeholder")}),u.jsxs(vS,{children:[u.jsx(CS,{children:s("command.noResults")}),u.jsx(os,{heading:s("layout.content"),children:i.map(c=>u.jsxs(ar,{onSelect:()=>a(c.href),keywords:c.keywords,children:[u.jsx(c.icon,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:c.label})]},c.href))}),u.jsx(os,{heading:s("layout.extension"),children:m.map(c=>u.jsxs(ar,{onSelect:()=>a(c.href),keywords:c.keywords,children:[u.jsx(c.icon,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:c.label})]},c.href))}),u.jsx(os,{heading:s("layout.system"),children:d.map(c=>u.jsxs(ar,{onSelect:()=>a(c.href),keywords:c.keywords,children:[u.jsx(c.icon,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:c.label})]},c.href))}),u.jsx(TS,{}),u.jsxs(os,{heading:s("command.actions"),children:[u.jsxs(ar,{onSelect:()=>{e(!1),a("/dashboard")},children:[u.jsx(Xd,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:s("layout.dashboard")})]}),u.jsxs(ar,{onSelect:()=>{e(!1),r(n==="dark"?"light":"dark")},children:[n==="dark"?u.jsx(au,{className:"size-4 text-muted-foreground"}):u.jsx(ou,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:s(n==="dark"?"command.switchToLight":"command.switchToDark")})]})]})]})]})}function xS(){const{open:t,setOpen:e}=kS();return u.jsx(SS,{open:t,setOpen:e})}function DS({children:t}){const[e]=l.useState(()=>new nh({defaultOptions:{queries:{staleTime:0,gcTime:0,refetchOnMount:"always",retry:1}}})),o=Yp();return l.useEffect(()=>{document.documentElement.dir=o,document.documentElement.lang=o==="rtl"?"ar":""},[o]),u.jsx(rh,{client:e,children:u.jsxs(wh,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:[u.jsx(qp,{children:t}),u.jsx(xS,{}),u.jsx(Rb,{})]})})}const PS=l.createContext(void 0);function wl(t=!1){const e=l.useContext(PS);if(e===void 0&&!t)throw new Error(rt(16));return e}function RS(t){const{focusableWhenDisabled:e,disabled:o,composite:n=!1,tabIndex:r=0,isNativeButton:s}=t,a=n&&e!==!1,i=n&&e===!1;return{props:l.useMemo(()=>{const d={onKeyDown(c){o&&e&&c.key!=="Tab"&&c.preventDefault()}};return n||(d.tabIndex=r,!s&&o&&(d.tabIndex=e?r:-1)),(s&&(e||a)||!s&&o)&&(d["aria-disabled"]=o),s&&(!e||i)&&(d.disabled=o),d},[n,o,e,a,i,s,r])}}function Ur(t={}){const{disabled:e=!1,focusableWhenDisabled:o,tabIndex:n=0,native:r=!0,composite:s}=t,a=l.useRef(null),i=wl(!0),m=s??i!==void 0,{props:d}=RS({focusableWhenDisabled:o,disabled:e,composite:m,tabIndex:n,isNativeButton:r}),c=l.useCallback(()=>{const y=a.current;Pa(y)&&m&&e&&d.disabled===void 0&&y.disabled&&(y.disabled=!1)},[e,d.disabled,m]);ue(c,[c]);const p=l.useCallback((y={})=>{const{onClick:g,onMouseDown:b,onKeyUp:f,onKeyDown:w,onPointerDown:T,...v}=y;return Tt({onClick(C){if(e){C.preventDefault();return}g==null||g(C)},onMouseDown(C){e||b==null||b(C)},onKeyDown(C){if(e||(ys(C),w==null||w(C),C.baseUIHandlerPrevented))return;const S=C.target===C.currentTarget,k=C.currentTarget,P=Pa(k),D=!r&&ES(k),I=S&&(r?P:!D),N=C.key==="Enter",z=C.key===" ",U=k.getAttribute("role"),R=(U==null?void 0:U.startsWith("menuitem"))||U==="option"||U==="gridcell";if(S&&m&&z){if(C.defaultPrevented&&R)return;C.preventDefault(),D||r&&P?(k.click(),C.preventBaseUIHandler()):I&&(g==null||g(C),C.preventBaseUIHandler());return}I&&(!r&&(z||N)&&C.preventDefault(),!r&&N&&(g==null||g(C)))},onKeyUp(C){if(!e){if(ys(C),f==null||f(C),C.target===C.currentTarget&&r&&m&&Pa(C.currentTarget)&&C.key===" "){C.preventDefault();return}C.baseUIHandlerPrevented||C.target===C.currentTarget&&!r&&!m&&C.key===" "&&(g==null||g(C))}},onPointerDown(C){if(e){C.preventDefault();return}T==null||T(C)}},r?{type:"button"}:{role:"button"},d,v)},[e,d,m,r]),h=ke(y=>{a.current=y,c()});return{getButtonProps:p,buttonRef:h}}function Pa(t){return Ve(t)&&t.tagName==="BUTTON"}function ES(t){return!!((t==null?void 0:t.tagName)==="A"&&(t!=null&&t.href))}const AS=l.forwardRef(function(e,o){const{render:n,className:r,disabled:s=!1,focusableWhenDisabled:a=!1,nativeButton:i=!0,style:m,...d}=e,{getButtonProps:c,buttonRef:p}=Ur({disabled:s,focusableWhenDisabled:a,native:i});return st("button",e,{state:{disabled:s},ref:[o,p],props:[d,c]})}),nd=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,rd=Ep,Fm=(t,e)=>o=>{var n;if((e==null?void 0:e.variants)==null)return rd(t,o==null?void 0:o.class,o==null?void 0:o.className);const{variants:r,defaultVariants:s}=e,a=Object.keys(r).map(d=>{const c=o==null?void 0:o[d],p=s==null?void 0:s[d];if(c===null)return null;const h=nd(c)||nd(p);return r[d][h]}),i=o&&Object.entries(o).reduce((d,c)=>{let[p,h]=c;return h===void 0||(d[p]=h),d},{}),m=e==null||(n=e.compoundVariants)===null||n===void 0?void 0:n.reduce((d,c)=>{let{class:p,className:h,...y}=c;return Object.entries(y).every(g=>{let[b,f]=g;return Array.isArray(f)?f.includes({...s,...i}[b]):{...s,...i}[b]===f})?[...d,p,h]:d},[]);return rd(t,a,m,o==null?void 0:o.class,o==null?void 0:o.className)},NS=Fm("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function Qn({className:t,variant:e="default",size:o="default",...n}){return u.jsx(AS,{"data-slot":"button",className:Ie(NS({variant:e,size:o,className:t})),...n})}class Mm extends l.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){var e;return this.state.hasError?u.jsx("div",{className:"flex min-h-[50vh] items-center justify-center p-8",children:u.jsxs("div",{className:"text-center space-y-4 max-w-md",children:[u.jsx("div",{className:"text-4xl",children:"💥"}),u.jsx("h2",{className:"text-lg font-semibold",children:"Something went wrong"}),u.jsx("p",{className:"text-sm text-muted-foreground break-all",children:(e=this.state.error)==null?void 0:e.message}),u.jsx(Qn,{onClick:()=>{this.setState({hasError:!1,error:null})},children:"Try Again"})]})}):this.props.children}}function vo({href:t,to:e,...o}){return u.jsx(kf,{to:e??t??"/",...o})}function IS(t){return st(t.defaultTagName??"div",t,t)}const Ra=768;function OS(){const[t,e]=l.useState(void 0);return l.useEffect(()=>{const o=window.matchMedia(`(max-width: ${Ra-1}px)`),n=()=>{e(window.innerWidtho.removeEventListener("change",n)},[]),!!t}const Um=l.createContext(!1),Lm=l.createContext(void 0);function Cn(t){const e=l.useContext(Lm);if(t===!1&&e===void 0)throw new Error(rt(27));return e}const FS={...bn,...Nr},MS=l.forwardRef(function(e,o){const{render:n,className:r,style:s,forceRender:a=!1,...i}=e,{store:m}=Cn(),d=m.useState("open"),c=m.useState("nested"),p=m.useState("mounted"),h=m.useState("transitionStatus");return st("div",e,{state:{open:d,transitionStatus:h},ref:[m.context.backdropRef,o],stateAttributesMapping:FS,props:[{role:"presentation",hidden:!p,style:{userSelect:"none",WebkitUserSelect:"none"}},i],enabled:a||!c})}),US=l.forwardRef(function(e,o){const{render:n,className:r,style:s,disabled:a=!1,nativeButton:i=!0,...m}=e,{store:d}=Cn(),c=d.useState("open"),{getButtonProps:p,buttonRef:h}=Ur({disabled:a,native:i}),y={disabled:a};function g(b){c&&d.setOpen(!1,Oe(Pu,b.nativeEvent))}return st("button",e,{state:y,ref:[o,h],props:[{onClick:g},m,p]})}),LS=l.forwardRef(function(e,o){const{render:n,className:r,style:s,id:a,...i}=e,{store:m}=Cn(),d=yn(a);return m.useSyncedValueWithCleanup("descriptionElementId",d),st("p",e,{ref:o,props:[{id:d},i]})});let jS=(function(t){return t.nestedDialogs="--nested-dialogs",t})({}),_S=(function(t){return t[t.open=Qo.open]="open",t[t.closed=Qo.closed]="closed",t[t.startingStyle=Qo.startingStyle]="startingStyle",t[t.endingStyle=Qo.endingStyle]="endingStyle",t.nested="data-nested",t.nestedDialogOpen="data-nested-dialog-open",t})({});const jm=l.createContext(void 0);function zS(){const t=l.useContext(jm);if(t===void 0)throw new Error(rt(26));return t}const _m="ArrowUp",zm="ArrowDown",Bm="ArrowLeft",Vm="ArrowRight",vl="Home",Cl="End",BS=new Set([Bm,Vm]),f0=new Set([Bm,Vm,vl,Cl]),VS=new Set([_m,zm]),h0=new Set([_m,zm,vl,Cl]),WS=new Set([...BS,...VS]),Tl=new Set([...WS,vl,Cl]),qS="Shift",HS="Control",$S="Alt",KS="Meta",g0=new Set([qS,HS,$S,KS]);function JS(t){return Ve(t)&&t.tagName==="INPUT"}function b0(t){return!!(JS(t)&&t.selectionStart!=null||Ve(t)&&t.tagName==="TEXTAREA")}function y0(t,e,o,n){if(!t||!e||!e.scrollTo)return;let r=t.scrollLeft,s=t.scrollTop;const a=t.clientWidtht.scrollLeft+t.clientWidth-d.scrollPaddingRight?r=m+e.offsetWidth+c.scrollMarginRight-t.clientWidth+d.scrollPaddingRight:m-c.scrollMarginLeftt.scrollLeft+t.clientWidth-d.scrollPaddingRight&&(r=m+e.offsetWidth+c.scrollMarginRight-t.clientWidth+d.scrollPaddingRight))}if(i&&n!=="horizontal"){const m=sd(t,e,"top"),d=ns(t),c=ns(e);m-c.scrollMarginTopt.scrollTop+t.clientHeight-d.scrollPaddingBottom&&(s=m+e.offsetHeight+c.scrollMarginBottom-t.clientHeight+d.scrollPaddingBottom)}t.scrollTo({left:r,top:s,behavior:"auto"})}function sd(t,e,o){const n=o==="left"?"offsetLeft":"offsetTop";let r=0;for(;e.offsetParent&&(r+=e[n],e.offsetParent!==t);)e=e.offsetParent;return r}function ns(t){const e=getComputedStyle(t);return{scrollMarginTop:parseFloat(e.scrollMarginTop)||0,scrollMarginRight:parseFloat(e.scrollMarginRight)||0,scrollMarginBottom:parseFloat(e.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(e.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(e.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(e.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(e.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(e.scrollPaddingLeft)||0}}const GS={...bn,...Nr,nestedDialogOpen(t){return t?{[_S.nestedDialogOpen]:""}:null}},YS=l.forwardRef(function(e,o){const{render:n,className:r,style:s,finalFocus:a,initialFocus:i,...m}=e,{store:d}=Cn(),c=d.useState("descriptionElementId"),p=d.useState("disablePointerDismissal"),h=d.useState("floatingRootContext"),y=d.useState("popupProps"),g=d.useState("modal"),b=d.useState("mounted"),f=d.useState("nested"),w=d.useState("nestedOpenDialogCount"),T=d.useState("open"),v=d.useState("openMethod"),C=d.useState("titleElementId"),S=d.useState("transitionStatus"),k=d.useState("role"),P=h.useState("floatingId"),D=m.id??P;zS(),Ir({open:T,ref:d.context.popupRef,onComplete(){var O,j;T&&((j=(O=d.context).onOpenChangeComplete)==null||j.call(O,!0))}});function I(O){return O==="touch"?d.context.popupRef.current:!0}const N=i===void 0?I:i,z=w>0,U=d.useStateSetter("popupElement"),W=st("div",e,{state:{open:T,nested:f,transitionStatus:S,nestedDialogOpen:z},props:[y,{id:D,"aria-labelledby":C??void 0,"aria-describedby":c??void 0,role:k,...Zn,hidden:!b,onKeyDown(O){Tl.has(O.key)&&O.stopPropagation()},style:{[jS.nestedDialogs]:w}},m],ref:[o,d.context.popupRef,U],stateAttributesMapping:GS});return u.jsx(Ki,{context:h,openInteractionType:v,disabled:!b,closeOnFocusOut:!p,initialFocus:N,returnFocus:a,modal:g!==!1,restoreFocus:"popup",children:W})}),kl=l.forwardRef(function(e,o){const{cutout:n,...r}=e;let s;if(n){const a=n.getBoundingClientRect();s=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${a.left}px ${a.top}px,${a.left}px ${a.bottom}px,${a.right}px ${a.bottom}px,${a.right}px ${a.top}px,${a.left}px ${a.top}px)`}return u.jsx("div",{ref:o,role:"presentation","data-base-ui-inert":"",...r,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:s}})}),QS=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e,{store:s}=Cn(),a=s.useState("mounted"),i=s.useState("modal"),m=s.useState("open");return a||n?u.jsx(jm.Provider,{value:n,children:u.jsxs(Wi,{ref:o,...r,children:[a&&i===!0&&u.jsx(kl,{ref:s.context.internalBackdropRef,inert:dl(!m)}),e.children]})}):null});let ad={},id={},ld="";function XS(t){if(typeof document>"u")return!1;const e=Le(t);return Ze(e).innerWidth-e.documentElement.clientWidth>0}function ZS(t){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const o=Le(t),n=o.documentElement,r=o.body,s=jo(n)?n:r,a=s.style.overflowY,i=n.style.scrollbarGutter;n.style.scrollbarGutter="stable",s.style.overflowY="scroll";const m=s.offsetWidth;s.style.overflowY="hidden";const d=s.offsetWidth;return s.style.overflowY=a,n.style.scrollbarGutter=i,m===d}function ex(t){const e=Le(t),o=e.documentElement,n=e.body,r=jo(o)?o:n,s={overflowY:r.style.overflowY,overflowX:r.style.overflowX};return Object.assign(r.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(r.style,s)}}function tx(t){var y;const e=Le(t),o=e.documentElement,n=e.body,r=Ze(o);let s=0,a=0,i=!1;const m=Gt.create();if(hu&&(((y=r.visualViewport)==null?void 0:y.scale)??1)!==1)return()=>{};function d(){const g=r.getComputedStyle(o),b=r.getComputedStyle(n),T=(g.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";s=o.scrollTop,a=o.scrollLeft,ad={scrollbarGutter:o.style.scrollbarGutter,overflowY:o.style.overflowY,overflowX:o.style.overflowX},ld=o.style.scrollBehavior,id={position:n.style.position,height:n.style.height,width:n.style.width,boxSizing:n.style.boxSizing,overflowY:n.style.overflowY,overflowX:n.style.overflowX,scrollBehavior:n.style.scrollBehavior};const v=o.scrollHeight>o.clientHeight,C=o.scrollWidth>o.clientWidth,S=g.overflowY==="scroll"||b.overflowY==="scroll",k=g.overflowX==="scroll"||b.overflowX==="scroll",P=Math.max(0,r.innerWidth-n.clientWidth),D=Math.max(0,r.innerHeight-n.clientHeight),I=parseFloat(b.marginTop)+parseFloat(b.marginBottom),N=parseFloat(b.marginLeft)+parseFloat(b.marginRight),z=jo(o)?o:n;if(i=ZS(t),i){o.style.scrollbarGutter=T,z.style.overflowY="hidden",z.style.overflowX="hidden";return}Object.assign(o.style,{scrollbarGutter:T,overflowY:"hidden",overflowX:"hidden"}),(v||S)&&(o.style.overflowY="scroll"),(C||k)&&(o.style.overflowX="scroll"),Object.assign(n.style,{position:"relative",height:I||D?`calc(100dvh - ${I+D}px)`:"100dvh",width:N||P?`calc(100vw - ${N+P}px)`:"100vw",boxSizing:"border-box",overflow:"hidden",scrollBehavior:"unset"}),n.scrollTop=s,n.scrollLeft=a,o.setAttribute("data-base-ui-scroll-locked",""),o.style.scrollBehavior="unset"}function c(){Object.assign(o.style,ad),Object.assign(n.style,id),i||(o.scrollTop=s,o.scrollLeft=a,o.removeAttribute("data-base-ui-scroll-locked"),o.style.scrollBehavior=ld)}function p(){c(),m.request(d)}d();const h=Ne(r,"resize",p);return()=>{m.cancel(),c(),typeof r.removeEventListener=="function"&&h()}}class ox{constructor(){_e(this,"lockCount",0);_e(this,"restore",null);_e(this,"timeoutLock",Mt.create());_e(this,"timeoutUnlock",Mt.create());_e(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});_e(this,"unlock",()=>{var e;this.lockCount===0&&this.restore&&((e=this.restore)==null||e.call(this),this.restore=null)})}acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}lock(e){if(this.lockCount===0||this.restore!==null)return;const n=Le(e).documentElement,r=Ze(n).getComputedStyle(n).overflowY;if(r==="hidden"||r==="clip"){this.restore=Ni;return}const s=gu||!XS(e);this.restore=s?ex(e):tx(e)}}const nx=new ox;function Wm(t=!0,e=null){ue(()=>{if(t)return nx.acquire(e)},[t,e])}function rx(t){const{store:e,parentContext:o,actionsRef:n,isDrawer:r}=t,s=e.useState("open");bp(e,s),js(e);const{forceUnmount:a}=_s(s,e),i=l.useCallback(()=>{e.setOpen(!1,Oe(Os))},[e]);return l.useImperativeHandle(n,()=>({unmount:a,close:i}),[a,i]),{parentContext:o,isDrawer:r}}function sx({store:t,dialogRoot:e}){const{parentContext:o,isDrawer:n}=e,r=t.useState("open"),s=t.useState("disablePointerDismissal"),a=t.useState("modal"),i=t.useState("popupElement"),m=t.useState("floatingRootContext"),[d,c]=l.useState(0),[p,h]=l.useState(0),y=d===0,g=Ms(m,{outsidePressEvent(){return t.context.internalBackdropRef.current||t.context.backdropRef.current?"intentional":{mouse:a==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(T){if(!t.context.outsidePressEnabledRef.current||"button"in T&&T.button!==0||"touches"in T&&T.touches.length!==1)return!1;const v=ht(T);if(y&&!s){const C=v;return a&&(t.context.internalBackdropRef.current||t.context.backdropRef.current)?t.context.internalBackdropRef.current===C||t.context.backdropRef.current===C||Ce(C,i)&&!(C!=null&&C.hasAttribute("data-base-ui-portal")):!0}return!1},escapeKey:y});Wm(r&&a===!0,i),t.useContextCallback("onNestedDialogOpen",(T,v)=>{c(T),h(v)}),t.useContextCallback("onNestedDialogClose",()=>{c(0),h(0)}),l.useEffect(()=>(o!=null&&o.onNestedDialogOpen&&r&&o.onNestedDialogOpen(d+1,p+(n?1:0)),o!=null&&o.onNestedDialogClose&&!r&&o.onNestedDialogClose(),()=>{o!=null&&o.onNestedDialogClose&&r&&o.onNestedDialogClose()}),[n,r,d,p,o]);const b=g.reference??Je,f=g.trigger??Je,w=l.useMemo(()=>Tt(Zn,g.floating),[g.floating]);return zs(t,{activeTriggerProps:b,inactiveTriggerProps:f,popupProps:w,nestedOpenDialogCount:d,nestedOpenDrawerCount:p}),null}const ax={...Vs,modal:oe(t=>t.modal),nested:oe(t=>t.nested),nestedOpenDialogCount:oe(t=>t.nestedOpenDialogCount),nestedOpenDrawerCount:oe(t=>t.nestedOpenDrawerCount),disablePointerDismissal:oe(t=>t.disablePointerDismissal),openMethod:oe(t=>t.openMethod),descriptionElementId:oe(t=>t.descriptionElementId),titleElementId:oe(t=>t.titleElementId),viewportElement:oe(t=>t.viewportElement),role:oe(t=>t.role)};class Sl extends Ar{constructor(o,n,r=!1){const s=new er,a=ix(o);a.floatingRootContext=el(s,n,r);super(a,{popupRef:l.createRef(),backdropRef:l.createRef(),internalBackdropRef:l.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:s,onOpenChange:void 0,onOpenChangeComplete:void 0},ax);_e(this,"setOpen",(o,n)=>{var s,a;if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!o&&n.trigger==null&&this.state.activeTriggerId!=null&&(n.trigger=this.state.activeTriggerElement??void 0),(a=(s=this.context).onOpenChange)==null||a.call(s,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const r={open:o};Xi(r,o,n.trigger),this.update(r)})}static useStore(o,n){return Qi(o,(s,a)=>new Sl(n,s,a),!0).store}}function ix(t={}){return{...Bs(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...t}}function lx(t,e="dialog"){const{children:o,open:n,defaultOpen:r=!1,onOpenChange:s,onOpenChangeComplete:a,disablePointerDismissal:i=!1,modal:m=!0,actionsRef:d,handle:c,triggerId:p,defaultTriggerId:h=null}=t,y=e==="drawer",g=e==="alert-dialog",b=g?!0:m,f=g||i,w=g?"alertdialog":"dialog",T=Cn(!0),C={modal:b,disablePointerDismissal:f,nested:!!T,role:w},S=Sl.useStore(c==null?void 0:c.store,{open:r,openProp:n,activeTriggerId:h,triggerIdProp:p,...C});Ps(()=>{const U=n===void 0&&S.state.open===!1&&r===!0?{open:!0,activeTriggerId:h}:null;g?S.update(U?{...C,...U}:C):U&&S.update(U)}),S.useControlledProp("openProp",n),S.useControlledProp("triggerIdProp",p),S.useSyncedValues(C),S.useContextCallback("onOpenChange",s),S.useContextCallback("onOpenChangeComplete",a);const k=S.useState("open"),P=S.useState("mounted"),D=S.useState("payload"),I=rx({store:S,actionsRef:d,parentContext:T==null?void 0:T.store.context,isDrawer:y}),N=k||P,z=l.useMemo(()=>({store:S}),[S]);return u.jsx(Um.Provider,{value:!1,children:u.jsxs(Lm.Provider,{value:z,children:[N&&u.jsx(sx,{store:S,dialogRoot:I}),typeof o=="function"?o({payload:D}):o]})})}function cx(t){const e=l.useContext(Um)?"drawer":"dialog";return lx(t,e)}const dx=l.forwardRef(function(e,o){const{render:n,className:r,style:s,id:a,...i}=e,{store:m}=Cn(),d=yn(a);return m.useSyncedValueWithCleanup("titleElementId",d),st("h2",e,{ref:o,props:[{id:d},i]})});function ux(t){const e=l.useRef(""),o=l.useCallback(r=>{r.defaultPrevented||(e.current=r.pointerType,t(r,r.pointerType))},[t]);return{onClick:l.useCallback(r=>{if(r.detail===0){t(r,"keyboard");return}"pointerType"in r?t(r,r.pointerType):t(r,e.current),e.current=""},[t]),onPointerDown:o}}function px(t,e){const o=l.useRef(t),n=ke(e);ue(()=>{o.current!==t&&n(o.current)},[t,n]),ue(()=>{o.current=t},[t])}function qm(t,e){const o=ke((s,a)=>{(typeof t=="function"?t():t)||e(a||(gu?"touch":""))}),{onClick:n,onPointerDown:r}=ux(o);return l.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function mx(t){const[e,o]=l.useState(null),n=qm(t,o);return px(t,r=>{r&&!t&&o(null)}),l.useMemo(()=>({openMethod:e,triggerProps:n}),[e,n])}function fx({...t}){return u.jsx(cx,{"data-slot":"sheet",...t})}function hx({...t}){return u.jsx(QS,{"data-slot":"sheet-portal",...t})}function gx({className:t,...e}){return u.jsx(MS,{"data-slot":"sheet-overlay",className:Ie("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...e})}function bx({className:t,children:e,side:o="right",showCloseButton:n=!0,...r}){return u.jsxs(hx,{children:[u.jsx(gx,{}),u.jsxs(YS,{"data-slot":"sheet-content","data-side":o,className:Ie("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",t),...r,children:[e,n&&u.jsxs(US,{"data-slot":"sheet-close",render:u.jsx(Qn,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[u.jsx(du,{}),u.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function yx({className:t,...e}){return u.jsx("div",{"data-slot":"sheet-header",className:Ie("flex flex-col gap-0.5 p-4",t),...e})}function w0({className:t,...e}){return u.jsx("div",{"data-slot":"sheet-footer",className:Ie("mt-auto flex flex-col gap-2 p-4",t),...e})}function wx({className:t,...e}){return u.jsx(dx,{"data-slot":"sheet-title",className:Ie("font-heading text-base font-medium text-foreground",t),...e})}function vx({className:t,...e}){return u.jsx(LS,{"data-slot":"sheet-description",className:Ie("text-sm text-muted-foreground",t),...e})}function Ea({className:t,...e}){return u.jsx("div",{"data-slot":"skeleton",className:Ie("animate-pulse rounded-md bg-muted",t),...e})}const Cx="sidebar_state",Tx=3600*24*7,kx="16rem",Sx="18rem",xx="3rem",Dx="b",Hm=l.createContext(null);function xl(){const t=l.useContext(Hm);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function Px({defaultOpen:t=!0,open:e,onOpenChange:o,className:n,style:r,children:s,...a}){const i=OS(),[m,d]=l.useState(!1),[c,p]=l.useState(t),h=e??c,y=l.useCallback(w=>{const T=typeof w=="function"?w(h):w;o?o(T):p(T),document.cookie=`${Cx}=${T}; path=/; max-age=${Tx}`},[o,h]),g=l.useCallback(()=>i?d(w=>!w):y(w=>!w),[i,y,d]);l.useEffect(()=>{const w=T=>{T.key===Dx&&(T.metaKey||T.ctrlKey)&&(T.preventDefault(),g())};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[g]);const b=h?"expanded":"collapsed",f=l.useMemo(()=>({state:b,open:h,setOpen:y,isMobile:i,openMobile:m,setOpenMobile:d,toggleSidebar:g}),[b,h,y,i,m,d,g]);return u.jsx(Hm.Provider,{value:f,children:u.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":kx,"--sidebar-width-icon":xx,...r},className:Ie("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",n),...a,children:s})})}function Rx({side:t="left",variant:e="sidebar",collapsible:o="offcanvas",className:n,children:r,dir:s,...a}){const{isMobile:i,state:m,openMobile:d,setOpenMobile:c}=xl();return o==="none"?u.jsx("div",{"data-slot":"sidebar",className:Ie("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",n),...a,children:r}):i?u.jsx(fx,{open:d,onOpenChange:c,...a,children:u.jsxs(bx,{dir:s,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":Sx},side:t,children:[u.jsxs(yx,{className:"sr-only",children:[u.jsx(wx,{children:"Sidebar"}),u.jsx(vx,{children:"Displays the mobile sidebar."})]}),u.jsx("div",{className:"flex h-full w-full flex-col",children:r})]})}):u.jsxs("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":m,"data-collapsible":m==="collapsed"?o:"","data-variant":e,"data-side":t,"data-slot":"sidebar",children:[u.jsx("div",{"data-slot":"sidebar-gap",className:Ie("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",e==="floating"||e==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),u.jsx("div",{"data-slot":"sidebar-container","data-side":t,className:Ie("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",e==="floating"||e==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",n),...a,children:u.jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full flex-col overflow-hidden bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:r})})]})}function Ex({className:t,onClick:e,...o}){const{toggleSidebar:n}=xl();return u.jsxs(Qn,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:Ie(t),onClick:r=>{e==null||e(r),n()},...o,children:[u.jsx(Kg,{}),u.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function Ax({className:t,...e}){return u.jsx("main",{"data-slot":"sidebar-inset",className:Ie("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",t),...e})}function Nx({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:Ie("flex flex-col gap-2 p-2",t),...e})}function Ix({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:Ie("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-y-auto",t),...e})}function $m({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:Ie("relative flex w-full min-w-0 flex-col p-2",t),...e})}function Km({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:Ie("w-full text-sm",t),...e})}function $o({className:t,...e}){return u.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:Ie("flex w-full min-w-0 flex-col gap-0",t),...e})}function Ko({className:t,...e}){return u.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:Ie("group/menu-item relative",t),...e})}const Ox=Fm("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent/15 focus-visible:ring-2 active:bg-sidebar-accent/15 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground data-active:hover:bg-sidebar-accent data-active:hover:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent/15",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function Jo({render:t,isActive:e=!1,variant:o="default",size:n="default",tooltip:r,className:s,...a}){const{isMobile:i,state:m}=xl(),d=IS({defaultTagName:"button",props:Tt({className:Ie(Ox({variant:o,size:n}),s)},a),render:r?u.jsx($p,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:n,active:e}});return r?(typeof r=="string"&&(r={children:r}),u.jsxs(Hp,{children:[d,u.jsx(Kp,{side:"right",align:"center",hidden:m!=="collapsed"||i,...r})]})):d}const Jm=l.createContext(void 0);function Dl(t){const e=l.useContext(Jm);if(e===void 0&&!t)throw new Error(rt(33));return e}const Gm=l.createContext(void 0);function fo(t){const e=l.useContext(Gm);if(e===void 0&&!t)throw new Error(rt(36));return e}const Fx=l.createContext(void 0);function Qs(t=!0){const e=l.useContext(Fx);if(e===void 0&&!t)throw new Error(rt(25));return e}function Mx(t){const{closeOnClick:e,highlighted:o,id:n,nodeId:r,store:s,typingRef:a,itemRef:i,itemMetadata:m}=t,{events:d}=s.useState("floatingTreeRoot"),c=Qs(!0),p=c!==void 0;return l.useMemo(()=>({id:n,role:"menuitem",tabIndex:o?0:-1,onKeyDown(h){h.key===" "&&(a!=null&&a.current)&&h.preventDefault()},onMouseMove(h){r&&d.emit("itemhover",{nodeId:r,target:h.currentTarget})},onClick(h){e&&d.emit("close",{domEvent:h,reason:Du})},onMouseUp(h){if(c){const y=c.initialCursorPointRef.current;if(c.initialCursorPointRef.current=null,p&&y&&Math.abs(h.clientX-y.x)<=1&&Math.abs(h.clientY-y.y)<=1||p&&!yu&&h.button===2)return}i.current&&s.context.allowMouseUpTriggerRef.current&&(!p||h.button===2)&&(!m||m.type==="regular-item")&&i.current.click()}}),[e,o,n,d,r,s,a,i,c,p,m])}const Ux={type:"regular-item"};function Ym(t){const{closeOnClick:e,disabled:o=!1,highlighted:n,id:r,store:s,typingRef:a=s.context.typingRef,nativeButton:i,itemMetadata:m,nodeId:d}=t,c=l.useRef(null),{getButtonProps:p,buttonRef:h}=Ur({disabled:o,focusableWhenDisabled:!0,native:i,composite:!0}),y=Mx({closeOnClick:e,highlighted:n,id:r,nodeId:d,store:s,typingRef:a,itemRef:c,itemMetadata:m}),g=l.useCallback(f=>Tt(y,{onMouseEnter(){m.type==="submenu-trigger"&&m.setActive()}},f,p),[y,p,m]),b=Gn(c,h);return l.useMemo(()=>({getItemProps:g,itemRef:b}),[g,b])}const Qm=l.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}});function Lx(){return l.useContext(Qm)}let jx=(function(t){return t[t.None=0]="None",t[t.GuessFromOrder=1]="GuessFromOrder",t})({});function Pl(t={}){const{label:e,metadata:o,textRef:n,indexGuessBehavior:r,index:s}=t,{register:a,unregister:i,subscribeMapChange:m,elementsRef:d,labelsRef:c,nextIndexRef:p}=Lx(),h=l.useRef(-1),[y,g]=l.useState(s??(r===jx.GuessFromOrder?()=>{if(h.current===-1){const w=p.current;p.current+=1,h.current=w}return h.current}:-1)),b=l.useRef(null),f=l.useCallback(w=>{var T;if(b.current=w,y!==-1&&w!==null&&(d.current[y]=w,c)){const v=e!==void 0;c.current[y]=v?e:((T=n==null?void 0:n.current)==null?void 0:T.textContent)??w.textContent}},[y,d,c,e,n]);return ue(()=>{if(s!=null)return;const w=b.current;if(w)return a(w,o),()=>{i(w)}},[s,a,i,o]),ue(()=>{if(s==null)return m(w=>{var v;const T=b.current?(v=w.get(b.current))==null?void 0:v.index:null;T!=null&&g(T)})},[s,m,g]),l.useMemo(()=>({ref:f,index:y}),[y,f])}const _x=l.forwardRef(function(e,o){const{render:n,className:r,id:s,label:a,nativeButton:i=!1,disabled:m=!1,closeOnClick:d=!0,style:c,...p}=e,h=Pl({label:a}),y=Dl(!0),g=yn(s),{store:b}=fo(),f=b.useState("isActive",h.index),w=b.useState("itemProps"),{getItemProps:T,itemRef:v}=Ym({closeOnClick:d,disabled:m,highlighted:f,id:g,store:b,nativeButton:i,nodeId:y==null?void 0:y.context.nodeId,itemMetadata:Ux});return st("div",e,{state:{disabled:m,highlighted:f},props:[w,p,T],ref:[v,o,h.ref]})}),zx=l.createContext(void 0);function Xm(t){return l.useContext(zx)}const Bx={...bn,...Nr},Vx=l.forwardRef(function(e,o){const{render:n,className:r,style:s,finalFocus:a,...i}=e,{store:m}=fo(),{side:d,align:c}=Dl(),p=Xm()!=null,h=m.useState("open"),y=m.useState("transitionStatus"),g=m.useState("popupProps"),b=m.useState("mounted"),f=m.useState("instantType"),w=m.useState("activeTriggerElement"),T=m.useState("parent"),v=m.useState("lastOpenChangeReason"),C=m.useState("rootId"),S=m.useState("floatingRootContext"),k=m.useState("floatingTreeRoot"),P=m.useState("closeDelay"),D=m.useState("activeTriggerElement"),I=m.useState("hoverEnabled"),N=m.useState("disabled"),z=T.type==="context-menu";Ir({open:h,ref:m.context.popupRef,onComplete(){var j,x;h&&((x=(j=m.context).onOpenChangeComplete)==null||x.call(j,!0))}}),l.useEffect(()=>{function j(x){m.setOpen(!1,Oe(x.reason,x.domEvent))}return k.events.on("close",j),()=>{k.events.off("close",j)}},[k.events,m]),rl(S,{enabled:I&&!N&&!z&&T.type!=="menubar",closeDelay:P});const U=l.useCallback(j=>{m.set("popupElement",j)},[m]),R={transitionStatus:y,side:d,align:c,open:h,nested:T.type==="menu",instant:f},W=st("div",e,{state:R,ref:[o,m.context.popupRef,U],stateAttributesMapping:Bx,props:[g,{onKeyDown(j){p&&Tl.has(j.key)&&j.stopPropagation()}},$s(y),i,{"data-rootownerid":C}]});let O=T.type===void 0||z;return(w||T.type==="menubar"&&v!==Ii)&&(O=!0),u.jsx(Ki,{context:S,modal:z,disabled:!b,returnFocus:a===void 0?O:a,initialFocus:T.type!=="menu",restoreFocus:!0,externalTree:T.type!=="menubar"?k:void 0,previousFocusableElement:D,nextFocusableElement:T.type===void 0?m.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:T.type===void 0?m.context.beforeContentFocusGuardRef:void 0,children:W})}),Zm=l.createContext(void 0);function Wx(){const t=l.useContext(Zm);if(t===void 0)throw new Error(rt(32));return t}const qx=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e,{store:s}=fo();return s.useState("mounted")||n?u.jsx(Zm.Provider,{value:n,children:u.jsx(Wi,{ref:o,...r})}):null});function Hx(t){const{children:e,elementsRef:o,labelsRef:n,onMapChange:r}=t,s=ke(r),a=l.useRef(0),i=Nt(Kx).current,m=Nt($x).current,[d,c]=l.useState(0),p=l.useRef(d),h=ke((w,T)=>{m.set(w,T??null),p.current+=1,c(p.current)}),y=ke(w=>{m.delete(w),p.current+=1,c(p.current)}),g=l.useMemo(()=>{const w=new Map;return Array.from(m.keys()).filter(v=>v.isConnected).sort(Jx).forEach((v,C)=>{const S=m.get(v)??{};w.set(v,{...S,index:C})}),w},[m,d]);ue(()=>{if(typeof MutationObserver!="function"||g.size===0)return;const w=new MutationObserver(T=>{const v=new Set,C=S=>v.has(S)?v.delete(S):v.add(S);T.forEach(S=>{S.removedNodes.forEach(C),S.addedNodes.forEach(C)}),v.size===0&&(p.current+=1,c(p.current))});return g.forEach((T,v)=>{v.parentElement&&w.observe(v.parentElement,{childList:!0})}),()=>{w.disconnect()}},[g]),ue(()=>{p.current===d&&(o.current.length!==g.size&&(o.current.length=g.size),n&&n.current.length!==g.size&&(n.current.length=g.size),a.current=g.size),s(g)},[s,g,o,n,d]),ue(()=>()=>{o.current=[]},[o]),ue(()=>()=>{n&&(n.current=[])},[n]);const b=ke(w=>(i.add(w),()=>{i.delete(w)}));ue(()=>{i.forEach(w=>w(g))},[i,g]);const f=l.useMemo(()=>({register:h,unregister:y,subscribeMapChange:b,elementsRef:o,labelsRef:n,nextIndexRef:a}),[h,y,b,o,n,a]);return u.jsx(Qm.Provider,{value:f,children:e})}function $x(){return new Map}function Kx(){return new Set}function Jx(t,e){const o=t.compareDocumentPosition(e);return o&Node.DOCUMENT_POSITION_FOLLOWING||o&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:o&Node.DOCUMENT_POSITION_PRECEDING||o&Node.DOCUMENT_POSITION_CONTAINS?1:0}const Gx=20;function ef(t,e,o,n){const[r,s]=l.useState(!1);ue(()=>{if(!t||!e||o==null){s(!1);return}const a=Le(o).documentElement.clientWidth,i=o.offsetWidth;s(a>0&&i>0&&i>=a-Gx)},[t,e,o]),Wm(t&&(!e||r),n)}const Yx=l.forwardRef(function(e,o){var Fe;const{anchor:n,positionMethod:r="absolute",className:s,render:a,side:i,align:m,sideOffset:d=0,alignOffset:c=0,collisionBoundary:p="clipping-ancestors",collisionPadding:h=5,arrowPadding:y=5,sticky:g=!1,disableAnchorTracking:b=!1,collisionAvoidance:f=Jy,style:w,...T}=e,{store:v}=fo(),C=Wx(),S=Qs(!0),k=v.useState("parent"),P=v.useState("floatingRootContext"),D=v.useState("floatingTreeRoot"),I=v.useState("mounted"),N=v.useState("open"),z=v.useState("modal"),U=v.useState("openMethod"),R=v.useState("activeTriggerElement"),W=v.useState("transitionStatus"),O=v.useState("positionerElement"),j=v.useState("instantType"),x=v.useState("hasViewport"),F=v.useState("lastOpenChangeReason"),H=v.useState("floatingNodeId"),A=v.useState("floatingParentNodeId"),Q=P.useState("domReferenceElement"),M=l.useRef(null),L=Yi(O,!1,!1);let V=n,_=d,B=c,Y=m,q=f;k.type==="context-menu"&&(V=n??((Fe=k.context)==null?void 0:Fe.anchor),Y=Y??"start",!i&&Y!=="center"&&(B=e.alignOffset??2,_=e.sideOffset??-5));let J=i,Te=Y;k.type==="menu"?(J=J??"inline-end",Te=Te??"start",q=e.collisionAvoidance??Vi):k.type==="menubar"&&(J=J??"bottom",Te=Te??"start");const Re=k.type==="context-menu",K=ll({anchor:V,floatingRootContext:P,positionMethod:S?"fixed":r,mounted:I,side:J,sideOffset:_,align:Te,alignOffset:B,arrowPadding:Re?0:y,collisionBoundary:p,collisionPadding:h,sticky:g,nodeId:H,keepMounted:C,disableAnchorTracking:b,collisionAvoidance:q,shiftCrossAxis:Re&&!("side"in q&&q.side==="flip"),externalTree:D,adaptiveOrigin:x?il:void 0});l.useEffect(()=>{function we(he){he.open&&(he.parentNodeId===H&&v.set("hoverEnabled",!1),he.nodeId!==H&&he.parentNodeId===v.select("floatingParentNodeId")&&v.setOpen(!1,Oe(lr)))}return D.events.on("menuopenchange",we),()=>{D.events.off("menuopenchange",we)}},[v,D.events,H]),l.useEffect(()=>{if(v.select("floatingParentNodeId")==null)return;function we(he){if(he.open||he.nodeId!==v.select("floatingParentNodeId"))return;const Pe=he.reason??lr;v.setOpen(!1,Oe(Pe))}return D.events.on("menuopenchange",we),()=>{D.events.off("menuopenchange",we)}},[D.events,v]);const de=gt();l.useEffect(()=>{N||de.clear()},[N,de]),l.useEffect(()=>{function we(he){if(!(!N||he.nodeId!==v.select("floatingParentNodeId")))if(he.target&&R&&R!==he.target){const Pe=v.select("closeDelay");Pe>0?de.isStarted()||de.start(Pe,()=>{v.setOpen(!1,Oe(lr))}):v.setOpen(!1,Oe(lr))}else de.clear()}return D.events.on("itemhover",we),()=>{D.events.off("itemhover",we)}},[D.events,N,R,v,de]),l.useEffect(()=>{const we={open:N,nodeId:H,parentNodeId:A,reason:v.select("lastOpenChangeReason")};D.events.emit("menuopenchange",we)},[D.events,N,v,H,A]),ue(()=>{const we=Q,he=M.current;if(we&&(M.current=we),he&&we&&we!==he){v.set("instantType",void 0);const Pe=new AbortController;return L(()=>{v.set("instantType","trigger-change")},Pe.signal),()=>{Pe.abort()}}},[Q,L,v]);const le={open:N,side:K.side,align:K.align,anchorHidden:K.anchorHidden,nested:k.type==="menu",instant:j},De=k.type==="menubar"&&k.context.modal;ef(N&&(De||z&&F!==Ye),U==="touch",O,R);const fe=cl(e,le,{styles:K.positionerStyles,transitionStatus:W,props:T,refs:[o,v.useStateSetter("positionerElement")],hidden:!I,inert:!N}),Se=I&&k.type!=="menu"&&(k.type!=="menubar"&&z&&F!==Ye||k.type==="menubar"&&k.context.modal);let Z=null;return k.type==="menubar"?Z=k.context.contentElement:k.type===void 0&&(Z=R),u.jsxs(Jm.Provider,{value:K,children:[Se&&u.jsx(kl,{ref:k.type==="context-menu"||k.type==="nested-context-menu"?k.context.internalBackdropRef:null,inert:dl(!N),cutout:Z}),u.jsx(np,{id:H,children:u.jsx(Hx,{elementsRef:v.context.itemDomElements,labelsRef:v.context.itemLabels,children:fe})})]})}),Qx=l.createContext(null);function tf(t){return l.useContext(Qx)}const Xx={...Vs,disabled:oe(t=>t.parent.type==="menubar"&&t.parent.context.disabled||t.disabled),modal:oe(t=>(t.parent.type===void 0||t.parent.type==="context-menu")&&(t.modal??!0)),openMethod:oe(t=>t.openMethod),allowMouseEnter:oe(t=>t.allowMouseEnter),stickIfOpen:oe(t=>t.stickIfOpen),parent:oe(t=>t.parent),rootId:oe(t=>t.parent.type==="menu"?t.parent.store.select("rootId"):t.parent.type!==void 0?t.parent.context.rootId:t.rootId),activeIndex:oe(t=>t.activeIndex),isActive:oe((t,e)=>t.activeIndex===e),hoverEnabled:oe(t=>t.hoverEnabled),instantType:oe(t=>t.instantType),lastOpenChangeReason:oe(t=>t.openChangeReason),floatingTreeRoot:oe(t=>t.parent.type==="menu"?t.parent.store.select("floatingTreeRoot"):t.floatingTreeRoot),floatingNodeId:oe(t=>t.floatingNodeId),floatingParentNodeId:oe(t=>t.floatingParentNodeId),itemProps:oe(t=>t.itemProps),closeDelay:oe(t=>t.closeDelay),hasViewport:oe(t=>t.hasViewport),keyboardEventRelay:oe(t=>{if(t.keyboardEventRelay)return t.keyboardEventRelay;if(t.parent.type==="menu")return t.parent.store.select("keyboardEventRelay")})};class Rl extends Ar{constructor(o){super({...Zx(),...o},{positionerRef:l.createRef(),popupRef:l.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:l.createRef(),beforeContentFocusGuardRef:l.createRef(),onOpenChangeComplete:void 0,triggerElements:new er},Xx);_e(this,"unsubscribeParentListener",null);this.unsubscribeParentListener=this.observe("parent",n=>{var r;if((r=this.unsubscribeParentListener)==null||r.call(this),n.type==="menu"){let s=n.store.select("rootId"),a=n.store.select("floatingTreeRoot"),i=n.store.select("keyboardEventRelay");this.unsubscribeParentListener=n.store.subscribe(()=>{const m=n.store.select("rootId"),d=n.store.select("floatingTreeRoot"),c=n.store.select("keyboardEventRelay");s===m&&a===d&&i===c||(s=m,a=d,i=c,this.notifyAll())}),this.context.allowMouseUpTriggerRef=n.store.context.allowMouseUpTriggerRef;return}n.type!==void 0&&(this.context.allowMouseUpTriggerRef=n.context.allowMouseUpTriggerRef),this.unsubscribeParentListener=null})}setOpen(o,n){this.state.floatingRootContext.context.events.emit("setOpen",{open:o,eventDetails:n})}static useStore(o,n){const r=Nt(()=>new Rl(n)).current;return o??r}}function Zx(){return{...Bs(),disabled:!1,modal:!0,openMethod:null,allowMouseEnter:!1,stickIfOpen:!0,parent:{type:void 0},rootId:void 0,activeIndex:null,hoverEnabled:!0,instantType:void 0,openChangeReason:null,floatingTreeRoot:new qi,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:Je,keyboardEventRelay:void 0,closeDelay:0,hasViewport:!1}}const of=l.createContext(void 0);function nf(){return l.useContext(of)}const rf=Di(function(e){const{children:o,open:n,onOpenChange:r,onOpenChangeComplete:s,defaultOpen:a=!1,disabled:i=!1,modal:m,loopFocus:d=!0,orientation:c="vertical",actionsRef:p,closeParentOnEsc:h=!1,handle:y,triggerId:g,defaultTriggerId:b=null,highlightItemOnHover:f=!0}=e,w=Qs(!0),T=fo(!0),v=tf(!0),C=nf(),S=l.useMemo(()=>C&&T?{type:"menu",store:T.store}:v?{type:"menubar",context:v}:w&&!T?{type:"context-menu",context:w}:{type:void 0},[w,T,v,C]),k=Rl.useStore(y==null?void 0:y.store,{open:a,openProp:n,activeTriggerId:b,triggerIdProp:g,parent:S});Ps(()=>{n===void 0&&k.state.open===!1&&a===!0&&k.update({open:!0,activeTriggerId:b})}),k.useControlledProp("openProp",n),k.useControlledProp("triggerIdProp",g),k.useContextCallback("onOpenChangeComplete",s);const P=un(),D=un(),I=k.useState("floatingTreeRoot"),N=Hi(I),z=mo(),U=k.useState("open"),R=k.useState("activeTriggerElement"),W=k.useState("positionerElement"),O=k.useState("hoverEnabled"),j=k.useState("disabled"),x=k.useState("lastOpenChangeReason"),F=k.useState("parent"),H=k.useState("activeIndex"),A=k.useState("payload"),Q=k.useState("floatingParentNodeId"),M=l.useRef(null),L=l.useRef(F.type!=="context-menu"),V=gt(),_=l.useRef(!0),B=gt(),Y=Q!=null,{openMethod:q,triggerProps:J}=mx(U);k.useSyncedValues({disabled:i,modal:F.type===void 0?m:void 0,openMethod:q,rootId:P}),js(k);const{forceUnmount:Te}=_s(U,k,()=>{k.update({allowMouseEnter:!1,stickIfOpen:!0})});ue(()=>{w&&!T?k.update({parent:{type:"context-menu",context:w},floatingNodeId:N,floatingParentNodeId:z}):T&&k.update({floatingNodeId:N,floatingParentNodeId:z})},[w,T,N,z,k]),l.useEffect(()=>{if(U||(M.current=null),F.type==="context-menu"){if(!U){V.clear(),L.current=!1;return}V.start(500,()=>{L.current=!0})}},[V,U,F.type]),ue(()=>{!U&&!O&&k.set("hoverEnabled",!0)},[U,O,k]);const Re=ke((G,ge)=>{var Bt;const xe=ge.reason;if(U===G&&ge.trigger===R&&x===xe||(ge.preventUnmountOnClose=()=>{k.set("preventUnmountingOnClose",!0)},!G&&ge.trigger==null&&(ge.trigger=R??void 0),r==null||r(G,ge),ge.isCanceled))return;k.state.floatingRootContext.dispatchOpenChange(G,ge);const Ke=ge.event;if(G===!1&&(Ke==null?void 0:Ke.type)==="click"&&Ke.pointerType==="touch"&&!_.current)return;if(!G&&H!==null){const Vt=k.context.itemDomElements.current[H];queueMicrotask(()=>{Vt==null||Vt.setAttribute("tabindex","-1")})}G&&xe===An?(_.current=!1,B.start(300,()=>{_.current=!0})):(_.current=!0,B.clear());const ze=(xe===uo||xe===Du)&&Ke.detail===0&&(Ke==null?void 0:Ke.isTrusted),Ge=!G&&(xe===Rr||xe==null),it={open:G,openChangeReason:xe};M.current=ge.event??null;const It=((Bt=ge.trigger)==null?void 0:Bt.id)??null;(It||G)&&(it.activeTriggerId=It,it.activeTriggerElement=ge.trigger??null),k.update(it),F.type==="menubar"&&(xe===An||xe===dn||xe===Ye||xe===ti||xe===lr)?k.set("instantType","group"):ze||Ge?k.set("instantType",ze?"click":"dismiss"):k.set("instantType",void 0)}),K=hp({popupStore:k,floatingId:D,nested:z!=null,onOpenChange:Re}),de=K.context.events;l.useEffect(()=>{const G=({open:ge,eventDetails:xe})=>Re(ge,xe);return de.on("setOpen",G),()=>{de==null||de.off("setOpen",G)}},[de,Re]);const le=l.useCallback(()=>{k.setOpen(!1,Oe(Os))},[k]);l.useImperativeHandle(p,()=>({unmount:Te,close:le}),[Te,le]);let De;F.type==="context-menu"&&(De=F.context),l.useImperativeHandle(De==null?void 0:De.positionerRef,()=>W,[W]),l.useImperativeHandle(De==null?void 0:De.actionsRef,()=>({setOpen:Re}),[Re]);const me=Ms(K,{enabled:!j,bubbles:{escapeKey:h&&F.type==="menu"},outsidePress(){var G;return F.type!=="context-menu"||((G=M.current)==null?void 0:G.type)==="contextmenu"?!0:L.current},externalTree:Y?I:void 0}),fe=Dp(),Se=l.useCallback(G=>{k.select("activeIndex")!==G&&k.set("activeIndex",G)},[k]),Z=dv(K,{enabled:!j,listRef:k.context.itemDomElements,activeIndex:H,nested:F.type!==void 0,loopFocus:d,orientation:c,parentOrientation:F.type==="menubar"?F.context.orientation:void 0,rtl:fe==="rtl",disabledIndices:ei,onNavigate:Se,openOnArrowKeyDown:F.type!=="context-menu",externalTree:Y?I:void 0,focusItemOnHover:f}),Fe=l.useCallback(G=>{k.context.typingRef.current=G},[k]),we=uv(K,{listRef:k.context.itemLabels,elementsRef:k.context.itemDomElements,activeIndex:H,resetMs:$y,onMatch:G=>{U&&G!==H&&k.set("activeIndex",G)},onTyping:Fe}),he=l.useMemo(()=>{const G=Tt(we.reference,Z.reference,me.reference,{onMouseMove(){k.set("allowMouseEnter",!0)}},J);return G["aria-haspopup"]="menu",G["aria-expanded"]=U,G},[k,we.reference,Z.reference,me.reference,J,U]),Pe=l.useMemo(()=>{const G=Tt(Z.trigger,me.trigger,J);return G["aria-haspopup"]="menu",G["aria-expanded"]=!1,G},[Z.trigger,me.trigger,J]),se=l.useMemo(()=>Tt(Zn,{id:D,role:"menu","aria-labelledby":R==null?void 0:R.id,onMouseMove(){k.set("allowMouseEnter",!0),F.type==="menu"&&k.set("hoverEnabled",!1)},onClick(){k.select("hoverEnabled")&&k.set("hoverEnabled",!1)},onKeyDown(G){const ge=k.select("keyboardEventRelay");ge&&!G.isPropagationStopped()&&ge(G)}},we.floating,Z.floating,me.floating),[R,D,F.type,k,we.floating,Z.floating,me.floating]),$=Z.item??Je;zs(k,{floatingRootContext:K,activeTriggerProps:he,inactiveTriggerProps:Pe,popupProps:se,itemProps:$});const ee=l.useMemo(()=>({store:k,parent:S}),[k,S]),te=u.jsx(Gm.Provider,{value:ee,children:typeof o=="function"?o({payload:A}):o});return F.type===void 0||F.type==="context-menu"?u.jsx(rp,{externalTree:I,children:te}):te});function eD(t){const e=fo().store,o=l.useMemo(()=>({parentMenu:e}),[e]);return u.jsx(of.Provider,{value:o,children:u.jsx(rf,{...t})})}function tD(t){const e=t.getBoundingClientRect(),o=Ze(t),n=o.getComputedStyle(t,"::before"),r=o.getComputedStyle(t,"::after");if(!(n.content!=="none"||r.content!=="none"))return e;const a=parseFloat(n.width)||0,i=parseFloat(n.height)||0,m=parseFloat(r.width)||0,d=parseFloat(r.height)||0,c=Math.max(e.width,a,m),p=Math.max(e.height,i,d),h=c-e.width,y=p-e.height;return{left:e.left-h/2,right:e.right+h/2,top:e.top-y/2,bottom:e.bottom+y/2}}function oD(t={}){const{highlightItemOnHover:e,highlightedIndex:o,onHighlightedIndexChange:n}=wl(),{ref:r,index:s}=Pl(t),a=o===s,i=l.useRef(null),m=Gn(r,i);return{compositeProps:l.useMemo(()=>({tabIndex:a?0:-1,onFocus(){n(s)},onMouseMove(){const c=i.current;if(!e||!c)return;const p=c.hasAttribute("disabled")||c.ariaDisabled==="true";!a&&!p&&c.focus()}}),[a,n,s,e]),compositeRef:m,index:s}}function nD(t){const{render:e,className:o,style:n,state:r=Je,props:s=ei,refs:a=ei,metadata:i,stateAttributesMapping:m,tag:d="div",...c}=t,{compositeProps:p,compositeRef:h}=oD({metadata:i});return st(d,t,{state:r,ref:[...a,h],props:[p,...s,c],stateAttributesMapping:m})}function sf(t){if(Ve(t)&&t.hasAttribute("data-rootownerid"))return t.getAttribute("data-rootownerid")??void 0;if(!Qt(t))return sf(to(t))}function af(t,e){const o=l.useRef(null);function n(s){_t.flushSync(()=>{t.setOpen(!1,Oe(dn,s.nativeEvent,s.currentTarget))});const a=Ry(o.current);a==null||a.focus()}function r(s){var i;const a=t.select("positionerElement");if(a&&In(s,a))(i=t.context.beforeContentFocusGuardRef.current)==null||i.focus();else{_t.flushSync(()=>{t.setOpen(!1,Oe(dn,s.nativeEvent,s.currentTarget))});let m=Py(t.context.triggerFocusTargetRef.current||e.current);for(;m!==null&&Ce(a,m);){const d=m;if(m=ji(m),m===d)break}m==null||m.focus()}}return{preFocusGuardRef:o,handlePreFocusGuardFocus:n,handleFocusTargetFocus:r}}function rD(t){const{enabled:e=!0,mouseDownAction:o,open:n}=t,r=l.useRef(!1);return l.useMemo(()=>e?{onMouseDown:s=>{(o==="open"&&!n||o==="close"&&n)&&(r.current=!0,Le(s.currentTarget).addEventListener("click",()=>{r.current=!1},{once:!0}))},onClick:s=>{r.current&&(r.current=!1,s.preventBaseUIHandler())}}:Je,[e,o,n])}const rs=2,sD=uu(function(e,o){const{render:n,className:r,style:s,disabled:a=!1,nativeButton:i=!0,id:m,openOnHover:d,delay:c=100,closeDelay:p=0,handle:h,payload:y,...g}=e,b=fo(!0),f=(h==null?void 0:h.store)??(b==null?void 0:b.store);if(!f)throw new Error(rt(85));const w=yn(m),T=f.useState("isTriggerActive",w),v=f.useState("floatingRootContext"),C=f.useState("isOpenedByTrigger",w),S=f.useState("triggerPopupId",w),k=l.useRef(null),P=iD(),D=wl(!0),I=zo(),N=l.useMemo(()=>I??new qi,[I]),z=Hi(N),U=mo(),{registerTrigger:R,isMountedByThisTrigger:W}=Zi(w,k,f,{payload:y,closeDelay:p,parent:P,floatingTreeRoot:N,floatingNodeId:z,floatingParentNodeId:U,keyboardEventRelay:D==null?void 0:D.relayKeyboardEvent}),O=P.type==="menubar",j=f.useState("disabled"),x=a||j||O&&P.context.disabled,{getButtonProps:F,buttonRef:H}=Ur({disabled:x,native:i});l.useEffect(()=>{!C&&P.type===void 0&&(f.context.allowMouseUpTriggerRef.current=!1)},[f,C,P.type]);const A=l.useRef(null),Q=gt(),M=ke(Z=>{if(!A.current)return;Q.clear(),f.context.allowMouseUpTriggerRef.current=!1;const Fe=Z.target;if(Ce(A.current,Fe)||Ce(f.select("positionerElement"),Fe)||Fe===A.current||Fe!=null&&sf(Fe)===f.select("rootId"))return;const we=tD(A.current);Z.clientX>=we.left-rs&&Z.clientX<=we.right+rs&&Z.clientY>=we.top-rs&&Z.clientY<=we.bottom+rs||N.events.emit("close",{domEvent:Z,reason:Gb})});l.useEffect(()=>{C&&f.select("lastOpenChangeReason")===Ye&&Le(A.current).addEventListener("mouseup",M,{once:!0})},[C,M,f]);const L=O&&P.context.hasSubmenuOpen,_=Ws(v,{enabled:(d??L)&&!x&&P.type!=="context-menu"&&(!O||L&&!W),handleClose:Hs({blockPointerEvents:!O}),mouseOnly:!0,move:!1,restMs:P.type===void 0?c:void 0,delay:{close:p},triggerElementRef:k,externalTree:N,isActiveTrigger:T,isClosing:()=>f.select("transitionStatus")==="ending"}),B=aD(C,f.select("lastOpenChangeReason")),Y=Ji(v,{enabled:!x&&P.type!=="context-menu",event:C&&O?"click":"mousedown",toggle:!0,ignoreMouse:!1,stickIfOpen:P.type===void 0?B:!1}),q=wp(v,{enabled:!x&&L}),J=rD({open:C,enabled:O,mouseDownAction:"open"}),Te=l.useMemo(()=>Tt(q.reference,Y.reference),[q.reference,Y.reference]),Re=f.useState("triggerProps",W),{preFocusGuardRef:K,handlePreFocusGuardFocus:de,handleFocusTargetFocus:le}=af(f,k),De={disabled:x,open:C},me=[A,o,H,R,k],fe=[Te,_??Je,Re,{"aria-haspopup":"menu","aria-controls":S,id:w,onMouseDown:Z=>{if(f.select("open"))return;Q.start(200,()=>{f.context.allowMouseUpTriggerRef.current=!0}),Le(Z.currentTarget).addEventListener("mouseup",M,{once:!0})}},O?{role:"menuitem"}:{},J,g,F],Se=st("button",e,{enabled:!O,stateAttributesMapping:ii,state:De,ref:me,props:fe});return O?u.jsx(nD,{tag:"button",render:n,className:r,style:s,state:De,refs:me,props:fe,stateAttributesMapping:ii}):C?u.jsxs(l.Fragment,{children:[u.jsx(Fo,{ref:K,onFocus:de},`${w}-pre-focus-guard`),u.jsx(l.Fragment,{children:Se},w),u.jsx(Fo,{ref:f.context.triggerFocusTargetRef,onFocus:le},`${w}-post-focus-guard`)]}):u.jsx(l.Fragment,{children:Se},w)});function aD(t,e){const o=gt(),[n,r]=l.useState(!1);return ue(()=>{t&&e==="trigger-hover"?(r(!0),o.start(Gu,()=>{r(!1)})):t||(o.clear(),r(!1))},[t,e,o]),n}function iD(){const t=Qs(!0),e=fo(!0),o=tf();return l.useMemo(()=>o?{type:"menubar",context:o}:t&&!e?{type:"context-menu",context:t}:{type:void 0},[t,e,o])}const lD=l.forwardRef(function(e,o){const{render:n,className:r,style:s,label:a,id:i,nativeButton:m=!1,openOnHover:d=!0,delay:c=100,closeDelay:p=0,disabled:h=!1,...y}=e,g=Pl(),b=Dl(),{store:f}=fo(),w=yn(i),T=f.useState("open"),v=f.useState("floatingRootContext"),C=f.useState("floatingTreeRoot"),S=f.useState("triggerPopupId",w),k=gp(w,f),P=l.useCallback(Y=>{const q=k(Y);return Y!==null&&f.select("open")&&f.select("activeTriggerId")==null&&f.update({activeTriggerId:w,activeTriggerElement:Y,closeDelay:p}),q},[k,p,f,w]),D=l.useRef(null),I=l.useCallback(Y=>{D.current=Y,f.set("activeTriggerElement",Y)},[f]),N=nf();if(!(N!=null&&N.parentMenu))throw new Error(rt(37));f.useSyncedValue("closeDelay",p);const z=N.parentMenu,U=z.useState("itemProps"),R=z.useState("isActive",g.index),W=l.useMemo(()=>({type:"submenu-trigger",setActive(){z.set("activeIndex",g.index)}}),[z,g.index]),O=f.useState("disabled"),j=h||O,{getItemProps:x,itemRef:F}=Ym({closeOnClick:!1,disabled:j,highlighted:R,id:w,store:f,typingRef:z.context.typingRef,nativeButton:m,itemMetadata:W,nodeId:b==null?void 0:b.context.nodeId}),H=f.useState("hoverEnabled"),A=z.useState("allowMouseEnter"),Q=Ws(v,{enabled:H&&d&&!j,handleClose:Hs({blockPointerEvents:!0}),mouseOnly:!0,move:!0,restMs:c,delay:A?{open:c,close:p}:0,triggerElementRef:D,externalTree:C,isClosing:()=>f.select("transitionStatus")==="ending"}),L=Ji(v,{enabled:!j,event:"mousedown",toggle:!d,ignoreMouse:d,stickIfOpen:!1}).reference??Je,V=f.useState("triggerProps",!0);return delete V.id,st("div",e,{state:{disabled:j,highlighted:R,open:T},stateAttributesMapping:al,props:[L,Q,V,U,{"aria-controls":S,tabIndex:T||R?0:-1,onBlur(){R&&z.set("activeIndex",null)}},y,x],ref:[o,g.ref,F,P,I]})});function El({...t}){return u.jsx(rf,{"data-slot":"dropdown-menu",...t})}function Al({...t}){return u.jsx(sD,{"data-slot":"dropdown-menu-trigger",...t})}function Xs({align:t="start",alignOffset:e=0,side:o="bottom",sideOffset:n=4,className:r,...s}){return u.jsx(qx,{children:u.jsx(Yx,{className:"isolate z-50 outline-none",align:t,alignOffset:e,side:o,sideOffset:n,children:u.jsx(Vx,{"data-slot":"dropdown-menu-content",className:Ie("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95",r),...s})})})}function fi({className:t,inset:e,variant:o="default",...n}){return u.jsx(_x,{"data-slot":"dropdown-menu-item","data-inset":e,"data-variant":o,className:Ie("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",t),...n})}function v0({...t}){return u.jsx(eD,{"data-slot":"dropdown-menu-sub",...t})}function C0({className:t,inset:e,children:o,...n}){return u.jsxs(lD,{"data-slot":"dropdown-menu-sub-trigger","data-inset":e,className:Ie("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...n,children:[o,u.jsx(Hd,{className:"ms-auto"})]})}function T0({align:t="start",alignOffset:e=-3,side:o="right",sideOffset:n=0,className:r,...s}){return u.jsx(Xs,{"data-slot":"dropdown-menu-sub-content",className:Ie("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",r),align:t,alignOffset:e,side:o,sideOffset:n,...s})}const lf="session";function cd(t){const e=location.protocol==="https:"?"; Secure":"";document.cookie=`${lf}=${t}; path=/; max-age=${3600*24*7}; SameSite=Lax${e}`}function cD(){document.cookie=`${lf}=; path=/; max-age=0`}const Xo=ml()(fl((t,e)=>({user:null,accessToken:null,refreshToken:null,setTokens:(o,n)=>{cd(o),t({accessToken:o,refreshToken:n})},setUser:o=>t({user:o}),login:(o,n,r)=>{cd(n),t({user:o,accessToken:n,refreshToken:r})},logout:()=>{cD(),t({user:null,accessToken:null,refreshToken:null})},isLoggedIn:()=>e().accessToken!==null,isAdmin:()=>{var o;return((o=e().user)==null?void 0:o.roles.includes("admin"))??!1},isAuthor:()=>{var n;const o=((n=e().user)==null?void 0:n.roles)??[];return o.includes("admin")||o.includes("author")}}),{name:"auth-storage"})),gn=ml()(fl(t=>({currentTenantId:null,builtinTenantable:!1,setTenant:e=>t({currentTenantId:e}),clearTenant:()=>t({currentTenantId:null}),setBuiltinTenantable:e=>t({builtinTenantable:e})}),{name:"tenant-storage",partialize:t=>({currentTenantId:t.currentTenantId})}));class eo extends Error{constructor(e,o,n=400,r="",s={},a=!1,i=null){super(o),this.name="SDKError",this.code=e,this.status=n,this.url=r,this.response=s,this.isAbort=a,this.originalError=i}}function Xe(t){if(!t)return;const e={};for(const[o,n]of Object.entries(t))n!=null&&(e[o]=String(n));return e}class dD{constructor(e,o){this._apiStyle="restful",this._tenantId=null,this._refreshPromise=null,this._beforeSend=null,this._afterSend=null,this._requestControllers=new Map,this._locale=null,this.baseUrl=e,this.authStore=o}get locale(){return this._locale}setLocale(e){this._locale=e}get apiStyle(){return this._apiStyle}set apiStyle(e){this._apiStyle=e}get isRestful(){return this._apiStyle==="restful"}get tenantId(){return this._tenantId}setTenantId(e){this._tenantId=e}set beforeSend(e){this._beforeSend=e}set afterSend(e){this._afterSend=e}cancelRequest(e){var o;(o=this._requestControllers.get(e))==null||o.abort(),this._requestControllers.delete(e)}cancelAllRequests(){for(const e of this._requestControllers.values())e.abort();this._requestControllers.clear()}pathForCreate(e){return this._apiStyle==="restful"?e:`${e}/create`}methodForCreate(){return"POST"}pathForUpdate(e,o){return this._apiStyle==="restful"?`${e}/${o}`:`${e}/${o}/update`}methodForUpdate(){return this._apiStyle==="restful"?"PUT":"POST"}pathForDelete(e,o){return this._apiStyle==="restful"?`${e}/${o}`:`${e}/${o}/delete`}methodForDelete(){return this._apiStyle==="restful"?"DELETE":"POST"}async request(e,o={}){const{method:n="GET",body:r,query:s,headers:a,signal:i,fetch:m,requestKey:d}=o;let c=`${this.baseUrl}${e}`;if(s){const v=new URLSearchParams(s).toString();v&&(c+=(c.includes("?")?"&":"?")+v)}const p=new Headers;r!=null&&!(r instanceof FormData)&&p.set("Content-Type","application/json");const h=this.authStore.token;if(h&&p.set("Authorization",`Bearer ${h}`),this._tenantId&&p.set("X-Tenant-ID",this._tenantId),this._locale&&p.set("Accept-Language",this._locale),a)for(const[v,C]of Object.entries(a))p.set(v,C);let y=i;if(d){this.cancelRequest(d);const v=new AbortController;this._requestControllers.set(d,v),i&&i.addEventListener("abort",()=>v.abort()),y=v.signal}let g={method:n,headers:p,body:r instanceof FormData?r:r!==void 0?JSON.stringify(r):void 0,signal:y};if(this._beforeSend){const v=await this._beforeSend(c,g);c=v.url,g={...g,...v.options}}const b=m??fetch;let f;try{f=await b(c,g)}catch(v){throw d&&this._requestControllers.delete(d),new eo(0,v instanceof Error?v.message:"Network request failed",0,c,{},v instanceof DOMException&&v.name==="AbortError",v instanceof Error?v:null)}if(f.status===401&&this.authStore.isAuthenticated){const v=g.headers instanceof Headers?g.headers.get("Authorization"):null;if(!((v==null?void 0:v.startsWith("Bearer rf_"))??!1)){const S=await this._refresh();if(S){const k=new Headers(g.headers);k.set("Authorization",`Bearer ${S}`),g={...g,headers:k},f=await b(c,g)}}}d&&this._requestControllers.delete(d);let w;try{w=await f.json()}catch(v){throw new eo(0,"Failed to parse response",f.status,c,{},!1,v instanceof Error?v:null)}if(w.code!==0)throw new eo(w.code??0,w.message??"Unknown error",f.status,c,w);let T=w.data;return this._afterSend&&(T=await this._afterSend(f,T)),T}async get(e,o){return this.request(e,{...o,method:"GET"})}async post(e,o,n){return this.request(e,{...n,method:"POST",body:o})}async put(e,o,n){return this.request(e,{...n,method:"PUT",body:o})}async del(e,o){return this.request(e,{...o,method:"DELETE"})}async _refresh(){return this._refreshPromise?this._refreshPromise:(this._refreshPromise=(async()=>{try{const e=this.authStore.refreshToken;if(!e)return null;const n=await(await fetch(`${this.baseUrl}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})})).json();if(n.code!==0)return this.authStore.clear(),null;const r=n.data;return this.authStore.save(r),r.access_token}catch{return this.authStore.clear(),null}finally{this._refreshPromise=null}})(),this._refreshPromise)}}class cf{constructor(){this._token=null,this._refreshToken=null,this._user=null,this._listeners=new Set}get token(){return this._token}get refreshToken(){return this._refreshToken}get user(){return this._user}get isAuthenticated(){return!!this._token}save(e){this._token=e.access_token,this._refreshToken=e.refresh_token,this._user=e.user,this._notify()}clear(){this._token=null,this._refreshToken=null,this._user=null,this._notify()}onChange(e,o=!1){return this._listeners.add(e),o&&e(this._token,this._user),()=>{this._listeners.delete(e)}}exportToStorage(){return JSON.stringify({token:this._token,refreshToken:this._refreshToken,user:this._user})}importFromStorage(e){try{const o=JSON.parse(e);this._token=o.token??null,this._refreshToken=o.refreshToken??null,this._user=o.user??null}catch{}}_notify(){for(const e of this._listeners)e(this._token,this._user)}}class uD extends cf{constructor(e="raisfast_auth",o){super(),this._storageKey=e,this._storage=o??(typeof window<"u"?window.localStorage:null),this._load()}save(e){super.save(e),this._persist()}clear(){super.clear(),this._persist()}_persist(){var e;try{(e=this._storage)==null||e.setItem(this._storageKey,this.exportToStorage())}catch{}}_load(){var e;try{const o=(e=this._storage)==null?void 0:e.getItem(this._storageKey);o&&this.importFromStorage(o)}catch{}}}class pD{constructor(e,o){this.http=e,this.store=o}get token(){return this.store.token}get user(){return this.store.user}get isAuthenticated(){return this.store.isAuthenticated}async login(e,o,n){const r=await this.http.post("/auth/login",{email:e,password:o},n);return this.store.save(r),r}async register(e,o){const n=await this.http.post("/auth/register",e,o);return this.store.save(n),n}async refresh(e){const o=this.store.refreshToken;if(!o)return null;const n=await this.http.post("/auth/refresh",{refresh_token:o},e);return this.store.save(n),n}async logout(e){try{await this.http.post("/auth/logout",void 0,e)}finally{this.store.clear()}}async getConfig(e){return this.http.get("/auth/config",e)}async getMe(e){return this.http.get("/users/me",e)}async updateMe(e,o){return this.http.request(this.http.pathForUpdate("/users","me"),{...o,method:this.http.methodForUpdate(),body:e})}async changePassword(e,o){await this.http.request(this.http.pathForUpdate("/users","me/password"),{...o,method:this.http.methodForUpdate(),body:e})}async requestPasswordReset(e,o){await this.http.post("/auth/forgot-password",{email:e},o)}async confirmPasswordReset(e,o){await this.http.post("/auth/reset-password",e,o)}async setPassword(e,o){await this.http.post("/auth/set-password",e,o)}async verifyEmail(e,o){await this.http.post("/auth/verify-email",e,o)}async resendVerification(e,o){await this.http.post("/auth/resend-verification",{email:e},o)}async sendSmsCode(e,o,n){await this.http.post("/auth/sms/send",{phone:e,purpose:o},n)}async verifySms(e,o){const n=await this.http.post("/auth/sms/verify",e,o);return this.store.save(n),n}async bindPhone(e,o){await this.http.post("/auth/phone/bind",e,o)}getOAuthRedirectURL(e){return`${this.http.baseUrl}/auth/oauth/${e}`}async listOAuthProviders(e){return this.http.get("/auth/oauth/providers",e)}async authWithOAuth(e,o){const n=await this.http.get(`/auth/oauth/${e.provider}/callback`,{...o,query:{code:e.code,redirect_url:e.redirect_url}});return this.store.save(n),n}async listOAuthBindings(e){return this.http.get("/auth/oauth/bindings",e)}async unbindOAuth(e,o){await this.http.request(this.http.pathForDelete("/auth/oauth",`${e}/unbind`),{...o,method:this.http.methodForDelete()})}async listCredentials(e){return this.http.get("/auth/credentials",e)}async bindEmail(e,o){await this.http.post("/auth/credentials/bind-email",e,o)}async deleteCredential(e,o){await this.http.request(this.http.pathForDelete("/auth/credentials",String(e)),{...o,method:this.http.methodForDelete()})}}class mD{constructor(e){this.http=e}async getMe(e){return this.http.get("/users/me",e)}async updateMe(e,o){return this.http.request(this.http.pathForUpdate("/users","me"),{...o,method:this.http.methodForUpdate(),body:e})}async changePassword(e,o){await this.http.request(this.http.pathForUpdate("/users","me/password"),{...o,method:this.http.methodForUpdate(),body:e})}async getUser(e,o){return this.http.get(`/users/${e}`,o)}async listUsers(e=1,o=25,n){return this.http.get("/users",{...n,query:{page:String(e),page_size:String(o)}})}async updateUserRoles(e,o,n){return this.http.request(this.http.pathForUpdate("/users",`${e}/role`),{...n,method:this.http.methodForUpdate(),body:{roles:o}})}}class fD{constructor(e){this.http=e}async list(e,o){return this.http.get("/posts",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/posts/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/posts"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/posts",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/posts",e),{...o,method:this.http.methodForDelete()})}}class hD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/pages",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/pages/${e}`,o)}async sitemap(e){return this.http.get("/pages/sitemap",e)}}class gD{constructor(e){this.http=e}async list(e,o=1,n=25,r){return this.http.get(`/posts/${e}/comments`,{...r,query:{page:String(o),page_size:String(n)}})}async create(e,o,n){var a;const s=((a=this.http.authStore)==null?void 0:a.isAuthenticated)?`/posts/${e}/comments/authed`:`/posts/${e}/comments`;return this.http.post(s,o,n)}async listAll(e=1,o=25,n){return this.http.get("/comments",{...n,query:{page:String(e),page_size:String(o)}})}async updateStatus(e,o,n){await this.http.request(this.http.pathForUpdate("/comments/status",e),{...n,method:this.http.methodForUpdate(),body:{status:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/comments",e),{...o,method:this.http.methodForDelete()})}}class bD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/categories",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/categories/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/categories",e),{...o,method:this.http.methodForDelete()})}}class yD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/tags",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/tags/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/tags"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/tags",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/tags",e),{...o,method:this.http.methodForDelete()})}}class wD{constructor(e){this.http=e}async upload(e,o){const n=new FormData;return n.append("file",e),this.http.request("/media/upload",{...o,method:"POST",body:n})}async list(e=1,o=25,n){return this.http.get("/media",{...n,query:{page:String(e),page_size:String(o)}})}async stats(e){return this.http.get("/media/stats",e)}async delete(e,o){await this.http.request(this.http.pathForDelete("/media",e),{...o,method:this.http.methodForDelete()})}getFileURL(e,o,n){const r=this.http.baseUrl.replace("/api/v1",""),s=e[o];if(typeof s!="string")return"";if(s.startsWith("http"))return s;let a=`${r}/uploads/${s}`;return n!=null&&n.thumb&&(a+=`?thumb=${encodeURIComponent(n.thumb)}`),a}}class vD{constructor(e){this.http=e}async check(e){return this.http.get("/health",e)}async liveness(e){const o=this.http.baseUrl.replace(/\/api\/v\d+\/?$/,"");return(await fetch(`${o}/healthz`)).json()}async readiness(e){const o=this.http.baseUrl.replace(/\/api\/v\d+\/?$/,"");return(await fetch(`${o}/readyz`)).json()}}class CD{constructor(e){this.http=e}async list(e){return this.http.get("/wallets",e)}async get(e,o){return this.http.get(`/wallets/${e}`,o)}async listTransactions(e,o,n){return this.http.get(`/wallets/${e}/transactions`,{...n,query:Xe(o)})}async listAllTransactions(e,o){return this.http.get("/wallets/transactions",{...o,query:Xe(e)})}}class TD{constructor(e){this.baseUrl=e}subscribe(e){const o=e?`${this.baseUrl}/events?filter=${encodeURIComponent(e)}`:`${this.baseUrl}/events`;return new EventSource(o)}}class kD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/orders",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/orders/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/orders"),{...o,method:this.http.methodForCreate(),body:e})}async cancel(e,o){await this.http.request(this.http.pathForUpdate("/orders",e),{...o,method:this.http.methodForUpdate()})}async confirmReceipt(e,o){await this.http.post(`/orders/${e}/confirm`,void 0,o)}}class SD{constructor(e){this.http=e}async listAvailableChannels(e,o){return this.http.get("/payment/channels/available",{...o,query:Xe(e)})}async listOrders(e=1,o=25,n){return this.http.get("/payment/orders",{...n,query:{page:String(e),page_size:String(o)}})}async createOrder(e,o){return this.http.request(this.http.pathForCreate("/payment/orders"),{...o,method:this.http.methodForCreate(),body:e})}async getOrder(e,o){return this.http.get(`/payment/orders/${e}`,o)}async cancelOrder(e,o){await this.http.post(`/payment/orders/${e}/cancel`,void 0,o)}async listTransactions(e,o){return this.http.get(`/payment/orders/${e}/transactions`,o)}async listRefunds(e,o){return this.http.get(`/payment/orders/${e}/refunds`,o)}}class xD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/products",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/products/${e}`,o)}}class DD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/product-categories",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/product-categories/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/product-categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/product-categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/product-categories",e),{...o,method:this.http.methodForDelete()})}}class PD{constructor(e){this.http=e}async list(e,o=1,n=25,r){return this.http.get(`/products/${e}/comments`,{...r,query:{page:String(o),page_size:String(n)}})}async getStats(e,o){return this.http.get(`/products/${e}/comments/stats`,o)}async create(e,o,n){return this.http.request(this.http.pathForCreate(`/products/${e}/comments`),{...n,method:this.http.methodForCreate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/product_comments",e),{...o,method:this.http.methodForDelete()})}}class RD{constructor(e){this.http=e}async list(e,o){return this.http.get(`/products/${e}/variants`,o)}}class ED{constructor(e){this.http=e}async list(e){return this.http.get("/cart",e)}async add(e,o){await this.http.request(this.http.pathForCreate("/cart"),{...o,method:this.http.methodForCreate(),body:e})}async updateItem(e,o,n){await this.http.request(this.http.pathForUpdate("/cart",e),{...n,method:this.http.methodForUpdate(),body:o})}async removeItem(e,o){await this.http.request(this.http.pathForDelete("/cart",e),{...o,method:this.http.methodForDelete()})}async clear(e){await this.http.request("/cart",{...e,method:"DELETE"})}async checkout(e){return this.http.post("/cart/checkout",void 0,e)}}class AD{constructor(e){this.http=e}async list(e=1,o=20,n){return this.http.get("/favorites",{...n,query:{page:String(e),page_size:String(o)}})}async status(e,o){return this.http.get(`/favorites/${e}`,o)}async add(e,o){return this.http.post(`/favorites/${e}`,void 0,o)}async remove(e,o){return this.http.del(`/favorites/${e}`,o)}}class ND{constructor(e){this.http=e}async list(e){return this.http.get("/user/addresses",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/user/addresses"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/user/addresses",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/user/addresses",e),{...o,method:this.http.methodForDelete()})}}class ID{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/audit",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/audit/${e}`,o)}}class OD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/categories",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/categories",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/categories/batch",e,o)}}class FD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/comments",{...o,query:Xe(e)})}async updateStatus(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/comments/status",e),{...n,method:this.http.methodForUpdate(),body:{status:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/comments",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/comments/batch",e,o)}}class MD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/content-types",e)}async get(e,o){return this.http.get(`/admin/content-types/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/content-types"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/content-types",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/content-types",e),{...o,method:this.http.methodForDelete()})}}class UD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/coupons",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/coupons/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/coupons"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/coupons",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/coupons",e),{...o,method:this.http.methodForDelete()})}}class LD{constructor(e){this.http=e}async listHandlers(e){return await this.http.get("/admin/cron-handlers",e)}async list(e,o){return this.http.get("/admin/crons",{...o,query:Xe(e)})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/crons"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/crons/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/crons",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/crons",e),{...o,method:this.http.methodForDelete()})}async toggle(e,o,n){return this.http.post(`/admin/crons/${e}/toggle`,{enabled:o},n)}async listLogs(e,o){return this.http.get("/admin/crons/logs",{...o,query:Xe(e)})}async cleanupLogs(e){await this.http.post("/admin/crons/logs/cleanup",{},e)}async batch(e,o){return this.http.post("/admin/crons/batch",e,o)}}class jD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/currencies",e)}async get(e,o){return this.http.get(`/admin/currencies/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/currencies"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/currencies",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/currencies",e),{...o,method:this.http.methodForDelete()})}}class _D{constructor(e){this.http=e}async listChannels(e,o){return this.http.get("/admin/integration/channels",{...o,query:Xe(e)})}async getChannel(e,o){return this.http.get(`/admin/integration/channels/${e}`,o)}async createChannel(e,o){return this.http.post("/admin/integration/channels",e,o)}async updateChannel(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/integration/channels",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteChannel(e,o){await this.http.request(this.http.pathForDelete("/admin/integration/channels",e),{...o,method:this.http.methodForDelete()})}async channelsHealth(e){return this.http.get("/admin/integration/channels/health",e)}async channelHealth(e,o){return this.http.get(`/admin/integration/channels/${e}/health`,o)}async testMapping(e,o,n){return this.http.post(`/admin/integration/channels/${e}/test-mapping`,o,n)}async testConnection(e,o){return this.http.post(`/admin/integration/channels/${e}/test-connection`,void 0,o)}async listReceipts(e,o){return this.http.get("/admin/integration/receipts",{...o,query:Xe(e)})}async getReceipt(e,o){return this.http.get(`/admin/integration/receipts/${e}`,o)}async getTrace(e,o){return this.http.get(`/admin/integration/receipts/${e}/trace`,o)}async replay(e,o,n){return this.http.post(`/admin/integration/receipts/${e}/replay`,o??{},n)}async listApiClients(e){return this.http.get("/admin/integration/api-clients",e)}async getApiClient(e,o){return this.http.get(`/admin/integration/api-clients/${e}`,o)}async createApiClient(e,o){return this.http.post("/admin/integration/api-clients",e,o)}async updateApiClient(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/integration/api-clients",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteApiClient(e,o){await this.http.request(this.http.pathForDelete("/admin/integration/api-clients",e),{...o,method:this.http.methodForDelete()})}async testCall(e,o,n){return this.http.post(`/admin/integration/api-clients/${e}/test-call`,o,n)}async listEgressLog(e,o){return this.http.get("/admin/integration/egress-log",{...o,query:Xe(e)})}}class zD{constructor(e){this.http=e}async upload(e,o){const n=new FormData;return n.append("file",e),this.http.request("/admin/media/upload",{...o,method:"POST",body:n})}async list(e=1,o=25,n){return this.http.get("/admin/media",{...n,query:{page:String(e),page_size:String(o)}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/media",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/media/batch",e,o)}}class BD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/options",e)}async get(e,o){return this.http.get(`/admin/options/${e}`,o)}async set(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/options",e),{...n,method:this.http.methodForUpdate(),body:{value:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/options",e),{...o,method:this.http.methodForDelete()})}async batchUpdate(e,o){await this.http.request(this.http.pathForUpdate("/admin/options",""),{...o,method:this.http.methodForUpdate(),body:{options:e}})}async getPublic(e){return this.http.get("/options/public",e)}}class VD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/orders",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/orders/${e}`,o)}async pay(e,o){await this.http.post(`/admin/orders/${e}/pay`,void 0,o)}async ship(e,o,n){await this.http.post(`/admin/orders/${e}/ship`,o,n)}async cancel(e,o){await this.http.post(`/admin/orders/${e}/cancel`,void 0,o)}async refund(e,o){await this.http.post(`/admin/orders/${e}/refund`,void 0,o)}async updateRemark(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/orders",`${e}/remark`),{...n,method:this.http.methodForUpdate(),body:o})}async stats(e){return this.http.get("/admin/orders/stats",e)}}class WD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/pages",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/pages/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/pages"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/pages",e),{...n,method:this.http.methodForUpdate(),body:o})}async updateStatus(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/pages/status",e),{...n,method:this.http.methodForUpdate(),body:{status:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/pages",e),{...o,method:this.http.methodForDelete()})}async reorder(e,o){await this.http.request(this.http.pathForUpdate("/admin/pages","reorder"),{...o,method:this.http.methodForUpdate(),body:{items:e}})}async batch(e,o){return this.http.post("/admin/pages/batch",e,o)}}class qD{constructor(e){this.http=e}async listChannels(e=1,o=25,n){return this.http.get("/admin/payment/channels",{...n,query:{page:String(e),page_size:String(o)}})}async getChannel(e,o){return this.http.get(`/admin/payment/channels/${e}`,o)}async createChannel(e,o){return this.http.request(this.http.pathForCreate("/admin/payment/channels"),{...o,method:this.http.methodForCreate(),body:e})}async updateChannel(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/payment/channels",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteChannel(e,o){await this.http.request(this.http.pathForDelete("/admin/payment/channels",e),{...o,method:this.http.methodForDelete()})}async listOrders(e,o){return this.http.get("/admin/payment/orders",{...o,query:Xe(e)})}async getOrder(e,o){return this.http.get(`/admin/payment/orders/${e}`,o)}async refundOrder(e,o,n){return this.http.post(`/admin/payment/orders/${e}/refund`,o,n)}async listTransactions(e,o){return this.http.get("/admin/payment/transactions",{...o,query:Xe(e)})}async listRefunds(e,o){return this.http.get("/admin/payment/refunds",{...o,query:Xe(e)})}}class HD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/plugins",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/plugins/${e}`,o)}async enable(e,o){await this.http.post(`/admin/plugins/${e}/enable`,{},o)}async disable(e,o){await this.http.post(`/admin/plugins/${e}/disable`,{},o)}async reload(e,o){await this.http.post(`/admin/plugins/${e}/reload`,{},o)}async unload(e,o){await this.http.request(this.http.pathForDelete("/admin/plugins",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/plugins/batch",e,o)}}class $D{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/posts",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/posts/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/posts"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/posts",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/posts",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/posts/batch",e,o)}}class KD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/products",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/products/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/products"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/products",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/products",e),{...o,method:this.http.methodForDelete()})}}class JD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/product-categories",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/product-categories/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/product-categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/product-categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/product-categories",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/product-categories/batch",e,o)}}class GD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/product_comments",{...n,query:{page:String(e),page_size:String(o)}})}async updateStatus(e,o,n){return this.http.request(`/admin/product_comments/${e}/status`,{...n,method:"PUT",body:o})}async reply(e,o,n){return this.http.request(`/admin/product_comments/${e}/reply`,{...n,method:"PUT",body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/product_comments",e),{...o,method:this.http.methodForDelete()})}}class YD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/product-variants",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/product-variants"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/product-variants",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/product-variants",e),{...o,method:this.http.methodForDelete()})}}class QD{constructor(e){this.http=e}async listRoles(e){return this.http.get("/admin/rbac/roles",e)}async createRole(e,o){return this.http.request(this.http.pathForCreate("/admin/rbac/roles"),{...o,method:this.http.methodForCreate(),body:e})}async updateRole(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/rbac/roles",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteRole(e,o){await this.http.request(this.http.pathForDelete("/admin/rbac/roles",e),{...o,method:this.http.methodForDelete()})}async batchRoles(e,o){return this.http.post("/admin/rbac/roles/batch",e,o)}async getPermissions(e,o){return this.http.get(`/admin/rbac/roles/${e}/permissions`,o)}async setPermissions(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/rbac/roles",`${e}/permissions`),{...n,method:this.http.methodForUpdate(),body:o})}}class XD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/reusable-blocks",e)}async get(e,o){return this.http.get(`/admin/reusable-blocks/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/reusable-blocks"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/reusable-blocks",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/reusable-blocks",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/reusable-blocks/batch",e,o)}}class ZD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/shipping-templates",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/shipping-templates/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/shipping-templates"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/shipping-templates",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/shipping-templates",e),{...o,method:this.http.methodForDelete()})}async calculate(e,o){return this.http.request("/admin/shipping-templates/calculate",{...o,method:"POST",body:e})}}class eP{constructor(e){this.http=e}async overview(e){return this.http.get("/admin/stats",e)}async content(e,o){return this.http.get(`/admin/stats/content/${e}`,o)}async trends(e,o=30,n){return this.http.get("/admin/stats/trends",{...n,query:Xe({table:e,days:o})})}}class tP{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/tags",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/tags"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/tags",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/tags",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/tags/batch",e,o)}}class oP{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/tenants",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/tenants/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/tenants"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/tenants",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/tenants",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/tenants/batch",e,o)}}class nP{constructor(e){this.http=e}async list(e){return this.http.get("/tokens",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/tokens"),{...o,method:this.http.methodForCreate(),body:e})}async delete(e,o){await this.http.request(this.http.pathForDelete("/tokens",e),{...o,method:this.http.methodForDelete()})}}class rP{constructor(e){this.http=e}async list(e,o){return this.http.get(`/admin/users/${e}/addresses`,o)}}class sP{constructor(e){this.http=e}async create(e,o){return this.http.post("/admin/users",e,o)}async list(e=1,o=25,n){return this.http.get("/admin/users",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/users/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/users",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/users",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/users/batch",e,o)}}class aP{constructor(e){this.http=e}async listWallets(e,o){return this.http.get("/admin/wallets",{...o,query:Xe(e)})}async listTransactions(e,o){return this.http.get("/admin/wallets/transactions",{...o,query:Xe(e)})}async credit(e,o){return this.http.post("/admin/wallets/credit",e,o)}async debit(e,o){return this.http.post("/admin/wallets/debit",e,o)}async userTransactions(e,o,n){return this.http.get(`/admin/wallets/${e}/transactions`,{...n,query:Xe(o)})}async userCurrencyTransactions(e,o,n,r){return this.http.get(`/admin/wallets/${e}/${o}/transactions`,{...r,query:Xe(n)})}async reversal(e,o,n){return this.http.post(`/admin/wallets/${e}/reversal`,o,n)}}class iP{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/webhooks",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/webhooks"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/webhooks/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/webhooks",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/webhooks",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/webhooks/batch",e,o)}}class lP{constructor(e){this.http=e}async list(e){return this.http.get("/admin/workflows",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/workflows"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/workflows/${e}`,o)}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/workflows",e),{...o,method:this.http.methodForDelete()})}async start(e,o,n){return this.http.post(`/admin/workflows/${e}/start`,o??{},n)}async listInstances(e=1,o=25,n){return this.http.get("/admin/workflows/instances",{...n,query:{page:String(e),page_size:String(o)}})}async getInstance(e,o){return this.http.get(`/admin/workflows/instances/${e}`,o)}async executeStep(e,o,n){return this.http.post(`/admin/workflows/instances/${e}/execute`,o,n)}async cancelInstance(e,o){await this.http.post(`/admin/workflows/instances/${e}/cancel`,{},o)}async getStepLogs(e,o){return this.http.get(`/admin/workflows/instances/${e}/logs`,o)}}class cP{constructor(e){this.http=e,this.users=new sP(e),this.posts=new $D(e),this.pages=new WD(e),this.comments=new FD(e),this.categories=new OD(e),this.tags=new tP(e),this.media=new zD(e),this.reusableBlocks=new XD(e),this.wallets=new aP(e),this.currencies=new jD(e),this.plugins=new HD(e),this.contentTypes=new MD(e),this.tenants=new oP(e),this.rbac=new QD(e),this.options=new BD(e),this.webhooks=new iP(e),this.audit=new ID(e),this.crons=new LD(e),this.tokens=new nP(e),this.workflows=new lP(e),this.stats=new eP(e),this.orders=new VD(e),this.payment=new qD(e),this.products=new KD(e),this.productCategories=new JD(e),this.productVariants=new YD(e),this.productComments=new GD(e),this.coupons=new UD(e),this.shippingTemplates=new ZD(e),this.userAddresses=new rP(e),this.integration=new _D(e)}async listRoutes(e){return this.http.get("/routes",e)}async listResources(e){return this.http.get("/admin/resources",e)}}class dd{constructor(e,o,n=!1,r){this.http=e,this.name=o,this.apiToken=r,this.prefix=n?`/admin/cms/${o}`:`/cms/${o}`}get authHeaders(){return this.apiToken?{Authorization:`Bearer ${this.apiToken}`}:void 0}withAuth(e){return this.apiToken?{...e??{},headers:{...this.authHeaders,...e==null?void 0:e.headers}}:e}async getList(e=1,o=25,n){const r={page:String(e),page_size:String(o)};if(n!=null&&n.sort&&(r.sort=n.sort),n!=null&&n.filter&&(r.filter=n.filter),n!=null&&n.filterCond)for(const[s,a]of Object.entries(n.filterCond))a!=null&&(r[s]=Array.isArray(a)?a.join(","):String(a));return n!=null&&n.search&&(r.search=n.search),n!=null&&n.fields&&(r.fields=n.fields),n!=null&&n.status&&(r.status=n.status),n!=null&&n.expand&&(r.expand=n.expand),this.http.get(this.prefix,{...this.withAuth(n),query:r})}async getFullList(e){const o=[];let n=1;for(;;){const r=await this.getList(n,200,e);if(o.push(...r.items),o.length>=r.total)break;n++}return o}async getOne(e,o){return this.http.get(`${this.prefix}/${e}`,this.withAuth(o))}async getFirstListItem(e,o){const n=await this.getList(1,1,{...o,filter:e});if(n.items.length===0)throw new eo(404,`No item found matching filter: ${e}`,404);return n.items[0]}async create(e,o){return this.http.request(this.http.pathForCreate(this.prefix),{...this.withAuth(o),method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate(this.prefix,e),{...this.withAuth(n),method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete(this.prefix,e),{...this.withAuth(o),method:this.http.methodForDelete()})}async upload(e,o,n="file",r){const s=new FormData;return s.append(n,o),this.http.request(`${this.prefix}/${e}`,{...this.withAuth(r),method:"POST",body:s})}async listRevisions(e,o=1,n=25,r){return this.http.get(`/admin/cms/${this.name}/${e}/revisions`,{...this.withAuth(r),query:{page:String(o),page_size:String(n)}})}async getRevision(e,o,n){return this.http.get(`/admin/cms/${this.name}/${e}/revisions/${o}`,this.withAuth(n))}async restoreRevision(e,o,n){return this.http.post(`/admin/cms/${this.name}/${e}/revisions/${o}/restore`,{},this.withAuth(n))}async diffRevisions(e,o,n,r){return this.http.get(`/admin/cms/${this.name}/${e}/revisions/${o}/diff/${n}`,this.withAuth(r))}}class dP{constructor(e,o){this.authStore=(o==null?void 0:o.authStore)??new uD,this.http=new dD(e,this.authStore),this.auth=new pD(this.http,this.authStore),this.admin=new cP(this.http),this.users=new mD(this.http),this.media=new wD(this.http),this.health=new vD(this.http),this.posts=new fD(this.http),this.categories=new bD(this.http),this.tags=new yD(this.http),this.comments=new gD(this.http),this.pages=new hD(this.http),this.wallets=new CD(this.http),this.events=new TD(this.http.baseUrl),this.orders=new kD(this.http),this.payment=new SD(this.http),this.products=new xD(this.http),this.productCategories=new DD(this.http),this.productVariants=new RD(this.http),this.productComments=new PD(this.http),this.userAddresses=new ND(this.http),this.cart=new ED(this.http),this.productFavorites=new AD(this.http)}async init(){var e;try{const n=await(await fetch(`${this.http.baseUrl}/info`)).json();n.code===0&&((e=n.data)!=null&&e.api_style)&&(this.http.apiStyle=n.data.api_style)}catch{}}ct(e,o){return new dd(this.http,e,!1,o)}adminCt(e,o){return new dd(this.http,e,!0,o)}setTenantId(e){this.http.setTenantId(e)}setLocale(e){this.http.setLocale(e)}set beforeSend(e){this.http.beforeSend=e}set afterSend(e){this.http.afterSend=e}cancelRequest(e){this.http.cancelRequest(e)}cancelAllRequests(){this.http.cancelAllRequests()}async send(e,o){return this.http.request(e,o)}async single(e,o){const r=await this.ct(e).getList(1,1,o);if(r.items.length===0)throw new eo(404,`No ${e} item found`,404);return r.items[0]}getRssFeedURL(){return`${this.http.baseUrl.replace("/api/v1","")}/feed.xml`}}function Nl(t,e){const o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(o)}function Il(t){return t==null?"":typeof t=="string"?t:typeof t=="boolean"?t?"true":"false":typeof t=="number"||typeof t=="bigint"?String(t):Array.isArray(t)?t.map(Il).join(", "):JSON.stringify(t)}function uP(t){return/[",\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t}function k0(t,e){const o=new Blob([JSON.stringify(t,null,2)],{type:"application/json"});Nl(o,e)}function S0(t,e,o,n){const r=e.map(o).join(","),s=t.map(i=>e.map(m=>uP(Il(i[m]))).join(",")),a=new Blob([`\uFEFF${[r,...s].join(` +For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return l.useEffect(()=>{t&&(document.getElementById(t)||console.error(o))},[o,t]),null},Bk="DialogDescriptionWarning",Vk=({contentRef:t,descriptionId:e})=>{const n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${xm(Bk).contentName}}.`;return l.useEffect(()=>{var s;const r=(s=t.current)==null?void 0:s.getAttribute("aria-describedby");e&&r&&(document.getElementById(e)||console.warn(n))},[n,t,e]),null},Wk=hm,qk=ym,Hk=wm,$k=vm,Kk=Symbol.for("react.lazy"),xs=Ds[" use ".trim().toString()];function Jk(t){return typeof t=="object"&&t!==null&&"then"in t}function Dm(t){return t!=null&&typeof t=="object"&&"$$typeof"in t&&t.$$typeof===Kk&&"_payload"in t&&Jk(t._payload)}function Gk(t){const e=Yk(t),o=l.forwardRef((n,r)=>{let{children:s,...a}=n;Dm(s)&&typeof xs=="function"&&(s=xs(s._payload));const i=l.Children.toArray(s),m=i.find(Xk);if(m){const d=m.props.children,c=i.map(p=>p===m?l.Children.count(d)>1?l.Children.only(null):l.isValidElement(d)?d.props.children:null:p);return u.jsx(e,{...a,ref:r,children:l.isValidElement(d)?l.cloneElement(d,void 0,c):null})}return u.jsx(e,{...a,ref:r,children:s})});return o.displayName=`${t}.Slot`,o}function Yk(t){const e=l.forwardRef((o,n)=>{let{children:r,...s}=o;if(Dm(r)&&typeof xs=="function"&&(r=xs(r._payload)),l.isValidElement(r)){const a=eS(r),i=Zk(s,r.props);return r.type!==l.Fragment&&(i.ref=n?Uo(n,a):a),l.cloneElement(r,i)}return l.Children.count(r)>1?l.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var Qk=Symbol("radix.slottable");function Xk(t){return l.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===Qk}function Zk(t,e){const o={...e};for(const n in e){const r=t[n],s=e[n];/^on[A-Z]/.test(n)?r&&s?o[n]=(...i)=>{const m=s(...i);return r(...i),m}:r&&(o[n]=r):n==="style"?o[n]={...r,...s}:n==="className"&&(o[n]=[r,s].filter(Boolean).join(" "))}return{...t,...o}}function eS(t){var n,r;let e=(n=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:n.get,o=e&&"isReactWarning"in e&&e.isReactWarning;return o?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var tS=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Vo=tS.reduce((t,e)=>{const o=Gk(`Primitive.${e}`),n=l.forwardRef((r,s)=>{const{asChild:a,...i}=r,m=a?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),sr='[cmdk-group=""]',Da='[cmdk-group-items=""]',oS='[cmdk-group-heading=""]',Pm='[cmdk-item=""]',od=`${Pm}:not([aria-disabled="true"])`,mi="cmdk-item-select",Rn="data-value",nS=(t,e,o)=>oT(t,e,o),Rm=l.createContext(void 0),Mr=()=>l.useContext(Rm),Em=l.createContext(void 0),yl=()=>l.useContext(Em),Am=l.createContext(void 0),Nm=l.forwardRef((t,e)=>{let o=En(()=>{var M,L;return{search:"",value:(L=(M=t.value)!=null?M:t.defaultValue)!=null?L:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),n=En(()=>new Set),r=En(()=>new Map),s=En(()=>new Map),a=En(()=>new Set),i=Im(t),{label:m,children:d,value:c,onValueChange:p,filter:h,shouldFilter:y,loop:g,disablePointerSelection:b=!1,vimBindings:f=!0,...w}=t,T=co(),v=co(),C=co(),S=l.useRef(null),k=fS();hn(()=>{if(c!==void 0){let M=c.trim();o.current.value=M,P.emit()}},[c]),hn(()=>{k(6,R)},[]);let P=l.useMemo(()=>({subscribe:M=>(a.current.add(M),()=>a.current.delete(M)),snapshot:()=>o.current,setState:(M,L,V)=>{var _,B,Y,q;if(!Object.is(o.current[M],L)){if(o.current[M]=L,M==="search")U(),N(),k(1,z);else if(M==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let J=document.getElementById(C);J?J.focus():(_=document.getElementById(T))==null||_.focus()}if(k(7,()=>{var J;o.current.selectedItemId=(J=W())==null?void 0:J.id,P.emit()}),V||k(5,R),((B=i.current)==null?void 0:B.value)!==void 0){let J=L??"";(q=(Y=i.current).onValueChange)==null||q.call(Y,J);return}}P.emit()}},emit:()=>{a.current.forEach(M=>M())}}),[]),D=l.useMemo(()=>({value:(M,L,V)=>{var _;L!==((_=s.current.get(M))==null?void 0:_.value)&&(s.current.set(M,{value:L,keywords:V}),o.current.filtered.items.set(M,I(L,V)),k(2,()=>{N(),P.emit()}))},item:(M,L)=>(n.current.add(M),L&&(r.current.has(L)?r.current.get(L).add(M):r.current.set(L,new Set([M]))),k(3,()=>{U(),N(),o.current.value||z(),P.emit()}),()=>{s.current.delete(M),n.current.delete(M),o.current.filtered.items.delete(M);let V=W();k(4,()=>{U(),(V==null?void 0:V.getAttribute("id"))===M&&z(),P.emit()})}),group:M=>(r.current.has(M)||r.current.set(M,new Set),()=>{s.current.delete(M),r.current.delete(M)}),filter:()=>i.current.shouldFilter,label:m||t["aria-label"],getDisablePointerSelection:()=>i.current.disablePointerSelection,listId:T,inputId:C,labelId:v,listInnerRef:S}),[]);function I(M,L){var V,_;let B=(_=(V=i.current)==null?void 0:V.filter)!=null?_:nS;return M?B(M,o.current.search,L):0}function N(){if(!o.current.search||i.current.shouldFilter===!1)return;let M=o.current.filtered.items,L=[];o.current.filtered.groups.forEach(_=>{let B=r.current.get(_),Y=0;B.forEach(q=>{let J=M.get(q);Y=Math.max(J,Y)}),L.push([_,Y])});let V=S.current;O().sort((_,B)=>{var Y,q;let J=_.getAttribute("id"),Te=B.getAttribute("id");return((Y=M.get(Te))!=null?Y:0)-((q=M.get(J))!=null?q:0)}).forEach(_=>{let B=_.closest(Da);B?B.appendChild(_.parentElement===B?_:_.closest(`${Da} > *`)):V.appendChild(_.parentElement===V?_:_.closest(`${Da} > *`))}),L.sort((_,B)=>B[1]-_[1]).forEach(_=>{var B;let Y=(B=S.current)==null?void 0:B.querySelector(`${sr}[${Rn}="${encodeURIComponent(_[0])}"]`);Y==null||Y.parentElement.appendChild(Y)})}function z(){let M=O().find(V=>V.getAttribute("aria-disabled")!=="true"),L=M==null?void 0:M.getAttribute(Rn);P.setState("value",L||void 0)}function U(){var M,L,V,_;if(!o.current.search||i.current.shouldFilter===!1){o.current.filtered.count=n.current.size;return}o.current.filtered.groups=new Set;let B=0;for(let Y of n.current){let q=(L=(M=s.current.get(Y))==null?void 0:M.value)!=null?L:"",J=(_=(V=s.current.get(Y))==null?void 0:V.keywords)!=null?_:[],Te=I(q,J);o.current.filtered.items.set(Y,Te),Te>0&&B++}for(let[Y,q]of r.current)for(let J of q)if(o.current.filtered.items.get(J)>0){o.current.filtered.groups.add(Y);break}o.current.filtered.count=B}function R(){var M,L,V;let _=W();_&&(((M=_.parentElement)==null?void 0:M.firstChild)===_&&((V=(L=_.closest(sr))==null?void 0:L.querySelector(oS))==null||V.scrollIntoView({block:"nearest"})),_.scrollIntoView({block:"nearest"}))}function W(){var M;return(M=S.current)==null?void 0:M.querySelector(`${Pm}[aria-selected="true"]`)}function O(){var M;return Array.from(((M=S.current)==null?void 0:M.querySelectorAll(od))||[])}function j(M){let L=O()[M];L&&P.setState("value",L.getAttribute(Rn))}function x(M){var L;let V=W(),_=O(),B=_.findIndex(q=>q===V),Y=_[B+M];(L=i.current)!=null&&L.loop&&(Y=B+M<0?_[_.length-1]:B+M===_.length?_[0]:_[B+M]),Y&&P.setState("value",Y.getAttribute(Rn))}function F(M){let L=W(),V=L==null?void 0:L.closest(sr),_;for(;V&&!_;)V=M>0?pS(V,sr):mS(V,sr),_=V==null?void 0:V.querySelector(od);_?P.setState("value",_.getAttribute(Rn)):x(M)}let H=()=>j(O().length-1),A=M=>{M.preventDefault(),M.metaKey?H():M.altKey?F(1):x(1)},Q=M=>{M.preventDefault(),M.metaKey?j(0):M.altKey?F(-1):x(-1)};return l.createElement(Vo.div,{ref:e,tabIndex:-1,...w,"cmdk-root":"",onKeyDown:M=>{var L;(L=w.onKeyDown)==null||L.call(w,M);let V=M.nativeEvent.isComposing||M.keyCode===229;if(!(M.defaultPrevented||V))switch(M.key){case"n":case"j":{f&&M.ctrlKey&&A(M);break}case"ArrowDown":{A(M);break}case"p":case"k":{f&&M.ctrlKey&&Q(M);break}case"ArrowUp":{Q(M);break}case"Home":{M.preventDefault(),j(0);break}case"End":{M.preventDefault(),H();break}case"Enter":{M.preventDefault();let _=W();if(_){let B=new Event(mi);_.dispatchEvent(B)}}}}},l.createElement("label",{"cmdk-label":"",htmlFor:D.inputId,id:D.labelId,style:gS},m),Ys(t,M=>l.createElement(Em.Provider,{value:P},l.createElement(Rm.Provider,{value:D},M))))}),rS=l.forwardRef((t,e)=>{var o,n;let r=co(),s=l.useRef(null),a=l.useContext(Am),i=Mr(),m=Im(t),d=(n=(o=m.current)==null?void 0:o.forceMount)!=null?n:a==null?void 0:a.forceMount;hn(()=>{if(!d)return i.item(r,a==null?void 0:a.id)},[d]);let c=Om(r,s,[t.value,t.children,s],t.keywords),p=yl(),h=Lo(k=>k.value&&k.value===c.current),y=Lo(k=>d||i.filter()===!1?!0:k.search?k.filtered.items.get(r)>0:!0);l.useEffect(()=>{let k=s.current;if(!(!k||t.disabled))return k.addEventListener(mi,g),()=>k.removeEventListener(mi,g)},[y,t.onSelect,t.disabled]);function g(){var k,P;b(),(P=(k=m.current).onSelect)==null||P.call(k,c.current)}function b(){p.setState("value",c.current,!0)}if(!y)return null;let{disabled:f,value:w,onSelect:T,forceMount:v,keywords:C,...S}=t;return l.createElement(Vo.div,{ref:Uo(s,e),...S,id:r,"cmdk-item":"",role:"option","aria-disabled":!!f,"aria-selected":!!h,"data-disabled":!!f,"data-selected":!!h,onPointerMove:f||i.getDisablePointerSelection()?void 0:b,onClick:f?void 0:g},t.children)}),sS=l.forwardRef((t,e)=>{let{heading:o,children:n,forceMount:r,...s}=t,a=co(),i=l.useRef(null),m=l.useRef(null),d=co(),c=Mr(),p=Lo(y=>r||c.filter()===!1?!0:y.search?y.filtered.groups.has(a):!0);hn(()=>c.group(a),[]),Om(a,i,[t.value,t.heading,m]);let h=l.useMemo(()=>({id:a,forceMount:r}),[r]);return l.createElement(Vo.div,{ref:Uo(i,e),...s,"cmdk-group":"",role:"presentation",hidden:p?void 0:!0},o&&l.createElement("div",{ref:m,"cmdk-group-heading":"","aria-hidden":!0,id:d},o),Ys(t,y=>l.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":o?d:void 0},l.createElement(Am.Provider,{value:h},y))))}),aS=l.forwardRef((t,e)=>{let{alwaysRender:o,...n}=t,r=l.useRef(null),s=Lo(a=>!a.search);return!o&&!s?null:l.createElement(Vo.div,{ref:Uo(r,e),...n,"cmdk-separator":"",role:"separator"})}),iS=l.forwardRef((t,e)=>{let{onValueChange:o,...n}=t,r=t.value!=null,s=yl(),a=Lo(d=>d.search),i=Lo(d=>d.selectedItemId),m=Mr();return l.useEffect(()=>{t.value!=null&&s.setState("search",t.value)},[t.value]),l.createElement(Vo.input,{ref:e,...n,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":m.listId,"aria-labelledby":m.labelId,"aria-activedescendant":i,id:m.inputId,type:"text",value:r?t.value:a,onChange:d=>{r||s.setState("search",d.target.value),o==null||o(d.target.value)}})}),lS=l.forwardRef((t,e)=>{let{children:o,label:n="Suggestions",...r}=t,s=l.useRef(null),a=l.useRef(null),i=Lo(d=>d.selectedItemId),m=Mr();return l.useEffect(()=>{if(a.current&&s.current){let d=a.current,c=s.current,p,h=new ResizeObserver(()=>{p=requestAnimationFrame(()=>{let y=d.offsetHeight;c.style.setProperty("--cmdk-list-height",y.toFixed(1)+"px")})});return h.observe(d),()=>{cancelAnimationFrame(p),h.unobserve(d)}}},[]),l.createElement(Vo.div,{ref:Uo(s,e),...r,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":i,"aria-label":n,id:m.listId},Ys(t,d=>l.createElement("div",{ref:Uo(a,m.listInnerRef),"cmdk-list-sizer":""},d)))}),cS=l.forwardRef((t,e)=>{let{open:o,onOpenChange:n,overlayClassName:r,contentClassName:s,container:a,...i}=t;return l.createElement(Wk,{open:o,onOpenChange:n},l.createElement(qk,{container:a},l.createElement(Hk,{"cmdk-overlay":"",className:r}),l.createElement($k,{"aria-label":t.label,"cmdk-dialog":"",className:s},l.createElement(Nm,{ref:e,...i}))))}),dS=l.forwardRef((t,e)=>Lo(o=>o.filtered.count===0)?l.createElement(Vo.div,{ref:e,...t,"cmdk-empty":"",role:"presentation"}):null),uS=l.forwardRef((t,e)=>{let{progress:o,children:n,label:r="Loading...",...s}=t;return l.createElement(Vo.div,{ref:e,...s,"cmdk-loading":"",role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":100,"aria-label":r},Ys(t,a=>l.createElement("div",{"aria-hidden":!0},a)))}),Wo=Object.assign(Nm,{List:lS,Item:rS,Input:iS,Group:sS,Separator:aS,Dialog:cS,Empty:dS,Loading:uS});function pS(t,e){let o=t.nextElementSibling;for(;o;){if(o.matches(e))return o;o=o.nextElementSibling}}function mS(t,e){let o=t.previousElementSibling;for(;o;){if(o.matches(e))return o;o=o.previousElementSibling}}function Im(t){let e=l.useRef(t);return hn(()=>{e.current=t}),e}var hn=typeof window>"u"?l.useEffect:l.useLayoutEffect;function En(t){let e=l.useRef();return e.current===void 0&&(e.current=t()),e}function Lo(t){let e=yl(),o=()=>t(e.snapshot());return l.useSyncExternalStore(e.subscribe,o,o)}function Om(t,e,o,n=[]){let r=l.useRef(),s=Mr();return hn(()=>{var a;let i=(()=>{var d;for(let c of o){if(typeof c=="string")return c.trim();if(typeof c=="object"&&"current"in c)return c.current?(d=c.current.textContent)==null?void 0:d.trim():r.current}})(),m=n.map(d=>d.trim());s.value(t,i,m),(a=e.current)==null||a.setAttribute(Rn,i),r.current=i}),r}var fS=()=>{let[t,e]=l.useState(),o=En(()=>new Map);return hn(()=>{o.current.forEach(n=>n()),o.current=new Map},[t]),(n,r)=>{o.current.set(n,r),e({})}};function hS(t){let e=t.type;return typeof e=="function"?e(t.props):"render"in e?e.render(t.props):t}function Ys({asChild:t,children:e},o){return t&&l.isValidElement(e)?l.cloneElement(hS(e),{ref:e.ref},o(e.props.children)):o(e)}var gS={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function bS({className:t,...e}){return u.jsx(Wo,{className:Ie("flex size-full flex-col overflow-hidden rounded-xl bg-popover text-popover-foreground shadow-lg",t),...e})}function yS({className:t,children:e,onOpenChange:o,...n}){return u.jsxs(Wo.Dialog,{className:Ie("fixed inset-0 z-50 flex items-start justify-center pt-[15vh]",t),onOpenChange:o,...n,children:[u.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm",onClick:()=>o==null?void 0:o(!1)}),u.jsx("div",{className:"relative z-50 h-auto max-h-[85vh] w-full max-w-lg overflow-hidden rounded-xl border bg-popover text-popover-foreground shadow-2xl duration-200 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",children:u.jsx(bS,{className:"[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:size-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-3 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:size-5",children:e})})]})}function wS({className:t,...e}){return u.jsxs("div",{className:"flex items-center border-b px-4","cmdk-input-wrapper":"",children:[u.jsxs("svg",{className:"me-2 size-4 shrink-0 opacity-50",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"11",cy:"11",r:"8"}),u.jsx("path",{d:"m21 21-4.3-4.3"})]}),u.jsx(Wo.Input,{className:Ie("flex h-12 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",t),...e})]})}function vS({className:t,...e}){return u.jsx(Wo.List,{className:Ie("max-h-80 overflow-y-auto overscroll-contain p-1",t),...e})}function CS({...t}){return u.jsx(Wo.Empty,{className:"py-6 text-center text-sm text-muted-foreground",...t})}function os({className:t,...e}){return u.jsx(Wo.Group,{className:Ie("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",t),...e})}function TS({className:t,...e}){return u.jsx(Wo.Separator,{className:Ie("-mx-1 h-px bg-border",t),...e})}function ar({className:t,...e}){return u.jsx(Wo.Item,{className:Ie("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",t),...e})}function kS(){const[t,e]=l.useState(!1);return l.useEffect(()=>{function o(r){r.key==="k"&&(r.metaKey||r.ctrlKey)&&(r.preventDefault(),e(s=>!s))}function n(){e(!0)}return document.addEventListener("keydown",o),window.addEventListener("open-command-palette",n),()=>{document.removeEventListener("keydown",o),window.removeEventListener("open-command-palette",n)}},[]),{open:t,setOpen:e}}function SS({open:t,setOpen:e}){const o=Jp(),{resolvedTheme:n,setTheme:r}=Ci(),{t:s}=no(),a=l.useCallback(c=>{e(!1),o.push(c)},[o]),i=[{label:s("layout.posts"),href:"/posts",icon:Ti,keywords:["blog","article"]},{label:s("layout.categories"),href:"/categories",icon:Jd},{label:s("layout.tags"),href:"/tags",icon:xi},{label:s("layout.comments"),href:"/comments",icon:tu},{label:s("layout.media"),href:"/media",icon:Gd,keywords:["upload","image","file"]},{label:s("layout.pages"),href:"/pages",icon:Zd},{label:s("layout.reusableBlocks"),href:"/reusable-blocks",icon:Wd}],m=[{label:s("layout.contentTypes"),href:"/content-types",icon:Qd,keywords:["cms","schema","model"]},{label:s("layout.plugins"),href:"/plugins",icon:ki,keywords:["extension","addon"]}],d=[{label:s("layout.users"),href:"/users",icon:iu,keywords:["member","account"]},{label:s("layout.rolesPermissions"),href:"/rbac",icon:ru,keywords:["role","permission","rbac","admin"]},{label:s("layout.cron"),href:"/crons",icon:Kd,keywords:["schedule","job","task"]},{label:s("layout.tenants"),href:"/tenants",icon:qd,keywords:["tenant","multi"]},{label:s("layout.webhooks"),href:"/webhooks",icon:cu},{label:s("layout.apiTokens"),href:"/tokens",icon:Yd,keywords:["api","token","key"]},{label:s("layout.workflows"),href:"/workflows",icon:Ng,keywords:["automation","flow"]},{label:s("layout.auditLog"),href:"/audit",icon:$d,keywords:["log","history"]},{label:s("layout.options"),href:"/options",icon:Si,keywords:["setting","config","preference"]}];return u.jsxs(yS,{open:t,onOpenChange:e,children:[u.jsx(wS,{placeholder:s("command.placeholder")}),u.jsxs(vS,{children:[u.jsx(CS,{children:s("command.noResults")}),u.jsx(os,{heading:s("layout.content"),children:i.map(c=>u.jsxs(ar,{onSelect:()=>a(c.href),keywords:c.keywords,children:[u.jsx(c.icon,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:c.label})]},c.href))}),u.jsx(os,{heading:s("layout.extension"),children:m.map(c=>u.jsxs(ar,{onSelect:()=>a(c.href),keywords:c.keywords,children:[u.jsx(c.icon,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:c.label})]},c.href))}),u.jsx(os,{heading:s("layout.system"),children:d.map(c=>u.jsxs(ar,{onSelect:()=>a(c.href),keywords:c.keywords,children:[u.jsx(c.icon,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:c.label})]},c.href))}),u.jsx(TS,{}),u.jsxs(os,{heading:s("command.actions"),children:[u.jsxs(ar,{onSelect:()=>{e(!1),a("/dashboard")},children:[u.jsx(Xd,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:s("layout.dashboard")})]}),u.jsxs(ar,{onSelect:()=>{e(!1),r(n==="dark"?"light":"dark")},children:[n==="dark"?u.jsx(au,{className:"size-4 text-muted-foreground"}):u.jsx(ou,{className:"size-4 text-muted-foreground"}),u.jsx("span",{children:s(n==="dark"?"command.switchToLight":"command.switchToDark")})]})]})]})]})}function xS(){const{open:t,setOpen:e}=kS();return u.jsx(SS,{open:t,setOpen:e})}function DS({children:t}){const[e]=l.useState(()=>new nh({defaultOptions:{queries:{staleTime:0,gcTime:0,refetchOnMount:"always",retry:1}}})),o=Yp();return l.useEffect(()=>{document.documentElement.dir=o,document.documentElement.lang=o==="rtl"?"ar":""},[o]),u.jsx(rh,{client:e,children:u.jsxs(wh,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:[u.jsx(qp,{children:t}),u.jsx(xS,{}),u.jsx(Rb,{})]})})}const PS=l.createContext(void 0);function wl(t=!1){const e=l.useContext(PS);if(e===void 0&&!t)throw new Error(rt(16));return e}function RS(t){const{focusableWhenDisabled:e,disabled:o,composite:n=!1,tabIndex:r=0,isNativeButton:s}=t,a=n&&e!==!1,i=n&&e===!1;return{props:l.useMemo(()=>{const d={onKeyDown(c){o&&e&&c.key!=="Tab"&&c.preventDefault()}};return n||(d.tabIndex=r,!s&&o&&(d.tabIndex=e?r:-1)),(s&&(e||a)||!s&&o)&&(d["aria-disabled"]=o),s&&(!e||i)&&(d.disabled=o),d},[n,o,e,a,i,s,r])}}function Ur(t={}){const{disabled:e=!1,focusableWhenDisabled:o,tabIndex:n=0,native:r=!0,composite:s}=t,a=l.useRef(null),i=wl(!0),m=s??i!==void 0,{props:d}=RS({focusableWhenDisabled:o,disabled:e,composite:m,tabIndex:n,isNativeButton:r}),c=l.useCallback(()=>{const y=a.current;Pa(y)&&m&&e&&d.disabled===void 0&&y.disabled&&(y.disabled=!1)},[e,d.disabled,m]);ue(c,[c]);const p=l.useCallback((y={})=>{const{onClick:g,onMouseDown:b,onKeyUp:f,onKeyDown:w,onPointerDown:T,...v}=y;return Tt({onClick(C){if(e){C.preventDefault();return}g==null||g(C)},onMouseDown(C){e||b==null||b(C)},onKeyDown(C){if(e||(ys(C),w==null||w(C),C.baseUIHandlerPrevented))return;const S=C.target===C.currentTarget,k=C.currentTarget,P=Pa(k),D=!r&&ES(k),I=S&&(r?P:!D),N=C.key==="Enter",z=C.key===" ",U=k.getAttribute("role"),R=(U==null?void 0:U.startsWith("menuitem"))||U==="option"||U==="gridcell";if(S&&m&&z){if(C.defaultPrevented&&R)return;C.preventDefault(),D||r&&P?(k.click(),C.preventBaseUIHandler()):I&&(g==null||g(C),C.preventBaseUIHandler());return}I&&(!r&&(z||N)&&C.preventDefault(),!r&&N&&(g==null||g(C)))},onKeyUp(C){if(!e){if(ys(C),f==null||f(C),C.target===C.currentTarget&&r&&m&&Pa(C.currentTarget)&&C.key===" "){C.preventDefault();return}C.baseUIHandlerPrevented||C.target===C.currentTarget&&!r&&!m&&C.key===" "&&(g==null||g(C))}},onPointerDown(C){if(e){C.preventDefault();return}T==null||T(C)}},r?{type:"button"}:{role:"button"},d,v)},[e,d,m,r]),h=ke(y=>{a.current=y,c()});return{getButtonProps:p,buttonRef:h}}function Pa(t){return Ve(t)&&t.tagName==="BUTTON"}function ES(t){return!!((t==null?void 0:t.tagName)==="A"&&(t!=null&&t.href))}const AS=l.forwardRef(function(e,o){const{render:n,className:r,disabled:s=!1,focusableWhenDisabled:a=!1,nativeButton:i=!0,style:m,...d}=e,{getButtonProps:c,buttonRef:p}=Ur({disabled:s,focusableWhenDisabled:a,native:i});return st("button",e,{state:{disabled:s},ref:[o,p],props:[d,c]})}),nd=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,rd=Ep,Fm=(t,e)=>o=>{var n;if((e==null?void 0:e.variants)==null)return rd(t,o==null?void 0:o.class,o==null?void 0:o.className);const{variants:r,defaultVariants:s}=e,a=Object.keys(r).map(d=>{const c=o==null?void 0:o[d],p=s==null?void 0:s[d];if(c===null)return null;const h=nd(c)||nd(p);return r[d][h]}),i=o&&Object.entries(o).reduce((d,c)=>{let[p,h]=c;return h===void 0||(d[p]=h),d},{}),m=e==null||(n=e.compoundVariants)===null||n===void 0?void 0:n.reduce((d,c)=>{let{class:p,className:h,...y}=c;return Object.entries(y).every(g=>{let[b,f]=g;return Array.isArray(f)?f.includes({...s,...i}[b]):{...s,...i}[b]===f})?[...d,p,h]:d},[]);return rd(t,a,m,o==null?void 0:o.class,o==null?void 0:o.className)},NS=Fm("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function Qn({className:t,variant:e="default",size:o="default",...n}){return u.jsx(AS,{"data-slot":"button",className:Ie(NS({variant:e,size:o,className:t})),...n})}class Mm extends l.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){var e;return this.state.hasError?u.jsx("div",{className:"flex min-h-[50vh] items-center justify-center p-8",children:u.jsxs("div",{className:"text-center space-y-4 max-w-md",children:[u.jsx("div",{className:"text-4xl",children:"💥"}),u.jsx("h2",{className:"text-lg font-semibold",children:"Something went wrong"}),u.jsx("p",{className:"text-sm text-muted-foreground break-all",children:(e=this.state.error)==null?void 0:e.message}),u.jsx(Qn,{onClick:()=>{this.setState({hasError:!1,error:null})},children:"Try Again"})]})}):this.props.children}}function vo({href:t,to:e,...o}){return u.jsx(kf,{to:e??t??"/",...o})}function IS(t){return st(t.defaultTagName??"div",t,t)}const Ra=768;function OS(){const[t,e]=l.useState(void 0);return l.useEffect(()=>{const o=window.matchMedia(`(max-width: ${Ra-1}px)`),n=()=>{e(window.innerWidtho.removeEventListener("change",n)},[]),!!t}const Um=l.createContext(!1),Lm=l.createContext(void 0);function Cn(t){const e=l.useContext(Lm);if(t===!1&&e===void 0)throw new Error(rt(27));return e}const FS={...bn,...Nr},MS=l.forwardRef(function(e,o){const{render:n,className:r,style:s,forceRender:a=!1,...i}=e,{store:m}=Cn(),d=m.useState("open"),c=m.useState("nested"),p=m.useState("mounted"),h=m.useState("transitionStatus");return st("div",e,{state:{open:d,transitionStatus:h},ref:[m.context.backdropRef,o],stateAttributesMapping:FS,props:[{role:"presentation",hidden:!p,style:{userSelect:"none",WebkitUserSelect:"none"}},i],enabled:a||!c})}),US=l.forwardRef(function(e,o){const{render:n,className:r,style:s,disabled:a=!1,nativeButton:i=!0,...m}=e,{store:d}=Cn(),c=d.useState("open"),{getButtonProps:p,buttonRef:h}=Ur({disabled:a,native:i}),y={disabled:a};function g(b){c&&d.setOpen(!1,Oe(Pu,b.nativeEvent))}return st("button",e,{state:y,ref:[o,h],props:[{onClick:g},m,p]})}),LS=l.forwardRef(function(e,o){const{render:n,className:r,style:s,id:a,...i}=e,{store:m}=Cn(),d=yn(a);return m.useSyncedValueWithCleanup("descriptionElementId",d),st("p",e,{ref:o,props:[{id:d},i]})});let jS=(function(t){return t.nestedDialogs="--nested-dialogs",t})({}),_S=(function(t){return t[t.open=Qo.open]="open",t[t.closed=Qo.closed]="closed",t[t.startingStyle=Qo.startingStyle]="startingStyle",t[t.endingStyle=Qo.endingStyle]="endingStyle",t.nested="data-nested",t.nestedDialogOpen="data-nested-dialog-open",t})({});const jm=l.createContext(void 0);function zS(){const t=l.useContext(jm);if(t===void 0)throw new Error(rt(26));return t}const _m="ArrowUp",zm="ArrowDown",Bm="ArrowLeft",Vm="ArrowRight",vl="Home",Cl="End",BS=new Set([Bm,Vm]),f0=new Set([Bm,Vm,vl,Cl]),VS=new Set([_m,zm]),h0=new Set([_m,zm,vl,Cl]),WS=new Set([...BS,...VS]),Tl=new Set([...WS,vl,Cl]),qS="Shift",HS="Control",$S="Alt",KS="Meta",g0=new Set([qS,HS,$S,KS]);function JS(t){return Ve(t)&&t.tagName==="INPUT"}function b0(t){return!!(JS(t)&&t.selectionStart!=null||Ve(t)&&t.tagName==="TEXTAREA")}function y0(t,e,o,n){if(!t||!e||!e.scrollTo)return;let r=t.scrollLeft,s=t.scrollTop;const a=t.clientWidtht.scrollLeft+t.clientWidth-d.scrollPaddingRight?r=m+e.offsetWidth+c.scrollMarginRight-t.clientWidth+d.scrollPaddingRight:m-c.scrollMarginLeftt.scrollLeft+t.clientWidth-d.scrollPaddingRight&&(r=m+e.offsetWidth+c.scrollMarginRight-t.clientWidth+d.scrollPaddingRight))}if(i&&n!=="horizontal"){const m=sd(t,e,"top"),d=ns(t),c=ns(e);m-c.scrollMarginTopt.scrollTop+t.clientHeight-d.scrollPaddingBottom&&(s=m+e.offsetHeight+c.scrollMarginBottom-t.clientHeight+d.scrollPaddingBottom)}t.scrollTo({left:r,top:s,behavior:"auto"})}function sd(t,e,o){const n=o==="left"?"offsetLeft":"offsetTop";let r=0;for(;e.offsetParent&&(r+=e[n],e.offsetParent!==t);)e=e.offsetParent;return r}function ns(t){const e=getComputedStyle(t);return{scrollMarginTop:parseFloat(e.scrollMarginTop)||0,scrollMarginRight:parseFloat(e.scrollMarginRight)||0,scrollMarginBottom:parseFloat(e.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(e.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(e.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(e.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(e.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(e.scrollPaddingLeft)||0}}const GS={...bn,...Nr,nestedDialogOpen(t){return t?{[_S.nestedDialogOpen]:""}:null}},YS=l.forwardRef(function(e,o){const{render:n,className:r,style:s,finalFocus:a,initialFocus:i,...m}=e,{store:d}=Cn(),c=d.useState("descriptionElementId"),p=d.useState("disablePointerDismissal"),h=d.useState("floatingRootContext"),y=d.useState("popupProps"),g=d.useState("modal"),b=d.useState("mounted"),f=d.useState("nested"),w=d.useState("nestedOpenDialogCount"),T=d.useState("open"),v=d.useState("openMethod"),C=d.useState("titleElementId"),S=d.useState("transitionStatus"),k=d.useState("role"),P=h.useState("floatingId"),D=m.id??P;zS(),Ir({open:T,ref:d.context.popupRef,onComplete(){var O,j;T&&((j=(O=d.context).onOpenChangeComplete)==null||j.call(O,!0))}});function I(O){return O==="touch"?d.context.popupRef.current:!0}const N=i===void 0?I:i,z=w>0,U=d.useStateSetter("popupElement"),W=st("div",e,{state:{open:T,nested:f,transitionStatus:S,nestedDialogOpen:z},props:[y,{id:D,"aria-labelledby":C??void 0,"aria-describedby":c??void 0,role:k,...Zn,hidden:!b,onKeyDown(O){Tl.has(O.key)&&O.stopPropagation()},style:{[jS.nestedDialogs]:w}},m],ref:[o,d.context.popupRef,U],stateAttributesMapping:GS});return u.jsx(Ki,{context:h,openInteractionType:v,disabled:!b,closeOnFocusOut:!p,initialFocus:N,returnFocus:a,modal:g!==!1,restoreFocus:"popup",children:W})}),kl=l.forwardRef(function(e,o){const{cutout:n,...r}=e;let s;if(n){const a=n.getBoundingClientRect();s=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${a.left}px ${a.top}px,${a.left}px ${a.bottom}px,${a.right}px ${a.bottom}px,${a.right}px ${a.top}px,${a.left}px ${a.top}px)`}return u.jsx("div",{ref:o,role:"presentation","data-base-ui-inert":"",...r,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:s}})}),QS=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e,{store:s}=Cn(),a=s.useState("mounted"),i=s.useState("modal"),m=s.useState("open");return a||n?u.jsx(jm.Provider,{value:n,children:u.jsxs(Wi,{ref:o,...r,children:[a&&i===!0&&u.jsx(kl,{ref:s.context.internalBackdropRef,inert:dl(!m)}),e.children]})}):null});let ad={},id={},ld="";function XS(t){if(typeof document>"u")return!1;const e=Le(t);return Ze(e).innerWidth-e.documentElement.clientWidth>0}function ZS(t){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const o=Le(t),n=o.documentElement,r=o.body,s=jo(n)?n:r,a=s.style.overflowY,i=n.style.scrollbarGutter;n.style.scrollbarGutter="stable",s.style.overflowY="scroll";const m=s.offsetWidth;s.style.overflowY="hidden";const d=s.offsetWidth;return s.style.overflowY=a,n.style.scrollbarGutter=i,m===d}function ex(t){const e=Le(t),o=e.documentElement,n=e.body,r=jo(o)?o:n,s={overflowY:r.style.overflowY,overflowX:r.style.overflowX};return Object.assign(r.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(r.style,s)}}function tx(t){var y;const e=Le(t),o=e.documentElement,n=e.body,r=Ze(o);let s=0,a=0,i=!1;const m=Gt.create();if(hu&&(((y=r.visualViewport)==null?void 0:y.scale)??1)!==1)return()=>{};function d(){const g=r.getComputedStyle(o),b=r.getComputedStyle(n),T=(g.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";s=o.scrollTop,a=o.scrollLeft,ad={scrollbarGutter:o.style.scrollbarGutter,overflowY:o.style.overflowY,overflowX:o.style.overflowX},ld=o.style.scrollBehavior,id={position:n.style.position,height:n.style.height,width:n.style.width,boxSizing:n.style.boxSizing,overflowY:n.style.overflowY,overflowX:n.style.overflowX,scrollBehavior:n.style.scrollBehavior};const v=o.scrollHeight>o.clientHeight,C=o.scrollWidth>o.clientWidth,S=g.overflowY==="scroll"||b.overflowY==="scroll",k=g.overflowX==="scroll"||b.overflowX==="scroll",P=Math.max(0,r.innerWidth-n.clientWidth),D=Math.max(0,r.innerHeight-n.clientHeight),I=parseFloat(b.marginTop)+parseFloat(b.marginBottom),N=parseFloat(b.marginLeft)+parseFloat(b.marginRight),z=jo(o)?o:n;if(i=ZS(t),i){o.style.scrollbarGutter=T,z.style.overflowY="hidden",z.style.overflowX="hidden";return}Object.assign(o.style,{scrollbarGutter:T,overflowY:"hidden",overflowX:"hidden"}),(v||S)&&(o.style.overflowY="scroll"),(C||k)&&(o.style.overflowX="scroll"),Object.assign(n.style,{position:"relative",height:I||D?`calc(100dvh - ${I+D}px)`:"100dvh",width:N||P?`calc(100vw - ${N+P}px)`:"100vw",boxSizing:"border-box",overflow:"hidden",scrollBehavior:"unset"}),n.scrollTop=s,n.scrollLeft=a,o.setAttribute("data-base-ui-scroll-locked",""),o.style.scrollBehavior="unset"}function c(){Object.assign(o.style,ad),Object.assign(n.style,id),i||(o.scrollTop=s,o.scrollLeft=a,o.removeAttribute("data-base-ui-scroll-locked"),o.style.scrollBehavior=ld)}function p(){c(),m.request(d)}d();const h=Ne(r,"resize",p);return()=>{m.cancel(),c(),typeof r.removeEventListener=="function"&&h()}}class ox{constructor(){_e(this,"lockCount",0);_e(this,"restore",null);_e(this,"timeoutLock",Mt.create());_e(this,"timeoutUnlock",Mt.create());_e(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});_e(this,"unlock",()=>{var e;this.lockCount===0&&this.restore&&((e=this.restore)==null||e.call(this),this.restore=null)})}acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}lock(e){if(this.lockCount===0||this.restore!==null)return;const n=Le(e).documentElement,r=Ze(n).getComputedStyle(n).overflowY;if(r==="hidden"||r==="clip"){this.restore=Ni;return}const s=gu||!XS(e);this.restore=s?ex(e):tx(e)}}const nx=new ox;function Wm(t=!0,e=null){ue(()=>{if(t)return nx.acquire(e)},[t,e])}function rx(t){const{store:e,parentContext:o,actionsRef:n,isDrawer:r}=t,s=e.useState("open");bp(e,s),js(e);const{forceUnmount:a}=_s(s,e),i=l.useCallback(()=>{e.setOpen(!1,Oe(Os))},[e]);return l.useImperativeHandle(n,()=>({unmount:a,close:i}),[a,i]),{parentContext:o,isDrawer:r}}function sx({store:t,dialogRoot:e}){const{parentContext:o,isDrawer:n}=e,r=t.useState("open"),s=t.useState("disablePointerDismissal"),a=t.useState("modal"),i=t.useState("popupElement"),m=t.useState("floatingRootContext"),[d,c]=l.useState(0),[p,h]=l.useState(0),y=d===0,g=Ms(m,{outsidePressEvent(){return t.context.internalBackdropRef.current||t.context.backdropRef.current?"intentional":{mouse:a==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(T){if(!t.context.outsidePressEnabledRef.current||"button"in T&&T.button!==0||"touches"in T&&T.touches.length!==1)return!1;const v=ht(T);if(y&&!s){const C=v;return a&&(t.context.internalBackdropRef.current||t.context.backdropRef.current)?t.context.internalBackdropRef.current===C||t.context.backdropRef.current===C||Ce(C,i)&&!(C!=null&&C.hasAttribute("data-base-ui-portal")):!0}return!1},escapeKey:y});Wm(r&&a===!0,i),t.useContextCallback("onNestedDialogOpen",(T,v)=>{c(T),h(v)}),t.useContextCallback("onNestedDialogClose",()=>{c(0),h(0)}),l.useEffect(()=>(o!=null&&o.onNestedDialogOpen&&r&&o.onNestedDialogOpen(d+1,p+(n?1:0)),o!=null&&o.onNestedDialogClose&&!r&&o.onNestedDialogClose(),()=>{o!=null&&o.onNestedDialogClose&&r&&o.onNestedDialogClose()}),[n,r,d,p,o]);const b=g.reference??Je,f=g.trigger??Je,w=l.useMemo(()=>Tt(Zn,g.floating),[g.floating]);return zs(t,{activeTriggerProps:b,inactiveTriggerProps:f,popupProps:w,nestedOpenDialogCount:d,nestedOpenDrawerCount:p}),null}const ax={...Vs,modal:oe(t=>t.modal),nested:oe(t=>t.nested),nestedOpenDialogCount:oe(t=>t.nestedOpenDialogCount),nestedOpenDrawerCount:oe(t=>t.nestedOpenDrawerCount),disablePointerDismissal:oe(t=>t.disablePointerDismissal),openMethod:oe(t=>t.openMethod),descriptionElementId:oe(t=>t.descriptionElementId),titleElementId:oe(t=>t.titleElementId),viewportElement:oe(t=>t.viewportElement),role:oe(t=>t.role)};class Sl extends Ar{constructor(o,n,r=!1){const s=new er,a=ix(o);a.floatingRootContext=el(s,n,r);super(a,{popupRef:l.createRef(),backdropRef:l.createRef(),internalBackdropRef:l.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:s,onOpenChange:void 0,onOpenChangeComplete:void 0},ax);_e(this,"setOpen",(o,n)=>{var s,a;if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!o&&n.trigger==null&&this.state.activeTriggerId!=null&&(n.trigger=this.state.activeTriggerElement??void 0),(a=(s=this.context).onOpenChange)==null||a.call(s,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const r={open:o};Xi(r,o,n.trigger),this.update(r)})}static useStore(o,n){return Qi(o,(s,a)=>new Sl(n,s,a),!0).store}}function ix(t={}){return{...Bs(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...t}}function lx(t,e="dialog"){const{children:o,open:n,defaultOpen:r=!1,onOpenChange:s,onOpenChangeComplete:a,disablePointerDismissal:i=!1,modal:m=!0,actionsRef:d,handle:c,triggerId:p,defaultTriggerId:h=null}=t,y=e==="drawer",g=e==="alert-dialog",b=g?!0:m,f=g||i,w=g?"alertdialog":"dialog",T=Cn(!0),C={modal:b,disablePointerDismissal:f,nested:!!T,role:w},S=Sl.useStore(c==null?void 0:c.store,{open:r,openProp:n,activeTriggerId:h,triggerIdProp:p,...C});Ps(()=>{const U=n===void 0&&S.state.open===!1&&r===!0?{open:!0,activeTriggerId:h}:null;g?S.update(U?{...C,...U}:C):U&&S.update(U)}),S.useControlledProp("openProp",n),S.useControlledProp("triggerIdProp",p),S.useSyncedValues(C),S.useContextCallback("onOpenChange",s),S.useContextCallback("onOpenChangeComplete",a);const k=S.useState("open"),P=S.useState("mounted"),D=S.useState("payload"),I=rx({store:S,actionsRef:d,parentContext:T==null?void 0:T.store.context,isDrawer:y}),N=k||P,z=l.useMemo(()=>({store:S}),[S]);return u.jsx(Um.Provider,{value:!1,children:u.jsxs(Lm.Provider,{value:z,children:[N&&u.jsx(sx,{store:S,dialogRoot:I}),typeof o=="function"?o({payload:D}):o]})})}function cx(t){const e=l.useContext(Um)?"drawer":"dialog";return lx(t,e)}const dx=l.forwardRef(function(e,o){const{render:n,className:r,style:s,id:a,...i}=e,{store:m}=Cn(),d=yn(a);return m.useSyncedValueWithCleanup("titleElementId",d),st("h2",e,{ref:o,props:[{id:d},i]})});function ux(t){const e=l.useRef(""),o=l.useCallback(r=>{r.defaultPrevented||(e.current=r.pointerType,t(r,r.pointerType))},[t]);return{onClick:l.useCallback(r=>{if(r.detail===0){t(r,"keyboard");return}"pointerType"in r?t(r,r.pointerType):t(r,e.current),e.current=""},[t]),onPointerDown:o}}function px(t,e){const o=l.useRef(t),n=ke(e);ue(()=>{o.current!==t&&n(o.current)},[t,n]),ue(()=>{o.current=t},[t])}function qm(t,e){const o=ke((s,a)=>{(typeof t=="function"?t():t)||e(a||(gu?"touch":""))}),{onClick:n,onPointerDown:r}=ux(o);return l.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function mx(t){const[e,o]=l.useState(null),n=qm(t,o);return px(t,r=>{r&&!t&&o(null)}),l.useMemo(()=>({openMethod:e,triggerProps:n}),[e,n])}function fx({...t}){return u.jsx(cx,{"data-slot":"sheet",...t})}function hx({...t}){return u.jsx(QS,{"data-slot":"sheet-portal",...t})}function gx({className:t,...e}){return u.jsx(MS,{"data-slot":"sheet-overlay",className:Ie("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...e})}function bx({className:t,children:e,side:o="right",showCloseButton:n=!0,...r}){return u.jsxs(hx,{children:[u.jsx(gx,{}),u.jsxs(YS,{"data-slot":"sheet-content","data-side":o,className:Ie("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",t),...r,children:[e,n&&u.jsxs(US,{"data-slot":"sheet-close",render:u.jsx(Qn,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[u.jsx(du,{}),u.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function yx({className:t,...e}){return u.jsx("div",{"data-slot":"sheet-header",className:Ie("flex flex-col gap-0.5 p-4",t),...e})}function w0({className:t,...e}){return u.jsx("div",{"data-slot":"sheet-footer",className:Ie("mt-auto flex flex-col gap-2 p-4",t),...e})}function wx({className:t,...e}){return u.jsx(dx,{"data-slot":"sheet-title",className:Ie("font-heading text-base font-medium text-foreground",t),...e})}function vx({className:t,...e}){return u.jsx(LS,{"data-slot":"sheet-description",className:Ie("text-sm text-muted-foreground",t),...e})}function Ea({className:t,...e}){return u.jsx("div",{"data-slot":"skeleton",className:Ie("animate-pulse rounded-md bg-muted",t),...e})}const Cx="sidebar_state",Tx=3600*24*7,kx="16rem",Sx="18rem",xx="3rem",Dx="b",Hm=l.createContext(null);function xl(){const t=l.useContext(Hm);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function Px({defaultOpen:t=!0,open:e,onOpenChange:o,className:n,style:r,children:s,...a}){const i=OS(),[m,d]=l.useState(!1),[c,p]=l.useState(t),h=e??c,y=l.useCallback(w=>{const T=typeof w=="function"?w(h):w;o?o(T):p(T),document.cookie=`${Cx}=${T}; path=/; max-age=${Tx}`},[o,h]),g=l.useCallback(()=>i?d(w=>!w):y(w=>!w),[i,y,d]);l.useEffect(()=>{const w=T=>{T.key===Dx&&(T.metaKey||T.ctrlKey)&&(T.preventDefault(),g())};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[g]);const b=h?"expanded":"collapsed",f=l.useMemo(()=>({state:b,open:h,setOpen:y,isMobile:i,openMobile:m,setOpenMobile:d,toggleSidebar:g}),[b,h,y,i,m,d,g]);return u.jsx(Hm.Provider,{value:f,children:u.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":kx,"--sidebar-width-icon":xx,...r},className:Ie("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",n),...a,children:s})})}function Rx({side:t="left",variant:e="sidebar",collapsible:o="offcanvas",className:n,children:r,dir:s,...a}){const{isMobile:i,state:m,openMobile:d,setOpenMobile:c}=xl();return o==="none"?u.jsx("div",{"data-slot":"sidebar",className:Ie("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",n),...a,children:r}):i?u.jsx(fx,{open:d,onOpenChange:c,...a,children:u.jsxs(bx,{dir:s,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":Sx},side:t,children:[u.jsxs(yx,{className:"sr-only",children:[u.jsx(wx,{children:"Sidebar"}),u.jsx(vx,{children:"Displays the mobile sidebar."})]}),u.jsx("div",{className:"flex h-full w-full flex-col",children:r})]})}):u.jsxs("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":m,"data-collapsible":m==="collapsed"?o:"","data-variant":e,"data-side":t,"data-slot":"sidebar",children:[u.jsx("div",{"data-slot":"sidebar-gap",className:Ie("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",e==="floating"||e==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),u.jsx("div",{"data-slot":"sidebar-container","data-side":t,className:Ie("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",e==="floating"||e==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",n),...a,children:u.jsx("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full flex-col overflow-hidden bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:r})})]})}function Ex({className:t,onClick:e,...o}){const{toggleSidebar:n}=xl();return u.jsxs(Qn,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:Ie(t),onClick:r=>{e==null||e(r),n()},...o,children:[u.jsx(Kg,{}),u.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function Ax({className:t,...e}){return u.jsx("main",{"data-slot":"sidebar-inset",className:Ie("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",t),...e})}function Nx({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:Ie("flex flex-col gap-2 p-2",t),...e})}function Ix({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:Ie("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-y-auto",t),...e})}function $m({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:Ie("relative flex w-full min-w-0 flex-col p-2",t),...e})}function Km({className:t,...e}){return u.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:Ie("w-full text-sm",t),...e})}function $o({className:t,...e}){return u.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:Ie("flex w-full min-w-0 flex-col gap-0",t),...e})}function Ko({className:t,...e}){return u.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:Ie("group/menu-item relative",t),...e})}const Ox=Fm("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent/15 focus-visible:ring-2 active:bg-sidebar-accent/15 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground data-active:hover:bg-sidebar-accent data-active:hover:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent/15",outline:"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function Jo({render:t,isActive:e=!1,variant:o="default",size:n="default",tooltip:r,className:s,...a}){const{isMobile:i,state:m}=xl(),d=IS({defaultTagName:"button",props:Tt({className:Ie(Ox({variant:o,size:n}),s)},a),render:r?u.jsx($p,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:n,active:e}});return r?(typeof r=="string"&&(r={children:r}),u.jsxs(Hp,{children:[d,u.jsx(Kp,{side:"right",align:"center",hidden:m!=="collapsed"||i,...r})]})):d}const Jm=l.createContext(void 0);function Dl(t){const e=l.useContext(Jm);if(e===void 0&&!t)throw new Error(rt(33));return e}const Gm=l.createContext(void 0);function fo(t){const e=l.useContext(Gm);if(e===void 0&&!t)throw new Error(rt(36));return e}const Fx=l.createContext(void 0);function Qs(t=!0){const e=l.useContext(Fx);if(e===void 0&&!t)throw new Error(rt(25));return e}function Mx(t){const{closeOnClick:e,highlighted:o,id:n,nodeId:r,store:s,typingRef:a,itemRef:i,itemMetadata:m}=t,{events:d}=s.useState("floatingTreeRoot"),c=Qs(!0),p=c!==void 0;return l.useMemo(()=>({id:n,role:"menuitem",tabIndex:o?0:-1,onKeyDown(h){h.key===" "&&(a!=null&&a.current)&&h.preventDefault()},onMouseMove(h){r&&d.emit("itemhover",{nodeId:r,target:h.currentTarget})},onClick(h){e&&d.emit("close",{domEvent:h,reason:Du})},onMouseUp(h){if(c){const y=c.initialCursorPointRef.current;if(c.initialCursorPointRef.current=null,p&&y&&Math.abs(h.clientX-y.x)<=1&&Math.abs(h.clientY-y.y)<=1||p&&!yu&&h.button===2)return}i.current&&s.context.allowMouseUpTriggerRef.current&&(!p||h.button===2)&&(!m||m.type==="regular-item")&&i.current.click()}}),[e,o,n,d,r,s,a,i,c,p,m])}const Ux={type:"regular-item"};function Ym(t){const{closeOnClick:e,disabled:o=!1,highlighted:n,id:r,store:s,typingRef:a=s.context.typingRef,nativeButton:i,itemMetadata:m,nodeId:d}=t,c=l.useRef(null),{getButtonProps:p,buttonRef:h}=Ur({disabled:o,focusableWhenDisabled:!0,native:i,composite:!0}),y=Mx({closeOnClick:e,highlighted:n,id:r,nodeId:d,store:s,typingRef:a,itemRef:c,itemMetadata:m}),g=l.useCallback(f=>Tt(y,{onMouseEnter(){m.type==="submenu-trigger"&&m.setActive()}},f,p),[y,p,m]),b=Gn(c,h);return l.useMemo(()=>({getItemProps:g,itemRef:b}),[g,b])}const Qm=l.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}});function Lx(){return l.useContext(Qm)}let jx=(function(t){return t[t.None=0]="None",t[t.GuessFromOrder=1]="GuessFromOrder",t})({});function Pl(t={}){const{label:e,metadata:o,textRef:n,indexGuessBehavior:r,index:s}=t,{register:a,unregister:i,subscribeMapChange:m,elementsRef:d,labelsRef:c,nextIndexRef:p}=Lx(),h=l.useRef(-1),[y,g]=l.useState(s??(r===jx.GuessFromOrder?()=>{if(h.current===-1){const w=p.current;p.current+=1,h.current=w}return h.current}:-1)),b=l.useRef(null),f=l.useCallback(w=>{var T;if(b.current=w,y!==-1&&w!==null&&(d.current[y]=w,c)){const v=e!==void 0;c.current[y]=v?e:((T=n==null?void 0:n.current)==null?void 0:T.textContent)??w.textContent}},[y,d,c,e,n]);return ue(()=>{if(s!=null)return;const w=b.current;if(w)return a(w,o),()=>{i(w)}},[s,a,i,o]),ue(()=>{if(s==null)return m(w=>{var v;const T=b.current?(v=w.get(b.current))==null?void 0:v.index:null;T!=null&&g(T)})},[s,m,g]),l.useMemo(()=>({ref:f,index:y}),[y,f])}const _x=l.forwardRef(function(e,o){const{render:n,className:r,id:s,label:a,nativeButton:i=!1,disabled:m=!1,closeOnClick:d=!0,style:c,...p}=e,h=Pl({label:a}),y=Dl(!0),g=yn(s),{store:b}=fo(),f=b.useState("isActive",h.index),w=b.useState("itemProps"),{getItemProps:T,itemRef:v}=Ym({closeOnClick:d,disabled:m,highlighted:f,id:g,store:b,nativeButton:i,nodeId:y==null?void 0:y.context.nodeId,itemMetadata:Ux});return st("div",e,{state:{disabled:m,highlighted:f},props:[w,p,T],ref:[v,o,h.ref]})}),zx=l.createContext(void 0);function Xm(t){return l.useContext(zx)}const Bx={...bn,...Nr},Vx=l.forwardRef(function(e,o){const{render:n,className:r,style:s,finalFocus:a,...i}=e,{store:m}=fo(),{side:d,align:c}=Dl(),p=Xm()!=null,h=m.useState("open"),y=m.useState("transitionStatus"),g=m.useState("popupProps"),b=m.useState("mounted"),f=m.useState("instantType"),w=m.useState("activeTriggerElement"),T=m.useState("parent"),v=m.useState("lastOpenChangeReason"),C=m.useState("rootId"),S=m.useState("floatingRootContext"),k=m.useState("floatingTreeRoot"),P=m.useState("closeDelay"),D=m.useState("activeTriggerElement"),I=m.useState("hoverEnabled"),N=m.useState("disabled"),z=T.type==="context-menu";Ir({open:h,ref:m.context.popupRef,onComplete(){var j,x;h&&((x=(j=m.context).onOpenChangeComplete)==null||x.call(j,!0))}}),l.useEffect(()=>{function j(x){m.setOpen(!1,Oe(x.reason,x.domEvent))}return k.events.on("close",j),()=>{k.events.off("close",j)}},[k.events,m]),rl(S,{enabled:I&&!N&&!z&&T.type!=="menubar",closeDelay:P});const U=l.useCallback(j=>{m.set("popupElement",j)},[m]),R={transitionStatus:y,side:d,align:c,open:h,nested:T.type==="menu",instant:f},W=st("div",e,{state:R,ref:[o,m.context.popupRef,U],stateAttributesMapping:Bx,props:[g,{onKeyDown(j){p&&Tl.has(j.key)&&j.stopPropagation()}},$s(y),i,{"data-rootownerid":C}]});let O=T.type===void 0||z;return(w||T.type==="menubar"&&v!==Ii)&&(O=!0),u.jsx(Ki,{context:S,modal:z,disabled:!b,returnFocus:a===void 0?O:a,initialFocus:T.type!=="menu",restoreFocus:!0,externalTree:T.type!=="menubar"?k:void 0,previousFocusableElement:D,nextFocusableElement:T.type===void 0?m.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:T.type===void 0?m.context.beforeContentFocusGuardRef:void 0,children:W})}),Zm=l.createContext(void 0);function Wx(){const t=l.useContext(Zm);if(t===void 0)throw new Error(rt(32));return t}const qx=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e,{store:s}=fo();return s.useState("mounted")||n?u.jsx(Zm.Provider,{value:n,children:u.jsx(Wi,{ref:o,...r})}):null});function Hx(t){const{children:e,elementsRef:o,labelsRef:n,onMapChange:r}=t,s=ke(r),a=l.useRef(0),i=Nt(Kx).current,m=Nt($x).current,[d,c]=l.useState(0),p=l.useRef(d),h=ke((w,T)=>{m.set(w,T??null),p.current+=1,c(p.current)}),y=ke(w=>{m.delete(w),p.current+=1,c(p.current)}),g=l.useMemo(()=>{const w=new Map;return Array.from(m.keys()).filter(v=>v.isConnected).sort(Jx).forEach((v,C)=>{const S=m.get(v)??{};w.set(v,{...S,index:C})}),w},[m,d]);ue(()=>{if(typeof MutationObserver!="function"||g.size===0)return;const w=new MutationObserver(T=>{const v=new Set,C=S=>v.has(S)?v.delete(S):v.add(S);T.forEach(S=>{S.removedNodes.forEach(C),S.addedNodes.forEach(C)}),v.size===0&&(p.current+=1,c(p.current))});return g.forEach((T,v)=>{v.parentElement&&w.observe(v.parentElement,{childList:!0})}),()=>{w.disconnect()}},[g]),ue(()=>{p.current===d&&(o.current.length!==g.size&&(o.current.length=g.size),n&&n.current.length!==g.size&&(n.current.length=g.size),a.current=g.size),s(g)},[s,g,o,n,d]),ue(()=>()=>{o.current=[]},[o]),ue(()=>()=>{n&&(n.current=[])},[n]);const b=ke(w=>(i.add(w),()=>{i.delete(w)}));ue(()=>{i.forEach(w=>w(g))},[i,g]);const f=l.useMemo(()=>({register:h,unregister:y,subscribeMapChange:b,elementsRef:o,labelsRef:n,nextIndexRef:a}),[h,y,b,o,n,a]);return u.jsx(Qm.Provider,{value:f,children:e})}function $x(){return new Map}function Kx(){return new Set}function Jx(t,e){const o=t.compareDocumentPosition(e);return o&Node.DOCUMENT_POSITION_FOLLOWING||o&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:o&Node.DOCUMENT_POSITION_PRECEDING||o&Node.DOCUMENT_POSITION_CONTAINS?1:0}const Gx=20;function ef(t,e,o,n){const[r,s]=l.useState(!1);ue(()=>{if(!t||!e||o==null){s(!1);return}const a=Le(o).documentElement.clientWidth,i=o.offsetWidth;s(a>0&&i>0&&i>=a-Gx)},[t,e,o]),Wm(t&&(!e||r),n)}const Yx=l.forwardRef(function(e,o){var Fe;const{anchor:n,positionMethod:r="absolute",className:s,render:a,side:i,align:m,sideOffset:d=0,alignOffset:c=0,collisionBoundary:p="clipping-ancestors",collisionPadding:h=5,arrowPadding:y=5,sticky:g=!1,disableAnchorTracking:b=!1,collisionAvoidance:f=Jy,style:w,...T}=e,{store:v}=fo(),C=Wx(),S=Qs(!0),k=v.useState("parent"),P=v.useState("floatingRootContext"),D=v.useState("floatingTreeRoot"),I=v.useState("mounted"),N=v.useState("open"),z=v.useState("modal"),U=v.useState("openMethod"),R=v.useState("activeTriggerElement"),W=v.useState("transitionStatus"),O=v.useState("positionerElement"),j=v.useState("instantType"),x=v.useState("hasViewport"),F=v.useState("lastOpenChangeReason"),H=v.useState("floatingNodeId"),A=v.useState("floatingParentNodeId"),Q=P.useState("domReferenceElement"),M=l.useRef(null),L=Yi(O,!1,!1);let V=n,_=d,B=c,Y=m,q=f;k.type==="context-menu"&&(V=n??((Fe=k.context)==null?void 0:Fe.anchor),Y=Y??"start",!i&&Y!=="center"&&(B=e.alignOffset??2,_=e.sideOffset??-5));let J=i,Te=Y;k.type==="menu"?(J=J??"inline-end",Te=Te??"start",q=e.collisionAvoidance??Vi):k.type==="menubar"&&(J=J??"bottom",Te=Te??"start");const Re=k.type==="context-menu",K=ll({anchor:V,floatingRootContext:P,positionMethod:S?"fixed":r,mounted:I,side:J,sideOffset:_,align:Te,alignOffset:B,arrowPadding:Re?0:y,collisionBoundary:p,collisionPadding:h,sticky:g,nodeId:H,keepMounted:C,disableAnchorTracking:b,collisionAvoidance:q,shiftCrossAxis:Re&&!("side"in q&&q.side==="flip"),externalTree:D,adaptiveOrigin:x?il:void 0});l.useEffect(()=>{function we(he){he.open&&(he.parentNodeId===H&&v.set("hoverEnabled",!1),he.nodeId!==H&&he.parentNodeId===v.select("floatingParentNodeId")&&v.setOpen(!1,Oe(lr)))}return D.events.on("menuopenchange",we),()=>{D.events.off("menuopenchange",we)}},[v,D.events,H]),l.useEffect(()=>{if(v.select("floatingParentNodeId")==null)return;function we(he){if(he.open||he.nodeId!==v.select("floatingParentNodeId"))return;const Pe=he.reason??lr;v.setOpen(!1,Oe(Pe))}return D.events.on("menuopenchange",we),()=>{D.events.off("menuopenchange",we)}},[D.events,v]);const de=gt();l.useEffect(()=>{N||de.clear()},[N,de]),l.useEffect(()=>{function we(he){if(!(!N||he.nodeId!==v.select("floatingParentNodeId")))if(he.target&&R&&R!==he.target){const Pe=v.select("closeDelay");Pe>0?de.isStarted()||de.start(Pe,()=>{v.setOpen(!1,Oe(lr))}):v.setOpen(!1,Oe(lr))}else de.clear()}return D.events.on("itemhover",we),()=>{D.events.off("itemhover",we)}},[D.events,N,R,v,de]),l.useEffect(()=>{const we={open:N,nodeId:H,parentNodeId:A,reason:v.select("lastOpenChangeReason")};D.events.emit("menuopenchange",we)},[D.events,N,v,H,A]),ue(()=>{const we=Q,he=M.current;if(we&&(M.current=we),he&&we&&we!==he){v.set("instantType",void 0);const Pe=new AbortController;return L(()=>{v.set("instantType","trigger-change")},Pe.signal),()=>{Pe.abort()}}},[Q,L,v]);const le={open:N,side:K.side,align:K.align,anchorHidden:K.anchorHidden,nested:k.type==="menu",instant:j},De=k.type==="menubar"&&k.context.modal;ef(N&&(De||z&&F!==Ye),U==="touch",O,R);const fe=cl(e,le,{styles:K.positionerStyles,transitionStatus:W,props:T,refs:[o,v.useStateSetter("positionerElement")],hidden:!I,inert:!N}),Se=I&&k.type!=="menu"&&(k.type!=="menubar"&&z&&F!==Ye||k.type==="menubar"&&k.context.modal);let Z=null;return k.type==="menubar"?Z=k.context.contentElement:k.type===void 0&&(Z=R),u.jsxs(Jm.Provider,{value:K,children:[Se&&u.jsx(kl,{ref:k.type==="context-menu"||k.type==="nested-context-menu"?k.context.internalBackdropRef:null,inert:dl(!N),cutout:Z}),u.jsx(np,{id:H,children:u.jsx(Hx,{elementsRef:v.context.itemDomElements,labelsRef:v.context.itemLabels,children:fe})})]})}),Qx=l.createContext(null);function tf(t){return l.useContext(Qx)}const Xx={...Vs,disabled:oe(t=>t.parent.type==="menubar"&&t.parent.context.disabled||t.disabled),modal:oe(t=>(t.parent.type===void 0||t.parent.type==="context-menu")&&(t.modal??!0)),openMethod:oe(t=>t.openMethod),allowMouseEnter:oe(t=>t.allowMouseEnter),stickIfOpen:oe(t=>t.stickIfOpen),parent:oe(t=>t.parent),rootId:oe(t=>t.parent.type==="menu"?t.parent.store.select("rootId"):t.parent.type!==void 0?t.parent.context.rootId:t.rootId),activeIndex:oe(t=>t.activeIndex),isActive:oe((t,e)=>t.activeIndex===e),hoverEnabled:oe(t=>t.hoverEnabled),instantType:oe(t=>t.instantType),lastOpenChangeReason:oe(t=>t.openChangeReason),floatingTreeRoot:oe(t=>t.parent.type==="menu"?t.parent.store.select("floatingTreeRoot"):t.floatingTreeRoot),floatingNodeId:oe(t=>t.floatingNodeId),floatingParentNodeId:oe(t=>t.floatingParentNodeId),itemProps:oe(t=>t.itemProps),closeDelay:oe(t=>t.closeDelay),hasViewport:oe(t=>t.hasViewport),keyboardEventRelay:oe(t=>{if(t.keyboardEventRelay)return t.keyboardEventRelay;if(t.parent.type==="menu")return t.parent.store.select("keyboardEventRelay")})};class Rl extends Ar{constructor(o){super({...Zx(),...o},{positionerRef:l.createRef(),popupRef:l.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:l.createRef(),beforeContentFocusGuardRef:l.createRef(),onOpenChangeComplete:void 0,triggerElements:new er},Xx);_e(this,"unsubscribeParentListener",null);this.unsubscribeParentListener=this.observe("parent",n=>{var r;if((r=this.unsubscribeParentListener)==null||r.call(this),n.type==="menu"){let s=n.store.select("rootId"),a=n.store.select("floatingTreeRoot"),i=n.store.select("keyboardEventRelay");this.unsubscribeParentListener=n.store.subscribe(()=>{const m=n.store.select("rootId"),d=n.store.select("floatingTreeRoot"),c=n.store.select("keyboardEventRelay");s===m&&a===d&&i===c||(s=m,a=d,i=c,this.notifyAll())}),this.context.allowMouseUpTriggerRef=n.store.context.allowMouseUpTriggerRef;return}n.type!==void 0&&(this.context.allowMouseUpTriggerRef=n.context.allowMouseUpTriggerRef),this.unsubscribeParentListener=null})}setOpen(o,n){this.state.floatingRootContext.context.events.emit("setOpen",{open:o,eventDetails:n})}static useStore(o,n){const r=Nt(()=>new Rl(n)).current;return o??r}}function Zx(){return{...Bs(),disabled:!1,modal:!0,openMethod:null,allowMouseEnter:!1,stickIfOpen:!0,parent:{type:void 0},rootId:void 0,activeIndex:null,hoverEnabled:!0,instantType:void 0,openChangeReason:null,floatingTreeRoot:new qi,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:Je,keyboardEventRelay:void 0,closeDelay:0,hasViewport:!1}}const of=l.createContext(void 0);function nf(){return l.useContext(of)}const rf=Di(function(e){const{children:o,open:n,onOpenChange:r,onOpenChangeComplete:s,defaultOpen:a=!1,disabled:i=!1,modal:m,loopFocus:d=!0,orientation:c="vertical",actionsRef:p,closeParentOnEsc:h=!1,handle:y,triggerId:g,defaultTriggerId:b=null,highlightItemOnHover:f=!0}=e,w=Qs(!0),T=fo(!0),v=tf(!0),C=nf(),S=l.useMemo(()=>C&&T?{type:"menu",store:T.store}:v?{type:"menubar",context:v}:w&&!T?{type:"context-menu",context:w}:{type:void 0},[w,T,v,C]),k=Rl.useStore(y==null?void 0:y.store,{open:a,openProp:n,activeTriggerId:b,triggerIdProp:g,parent:S});Ps(()=>{n===void 0&&k.state.open===!1&&a===!0&&k.update({open:!0,activeTriggerId:b})}),k.useControlledProp("openProp",n),k.useControlledProp("triggerIdProp",g),k.useContextCallback("onOpenChangeComplete",s);const P=un(),D=un(),I=k.useState("floatingTreeRoot"),N=Hi(I),z=mo(),U=k.useState("open"),R=k.useState("activeTriggerElement"),W=k.useState("positionerElement"),O=k.useState("hoverEnabled"),j=k.useState("disabled"),x=k.useState("lastOpenChangeReason"),F=k.useState("parent"),H=k.useState("activeIndex"),A=k.useState("payload"),Q=k.useState("floatingParentNodeId"),M=l.useRef(null),L=l.useRef(F.type!=="context-menu"),V=gt(),_=l.useRef(!0),B=gt(),Y=Q!=null,{openMethod:q,triggerProps:J}=mx(U);k.useSyncedValues({disabled:i,modal:F.type===void 0?m:void 0,openMethod:q,rootId:P}),js(k);const{forceUnmount:Te}=_s(U,k,()=>{k.update({allowMouseEnter:!1,stickIfOpen:!0})});ue(()=>{w&&!T?k.update({parent:{type:"context-menu",context:w},floatingNodeId:N,floatingParentNodeId:z}):T&&k.update({floatingNodeId:N,floatingParentNodeId:z})},[w,T,N,z,k]),l.useEffect(()=>{if(U||(M.current=null),F.type==="context-menu"){if(!U){V.clear(),L.current=!1;return}V.start(500,()=>{L.current=!0})}},[V,U,F.type]),ue(()=>{!U&&!O&&k.set("hoverEnabled",!0)},[U,O,k]);const Re=ke((G,ge)=>{var Bt;const xe=ge.reason;if(U===G&&ge.trigger===R&&x===xe||(ge.preventUnmountOnClose=()=>{k.set("preventUnmountingOnClose",!0)},!G&&ge.trigger==null&&(ge.trigger=R??void 0),r==null||r(G,ge),ge.isCanceled))return;k.state.floatingRootContext.dispatchOpenChange(G,ge);const Ke=ge.event;if(G===!1&&(Ke==null?void 0:Ke.type)==="click"&&Ke.pointerType==="touch"&&!_.current)return;if(!G&&H!==null){const Vt=k.context.itemDomElements.current[H];queueMicrotask(()=>{Vt==null||Vt.setAttribute("tabindex","-1")})}G&&xe===An?(_.current=!1,B.start(300,()=>{_.current=!0})):(_.current=!0,B.clear());const ze=(xe===uo||xe===Du)&&Ke.detail===0&&(Ke==null?void 0:Ke.isTrusted),Ge=!G&&(xe===Rr||xe==null),it={open:G,openChangeReason:xe};M.current=ge.event??null;const It=((Bt=ge.trigger)==null?void 0:Bt.id)??null;(It||G)&&(it.activeTriggerId=It,it.activeTriggerElement=ge.trigger??null),k.update(it),F.type==="menubar"&&(xe===An||xe===dn||xe===Ye||xe===ti||xe===lr)?k.set("instantType","group"):ze||Ge?k.set("instantType",ze?"click":"dismiss"):k.set("instantType",void 0)}),K=hp({popupStore:k,floatingId:D,nested:z!=null,onOpenChange:Re}),de=K.context.events;l.useEffect(()=>{const G=({open:ge,eventDetails:xe})=>Re(ge,xe);return de.on("setOpen",G),()=>{de==null||de.off("setOpen",G)}},[de,Re]);const le=l.useCallback(()=>{k.setOpen(!1,Oe(Os))},[k]);l.useImperativeHandle(p,()=>({unmount:Te,close:le}),[Te,le]);let De;F.type==="context-menu"&&(De=F.context),l.useImperativeHandle(De==null?void 0:De.positionerRef,()=>W,[W]),l.useImperativeHandle(De==null?void 0:De.actionsRef,()=>({setOpen:Re}),[Re]);const me=Ms(K,{enabled:!j,bubbles:{escapeKey:h&&F.type==="menu"},outsidePress(){var G;return F.type!=="context-menu"||((G=M.current)==null?void 0:G.type)==="contextmenu"?!0:L.current},externalTree:Y?I:void 0}),fe=Dp(),Se=l.useCallback(G=>{k.select("activeIndex")!==G&&k.set("activeIndex",G)},[k]),Z=dv(K,{enabled:!j,listRef:k.context.itemDomElements,activeIndex:H,nested:F.type!==void 0,loopFocus:d,orientation:c,parentOrientation:F.type==="menubar"?F.context.orientation:void 0,rtl:fe==="rtl",disabledIndices:ei,onNavigate:Se,openOnArrowKeyDown:F.type!=="context-menu",externalTree:Y?I:void 0,focusItemOnHover:f}),Fe=l.useCallback(G=>{k.context.typingRef.current=G},[k]),we=uv(K,{listRef:k.context.itemLabels,elementsRef:k.context.itemDomElements,activeIndex:H,resetMs:$y,onMatch:G=>{U&&G!==H&&k.set("activeIndex",G)},onTyping:Fe}),he=l.useMemo(()=>{const G=Tt(we.reference,Z.reference,me.reference,{onMouseMove(){k.set("allowMouseEnter",!0)}},J);return G["aria-haspopup"]="menu",G["aria-expanded"]=U,G},[k,we.reference,Z.reference,me.reference,J,U]),Pe=l.useMemo(()=>{const G=Tt(Z.trigger,me.trigger,J);return G["aria-haspopup"]="menu",G["aria-expanded"]=!1,G},[Z.trigger,me.trigger,J]),se=l.useMemo(()=>Tt(Zn,{id:D,role:"menu","aria-labelledby":R==null?void 0:R.id,onMouseMove(){k.set("allowMouseEnter",!0),F.type==="menu"&&k.set("hoverEnabled",!1)},onClick(){k.select("hoverEnabled")&&k.set("hoverEnabled",!1)},onKeyDown(G){const ge=k.select("keyboardEventRelay");ge&&!G.isPropagationStopped()&&ge(G)}},we.floating,Z.floating,me.floating),[R,D,F.type,k,we.floating,Z.floating,me.floating]),$=Z.item??Je;zs(k,{floatingRootContext:K,activeTriggerProps:he,inactiveTriggerProps:Pe,popupProps:se,itemProps:$});const ee=l.useMemo(()=>({store:k,parent:S}),[k,S]),te=u.jsx(Gm.Provider,{value:ee,children:typeof o=="function"?o({payload:A}):o});return F.type===void 0||F.type==="context-menu"?u.jsx(rp,{externalTree:I,children:te}):te});function eD(t){const e=fo().store,o=l.useMemo(()=>({parentMenu:e}),[e]);return u.jsx(of.Provider,{value:o,children:u.jsx(rf,{...t})})}function tD(t){const e=t.getBoundingClientRect(),o=Ze(t),n=o.getComputedStyle(t,"::before"),r=o.getComputedStyle(t,"::after");if(!(n.content!=="none"||r.content!=="none"))return e;const a=parseFloat(n.width)||0,i=parseFloat(n.height)||0,m=parseFloat(r.width)||0,d=parseFloat(r.height)||0,c=Math.max(e.width,a,m),p=Math.max(e.height,i,d),h=c-e.width,y=p-e.height;return{left:e.left-h/2,right:e.right+h/2,top:e.top-y/2,bottom:e.bottom+y/2}}function oD(t={}){const{highlightItemOnHover:e,highlightedIndex:o,onHighlightedIndexChange:n}=wl(),{ref:r,index:s}=Pl(t),a=o===s,i=l.useRef(null),m=Gn(r,i);return{compositeProps:l.useMemo(()=>({tabIndex:a?0:-1,onFocus(){n(s)},onMouseMove(){const c=i.current;if(!e||!c)return;const p=c.hasAttribute("disabled")||c.ariaDisabled==="true";!a&&!p&&c.focus()}}),[a,n,s,e]),compositeRef:m,index:s}}function nD(t){const{render:e,className:o,style:n,state:r=Je,props:s=ei,refs:a=ei,metadata:i,stateAttributesMapping:m,tag:d="div",...c}=t,{compositeProps:p,compositeRef:h}=oD({metadata:i});return st(d,t,{state:r,ref:[...a,h],props:[p,...s,c],stateAttributesMapping:m})}function sf(t){if(Ve(t)&&t.hasAttribute("data-rootownerid"))return t.getAttribute("data-rootownerid")??void 0;if(!Qt(t))return sf(to(t))}function af(t,e){const o=l.useRef(null);function n(s){_t.flushSync(()=>{t.setOpen(!1,Oe(dn,s.nativeEvent,s.currentTarget))});const a=Ry(o.current);a==null||a.focus()}function r(s){var i;const a=t.select("positionerElement");if(a&&In(s,a))(i=t.context.beforeContentFocusGuardRef.current)==null||i.focus();else{_t.flushSync(()=>{t.setOpen(!1,Oe(dn,s.nativeEvent,s.currentTarget))});let m=Py(t.context.triggerFocusTargetRef.current||e.current);for(;m!==null&&Ce(a,m);){const d=m;if(m=ji(m),m===d)break}m==null||m.focus()}}return{preFocusGuardRef:o,handlePreFocusGuardFocus:n,handleFocusTargetFocus:r}}function rD(t){const{enabled:e=!0,mouseDownAction:o,open:n}=t,r=l.useRef(!1);return l.useMemo(()=>e?{onMouseDown:s=>{(o==="open"&&!n||o==="close"&&n)&&(r.current=!0,Le(s.currentTarget).addEventListener("click",()=>{r.current=!1},{once:!0}))},onClick:s=>{r.current&&(r.current=!1,s.preventBaseUIHandler())}}:Je,[e,o,n])}const rs=2,sD=uu(function(e,o){const{render:n,className:r,style:s,disabled:a=!1,nativeButton:i=!0,id:m,openOnHover:d,delay:c=100,closeDelay:p=0,handle:h,payload:y,...g}=e,b=fo(!0),f=(h==null?void 0:h.store)??(b==null?void 0:b.store);if(!f)throw new Error(rt(85));const w=yn(m),T=f.useState("isTriggerActive",w),v=f.useState("floatingRootContext"),C=f.useState("isOpenedByTrigger",w),S=f.useState("triggerPopupId",w),k=l.useRef(null),P=iD(),D=wl(!0),I=zo(),N=l.useMemo(()=>I??new qi,[I]),z=Hi(N),U=mo(),{registerTrigger:R,isMountedByThisTrigger:W}=Zi(w,k,f,{payload:y,closeDelay:p,parent:P,floatingTreeRoot:N,floatingNodeId:z,floatingParentNodeId:U,keyboardEventRelay:D==null?void 0:D.relayKeyboardEvent}),O=P.type==="menubar",j=f.useState("disabled"),x=a||j||O&&P.context.disabled,{getButtonProps:F,buttonRef:H}=Ur({disabled:x,native:i});l.useEffect(()=>{!C&&P.type===void 0&&(f.context.allowMouseUpTriggerRef.current=!1)},[f,C,P.type]);const A=l.useRef(null),Q=gt(),M=ke(Z=>{if(!A.current)return;Q.clear(),f.context.allowMouseUpTriggerRef.current=!1;const Fe=Z.target;if(Ce(A.current,Fe)||Ce(f.select("positionerElement"),Fe)||Fe===A.current||Fe!=null&&sf(Fe)===f.select("rootId"))return;const we=tD(A.current);Z.clientX>=we.left-rs&&Z.clientX<=we.right+rs&&Z.clientY>=we.top-rs&&Z.clientY<=we.bottom+rs||N.events.emit("close",{domEvent:Z,reason:Gb})});l.useEffect(()=>{C&&f.select("lastOpenChangeReason")===Ye&&Le(A.current).addEventListener("mouseup",M,{once:!0})},[C,M,f]);const L=O&&P.context.hasSubmenuOpen,_=Ws(v,{enabled:(d??L)&&!x&&P.type!=="context-menu"&&(!O||L&&!W),handleClose:Hs({blockPointerEvents:!O}),mouseOnly:!0,move:!1,restMs:P.type===void 0?c:void 0,delay:{close:p},triggerElementRef:k,externalTree:N,isActiveTrigger:T,isClosing:()=>f.select("transitionStatus")==="ending"}),B=aD(C,f.select("lastOpenChangeReason")),Y=Ji(v,{enabled:!x&&P.type!=="context-menu",event:C&&O?"click":"mousedown",toggle:!0,ignoreMouse:!1,stickIfOpen:P.type===void 0?B:!1}),q=wp(v,{enabled:!x&&L}),J=rD({open:C,enabled:O,mouseDownAction:"open"}),Te=l.useMemo(()=>Tt(q.reference,Y.reference),[q.reference,Y.reference]),Re=f.useState("triggerProps",W),{preFocusGuardRef:K,handlePreFocusGuardFocus:de,handleFocusTargetFocus:le}=af(f,k),De={disabled:x,open:C},me=[A,o,H,R,k],fe=[Te,_??Je,Re,{"aria-haspopup":"menu","aria-controls":S,id:w,onMouseDown:Z=>{if(f.select("open"))return;Q.start(200,()=>{f.context.allowMouseUpTriggerRef.current=!0}),Le(Z.currentTarget).addEventListener("mouseup",M,{once:!0})}},O?{role:"menuitem"}:{},J,g,F],Se=st("button",e,{enabled:!O,stateAttributesMapping:ii,state:De,ref:me,props:fe});return O?u.jsx(nD,{tag:"button",render:n,className:r,style:s,state:De,refs:me,props:fe,stateAttributesMapping:ii}):C?u.jsxs(l.Fragment,{children:[u.jsx(Fo,{ref:K,onFocus:de},`${w}-pre-focus-guard`),u.jsx(l.Fragment,{children:Se},w),u.jsx(Fo,{ref:f.context.triggerFocusTargetRef,onFocus:le},`${w}-post-focus-guard`)]}):u.jsx(l.Fragment,{children:Se},w)});function aD(t,e){const o=gt(),[n,r]=l.useState(!1);return ue(()=>{t&&e==="trigger-hover"?(r(!0),o.start(Gu,()=>{r(!1)})):t||(o.clear(),r(!1))},[t,e,o]),n}function iD(){const t=Qs(!0),e=fo(!0),o=tf();return l.useMemo(()=>o?{type:"menubar",context:o}:t&&!e?{type:"context-menu",context:t}:{type:void 0},[t,e,o])}const lD=l.forwardRef(function(e,o){const{render:n,className:r,style:s,label:a,id:i,nativeButton:m=!1,openOnHover:d=!0,delay:c=100,closeDelay:p=0,disabled:h=!1,...y}=e,g=Pl(),b=Dl(),{store:f}=fo(),w=yn(i),T=f.useState("open"),v=f.useState("floatingRootContext"),C=f.useState("floatingTreeRoot"),S=f.useState("triggerPopupId",w),k=gp(w,f),P=l.useCallback(Y=>{const q=k(Y);return Y!==null&&f.select("open")&&f.select("activeTriggerId")==null&&f.update({activeTriggerId:w,activeTriggerElement:Y,closeDelay:p}),q},[k,p,f,w]),D=l.useRef(null),I=l.useCallback(Y=>{D.current=Y,f.set("activeTriggerElement",Y)},[f]),N=nf();if(!(N!=null&&N.parentMenu))throw new Error(rt(37));f.useSyncedValue("closeDelay",p);const z=N.parentMenu,U=z.useState("itemProps"),R=z.useState("isActive",g.index),W=l.useMemo(()=>({type:"submenu-trigger",setActive(){z.set("activeIndex",g.index)}}),[z,g.index]),O=f.useState("disabled"),j=h||O,{getItemProps:x,itemRef:F}=Ym({closeOnClick:!1,disabled:j,highlighted:R,id:w,store:f,typingRef:z.context.typingRef,nativeButton:m,itemMetadata:W,nodeId:b==null?void 0:b.context.nodeId}),H=f.useState("hoverEnabled"),A=z.useState("allowMouseEnter"),Q=Ws(v,{enabled:H&&d&&!j,handleClose:Hs({blockPointerEvents:!0}),mouseOnly:!0,move:!0,restMs:c,delay:A?{open:c,close:p}:0,triggerElementRef:D,externalTree:C,isClosing:()=>f.select("transitionStatus")==="ending"}),L=Ji(v,{enabled:!j,event:"mousedown",toggle:!d,ignoreMouse:d,stickIfOpen:!1}).reference??Je,V=f.useState("triggerProps",!0);return delete V.id,st("div",e,{state:{disabled:j,highlighted:R,open:T},stateAttributesMapping:al,props:[L,Q,V,U,{"aria-controls":S,tabIndex:T||R?0:-1,onBlur(){R&&z.set("activeIndex",null)}},y,x],ref:[o,g.ref,F,P,I]})});function El({...t}){return u.jsx(rf,{"data-slot":"dropdown-menu",...t})}function Al({...t}){return u.jsx(sD,{"data-slot":"dropdown-menu-trigger",...t})}function Xs({align:t="start",alignOffset:e=0,side:o="bottom",sideOffset:n=4,className:r,...s}){return u.jsx(qx,{children:u.jsx(Yx,{className:"isolate z-50 outline-none",align:t,alignOffset:e,side:o,sideOffset:n,children:u.jsx(Vx,{"data-slot":"dropdown-menu-content",className:Ie("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95",r),...s})})})}function fi({className:t,inset:e,variant:o="default",...n}){return u.jsx(_x,{"data-slot":"dropdown-menu-item","data-inset":e,"data-variant":o,className:Ie("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",t),...n})}function v0({...t}){return u.jsx(eD,{"data-slot":"dropdown-menu-sub",...t})}function C0({className:t,inset:e,children:o,...n}){return u.jsxs(lD,{"data-slot":"dropdown-menu-sub-trigger","data-inset":e,className:Ie("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...n,children:[o,u.jsx(Hd,{className:"ms-auto"})]})}function T0({align:t="start",alignOffset:e=-3,side:o="right",sideOffset:n=0,className:r,...s}){return u.jsx(Xs,{"data-slot":"dropdown-menu-sub-content",className:Ie("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",r),align:t,alignOffset:e,side:o,sideOffset:n,...s})}const lf="session";function cd(t){const e=location.protocol==="https:"?"; Secure":"";document.cookie=`${lf}=${t}; path=/; max-age=${3600*24*7}; SameSite=Lax${e}`}function cD(){document.cookie=`${lf}=; path=/; max-age=0`}const Xo=ml()(fl((t,e)=>({user:null,accessToken:null,refreshToken:null,setTokens:(o,n)=>{cd(o),t({accessToken:o,refreshToken:n})},setUser:o=>t({user:o}),login:(o,n,r)=>{cd(n),t({user:o,accessToken:n,refreshToken:r})},logout:()=>{cD(),t({user:null,accessToken:null,refreshToken:null})},isLoggedIn:()=>e().accessToken!==null,isAdmin:()=>{var o;return((o=e().user)==null?void 0:o.roles.includes("admin"))??!1},isAuthor:()=>{var n;const o=((n=e().user)==null?void 0:n.roles)??[];return o.includes("admin")||o.includes("author")}}),{name:"auth-storage"})),gn=ml()(fl(t=>({currentTenantId:null,builtinTenantable:!1,setTenant:e=>t({currentTenantId:e}),clearTenant:()=>t({currentTenantId:null}),setBuiltinTenantable:e=>t({builtinTenantable:e})}),{name:"tenant-storage",partialize:t=>({currentTenantId:t.currentTenantId})}));class eo extends Error{constructor(e,o,n=400,r="",s={},a=!1,i=null){super(o),this.name="SDKError",this.code=e,this.status=n,this.url=r,this.response=s,this.isAbort=a,this.originalError=i}}function Xe(t){if(!t)return;const e={};for(const[o,n]of Object.entries(t))n!=null&&(e[o]=String(n));return e}class dD{constructor(e,o){this._apiStyle="restful",this._tenantId=null,this._refreshPromise=null,this._beforeSend=null,this._afterSend=null,this._requestControllers=new Map,this._locale=null,this.baseUrl=e,this.authStore=o}get locale(){return this._locale}setLocale(e){this._locale=e}get apiStyle(){return this._apiStyle}set apiStyle(e){this._apiStyle=e}get isRestful(){return this._apiStyle==="restful"}get tenantId(){return this._tenantId}setTenantId(e){this._tenantId=e}set beforeSend(e){this._beforeSend=e}set afterSend(e){this._afterSend=e}cancelRequest(e){var o;(o=this._requestControllers.get(e))==null||o.abort(),this._requestControllers.delete(e)}cancelAllRequests(){for(const e of this._requestControllers.values())e.abort();this._requestControllers.clear()}pathForCreate(e){return this._apiStyle==="restful"?e:`${e}/create`}methodForCreate(){return"POST"}pathForUpdate(e,o){return this._apiStyle==="restful"?`${e}/${o}`:`${e}/${o}/update`}methodForUpdate(){return this._apiStyle==="restful"?"PUT":"POST"}pathForDelete(e,o){return this._apiStyle==="restful"?`${e}/${o}`:`${e}/${o}/delete`}methodForDelete(){return this._apiStyle==="restful"?"DELETE":"POST"}async request(e,o={}){const{method:n="GET",body:r,query:s,headers:a,signal:i,fetch:m,requestKey:d}=o;let c=`${this.baseUrl}${e}`;if(s){const v=new URLSearchParams(s).toString();v&&(c+=(c.includes("?")?"&":"?")+v)}const p=new Headers;r!=null&&!(r instanceof FormData)&&p.set("Content-Type","application/json");const h=this.authStore.token;if(h&&p.set("Authorization",`Bearer ${h}`),this._tenantId&&p.set("X-Tenant-ID",this._tenantId),this._locale&&p.set("Accept-Language",this._locale),a)for(const[v,C]of Object.entries(a))p.set(v,C);let y=i;if(d){this.cancelRequest(d);const v=new AbortController;this._requestControllers.set(d,v),i&&i.addEventListener("abort",()=>v.abort()),y=v.signal}let g={method:n,headers:p,body:r instanceof FormData?r:r!==void 0?JSON.stringify(r):void 0,signal:y};if(this._beforeSend){const v=await this._beforeSend(c,g);c=v.url,g={...g,...v.options}}const b=m??fetch;let f;try{f=await b(c,g)}catch(v){throw d&&this._requestControllers.delete(d),new eo(0,v instanceof Error?v.message:"Network request failed",0,c,{},v instanceof DOMException&&v.name==="AbortError",v instanceof Error?v:null)}if(f.status===401&&this.authStore.isAuthenticated){const v=g.headers instanceof Headers?g.headers.get("Authorization"):null;if(!((v==null?void 0:v.startsWith("Bearer rf_"))??!1)){const S=await this._refresh();if(S){const k=new Headers(g.headers);k.set("Authorization",`Bearer ${S}`),g={...g,headers:k},f=await b(c,g)}}}d&&this._requestControllers.delete(d);let w;try{w=await f.json()}catch(v){throw new eo(0,"Failed to parse response",f.status,c,{},!1,v instanceof Error?v:null)}if(w.code!==0)throw new eo(w.code??0,w.message??"Unknown error",f.status,c,w);let T=w.data;return this._afterSend&&(T=await this._afterSend(f,T)),T}async get(e,o){return this.request(e,{...o,method:"GET"})}async post(e,o,n){return this.request(e,{...n,method:"POST",body:o})}async put(e,o,n){return this.request(e,{...n,method:"PUT",body:o})}async del(e,o){return this.request(e,{...o,method:"DELETE"})}async _refresh(){return this._refreshPromise?this._refreshPromise:(this._refreshPromise=(async()=>{try{const e=this.authStore.refreshToken;if(!e)return null;const n=await(await fetch(`${this.baseUrl}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})})).json();if(n.code!==0)return this.authStore.clear(),null;const r=n.data;return this.authStore.save(r),r.access_token}catch{return this.authStore.clear(),null}finally{this._refreshPromise=null}})(),this._refreshPromise)}}class cf{constructor(){this._token=null,this._refreshToken=null,this._user=null,this._listeners=new Set}get token(){return this._token}get refreshToken(){return this._refreshToken}get user(){return this._user}get isAuthenticated(){return!!this._token}save(e){this._token=e.access_token,this._refreshToken=e.refresh_token,this._user=e.user,this._notify()}clear(){this._token=null,this._refreshToken=null,this._user=null,this._notify()}onChange(e,o=!1){return this._listeners.add(e),o&&e(this._token,this._user),()=>{this._listeners.delete(e)}}exportToStorage(){return JSON.stringify({token:this._token,refreshToken:this._refreshToken,user:this._user})}importFromStorage(e){try{const o=JSON.parse(e);this._token=o.token??null,this._refreshToken=o.refreshToken??null,this._user=o.user??null}catch{}}_notify(){for(const e of this._listeners)e(this._token,this._user)}}class uD extends cf{constructor(e="raisfast_auth",o){super(),this._storageKey=e,this._storage=o??(typeof window<"u"?window.localStorage:null),this._load()}save(e){super.save(e),this._persist()}clear(){super.clear(),this._persist()}_persist(){var e;try{(e=this._storage)==null||e.setItem(this._storageKey,this.exportToStorage())}catch{}}_load(){var e;try{const o=(e=this._storage)==null?void 0:e.getItem(this._storageKey);o&&this.importFromStorage(o)}catch{}}}class pD{constructor(e,o){this.http=e,this.store=o}get token(){return this.store.token}get user(){return this.store.user}get isAuthenticated(){return this.store.isAuthenticated}async login(e,o,n){const r=await this.http.post("/auth/login",{email:e,password:o},n);return this.store.save(r),r}async register(e,o){const n=await this.http.post("/auth/register",e,o);return this.store.save(n),n}async refresh(e){const o=this.store.refreshToken;if(!o)return null;const n=await this.http.post("/auth/refresh",{refresh_token:o},e);return this.store.save(n),n}async logout(e){try{await this.http.post("/auth/logout",void 0,e)}finally{this.store.clear()}}async getConfig(e){return this.http.get("/auth/config",e)}async getMe(e){return this.http.get("/users/me",e)}async updateMe(e,o){return this.http.request(this.http.pathForUpdate("/users","me"),{...o,method:this.http.methodForUpdate(),body:e})}async changePassword(e,o){await this.http.request(this.http.pathForUpdate("/users","me/password"),{...o,method:this.http.methodForUpdate(),body:e})}async requestPasswordReset(e,o){await this.http.post("/auth/forgot-password",{email:e},o)}async confirmPasswordReset(e,o){await this.http.post("/auth/reset-password",e,o)}async setPassword(e,o){await this.http.post("/auth/set-password",e,o)}async verifyEmail(e,o){await this.http.post("/auth/verify-email",e,o)}async resendVerification(e,o){await this.http.post("/auth/resend-verification",{email:e},o)}async sendSmsCode(e,o,n){await this.http.post("/auth/sms/send",{phone:e,purpose:o},n)}async verifySms(e,o){const n=await this.http.post("/auth/sms/verify",e,o);return this.store.save(n),n}async bindPhone(e,o){await this.http.post("/auth/phone/bind",e,o)}getOAuthRedirectURL(e){return`${this.http.baseUrl}/auth/oauth/${e}`}async listOAuthProviders(e){return this.http.get("/auth/oauth/providers",e)}async authWithOAuth(e,o){const n=await this.http.get(`/auth/oauth/${e.provider}/callback`,{...o,query:{code:e.code,redirect_url:e.redirect_url}});return this.store.save(n),n}async listOAuthBindings(e){return this.http.get("/auth/oauth/bindings",e)}async unbindOAuth(e,o){await this.http.request(this.http.pathForDelete("/auth/oauth",`${e}/unbind`),{...o,method:this.http.methodForDelete()})}async listCredentials(e){return this.http.get("/auth/credentials",e)}async bindEmail(e,o){await this.http.post("/auth/credentials/bind-email",e,o)}async deleteCredential(e,o){await this.http.request(this.http.pathForDelete("/auth/credentials",String(e)),{...o,method:this.http.methodForDelete()})}}class mD{constructor(e){this.http=e}async getMe(e){return this.http.get("/users/me",e)}async updateMe(e,o){return this.http.request(this.http.pathForUpdate("/users","me"),{...o,method:this.http.methodForUpdate(),body:e})}async changePassword(e,o){await this.http.request(this.http.pathForUpdate("/users","me/password"),{...o,method:this.http.methodForUpdate(),body:e})}async getUser(e,o){return this.http.get(`/users/${e}`,o)}async listUsers(e=1,o=25,n){return this.http.get("/users",{...n,query:{page:String(e),page_size:String(o)}})}async updateUserRoles(e,o,n){return this.http.request(this.http.pathForUpdate("/users",`${e}/role`),{...n,method:this.http.methodForUpdate(),body:{roles:o}})}}class fD{constructor(e){this.http=e}async list(e,o){return this.http.get("/posts",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/posts/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/posts"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/posts",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/posts",e),{...o,method:this.http.methodForDelete()})}}class hD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/pages",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/pages/${e}`,o)}async sitemap(e){return this.http.get("/pages/sitemap",e)}}class gD{constructor(e){this.http=e}async list(e,o=1,n=25,r){return this.http.get(`/posts/${e}/comments`,{...r,query:{page:String(o),page_size:String(n)}})}async create(e,o,n){var a;const s=((a=this.http.authStore)==null?void 0:a.isAuthenticated)?`/posts/${e}/comments/authed`:`/posts/${e}/comments`;return this.http.post(s,o,n)}async listAll(e=1,o=25,n){return this.http.get("/comments",{...n,query:{page:String(e),page_size:String(o)}})}async updateStatus(e,o,n){await this.http.request(this.http.pathForUpdate("/comments/status",e),{...n,method:this.http.methodForUpdate(),body:{status:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/comments",e),{...o,method:this.http.methodForDelete()})}}class bD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/categories",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/categories/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/categories",e),{...o,method:this.http.methodForDelete()})}}class yD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/tags",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/tags/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/tags"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/tags",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/tags",e),{...o,method:this.http.methodForDelete()})}}class wD{constructor(e){this.http=e}async upload(e,o){const n=new FormData;return n.append("file",e),this.http.request("/media/upload",{...o,method:"POST",body:n})}async list(e=1,o=25,n){return this.http.get("/media",{...n,query:{page:String(e),page_size:String(o)}})}async stats(e){return this.http.get("/media/stats",e)}async delete(e,o){await this.http.request(this.http.pathForDelete("/media",e),{...o,method:this.http.methodForDelete()})}getFileURL(e,o,n){const r=this.http.baseUrl.replace("/api/v1",""),s=e[o];if(typeof s!="string")return"";if(s.startsWith("http"))return s;let a=`${r}/uploads/${s}`;return n!=null&&n.thumb&&(a+=`?thumb=${encodeURIComponent(n.thumb)}`),a}}class vD{constructor(e){this.http=e}async check(e){return this.http.get("/health",e)}async liveness(e){const o=this.http.baseUrl.replace(/\/api\/v\d+\/?$/,"");return(await fetch(`${o}/healthz`)).json()}async readiness(e){const o=this.http.baseUrl.replace(/\/api\/v\d+\/?$/,"");return(await fetch(`${o}/readyz`)).json()}}class CD{constructor(e){this.http=e}async list(e){return this.http.get("/wallets",e)}async get(e,o){return this.http.get(`/wallets/${e}`,o)}async listTransactions(e,o,n){return this.http.get(`/wallets/${e}/transactions`,{...n,query:Xe(o)})}async listAllTransactions(e,o){return this.http.get("/wallets/transactions",{...o,query:Xe(e)})}}class TD{constructor(e){this.baseUrl=e}subscribe(e){const o=e?`${this.baseUrl}/events?filter=${encodeURIComponent(e)}`:`${this.baseUrl}/events`;return new EventSource(o)}}class kD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/orders",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/orders/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/orders"),{...o,method:this.http.methodForCreate(),body:e})}async cancel(e,o){await this.http.request(this.http.pathForUpdate("/orders",e),{...o,method:this.http.methodForUpdate()})}async confirmReceipt(e,o){await this.http.post(`/orders/${e}/confirm`,void 0,o)}}class SD{constructor(e){this.http=e}async listAvailableChannels(e,o){return this.http.get("/payment/channels/available",{...o,query:Xe(e)})}async listOrders(e=1,o=25,n){return this.http.get("/payment/orders",{...n,query:{page:String(e),page_size:String(o)}})}async createOrder(e,o){return this.http.request(this.http.pathForCreate("/payment/orders"),{...o,method:this.http.methodForCreate(),body:e})}async getOrder(e,o){return this.http.get(`/payment/orders/${e}`,o)}async cancelOrder(e,o){await this.http.post(`/payment/orders/${e}/cancel`,void 0,o)}async listTransactions(e,o){return this.http.get(`/payment/orders/${e}/transactions`,o)}async listRefunds(e,o){return this.http.get(`/payment/orders/${e}/refunds`,o)}}class xD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/products",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/products/${e}`,o)}}class DD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/product-categories",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/product-categories/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/product-categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/product-categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/product-categories",e),{...o,method:this.http.methodForDelete()})}}class PD{constructor(e){this.http=e}async list(e,o=1,n=25,r){return this.http.get(`/products/${e}/comments`,{...r,query:{page:String(o),page_size:String(n)}})}async getStats(e,o){return this.http.get(`/products/${e}/comments/stats`,o)}async create(e,o,n){return this.http.request(this.http.pathForCreate(`/products/${e}/comments`),{...n,method:this.http.methodForCreate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/product_comments",e),{...o,method:this.http.methodForDelete()})}}class RD{constructor(e){this.http=e}async list(e,o){return this.http.get(`/products/${e}/variants`,o)}}class ED{constructor(e){this.http=e}async list(e){return this.http.get("/cart",e)}async add(e,o){await this.http.request(this.http.pathForCreate("/cart"),{...o,method:this.http.methodForCreate(),body:e})}async updateItem(e,o,n){await this.http.request(this.http.pathForUpdate("/cart",e),{...n,method:this.http.methodForUpdate(),body:o})}async removeItem(e,o){await this.http.request(this.http.pathForDelete("/cart",e),{...o,method:this.http.methodForDelete()})}async clear(e){await this.http.request("/cart",{...e,method:"DELETE"})}async checkout(e){return this.http.post("/cart/checkout",void 0,e)}}class AD{constructor(e){this.http=e}async list(e=1,o=20,n){return this.http.get("/favorites",{...n,query:{page:String(e),page_size:String(o)}})}async status(e,o){return this.http.get(`/favorites/${e}`,o)}async add(e,o){return this.http.post(`/favorites/${e}`,void 0,o)}async remove(e,o){return this.http.del(`/favorites/${e}`,o)}}class ND{constructor(e){this.http=e}async list(e){return this.http.get("/user/addresses",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/user/addresses"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/user/addresses",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/user/addresses",e),{...o,method:this.http.methodForDelete()})}}class ID{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/audit",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/audit/${e}`,o)}}class OD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/categories",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/categories",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/categories/batch",e,o)}}class FD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/comments",{...o,query:Xe(e)})}async updateStatus(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/comments/status",e),{...n,method:this.http.methodForUpdate(),body:{status:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/comments",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/comments/batch",e,o)}}class MD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/content-types",e)}async get(e,o){return this.http.get(`/admin/content-types/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/content-types"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/content-types",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/content-types",e),{...o,method:this.http.methodForDelete()})}}class UD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/coupons",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/coupons/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/coupons"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/coupons",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/coupons",e),{...o,method:this.http.methodForDelete()})}}class LD{constructor(e){this.http=e}async listHandlers(e){return await this.http.get("/admin/cron-handlers",e)}async list(e,o){return this.http.get("/admin/crons",{...o,query:Xe(e)})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/crons"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/crons/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/crons",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/crons",e),{...o,method:this.http.methodForDelete()})}async toggle(e,o,n){return this.http.post(`/admin/crons/${e}/toggle`,{enabled:o},n)}async listLogs(e,o){return this.http.get("/admin/crons/logs",{...o,query:Xe(e)})}async cleanupLogs(e){await this.http.post("/admin/crons/logs/cleanup",{},e)}async batch(e,o){return this.http.post("/admin/crons/batch",e,o)}}class jD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/currencies",e)}async get(e,o){return this.http.get(`/admin/currencies/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/currencies"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/currencies",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/currencies",e),{...o,method:this.http.methodForDelete()})}}class _D{constructor(e){this.http=e}async listChannels(e,o){return this.http.get("/admin/integration/channels",{...o,query:Xe(e)})}async getChannel(e,o){return this.http.get(`/admin/integration/channels/${e}`,o)}async createChannel(e,o){return this.http.post("/admin/integration/channels",e,o)}async updateChannel(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/integration/channels",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteChannel(e,o){await this.http.request(this.http.pathForDelete("/admin/integration/channels",e),{...o,method:this.http.methodForDelete()})}async channelsHealth(e){return this.http.get("/admin/integration/channels/health",e)}async channelHealth(e,o){return this.http.get(`/admin/integration/channels/${e}/health`,o)}async testMapping(e,o,n){return this.http.post(`/admin/integration/channels/${e}/test-mapping`,o,n)}async testConnection(e,o){return this.http.post(`/admin/integration/channels/${e}/test-connection`,void 0,o)}async listReceipts(e,o){return this.http.get("/admin/integration/receipts",{...o,query:Xe(e)})}async getReceipt(e,o){return this.http.get(`/admin/integration/receipts/${e}`,o)}async getTrace(e,o){return this.http.get(`/admin/integration/receipts/${e}/trace`,o)}async replay(e,o,n){return this.http.post(`/admin/integration/receipts/${e}/replay`,o??{},n)}async listApiClients(e){return this.http.get("/admin/integration/api-clients",e)}async getApiClient(e,o){return this.http.get(`/admin/integration/api-clients/${e}`,o)}async createApiClient(e,o){return this.http.post("/admin/integration/api-clients",e,o)}async updateApiClient(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/integration/api-clients",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteApiClient(e,o){await this.http.request(this.http.pathForDelete("/admin/integration/api-clients",e),{...o,method:this.http.methodForDelete()})}async testCall(e,o,n){return this.http.post(`/admin/integration/api-clients/${e}/test-call`,o,n)}async oauthStart(e,o){return this.http.post(`/admin/integration/api-clients/${e}/oauth/start`,{},o)}async oauthStatus(e,o){return this.http.get(`/admin/integration/api-clients/${e}/oauth/status`,o)}async oauthRevoke(e,o){return this.http.post(`/admin/integration/api-clients/${e}/oauth/revoke`,{},o)}async listEgressLog(e,o){return this.http.get("/admin/integration/egress-log",{...o,query:Xe(e)})}}class zD{constructor(e){this.http=e}async upload(e,o){const n=new FormData;return n.append("file",e),this.http.request("/admin/media/upload",{...o,method:"POST",body:n})}async list(e=1,o=25,n){return this.http.get("/admin/media",{...n,query:{page:String(e),page_size:String(o)}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/media",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/media/batch",e,o)}}class BD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/options",e)}async get(e,o){return this.http.get(`/admin/options/${e}`,o)}async set(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/options",e),{...n,method:this.http.methodForUpdate(),body:{value:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/options",e),{...o,method:this.http.methodForDelete()})}async batchUpdate(e,o){await this.http.request(this.http.pathForUpdate("/admin/options",""),{...o,method:this.http.methodForUpdate(),body:{options:e}})}async getPublic(e){return this.http.get("/options/public",e)}}class VD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/orders",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/orders/${e}`,o)}async pay(e,o){await this.http.post(`/admin/orders/${e}/pay`,void 0,o)}async ship(e,o,n){await this.http.post(`/admin/orders/${e}/ship`,o,n)}async cancel(e,o){await this.http.post(`/admin/orders/${e}/cancel`,void 0,o)}async refund(e,o){await this.http.post(`/admin/orders/${e}/refund`,void 0,o)}async updateRemark(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/orders",`${e}/remark`),{...n,method:this.http.methodForUpdate(),body:o})}async stats(e){return this.http.get("/admin/orders/stats",e)}}class WD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/pages",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/pages/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/pages"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/pages",e),{...n,method:this.http.methodForUpdate(),body:o})}async updateStatus(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/pages/status",e),{...n,method:this.http.methodForUpdate(),body:{status:o}})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/pages",e),{...o,method:this.http.methodForDelete()})}async reorder(e,o){await this.http.request(this.http.pathForUpdate("/admin/pages","reorder"),{...o,method:this.http.methodForUpdate(),body:{items:e}})}async batch(e,o){return this.http.post("/admin/pages/batch",e,o)}}class qD{constructor(e){this.http=e}async listChannels(e=1,o=25,n){return this.http.get("/admin/payment/channels",{...n,query:{page:String(e),page_size:String(o)}})}async getChannel(e,o){return this.http.get(`/admin/payment/channels/${e}`,o)}async createChannel(e,o){return this.http.request(this.http.pathForCreate("/admin/payment/channels"),{...o,method:this.http.methodForCreate(),body:e})}async updateChannel(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/payment/channels",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteChannel(e,o){await this.http.request(this.http.pathForDelete("/admin/payment/channels",e),{...o,method:this.http.methodForDelete()})}async listOrders(e,o){return this.http.get("/admin/payment/orders",{...o,query:Xe(e)})}async getOrder(e,o){return this.http.get(`/admin/payment/orders/${e}`,o)}async refundOrder(e,o,n){return this.http.post(`/admin/payment/orders/${e}/refund`,o,n)}async listTransactions(e,o){return this.http.get("/admin/payment/transactions",{...o,query:Xe(e)})}async listRefunds(e,o){return this.http.get("/admin/payment/refunds",{...o,query:Xe(e)})}}class HD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/plugins",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/plugins/${e}`,o)}async enable(e,o){await this.http.post(`/admin/plugins/${e}/enable`,{},o)}async disable(e,o){await this.http.post(`/admin/plugins/${e}/disable`,{},o)}async reload(e,o){await this.http.post(`/admin/plugins/${e}/reload`,{},o)}async unload(e,o){await this.http.request(this.http.pathForDelete("/admin/plugins",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/plugins/batch",e,o)}}class $D{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/posts",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/posts/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/posts"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/posts",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/posts",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/posts/batch",e,o)}}class KD{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/products",{...o,query:Xe(e)})}async get(e,o){return this.http.get(`/admin/products/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/products"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/products",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/products",e),{...o,method:this.http.methodForDelete()})}}class JD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/product-categories",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/product-categories/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/product-categories"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/product-categories",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/product-categories",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/product-categories/batch",e,o)}}class GD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/product_comments",{...n,query:{page:String(e),page_size:String(o)}})}async updateStatus(e,o,n){return this.http.request(`/admin/product_comments/${e}/status`,{...n,method:"PUT",body:o})}async reply(e,o,n){return this.http.request(`/admin/product_comments/${e}/reply`,{...n,method:"PUT",body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/product_comments",e),{...o,method:this.http.methodForDelete()})}}class YD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/product-variants",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/product-variants"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/product-variants",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/product-variants",e),{...o,method:this.http.methodForDelete()})}}class QD{constructor(e){this.http=e}async listRoles(e){return this.http.get("/admin/rbac/roles",e)}async createRole(e,o){return this.http.request(this.http.pathForCreate("/admin/rbac/roles"),{...o,method:this.http.methodForCreate(),body:e})}async updateRole(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/rbac/roles",e),{...n,method:this.http.methodForUpdate(),body:o})}async deleteRole(e,o){await this.http.request(this.http.pathForDelete("/admin/rbac/roles",e),{...o,method:this.http.methodForDelete()})}async batchRoles(e,o){return this.http.post("/admin/rbac/roles/batch",e,o)}async getPermissions(e,o){return this.http.get(`/admin/rbac/roles/${e}/permissions`,o)}async setPermissions(e,o,n){await this.http.request(this.http.pathForUpdate("/admin/rbac/roles",`${e}/permissions`),{...n,method:this.http.methodForUpdate(),body:o})}}class XD{constructor(e){this.http=e}async list(e){return this.http.get("/admin/reusable-blocks",e)}async get(e,o){return this.http.get(`/admin/reusable-blocks/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/reusable-blocks"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/reusable-blocks",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/reusable-blocks",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/reusable-blocks/batch",e,o)}}class ZD{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/shipping-templates",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/shipping-templates/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/shipping-templates"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/shipping-templates",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/shipping-templates",e),{...o,method:this.http.methodForDelete()})}async calculate(e,o){return this.http.request("/admin/shipping-templates/calculate",{...o,method:"POST",body:e})}}class eP{constructor(e){this.http=e}async overview(e){return this.http.get("/admin/stats",e)}async content(e,o){return this.http.get(`/admin/stats/content/${e}`,o)}async trends(e,o=30,n){return this.http.get("/admin/stats/trends",{...n,query:Xe({table:e,days:o})})}}class tP{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/tags",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/tags"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/tags",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/tags",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/tags/batch",e,o)}}class oP{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/tenants",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/tenants/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/tenants"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/tenants",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/tenants",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/tenants/batch",e,o)}}class nP{constructor(e){this.http=e}async list(e){return this.http.get("/tokens",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/tokens"),{...o,method:this.http.methodForCreate(),body:e})}async delete(e,o){await this.http.request(this.http.pathForDelete("/tokens",e),{...o,method:this.http.methodForDelete()})}}class rP{constructor(e){this.http=e}async list(e,o){return this.http.get(`/admin/users/${e}/addresses`,o)}}class sP{constructor(e){this.http=e}async create(e,o){return this.http.post("/admin/users",e,o)}async list(e=1,o=25,n){return this.http.get("/admin/users",{...n,query:{page:String(e),page_size:String(o)}})}async get(e,o){return this.http.get(`/admin/users/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/users",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/users",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/users/batch",e,o)}}class aP{constructor(e){this.http=e}async listWallets(e,o){return this.http.get("/admin/wallets",{...o,query:Xe(e)})}async listTransactions(e,o){return this.http.get("/admin/wallets/transactions",{...o,query:Xe(e)})}async credit(e,o){return this.http.post("/admin/wallets/credit",e,o)}async debit(e,o){return this.http.post("/admin/wallets/debit",e,o)}async userTransactions(e,o,n){return this.http.get(`/admin/wallets/${e}/transactions`,{...n,query:Xe(o)})}async userCurrencyTransactions(e,o,n,r){return this.http.get(`/admin/wallets/${e}/${o}/transactions`,{...r,query:Xe(n)})}async reversal(e,o,n){return this.http.post(`/admin/wallets/${e}/reversal`,o,n)}}class iP{constructor(e){this.http=e}async list(e=1,o=25,n){return this.http.get("/admin/webhooks",{...n,query:{page:String(e),page_size:String(o)}})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/webhooks"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/webhooks/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/webhooks",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/webhooks",e),{...o,method:this.http.methodForDelete()})}async batch(e,o){return this.http.post("/admin/webhooks/batch",e,o)}}class lP{constructor(e){this.http=e}async list(e){return this.http.get("/admin/workflows",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/workflows"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/workflows/${e}`,o)}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/workflows",e),{...o,method:this.http.methodForDelete()})}async start(e,o,n){return this.http.post(`/admin/workflows/${e}/start`,o??{},n)}async listInstances(e=1,o=25,n){return this.http.get("/admin/workflows/instances",{...n,query:{page:String(e),page_size:String(o)}})}async getInstance(e,o){return this.http.get(`/admin/workflows/instances/${e}`,o)}async executeStep(e,o,n){return this.http.post(`/admin/workflows/instances/${e}/execute`,o,n)}async cancelInstance(e,o){await this.http.post(`/admin/workflows/instances/${e}/cancel`,{},o)}async getStepLogs(e,o){return this.http.get(`/admin/workflows/instances/${e}/logs`,o)}}class cP{constructor(e){this.http=e,this.users=new sP(e),this.posts=new $D(e),this.pages=new WD(e),this.comments=new FD(e),this.categories=new OD(e),this.tags=new tP(e),this.media=new zD(e),this.reusableBlocks=new XD(e),this.wallets=new aP(e),this.currencies=new jD(e),this.plugins=new HD(e),this.contentTypes=new MD(e),this.tenants=new oP(e),this.rbac=new QD(e),this.options=new BD(e),this.webhooks=new iP(e),this.audit=new ID(e),this.crons=new LD(e),this.tokens=new nP(e),this.workflows=new lP(e),this.stats=new eP(e),this.orders=new VD(e),this.payment=new qD(e),this.products=new KD(e),this.productCategories=new JD(e),this.productVariants=new YD(e),this.productComments=new GD(e),this.coupons=new UD(e),this.shippingTemplates=new ZD(e),this.userAddresses=new rP(e),this.integration=new _D(e)}async listRoutes(e){return this.http.get("/routes",e)}async listResources(e){return this.http.get("/admin/resources",e)}}class dd{constructor(e,o,n=!1,r){this.http=e,this.name=o,this.apiToken=r,this.prefix=n?`/admin/cms/${o}`:`/cms/${o}`}get authHeaders(){return this.apiToken?{Authorization:`Bearer ${this.apiToken}`}:void 0}withAuth(e){return this.apiToken?{...e??{},headers:{...this.authHeaders,...e==null?void 0:e.headers}}:e}async getList(e=1,o=25,n){const r={page:String(e),page_size:String(o)};if(n!=null&&n.sort&&(r.sort=n.sort),n!=null&&n.filter&&(r.filter=n.filter),n!=null&&n.filterCond)for(const[s,a]of Object.entries(n.filterCond))a!=null&&(r[s]=Array.isArray(a)?a.join(","):String(a));return n!=null&&n.search&&(r.search=n.search),n!=null&&n.fields&&(r.fields=n.fields),n!=null&&n.status&&(r.status=n.status),n!=null&&n.expand&&(r.expand=n.expand),this.http.get(this.prefix,{...this.withAuth(n),query:r})}async getFullList(e){const o=[];let n=1;for(;;){const r=await this.getList(n,200,e);if(o.push(...r.items),o.length>=r.total)break;n++}return o}async getOne(e,o){return this.http.get(`${this.prefix}/${e}`,this.withAuth(o))}async getFirstListItem(e,o){const n=await this.getList(1,1,{...o,filter:e});if(n.items.length===0)throw new eo(404,`No item found matching filter: ${e}`,404);return n.items[0]}async create(e,o){return this.http.request(this.http.pathForCreate(this.prefix),{...this.withAuth(o),method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate(this.prefix,e),{...this.withAuth(n),method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete(this.prefix,e),{...this.withAuth(o),method:this.http.methodForDelete()})}async upload(e,o,n="file",r){const s=new FormData;return s.append(n,o),this.http.request(`${this.prefix}/${e}`,{...this.withAuth(r),method:"POST",body:s})}async listRevisions(e,o=1,n=25,r){return this.http.get(`/admin/cms/${this.name}/${e}/revisions`,{...this.withAuth(r),query:{page:String(o),page_size:String(n)}})}async getRevision(e,o,n){return this.http.get(`/admin/cms/${this.name}/${e}/revisions/${o}`,this.withAuth(n))}async restoreRevision(e,o,n){return this.http.post(`/admin/cms/${this.name}/${e}/revisions/${o}/restore`,{},this.withAuth(n))}async diffRevisions(e,o,n,r){return this.http.get(`/admin/cms/${this.name}/${e}/revisions/${o}/diff/${n}`,this.withAuth(r))}}class dP{constructor(e,o){this.authStore=(o==null?void 0:o.authStore)??new uD,this.http=new dD(e,this.authStore),this.auth=new pD(this.http,this.authStore),this.admin=new cP(this.http),this.users=new mD(this.http),this.media=new wD(this.http),this.health=new vD(this.http),this.posts=new fD(this.http),this.categories=new bD(this.http),this.tags=new yD(this.http),this.comments=new gD(this.http),this.pages=new hD(this.http),this.wallets=new CD(this.http),this.events=new TD(this.http.baseUrl),this.orders=new kD(this.http),this.payment=new SD(this.http),this.products=new xD(this.http),this.productCategories=new DD(this.http),this.productVariants=new RD(this.http),this.productComments=new PD(this.http),this.userAddresses=new ND(this.http),this.cart=new ED(this.http),this.productFavorites=new AD(this.http)}async init(){var e;try{const n=await(await fetch(`${this.http.baseUrl}/info`)).json();n.code===0&&((e=n.data)!=null&&e.api_style)&&(this.http.apiStyle=n.data.api_style)}catch{}}ct(e,o){return new dd(this.http,e,!1,o)}adminCt(e,o){return new dd(this.http,e,!0,o)}setTenantId(e){this.http.setTenantId(e)}setLocale(e){this.http.setLocale(e)}set beforeSend(e){this.http.beforeSend=e}set afterSend(e){this.http.afterSend=e}cancelRequest(e){this.http.cancelRequest(e)}cancelAllRequests(){this.http.cancelAllRequests()}async send(e,o){return this.http.request(e,o)}async single(e,o){const r=await this.ct(e).getList(1,1,o);if(r.items.length===0)throw new eo(404,`No ${e} item found`,404);return r.items[0]}getRssFeedURL(){return`${this.http.baseUrl.replace("/api/v1","")}/feed.xml`}}function Nl(t,e){const o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(o)}function Il(t){return t==null?"":typeof t=="string"?t:typeof t=="boolean"?t?"true":"false":typeof t=="number"||typeof t=="bigint"?String(t):Array.isArray(t)?t.map(Il).join(", "):JSON.stringify(t)}function uP(t){return/[",\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t}function k0(t,e){const o=new Blob([JSON.stringify(t,null,2)],{type:"application/json"});Nl(o,e)}function S0(t,e,o,n){const r=e.map(o).join(","),s=t.map(i=>e.map(m=>uP(Il(i[m]))).join(",")),a=new Blob([`\uFEFF${[r,...s].join(` `)}`],{type:"text/csv;charset=utf-8"});Nl(a,n)}async function x0(t,e,o,n){const{default:r}=await pe(async()=>{const{default:a}=await import("./index-CTXUgEVK.js");return{default:a}},[]),s=[e.map(o),...t.map(a=>e.map(i=>Il(a[i])))];await r(s).toFile(n)}class pP extends cf{constructor(){if(super(),typeof window<"u"){const e=Xo.getState();e.accessToken&&(this._token=e.accessToken,this._refreshToken=e.refreshToken)}}save(e){this._token=e.access_token,this._refreshToken=e.refresh_token,this._user=e.user,this._notify();const o=Xo.getState();if(o.setTokens(e.access_token,e.refresh_token),e.user){const n=e.user,r=Xo.getState().user,s=Array.isArray(n.roles)?n.roles:[];o.setUser({id:String(n.id),email:typeof n.email=="string"?n.email:(r==null?void 0:r.email)??null,username:String(n.username??""),roles:s,avatar:typeof n.avatar=="string"?n.avatar:null,bio:typeof n.bio=="string"?n.bio:null})}}clear(){super.clear(),Xo.getState().logout(),typeof window<"u"&&!window.location.pathname.startsWith("/admin/auth/")&&(window.location.href="/admin/auth/login?expired=1")}}const Ol="/api/v1",jt=new dP(Ol,{authStore:new pP});typeof window<"u"&&(jt.setTenantId(gn.getState().currentTenantId),jt.setLocale(mn.getState().locale),gn.subscribe(t=>{jt.setTenantId(t.currentTenantId)}),mn.subscribe(t=>{jt.setLocale(t.locale)}));async function D0(t,e,o){const n=`${Ol}${t}?format=${e}`,r={"Content-Type":"application/octet-stream"},s=jt.authStore.token;s&&(r.Authorization=`Bearer ${s}`);const a=gn.getState().currentTenantId;a&&(r["X-Tenant-ID"]=a);const i=mn.getState().locale;i&&(r["Accept-Language"]=i);let m;try{m=await fetch(n,{method:"POST",headers:r,body:o})}catch(c){throw new eo(0,c instanceof Error?c.message:"Network request failed",0,n,{})}let d;try{d=await m.json()}catch{throw new eo(0,"Failed to parse response",m.status,n,{})}if(d.code!==0)throw new eo(d.code??0,d.message??"Unknown error",m.status,n,d);return d.data}async function P0(t,e,o){const n=`${Ol}${t}?format=${e}`,r={},s=jt.authStore.token;s&&(r.Authorization=`Bearer ${s}`);const a=gn.getState().currentTenantId;a&&(r["X-Tenant-ID"]=a);const i=mn.getState().locale;i&&(r["Accept-Language"]=i);let m;try{m=await fetch(n,{headers:r})}catch(c){throw new eo(0,c instanceof Error?c.message:"Network request failed",0,n,{})}if(!m.ok){let c=`Export failed (${m.status})`;try{const p=await m.json();p!=null&&p.message&&(c=p.message)}catch{}throw new eo(m.status,c,m.status,n,{})}const d=await m.blob();return Nl(d,o),{size:d.size}}function mP(){const[t,e]=l.useState(!1),{isAdmin:o}=Xo(),n=l.useRef(localStorage.getItem("notifications_last_seen")),r=_d(),{data:s,isLoading:a}=Ha({queryKey:["notifications"],queryFn:async()=>{try{return await jt.admin.audit.list(1,20)}catch{return null}},enabled:o(),refetchInterval:o()?15e3:!1,retry:!1}),i=(s==null?void 0:s.items)??[],m=n.current?i.filter(p=>p.created_at>n.current).length:i.length>0?1:0;l.useEffect(()=>{if(t&&i.length>0){const p=i[0].created_at;n.current=p,localStorage.setItem("notifications_last_seen",p),r.invalidateQueries({queryKey:["notifications"]})}},[t,i,r]);function d(p){const h=new Date(p),g=new Date().getTime()-h.getTime(),b=Math.floor(g/6e4);if(b<1)return"just now";if(b<60)return`${b}m ago`;const f=Math.floor(b/60);if(f<24)return`${f}h ago`;const w=Math.floor(f/24);return w<7?`${w}d ago`:h.toLocaleDateString()}function c(p){return p.includes("delete")||p.includes("remove")?"text-red-500":p.includes("create")||p.includes("register")?"text-green-500":p.includes("update")||p.includes("login")?"text-blue-500":"text-muted-foreground"}return u.jsxs(El,{open:t,onOpenChange:e,children:[u.jsxs(Al,{className:"relative inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:[u.jsx(tc,{className:"size-4"}),m>0&&u.jsx("span",{className:"absolute -top-0.5 -right-0.5 flex size-3.5 items-center justify-center rounded-full bg-destructive text-[9px] font-bold text-white",children:m>9?"9+":m})]}),u.jsxs(Xs,{align:"end",className:"w-80 p-0",children:[u.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[u.jsx("span",{className:"text-sm font-semibold",children:"Notifications"}),m>0&&u.jsxs("span",{className:"text-xs text-muted-foreground",children:[m," new"]})]}),u.jsx("div",{className:"max-h-80 overflow-y-auto overscroll-contain",children:a?u.jsx("div",{className:"space-y-3 p-4",children:Array.from({length:5}).map((p,h)=>u.jsxs("div",{className:"flex gap-3",children:[u.jsx(Ea,{className:"size-2 mt-2 rounded-full shrink-0"}),u.jsxs("div",{className:"flex-1 space-y-1.5",children:[u.jsx(Ea,{className:"h-3.5 w-3/4"}),u.jsx(Ea,{className:"h-3 w-1/3"})]})]},h))}):i.length===0?u.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[u.jsx(tc,{className:"size-8 mb-2 opacity-30"}),u.jsx("p",{className:"text-sm",children:"No notifications"})]}):u.jsx("div",{className:"divide-y",children:i.map(p=>{const h=!n.current||p.created_at>n.current;return u.jsxs("div",{className:`flex gap-3 px-4 py-3 transition-colors hover:bg-muted/50 cursor-default ${h?"bg-muted/30":""}`,children:[u.jsx("div",{className:`mt-1.5 size-2 rounded-full shrink-0 ${h?"bg-primary":"bg-transparent"}`}),u.jsxs("div",{className:"flex-1 min-w-0",children:[u.jsxs("p",{className:"text-sm leading-snug",children:[u.jsx("span",{className:c(p.action),children:p.action}),u.jsx("span",{className:"text-muted-foreground",children:" on "}),u.jsx("span",{className:"font-medium",children:p.subject})]}),p.detail!=null&&u.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 truncate",children:typeof p.detail=="string"?p.detail:JSON.stringify(p.detail)}),u.jsx("p",{className:"text-[11px] text-muted-foreground/60 mt-1",children:d(p.created_at)})]})]},p.id)})})})]})]})}const fP=[{value:"en",label:"English"},{value:"zh",label:"中文"},{value:"ja",label:"日本語"},{value:"ko",label:"한국어"},{value:"es",label:"Español"},{value:"pt",label:"Português"},{value:"de",label:"Deutsch"},{value:"fr",label:"Français"},{value:"ar",label:"العربية"}];function hP(){const{locale:t,setLocale:e}=mn();return u.jsxs(El,{children:[u.jsx(Al,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:u.jsx(_g,{className:"size-4"})}),u.jsx(Xs,{align:"end",className:"min-w-28",children:fP.map(o=>u.jsxs(fi,{className:"text-sm gap-2",onClick:()=>e(o.value),children:[u.jsx("span",{className:t===o.value?"size-2 rounded-full bg-primary":"size-2"}),o.label]},o.value))})]})}const df=l.createContext(void 0);function Lr(t){const e=l.useContext(df);if(e===void 0&&!t)throw new Error(rt(47));return e}function gP(){return{...Bs(),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,stickIfOpen:!0,nested:!1,openOnHover:!1,closeDelay:0,hasViewport:!1}}const bP={...Vs,disabled:oe(t=>t.disabled),instantType:oe(t=>t.instantType),openMethod:oe(t=>t.openMethod),openChangeReason:oe(t=>t.openChangeReason),modal:oe(t=>t.modal),focusManagerModal:oe(t=>t.focusManagerModal),stickIfOpen:oe(t=>t.stickIfOpen),titleElementId:oe(t=>t.titleElementId),descriptionElementId:oe(t=>t.descriptionElementId),openOnHover:oe(t=>t.openOnHover),closeDelay:oe(t=>t.closeDelay),hasViewport:oe(t=>t.hasViewport)};class Fl extends Ar{constructor(o,n,r=!1){const s={...gP(),...o},a=new er;s.open&&(o==null?void 0:o.mounted)===void 0&&(s.mounted=!0),s.floatingRootContext=el(a,n,r);super(s,{popupRef:l.createRef(),backdropRef:l.createRef(),internalBackdropRef:l.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:l.createRef(),beforeContentFocusGuardRef:l.createRef(),stickIfOpenTimeout:new Mt,triggerElements:a},bP);_e(this,"setOpen",(o,n)=>{var d,c;const r=n.reason===Ye,s=n.reason===uo&&n.event.detail===0,a=!o&&(n.reason===Rr||n.reason==null);n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)};const i=this.select("activeTriggerId");if(!o&&n.reason===Pu&&n.trigger==null&&i!=null&&(n.trigger=this.context.triggerElements.getById(i)??this.select("activeTriggerElement")??void 0),(c=(d=this.context).onOpenChange)==null||c.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const p={open:o,openChangeReason:n.reason};Xi(p,o,n.trigger),this.update(p)};r?(this.set("stickIfOpen",!0),this.context.stickIfOpenTimeout.start(Gu,()=>{this.set("stickIfOpen",!1)}),_t.flushSync(m)):m(),s||a?this.set("instantType",s?"click":"dismiss"):n.reason===dn?this.set("instantType","focus"):this.set("instantType",void 0)});_e(this,"disposeEffect",()=>this.context.stickIfOpenTimeout.disposeEffect())}static useStore(o,n){const{store:r,internalStore:s}=Qi(o,(a,i)=>new Fl(n,a,i));return l.useEffect(()=>s==null?void 0:s.disposeEffect(),[s]),r}}function ud({props:t}){const{children:e,open:o,defaultOpen:n=!1,onOpenChange:r,onOpenChangeComplete:s,modal:a=!1,handle:i,triggerId:m,defaultTriggerId:d=null}=t,c=Fl.useStore(i==null?void 0:i.store,{modal:a,open:n,openProp:o,activeTriggerId:d,triggerIdProp:m});Ps(()=>{o===void 0&&c.state.open===!1&&n===!0&&c.update({open:!0,activeTriggerId:d})}),c.useControlledProp("openProp",o),c.useControlledProp("triggerIdProp",m);const p=c.useState("open"),h=c.useState("mounted"),y=c.useState("payload"),g=mo()!=null;c.useContextCallback("onOpenChange",r),c.useContextCallback("onOpenChangeComplete",s),bp(c,p),js(c);const{forceUnmount:b}=_s(p,c,()=>{c.update({stickIfOpen:!0,openChangeReason:null})});c.useSyncedValues({modal:a,nested:g}),l.useEffect(()=>{p||c.context.stickIfOpenTimeout.clear()},[c,p]);const f=l.useCallback(()=>{c.setOpen(!1,Oe(Os))},[c]);l.useImperativeHandle(t.actionsRef,()=>({unmount:b,close:f}),[b,f]);const w=p||h,T=l.useMemo(()=>({store:c}),[c]);return u.jsxs(df.Provider,{value:T,children:[w&&u.jsx(wP,{store:c,modal:a}),typeof e=="function"?e({payload:y}):e]})}function yP(t){return Lr(!0)?u.jsx(ud,{props:t}):u.jsx(rp,{children:u.jsx(ud,{props:t})})}function wP({store:t,modal:e}){const o=t.useState("floatingRootContext"),n=Ms(o,{outsidePressEvent:{mouse:e==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}}),r=n.reference??Je,s=n.trigger??Je,a=l.useMemo(()=>Tt(Zn,n.floating),[n.floating]);return zs(t,{activeTriggerProps:r,inactiveTriggerProps:s,popupProps:a}),null}const vP=300,CP=l.forwardRef(function(e,o){const{render:n,className:r,style:s,disabled:a=!1,nativeButton:i=!0,handle:m,payload:d,openOnHover:c=!1,delay:p=vP,closeDelay:h=0,id:y,...g}=e,b=Lr(!0),f=(m==null?void 0:m.store)??(b==null?void 0:b.store);if(!f)throw new Error(rt(74));const w=yn(y),T=f.useState("isTriggerActive",w),v=f.useState("floatingRootContext"),C=f.useState("isOpenedByTrigger",w),S=f.useState("triggerPopupId",w),k=l.useRef(null),{registerTrigger:P,isMountedByThisTrigger:D}=Zi(w,k,f,{payload:d,disabled:a,openOnHover:c,closeDelay:h}),I=f.useState("openChangeReason"),N=f.useState("stickIfOpen"),z=f.useState("openMethod"),U=f.useState("focusManagerModal"),R=Ws(v,{enabled:v!=null&&c&&(z!=="touch"||I!==uo),mouseOnly:!0,move:!1,handleClose:Hs(),restMs:p,delay:{close:h},triggerElementRef:k,isActiveTrigger:T,isClosing:()=>f.select("transitionStatus")==="ending"}),W=Ji(v,{enabled:v!=null,stickIfOpen:N}),O=qm(()=>f.select("open"),_=>{f.set("openMethod",_)}),j=f.useState("triggerProps",D),{getButtonProps:x,buttonRef:F}=Ur({disabled:a,native:i}),H={open(_){return _&&I===uo?ii.open(_):al.open(_)}},{preFocusGuardRef:A,handlePreFocusGuardFocus:Q,handleFocusTargetFocus:M}=af(f,k),V=st("button",e,{state:{disabled:a,open:C},ref:[F,o,P,k],props:[W.reference,R,j,O,{[Yu]:"",id:w,"aria-haspopup":"dialog","aria-expanded":C,"aria-controls":S},g,x],stateAttributesMapping:H});return D&&!U?u.jsxs(l.Fragment,{children:[u.jsx(Fo,{ref:A,onFocus:Q}),u.jsx(l.Fragment,{children:V},w),u.jsx(Fo,{ref:f.context.triggerFocusTargetRef,onFocus:M})]}):u.jsx(l.Fragment,{children:V},w)}),uf=l.createContext(void 0);function TP(){const t=l.useContext(uf);if(t===void 0)throw new Error(rt(45));return t}const kP=l.forwardRef(function(e,o){const{keepMounted:n=!1,...r}=e,{store:s}=Lr();return s.useState("mounted")||n?u.jsx(uf.Provider,{value:n,children:u.jsx(Wi,{ref:o,...r})}):null}),pf=l.createContext(void 0);function SP(){const t=l.useContext(pf);if(!t)throw new Error(rt(46));return t}const xP=l.forwardRef(function(e,o){const{render:n,className:r,style:s,anchor:a,positionMethod:i="absolute",side:m="bottom",align:d="center",sideOffset:c=0,alignOffset:p=0,collisionBoundary:h="clipping-ancestors",collisionPadding:y=5,arrowPadding:g=5,sticky:b=!1,disableAnchorTracking:f=!1,collisionAvoidance:w=Vi,...T}=e,{store:v}=Lr(),C=TP(),S=Hi(),k=v.useState("floatingRootContext"),P=v.useState("mounted"),D=v.useState("open"),I=v.useState("openChangeReason"),N=v.useState("activeTriggerElement"),z=v.useState("modal"),U=v.useState("openMethod"),R=v.useState("positionerElement"),W=v.useState("instantType"),O=v.useState("transitionStatus"),j=v.useState("hasViewport"),x=l.useRef(null),F=Yi(R,!1,!1),H=ll({anchor:a,floatingRootContext:k,positionMethod:i,mounted:P,side:m,sideOffset:c,align:d,alignOffset:p,arrowPadding:g,collisionBoundary:h,collisionPadding:y,sticky:b,disableAnchorTracking:f,keepMounted:C,nodeId:S,collisionAvoidance:w,adaptiveOrigin:j?il:void 0}),A=k.useState("domReferenceElement");ue(()=>{const V=A,_=x.current;if(V&&(x.current=V),_&&V&&V!==_){v.set("instantType",void 0);const B=new AbortController;return F(()=>{v.set("instantType","trigger-change")},B.signal),()=>{B.abort()}}},[A,F,v]),ef(D&&z===!0&&I!==Ye,U==="touch",R,N);const Q=l.useCallback(V=>{v.set("positionerElement",V)},[v]),M={open:D,side:H.side,align:H.align,anchorHidden:H.anchorHidden,instant:W},L=cl(e,M,{styles:H.positionerStyles,transitionStatus:O,props:T,refs:[o,Q],hidden:!P,inert:!D});return u.jsxs(pf.Provider,{value:H,children:[P&&z===!0&&I!==Ye&&u.jsx(kl,{ref:v.context.internalBackdropRef,inert:dl(!D),cutout:N}),u.jsx(np,{id:S,children:L})]})}),DP=l.createContext(void 0);function PP(){const[t,e]=l.useState(0),o=ke(()=>(e(r=>r+1),()=>{e(r=>Math.max(0,r-1))}));return{context:l.useMemo(()=>({register:o}),[o]),hasClosePart:t>0}}function RP(t){const{value:e,children:o}=t;return u.jsx(DP.Provider,{value:e,children:o})}const EP={...bn,...Nr},AP=l.forwardRef(function(e,o){const{render:n,className:r,style:s,initialFocus:a,finalFocus:i,...m}=e,{store:d}=Lr(),c=SP(),p=Xm()!=null,{context:h,hasClosePart:y}=PP(),g=d.useState("open"),b=d.useState("openMethod"),f=d.useState("instantType"),w=d.useState("transitionStatus"),T=d.useState("popupProps"),v=d.useState("titleElementId"),C=d.useState("descriptionElementId"),S=d.useState("modal"),k=d.useState("mounted"),P=d.useState("openChangeReason"),D=d.useState("activeTriggerElement"),I=d.useState("floatingRootContext"),N=I.useState("floatingId"),z=d.useState("disabled"),U=d.useState("openOnHover"),R=d.useState("closeDelay"),W=m.id??N;Ir({open:g,ref:d.context.popupRef,onComplete(){var Q,M;g&&((M=(Q=d.context).onOpenChangeComplete)==null||M.call(Q,!0))}}),rl(I,{enabled:U&&!z,closeDelay:R});function O(Q){return Q==="touch"?d.context.popupRef.current:!0}const j=a===void 0?O:a,x=S!==!1&&y;d.useSyncedValue("focusManagerModal",x);const F=l.useCallback(Q=>{d.set("popupElement",Q)},[d]),H={open:g,side:c.side,align:c.align,instant:f,transitionStatus:w},A=st("div",e,{state:H,ref:[o,d.context.popupRef,F],props:[T,{id:W,role:"dialog",...Zn,"aria-labelledby":v,"aria-describedby":C,onKeyDown(Q){p&&Tl.has(Q.key)&&Q.stopPropagation()}},$s(w),m],stateAttributesMapping:EP});return u.jsx(Ki,{context:I,openInteractionType:b,modal:x,disabled:!k||P===Ye,initialFocus:j,returnFocus:i,restoreFocus:"popup",previousFocusableElement:Ve(D)?D:void 0,nextFocusableElement:d.context.triggerFocusTargetRef,beforeContentFocusGuardRef:d.context.beforeContentFocusGuardRef,children:u.jsx(RP,{value:h,children:A})})});function NP({...t}){return u.jsx(yP,{"data-slot":"popover",...t})}function IP({...t}){return u.jsx(CP,{"data-slot":"popover-trigger",...t})}function OP({className:t,align:e="center",alignOffset:o=0,side:n="bottom",sideOffset:r=4,...s}){return u.jsx(kP,{children:u.jsx(xP,{align:e,alignOffset:o,side:n,sideOffset:r,className:"isolate z-50",children:u.jsx(AP,{"data-slot":"popover-content",className:Ie("z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...s})})})}const FP="https://www.raisfast.com/data/templates.json",mf="raisfast.templates.cache",MP=0,UP=[{id:"blog-foundry",name:"Blog Foundry",description:{en:"A full-featured blog template with clean design, Markdown support, comments, categories, tags, and pagination.",cn:"功能完整的博客模板,简洁设计,支持 Markdown、评论、分类、标签和分页。"},type:"blog",framework:"Next.js",image:"https://www.raisfast.com/images/templates/blog-foundry.jpg",demoUrl:"https://blog-foundry.raisfast.com",githubUrl:"https://github.com/RaisFast/blog-foundry-nextjs"},{id:"blog-kanso",name:"Blog Kanso",description:{en:"A minimalist Japanese-inspired blog template. Clean typography, zen-like spacing, and distraction-free reading.",cn:"日式极简博客模板。简洁排版、留白设计、沉浸式阅读体验。"},type:"blog",framework:"Next.js",image:"https://www.raisfast.com/images/templates/blog-kanso.jpg",demoUrl:"https://blog-kanso.raisfast.com",githubUrl:"https://github.com/RaisFast/blog-kanso-nextjs"},{id:"blog-volt",name:"Blog VOLT",description:{en:"A brutalist blog template. Bold uppercase type, thick borders, and high contrast.",cn:"粗犷主义博客模板。大胆的大写标题、粗边框、高对比度设计。"},type:"blog",framework:"Next.js",image:"https://www.raisfast.com/images/templates/blog-volt.jpg",demoUrl:"https://blog-volt.raisfast.com",githubUrl:"https://github.com/RaisFast/blog-volt-nextjs"},{id:"ecommerce-forge",name:"Ecommerce Forge",description:{en:"A full-featured ecommerce storefront with cart, checkout, orders, and account center.",cn:"功能完整的电商模板,含购物车、结算、订单和用户中心。"},type:"ecommerce",framework:"Next.js",image:"https://www.raisfast.com/images/templates/ecommerce-forge.jpg",demoUrl:"https://ecommerce-forge.raisfast.com",githubUrl:"https://github.com/RaisFast/ecommerce-forge-nextjs"}];function LP(){try{const t=localStorage.getItem(mf);if(!t)return null;const e=JSON.parse(t);return Date.now()-e.at>MP?null:Array.isArray(e.data)?e.data:null}catch{return null}}function jP(t){try{localStorage.setItem(mf,JSON.stringify({at:Date.now(),data:t}))}catch{}}function _P(){const[t,e]=l.useState(()=>LP()??UP),[o,n]=l.useState(!1);return l.useEffect(()=>{let r=!1;return n(!0),fetch(FP,{cache:"no-cache"}).then(s=>s.ok?s.json():Promise.reject(new Error(String(s.status)))).then(s=>{r||!Array.isArray(s)||s.length===0||(e(s),jP(s))}).catch(()=>{}).finally(()=>{r||n(!1)}),()=>{r=!0}},[]),{templates:t,loading:o}}function zP({className:t}){return u.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:t,"aria-hidden":"true",children:u.jsx("path",{d:"M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.55 0-.27-.01-1.17-.02-2.12-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.68-1.28-1.68-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.19 1.76 1.19 1.03 1.76 2.69 1.25 3.35.96.1-.75.4-1.25.72-1.54-2.55-.29-5.24-1.28-5.24-5.68 0-1.26.45-2.28 1.19-3.09-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11.1 11.1 0 0 1 5.8 0c2.2-1.49 3.17-1.18 3.17-1.18.63 1.59.23 2.76.11 3.05.74.81 1.19 1.83 1.19 3.09 0 4.41-2.69 5.38-5.25 5.67.41.35.77 1.05.77 2.12 0 1.53-.01 2.76-.01 3.14 0 .3.2.67.8.55A11.52 11.52 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"})})}function BP(t,e){return typeof t.description=="string"?t.description:t.description?e==="zh"?t.description.cn??t.description.en:t.description.en:""}function VP(){const{t,locale:e}=no(),{templates:o,loading:n}=_P(),[r,s]=l.useState(!1),[a,i]=l.useState(""),[m,d]=l.useState("all"),c=["all",...Array.from(new Set(o.map(h=>h.type)))],p=o.filter(h=>{if(m!=="all"&&h.type!==m)return!1;if(!a)return!0;const y=a.toLowerCase();return h.name.toLowerCase().includes(y)||h.type.toLowerCase().includes(y)||(h.features??[]).some(g=>g.toLowerCase().includes(y))});return u.jsxs(NP,{open:r,onOpenChange:s,children:[u.jsx(qp,{delay:300,children:u.jsxs(Hp,{children:[u.jsx($p,{render:h=>u.jsxs(IP,{...h,className:"group relative flex size-7 items-center justify-center rounded-md text-primary transition-colors hover:bg-primary/10 hover:text-primary",children:[u.jsx("span",{className:"absolute inset-0 rounded-md animate-ping bg-primary/25 [animation-duration:2.5s] group-hover:[animation:none]"}),u.jsx(oc,{className:"relative size-4 transition-transform duration-300 group-hover:scale-110 group-hover:-rotate-6"}),u.jsx("span",{className:"absolute -end-0.5 -top-0.5 size-1.5 rounded-full bg-primary opacity-100 group-hover:opacity-0"})]})}),u.jsx(Kp,{children:t("templates.title")})]})}),u.jsxs(OP,{align:"end",className:"w-[min(1080px,calc(100vw-2rem))] p-0",children:[u.jsxs("div",{className:"flex items-center gap-2 border-b px-3 py-2",children:[u.jsx(nu,{className:"size-3.5 text-muted-foreground"}),u.jsx("input",{value:a,onChange:h=>i(h.target.value),placeholder:t("templates.search"),className:"h-6 w-40 bg-transparent text-sm outline-none placeholder:text-muted-foreground"}),u.jsx("div",{className:"flex-1"}),u.jsx("div",{className:"flex items-center gap-1",children:c.map(h=>u.jsx("button",{type:"button",onClick:()=>d(h),className:`rounded-md px-2 py-1 text-xs transition-colors ${m===h?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,children:h==="all"?t("templates.all"):h},h))}),n&&u.jsx(eu,{className:"size-3.5 animate-spin text-muted-foreground"})]}),u.jsx("div",{className:"grid max-h-[600px] grid-cols-3 gap-4 overflow-y-auto overscroll-contain p-4",children:p.length===0?u.jsx("p",{className:"col-span-3 py-10 text-center text-sm text-muted-foreground",children:t("templates.empty")}):p.map(h=>u.jsxs("div",{className:"group overflow-hidden rounded-lg border bg-card transition-colors hover:border-primary/60",children:[u.jsxs("div",{className:"relative aspect-[16/10] overflow-hidden bg-muted",children:[u.jsx("a",{href:h.demoUrl??void 0,target:"_blank",rel:"noopener noreferrer","aria-label":h.name,className:"block size-full",children:h.image?u.jsx("img",{src:h.image,alt:h.name,loading:"lazy",className:"size-full object-cover transition-transform duration-300 group-hover:scale-105"}):u.jsx("div",{className:"flex size-full items-center justify-center text-muted-foreground",children:u.jsx(oc,{className:"size-8"})})}),u.jsx("span",{className:"absolute start-2 top-2 rounded bg-background/80 px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground backdrop-blur",children:h.type})]}),u.jsxs("div",{className:"space-y-2 p-3",children:[u.jsxs("div",{className:"flex items-center justify-between gap-2",children:[u.jsx("span",{className:"truncate text-sm font-medium",children:h.name}),u.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[h.githubUrl&&u.jsx("a",{href:h.githubUrl,target:"_blank",rel:"noopener noreferrer","aria-label":"GitHub",className:"flex size-6 items-center justify-center rounded-md border text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:u.jsx(zP,{className:"size-3.5"})}),h.demoUrl&&u.jsx("a",{href:h.demoUrl,target:"_blank",rel:"noopener noreferrer","aria-label":"Demo",className:"flex size-6 items-center justify-center rounded-md border text-muted-foreground transition-colors hover:bg-muted hover:text-primary",children:u.jsx(xg,{className:"size-3.5"})})]})]}),u.jsx("p",{className:"line-clamp-2 min-h-8 text-xs leading-4 text-muted-foreground",children:BP(h,e)})]})]},h.id))})]})]})}function WP({children:t,className:e}){return u.jsx("nav",{"data-slot":"breadcrumb",className:Ie("flex items-center text-sm text-muted-foreground",e),children:u.jsx("ol",{className:"flex items-center gap-1.5",children:t})})}function qP({children:t,className:e}){return u.jsx("li",{"data-slot":"breadcrumb-item",className:Ie("inline-flex items-center gap-1.5",e),children:t})}function HP({href:t,children:e,className:o}){return u.jsx(vo,{href:t,className:Ie("hover:text-foreground transition-colors",o),children:e})}function $P({children:t,className:e}){return u.jsx("span",{"data-slot":"breadcrumb-page",className:Ie("font-medium text-foreground",e),children:t})}function KP(){return u.jsx(Hd,{className:"size-3.5 text-muted-foreground/50"})}function JP(){const{t}=no();return[{label:t("layout.posts"),href:"/posts",icon:Ti},{label:t("layout.categories"),href:"/categories",icon:Jd},{label:t("layout.tags"),href:"/tags",icon:xi},{label:t("layout.comments"),href:"/comments",icon:tu},{label:t("layout.media"),href:"/media",icon:Gd},{label:t("layout.pages"),href:"/pages",icon:Zd},{label:t("layout.reusableBlocks"),href:"/reusable-blocks",icon:Wd}]}function GP(){const{t}=no();return[{label:t("layout.contentTypes"),href:"/content-types",icon:Qd},{label:t("layout.plugins"),href:"/plugins",icon:ki}]}function YP(){const{t}=no();return[{label:t("layout.orders"),href:"/orders",icon:su},{label:t("layout.products"),href:"/products",icon:Zg},{label:t("layout.productCategories"),href:"/product-categories",icon:Rg},{label:t("layout.productComments"),href:"/product-comments",icon:hb},{label:t("layout.coupons"),href:"/coupons",icon:xi},{label:t("layout.shippingTemplates"),href:"/shipping-templates",icon:Cb}]}function QP(){const{t}=no();return[{label:t("layout.paymentOrders"),href:"/payment-orders",icon:ab},{label:t("layout.paymentTransactions"),href:"/payment-transactions",icon:sg},{label:t("layout.paymentChannels"),href:"/payments",icon:kg},{label:t("layout.wallets"),href:"/wallets",icon:lu},{label:t("layout.currencies"),href:"/currencies",icon:Cg}]}function XP(){const{t}=no();return[{label:t("layout.channels"),href:"/channels",icon:rb},{label:t("layout.receipts"),href:"/receipts",icon:lb},{label:t("layout.apiClients"),href:"/api-clients",icon:tb}]}function ZP(){const{t}=no(),{builtinTenantable:e}=gn();return[{label:t("layout.users"),href:"/users",icon:iu},{label:t("layout.rolesPermissions"),href:"/rbac",icon:ru},{label:t("layout.cron"),href:"/crons",icon:Kd},...e?[{label:t("layout.tenants"),href:"/tenants",icon:qd}]:[],{label:t("layout.webhooks"),href:"/webhooks",icon:cu},{label:t("layout.apiTokens"),href:"/tokens",icon:Yd},{label:t("layout.auditLog"),href:"/audit",icon:$d},{label:t("layout.options"),href:"/options",icon:Si}]}function eR(){const{t}=no(),{currentTenantId:e,clearTenant:o,builtinTenantable:n}=gn(),{isAdmin:r}=Xo();return!n||!r()?null:u.jsxs("div",{className:"flex items-center gap-2 px-4 py-2",children:[u.jsx(Og,{className:"size-3.5 text-muted-foreground shrink-0"}),u.jsx("span",{className:"text-[11px] text-muted-foreground uppercase tracking-wider font-medium",children:t("layout.tenant")}),u.jsx("div",{className:"flex-1 min-w-0"}),e?u.jsxs("div",{className:"flex items-center gap-1",children:[u.jsx("span",{className:"text-xs font-medium truncate max-w-[80px]",children:e}),u.jsx(Qn,{variant:"ghost",size:"icon-sm",onClick:o,title:t("layout.clearTenant"),children:u.jsx(du,{className:"size-3"})})]}):u.jsx("span",{className:"text-xs text-muted-foreground/60 italic",children:t("layout.all")})]})}function Pn({label:t,icon:e,items:o,children:n}){const r=Gp(),[s,a]=l.useState(()=>o.some(i=>r===i.href||r.startsWith(`${i.href}/`)));return u.jsxs($m,{className:"mt-0 pt-0",children:[u.jsxs("button",{onClick:()=>a(!s),className:"flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm font-medium text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground transition-colors overflow-hidden whitespace-nowrap group-data-[collapsible=icon]:opacity-0 group-data-[collapsible=icon]:h-0 group-data-[collapsible=icon]:p-0 group-data-[collapsible=icon]:overflow-hidden",children:[u.jsx(e,{className:"size-3.5 shrink-0"}),u.jsx("span",{className:"truncate flex-1 text-left",children:t}),u.jsx(fg,{className:`size-3 shrink-0 transition-transform duration-200 ${s?"":"-rotate-90"}`})]}),u.jsx("div",{className:`grid transition-[grid-template-rows] duration-200 ease-in-out ${s?"grid-rows-[1fr]":"grid-rows-[0fr]"} group-data-[collapsible=icon]:grid-rows-[1fr]`,children:u.jsx("div",{className:"overflow-hidden",children:u.jsx("div",{className:"ms-[7px] border-s border-sidebar-border ps-2 group-data-[collapsible=icon]:border-transparent group-data-[collapsible=icon]:ms-0 group-data-[collapsible=icon]:ps-0",children:u.jsx(Km,{children:n})})})})]})}function tR(){var j;const t=Gp(),e=Jp(),{isLoggedIn:o,isAuthor:n,logout:r,user:s}=Xo(),{resolvedTheme:a,setTheme:i}=Ci(),[m,d]=l.useState(!1),c=JP(),p=GP(),h=YP(),y=QP(),g=XP(),b=ZP(),{t:f}=no(),T=Yp()==="rtl"?"right":"left",{setBuiltinTenantable:v}=gn(),[C,S]=l.useState(""),k=l.useRef(t),P=t.split("/").filter(Boolean),D=P[0]!=="content-types"||P.length<2||P[1]==="builder"?null:P.length>=3&&P[2]!=="new"?`${P[1]}/${P[2]}`:P[1],I=Ha({queryKey:["content-type",D],queryFn:()=>D?jt.send(`/admin/content-types/${D}`):null,enabled:!!D}),N=(()=>{if(P[0]!=="crons"||P.length<2)return null;const x=P[1];return x==="new"?null:x})(),z=Ha({queryKey:["cron-breadcrumb",N],queryFn:()=>N?jt.send(`/admin/crons/${N}`):null,enabled:!!N}),U=(()=>{var A,Q;const x=t.split("/").filter(Boolean),F=[{label:f("layout.dashboard"),href:"/dashboard"}],H={posts:{label:f("layout.posts"),parent:f("layout.content")},categories:{label:f("layout.categories"),parent:f("layout.content")},tags:{label:f("layout.tags"),parent:f("layout.content")},comments:{label:f("layout.comments"),parent:f("layout.content")},media:{label:f("layout.media"),parent:f("layout.content")},pages:{label:f("layout.pages"),parent:f("layout.content")},"reusable-blocks":{label:f("layout.reusableBlocks"),parent:f("layout.content")},"content-types":{label:f("layout.contentTypes"),parent:f("layout.extension")},plugins:{label:f("layout.plugins"),parent:f("layout.extension")},users:{label:f("layout.users")},profile:{label:f("layout.profile")},rbac:{label:f("layout.rolesPermissions")},crons:{label:f("layout.cron")},tenants:{label:f("layout.tenants")},webhooks:{label:f("layout.webhooks")},tokens:{label:f("layout.apiTokens")},workflows:{label:f("layout.workflows")},audit:{label:f("layout.auditLog")},options:{label:f("layout.options")},products:{label:f("layout.products"),parent:f("layout.ecommerce")},"product-categories":{label:f("layout.productCategories"),parent:f("layout.ecommerce")},orders:{label:f("layout.orders"),parent:f("layout.ecommerce")},"product-comments":{label:f("layout.productComments"),parent:f("layout.ecommerce")},coupons:{label:f("layout.coupons"),parent:f("layout.ecommerce")},"shipping-templates":{label:f("layout.shippingTemplates"),parent:f("layout.ecommerce")},plans:{label:f("layout.plans"),parent:f("layout.system")},currencies:{label:f("layout.currencies"),parent:f("layout.finance")},wallets:{label:f("layout.wallets"),parent:f("layout.finance")},payments:{label:f("layout.paymentChannels"),parent:f("layout.finance")},"payment-orders":{label:f("layout.paymentOrders"),parent:f("layout.finance")},"payment-transactions":{label:f("layout.paymentTransactions"),parent:f("layout.finance")},channels:{label:f("layout.channels"),parent:f("layout.integration")},receipts:{label:f("layout.receipts"),parent:f("layout.integration")},"api-clients":{label:f("layout.apiClients"),parent:f("layout.integration")}};if(x.length===1&&x[0]==="dashboard")return F;if(x.length>=1){const M=x[0],L=H[M];if(!L)return F;if(x.length===1)F.push({label:L.label});else{F.push({label:L.label,href:`/${M}`});const V=x[1];if(M==="content-types"&&V!=="builder"){let _,B;x[2]&&x[2]!=="new"&&x[3]!=="edit"&&x[2]!=="new"?(_=`${x[1]} / ${x[2].replace(/_/g," ")}`,B=3):(_=V.replace(/_/g," "),B=2),F.push({label:_,description:((A=I.data)==null?void 0:A.description)??void 0}),x[B]==="new"?F.push({label:f("common.create")}):x[B]&&x[B+1]==="edit"&&F.push({label:f("common.edit")})}else if(V==="new")F.push({label:f("common.create")});else if(M==="content-types"&&V==="builder")F.push({label:f("contentTypes.builder")});else if(M==="crons"&&V!=="new"){const _=((Q=z.data)==null?void 0:Q.label)??V;F.push({label:_}),x[2]==="edit"?F.push({label:f("common.edit")}):F.push({label:f("common.view")})}else x[2]==="edit"?F.push({label:f("common.edit")}):F.push({label:f("common.view")})}}return F})();if(l.useEffect(()=>{const x={"/dashboard":"layout.dashboard","/posts":"layout.posts","/categories":"layout.categories","/tags":"layout.tags","/comments":"layout.comments","/media":"layout.media","/pages":"layout.pages","/content-types":"layout.contentTypes","/users":"layout.users","/plugins":"layout.plugins","/rbac":"layout.rolesPermissions","/crons":"layout.cron","/tenants":"layout.tenants","/webhooks":"layout.webhooks","/tokens":"layout.apiTokens","/workflows":"layout.workflows","/audit":"layout.auditLog","/options":"layout.options","/products":"layout.products","/product-categories":"layout.productCategories","/orders":"layout.orders","/payments":"layout.paymentChannels","/payment-orders":"layout.paymentOrders","/payment-transactions":"layout.paymentTransactions","/currencies":"layout.currencies","/wallets":"layout.wallets","/product-comments":"layout.productComments","/coupons":"layout.coupons","/shipping-templates":"layout.shippingTemplates","/channels":"layout.channels","/receipts":"layout.receipts","/api-clients":"layout.apiClients","/plans":"layout.plans","/profile":"layout.profile"};let F="";for(const[H,A]of Object.entries(x))if(t===H||t.startsWith(H+"/")){F=f(A);break}document.title=F?`${F} - ${C||"Admin"}`:`${C||"Admin"}`},[t,f,C]),l.useEffect(()=>{if(k.current!==t){k.current=t;const x=document.getElementById("nprogress-bar");if(x){x.style.display="block";const F=setTimeout(()=>{x.style.display="none"},300);return()=>clearTimeout(F)}}},[t]),l.useEffect(()=>{d(!0),jt.send("/options/public").then(x=>{(x==null?void 0:x.builtin_tenantable)!=null&&v(x.builtin_tenantable)}).catch(()=>{}),jt.send("/info").then(x=>{x!=null&&x.name&&S(x.name)}).catch(()=>{})},[]),!m)return u.jsx("div",{className:"flex min-h-screen items-center justify-center",children:u.jsx("div",{className:"text-center space-y-4",children:u.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-transparent mx-auto"})})});if(!o()||!n())return u.jsx(Aa,{to:"/auth/login",replace:!0});const R={dark:"#241c1a",light:"#e8e4e0"};function W(x){const F=a,H=F==="dark"?"light":"dark",A=x.clientX,Q=x.clientY,M=Math.hypot(Math.max(A,window.innerWidth-A),Math.max(Q,window.innerHeight-Q));i(H);const L=document.createElement("div");L.style.cssText=` position: fixed; top: 0; left: 0; right: 0; bottom: 0; @@ -351,4 +351,4 @@ For more information, see https://radix-ui.com/primitives/docs/components/${e.do pointer-events: none; background: ${R[F??"dark"]||"#17171e"}; clip-path: circle(${M}px at ${A}px ${Q}px); - `,document.body.appendChild(L);const V=L.animate([{clipPath:`circle(${M}px at ${A}px ${Q}px)`},{clipPath:`circle(0px at ${A}px ${Q}px)`}],{duration:400,easing:"cubic-bezier(0.4, 0, 0.2, 1)"});V.onfinish=()=>{L.remove()}}function O(x){return t===x||x!=="/dashboard"&&t.startsWith(x)}return u.jsxs(u.Fragment,{children:[u.jsx("div",{id:"nprogress-bar",style:{display:"none"},children:u.jsx("div",{className:"bar"})}),u.jsxs(Px,{children:[u.jsxs(Rx,{collapsible:"icon",side:T,children:[u.jsx(Nx,{className:"h-12 border-b flex items-center justify-center group-data-[collapsible=icon]:px-0 px-4 overflow-hidden",children:u.jsxs("div",{className:"flex items-center gap-2.5 w-full min-w-0 group-data-[collapsible=icon]:justify-center",children:[u.jsx("img",{src:"/admin/logo.png",alt:"RaisFast",className:"size-8 shrink-0"}),u.jsx("div",{className:"flex flex-col overflow-hidden group-data-[collapsible=icon]:hidden",children:u.jsx("span",{className:"text-lg font-semibold leading-tight whitespace-nowrap text-sidebar-foreground",children:C||f("layout.brand")})})]})}),u.jsx(eR,{}),u.jsxs(Ix,{children:[u.jsx($m,{children:u.jsx(Km,{children:u.jsx($o,{children:u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:"/dashboard"}),isActive:O("/dashboard"),tooltip:f("layout.dashboard"),children:[u.jsx(Xd,{}),u.jsx("span",{children:f("layout.dashboard")})]})})})})}),u.jsx(Pn,{label:f("layout.content"),icon:Ti,items:c,children:u.jsx($o,{children:c.map(x=>{const F=O(x.href);return u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:x.href}),isActive:F,tooltip:x.label,children:[u.jsx(x.icon,{}),u.jsx("span",{children:x.label})]})},x.href)})})}),u.jsx(Pn,{label:f("layout.ecommerce"),icon:su,items:h,children:u.jsx($o,{children:h.map(x=>{const F=O(x.href);return u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:x.href}),isActive:F,tooltip:x.label,children:[u.jsx(x.icon,{}),u.jsx("span",{children:x.label})]})},x.href)})})}),u.jsx(Pn,{label:f("layout.extension"),icon:ki,items:p,children:u.jsx($o,{children:p.map(x=>{const F=O(x.href);return u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:x.href}),isActive:F,tooltip:x.label,children:[u.jsx(x.icon,{}),u.jsx("span",{children:x.label})]})},x.href)})})}),u.jsx(Pn,{label:f("layout.finance"),icon:lu,items:y,children:u.jsx($o,{children:y.map(x=>{const F=O(x.href);return u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:x.href}),isActive:F,tooltip:x.label,children:[u.jsx(x.icon,{}),u.jsx("span",{children:x.label})]})},x.href)})})}),u.jsx(Pn,{label:f("layout.integration"),icon:pg,items:g,children:u.jsx($o,{children:g.map(x=>{const F=O(x.href);return u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:x.href}),isActive:F,tooltip:x.label,children:[u.jsx(x.icon,{}),u.jsx("span",{children:x.label})]})},x.href)})})}),u.jsx(Pn,{label:f("layout.system"),icon:Si,items:b,children:u.jsx($o,{children:b.map(x=>{const F=O(x.href);return u.jsx(Ko,{children:u.jsxs(Jo,{render:u.jsx(vo,{href:x.href}),isActive:F,tooltip:x.label,children:[u.jsx(x.icon,{}),u.jsx("span",{children:x.label})]})},x.href)})})})]})]}),u.jsxs(Ax,{className:"h-screen overflow-hidden",children:[u.jsxs("header",{className:"sticky top-0 z-10 flex h-12 items-center gap-2 border-b bg-background px-4",children:[u.jsx(Ex,{}),u.jsxs("button",{type:"button",onClick:()=>window.dispatchEvent(new CustomEvent("open-command-palette")),className:"ms-2 flex h-8 w-64 items-center gap-2 rounded-md border border-input bg-muted/50 px-3 text-sm text-muted-foreground hover:bg-muted transition-colors cursor-pointer",children:[u.jsx(nu,{className:"size-3.5"}),u.jsx("span",{className:"flex-1 text-left",children:f("command.search")}),u.jsxs("kbd",{className:"pointer-events-none hidden select-none items-center gap-0.5 rounded border bg-background px-1.5 py-0.5 font-mono text-[10px] font-medium text-muted-foreground sm:flex",children:[u.jsx("span",{className:"text-xs",children:"⌘"}),"K"]})]}),u.jsx("div",{className:"flex-1"}),u.jsxs("div",{className:"flex items-center gap-2",children:[u.jsx(VP,{}),u.jsx(Qn,{variant:"ghost",size:"icon-sm",onClick:W,title:f("layout.toggleTheme"),children:m&&a==="dark"?u.jsx(au,{className:"size-4"}):u.jsx(ou,{className:"size-4"})}),u.jsx(hP,{}),u.jsx(mP,{}),u.jsxs(El,{children:[u.jsx(Al,{className:"flex size-7 items-center justify-center rounded-full bg-muted text-xs font-medium hover:opacity-80",children:((j=s==null?void 0:s.username)==null?void 0:j.charAt(0).toUpperCase())??"U"}),u.jsxs(Xs,{align:"end",className:"min-w-36",children:[u.jsxs(fi,{className:"text-sm gap-2",onClick:()=>e.push("/profile"),children:[u.jsx(kb,{className:"size-4"}),f("layout.profile")]}),u.jsxs(fi,{className:"text-sm gap-2",onClick:r,children:[u.jsx(Hg,{className:"size-4"}),f("layout.signOut")]})]})]})]})]}),u.jsxs("div",{className:"flex-1 overflow-y-auto overscroll-contain pt-6 px-6 flex flex-col",children:[u.jsxs("div",{className:"mb-4 shrink-0 flex items-center gap-4",children:[u.jsx(WP,{children:U.map((x,F)=>u.jsxs(qP,{children:[F>0&&u.jsx(KP,{}),x.href&&F