diff --git a/.sqlx-postgres/query-1306421a3a1bb9d0d105ac3b618ce1d0a933a5522bcfa1a3ec1895cf93e99345.json b/.sqlx-postgres/query-1306421a3a1bb9d0d105ac3b618ce1d0a933a5522bcfa1a3ec1895cf93e99345.json new file mode 100644 index 00000000..14008a9e --- /dev/null +++ b/.sqlx-postgres/query-1306421a3a1bb9d0d105ac3b618ce1d0a933a5522bcfa1a3ec1895cf93e99345.json @@ -0,0 +1,27 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO \"ai_debates\" (\"id\", \"user_id\", \"status\", \"agent_a_id\", \"agent_b_id\", \"origin_session_id\", \"requirement\", \"params\", \"ledger\", \"rounds_done\", \"heartbeat_at\", \"created_at\", \"updated_at\", \"tenant_id\") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8", + "Text", + "Int8", + "Int8", + "Int8", + "Text", + "Jsonb", + "Jsonb", + "Int4", + "Timestamptz", + "Timestamptz", + "Timestamptz", + "Text" + ] + }, + "nullable": [] + }, + "hash": "1306421a3a1bb9d0d105ac3b618ce1d0a933a5522bcfa1a3ec1895cf93e99345" +} diff --git a/.sqlx-postgres/query-1b28677857a957f29c07ef5bac0a691ee5af2948e839a88aae495a8eb997de6a.json b/.sqlx-postgres/query-1b28677857a957f29c07ef5bac0a691ee5af2948e839a88aae495a8eb997de6a.json new file mode 100644 index 00000000..2c78935a --- /dev/null +++ b/.sqlx-postgres/query-1b28677857a957f29c07ef5bac0a691ee5af2948e839a88aae495a8eb997de6a.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO \"ai_sessions\" (\"id\", \"agent_id\", \"user_id\", \"parent_id\", \"title\", \"status\", \"meta\", \"last_seq\", \"created_at\", \"updated_at\", \"last_active_at\", \"tenant_id\") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8", + "Int8", + "Int8", + "Text", + "Text", + "Jsonb", + "Int8", + "Timestamptz", + "Timestamptz", + "Timestamptz", + "Text" + ] + }, + "nullable": [] + }, + "hash": "1b28677857a957f29c07ef5bac0a691ee5af2948e839a88aae495a8eb997de6a" +} diff --git a/.sqlx-postgres/query-67dd43a4e0b9bbf036d6282a82b554f87624f86516f92c72b90ea7a3a831c21a.json b/.sqlx-postgres/query-67dd43a4e0b9bbf036d6282a82b554f87624f86516f92c72b90ea7a3a831c21a.json new file mode 100644 index 00000000..041c7fe3 --- /dev/null +++ b/.sqlx-postgres/query-67dd43a4e0b9bbf036d6282a82b554f87624f86516f92c72b90ea7a3a831c21a.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO \"ai_debates\" (\"id\", \"user_id\", \"status\", \"agent_a_id\", \"agent_b_id\", \"origin_session_id\", \"requirement\", \"params\", \"ledger\", \"rounds_done\", \"heartbeat_at\", \"created_at\", \"updated_at\") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8", + "Text", + "Int8", + "Int8", + "Int8", + "Text", + "Jsonb", + "Jsonb", + "Int4", + "Timestamptz", + "Timestamptz", + "Timestamptz" + ] + }, + "nullable": [] + }, + "hash": "67dd43a4e0b9bbf036d6282a82b554f87624f86516f92c72b90ea7a3a831c21a" +} diff --git a/.sqlx-postgres/query-c4d4bbb2876daac09322eed64e3a5a0c5cf1d96d7aa7e192047f00838bab24c2.json b/.sqlx-postgres/query-c4d4bbb2876daac09322eed64e3a5a0c5cf1d96d7aa7e192047f00838bab24c2.json new file mode 100644 index 00000000..88ca0fb6 --- /dev/null +++ b/.sqlx-postgres/query-c4d4bbb2876daac09322eed64e3a5a0c5cf1d96d7aa7e192047f00838bab24c2.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO \"ai_sessions\" (\"id\", \"agent_id\", \"user_id\", \"parent_id\", \"title\", \"status\", \"meta\", \"last_seq\", \"created_at\", \"updated_at\", \"last_active_at\") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8", + "Int8", + "Int8", + "Text", + "Text", + "Jsonb", + "Int8", + "Timestamptz", + "Timestamptz", + "Timestamptz" + ] + }, + "nullable": [] + }, + "hash": "c4d4bbb2876daac09322eed64e3a5a0c5cf1d96d7aa7e192047f00838bab24c2" +} diff --git a/.sqlx-sqlite/query-7c6dd6ae745aa97bdf769c3ca5669a565ca507ad3519c3482577abeeabcd98ef.json b/.sqlx-sqlite/query-7c6dd6ae745aa97bdf769c3ca5669a565ca507ad3519c3482577abeeabcd98ef.json new file mode 100644 index 00000000..e6dc3408 --- /dev/null +++ b/.sqlx-sqlite/query-7c6dd6ae745aa97bdf769c3ca5669a565ca507ad3519c3482577abeeabcd98ef.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO ai_sessions (id, agent_id, user_id, parent_id, title, status, meta, last_seq, created_at, updated_at, last_active_at, tenant_id) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12)", + "describe": { + "columns": [], + "parameters": { + "Right": 12 + }, + "nullable": [] + }, + "hash": "7c6dd6ae745aa97bdf769c3ca5669a565ca507ad3519c3482577abeeabcd98ef" +} diff --git a/.sqlx-sqlite/query-7eefcd7f5e919981b6f3ec119023c35fecb21d96e7349d297ede918f366fbd12.json b/.sqlx-sqlite/query-7eefcd7f5e919981b6f3ec119023c35fecb21d96e7349d297ede918f366fbd12.json new file mode 100644 index 00000000..693e4db2 --- /dev/null +++ b/.sqlx-sqlite/query-7eefcd7f5e919981b6f3ec119023c35fecb21d96e7349d297ede918f366fbd12.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO ai_sessions (id, agent_id, user_id, parent_id, title, status, meta, last_seq, created_at, updated_at, last_active_at) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)", + "describe": { + "columns": [], + "parameters": { + "Right": 11 + }, + "nullable": [] + }, + "hash": "7eefcd7f5e919981b6f3ec119023c35fecb21d96e7349d297ede918f366fbd12" +} diff --git a/.sqlx-sqlite/query-7f582dbd0c71e9742901296c3b548ca5093b9f7daff655f9422b796061e8f2c4.json b/.sqlx-sqlite/query-7f582dbd0c71e9742901296c3b548ca5093b9f7daff655f9422b796061e8f2c4.json new file mode 100644 index 00000000..7d1353f6 --- /dev/null +++ b/.sqlx-sqlite/query-7f582dbd0c71e9742901296c3b548ca5093b9f7daff655f9422b796061e8f2c4.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO ai_debates (id, user_id, status, agent_a_id, agent_b_id, origin_session_id, requirement, params, ledger, rounds_done, heartbeat_at, created_at, updated_at, tenant_id) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14)", + "describe": { + "columns": [], + "parameters": { + "Right": 14 + }, + "nullable": [] + }, + "hash": "7f582dbd0c71e9742901296c3b548ca5093b9f7daff655f9422b796061e8f2c4" +} diff --git a/.sqlx-sqlite/query-b5b0ba90d831bbbea0c34a368e999e7aaa26df5fed9684abc8807d864c44ff91.json b/.sqlx-sqlite/query-b5b0ba90d831bbbea0c34a368e999e7aaa26df5fed9684abc8807d864c44ff91.json new file mode 100644 index 00000000..1d4170d5 --- /dev/null +++ b/.sqlx-sqlite/query-b5b0ba90d831bbbea0c34a368e999e7aaa26df5fed9684abc8807d864c44ff91.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "INSERT INTO ai_debates (id, user_id, status, agent_a_id, agent_b_id, origin_session_id, requirement, params, ledger, rounds_done, heartbeat_at, created_at, updated_at) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13)", + "describe": { + "columns": [], + "parameters": { + "Right": 13 + }, + "nullable": [] + }, + "hash": "b5b0ba90d831bbbea0c34a368e999e7aaa26df5fed9684abc8807d864c44ff91" +} diff --git a/adminui/assets/FormContext-DtOchBZg.js b/adminui/assets/FormContext-CMyWQz7b.js similarity index 77% rename from adminui/assets/FormContext-DtOchBZg.js rename to adminui/assets/FormContext-CMyWQz7b.js index c2a8163c..68a7a396 100644 --- a/adminui/assets/FormContext-DtOchBZg.js +++ b/adminui/assets/FormContext-CMyWQz7b.js @@ -1 +1 @@ -import{f as t}from"./vendor-react-j_G0Dyx0.js";import{aq as r}from"./index-DFelzBez.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{aq as r}from"./index-C-uFVPpg.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-ciit2r_R.js b/adminui/assets/admin-login-H-w89DWS.js similarity index 90% rename from adminui/assets/admin-login-ciit2r_R.js rename to adminui/assets/admin-login-H-w89DWS.js index 997d4743..7569fa84 100644 --- a/adminui/assets/admin-login-ciit2r_R.js +++ b/adminui/assets/admin-login-H-w89DWS.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 u}from"./zod-YGny3e4W.js";import{cg as z,cJ as C,bk as n,ai as T,n as F,aE as I,c9 as x}from"./index-DFelzBez.js";import{I as f}from"./input-Bx5u8hTS.js";import{L as g}from"./label-DeKRRvpz.js";import{T as A}from"./theme-toggle-ClPnlKp9.js";import{C as P}from"./circle-alert-DGgaAjA1.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";const q=E({email:u().email(),password:u().min(1)});function Q(){const l=k(),[h]=y(),j=z(),[m,c]=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:d,handleSubmit:N,setValue:o,formState:{errors:t}}=S({resolver:_(q),defaultValues:{email:"",password:""}});if(i.useEffect(()=>{n.send("/info").then(s=>{var a,p;(a=s==null?void 0:s.demo)!=null&&a.email&&((p=s==null?void 0:s.demo)!=null&&p.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){c(!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{c(!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",...d("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:"••••••••",...d("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{Q 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 u}from"./zod-YGny3e4W.js";import{ch as z,cK as C,bl as n,ai as T,n as F,aE as I,ca as x}from"./index-C-uFVPpg.js";import{I as f}from"./input-Bp1SimRr.js";import{L as g}from"./label-DiZ0cGhf.js";import{T as A}from"./theme-toggle-zICv51PL.js";import{C as P}from"./circle-alert-nC4JTWNi.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";const q=E({email:u().email(),password:u().min(1)});function Q(){const l=k(),[h]=y(),j=z(),[m,c]=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:d,handleSubmit:N,setValue:o,formState:{errors:t}}=S({resolver:_(q),defaultValues:{email:"",password:""}});if(i.useEffect(()=>{n.send("/info").then(s=>{var a,p;(a=s==null?void 0:s.demo)!=null&&a.email&&((p=s==null?void 0:s.demo)!=null&&p.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){c(!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{c(!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",...d("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:"••••••••",...d("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{Q as default}; diff --git a/adminui/assets/agents-BFqOyVx3.js b/adminui/assets/agents-BFqOyVx3.js new file mode 100644 index 00000000..54978b9e --- /dev/null +++ b/adminui/assets/agents-BFqOyVx3.js @@ -0,0 +1,6 @@ +import{f as P,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as J}from"./use-url-state-BBO3na5E.js";import{bq as W,cK as K,cG as Q,cB as X,cA as q,n as v,aU as Y,ak as E,k as I,ca as U,aE as Z,bl as k,T as ee,_ as se,U as ne,V as p,ao as ae}from"./index-C-uFVPpg.js";import{u as te}from"./useMutation-BlIm5cor.js";import{B as d}from"./badge-Dhxp0jil.js";import{C as V,a as R}from"./card-BBIqLCR8.js";import{T as ie,d as re,e as w,c as i,a as le,b as t}from"./table-BoLxzYJ7.js";import{P as oe}from"./pagination-bar-BuL5EI1J.js";import{A as de,c as ce,f as me,g as xe,d as ue,e as ge,b as he,a as pe}from"./alert-dialog-C8VouOFc.js";import{T as je}from"./table-skeleton-fqjGRt14.js";import{E as fe}from"./empty-state-CCcgx4uH.js";import{L as be}from"./list-DB26GY3p.js";import{L as ye}from"./layout-grid-BdBqHXKm.js";import{P as Ne}from"./plus-FYsVFl-s.js";import{E as Ae}from"./ellipsis-vertical-B-dHvJs4.js";import{P as ve}from"./pencil-xelQXmMG.js";import{B as ke}from"./brain-Dg6Cf5le.js";import{T as we}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-C_tZtLI6.js";/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ce=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Te=W("chart-column",Ce);function $(n){if(!n)return"-";try{return new Date(n).toLocaleString()}catch{return n}}function F({agent:n,onDelete:j,pending:N}){const{t:l}=K(),c=Q(),r=encodeURIComponent(n.id);return e.jsxs(ee,{children:[e.jsx(se,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Ae,{className:"size-4"})}),e.jsxs(ne,{align:"end",children:[e.jsxs(p,{onClick:()=>c.push(`/ai/agents/${r}/edit`),children:[e.jsx(ve,{className:"size-4 me-2"}),l("common.edit")]}),e.jsxs(p,{onClick:()=>c.push(`/ai/agents/${r}/usage`),children:[e.jsx(Te,{className:"size-4 me-2"}),l("aiAgents.usage")]}),e.jsxs(p,{onClick:()=>c.push(`/ai/agents/${r}/memories`),children:[e.jsx(ke,{className:"size-4 me-2"}),l("aiMemory.title")]}),e.jsxs(p,{onClick:()=>c.push(`/ai/playground?agent=${r}`),children:[e.jsx(ae,{className:"size-4 me-2"}),l("aiAgents.playground")]}),e.jsxs(p,{disabled:N,onClick:()=>j(n),children:[e.jsx(we,{className:"size-4 me-2 text-destructive"}),l("common.delete")]})]})]})}function Oe(){var D,z,M,S,B;const{t:n}=K(),j=Q(),N=X(),{getInt:l,set:c}=J(),r=l("page"),C=20,[m,f]=P.useState(null),[b,T]=P.useState("list"),u=q({queryKey:["ai-agents",r],queryFn:()=>k.admin.aiAgents.list({page:r,page_size:C})}),H=q({queryKey:["ai-agent-kb-list"],queryFn:()=>k.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"100"}}),enabled:(((D=u.data)==null?void 0:D.items)??[]).some(s=>{var a;return Array.isArray((a=s.params)==null?void 0:a.kb_ids)&&s.params.kb_ids.length>0})}),G=new Map((((z=H.data)==null?void 0:z.items)??[]).map(s=>[s.id,s.name])),A=te({mutationFn:s=>k.admin.aiAgents.delete(s),onSuccess:()=>{U.success(n("aiAgents.deleted")),N.invalidateQueries({queryKey:["ai-agents"]})},onError:s=>{U.error(s instanceof Z?s.message:n("aiAgents.deleteFailed"))}}),y=((M=u.data)==null?void 0:M.items)??[],O=Math.ceil((((S=u.data)==null?void 0:S.total)??0)/C);function g(s,a){var L;const o=(L=s.params)==null?void 0:L[a];return Array.isArray(o)?o.map(h=>typeof h=="number"?String(h):h).filter(h=>typeof h=="string"):[]}function _(s){return g(s,"kb_ids").map(a=>G.get(a)??a)}function x({names:s,allLabel:a}){return a?e.jsx(d,{children:a}):s.length===0?e.jsx("span",{className:"text-sm text-muted-foreground",children:"-"}):e.jsx("div",{className:"flex flex-wrap gap-1",children:s.map(o=>e.jsx(d,{variant:"outline",className:"font-mono text-[10px]",children:o},o))})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex border rounded-md overflow-hidden",children:[e.jsx(v,{variant:b==="list"?"secondary":"ghost",size:"icon-xs",onClick:()=>T("list"),title:n("common.listView"),children:e.jsx(be,{className:"size-4"})}),e.jsx(v,{variant:b==="card"?"secondary":"ghost",size:"icon-xs",onClick:()=>T("card"),title:n("common.cardView"),children:e.jsx(ye,{className:"size-4"})})]}),e.jsxs(v,{size:"sm",onClick:()=>j.push("/ai/agents/new"),children:[e.jsx(Ne,{className:"size-4"}),n("aiAgents.newAgent")]})]}),e.jsx(V,{children:e.jsx(R,{className:"p-0",children:u.isLoading?b==="list"?e.jsx(je,{cols:9}):e.jsx("div",{className:"grid gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:Array.from({length:4}).map((s,a)=>e.jsx(Y,{className:"h-48 rounded-xl"},a))}):b==="card"&&y.length>0?e.jsx("div",{className:"grid gap-4 p-4 sm:grid-cols-1 md:grid-cols-2 xl:grid-cols-3",children:y.map(s=>e.jsx(V,{className:"transition-shadow hover:shadow-md",children:e.jsxs(R,{className:"flex h-full flex-col gap-3 pt-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx(E,{href:`/ai/agents/${encodeURIComponent(s.id)}/edit`,className:"min-w-0 group",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(I,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsx("span",{className:"truncate font-medium group-hover:underline",children:s.name})]})}),e.jsx(F,{agent:s,onDelete:a=>f(a),pending:A.isPending})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[e.jsx(d,{variant:"ghost",className:"font-mono",children:s.provider}),e.jsx("span",{className:"font-mono text-muted-foreground",children:s.model})]}),e.jsxs("div",{className:"space-y-2 text-xs",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 font-medium text-muted-foreground uppercase tracking-wide",children:n("aiAgents.tools")}),e.jsx(x,{names:s.tools??[],allLabel:s.tools.includes("*")?n("aiAgents.allTools"):void 0})]}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 font-medium text-muted-foreground uppercase tracking-wide",children:n("aiSkills.bundles")}),e.jsx(x,{names:g(s,"skill_bundles"),allLabel:g(s,"skill_bundles").includes("*")?n("aiAgents.allTools"):void 0})]}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 font-medium text-muted-foreground uppercase tracking-wide",children:n("aiAgents.kbBinding")}),e.jsx(x,{names:_(s)})]})]}),e.jsxs("div",{className:"mt-auto flex items-center justify-between border-t pt-3 text-xs text-muted-foreground",children:[e.jsx(d,{variant:s.memory_enabled?"default":"secondary",children:s.memory_enabled?n("common.enabled"):n("common.disabled")}),e.jsx("span",{children:$(s.updated_at)})]})]})},s.id))}):e.jsxs(ie,{children:[e.jsx(re,{children:e.jsxs(w,{children:[e.jsx(i,{children:n("aiAgents.name")}),e.jsx(i,{children:n("aiAgents.provider")}),e.jsx(i,{children:n("aiAgents.model")}),e.jsx(i,{children:n("aiAgents.tools")}),e.jsx(i,{children:n("aiSkills.bundles")}),e.jsx(i,{children:n("aiAgents.kbBinding")}),e.jsx(i,{children:n("aiAgents.memory")}),e.jsx(i,{children:n("aiAgents.updatedAt")}),e.jsx(i,{className:"text-end",children:n("common.actions")})]})}),e.jsx(le,{children:y.length===0?e.jsx(w,{children:e.jsx(t,{colSpan:9,children:e.jsx(fe,{icon:I,title:n("aiAgents.noAgents"),description:n("aiAgents.emptyHint"),action:{label:n("aiAgents.newAgent"),onClick:()=>j.push("/ai/agents/new")}})})}):y.map(s=>{var a;return e.jsxs(w,{children:[e.jsx(t,{children:e.jsx(E,{href:`/ai/agents/${encodeURIComponent(s.id)}/edit`,className:"block group",children:e.jsxs("div",{className:"flex items-center gap-1.5 font-medium group-hover:underline",children:[s.name,((a=s.params)==null?void 0:a.debate_role)==="reviewer"&&e.jsx(d,{variant:"destructive",className:"text-[10px]",children:n("aiAgents.reviewerBadge")})]})})}),e.jsx(t,{children:e.jsx(d,{variant:"ghost",className:"font-mono text-xs",children:s.provider})}),e.jsx(t,{className:"font-mono text-xs",children:s.model}),e.jsx(t,{children:e.jsx(x,{names:s.tools??[],allLabel:s.tools.includes("*")?n("aiAgents.allTools"):void 0})}),e.jsx(t,{children:e.jsx(x,{names:g(s,"skill_bundles"),allLabel:g(s,"skill_bundles").includes("*")?n("aiAgents.allTools"):void 0})}),e.jsx(t,{children:e.jsx(x,{names:_(s)})}),e.jsx(t,{children:e.jsx(d,{variant:s.memory_enabled?"default":"secondary",children:s.memory_enabled?n("common.enabled"):n("common.disabled")})}),e.jsx(t,{className:"text-sm text-muted-foreground",children:$(s.updated_at)}),e.jsx(t,{className:"text-end",children:e.jsx(F,{agent:s,onDelete:o=>f(o),pending:A.isPending})})]},s.id)})})]})})}),e.jsx(oe,{page:r,totalPages:O,total:((B=u.data)==null?void 0:B.total)??0,onPageChange:s=>c({page:s})}),e.jsx(de,{open:!!m,onOpenChange:s=>{s||f(null)},children:e.jsxs(ce,{children:[e.jsxs(me,{children:[e.jsx(xe,{children:n("common.delete")}),e.jsx(ue,{children:n("aiAgents.confirmDelete",{name:(m==null?void 0:m.name)??""})})]}),e.jsxs(ge,{children:[e.jsx(he,{children:n("common.cancel")}),e.jsx(pe,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{m&&A.mutate(m.id),f(null)},children:n("common.delete")})]})]})})]})}export{Oe as default}; diff --git a/adminui/assets/agents-BgHZzQOZ.js b/adminui/assets/agents-BgHZzQOZ.js deleted file mode 100644 index 681f7070..00000000 --- a/adminui/assets/agents-BgHZzQOZ.js +++ /dev/null @@ -1,6 +0,0 @@ -import{f as P,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as O}from"./use-url-state-BBO3na5E.js";import{bp as W,cJ as Q,cF as H,cA as X,cz as E,n as k,aT as Y,ak as q,k as I,c9 as V,aE as Z,bk as v,T as ee,_ as se,U as ne,V as p,ao as ae}from"./index-DFelzBez.js";import{u as te}from"./useMutation-DgRiHz67.js";import{B as m}from"./badge-BvrzcoWP.js";import{C as F,a as R}from"./card-D3QxRGt-.js";import{T as ie,d as re,e as w,c as i,a as le,b as t}from"./table-gihdE9_j.js";import{P as oe}from"./pagination-bar-DD_HkQGa.js";import{A as de,c as ce,f as me,g as xe,d as ue,e as ge,b as he,a as pe}from"./alert-dialog-B-lBTnCF.js";import{T as je}from"./table-skeleton-BtLTAVzI.js";import{E as fe}from"./empty-state-D0NvGCXa.js";import{L as be}from"./list-D5KGVMom.js";import{L as ye}from"./layout-grid-DF9F3GnA.js";import{P as Ne}from"./plus-DK-V8p7I.js";import{E as Ae}from"./ellipsis-vertical-UHYLUh-c.js";import{P as ke}from"./pencil-BgXbFsNu.js";import{B as ve}from"./brain-Cq0xTcCG.js";import{T as we}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-CbJIXgY2.js";/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ce=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Te=W("chart-column",Ce);function U(n){if(!n)return"-";try{return new Date(n).toLocaleString()}catch{return n}}function $({agent:n,onDelete:j,pending:N}){const{t:l}=Q(),o=H(),r=encodeURIComponent(n.id);return e.jsxs(ee,{children:[e.jsx(se,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Ae,{className:"size-4"})}),e.jsxs(ne,{align:"end",children:[e.jsxs(p,{onClick:()=>o.push(`/ai/agents/${r}/edit`),children:[e.jsx(ke,{className:"size-4 me-2"}),l("common.edit")]}),e.jsxs(p,{onClick:()=>o.push(`/ai/agents/${r}/usage`),children:[e.jsx(Te,{className:"size-4 me-2"}),l("aiAgents.usage")]}),e.jsxs(p,{onClick:()=>o.push(`/ai/agents/${r}/memories`),children:[e.jsx(ve,{className:"size-4 me-2"}),l("aiMemory.title")]}),e.jsxs(p,{onClick:()=>o.push(`/ai/playground?agent=${r}`),children:[e.jsx(ae,{className:"size-4 me-2"}),l("aiAgents.playground")]}),e.jsxs(p,{disabled:N,onClick:()=>j(n),children:[e.jsx(we,{className:"size-4 me-2 text-destructive"}),l("common.delete")]})]})]})}function Je(){var _,z,M,S,L;const{t:n}=Q(),j=H(),N=X(),{getInt:l,set:o}=O(),r=l("page"),C=20,[d,f]=P.useState(null),[b,T]=P.useState("list"),x=E({queryKey:["ai-agents",r],queryFn:()=>v.admin.aiAgents.list({page:r,page_size:C})}),K=E({queryKey:["ai-agent-kb-list"],queryFn:()=>v.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"100"}}),enabled:(((_=x.data)==null?void 0:_.items)??[]).some(s=>{var a;return Array.isArray((a=s.params)==null?void 0:a.kb_ids)&&s.params.kb_ids.length>0})}),G=new Map((((z=K.data)==null?void 0:z.items)??[]).map(s=>[s.id,s.name])),A=te({mutationFn:s=>v.admin.aiAgents.delete(s),onSuccess:()=>{V.success(n("aiAgents.deleted")),N.invalidateQueries({queryKey:["ai-agents"]})},onError:s=>{V.error(s instanceof Z?s.message:n("aiAgents.deleteFailed"))}}),y=((M=x.data)==null?void 0:M.items)??[],J=Math.ceil((((S=x.data)==null?void 0:S.total)??0)/C);function u(s,a){var B;const g=(B=s.params)==null?void 0:B[a];return Array.isArray(g)?g.map(h=>typeof h=="number"?String(h):h).filter(h=>typeof h=="string"):[]}function D(s){return u(s,"kb_ids").map(a=>G.get(a)??a)}function c({names:s,allLabel:a}){return a?e.jsx(m,{children:a}):s.length===0?e.jsx("span",{className:"text-sm text-muted-foreground",children:"-"}):e.jsx("div",{className:"flex flex-wrap gap-1",children:s.map(g=>e.jsx(m,{variant:"outline",className:"font-mono text-[10px]",children:g},g))})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex border rounded-md overflow-hidden",children:[e.jsx(k,{variant:b==="list"?"secondary":"ghost",size:"icon-xs",onClick:()=>T("list"),title:n("common.listView"),children:e.jsx(be,{className:"size-4"})}),e.jsx(k,{variant:b==="card"?"secondary":"ghost",size:"icon-xs",onClick:()=>T("card"),title:n("common.cardView"),children:e.jsx(ye,{className:"size-4"})})]}),e.jsxs(k,{size:"sm",onClick:()=>j.push("/ai/agents/new"),children:[e.jsx(Ne,{className:"size-4"}),n("aiAgents.newAgent")]})]}),e.jsx(F,{children:e.jsx(R,{className:"p-0",children:x.isLoading?b==="list"?e.jsx(je,{cols:9}):e.jsx("div",{className:"grid gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:Array.from({length:4}).map((s,a)=>e.jsx(Y,{className:"h-48 rounded-xl"},a))}):b==="card"&&y.length>0?e.jsx("div",{className:"grid gap-4 p-4 sm:grid-cols-1 md:grid-cols-2 xl:grid-cols-3",children:y.map(s=>e.jsx(F,{className:"transition-shadow hover:shadow-md",children:e.jsxs(R,{className:"flex h-full flex-col gap-3 pt-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx(q,{href:`/ai/agents/${encodeURIComponent(s.id)}/edit`,className:"min-w-0 group",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(I,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsx("span",{className:"truncate font-medium group-hover:underline",children:s.name})]})}),e.jsx($,{agent:s,onDelete:a=>f(a),pending:A.isPending})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[e.jsx(m,{variant:"ghost",className:"font-mono",children:s.provider}),e.jsx("span",{className:"font-mono text-muted-foreground",children:s.model})]}),e.jsxs("div",{className:"space-y-2 text-xs",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 font-medium text-muted-foreground uppercase tracking-wide",children:n("aiAgents.tools")}),e.jsx(c,{names:s.tools??[],allLabel:s.tools.includes("*")?n("aiAgents.allTools"):void 0})]}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 font-medium text-muted-foreground uppercase tracking-wide",children:n("aiSkills.bundles")}),e.jsx(c,{names:u(s,"skill_bundles"),allLabel:u(s,"skill_bundles").includes("*")?n("aiAgents.allTools"):void 0})]}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 font-medium text-muted-foreground uppercase tracking-wide",children:n("aiAgents.kbBinding")}),e.jsx(c,{names:D(s)})]})]}),e.jsxs("div",{className:"mt-auto flex items-center justify-between border-t pt-3 text-xs text-muted-foreground",children:[e.jsx(m,{variant:s.memory_enabled?"default":"secondary",children:s.memory_enabled?n("common.enabled"):n("common.disabled")}),e.jsx("span",{children:U(s.updated_at)})]})]})},s.id))}):e.jsxs(ie,{children:[e.jsx(re,{children:e.jsxs(w,{children:[e.jsx(i,{children:n("aiAgents.name")}),e.jsx(i,{children:n("aiAgents.provider")}),e.jsx(i,{children:n("aiAgents.model")}),e.jsx(i,{children:n("aiAgents.tools")}),e.jsx(i,{children:n("aiSkills.bundles")}),e.jsx(i,{children:n("aiAgents.kbBinding")}),e.jsx(i,{children:n("aiAgents.memory")}),e.jsx(i,{children:n("aiAgents.updatedAt")}),e.jsx(i,{className:"text-end",children:n("common.actions")})]})}),e.jsx(le,{children:y.length===0?e.jsx(w,{children:e.jsx(t,{colSpan:9,children:e.jsx(fe,{icon:I,title:n("aiAgents.noAgents"),description:n("aiAgents.emptyHint"),action:{label:n("aiAgents.newAgent"),onClick:()=>j.push("/ai/agents/new")}})})}):y.map(s=>e.jsxs(w,{children:[e.jsx(t,{children:e.jsx(q,{href:`/ai/agents/${encodeURIComponent(s.id)}/edit`,className:"block group",children:e.jsx("div",{className:"font-medium group-hover:underline",children:s.name})})}),e.jsx(t,{children:e.jsx(m,{variant:"ghost",className:"font-mono text-xs",children:s.provider})}),e.jsx(t,{className:"font-mono text-xs",children:s.model}),e.jsx(t,{children:e.jsx(c,{names:s.tools??[],allLabel:s.tools.includes("*")?n("aiAgents.allTools"):void 0})}),e.jsx(t,{children:e.jsx(c,{names:u(s,"skill_bundles"),allLabel:u(s,"skill_bundles").includes("*")?n("aiAgents.allTools"):void 0})}),e.jsx(t,{children:e.jsx(c,{names:D(s)})}),e.jsx(t,{children:e.jsx(m,{variant:s.memory_enabled?"default":"secondary",children:s.memory_enabled?n("common.enabled"):n("common.disabled")})}),e.jsx(t,{className:"text-sm text-muted-foreground",children:U(s.updated_at)}),e.jsx(t,{className:"text-end",children:e.jsx($,{agent:s,onDelete:a=>f(a),pending:A.isPending})})]},s.id))})]})})}),e.jsx(oe,{page:r,totalPages:J,total:((L=x.data)==null?void 0:L.total)??0,onPageChange:s=>o({page:s})}),e.jsx(de,{open:!!d,onOpenChange:s=>{s||f(null)},children:e.jsxs(ce,{children:[e.jsxs(me,{children:[e.jsx(xe,{children:n("common.delete")}),e.jsx(ue,{children:n("aiAgents.confirmDelete",{name:(d==null?void 0:d.name)??""})})]}),e.jsxs(ge,{children:[e.jsx(he,{children:n("common.cancel")}),e.jsx(pe,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{d&&A.mutate(d.id),f(null)},children:n("common.delete")})]})]})})]})}export{Je as default}; diff --git a/adminui/assets/agents-form-CE52mLyQ.js b/adminui/assets/agents-form-DgaR2FtU.js similarity index 90% rename from adminui/assets/agents-form-CE52mLyQ.js rename to adminui/assets/agents-form-DgaR2FtU.js index 5086afb2..a6ec1b94 100644 --- a/adminui/assets/agents-form-CE52mLyQ.js +++ b/adminui/assets/agents-form-DgaR2FtU.js @@ -1,3 +1,3 @@ -import{k as ee,f as C,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as se,cF as ae,cA as te,cz as j,bd as z,n as w,c9 as N,aE as V,bk as p}from"./index-DFelzBez.js";import{u as D}from"./useMutation-DgRiHz67.js";import{C as J,a as R}from"./card-D3QxRGt-.js";import{I as k}from"./input-Bx5u8hTS.js";import{T as le}from"./textarea-Daa6n4S-.js";import{L as m}from"./label-DeKRRvpz.js";import{S}from"./switch-DLTIF0BW.js";import{B as y}from"./badge-BvrzcoWP.js";import{C as v}from"./checkbox-ZiPbJKLR.js";import{S as ne,e as re,f as ie,a as oe,c as G}from"./select-Dc4_9PNt.js";import{C as me}from"./code-editor-DZgggbjW.js";import{a as de}from"./model-select-PQ1YHedf.js";import{g as ce,c as ue,A as pe}from"./ai-tool-catalog-B8AGHhOB.js";import{P as xe}from"./plus-DK-V8p7I.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./vendor-md-editor-vOqM56Ks.js";import"./chevrons-up-down-CYWVywcp.js";const A="__auto__",he={name:"",system_prompt:"",provider:"openai_compatible",model:"",channel_id:"",temperature:"",max_iterations:"10",memory_enabled:!0,allowAll:!1,tools:[],params:"",skillBundlesAll:!1,skillBundles:[],kbIds:[]};function ge(a){return a.includes("*")?{allowAll:!0,tools:[]}:{allowAll:!1,tools:a}}function je(a){if(!Array.isArray(a))return{all:!1,selected:[]};const i=a.filter(u=>typeof u=="string");return i.includes("*")?{all:!0,selected:[]}:{all:!1,selected:i}}function ye(a){return Array.isArray(a)?a.map(i=>typeof i=="number"?String(i):i).filter(i=>typeof i=="string"):[]}function Y(a,i,u){let d={};return a.trim()&&(d=JSON.parse(a)),i.all?d.skill_bundles=["*"]:i.selected.length>0?d.skill_bundles=i.selected:delete d.skill_bundles,u.length>0?d.kb_ids=u:delete d.kb_ids,Object.keys(d).length>0?d:null}function Re(){var L,M;const{t:a}=se(),i=ae(),u=te(),g=ee().id,x=!!g,[t,n]=C.useState(he),[I,B]=C.useState(""),f=j({queryKey:["ai-agent",g],queryFn:()=>p.admin.aiAgents.get(g),enabled:x}),F=j({queryKey:["ai-skills"],queryFn:()=>p.admin.aiSkills.list()}),$=j({queryKey:[...pe],queryFn:()=>p.send("/admin/ai/tools"),staleTime:300*1e3}),P=ce(((L=$.data)==null?void 0:L.items)??[]),_=(((M=j({queryKey:["ai-agent-kb-list"],queryFn:()=>p.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"100"}})}).data)==null?void 0:M.items)??[]).filter(s=>s.status==="active"),T=j({queryKey:["admin-llm-channels"],queryFn:()=>p.send("/admin/llm/channels"),staleTime:60*1e3}).data??[];C.useEffect(()=>{var h,b;if(!f.data)return;const s=f.data,{allowAll:l,tools:o}=ge(s.tools??[]),r=je((h=s.params)==null?void 0:h.skill_bundles),c=ye((b=s.params)==null?void 0:b.kb_ids);n({name:s.name,system_prompt:s.system_prompt,provider:s.provider,model:s.model,channel_id:s.channel_id??"",temperature:s.temperature!=null?String(s.temperature):"",max_iterations:String(s.max_iterations),memory_enabled:s.memory_enabled,allowAll:l,tools:o,params:s.params?JSON.stringify(s.params,null,2):"",skillBundlesAll:r.all,skillBundles:r.selected,kbIds:c})},[f.data]);const q=D({mutationFn:()=>p.admin.aiAgents.create({name:t.name.trim(),system_prompt:t.system_prompt,provider:t.provider,model:t.model.trim(),channel_id:t.channel_id||void 0,temperature:t.temperature===""?null:Number(t.temperature),tools:t.allowAll?["*"]:t.tools,memory_enabled:t.memory_enabled,params:Y(t.params,{all:t.skillBundlesAll,selected:t.skillBundles},t.kbIds)}),onSuccess:()=>{N.success(a("aiAgents.created")),u.invalidateQueries({queryKey:["ai-agents"]}),i.push("/ai/agents")},onError:s=>{N.error(s instanceof V?s.message:a("aiAgents.createFailed"))}}),E=D({mutationFn:()=>p.admin.aiAgents.update(g,{system_prompt:t.system_prompt,provider:t.provider,model:t.model.trim(),channel_id:t.channel_id||null,temperature:t.temperature===""?null:Number(t.temperature),max_iterations:Number(t.max_iterations)||10,tools:t.allowAll?["*"]:t.tools,memory_enabled:t.memory_enabled,params:Y(t.params,{all:t.skillBundlesAll,selected:t.skillBundles},t.kbIds)}),onSuccess:()=>{N.success(a("aiAgents.updated")),u.invalidateQueries({queryKey:["ai-agents"]}),u.invalidateQueries({queryKey:["ai-agent",g]}),i.push("/ai/agents")},onError:s=>{N.error(s instanceof V?s.message:a("aiAgents.updateFailed"))}}),K=t.params.trim()===""||(()=>{try{return JSON.parse(t.params),!0}catch{return!1}})(),U=!!t.name.trim()&&!!t.model.trim()&&K,Q=q.isPending||E.isPending,X=P.flatMap(s=>s.tools.map(l=>l.name)),H=t.tools.filter(s=>!X.includes(s));function W(s){n(l=>({...l,tools:l.tools.includes(s)?l.tools.filter(o=>o!==s):[...l.tools,s]}))}function O(){const s=I.trim();!s||t.tools.includes(s)||(n(l=>({...l,tools:[...l.tools,s]})),B(""))}function Z(){x?E.mutate():q.mutate()}return x&&f.isLoading?e.jsx("div",{className:"flex items-center justify-center py-20 text-muted-foreground",children:a("common.loading")}):e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-3",children:[e.jsx(J,{className:"lg:col-span-2",children:e.jsxs(R,{className:"space-y-6 pt-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"name",children:[a("aiAgents.name")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(k,{id:"name",value:t.name,disabled:x,onChange:s=>n(l=>({...l,name:s.target.value})),placeholder:a("aiAgents.namePlaceholder")}),x&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.nameImmutable")})]}),e.jsxs("div",{className:"",children:[e.jsxs(m,{htmlFor:"model",children:[a("aiAgents.model")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(de,{className:"mt-2",value:t.model,onChange:s=>n(l=>({...l,model:s})),placeholder:a("aiAgents.modelPlaceholder"),types:["chat","vlm"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{children:a("aiAgents.channelPin")}),e.jsxs(ne,{value:t.channel_id||A,onValueChange:s=>n(l=>({...l,channel_id:!s||s===A?"":s})),items:Object.fromEntries([[A,a("aiAgents.channelPinAuto")],...T.map(s=>[s.id,s.name])]),children:[e.jsx(re,{className:"w-full",children:e.jsx(ie,{})}),e.jsxs(oe,{children:[e.jsx(G,{value:A,children:a("aiAgents.channelPinAuto")}),T.map(s=>e.jsx(G,{value:s.id,children:s.name},s.id))]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.channelPinHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"system_prompt",children:a("aiAgents.systemPrompt")}),e.jsx(le,{id:"system_prompt",value:t.system_prompt,onChange:s=>n(l=>({...l,system_prompt:s.target.value})),placeholder:a("aiAgents.systemPromptPlaceholder"),rows:10,className:"font-mono text-xs"})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(m,{children:a("aiAgents.tools")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("aiAgents.allowAll")}),e.jsx(S,{checked:t.allowAll,onCheckedChange:s=>n(l=>({...l,allowAll:s}))})]})]}),t.allowAll?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.allowAllHint")}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"space-y-3 rounded-md border p-3",children:P.map(s=>e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wide",children:ue(a,s.category)}),e.jsx("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-2 lg:grid-cols-3",children:s.tools.map(l=>{const o=t.tools.includes(l.name);return e.jsxs("label",{title:l.description,className:"flex cursor-pointer items-start gap-2 rounded px-1 py-0.5 text-sm hover:bg-muted",children:[e.jsx(v,{className:"mt-1",checked:o,onCheckedChange:r=>n(c=>({...c,tools:r?[...c.tools,l.name]:c.tools.filter(h=>h!==l.name)}))}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block font-mono text-xs",children:l.name}),e.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:l.description})]})]},l.name)})})]},s.category))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.memoryToolsHint")}),H.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5",children:H.map(s=>e.jsxs(y,{variant:"secondary",className:"gap-1 font-mono",children:[s,e.jsx("button",{type:"button",onClick:()=>W(s),className:"cursor-pointer",children:e.jsx(z,{className:"size-3"})})]},s))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(k,{value:I,onChange:s=>B(s.target.value),onKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),O())},placeholder:a("aiAgents.customToolPlaceholder"),className:"font-mono text-xs"}),e.jsxs(w,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:O,children:[e.jsx(xe,{className:"size-4"}),a("aiAgents.addTool")]})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(m,{children:a("aiSkills.bundles")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("aiAgents.allowAll")}),e.jsx(S,{checked:t.skillBundlesAll,onCheckedChange:s=>n(l=>({...l,skillBundlesAll:s}))})]})]}),t.skillBundlesAll?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiSkills.bundlesAllHint")}):(F.data??[]).length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiSkills.bundlesEmpty")}):e.jsx("div",{className:"space-y-1 rounded-md border p-3",children:F.data.map(s=>{const l=t.skillBundles.includes(s.name);return e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded px-1 py-0.5 text-sm hover:bg-muted",children:[e.jsx(v,{className:"mt-1",checked:l,onCheckedChange:o=>n(r=>({...r,skillBundles:o?[...r.skillBundles,s.name]:r.skillBundles.filter(c=>c!==s.name)}))}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:s.name}),e.jsx(y,{variant:"outline",className:"font-mono text-[10px]",children:s.layer}),!s.valid&&e.jsx(y,{variant:"destructive",className:"text-[10px]",children:"invalid"})]}),e.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:s.valid?s.description:s.error??s.description})]})]},`${s.layer}/${s.name}`)})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiSkills.bundlesHint")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(m,{children:a("aiAgents.kbBinding")}),_.length===0&&t.kbIds.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.kbEmpty")}):e.jsxs("div",{className:"space-y-1 rounded-md border p-3",children:[_.map(s=>{const l=t.kbIds.includes(s.id);return e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded px-1 py-0.5 text-sm hover:bg-muted",children:[e.jsx(v,{className:"mt-1",checked:l,onCheckedChange:o=>n(r=>{const c=o?[...r.kbIds,s.id]:r.kbIds.filter(b=>b!==s.id),h=o&&r.kbIds.length===0&&!r.allowAll&&!r.tools.includes("knowledge_search")?[...r.tools,"knowledge_search"]:r.tools;return{...r,kbIds:c,tools:h}})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{children:s.name}),e.jsx(y,{variant:"outline",className:"font-mono text-[10px]",children:s.kind})]}),s.description&&e.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:s.description})]})]},s.id)}),t.kbIds.filter(s=>!_.some(l=>l.id===s)).map(s=>e.jsxs("div",{className:"flex items-center gap-2 px-1 py-0.5 text-sm",children:[e.jsx(v,{checked:!0,onCheckedChange:()=>n(l=>({...l,kbIds:l.kbIds.filter(o=>o!==s)}))}),e.jsxs(y,{variant:"secondary",className:"gap-1 font-mono",children:[s,e.jsx("button",{type:"button",onClick:()=>n(l=>({...l,kbIds:l.kbIds.filter(o=>o!==s)})),className:"cursor-pointer",children:e.jsx(z,{className:"size-3"})})]})]},s))]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.kbBindingHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"params",children:a("aiAgents.params")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.paramsHint")}),e.jsx(me,{value:t.params,onChange:s=>n(l=>({...l,params:s})),language:"js",placeholder:`{ +import{k as ee,f as C,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as se,cG as ae,cB as te,cA as j,be as z,n as w,ca as N,aE as V,bl as p}from"./index-C-uFVPpg.js";import{u as D}from"./useMutation-BlIm5cor.js";import{C as G,a as R}from"./card-BBIqLCR8.js";import{I as k}from"./input-Bp1SimRr.js";import{T as le}from"./textarea-BhaIg3vS.js";import{L as m}from"./label-DiZ0cGhf.js";import{S}from"./switch-DoovYEIg.js";import{B as y}from"./badge-Dhxp0jil.js";import{C as v}from"./checkbox-CP5mLBLk.js";import{S as ne,e as re,f as ie,a as oe,c as J}from"./select-DJZwiot8.js";import{C as me}from"./code-editor-DjTus6iJ.js";import{a as de}from"./model-select-CfIsbs0T.js";import{g as ce,c as ue,A as pe}from"./ai-tool-catalog-B8AGHhOB.js";import{P as xe}from"./plus-FYsVFl-s.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./vendor-md-editor-vOqM56Ks.js";import"./chevrons-up-down-D2U8cLa1.js";const A="__auto__",he={name:"",system_prompt:"",provider:"openai_compatible",model:"",channel_id:"",temperature:"",max_iterations:"10",memory_enabled:!0,allowAll:!1,tools:[],params:"",skillBundlesAll:!1,skillBundles:[],kbIds:[]};function ge(a){return a.includes("*")?{allowAll:!0,tools:[]}:{allowAll:!1,tools:a}}function je(a){if(!Array.isArray(a))return{all:!1,selected:[]};const i=a.filter(u=>typeof u=="string");return i.includes("*")?{all:!0,selected:[]}:{all:!1,selected:i}}function ye(a){return Array.isArray(a)?a.map(i=>typeof i=="number"?String(i):i).filter(i=>typeof i=="string"):[]}function Y(a,i,u){let d={};return a.trim()&&(d=JSON.parse(a)),i.all?d.skill_bundles=["*"]:i.selected.length>0?d.skill_bundles=i.selected:delete d.skill_bundles,u.length>0?d.kb_ids=u:delete d.kb_ids,Object.keys(d).length>0?d:null}function Re(){var L,M;const{t:a}=se(),i=ae(),u=te(),g=ee().id,x=!!g,[t,n]=C.useState(he),[I,B]=C.useState(""),f=j({queryKey:["ai-agent",g],queryFn:()=>p.admin.aiAgents.get(g),enabled:x}),F=j({queryKey:["ai-skills"],queryFn:()=>p.admin.aiSkills.list()}),$=j({queryKey:[...pe],queryFn:()=>p.send("/admin/ai/tools"),staleTime:300*1e3}),P=ce(((L=$.data)==null?void 0:L.items)??[]),_=(((M=j({queryKey:["ai-agent-kb-list"],queryFn:()=>p.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"100"}})}).data)==null?void 0:M.items)??[]).filter(s=>s.status==="active"),T=j({queryKey:["admin-llm-channels"],queryFn:()=>p.send("/admin/llm/channels"),staleTime:60*1e3}).data??[];C.useEffect(()=>{var h,b;if(!f.data)return;const s=f.data,{allowAll:l,tools:o}=ge(s.tools??[]),r=je((h=s.params)==null?void 0:h.skill_bundles),c=ye((b=s.params)==null?void 0:b.kb_ids);n({name:s.name,system_prompt:s.system_prompt,provider:s.provider,model:s.model,channel_id:s.channel_id??"",temperature:s.temperature!=null?String(s.temperature):"",max_iterations:String(s.max_iterations),memory_enabled:s.memory_enabled,allowAll:l,tools:o,params:s.params?JSON.stringify(s.params,null,2):"",skillBundlesAll:r.all,skillBundles:r.selected,kbIds:c})},[f.data]);const q=D({mutationFn:()=>p.admin.aiAgents.create({name:t.name.trim(),system_prompt:t.system_prompt,provider:t.provider,model:t.model.trim(),channel_id:t.channel_id||void 0,temperature:t.temperature===""?null:Number(t.temperature),tools:t.allowAll?["*"]:t.tools,memory_enabled:t.memory_enabled,params:Y(t.params,{all:t.skillBundlesAll,selected:t.skillBundles},t.kbIds)}),onSuccess:()=>{N.success(a("aiAgents.created")),u.invalidateQueries({queryKey:["ai-agents"]}),i.push("/ai/agents")},onError:s=>{N.error(s instanceof V?s.message:a("aiAgents.createFailed"))}}),E=D({mutationFn:()=>p.admin.aiAgents.update(g,{system_prompt:t.system_prompt,provider:t.provider,model:t.model.trim(),channel_id:t.channel_id||null,temperature:t.temperature===""?null:Number(t.temperature),max_iterations:Number(t.max_iterations)||10,tools:t.allowAll?["*"]:t.tools,memory_enabled:t.memory_enabled,params:Y(t.params,{all:t.skillBundlesAll,selected:t.skillBundles},t.kbIds)}),onSuccess:()=>{N.success(a("aiAgents.updated")),u.invalidateQueries({queryKey:["ai-agents"]}),u.invalidateQueries({queryKey:["ai-agent",g]}),i.push("/ai/agents")},onError:s=>{N.error(s instanceof V?s.message:a("aiAgents.updateFailed"))}}),K=t.params.trim()===""||(()=>{try{return JSON.parse(t.params),!0}catch{return!1}})(),U=!!t.name.trim()&&!!t.model.trim()&&K,Q=q.isPending||E.isPending,X=P.flatMap(s=>s.tools.map(l=>l.name)),H=t.tools.filter(s=>!X.includes(s));function W(s){n(l=>({...l,tools:l.tools.includes(s)?l.tools.filter(o=>o!==s):[...l.tools,s]}))}function O(){const s=I.trim();!s||t.tools.includes(s)||(n(l=>({...l,tools:[...l.tools,s]})),B(""))}function Z(){x?E.mutate():q.mutate()}return x&&f.isLoading?e.jsx("div",{className:"flex items-center justify-center py-20 text-muted-foreground",children:a("common.loading")}):e.jsxs("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-3",children:[e.jsx(G,{className:"lg:col-span-2",children:e.jsxs(R,{className:"space-y-6 pt-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"name",children:[a("aiAgents.name")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(k,{id:"name",value:t.name,disabled:x,onChange:s=>n(l=>({...l,name:s.target.value})),placeholder:a("aiAgents.namePlaceholder")}),x&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.nameImmutable")})]}),e.jsxs("div",{className:"",children:[e.jsxs(m,{htmlFor:"model",children:[a("aiAgents.model")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(de,{className:"mt-2",value:t.model,onChange:s=>n(l=>({...l,model:s})),placeholder:a("aiAgents.modelPlaceholder"),types:["chat","vlm"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{children:a("aiAgents.channelPin")}),e.jsxs(ne,{value:t.channel_id||A,onValueChange:s=>n(l=>({...l,channel_id:!s||s===A?"":s})),items:Object.fromEntries([[A,a("aiAgents.channelPinAuto")],...T.map(s=>[s.id,s.name])]),children:[e.jsx(re,{className:"w-full",children:e.jsx(ie,{})}),e.jsxs(oe,{children:[e.jsx(J,{value:A,children:a("aiAgents.channelPinAuto")}),T.map(s=>e.jsx(J,{value:s.id,children:s.name},s.id))]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.channelPinHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"system_prompt",children:a("aiAgents.systemPrompt")}),e.jsx(le,{id:"system_prompt",value:t.system_prompt,onChange:s=>n(l=>({...l,system_prompt:s.target.value})),placeholder:a("aiAgents.systemPromptPlaceholder"),rows:10,className:"font-mono text-xs"})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(m,{children:a("aiAgents.tools")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("aiAgents.allowAll")}),e.jsx(S,{checked:t.allowAll,onCheckedChange:s=>n(l=>({...l,allowAll:s}))})]})]}),t.allowAll?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.allowAllHint")}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"space-y-3 rounded-md border p-3",children:P.map(s=>e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wide",children:ue(a,s.category)}),e.jsx("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-2 lg:grid-cols-3",children:s.tools.map(l=>{const o=t.tools.includes(l.name);return e.jsxs("label",{title:l.description,className:"flex cursor-pointer items-start gap-2 rounded px-1 py-0.5 text-sm hover:bg-muted",children:[e.jsx(v,{className:"mt-1",checked:o,onCheckedChange:r=>n(c=>({...c,tools:r?[...c.tools,l.name]:c.tools.filter(h=>h!==l.name)}))}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block font-mono text-xs",children:l.name}),e.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:l.description})]})]},l.name)})})]},s.category))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.memoryToolsHint")}),H.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5",children:H.map(s=>e.jsxs(y,{variant:"secondary",className:"gap-1 font-mono",children:[s,e.jsx("button",{type:"button",onClick:()=>W(s),className:"cursor-pointer",children:e.jsx(z,{className:"size-3"})})]},s))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(k,{value:I,onChange:s=>B(s.target.value),onKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),O())},placeholder:a("aiAgents.customToolPlaceholder"),className:"font-mono text-xs"}),e.jsxs(w,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:O,children:[e.jsx(xe,{className:"size-4"}),a("aiAgents.addTool")]})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(m,{children:a("aiSkills.bundles")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:a("aiAgents.allowAll")}),e.jsx(S,{checked:t.skillBundlesAll,onCheckedChange:s=>n(l=>({...l,skillBundlesAll:s}))})]})]}),t.skillBundlesAll?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiSkills.bundlesAllHint")}):(F.data??[]).length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiSkills.bundlesEmpty")}):e.jsx("div",{className:"space-y-1 rounded-md border p-3",children:F.data.map(s=>{const l=t.skillBundles.includes(s.name);return e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded px-1 py-0.5 text-sm hover:bg-muted",children:[e.jsx(v,{className:"mt-1",checked:l,onCheckedChange:o=>n(r=>({...r,skillBundles:o?[...r.skillBundles,s.name]:r.skillBundles.filter(c=>c!==s.name)}))}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:s.name}),e.jsx(y,{variant:"outline",className:"font-mono text-[10px]",children:s.layer}),!s.valid&&e.jsx(y,{variant:"destructive",className:"text-[10px]",children:"invalid"})]}),e.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:s.valid?s.description:s.error??s.description})]})]},`${s.layer}/${s.name}`)})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiSkills.bundlesHint")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(m,{children:a("aiAgents.kbBinding")}),_.length===0&&t.kbIds.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.kbEmpty")}):e.jsxs("div",{className:"space-y-1 rounded-md border p-3",children:[_.map(s=>{const l=t.kbIds.includes(s.id);return e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded px-1 py-0.5 text-sm hover:bg-muted",children:[e.jsx(v,{className:"mt-1",checked:l,onCheckedChange:o=>n(r=>{const c=o?[...r.kbIds,s.id]:r.kbIds.filter(b=>b!==s.id),h=o&&r.kbIds.length===0&&!r.allowAll&&!r.tools.includes("knowledge_search")?[...r.tools,"knowledge_search"]:r.tools;return{...r,kbIds:c,tools:h}})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{children:s.name}),e.jsx(y,{variant:"outline",className:"font-mono text-[10px]",children:s.kind})]}),s.description&&e.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:s.description})]})]},s.id)}),t.kbIds.filter(s=>!_.some(l=>l.id===s)).map(s=>e.jsxs("div",{className:"flex items-center gap-2 px-1 py-0.5 text-sm",children:[e.jsx(v,{checked:!0,onCheckedChange:()=>n(l=>({...l,kbIds:l.kbIds.filter(o=>o!==s)}))}),e.jsxs(y,{variant:"secondary",className:"gap-1 font-mono",children:[s,e.jsx("button",{type:"button",onClick:()=>n(l=>({...l,kbIds:l.kbIds.filter(o=>o!==s)})),className:"cursor-pointer",children:e.jsx(z,{className:"size-3"})})]})]},s))]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.kbBindingHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"params",children:a("aiAgents.params")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.paramsHint")}),e.jsx(me,{value:t.params,onChange:s=>n(l=>({...l,params:s})),language:"js",placeholder:`{ "timeout_secs": 120 -}`,minHeight:"120px"}),!K&&e.jsx("p",{className:"text-xs text-red-500",children:a("aiAgents.paramsInvalid")})]})]})}),e.jsx("div",{className:"space-y-6",children:e.jsx(J,{children:e.jsxs(R,{className:"space-y-5 pt-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(m,{htmlFor:"memory_enabled",children:a("aiAgents.memory")}),e.jsx(S,{id:"memory_enabled",checked:t.memory_enabled,onCheckedChange:s=>n(l=>({...l,memory_enabled:s}))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.memoryHint")}),e.jsxs("div",{className:"space-y-2 border-t pt-4",children:[e.jsx(m,{htmlFor:"temperature",children:a("aiAgents.temperature")}),e.jsx(k,{id:"temperature",type:"number",step:"0.1",min:"0",max:"2",value:t.temperature,onChange:s=>n(l=>({...l,temperature:s.target.value})),placeholder:a("aiAgents.temperaturePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"max_iterations",children:a("aiAgents.maxIterations")}),e.jsx(k,{id:"max_iterations",type:"number",min:"1",max:"50",value:t.max_iterations,onChange:s=>n(l=>({...l,max_iterations:s.target.value}))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.maxIterationsHint")})]})]})})}),e.jsxs("div",{className:"flex items-center gap-2 lg:col-span-3 pt-2 pb-6",children:[e.jsx(w,{onClick:Z,disabled:!U||Q,children:a(Q?"common.saving":x?"common.save":"common.create")}),e.jsx(w,{variant:"outline",onClick:()=>i.push("/ai/agents"),children:a("common.cancel")})]})]})}export{Re as default}; +}`,minHeight:"120px"}),!K&&e.jsx("p",{className:"text-xs text-red-500",children:a("aiAgents.paramsInvalid")})]})]})}),e.jsx("div",{className:"space-y-6",children:e.jsx(G,{children:e.jsxs(R,{className:"space-y-5 pt-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(m,{htmlFor:"memory_enabled",children:a("aiAgents.memory")}),e.jsx(S,{id:"memory_enabled",checked:t.memory_enabled,onCheckedChange:s=>n(l=>({...l,memory_enabled:s}))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.memoryHint")}),e.jsxs("div",{className:"space-y-2 border-t pt-4",children:[e.jsx(m,{htmlFor:"temperature",children:a("aiAgents.temperature")}),e.jsx(k,{id:"temperature",type:"number",step:"0.1",min:"0",max:"2",value:t.temperature,onChange:s=>n(l=>({...l,temperature:s.target.value})),placeholder:a("aiAgents.temperaturePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"max_iterations",children:a("aiAgents.maxIterations")}),e.jsx(k,{id:"max_iterations",type:"number",min:"1",max:"50",value:t.max_iterations,onChange:s=>n(l=>({...l,max_iterations:s.target.value}))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiAgents.maxIterationsHint")})]})]})})}),e.jsxs("div",{className:"flex items-center gap-2 lg:col-span-3 pt-2 pb-6",children:[e.jsx(w,{onClick:Z,disabled:!U||Q,children:a(Q?"common.saving":x?"common.save":"common.create")}),e.jsx(w,{variant:"outline",onClick:()=>i.push("/ai/agents"),children:a("common.cancel")})]})]})}export{Re as default}; diff --git a/adminui/assets/agents-memories-D7gpLj3u.js b/adminui/assets/agents-memories-eXA5RphD.js similarity index 69% rename from adminui/assets/agents-memories-D7gpLj3u.js rename to adminui/assets/agents-memories-eXA5RphD.js index 69ea8f2d..df2e0482 100644 --- a/adminui/assets/agents-memories-D7gpLj3u.js +++ b/adminui/assets/agents-memories-eXA5RphD.js @@ -1,11 +1,11 @@ -import{k as X,f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as K,cJ as Z,cA as ee,cz as H,aI as se,n as h,c9 as u,aE as M,bk as p}from"./index-DFelzBez.js";import{u as k}from"./useMutation-DgRiHz67.js";import{B as ae}from"./badge-BvrzcoWP.js";import{C as te,a as ne}from"./card-D3QxRGt-.js";import{I as j}from"./input-Bx5u8hTS.js";import{T as ie}from"./textarea-Daa6n4S-.js";import{L as g}from"./label-DeKRRvpz.js";import{S as re}from"./switch-DLTIF0BW.js";import{T as oe,d as ce,e as b,c as l,a as le,b as o}from"./table-gihdE9_j.js";import{T as me}from"./table-skeleton-BtLTAVzI.js";import{E as de}from"./empty-state-D0NvGCXa.js";import{S as I,e as O,f as V,a as B,c as C}from"./select-Dc4_9PNt.js";import{D as xe,a as ue,d as he,e as pe,b as ge,c as ye}from"./dialog-Bx55NyOm.js";import{A as je,c as fe,f as ve,g as Ne,d as Me,e as ke,b as be,a as Ce}from"./alert-dialog-B-lBTnCF.js";import{P as Se}from"./plus-DK-V8p7I.js";import{B as Ae}from"./brain-Cq0xTcCG.js";import{P as Te}from"./pencil-BgXbFsNu.js";import{T as De}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";/** +import{k as X,f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{bq as Q,cK as Z,cB as ee,cA as H,aJ as se,n as h,ca as u,aE as M,bl as p}from"./index-C-uFVPpg.js";import{u as b}from"./useMutation-BlIm5cor.js";import{B as ae}from"./badge-Dhxp0jil.js";import{C as te,a as ne}from"./card-BBIqLCR8.js";import{I as j}from"./input-Bp1SimRr.js";import{T as ie}from"./textarea-BhaIg3vS.js";import{L as g}from"./label-DiZ0cGhf.js";import{S as re}from"./switch-DoovYEIg.js";import{T as oe,d as ce,e as k,c as l,a as le,b as o}from"./table-BoLxzYJ7.js";import{T as me}from"./table-skeleton-fqjGRt14.js";import{E as de}from"./empty-state-CCcgx4uH.js";import{S as O,e as V,f as B,a as I,c as C}from"./select-DJZwiot8.js";import{D as xe,a as ue,d as he,e as pe,b as ge,c as ye}from"./dialog-if7Fez9x.js";import{A as je,c as fe,f as ve,g as Ne,d as Me,e as be,b as ke,a as Ce}from"./alert-dialog-C8VouOFc.js";import{P as Se}from"./plus-FYsVFl-s.js";import{B as Ae}from"./brain-Dg6Cf5le.js";import{P as Te}from"./pencil-xelQXmMG.js";import{T as De}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const _e=[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]],L=K("pin",_e);/** + */const _e=[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]],K=Q("pin",_e);/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Fe=[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]],we=K("pin-off",Fe),S=["core","daily","conversation","custom"],Q={key:"",content:"",category:"core",importance:"0.5",user_id:"",pinned:!1};function ze(a){if(!a)return"-";try{return new Date(a).toLocaleString()}catch{return a}}function Ee(a){return a?a.length>10?`${a.slice(0,8)}…`:a:"-"}function ls(){var q;const{t:a}=Z(),i=X().id,R=ee(),[f,$]=x.useState(""),[y,G]=x.useState("all"),[J,m]=x.useState(!1),[A,T]=x.useState(null),[t,r]=x.useState(Q),[d,v]=x.useState(null),Y=H({queryKey:["ai-agent",i],queryFn:()=>p.admin.aiAgents.get(i)}),D=H({queryKey:["ai-agent-memories",i,f,y],queryFn:()=>p.admin.aiAgents.listMemories(i,{q:f||void 0,category:y==="all"?void 0:y,limit:500})});function N(){R.invalidateQueries({queryKey:["ai-agent-memories",i]})}const _=k({mutationFn:()=>p.admin.aiAgents.upsertMemory(i,{key:t.key.trim(),content:t.content,category:t.category,importance:Number(t.importance)||.5,user_id:t.user_id.trim()||void 0}),onSuccess:()=>{u.success(a("aiMemory.saved")),N(),m(!1)},onError:s=>{u.error(s instanceof M?s.message:a("aiMemory.saveFailed"))}}),F=k({mutationFn:()=>p.admin.aiAgents.updateMemory(i,A.id,{content:t.content,category:t.category,importance:Number(t.importance)||.5,pinned:t.pinned}),onSuccess:()=>{u.success(a("aiMemory.saved")),N(),m(!1)},onError:s=>{u.error(s instanceof M?s.message:a("aiMemory.saveFailed"))}}),w=k({mutationFn:s=>p.admin.aiAgents.deleteMemory(i,s),onSuccess:()=>{u.success(a("aiMemory.deleted")),N()},onError:s=>{u.error(s instanceof M?s.message:a("aiMemory.deleteFailed"))}});function z(){T(null),r(Q),m(!0)}function U(s){T(s),r({key:s.key,content:s.content,category:S.includes(s.category)?s.category:"custom",importance:String(s.importance),user_id:s.user_id??"",pinned:s.pinned}),m(!0)}const E=D.data??[],c=!!A,W=(c||!!t.key.trim())&&!!t.content.trim(),P=_.isPending||F.isPending;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("h2",{className:"text-lg font-semibold truncate",children:[((q=Y.data)==null?void 0:q.name)??i,e.jsx("span",{className:"ms-2 text-sm font-normal text-muted-foreground",children:a("aiMemory.title")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(se,{className:"absolute start-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(j,{value:f,onChange:s=>$(s.target.value),placeholder:a("aiMemory.searchPlaceholder"),className:"w-56 ps-8"})]}),e.jsxs(I,{value:y,onValueChange:s=>{s&&G(s)},children:[e.jsx(O,{className:"w-36",children:e.jsx(V,{})}),e.jsxs(B,{children:[e.jsx(C,{value:"all",children:a("aiMemory.allCategories")}),S.map(s=>e.jsx(C,{value:s,children:e.jsx("span",{className:"font-mono text-xs",children:s})},s))]})]}),e.jsxs(h,{size:"sm",onClick:z,children:[e.jsx(Se,{className:"size-4"}),a("aiMemory.add")]})]})]}),e.jsx(te,{children:e.jsx(ne,{className:"p-0",children:D.isLoading?e.jsx(me,{cols:7}):e.jsxs(oe,{children:[e.jsx(ce,{children:e.jsxs(b,{children:[e.jsx(l,{children:a("aiMemory.key")}),e.jsx(l,{children:a("aiMemory.content")}),e.jsx(l,{children:a("aiMemory.category")}),e.jsx(l,{children:a("aiMemory.importance")}),e.jsx(l,{children:a("aiMemory.user")}),e.jsx(l,{children:a("aiAgents.updatedAt")}),e.jsx(l,{className:"text-end",children:a("common.actions")})]})}),e.jsx(le,{children:E.length===0?e.jsx(b,{children:e.jsx(o,{colSpan:7,children:e.jsx(de,{icon:Ae,title:a("aiMemory.noMemories"),description:a("aiMemory.emptyHint"),action:{label:a("aiMemory.add"),onClick:z}})})}):E.map(s=>e.jsxs(b,{children:[e.jsx(o,{className:"font-mono text-xs",children:e.jsxs("span",{className:"inline-flex items-center gap-1",children:[s.pinned&&e.jsx(L,{className:"size-3 text-amber-500","aria-label":"pinned"}),s.key]})}),e.jsx(o,{className:"max-w-[320px]",children:e.jsx("span",{className:"line-clamp-2 text-sm text-muted-foreground",title:s.content,children:s.content})}),e.jsx(o,{children:e.jsx(ae,{variant:"ghost",className:"font-mono text-xs",children:s.category})}),e.jsx(o,{className:"text-sm",children:s.importance.toFixed(2)}),e.jsx(o,{className:"font-mono text-xs text-muted-foreground",title:s.user_id??"",children:Ee(s.user_id)}),e.jsx(o,{className:"text-sm text-muted-foreground",children:ze(s.updated_at)}),e.jsx(o,{className:"text-end",children:e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[e.jsx(h,{variant:"ghost",size:"icon-sm",onClick:()=>U(s),title:a("common.edit"),children:e.jsx(Te,{className:"size-4"})}),e.jsx(h,{variant:"ghost",size:"icon-sm",disabled:w.isPending,onClick:()=>v(s),title:a("common.delete"),children:e.jsx(De,{className:"size-4 text-destructive"})})]})})]},s.id))})]})})}),e.jsx(xe,{open:J,onOpenChange:m,children:e.jsxs(ue,{className:"sm:max-w-lg max-h-[85vh] grid-rows-[auto_minmax(0,1fr)_auto]",children:[e.jsxs(he,{children:[e.jsx(pe,{children:a(c?"aiMemory.editTitle":"aiMemory.addTitle")}),e.jsx(ge,{children:a("aiMemory.dialogHint")})]}),e.jsxs("div",{className:"min-h-0 space-y-4 overflow-y-auto pe-1",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(g,{htmlFor:"mem-key",children:[a("aiMemory.key")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(j,{id:"mem-key",value:t.key,disabled:c,onChange:s=>r(n=>({...n,key:s.target.value})),placeholder:"user_prefers_dark_mode",className:"font-mono text-xs"}),c&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiMemory.keyImmutable")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(g,{htmlFor:"mem-content",children:[a("aiMemory.content")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(ie,{id:"mem-content",value:t.content,onChange:s=>r(n=>({...n,content:s.target.value})),rows:4})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{children:a("aiMemory.category")}),e.jsxs(I,{value:t.category,onValueChange:s=>{s&&r(n=>({...n,category:s}))},children:[e.jsx(O,{className:"w-full",children:e.jsx(V,{})}),e.jsx(B,{children:S.map(s=>e.jsx(C,{value:s,children:e.jsx("span",{className:"font-mono text-xs",children:s})},s))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiMemory.categoryHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"mem-importance",children:a("aiMemory.importance")}),e.jsx(j,{id:"mem-importance",type:"number",step:"0.05",min:"0",max:"1",value:t.importance,onChange:s=>r(n=>({...n,importance:s.target.value}))})]})]}),!c&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"mem-user",children:a("aiMemory.userOptional")}),e.jsx(j,{id:"mem-user",value:t.user_id,onChange:s=>r(n=>({...n,user_id:s.target.value})),placeholder:a("aiMemory.userPlaceholder"),className:"font-mono text-xs"})]}),c&&e.jsxs("div",{className:"flex items-center justify-between rounded-md border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[t.pinned?e.jsx(L,{className:"size-4"}):e.jsx(we,{className:"size-4 text-muted-foreground"}),a("aiMemory.pinned")]}),e.jsx(re,{checked:t.pinned,onCheckedChange:s=>r(n=>({...n,pinned:s}))})]})]}),e.jsxs(ye,{children:[e.jsx(h,{variant:"outline",onClick:()=>m(!1),children:a("common.cancel")}),e.jsx(h,{disabled:!W||P,onClick:()=>c?F.mutate():_.mutate(),children:a(P?"common.saving":"common.save")})]})]})}),e.jsx(je,{open:!!d,onOpenChange:s=>{s||v(null)},children:e.jsxs(fe,{children:[e.jsxs(ve,{children:[e.jsx(Ne,{children:a("common.delete")}),e.jsx(Me,{children:a("aiMemory.confirmDelete",{key:(d==null?void 0:d.key)??""})})]}),e.jsxs(ke,{children:[e.jsx(be,{children:a("common.cancel")}),e.jsx(Ce,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{d&&w.mutate(d.id),v(null)},children:a("common.delete")})]})]})})]})}export{ls as default}; + */const Fe=[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]],we=Q("pin-off",Fe),S=["core","daily","conversation","custom"],L={key:"",content:"",category:"core",importance:"0.5",user_id:"",pinned:!1};function Ee(a){if(!a)return"-";try{return new Date(a).toLocaleString()}catch{return a}}function Pe(a){return a?a.length>10?`${a.slice(0,8)}…`:a:"-"}function ls(){var q;const{t:a}=Z(),i=X().id,R=ee(),[f,$]=x.useState(""),[y,G]=x.useState("all"),[J,m]=x.useState(!1),[A,T]=x.useState(null),[t,r]=x.useState(L),[d,v]=x.useState(null),Y=H({queryKey:["ai-agent",i],queryFn:()=>p.admin.aiAgents.get(i)}),D=H({queryKey:["ai-agent-memories",i,f,y],queryFn:()=>p.admin.aiAgents.listMemories(i,{q:f||void 0,category:y==="all"?void 0:y,limit:500})});function N(){R.invalidateQueries({queryKey:["ai-agent-memories",i]})}const _=b({mutationFn:()=>p.admin.aiAgents.upsertMemory(i,{key:t.key.trim(),content:t.content,category:t.category,importance:Number(t.importance)||.5,user_id:t.user_id.trim()||void 0}),onSuccess:()=>{u.success(a("aiMemory.saved")),N(),m(!1)},onError:s=>{u.error(s instanceof M?s.message:a("aiMemory.saveFailed"))}}),F=b({mutationFn:()=>p.admin.aiAgents.updateMemory(i,A.id,{content:t.content,category:t.category,importance:Number(t.importance)||.5,pinned:t.pinned}),onSuccess:()=>{u.success(a("aiMemory.saved")),N(),m(!1)},onError:s=>{u.error(s instanceof M?s.message:a("aiMemory.saveFailed"))}}),w=b({mutationFn:s=>p.admin.aiAgents.deleteMemory(i,s),onSuccess:()=>{u.success(a("aiMemory.deleted")),N()},onError:s=>{u.error(s instanceof M?s.message:a("aiMemory.deleteFailed"))}});function E(){T(null),r(L),m(!0)}function U(s){T(s),r({key:s.key,content:s.content,category:S.includes(s.category)?s.category:"custom",importance:String(s.importance),user_id:s.user_id??"",pinned:s.pinned}),m(!0)}const P=D.data??[],c=!!A,W=(c||!!t.key.trim())&&!!t.content.trim(),z=_.isPending||F.isPending;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("h2",{className:"text-lg font-semibold truncate",children:[((q=Y.data)==null?void 0:q.name)??i,e.jsx("span",{className:"ms-2 text-sm font-normal text-muted-foreground",children:a("aiMemory.title")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(se,{className:"absolute start-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(j,{value:f,onChange:s=>$(s.target.value),placeholder:a("aiMemory.searchPlaceholder"),className:"w-56 ps-8"})]}),e.jsxs(O,{value:y,onValueChange:s=>{s&&G(s)},children:[e.jsx(V,{className:"w-36",children:e.jsx(B,{})}),e.jsxs(I,{children:[e.jsx(C,{value:"all",children:a("aiMemory.allCategories")}),S.map(s=>e.jsx(C,{value:s,children:e.jsx("span",{className:"font-mono text-xs",children:s})},s))]})]}),e.jsxs(h,{size:"sm",onClick:E,children:[e.jsx(Se,{className:"size-4"}),a("aiMemory.add")]})]})]}),e.jsx(te,{children:e.jsx(ne,{className:"p-0",children:D.isLoading?e.jsx(me,{cols:7}):e.jsxs(oe,{children:[e.jsx(ce,{children:e.jsxs(k,{children:[e.jsx(l,{children:a("aiMemory.key")}),e.jsx(l,{children:a("aiMemory.content")}),e.jsx(l,{children:a("aiMemory.category")}),e.jsx(l,{children:a("aiMemory.importance")}),e.jsx(l,{children:a("aiMemory.user")}),e.jsx(l,{children:a("aiAgents.updatedAt")}),e.jsx(l,{className:"text-end",children:a("common.actions")})]})}),e.jsx(le,{children:P.length===0?e.jsx(k,{children:e.jsx(o,{colSpan:7,children:e.jsx(de,{icon:Ae,title:a("aiMemory.noMemories"),description:a("aiMemory.emptyHint"),action:{label:a("aiMemory.add"),onClick:E}})})}):P.map(s=>e.jsxs(k,{children:[e.jsx(o,{className:"font-mono text-xs",children:e.jsxs("span",{className:"inline-flex items-center gap-1",children:[s.pinned&&e.jsx(K,{className:"size-3 text-amber-500","aria-label":"pinned"}),s.key]})}),e.jsx(o,{className:"max-w-[320px]",children:e.jsx("span",{className:"line-clamp-2 text-sm text-muted-foreground",title:s.content,children:s.content})}),e.jsx(o,{children:e.jsx(ae,{variant:"ghost",className:"font-mono text-xs",children:s.category})}),e.jsx(o,{className:"text-sm",children:s.importance.toFixed(2)}),e.jsx(o,{className:"font-mono text-xs text-muted-foreground",title:s.user_id??"",children:Pe(s.user_id)}),e.jsx(o,{className:"text-sm text-muted-foreground",children:Ee(s.updated_at)}),e.jsx(o,{className:"text-end",children:e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[e.jsx(h,{variant:"ghost",size:"icon-sm",onClick:()=>U(s),title:a("common.edit"),children:e.jsx(Te,{className:"size-4"})}),e.jsx(h,{variant:"ghost",size:"icon-sm",disabled:w.isPending,onClick:()=>v(s),title:a("common.delete"),children:e.jsx(De,{className:"size-4 text-destructive"})})]})})]},s.id))})]})})}),e.jsx(xe,{open:J,onOpenChange:m,children:e.jsxs(ue,{className:"sm:max-w-lg max-h-[85vh] grid-rows-[auto_minmax(0,1fr)_auto]",children:[e.jsxs(he,{children:[e.jsx(pe,{children:a(c?"aiMemory.editTitle":"aiMemory.addTitle")}),e.jsx(ge,{children:a("aiMemory.dialogHint")})]}),e.jsxs("div",{className:"min-h-0 space-y-4 overflow-y-auto pe-1",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(g,{htmlFor:"mem-key",children:[a("aiMemory.key")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(j,{id:"mem-key",value:t.key,disabled:c,onChange:s=>r(n=>({...n,key:s.target.value})),placeholder:"user_prefers_dark_mode",className:"font-mono text-xs"}),c&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiMemory.keyImmutable")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(g,{htmlFor:"mem-content",children:[a("aiMemory.content")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(ie,{id:"mem-content",value:t.content,onChange:s=>r(n=>({...n,content:s.target.value})),rows:4})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{children:a("aiMemory.category")}),e.jsxs(O,{value:t.category,onValueChange:s=>{s&&r(n=>({...n,category:s}))},children:[e.jsx(V,{className:"w-full",children:e.jsx(B,{})}),e.jsx(I,{children:S.map(s=>e.jsx(C,{value:s,children:e.jsx("span",{className:"font-mono text-xs",children:s})},s))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("aiMemory.categoryHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"mem-importance",children:a("aiMemory.importance")}),e.jsx(j,{id:"mem-importance",type:"number",step:"0.05",min:"0",max:"1",value:t.importance,onChange:s=>r(n=>({...n,importance:s.target.value}))})]})]}),!c&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"mem-user",children:a("aiMemory.userOptional")}),e.jsx(j,{id:"mem-user",value:t.user_id,onChange:s=>r(n=>({...n,user_id:s.target.value})),placeholder:a("aiMemory.userPlaceholder"),className:"font-mono text-xs"})]}),c&&e.jsxs("div",{className:"flex items-center justify-between rounded-md border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[t.pinned?e.jsx(K,{className:"size-4"}):e.jsx(we,{className:"size-4 text-muted-foreground"}),a("aiMemory.pinned")]}),e.jsx(re,{checked:t.pinned,onCheckedChange:s=>r(n=>({...n,pinned:s}))})]})]}),e.jsxs(ye,{children:[e.jsx(h,{variant:"outline",onClick:()=>m(!1),children:a("common.cancel")}),e.jsx(h,{disabled:!W||z,onClick:()=>c?F.mutate():_.mutate(),children:a(z?"common.saving":"common.save")})]})]})}),e.jsx(je,{open:!!d,onOpenChange:s=>{s||v(null)},children:e.jsxs(fe,{children:[e.jsxs(ve,{children:[e.jsx(Ne,{children:a("common.delete")}),e.jsx(Me,{children:a("aiMemory.confirmDelete",{key:(d==null?void 0:d.key)??""})})]}),e.jsxs(be,{children:[e.jsx(ke,{children:a("common.cancel")}),e.jsx(Ce,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{d&&w.mutate(d.id),v(null)},children:a("common.delete")})]})]})})]})}export{ls as default}; diff --git a/adminui/assets/agents-usage-CgNqFA_B.js b/adminui/assets/agents-usage-BEdf7HGj.js similarity index 86% rename from adminui/assets/agents-usage-CgNqFA_B.js rename to adminui/assets/agents-usage-BEdf7HGj.js index 7ea0ac11..d5e8e3c0 100644 --- a/adminui/assets/agents-usage-CgNqFA_B.js +++ b/adminui/assets/agents-usage-BEdf7HGj.js @@ -1 +1 @@ -import{k as y,f as T,j as a}from"./vendor-react-j_G0Dyx0.js";import{cJ as _,cz as u,aT as g,bk as m}from"./index-DFelzBez.js";import{B as v,b as C,C as N,c as U,a as S,d as A,p as q}from"./vendor-charts-KgA3E3bV.js";import{C as p,a as x,c as F,d as L}from"./card-D3QxRGt-.js";import{T as R,b as w,c}from"./tabs-I7xZXZiG.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";C.register(N,U,S,A,q);function i(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function H(){var d;const{t:e}=_(),l=y().id,[r,h]=T.useState("30"),b=u({queryKey:["ai-agent",l],queryFn:()=>m.admin.aiAgents.get(l)}),o=u({queryKey:["ai-agent-usage",l,r],queryFn:()=>m.admin.aiAgents.usage(l,Number(r))}),s=o.data,n=(s==null?void 0:s.daily)??[],k={labels:n.map(t=>t.date.slice(5)),datasets:[{label:e("aiUsage.inputTokens"),data:n.map(t=>t.input_tokens),backgroundColor:"rgba(59, 130, 246, 0.7)",stack:"tokens"},{label:e("aiUsage.outputTokens"),data:n.map(t=>t.output_tokens),backgroundColor:"rgba(16, 185, 129, 0.7)",stack:"tokens"},{label:e("aiUsage.cacheReadTokens"),data:n.map(t=>t.cache_read_tokens),backgroundColor:"rgba(168, 85, 247, 0.7)",stack:"tokens"}]},j={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{x:{stacked:!0,grid:{display:!1}},y:{stacked:!0,ticks:{callback:t=>i(Number(t))}}},plugins:{legend:{position:"bottom"}}},f=[{label:e("aiUsage.totalTurns"),value:s?String(s.total_turns):"-"},{label:e("aiUsage.inputTokens"),value:s?i(s.total_input_tokens):"-"},{label:e("aiUsage.outputTokens"),value:s?i(s.total_output_tokens):"-"},{label:e("aiUsage.toolCalls"),value:s?String(s.total_tool_calls):"-"},{label:e("aiUsage.cacheReadTokens"),value:s?i(s.total_cache_read_tokens):"-"}];return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between gap-4",children:[a.jsx("h2",{className:"text-lg font-semibold truncate",children:((d=b.data)==null?void 0:d.name)??l}),a.jsx(R,{value:r,onValueChange:h,children:a.jsxs(w,{children:[a.jsx(c,{value:"7",children:"7d"}),a.jsx(c,{value:"30",children:"30d"}),a.jsx(c,{value:"90",children:"90d"})]})})]}),a.jsx("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-5",children:f.map(t=>a.jsx(p,{children:a.jsxs(x,{className:"p-4",children:[a.jsx("p",{className:"text-xs text-muted-foreground",children:t.label}),o.isLoading?a.jsx(g,{className:"mt-1.5 h-6 w-16"}):a.jsx("p",{className:"text-xl font-semibold",children:t.value})]})},t.label))}),a.jsxs(p,{children:[a.jsx(F,{children:a.jsx(L,{className:"text-base",children:e("aiUsage.dailyTitle")})}),a.jsx(x,{children:o.isLoading?a.jsx(g,{className:"h-[300px] w-full"}):n.length===0?a.jsx("p",{className:"py-16 text-center text-sm text-muted-foreground",children:e("aiUsage.noData")}):a.jsx("div",{className:"h-[300px]",children:a.jsx(v,{data:k,options:j})})})]})]})}export{H as default}; +import{k as y,f as T,j as a}from"./vendor-react-j_G0Dyx0.js";import{cK as _,cA as u,aU as g,bl as m}from"./index-C-uFVPpg.js";import{B as v,b as C,C as N,c as U,a as S,d as A,p as q}from"./vendor-charts-KgA3E3bV.js";import{C as p,a as x,c as F,d as K}from"./card-BBIqLCR8.js";import{T as L,b as R,c}from"./tabs-DbCrogTH.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";C.register(N,U,S,A,q);function i(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function M(){var d;const{t:e}=_(),l=y().id,[r,h]=T.useState("30"),b=u({queryKey:["ai-agent",l],queryFn:()=>m.admin.aiAgents.get(l)}),o=u({queryKey:["ai-agent-usage",l,r],queryFn:()=>m.admin.aiAgents.usage(l,Number(r))}),s=o.data,n=(s==null?void 0:s.daily)??[],k={labels:n.map(t=>t.date.slice(5)),datasets:[{label:e("aiUsage.inputTokens"),data:n.map(t=>t.input_tokens),backgroundColor:"rgba(59, 130, 246, 0.7)",stack:"tokens"},{label:e("aiUsage.outputTokens"),data:n.map(t=>t.output_tokens),backgroundColor:"rgba(16, 185, 129, 0.7)",stack:"tokens"},{label:e("aiUsage.cacheReadTokens"),data:n.map(t=>t.cache_read_tokens),backgroundColor:"rgba(168, 85, 247, 0.7)",stack:"tokens"}]},j={responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{x:{stacked:!0,grid:{display:!1}},y:{stacked:!0,ticks:{callback:t=>i(Number(t))}}},plugins:{legend:{position:"bottom"}}},f=[{label:e("aiUsage.totalTurns"),value:s?String(s.total_turns):"-"},{label:e("aiUsage.inputTokens"),value:s?i(s.total_input_tokens):"-"},{label:e("aiUsage.outputTokens"),value:s?i(s.total_output_tokens):"-"},{label:e("aiUsage.toolCalls"),value:s?String(s.total_tool_calls):"-"},{label:e("aiUsage.cacheReadTokens"),value:s?i(s.total_cache_read_tokens):"-"}];return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between gap-4",children:[a.jsx("h2",{className:"text-lg font-semibold truncate",children:((d=b.data)==null?void 0:d.name)??l}),a.jsx(L,{value:r,onValueChange:h,children:a.jsxs(R,{children:[a.jsx(c,{value:"7",children:"7d"}),a.jsx(c,{value:"30",children:"30d"}),a.jsx(c,{value:"90",children:"90d"})]})})]}),a.jsx("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-5",children:f.map(t=>a.jsx(p,{children:a.jsxs(x,{className:"p-4",children:[a.jsx("p",{className:"text-xs text-muted-foreground",children:t.label}),o.isLoading?a.jsx(g,{className:"mt-1.5 h-6 w-16"}):a.jsx("p",{className:"text-xl font-semibold",children:t.value})]})},t.label))}),a.jsxs(p,{children:[a.jsx(F,{children:a.jsx(K,{className:"text-base",children:e("aiUsage.dailyTitle")})}),a.jsx(x,{children:o.isLoading?a.jsx(g,{className:"h-[300px] w-full"}):n.length===0?a.jsx("p",{className:"py-16 text-center text-sm text-muted-foreground",children:e("aiUsage.noData")}):a.jsx("div",{className:"h-[300px]",children:a.jsx(v,{data:k,options:j})})})]})]})}export{M as default}; diff --git a/adminui/assets/alert-dialog-B-lBTnCF.js b/adminui/assets/alert-dialog-C8VouOFc.js similarity index 93% rename from adminui/assets/alert-dialog-B-lBTnCF.js rename to adminui/assets/alert-dialog-C8VouOFc.js index 35b5531b..0c39cf9d 100644 --- a/adminui/assets/alert-dialog-B-lBTnCF.js +++ b/adminui/assets/alert-dialog-C8VouOFc.js @@ -1 +1 @@ -import{j as e}from"./vendor-react-j_G0Dyx0.js";import{cD as d,P as i,bl as o,S as n,O as g,N as u,n as r,Q as c,M as f}from"./index-DFelzBez.js";function m(a){return d(a,"alert-dialog")}function b({...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 z({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 N({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 h({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 v({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 w({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{b as A,w as a,y as b,z as c,v as d,N as e,A as f,h as g}; +import{j as e}from"./vendor-react-j_G0Dyx0.js";import{cE as d,P as i,bm as o,S as n,O as g,N as u,n as r,Q as c,M as f}from"./index-C-uFVPpg.js";function m(a){return d(a,"alert-dialog")}function b({...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 z({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 N({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 h({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 v({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 w({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{b as A,w as a,y as b,z as c,v as d,N as e,A as f,h as g}; diff --git a/adminui/assets/api-clients-BZR4SdcI.js b/adminui/assets/api-clients-DLQk1tBd.js similarity index 77% rename from adminui/assets/api-clients-BZR4SdcI.js rename to adminui/assets/api-clients-DLQk1tBd.js index 04ddcab1..b26a4c18 100644 --- a/adminui/assets/api-clients-BZR4SdcI.js +++ b/adminui/assets/api-clients-DLQk1tBd.js @@ -1 +1 @@ -import{f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as _e,cA as Se,cz as $,n as j,as as we,T as De,_ as Ee,U as Ae,V as Q,c9 as x,aE as k,bk as g}from"./index-DFelzBez.js";import{u as T}from"./useMutation-DgRiHz67.js";import{A as Oe,c as Pe,f as Fe,g as ze,d as Me,e as Ke,b as Le,a as qe}from"./alert-dialog-B-lBTnCF.js";import{B as O}from"./badge-BvrzcoWP.js";import{C as le,a as re}from"./card-D3QxRGt-.js";import{D as R,f as Je,a as V,d as B,e as U,c as Y}from"./dialog-Bx55NyOm.js";import{I as Z}from"./input-Bx5u8hTS.js";import{L as c}from"./label-DeKRRvpz.js";import{S as oe,e as ce,f as de,a as me,c as ue}from"./select-Dc4_9PNt.js";import{S as xe}from"./switch-DLTIF0BW.js";import{T as he,d as je,e as C,c as r,a as ge,b as l}from"./table-gihdE9_j.js";import{T as He,b as Ie,c as pe,a as fe}from"./tabs-I7xZXZiG.js";import{T as _}from"./textarea-Daa6n4S-.js";import{T as ye}from"./table-skeleton-BtLTAVzI.js";import{E as ve}from"./empty-state-D0NvGCXa.js";import{P as Qe}from"./plus-DK-V8p7I.js";import{E as Re}from"./ellipsis-vertical-UHYLUh-c.js";import{P as Ve}from"./pencil-BgXbFsNu.js";import{S as Ce}from"./send-CYerJHOr.js";import{T as Be}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.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 A(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=$({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(O,{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 _s(){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,z]=d.useState(null),[M,G]=d.useState(""),[W,X]=d.useState("{}"),[u,S]=d.useState(null),[K,ke]=d.useState(""),L=$({queryKey:["admin-integration-api-clients"],queryFn:()=>g.admin.integration.listApiClients()}),w=d.useMemo(()=>L.data??[],[L.data]),ee=$({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 I=E(i.ops,n);if(I===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),I!==void 0&&(b.ops=I),b}const J=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"))}),H=T({mutationFn:()=>{let s;try{s=JSON.parse(W||"{}")}catch{return Promise.reject(new Error("invalid json"))}return g.admin.integration.testCall((m==null?void 0:m.id)??"",{op:M,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(Z,{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(Z,{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(Z,{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(He,{defaultValue:"clients",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(Ie,{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(Je,{render:e.jsx(j,{}),children:[e.jsx(Qe,{className:"size-4"}),n("integration.newClient")]}),e.jsxs(V,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(B,{children:e.jsx(U,{children:n("integration.newClient")})}),ie(!1),e.jsxs(Y,{children:[e.jsx(j,{variant:"outline",onClick:()=>{p(!1),q()},children:n("common.cancel")}),e.jsx(j,{onClick:()=>J.mutate(),disabled:J.isPending||!i.client_key||!i.base_url,children:J.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(O,{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:A(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(Ae,{align:"end",children:[e.jsxs(Q,{onClick:()=>Te(s),children:[e.jsx(Ve,{className:"size-4 me-2"}),n("common.edit")]}),e.jsxs(Q,{onClick:()=>{z(s),G(A(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(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: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(Ye,{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(O,{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(V,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(B,{children:e.jsx(U,{children:n("integration.editClient")})}),ie(!0),e.jsxs(Y,{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||(z(null),S(null))},children:e.jsxs(V,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(B,{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:M||void 0,onValueChange:s=>G(s??""),items:Object.fromEntries(A(m).map(s=>[s,s])),children:[e.jsx(ce,{className:"w-full",children:e.jsx(de,{placeholder:n("integration.selectOp")})}),e.jsx(me,{children:A(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:W,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(O,{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(Y,{children:[e.jsx(j,{variant:"outline",onClick:()=>{z(null),S(null)},children:n("common.close")}),e.jsx(j,{onClick:()=>H.mutate(),disabled:H.isPending||!M,children:H.isPending?n("common.loading"):n("integration.runTest")})]})]})}),e.jsx(Oe,{open:!!o,onOpenChange:s=>{s||P(null)},children:e.jsxs(Pe,{children:[e.jsxs(Fe,{children:[e.jsx(ze,{children:n("common.confirmDeleteTitle")}),e.jsx(Me,{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 Ye({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{_s as default}; +import{f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as _e,cB as Se,cA as $,n as j,as as we,T as De,_ as Ee,U as Ae,V as Q,ca as x,aE as k,bl as g}from"./index-C-uFVPpg.js";import{u as T}from"./useMutation-BlIm5cor.js";import{A as Oe,c as Pe,f as Fe,g as Me,d as ze,e as Ke,b as Le,a as qe}from"./alert-dialog-C8VouOFc.js";import{B as O}from"./badge-Dhxp0jil.js";import{C as le,a as re}from"./card-BBIqLCR8.js";import{D as B,f as He,a as R,d as V,e as U,c as Y}from"./dialog-if7Fez9x.js";import{I as Z}from"./input-Bp1SimRr.js";import{L as c}from"./label-DiZ0cGhf.js";import{S as oe,e as ce,f as de,a as me,c as ue}from"./select-DJZwiot8.js";import{S as xe}from"./switch-DoovYEIg.js";import{T as he,d as je,e as C,c as r,a as ge,b as l}from"./table-BoLxzYJ7.js";import{T as Ie,b as Je,c as pe,a as fe}from"./tabs-DbCrogTH.js";import{T as _}from"./textarea-BhaIg3vS.js";import{T as ye}from"./table-skeleton-fqjGRt14.js";import{E as ve}from"./empty-state-CCcgx4uH.js";import{P as Qe}from"./plus-FYsVFl-s.js";import{E as Be}from"./ellipsis-vertical-B-dHvJs4.js";import{P as Re}from"./pencil-xelQXmMG.js";import{S as Ce}from"./send-CR0YI54n.js";import{T as Ve}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.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 A(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=$({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(O,{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 _s(){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,G]=d.useState(""),[W,X]=d.useState("{}"),[u,S]=d.useState(null),[K,ke]=d.useState(""),L=$({queryKey:["admin-integration-api-clients"],queryFn:()=>g.admin.integration.listApiClients()}),w=d.useMemo(()=>L.data??[],[L.data]),ee=$({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(W||"{}")}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(Z,{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(Z,{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(Z,{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(B,{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(R,{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(Y,{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(O,{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:A(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(Be,{className:"size-4"})}),e.jsxs(Ae,{align:"end",children:[e.jsxs(Q,{onClick:()=>Te(s),children:[e.jsx(Re,{className:"size-4 me-2"}),n("common.edit")]}),e.jsxs(Q,{onClick:()=>{M(s),G(A(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(Ye,{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(O,{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(B,{open:!!f,onOpenChange:s=>{s||y(null)},children:e.jsxs(R,{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(Y,{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(B,{open:!!m,onOpenChange:s=>{s||(M(null),S(null))},children:e.jsxs(R,{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=>G(s??""),items:Object.fromEntries(A(m).map(s=>[s,s])),children:[e.jsx(ce,{className:"w-full",children:e.jsx(de,{placeholder:n("integration.selectOp")})}),e.jsx(me,{children:A(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:W,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(O,{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(Y,{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(Oe,{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 Ye({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{_s as default}; diff --git a/adminui/assets/api-config-sheet-f4EYqFLf.js b/adminui/assets/api-config-sheet--dx-VZNy.js similarity index 84% rename from adminui/assets/api-config-sheet-f4EYqFLf.js rename to adminui/assets/api-config-sheet--dx-VZNy.js index 6aaa356e..a4986a6b 100644 --- a/adminui/assets/api-config-sheet-f4EYqFLf.js +++ b/adminui/assets/api-config-sheet--dx-VZNy.js @@ -1 +1 @@ -import{j as e,f as N}from"./vendor-react-j_G0Dyx0.js";import{cJ as j,aL as k,aM as y,aP as S,aQ as C,aN as w,aO as T,n as A,b0 as E,a_ as $,b1 as P,t as _,a$ as O,c9 as g}from"./index-DFelzBez.js";import{I as f}from"./input-Bx5u8hTS.js";import{S as D}from"./switch-DLTIF0BW.js";import{S as F,e as z,f as I,a as L,c as G}from"./select-Dc4_9PNt.js";import{S as U}from"./shield-DVprApaA.js";import{S as M}from"./save-Dw1cTtUv.js";import{C as R}from"./check-DUua1sBA.js";import{C as B}from"./copy-BcCPCJtg.js";const p=[{value:"none",label:"None"},{value:"public",label:"Public"},{value:"authed",label:"Authed"},{value:"owner",label:"Owner"},{value:"admin",label:"Admin"}];function u(s="public"){return{access:s,filter:"",filter_auth:"",cache:!1,fields:""}}function H(){return{list:u("authed"),get:u("authed"),create:u("authed"),update:u("owner"),delete:u("admin")}}function se(s){const c=H();if(!s)return c;const i=l=>({access:(l==null?void 0:l.access)??"public",filter:(l==null?void 0:l.filter)??"",filter_auth:(l==null?void 0:l.filter_auth)??"",cache:(l==null?void 0:l.cache)??!1,fields:l!=null&&l.fields?l.fields.join(", "):""});return{list:i(s.list),get:i(s.get),create:i(s.create),update:i(s.update),delete:i(s.delete)}}function ae(s){const c=i=>({access:i.access,filter:i.filter||null,filter_auth:i.filter_auth||null,cache:i.cache,fields:i.fields?i.fields.split(",").map(l=>l.trim()).filter(Boolean):null});return{list:c(s.list),get:c(s.get),create:c(s.create),update:c(s.update),delete:c(s.delete)}}const K={GET:"text-emerald-600 border-emerald-500/30 bg-emerald-500/10",POST:"text-sky-600 border-sky-500/30 bg-sky-500/10",PUT:"text-amber-600 border-amber-500/30 bg-amber-500/10",DELETE:"text-red-600 border-red-500/30 bg-red-500/10"},b={list:"text-emerald-600",get:"text-teal-600",create:"text-violet-600",update:"text-amber-600",delete:"text-red-600"};function Q({api:s,onChange:c,plural:i,group:l}){const{t:r}=j(),[m,h]=N.useState(null),n=`/api/v1/cms/${l?`${l}/${i}`:i}`,o=[{key:"list",label:r("builder.apiList"),method:"GET",url:n},{key:"get",label:r("builder.apiGet"),method:"GET",url:`${n}/{id}`},{key:"create",label:r("builder.apiCreate"),method:"POST",url:n},{key:"update",label:r("builder.apiUpdate"),method:"PUT",url:`${n}/{id}`},{key:"delete",label:r("builder.apiDelete"),method:"DELETE",url:`${n}/{id}`}];function d(t,a){c({...s,[t]:{...s[t],...a}})}function v(t,a){navigator.clipboard.writeText(a).then(()=>{h(t),g.success(r("builder.apiCopied")),setTimeout(()=>h(null),1500)})}return e.jsx("div",{className:"divide-y divide-border px-4",children:o.map(t=>e.jsxs("div",{className:"space-y-1.5 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`w-12 shrink-0 rounded border px-1 py-0.5 text-center font-mono text-[10px] font-semibold ${K[t.method]??""}`,children:t.method}),e.jsx("span",{className:`w-16 shrink-0 truncate text-sm font-medium ${b[t.key]??""}`,children:t.label}),e.jsx("span",{className:`truncate font-mono text-[10px] ${b[t.key]??"text-foreground/70"}`,title:`${t.method} ${t.url}`,children:t.url}),e.jsx("button",{type:"button",onClick:()=>v(t.key,`${t.method} ${t.url}`),title:r("builder.copy"),className:"shrink-0 text-muted-foreground hover:text-foreground",children:m===t.key?e.jsx(R,{className:"size-3.5"}):e.jsx(B,{className:"size-3.5"})}),e.jsxs("div",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("span",{className:"shrink-0 text-xs text-muted-foreground",children:r("builder.apiAccessShort")}),e.jsx(E,{delay:100,children:e.jsxs($,{children:[e.jsx(P,{render:a=>e.jsx("span",{...a,className:"shrink-0 cursor-help text-muted-foreground hover:text-foreground",children:e.jsx(_,{className:"size-3.5"})})}),e.jsx(O,{side:"top",className:"max-w-56",children:e.jsx("div",{className:"space-y-1",children:p.map(a=>e.jsxs("div",{className:"grid grid-cols-[4rem_1fr] gap-1.5 text-xs",children:[e.jsxs("span",{className:"font-medium",children:[a.label,":"]}),e.jsx("span",{className:"text-white/85",children:r(`builder.apiAccessHelp${a.value.charAt(0).toUpperCase()}${a.value.slice(1)}`)})]},a.value))})})]})}),e.jsxs(F,{value:s[t.key].access,onValueChange:a=>d(t.key,{access:a}),children:[e.jsx(z,{className:"h-7 w-28 text-xs",children:e.jsx(I,{})}),e.jsx(L,{children:p.map(a=>e.jsx(G,{value:a.value,children:a.label},a.value))})]}),t.key==="list"||t.key==="get"?e.jsxs("label",{className:"flex w-[4.5rem] shrink-0 cursor-pointer items-center gap-1",title:r("builder.apiCacheEnable"),children:[e.jsx(D,{checked:s[t.key].cache,onCheckedChange:a=>d(t.key,{cache:a===!0})}),e.jsx("span",{className:"text-xs text-muted-foreground",children:r("builder.apiCacheShort")})]}):e.jsx("span",{className:"w-[4.5rem] shrink-0"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-48 shrink-0 whitespace-nowrap text-xs text-muted-foreground",children:r("builder.apiFilter")}),e.jsx(f,{value:s[t.key].filter,onChange:a=>d(t.key,{filter:a.target.value}),placeholder:r("builder.apiFilterShort"),className:"h-6 flex-1 font-mono text-xs"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-48 shrink-0 whitespace-nowrap text-xs text-muted-foreground",children:r("builder.apiFilterAuth")}),e.jsx(f,{value:s[t.key].filter_auth,onChange:a=>d(t.key,{filter_auth:a.target.value}),placeholder:r("builder.apiFilterAuthShort"),className:"h-6 flex-1 font-mono text-xs"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-48 shrink-0 whitespace-nowrap text-xs text-muted-foreground",children:r("builder.apiFields")}),e.jsx(f,{value:s[t.key].fields,onChange:a=>d(t.key,{fields:a.target.value}),placeholder:r("builder.apiFieldsShort"),className:"h-6 flex-1 font-mono text-xs"})]})]},t.key))})}function le({open:s,onOpenChange:c,api:i,onChange:l,plural:r,group:m,onSave:h,saving:x=!1,saveHint:n}){const{t:o}=j();async function d(){if(n){g.info(n),c(!1);return}await h()}return e.jsx(k,{open:s,onOpenChange:c,children:e.jsxs(y,{side:"right",className:"flex flex-col",style:{width:"80vw",maxWidth:"80vw"},children:[e.jsxs(S,{children:[e.jsx("div",{className:"flex items-center gap-2 pe-10",children:e.jsxs(C,{className:"flex items-center gap-2",children:[e.jsx(U,{className:"size-4"}),o("builder.viewApi")]})}),e.jsx(w,{children:o("builder.apiDescription")})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:e.jsx(Q,{api:i,onChange:l,plural:r,group:m})}),e.jsx(T,{children:e.jsxs(A,{size:"sm",onClick:d,disabled:x,children:[e.jsx(M,{className:"size-4"}),o(x?"builder.saving":"builder.saveApi")]})})]})})}export{le as A,se as a,ae as b,H as d}; +import{j as e,f as N}from"./vendor-react-j_G0Dyx0.js";import{cK as j,aM as k,aN as y,aQ as S,aR as C,aO as w,aP as T,n as A,b1 as E,a$ as $,b2 as P,t as _,b0 as O,ca as g}from"./index-C-uFVPpg.js";import{I as f}from"./input-Bp1SimRr.js";import{S as D}from"./switch-DoovYEIg.js";import{S as F,e as z,f as I,a as L,c as G}from"./select-DJZwiot8.js";import{S as R}from"./shield-D-KuMU6n.js";import{S as U}from"./save-Bhy1j3dM.js";import{C as K}from"./check-BrJnpLnE.js";import{C as M}from"./copy-DRI8cFnN.js";const p=[{value:"none",label:"None"},{value:"public",label:"Public"},{value:"authed",label:"Authed"},{value:"owner",label:"Owner"},{value:"admin",label:"Admin"}];function u(s="public"){return{access:s,filter:"",filter_auth:"",cache:!1,fields:""}}function B(){return{list:u("authed"),get:u("authed"),create:u("authed"),update:u("owner"),delete:u("admin")}}function se(s){const c=B();if(!s)return c;const i=l=>({access:(l==null?void 0:l.access)??"public",filter:(l==null?void 0:l.filter)??"",filter_auth:(l==null?void 0:l.filter_auth)??"",cache:(l==null?void 0:l.cache)??!1,fields:l!=null&&l.fields?l.fields.join(", "):""});return{list:i(s.list),get:i(s.get),create:i(s.create),update:i(s.update),delete:i(s.delete)}}function ae(s){const c=i=>({access:i.access,filter:i.filter||null,filter_auth:i.filter_auth||null,cache:i.cache,fields:i.fields?i.fields.split(",").map(l=>l.trim()).filter(Boolean):null});return{list:c(s.list),get:c(s.get),create:c(s.create),update:c(s.update),delete:c(s.delete)}}const H={GET:"text-emerald-600 border-emerald-500/30 bg-emerald-500/10",POST:"text-sky-600 border-sky-500/30 bg-sky-500/10",PUT:"text-amber-600 border-amber-500/30 bg-amber-500/10",DELETE:"text-red-600 border-red-500/30 bg-red-500/10"},b={list:"text-emerald-600",get:"text-teal-600",create:"text-violet-600",update:"text-amber-600",delete:"text-red-600"};function Q({api:s,onChange:c,plural:i,group:l}){const{t:r}=j(),[m,h]=N.useState(null),n=`/api/v1/cms/${l?`${l}/${i}`:i}`,o=[{key:"list",label:r("builder.apiList"),method:"GET",url:n},{key:"get",label:r("builder.apiGet"),method:"GET",url:`${n}/{id}`},{key:"create",label:r("builder.apiCreate"),method:"POST",url:n},{key:"update",label:r("builder.apiUpdate"),method:"PUT",url:`${n}/{id}`},{key:"delete",label:r("builder.apiDelete"),method:"DELETE",url:`${n}/{id}`}];function d(t,a){c({...s,[t]:{...s[t],...a}})}function v(t,a){navigator.clipboard.writeText(a).then(()=>{h(t),g.success(r("builder.apiCopied")),setTimeout(()=>h(null),1500)})}return e.jsx("div",{className:"divide-y divide-border px-4",children:o.map(t=>e.jsxs("div",{className:"space-y-1.5 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`w-12 shrink-0 rounded border px-1 py-0.5 text-center font-mono text-[10px] font-semibold ${H[t.method]??""}`,children:t.method}),e.jsx("span",{className:`w-16 shrink-0 truncate text-sm font-medium ${b[t.key]??""}`,children:t.label}),e.jsx("span",{className:`truncate font-mono text-[10px] ${b[t.key]??"text-foreground/70"}`,title:`${t.method} ${t.url}`,children:t.url}),e.jsx("button",{type:"button",onClick:()=>v(t.key,`${t.method} ${t.url}`),title:r("builder.copy"),className:"shrink-0 text-muted-foreground hover:text-foreground",children:m===t.key?e.jsx(K,{className:"size-3.5"}):e.jsx(M,{className:"size-3.5"})}),e.jsxs("div",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("span",{className:"shrink-0 text-xs text-muted-foreground",children:r("builder.apiAccessShort")}),e.jsx(E,{delay:100,children:e.jsxs($,{children:[e.jsx(P,{render:a=>e.jsx("span",{...a,className:"shrink-0 cursor-help text-muted-foreground hover:text-foreground",children:e.jsx(_,{className:"size-3.5"})})}),e.jsx(O,{side:"top",className:"max-w-56",children:e.jsx("div",{className:"space-y-1",children:p.map(a=>e.jsxs("div",{className:"grid grid-cols-[4rem_1fr] gap-1.5 text-xs",children:[e.jsxs("span",{className:"font-medium",children:[a.label,":"]}),e.jsx("span",{className:"text-white/85",children:r(`builder.apiAccessHelp${a.value.charAt(0).toUpperCase()}${a.value.slice(1)}`)})]},a.value))})})]})}),e.jsxs(F,{value:s[t.key].access,onValueChange:a=>d(t.key,{access:a}),children:[e.jsx(z,{className:"h-7 w-28 text-xs",children:e.jsx(I,{})}),e.jsx(L,{children:p.map(a=>e.jsx(G,{value:a.value,children:a.label},a.value))})]}),t.key==="list"||t.key==="get"?e.jsxs("label",{className:"flex w-[4.5rem] shrink-0 cursor-pointer items-center gap-1",title:r("builder.apiCacheEnable"),children:[e.jsx(D,{checked:s[t.key].cache,onCheckedChange:a=>d(t.key,{cache:a===!0})}),e.jsx("span",{className:"text-xs text-muted-foreground",children:r("builder.apiCacheShort")})]}):e.jsx("span",{className:"w-[4.5rem] shrink-0"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-48 shrink-0 whitespace-nowrap text-xs text-muted-foreground",children:r("builder.apiFilter")}),e.jsx(f,{value:s[t.key].filter,onChange:a=>d(t.key,{filter:a.target.value}),placeholder:r("builder.apiFilterShort"),className:"h-6 flex-1 font-mono text-xs"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-48 shrink-0 whitespace-nowrap text-xs text-muted-foreground",children:r("builder.apiFilterAuth")}),e.jsx(f,{value:s[t.key].filter_auth,onChange:a=>d(t.key,{filter_auth:a.target.value}),placeholder:r("builder.apiFilterAuthShort"),className:"h-6 flex-1 font-mono text-xs"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-48 shrink-0 whitespace-nowrap text-xs text-muted-foreground",children:r("builder.apiFields")}),e.jsx(f,{value:s[t.key].fields,onChange:a=>d(t.key,{fields:a.target.value}),placeholder:r("builder.apiFieldsShort"),className:"h-6 flex-1 font-mono text-xs"})]})]},t.key))})}function le({open:s,onOpenChange:c,api:i,onChange:l,plural:r,group:m,onSave:h,saving:x=!1,saveHint:n}){const{t:o}=j();async function d(){if(n){g.info(n),c(!1);return}await h()}return e.jsx(k,{open:s,onOpenChange:c,children:e.jsxs(y,{side:"right",className:"flex flex-col",style:{width:"80vw",maxWidth:"80vw"},children:[e.jsxs(S,{children:[e.jsx("div",{className:"flex items-center gap-2 pe-10",children:e.jsxs(C,{className:"flex items-center gap-2",children:[e.jsx(R,{className:"size-4"}),o("builder.viewApi")]})}),e.jsx(w,{children:o("builder.apiDescription")})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto",children:e.jsx(Q,{api:i,onChange:l,plural:r,group:m})}),e.jsx(T,{children:e.jsxs(A,{size:"sm",onClick:d,disabled:x,children:[e.jsx(U,{className:"size-4"}),o(x?"builder.saving":"builder.saveApi")]})})]})})}export{le as A,se as a,ae as b,B as d}; diff --git a/adminui/assets/api-logs-CbhV8fek.js b/adminui/assets/api-logs-Bdd-hSQR.js similarity index 65% rename from adminui/assets/api-logs-CbhV8fek.js rename to adminui/assets/api-logs-Bdd-hSQR.js index ddc9124a..989372d5 100644 --- a/adminui/assets/api-logs-CbhV8fek.js +++ b/adminui/assets/api-logs-Bdd-hSQR.js @@ -1 +1 @@ -import{f as T,j as s}from"./vendor-react-j_G0Dyx0.js";import{cJ as C,cz as w,ad as b,n as L,aF as v,bk as S}from"./index-DFelzBez.js";import{u as P}from"./use-url-state-BBO3na5E.js";import{B as D}from"./badge-BvrzcoWP.js";import{C as E,a as I}from"./card-D3QxRGt-.js";import{S as B,e as J,f as O,a as q,b as z,c as y}from"./select-Dc4_9PNt.js";import{T as F,d as H,e as x,c as n,a as k,b as a}from"./table-gihdE9_j.js";import{D as A,a as Q,d as V,e as G}from"./dialog-Bx55NyOm.js";import{S as K}from"./step-logs-BeP2bpGZ.js";import{T as M}from"./table-skeleton-BtLTAVzI.js";import{E as R}from"./empty-state-D0NvGCXa.js";import{P as U}from"./pagination-bar-DD_HkQGa.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./refresh-cw-CFztQf6i.js";import"./chevron-left-CbJIXgY2.js";function Z(t){return["success","succeeded","completed"].includes(t)?"default":["running","waiting","starting"].includes(t)?"secondary":"destructive"}const N=20;function hs(){var g,h;const{t}=C(),i=P(),r=i.get("flow"),l=i.getInt("page"),[c,p]=T.useState(null),u=w({queryKey:["flows"],queryFn:()=>S.admin.flows.list()}),d=w({queryKey:["api-logs",l,r],queryFn:()=>S.admin.flows.listApiLogs({page:l,page_size:N,...r?{flow_id:r}:{}})}),f=((g=d.data)==null?void 0:g.items)??[],m=((h=d.data)==null?void 0:h.total)??0;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[s.jsx("span",{className:"font-medium",children:t("flows.apis.logsPage")}),s.jsxs(B,{value:r,onValueChange:e=>{const o=e&&e!=="__all__"?e:"";i.set({flow:o,page:1})},children:[s.jsx(J,{className:"w-56",children:s.jsx(O,{children:e=>{var j;const o=(j=u.data)==null?void 0:j.find(_=>_.id===e);return s.jsx("span",{className:"truncate text-sm",children:o?o.name:t("flows.apis.allLogs")})}})}),s.jsx(q,{children:s.jsxs(z,{children:[s.jsx(y,{value:"__all__",children:t("flows.apis.allLogs")}),(u.data??[]).map(e=>s.jsx(y,{value:e.id,children:e.name},e.id))]})})]})]}),s.jsx(E,{children:s.jsx(I,{className:"p-0",children:d.isLoading?s.jsx(M,{cols:6}):s.jsxs(F,{children:[s.jsx(H,{children:s.jsxs(x,{children:[s.jsx(n,{children:t("flows.apis.flow")}),s.jsx(n,{children:t("common.status")}),s.jsx(n,{children:t("flows.apis.inputs")}),s.jsx(n,{children:t("flows.instance.outputs")}),s.jsx(n,{children:t("flows.apis.time")}),s.jsx(n,{className:"text-end",children:t("common.actions")})]})}),s.jsx(k,{children:f.length===0?s.jsx(x,{children:s.jsx(a,{colSpan:6,children:s.jsx(R,{icon:b,title:t("flows.apis.noLogs")})})}):f.map(e=>s.jsxs(x,{children:[s.jsx(a,{className:"max-w-48 truncate",children:e.flow_name||e.flow_id}),s.jsx(a,{children:s.jsx(D,{variant:Z(e.status),children:e.status})}),s.jsx(a,{className:"max-w-40",children:e.inputs!=null?s.jsx("span",{className:"truncate font-mono text-xs text-muted-foreground",title:typeof e.inputs=="string"?e.inputs:JSON.stringify(e.inputs),children:typeof e.inputs=="string"?e.inputs:JSON.stringify(e.inputs)}):"—"}),s.jsx(a,{className:"max-w-56",children:e.error!=null?s.jsx("span",{className:"truncate text-xs text-destructive",children:typeof e.error=="string"?e.error:JSON.stringify(e.error)}):e.outputs!=null?s.jsx("span",{className:"truncate font-mono text-xs text-muted-foreground",children:JSON.stringify(e.outputs)}):"—"}),s.jsx(a,{className:"text-muted-foreground text-xs",children:e.created_at?new Date(e.created_at).toLocaleString():"—"}),s.jsx(a,{className:"text-end",children:s.jsx(L,{variant:"ghost",size:"icon-sm",onClick:()=>p(e.instance_id),title:t("flows.apis.viewSteps"),children:s.jsx(v,{className:"size-4"})})})]},e.instance_id))})]})})}),m>0&&s.jsx(U,{page:l,totalPages:Math.max(1,Math.ceil(m/N)),total:m,onPageChange:e=>i.set({page:e})}),s.jsx(A,{open:!!c,onOpenChange:e=>{e||p(null)},children:s.jsxs(Q,{className:"max-w-4xl",children:[s.jsx(V,{children:s.jsx(G,{children:t("flows.instances.logs")})}),c&&s.jsx(K,{instanceId:c})]})})]})}export{hs as default}; +import{f as T,j as s}from"./vendor-react-j_G0Dyx0.js";import{cK as C,cA as w,ad as b,n as L,aG as v,bl as S}from"./index-C-uFVPpg.js";import{u as P}from"./use-url-state-BBO3na5E.js";import{B as D}from"./badge-Dhxp0jil.js";import{C as E,a as I}from"./card-BBIqLCR8.js";import{S as B,e as O,f as q,a as A,b as H,c as y}from"./select-DJZwiot8.js";import{T as J,d as z,e as x,c as n,a as F,b as a}from"./table-BoLxzYJ7.js";import{D as G,a as K,d as Q,e as V}from"./dialog-if7Fez9x.js";import{S as k}from"./step-logs-BLt19Swa.js";import{T as M}from"./table-skeleton-fqjGRt14.js";import{E as R}from"./empty-state-CCcgx4uH.js";import{P as U}from"./pagination-bar-BuL5EI1J.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./refresh-cw-6xbzwvFF.js";import"./chevron-left-C_tZtLI6.js";function Z(t){return["success","succeeded","completed"].includes(t)?"default":["running","waiting","starting"].includes(t)?"secondary":"destructive"}const N=20;function hs(){var g,h;const{t}=C(),i=P(),r=i.get("flow"),l=i.getInt("page"),[c,p]=T.useState(null),u=w({queryKey:["flows"],queryFn:()=>S.admin.flows.list()}),d=w({queryKey:["api-logs",l,r],queryFn:()=>S.admin.flows.listApiLogs({page:l,page_size:N,...r?{flow_id:r}:{}})}),f=((g=d.data)==null?void 0:g.items)??[],m=((h=d.data)==null?void 0:h.total)??0;return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[s.jsx("span",{className:"font-medium",children:t("flows.apis.logsPage")}),s.jsxs(B,{value:r,onValueChange:e=>{const o=e&&e!=="__all__"?e:"";i.set({flow:o,page:1})},children:[s.jsx(O,{className:"w-56",children:s.jsx(q,{children:e=>{var j;const o=(j=u.data)==null?void 0:j.find(_=>_.id===e);return s.jsx("span",{className:"truncate text-sm",children:o?o.name:t("flows.apis.allLogs")})}})}),s.jsx(A,{children:s.jsxs(H,{children:[s.jsx(y,{value:"__all__",children:t("flows.apis.allLogs")}),(u.data??[]).map(e=>s.jsx(y,{value:e.id,children:e.name},e.id))]})})]})]}),s.jsx(E,{children:s.jsx(I,{className:"p-0",children:d.isLoading?s.jsx(M,{cols:6}):s.jsxs(J,{children:[s.jsx(z,{children:s.jsxs(x,{children:[s.jsx(n,{children:t("flows.apis.flow")}),s.jsx(n,{children:t("common.status")}),s.jsx(n,{children:t("flows.apis.inputs")}),s.jsx(n,{children:t("flows.instance.outputs")}),s.jsx(n,{children:t("flows.apis.time")}),s.jsx(n,{className:"text-end",children:t("common.actions")})]})}),s.jsx(F,{children:f.length===0?s.jsx(x,{children:s.jsx(a,{colSpan:6,children:s.jsx(R,{icon:b,title:t("flows.apis.noLogs")})})}):f.map(e=>s.jsxs(x,{children:[s.jsx(a,{className:"max-w-48 truncate",children:e.flow_name||e.flow_id}),s.jsx(a,{children:s.jsx(D,{variant:Z(e.status),children:e.status})}),s.jsx(a,{className:"max-w-40",children:e.inputs!=null?s.jsx("span",{className:"truncate font-mono text-xs text-muted-foreground",title:typeof e.inputs=="string"?e.inputs:JSON.stringify(e.inputs),children:typeof e.inputs=="string"?e.inputs:JSON.stringify(e.inputs)}):"—"}),s.jsx(a,{className:"max-w-56",children:e.error!=null?s.jsx("span",{className:"truncate text-xs text-destructive",children:typeof e.error=="string"?e.error:JSON.stringify(e.error)}):e.outputs!=null?s.jsx("span",{className:"truncate font-mono text-xs text-muted-foreground",children:JSON.stringify(e.outputs)}):"—"}),s.jsx(a,{className:"text-muted-foreground text-xs",children:e.created_at?new Date(e.created_at).toLocaleString():"—"}),s.jsx(a,{className:"text-end",children:s.jsx(L,{variant:"ghost",size:"icon-sm",onClick:()=>p(e.instance_id),title:t("flows.apis.viewSteps"),children:s.jsx(v,{className:"size-4"})})})]},e.instance_id))})]})})}),m>0&&s.jsx(U,{page:l,totalPages:Math.max(1,Math.ceil(m/N)),total:m,onPageChange:e=>i.set({page:e})}),s.jsx(G,{open:!!c,onOpenChange:e=>{e||p(null)},children:s.jsxs(K,{className:"max-w-4xl",children:[s.jsx(Q,{children:s.jsx(V,{children:t("flows.instances.logs")})}),c&&s.jsx(k,{instanceId:c})]})})]})}export{hs as default}; diff --git a/adminui/assets/apis-CKBjtQ2G.js b/adminui/assets/apis-Cgr_khWE.js similarity index 83% rename from adminui/assets/apis-CKBjtQ2G.js rename to adminui/assets/apis-Cgr_khWE.js index aa6470ae..50404d3a 100644 --- a/adminui/assets/apis-CKBjtQ2G.js +++ b/adminui/assets/apis-Cgr_khWE.js @@ -1,4 +1,4 @@ -import{f as z,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as _,cF as K,cA as E,cz as F,a9 as Q,n,ad as R,aK as M,c9 as o,bk as c,aE as $}from"./index-DFelzBez.js";import{u as v}from"./useMutation-DgRiHz67.js";import{S as O}from"./switch-DLTIF0BW.js";import{D as L,a as G,d as J,e as U}from"./dialog-Bx55NyOm.js";import{B as N}from"./badge-BvrzcoWP.js";import{C as X,a as V}from"./card-D3QxRGt-.js";import{T as W,d as Y,e as A,c as f,a as Z,b as u}from"./table-gihdE9_j.js";import{A as I,c as ee,f as se,g as te,d as ae,e as ie,b as le,a as oe}from"./alert-dialog-B-lBTnCF.js";import{T as ne}from"./table-skeleton-BtLTAVzI.js";import{E as re}from"./empty-state-D0NvGCXa.js";import{P as ce}from"./pagination-bar-DD_HkQGa.js";import{P as de}from"./pencil-BgXbFsNu.js";import{C}from"./copy-BcCPCJtg.js";import{a as me,P as pe}from"./power-Bw66vTVi.js";import{T as ue}from"./trash-2-DqWZBWAo.js";import{R as q}from"./refresh-cw-CFztQf6i.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./useLabelableId-D6-89JTk.js";import"./chevron-left-CbJIXgY2.js";function y(s,x){return s instanceof $?s.message:x}function xe({flowId:s,name:x,onClose:g}){const{t:a}=_(),j=E(),d=F({queryKey:["flow-api",s],queryFn:()=>c.admin.flows.apiStatus(s)}),i=d.data,m=()=>{d.refetch(),j.invalidateQueries({queryKey:["flow-apis"]})},w=v({mutationFn:t=>c.admin.flows.enableApi(s,{require_auth:t}),onSuccess:()=>{o.success(a("flows.apis.saved")),m()},onError:t=>o.error(y(t,a("flows.api.failed")))}),r=v({mutationFn:()=>c.admin.flows.rotateApi(s),onSuccess:t=>{o.success(a("flows.apis.rotated")),t.token&&p(t.token),m()},onError:t=>o.error(y(t,a("flows.api.failed")))}),h=v({mutationFn:()=>c.admin.flows.rotateApiSlug(s),onSuccess:()=>{o.success(a("flows.apis.slugRotated")),m()},onError:t=>o.error(y(t,a("flows.api.failed")))}),b=t=>{const S=(t==null?void 0:t.require_auth)===!1?"":` -H "Authorization: Bearer ${(t==null?void 0:t.token)??""}" +import{f as z,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as _,cG as K,cB as E,cA as M,a9 as Q,n,ad as R,aL as F,ca as o,bl as c,aE as $}from"./index-C-uFVPpg.js";import{u as v}from"./useMutation-BlIm5cor.js";import{S as O}from"./switch-DoovYEIg.js";import{D as L,a as G,d as U,e as X}from"./dialog-if7Fez9x.js";import{B as N}from"./badge-Dhxp0jil.js";import{C as J,a as V}from"./card-BBIqLCR8.js";import{T as W,d as Y,e as A,c as f,a as Z,b as u}from"./table-BoLxzYJ7.js";import{A as I,c as ee,f as se,g as te,d as ae,e as ie,b as le,a as oe}from"./alert-dialog-C8VouOFc.js";import{T as ne}from"./table-skeleton-fqjGRt14.js";import{E as re}from"./empty-state-CCcgx4uH.js";import{P as ce}from"./pagination-bar-BuL5EI1J.js";import{P as de}from"./pencil-xelQXmMG.js";import{C}from"./copy-DRI8cFnN.js";import{a as me,P as pe}from"./power-BpWucA9X.js";import{T as ue}from"./trash-2-BZ2bkzqQ.js";import{R as q}from"./refresh-cw-6xbzwvFF.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./useLabelableId-qP3If8Bd.js";import"./chevron-left-C_tZtLI6.js";function y(s,x){return s instanceof $?s.message:x}function xe({flowId:s,name:x,onClose:g}){const{t:a}=_(),j=E(),d=M({queryKey:["flow-api",s],queryFn:()=>c.admin.flows.apiStatus(s)}),i=d.data,m=()=>{d.refetch(),j.invalidateQueries({queryKey:["flow-apis"]})},w=v({mutationFn:t=>c.admin.flows.enableApi(s,{require_auth:t}),onSuccess:()=>{o.success(a("flows.apis.saved")),m()},onError:t=>o.error(y(t,a("flows.api.failed")))}),r=v({mutationFn:()=>c.admin.flows.rotateApi(s),onSuccess:t=>{o.success(a("flows.apis.rotated")),t.token&&p(t.token),m()},onError:t=>o.error(y(t,a("flows.api.failed")))}),h=v({mutationFn:()=>c.admin.flows.rotateApiSlug(s),onSuccess:()=>{o.success(a("flows.apis.slugRotated")),m()},onError:t=>o.error(y(t,a("flows.api.failed")))}),b=t=>{const S=(t==null?void 0:t.require_auth)===!1?"":` -H "Authorization: Bearer ${(t==null?void 0:t.token)??""}" `;return`curl -X POST "http://127.0.0.1:9898/api/v1/flows/${(t==null?void 0:t.slug)??""}/run" ${S} -H "Content-Type: application/json" - -d '{"inputs":{"who":"world"}}'`},k=t=>p(b(t)),p=t=>navigator.clipboard.writeText(t).then(()=>o.success(a("flows.api.copied"))).catch(()=>o.error(a("flows.api.failed")));return e.jsx(L,{open:!0,onOpenChange:t=>{t||g()},children:e.jsxs(G,{className:"sm:max-w-2xl overflow-y-auto",children:[e.jsx(J,{children:e.jsxs(U,{className:"flex items-center gap-2",children:[e.jsx(M,{className:"size-4"}),x," · ",a("flows.apis.apiSettings")]})}),d.isLoading?e.jsx("p",{className:"text-sm text-muted-foreground",children:"…"}):e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-md border px-2 py-1.5",children:[e.jsx("span",{className:"flex-1 text-xs leading-snug text-muted-foreground pr-2",children:a("flows.api.requireAuth")}),e.jsx(O,{checked:(i==null?void 0:i.require_auth)??!0,disabled:w.isPending||!(i!=null&&i.enabled),onCheckedChange:t=>w.mutate(t)})]}),i&&!i.enabled&&e.jsx("p",{className:"rounded-md bg-muted px-2 py-1.5 text-xs text-muted-foreground",children:a("flows.apis.enableFirst")}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("flows.apis.slug")}),e.jsxs("div",{className:"flex items-center gap-1 rounded-md border px-2 py-1.5",children:[e.jsx("code",{className:"flex-1 truncate font-mono text-xs",children:(i==null?void 0:i.slug)??""}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>(i==null?void 0:i.slug)&&p(i.slug),title:a("flows.api.copy"),children:e.jsx(C,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",disabled:h.isPending,onClick:()=>h.mutate(),title:a("flows.apis.regenerateSlug"),children:e.jsx(q,{className:`size-4 ${h.isPending?"animate-spin":""}`})})]}),e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground",children:a("flows.apis.slugHint")})]}),e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("flows.api.token")}),e.jsxs("div",{className:"flex items-center gap-1 rounded-md border px-2 py-1.5",children:[e.jsx("code",{className:"flex-1 truncate font-mono text-xs",children:(i==null?void 0:i.token)??""}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>(i==null?void 0:i.token)&&p(i.token),title:a("flows.api.copy"),children:e.jsx(C,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",disabled:r.isPending,onClick:()=>r.mutate(),title:a("flows.apis.regenerate"),children:e.jsx(q,{className:`size-4 ${r.isPending?"animate-spin":""}`})})]})]})]}),e.jsxs("div",{className:"rounded-md border bg-muted/40 p-2",children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium",children:a("flows.apis.usageTitle")}),e.jsxs(n,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>(i==null?void 0:i.slug)&&k(i),children:[e.jsx(C,{className:"size-3 me-1"}),a("flows.apis.copyCurl")]})]}),e.jsx("p",{className:"mb-1 text-[11px] leading-relaxed text-muted-foreground",children:a("flows.apis.usageSteps")}),e.jsx("pre",{className:"overflow-auto rounded bg-background p-2 font-mono text-[11px]",children:b(i)})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(n,{variant:"outline",onClick:g,children:a("common.close")})})]})]})})}function Ke(){var T,D;const{t:s}=_(),x=K(),g=E(),[a,j]=z.useState(null),[d,i]=z.useState(1),[m,w]=z.useState(null),r=F({queryKey:["flow-apis",d],queryFn:()=>c.admin.flows.listApis({page:d,page_size:20})}),h=v({mutationFn:({id:l,enable:B})=>B?c.admin.flows.enableApi(l):c.admin.flows.disableApi(l),onSuccess:()=>{o.success(s("flows.apis.saved")),r.refetch(),g.invalidateQueries({queryKey:["flows"]})},onError:l=>o.error(y(l,s("flows.api.failed")))}),b=v({mutationFn:l=>c.admin.flows.deleteApi(l),onSuccess:()=>{o.success(s("flows.apis.deleted")),j(null),r.refetch(),g.invalidateQueries({queryKey:["flows"]})},onError:l=>o.error(y(l,s("flows.api.failed")))}),k=l=>navigator.clipboard.writeText(l).then(()=>o.success(s("flows.api.copied"))).catch(()=>o.error(s("flows.api.failed"))),p=((T=r.data)==null?void 0:T.items)??[],t=((D=r.data)==null?void 0:D.total)??0,P=Math.max(1,Math.ceil(t/20)),H=Math.min(d,P);return e.jsxs("div",{className:"space-y-4",children:[e.jsx(X,{children:e.jsx(V,{className:"p-0",children:r.isLoading?e.jsx(ne,{cols:5}):e.jsxs(W,{children:[e.jsx(Y,{children:e.jsxs(A,{children:[e.jsx(f,{children:s("flows.name")}),e.jsx(f,{children:s("common.status")}),e.jsx(f,{children:s("flows.api.token")}),e.jsx(f,{children:s("flows.api.endpoint")}),e.jsx(f,{children:s("flows.apis.auth")}),e.jsx(f,{className:"text-end",children:s("common.actions")})]})}),e.jsx(Z,{children:p.length===0?e.jsx(A,{children:e.jsx(u,{colSpan:5,children:e.jsx(re,{icon:Q,title:s("flows.apis.empty")})})}):p.map(l=>e.jsxs(A,{children:[e.jsx(u,{className:"font-medium",children:l.name}),e.jsx(u,{children:l.enabled?e.jsx(N,{children:s("flows.enabled")}):e.jsx(N,{variant:"secondary",children:s("flows.disabled")})}),e.jsx(u,{children:e.jsxs("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:[l.token.slice(0,12),"…"]})}),e.jsx(u,{className:"font-mono text-xs text-muted-foreground",children:l.endpoint}),e.jsx(u,{children:l.require_auth===!1?e.jsx(N,{variant:"secondary",children:s("flows.apis.open")}):e.jsx(N,{variant:"outline",children:s("flows.apis.authBearer")})}),e.jsx(u,{className:"text-end",children:e.jsxs("div",{className:"inline-flex items-center gap-1",children:[e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>x.push(`/flows/${l.flow_id}/editor`),title:s("flows.apis.detail"),children:e.jsx(de,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>x.push(`/flows/apis/logs?flow=${encodeURIComponent(l.flow_id)}`),title:s("flows.apis.logs"),children:e.jsx(R,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>w({flow_id:l.flow_id,name:l.name}),title:s("flows.apis.apiSettings"),children:e.jsx(M,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>k(l.token),title:s("flows.api.copy"),children:e.jsx(C,{className:"size-4"})}),l.enabled?e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>h.mutate({id:l.flow_id,enable:!1}),title:s("flows.api.disable"),children:e.jsx(me,{className:"size-4 text-destructive"})}):e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>h.mutate({id:l.flow_id,enable:!0}),title:s("flows.apis.restore"),children:e.jsx(pe,{className:"size-4 text-emerald-600"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>j({id:l.flow_id,name:l.name}),title:s("flows.apis.deleteApi"),children:e.jsx(ue,{className:"size-4 text-destructive"})})]})})]},l.flow_id))})]})})}),t>0&&e.jsx(ce,{page:H,totalPages:P,total:t,onPageChange:i}),m&&e.jsx(xe,{flowId:m.flow_id,name:m.name,onClose:()=>w(null)}),e.jsx(I,{open:!!a,onOpenChange:l=>{l||j(null)},children:e.jsxs(ee,{children:[e.jsxs(se,{children:[e.jsx(te,{children:s("flows.apis.deleteApi")}),e.jsx(ae,{children:s("flows.apis.deleteHint",{name:(a==null?void 0:a.name)??""})})]}),e.jsxs(ie,{children:[e.jsx(le,{children:s("common.cancel")}),e.jsx(oe,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",disabled:b.isPending,onClick:()=>a&&b.mutate(a.id),children:s("common.delete")})]})]})})]})}export{Ke as default}; + -d '{"inputs":{"who":"world"}}'`},k=t=>p(b(t)),p=t=>navigator.clipboard.writeText(t).then(()=>o.success(a("flows.api.copied"))).catch(()=>o.error(a("flows.api.failed")));return e.jsx(L,{open:!0,onOpenChange:t=>{t||g()},children:e.jsxs(G,{className:"sm:max-w-2xl overflow-y-auto",children:[e.jsx(U,{children:e.jsxs(X,{className:"flex items-center gap-2",children:[e.jsx(F,{className:"size-4"}),x," · ",a("flows.apis.apiSettings")]})}),d.isLoading?e.jsx("p",{className:"text-sm text-muted-foreground",children:"…"}):e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-md border px-2 py-1.5",children:[e.jsx("span",{className:"flex-1 text-xs leading-snug text-muted-foreground pr-2",children:a("flows.api.requireAuth")}),e.jsx(O,{checked:(i==null?void 0:i.require_auth)??!0,disabled:w.isPending||!(i!=null&&i.enabled),onCheckedChange:t=>w.mutate(t)})]}),i&&!i.enabled&&e.jsx("p",{className:"rounded-md bg-muted px-2 py-1.5 text-xs text-muted-foreground",children:a("flows.apis.enableFirst")}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("flows.apis.slug")}),e.jsxs("div",{className:"flex items-center gap-1 rounded-md border px-2 py-1.5",children:[e.jsx("code",{className:"flex-1 truncate font-mono text-xs",children:(i==null?void 0:i.slug)??""}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>(i==null?void 0:i.slug)&&p(i.slug),title:a("flows.api.copy"),children:e.jsx(C,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",disabled:h.isPending,onClick:()=>h.mutate(),title:a("flows.apis.regenerateSlug"),children:e.jsx(q,{className:`size-4 ${h.isPending?"animate-spin":""}`})})]}),e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground",children:a("flows.apis.slugHint")})]}),e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("flows.api.token")}),e.jsxs("div",{className:"flex items-center gap-1 rounded-md border px-2 py-1.5",children:[e.jsx("code",{className:"flex-1 truncate font-mono text-xs",children:(i==null?void 0:i.token)??""}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>(i==null?void 0:i.token)&&p(i.token),title:a("flows.api.copy"),children:e.jsx(C,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",disabled:r.isPending,onClick:()=>r.mutate(),title:a("flows.apis.regenerate"),children:e.jsx(q,{className:`size-4 ${r.isPending?"animate-spin":""}`})})]})]})]}),e.jsxs("div",{className:"rounded-md border bg-muted/40 p-2",children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium",children:a("flows.apis.usageTitle")}),e.jsxs(n,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>(i==null?void 0:i.slug)&&k(i),children:[e.jsx(C,{className:"size-3 me-1"}),a("flows.apis.copyCurl")]})]}),e.jsx("p",{className:"mb-1 text-[11px] leading-relaxed text-muted-foreground",children:a("flows.apis.usageSteps")}),e.jsx("pre",{className:"overflow-auto rounded bg-background p-2 font-mono text-[11px]",children:b(i)})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(n,{variant:"outline",onClick:g,children:a("common.close")})})]})]})})}function Ke(){var T,D;const{t:s}=_(),x=K(),g=E(),[a,j]=z.useState(null),[d,i]=z.useState(1),[m,w]=z.useState(null),r=M({queryKey:["flow-apis",d],queryFn:()=>c.admin.flows.listApis({page:d,page_size:20})}),h=v({mutationFn:({id:l,enable:B})=>B?c.admin.flows.enableApi(l):c.admin.flows.disableApi(l),onSuccess:()=>{o.success(s("flows.apis.saved")),r.refetch(),g.invalidateQueries({queryKey:["flows"]})},onError:l=>o.error(y(l,s("flows.api.failed")))}),b=v({mutationFn:l=>c.admin.flows.deleteApi(l),onSuccess:()=>{o.success(s("flows.apis.deleted")),j(null),r.refetch(),g.invalidateQueries({queryKey:["flows"]})},onError:l=>o.error(y(l,s("flows.api.failed")))}),k=l=>navigator.clipboard.writeText(l).then(()=>o.success(s("flows.api.copied"))).catch(()=>o.error(s("flows.api.failed"))),p=((T=r.data)==null?void 0:T.items)??[],t=((D=r.data)==null?void 0:D.total)??0,P=Math.max(1,Math.ceil(t/20)),H=Math.min(d,P);return e.jsxs("div",{className:"space-y-4",children:[e.jsx(J,{children:e.jsx(V,{className:"p-0",children:r.isLoading?e.jsx(ne,{cols:5}):e.jsxs(W,{children:[e.jsx(Y,{children:e.jsxs(A,{children:[e.jsx(f,{children:s("flows.name")}),e.jsx(f,{children:s("common.status")}),e.jsx(f,{children:s("flows.api.token")}),e.jsx(f,{children:s("flows.api.endpoint")}),e.jsx(f,{children:s("flows.apis.auth")}),e.jsx(f,{className:"text-end",children:s("common.actions")})]})}),e.jsx(Z,{children:p.length===0?e.jsx(A,{children:e.jsx(u,{colSpan:5,children:e.jsx(re,{icon:Q,title:s("flows.apis.empty")})})}):p.map(l=>e.jsxs(A,{children:[e.jsx(u,{className:"font-medium",children:l.name}),e.jsx(u,{children:l.enabled?e.jsx(N,{children:s("flows.enabled")}):e.jsx(N,{variant:"secondary",children:s("flows.disabled")})}),e.jsx(u,{children:e.jsxs("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:[l.token.slice(0,12),"…"]})}),e.jsx(u,{className:"font-mono text-xs text-muted-foreground",children:l.endpoint}),e.jsx(u,{children:l.require_auth===!1?e.jsx(N,{variant:"secondary",children:s("flows.apis.open")}):e.jsx(N,{variant:"outline",children:s("flows.apis.authBearer")})}),e.jsx(u,{className:"text-end",children:e.jsxs("div",{className:"inline-flex items-center gap-1",children:[e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>x.push(`/flows/${l.flow_id}/editor`),title:s("flows.apis.detail"),children:e.jsx(de,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>x.push(`/flows/apis/logs?flow=${encodeURIComponent(l.flow_id)}`),title:s("flows.apis.logs"),children:e.jsx(R,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>w({flow_id:l.flow_id,name:l.name}),title:s("flows.apis.apiSettings"),children:e.jsx(F,{className:"size-4"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>k(l.token),title:s("flows.api.copy"),children:e.jsx(C,{className:"size-4"})}),l.enabled?e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>h.mutate({id:l.flow_id,enable:!1}),title:s("flows.api.disable"),children:e.jsx(me,{className:"size-4 text-destructive"})}):e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>h.mutate({id:l.flow_id,enable:!0}),title:s("flows.apis.restore"),children:e.jsx(pe,{className:"size-4 text-emerald-600"})}),e.jsx(n,{variant:"ghost",size:"icon-sm",onClick:()=>j({id:l.flow_id,name:l.name}),title:s("flows.apis.deleteApi"),children:e.jsx(ue,{className:"size-4 text-destructive"})})]})})]},l.flow_id))})]})})}),t>0&&e.jsx(ce,{page:H,totalPages:P,total:t,onPageChange:i}),m&&e.jsx(xe,{flowId:m.flow_id,name:m.name,onClose:()=>w(null)}),e.jsx(I,{open:!!a,onOpenChange:l=>{l||j(null)},children:e.jsxs(ee,{children:[e.jsxs(se,{children:[e.jsx(te,{children:s("flows.apis.deleteApi")}),e.jsx(ae,{children:s("flows.apis.deleteHint",{name:(a==null?void 0:a.name)??""})})]}),e.jsxs(ie,{children:[e.jsx(le,{children:s("common.cancel")}),e.jsx(oe,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",disabled:b.isPending,onClick:()=>a&&b.mutate(a.id),children:s("common.delete")})]})]})})]})}export{Ke as default}; diff --git a/adminui/assets/app-detail-CNxzT-fG.js b/adminui/assets/app-detail-CNxzT-fG.js new file mode 100644 index 00000000..80592182 --- /dev/null +++ b/adminui/assets/app-detail-CNxzT-fG.js @@ -0,0 +1,6 @@ +import{k as G,f as P,j as s}from"./vendor-react-j_G0Dyx0.js";import{bq as V,cK as J,cG as W,cB as X,cA as Y,aU as I,ak as F,g as K,aE as c,n as j,b4 as Z,s as $,ca as i,bl as o}from"./index-C-uFVPpg.js";import{u as f}from"./useMutation-BlIm5cor.js";import{B as d}from"./badge-Dhxp0jil.js";import{C as g,c as N,d as b,a as v,b as H}from"./card-BBIqLCR8.js";import{C as ss}from"./checkbox-CP5mLBLk.js";import{S as es}from"./separator-VXjQ1TI2.js";import{A as as,c as ts,f as ns,g as ls,d as is,e as rs,b as cs,a as os}from"./alert-dialog-C8VouOFc.js";import{a as Q,b as U}from"./shared-ZGOdmt3p.js";import{P as ds,a as ps}from"./power-BpWucA9X.js";import{T as ms}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xs=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],us=V("circle",xs);function n({label:e,children:p}){return s.jsxs("div",{className:"flex items-start justify-between py-2",children:[s.jsx("span",{className:"text-sm text-muted-foreground",children:e}),s.jsx("div",{className:"text-sm text-right",children:p})]})}function Es(){var _,T,z,E,L;const{t:e}=J(),p=W(),M=G(),m=X(),l=decodeURIComponent(M.appId),[B,x]=P.useState(!1),[y,C]=P.useState(!0),r=Y({queryKey:["app",l],queryFn:()=>o.admin.apps.get(l),retry:!1}),k=()=>{m.invalidateQueries({queryKey:["app",l]}),m.invalidateQueries({queryKey:["apps"]})},D=f({mutationFn:()=>o.admin.apps.enable(l),onSuccess:()=>{i.success(e("apps.appEnabled")),k()},onError:t=>i.error(t instanceof c?t.message:e("apps.failedToEnable"))}),A=f({mutationFn:()=>o.admin.apps.disable(l),onSuccess:()=>{i.success(e("apps.appDisabled")),k()},onError:t=>i.error(t instanceof c?t.message:e("apps.failedToDisable"))}),S=f({mutationFn:t=>o.admin.apps.uninstall(l,t),onSuccess:()=>{i.success(e("apps.appUninstalled")),m.invalidateQueries({queryKey:["apps"]}),p.push("/apps")},onError:t=>i.error(t instanceof c?t.message:e("apps.failedToUninstall"))});if(r.isLoading)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(I,{className:"h-8 w-64"}),s.jsx(I,{className:"h-40 w-full"})]});const a=r.data;if(!a)return s.jsxs("div",{className:"space-y-4",children:[s.jsxs(F,{href:"/apps",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:underline",children:[s.jsx(K,{className:"size-4"}),e("apps.backToApps")]}),s.jsx("p",{className:"text-sm text-destructive",children:r.error instanceof c?r.error.message:e("apps.notFoundMsg")})]});const u=a.status==="installing"||a.status==="uninstalling",O=a.status==="disabled"||a.status==="installed",R=a.status==="enabled",w=Array.isArray((_=a.options)==null?void 0:_.pending_credentials)?((T=a.options)==null?void 0:T.pending_credentials).map(String):[],h=((z=a.install_log)==null?void 0:z.steps)??[];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(F,{href:"/apps",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:underline",children:[s.jsx(K,{className:"size-4"}),e("apps.backToApps")]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("h1",{className:"text-xl font-semibold",children:a.app_id}),s.jsx(d,{variant:U(a.status),children:e(Q(a.status))})]}),s.jsxs("p",{className:"text-sm text-muted-foreground",children:["v",a.version]})]}),s.jsxs("div",{className:"flex flex-wrap gap-2",children:[O&&s.jsxs(j,{size:"sm",disabled:u||D.isPending,onClick:()=>D.mutate(),children:[s.jsx(ds,{className:"me-2 size-4"}),e("common.enable")]}),R&&s.jsxs(j,{size:"sm",variant:"outline",disabled:u||A.isPending,onClick:()=>A.mutate(),children:[s.jsx(ps,{className:"me-2 size-4"}),e("common.disable")]}),s.jsxs(j,{size:"sm",variant:"outline",disabled:u||S.isPending,onClick:()=>{C(!0),x(!0)},children:[s.jsx(ms,{className:"me-2 size-4 text-destructive"}),e("common.uninstall")]})]})]}),a.last_error&&s.jsxs("div",{className:"flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm",children:[s.jsx(Z,{className:"mt-0.5 size-4 shrink-0 text-destructive"}),s.jsxs("div",{className:"space-y-0.5",children:[s.jsx("p",{className:"font-medium text-destructive",children:e("apps.lastError")}),s.jsx("p",{className:"font-mono text-xs break-all",children:a.last_error})]})]}),s.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[s.jsxs(g,{children:[s.jsx(N,{children:s.jsx(b,{className:"text-base",children:e("apps.general")})}),s.jsxs(v,{className:"divide-y",children:[s.jsx(n,{label:e("apps.appId"),children:s.jsx("span",{className:"font-mono text-xs",children:a.app_id})}),s.jsxs(n,{label:e("apps.version"),children:["v",a.version]}),s.jsx(n,{label:e("common.status"),children:s.jsx(d,{variant:U(a.status),children:e(Q(a.status))})}),s.jsx(n,{label:e("apps.source"),children:a.source}),s.jsx(n,{label:e("apps.tenantScope"),children:a.tenant_scope}),s.jsx(n,{label:e("apps.installedAt"),children:new Date(a.installed_at).toLocaleString()}),s.jsx(n,{label:e("apps.updatedAt"),children:new Date(a.updated_at).toLocaleString()})]})]}),s.jsxs(g,{children:[s.jsxs(N,{children:[s.jsx(b,{className:"text-base",children:e("apps.installOptions")}),s.jsx(H,{children:e("apps.installOptionsHint")})]}),s.jsxs(v,{className:"space-y-4",children:[s.jsx(n,{label:e("apps.keepData"),children:((E=a.options)==null?void 0:E.keep_data)===!0?e("common.true"):((L=a.options)==null?void 0:L.keep_data)===!1?e("common.false"):e("apps.default")}),s.jsx(es,{}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("p",{className:"text-sm font-medium",children:e("apps.pendingCredentials")}),w.length===0?s.jsx("p",{className:"text-xs text-muted-foreground",children:e("apps.noPendingCredentials")}):s.jsxs(s.Fragment,{children:[s.jsx("p",{className:"text-xs text-muted-foreground",children:e("apps.pendingCredentialsHint")}),s.jsx("div",{className:"flex flex-wrap gap-1",children:w.map(t=>s.jsx(d,{variant:"secondary",className:"font-mono text-xs",children:t},t))})]})]})]})]})]}),s.jsxs(g,{children:[s.jsxs(N,{children:[s.jsxs(b,{className:"text-base",children:[e("apps.installLog")," (",h.length,")"]}),s.jsx(H,{children:e("apps.installLogHint")})]}),s.jsx(v,{children:h.length===0?s.jsx("p",{className:"text-sm text-muted-foreground",children:e("apps.noInstallLog")}):s.jsx("ol",{className:"space-y-3",children:h.map(t=>{var q;return s.jsxs("li",{className:"flex items-start gap-3",children:[t.done?s.jsx($,{className:"mt-0.5 size-4 shrink-0 text-emerald-600"}):s.jsx(us,{className:"mt-0.5 size-4 shrink-0 text-muted-foreground"}),s.jsxs("div",{className:"space-y-0.5",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:"text-xs text-muted-foreground",children:["#",t.seq]}),s.jsx("span",{className:"font-mono text-sm font-medium",children:t.step}),s.jsx(d,{variant:"ghost",className:"font-mono text-[10px]",children:(q=t.undo)==null?void 0:q.kind})]}),t.detail&&s.jsx("p",{className:"text-xs text-muted-foreground",children:t.detail})]})]},t.seq)})})})]}),s.jsx(as,{open:B,onOpenChange:x,children:s.jsxs(ts,{children:[s.jsxs(ns,{children:[s.jsx(ls,{children:e("apps.uninstallTitle")}),s.jsx(is,{children:e("apps.uninstallConfirm",{appId:a.app_id})})]}),s.jsxs("label",{className:"flex items-start gap-3 rounded-md border p-3 text-sm",children:[s.jsx(ss,{checked:y,onCheckedChange:t=>C(t)}),s.jsxs("span",{className:"space-y-1",children:[s.jsx("span",{className:"block font-medium",children:e("apps.keepData")}),s.jsx("span",{className:"block text-xs text-muted-foreground",children:e("apps.keepDataHint")})]})]}),s.jsxs(rs,{children:[s.jsx(cs,{children:e("common.cancel")}),s.jsx(os,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{S.mutate(y),x(!1)},children:e("common.uninstall")})]})]})})]})}export{Es as default}; diff --git a/adminui/assets/app-install-DCTzw9Ws.js b/adminui/assets/app-install-DCTzw9Ws.js new file mode 100644 index 00000000..57a28e6e --- /dev/null +++ b/adminui/assets/app-install-DCTzw9Ws.js @@ -0,0 +1,6 @@ +import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as S}from"./useMutation-BlIm5cor.js";import{bq as E,cK as L,n as h,al as F,aS as T,s as f,ak as D,ca as g,aE as _,bl as I,b4 as $}from"./index-C-uFVPpg.js";import{B as N}from"./badge-Dhxp0jil.js";import{C as v,c as b,d as k,b as M,a as y}from"./card-BBIqLCR8.js";import{I as B}from"./input-Bp1SimRr.js";import{L as H}from"./label-DiZ0cGhf.js";import{S as R}from"./separator-VXjQ1TI2.js";import{S as q}from"./switch-DoovYEIg.js";import{C as K}from"./circle-x-D4bMzyXK.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O=[["path",{d:"M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5",key:"4pqfef"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M8 12v-1",key:"1ej8lb"}],["path",{d:"M8 18v-2",key:"qcmpov"}],["path",{d:"M8 7V6",key:"1nbb54"}],["circle",{cx:"8",cy:"20",r:"2",key:"ckkr5m"}]],V=E("file-archive",O);function ce(){const{t:s}=L(),[i,c]=x.useState(null),[n,p]=x.useState(null),[t,l]=x.useState(null),[d,C]=x.useState(!0),m=S({mutationFn:a=>I.admin.apps.installPreview(a),onSuccess:a=>{p(a),l(null)},onError:a=>g.error(a instanceof _?a.message:s("apps.precheckFailed"))}),r=S({mutationFn:a=>I.admin.apps.install(a,{keep_data:d}),onSuccess:a=>{l(a),g.success(s("apps.installOk"))},onError:a=>g.error(a instanceof _?a.message:s("apps.installFailed"))});function w(){c(null),p(null),l(null),C(!0)}const o=((n==null?void 0:n.conflicts)??[]).filter(a=>a.severity==="block"),j=((n==null?void 0:n.conflicts)??[]).filter(a=>a.severity!=="block"),z=!!n&&o.length===0;return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs(v,{children:[e.jsxs(b,{children:[e.jsxs(k,{className:"flex items-center gap-2",children:[e.jsx(V,{className:"size-5"}),s("apps.installTitle")]}),e.jsx(M,{children:s("apps.installHint")})]}),e.jsxs(y,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(H,{htmlFor:"app-package",children:[s("apps.packageFile")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(B,{id:"app-package",type:"file",accept:".rafapp,.zip",disabled:!!t||r.isPending,onChange:a=>{var P;c(((P=a.target.files)==null?void 0:P[0])??null),p(null),l(null)}}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("apps.packageHint")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(q,{id:"app-keep-data",checked:d,disabled:!!t||r.isPending,onCheckedChange:C}),e.jsx(H,{htmlFor:"app-keep-data",className:"font-normal",children:s("apps.keepData")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(h,{size:"sm",variant:"outline",disabled:!i||m.isPending||r.isPending,onClick:()=>i&&m.mutate(i),children:[m.isPending?e.jsx(F,{className:"me-2 size-4 animate-spin"}):e.jsx(T,{className:"me-2 size-4"}),m.isPending?s("apps.checking"):s("apps.runPrecheck")]}),z&&!t&&e.jsxs(h,{size:"sm",disabled:r.isPending,onClick:()=>i&&r.mutate(i),children:[r.isPending?e.jsx(F,{className:"me-2 size-4 animate-spin"}):e.jsx(f,{className:"me-2 size-4"}),r.isPending?s("apps.installing"):s("apps.confirmInstall")]}),(i||n||t)&&!r.isPending&&e.jsx(h,{size:"sm",variant:"ghost",onClick:w,children:s("common.reset")})]})]})]}),n&&!t&&e.jsxs(v,{children:[e.jsxs(b,{children:[e.jsx(k,{className:"text-base",children:s("apps.precheckReport")}),e.jsx(M,{children:s(z?"apps.precheckPassed":"apps.precheckBlocked")})]}),e.jsxs(y,{className:"space-y-4",children:[o.length===0&&j.length===0&&e.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-emerald-500/40 bg-emerald-500/10 p-3 text-sm",children:[e.jsx(f,{className:"size-4 text-emerald-600"}),s("apps.noConflicts")]}),o.length>0&&e.jsx(A,{title:s("apps.blockingConflicts"),items:o,tone:"destructive"}),j.length>0&&e.jsx(A,{title:s("apps.warnings"),items:j,tone:"warning"}),n.reattach_tables.length>0&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:s("apps.reattachTables")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:n.reattach_tables.map(a=>e.jsx(N,{variant:"secondary",className:"font-mono text-xs",children:a},a))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("apps.reattachHint")})]})]})]}),t&&e.jsxs(v,{children:[e.jsx(b,{children:e.jsxs(k,{className:"flex items-center gap-2 text-base",children:[e.jsx(f,{className:"size-5 text-emerald-600"}),s("apps.installOk")]})}),e.jsxs(y,{className:"space-y-4",children:[e.jsxs("div",{className:"grid gap-2 text-sm sm:grid-cols-2",children:[e.jsx(u,{label:s("apps.app"),children:t.app_id}),e.jsxs(u,{label:s("apps.version"),children:["v",t.version]}),e.jsx(u,{label:s("common.status"),children:t.status}),e.jsx(u,{label:s("apps.steps"),children:t.steps})]}),t.pending_credentials.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(R,{}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-medium",children:s("apps.pendingCredentials")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("apps.pendingCredentialsHint")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:t.pending_credentials.map(a=>e.jsx(N,{variant:"secondary",className:"font-mono text-xs",children:a},a))})]})]}),t.reattach_tables.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(R,{}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-medium",children:s("apps.reattachTables")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:t.reattach_tables.map(a=>e.jsx(N,{variant:"outline",className:"font-mono text-xs",children:a},a))})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(D,{href:`/apps/${encodeURIComponent(t.app_id)}`,className:"inline-flex h-8 items-center rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90",children:s("apps.viewApp")}),e.jsx(h,{variant:"outline",size:"sm",onClick:w,children:s("apps.installAnother")})]})]})]})]})}function A({title:s,items:i,tone:c}){const n=c==="destructive"?K:$,p=c==="destructive"?"text-destructive":"text-amber-600",t=c==="destructive"?"border-destructive/40 bg-destructive/5":"border-amber-500/40 bg-amber-500/10";return e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-medium",children:s}),e.jsx("ul",{className:"space-y-2",children:i.map((l,d)=>e.jsxs("li",{className:`flex items-start gap-2 rounded-md border p-3 text-sm ${t}`,children:[e.jsx(n,{className:`mt-0.5 size-4 shrink-0 ${p}`}),e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:l.code}),e.jsx("p",{children:l.detail})]})]},`${l.code}-${d}`))})]})}function u({label:s,children:i}){return e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s}),e.jsx("span",{className:"font-medium",children:i})]})}export{ce as default}; diff --git a/adminui/assets/apps-BS0zrsMR.js b/adminui/assets/apps-BS0zrsMR.js new file mode 100644 index 00000000..fc8e5408 --- /dev/null +++ b/adminui/assets/apps-BS0zrsMR.js @@ -0,0 +1 @@ +import{f as k,j as s}from"./vendor-react-j_G0Dyx0.js";import{cK as A,cG as E,cB as S,cA as w,n as T,l as v,ak as _,T as z,_ as P,U as M,V as c,ca as i,aE as x,bl as d}from"./index-C-uFVPpg.js";import{u as h}from"./useMutation-BlIm5cor.js";import{B}from"./badge-Dhxp0jil.js";import{C as F,a as R}from"./card-BBIqLCR8.js";import{C as U}from"./checkbox-CP5mLBLk.js";import{T as H,d as I,e as j,c as l,a as K,b as n}from"./table-BoLxzYJ7.js";import{A as q,c as L,f as Q,g as V,d as O,e as $,b as G,a as J}from"./alert-dialog-C8VouOFc.js";import{E as W}from"./empty-state-CCcgx4uH.js";import{T as X}from"./table-skeleton-fqjGRt14.js";import{a as Y,b as Z}from"./shared-ZGOdmt3p.js";import{P as ss}from"./plus-FYsVFl-s.js";import{E as es}from"./ellipsis-vertical-B-dHvJs4.js";import{a as as,P as ns}from"./power-BpWucA9X.js";import{T as ts}from"./trash-2-BZ2bkzqQ.js";import{R as is}from"./refresh-cw-6xbzwvFF.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";function ls(a){return a==="installing"||a==="uninstalling"}function Ss(){const{t:a}=A(),p=E(),y=S(),[t,m]=k.useState(null),[f,g]=k.useState(!0),o=w({queryKey:["apps"],queryFn:()=>d.admin.apps.list()}),u=()=>y.invalidateQueries({queryKey:["apps"]}),b=h({mutationFn:e=>d.admin.apps.enable(e),onSuccess:()=>{i.success(a("apps.appEnabled")),u()},onError:e=>i.error(e instanceof x?e.message:a("apps.failedToEnable"))}),C=h({mutationFn:e=>d.admin.apps.disable(e),onSuccess:()=>{i.success(a("apps.appDisabled")),u()},onError:e=>i.error(e instanceof x?e.message:a("apps.failedToDisable"))}),N=h({mutationFn:({appId:e,keep:r})=>d.admin.apps.uninstall(e,r),onSuccess:()=>{i.success(a("apps.appUninstalled")),u()},onError:e=>i.error(e instanceof x?e.message:a("apps.failedToUninstall"))}),D=o.data??[];return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:a("apps.listHint")}),s.jsxs(T,{size:"sm",onClick:()=>p.push("/apps/install"),children:[s.jsx(ss,{className:"me-2 size-4"}),a("apps.installApp")]})]}),s.jsx(F,{children:s.jsx(R,{className:"p-0",children:o.isLoading?s.jsx(X,{cols:6}):s.jsxs(H,{children:[s.jsx(I,{children:s.jsxs(j,{children:[s.jsx(l,{children:a("apps.app")}),s.jsx(l,{children:a("common.status")}),s.jsx(l,{children:a("apps.tenantScope")}),s.jsx(l,{children:a("apps.source")}),s.jsx(l,{children:a("apps.updatedAt")}),s.jsx(l,{className:"text-end",children:a("common.actions")})]})}),s.jsx(K,{children:D.length===0?s.jsx(j,{children:s.jsx(n,{colSpan:6,children:s.jsx(W,{icon:v,title:a("apps.noApps"),description:a("apps.installFirst"),action:{label:a("apps.installApp"),onClick:()=>p.push("/apps/install")}})})}):D.map(e=>{const r=ls(e.status);return s.jsxs(j,{children:[s.jsx(n,{children:s.jsxs(_,{href:`/apps/${encodeURIComponent(e.app_id)}`,className:"block space-y-0.5 group",children:[s.jsx("div",{className:"font-medium group-hover:underline",children:e.app_id}),s.jsxs("div",{className:"text-xs text-muted-foreground",children:["v",e.version," · ",e.step_count," ",a("apps.steps")]})]})}),s.jsx(n,{children:s.jsx(B,{variant:Z(e.status),children:a(Y(e.status))})}),s.jsx(n,{children:s.jsx("span",{className:"text-sm text-muted-foreground",children:e.tenant_scope})}),s.jsx(n,{children:s.jsx("span",{className:"text-sm text-muted-foreground",children:e.source})}),s.jsx(n,{children:s.jsx("span",{className:"text-xs text-muted-foreground",children:new Date(e.updated_at).toLocaleString()})}),s.jsx(n,{className:"text-end",children:s.jsxs(z,{children:[s.jsx(P,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:s.jsx(es,{className:"size-4"})}),s.jsxs(M,{align:"end",children:[s.jsxs(c,{onClick:()=>p.push(`/apps/${encodeURIComponent(e.app_id)}`),children:[s.jsx(v,{className:"size-4"}),a("common.viewDetails")]}),e.status==="enabled"?s.jsxs(c,{disabled:r||C.isPending,onClick:()=>C.mutate(e.app_id),children:[s.jsx(as,{className:"size-4"}),a("common.disable")]}):s.jsxs(c,{disabled:r||b.isPending||!["installed","disabled"].includes(e.status),onClick:()=>b.mutate(e.app_id),children:[s.jsx(ns,{className:"size-4"}),a("common.enable")]}),s.jsxs(c,{disabled:r||N.isPending,onClick:()=>{g(!0),m(e)},children:[s.jsx(ts,{className:"size-4 text-destructive"}),a("common.uninstall")]})]})]})})]},e.id)})})]})})}),s.jsxs(T,{variant:"ghost",size:"sm",disabled:o.isFetching,onClick:()=>o.refetch(),children:[s.jsx(is,{className:"me-2 size-4"}),a("common.refresh")]}),s.jsx(q,{open:!!t,onOpenChange:e=>{e||m(null)},children:s.jsxs(L,{children:[s.jsxs(Q,{children:[s.jsx(V,{children:a("apps.uninstallTitle")}),s.jsx(O,{children:a("apps.uninstallConfirm",{appId:(t==null?void 0:t.app_id)??""})})]}),s.jsxs("label",{className:"flex items-start gap-3 rounded-md border p-3 text-sm",children:[s.jsx(U,{checked:f,onCheckedChange:e=>g(e)}),s.jsxs("span",{className:"space-y-1",children:[s.jsx("span",{className:"block font-medium",children:a("apps.keepData")}),s.jsx("span",{className:"block text-xs text-muted-foreground",children:a("apps.keepDataHint")})]})]}),s.jsxs($,{children:[s.jsx(G,{children:a("common.cancel")}),s.jsx(J,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{t&&N.mutate({appId:t.app_id,keep:f}),m(null)},children:a("common.uninstall")})]})]})})]})}export{Ss as default}; diff --git a/adminui/assets/archive-BygiklY2.js b/adminui/assets/archive-jZZoXCGk.js similarity index 89% rename from adminui/assets/archive-BygiklY2.js rename to adminui/assets/archive-jZZoXCGk.js index ca7b6eb7..fff87963 100644 --- a/adminui/assets/archive-BygiklY2.js +++ b/adminui/assets/archive-jZZoXCGk.js @@ -1,4 +1,4 @@ -import{bp as e}from"./index-DFelzBez.js";/** +import{bq as e}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/arrow-right-jJ6PUH_T.js b/adminui/assets/arrow-right-C66mthM0.js similarity index 86% rename from adminui/assets/arrow-right-jJ6PUH_T.js rename to adminui/assets/arrow-right-C66mthM0.js index f902633f..33c4c648 100644 --- a/adminui/assets/arrow-right-jJ6PUH_T.js +++ b/adminui/assets/arrow-right-C66mthM0.js @@ -1,4 +1,4 @@ -import{bp as o}from"./index-DFelzBez.js";/** +import{bq as o}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/ask-playground-D4sFZjTW.js b/adminui/assets/ask-playground-DvK63DT7.js similarity index 70% rename from adminui/assets/ask-playground-D4sFZjTW.js rename to adminui/assets/ask-playground-DvK63DT7.js index 9717c3d7..d004427d 100644 --- a/adminui/assets/ask-playground-D4sFZjTW.js +++ b/adminui/assets/ask-playground-DvK63DT7.js @@ -1,5 +1,5 @@ -import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as he,cU as pe,cg as Y,cz as E,n as I,A as fe,c9 as ge,bk as O}from"./index-DFelzBez.js";import{M as Z}from"./vendor-md-editor-vOqM56Ks.js";import{B as m}from"./badge-BvrzcoWP.js";import{C as h,a as p}from"./card-D3QxRGt-.js";import{T as je}from"./textarea-Daa6n4S-.js";import{L as ye}from"./label-DeKRRvpz.js";import{S as ee}from"./switch-DLTIF0BW.js";import{S as se,e as ae,f as te,a as re,c as f}from"./select-Dc4_9PNt.js";import{D as ke,a as be,d as ve,e as Ne,c as Se}from"./dialog-Bx55NyOm.js";import{S as we}from"./square-bbq5PKnt.js";import{S as Ce}from"./send-CYerJHOr.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";function He(){var V,H,W,U,G;const{t:a}=he(),{resolvedTheme:P}=pe(),{isAdmin:F}=Y(),[K,ne]=r.useState(""),[g,le]=r.useState(!0),[j,y]=r.useState(""),[u,k]=r.useState(null),[b,v]=r.useState([]),[R,ce]=r.useState(!1),[N,S]=r.useState(null),[L,w]=r.useState(null),[C,B]=r.useState(!1),[o,ie]=r.useState("all"),[_,Q]=r.useState("all"),[n,A]=r.useState(null),D=r.useRef(null),i=E({queryKey:["kb-chunk-detail",n==null?void 0:n.unit_id],enabled:!!n,queryFn:()=>O.send(`/admin/kb/chunks/${n==null?void 0:n.unit_id}`)}),$=E({queryKey:["kb-kbs"],queryFn:()=>O.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),J=E({queryKey:["kb-docs",o],enabled:o!=="all",queryFn:()=>O.send("/admin/kb/documents",{query:{kb_id:o,page:"1",page_size:"100"}})});async function M(){const s=K.trim();if(!s||C)return;B(!0),y(""),v([]),k(null),S(null),w(null);const x=new AbortController;D.current=x;const d=Y.getState().accessToken;try{const c=await fetch(`${fe}/kb/ask`,{method:"POST",headers:{"Content-Type":"application/json",...d?{Authorization:`Bearer ${d}`}:{}},body:JSON.stringify({question:s,stream:g,...o!=="all"?{kb_ids:[o]}:{},..._!=="all"?{doc_ids:[_]}:{},...F()&&R?{trace:!0}:{}}),signal:x.signal});if(!c.ok){const l=await c.text();throw new Error(l.slice(0,200)||`HTTP ${c.status}`)}if(g&&c.body){const l=c.body.getReader(),oe=new TextDecoder;let q="";for(;;){const{done:de,value:me}=await l.read();if(de)break;q+=oe.decode(me,{stream:!0});const X=q.split(` +import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as he,cV as pe,ch as Y,cA as E,n as I,A as fe,ca as je,bl as O}from"./index-C-uFVPpg.js";import{M as Z}from"./vendor-md-editor-vOqM56Ks.js";import{B as m}from"./badge-Dhxp0jil.js";import{C as h,a as p}from"./card-BBIqLCR8.js";import{T as ge}from"./textarea-BhaIg3vS.js";import{L as ye}from"./label-DiZ0cGhf.js";import{S as ee}from"./switch-DoovYEIg.js";import{S as se,e as ae,f as te,a as re,c as f}from"./select-DJZwiot8.js";import{D as be,a as ke,d as ve,e as Ne,c as Se}from"./dialog-if7Fez9x.js";import{S as we}from"./square-mdalbJDD.js";import{S as Ce}from"./send-CR0YI54n.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";function He(){var M,H,W,G,U;const{t:a}=he(),{resolvedTheme:P}=pe(),{isAdmin:F}=Y(),[K,ne]=r.useState(""),[j,le]=r.useState(!0),[g,y]=r.useState(""),[u,b]=r.useState(null),[k,v]=r.useState([]),[R,ce]=r.useState(!1),[N,S]=r.useState(null),[L,w]=r.useState(null),[C,B]=r.useState(!1),[o,ie]=r.useState("all"),[_,Q]=r.useState("all"),[n,A]=r.useState(null),D=r.useRef(null),i=E({queryKey:["kb-chunk-detail",n==null?void 0:n.unit_id],enabled:!!n,queryFn:()=>O.send(`/admin/kb/chunks/${n==null?void 0:n.unit_id}`)}),$=E({queryKey:["kb-kbs"],queryFn:()=>O.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),V=E({queryKey:["kb-docs",o],enabled:o!=="all",queryFn:()=>O.send("/admin/kb/documents",{query:{kb_id:o,page:"1",page_size:"100"}})});async function J(){const s=K.trim();if(!s||C)return;B(!0),y(""),v([]),b(null),S(null),w(null);const x=new AbortController;D.current=x;const d=Y.getState().accessToken;try{const c=await fetch(`${fe}/kb/ask`,{method:"POST",headers:{"Content-Type":"application/json",...d?{Authorization:`Bearer ${d}`}:{}},body:JSON.stringify({question:s,stream:j,...o!=="all"?{kb_ids:[o]}:{},..._!=="all"?{doc_ids:[_]}:{},...F()&&R?{trace:!0}:{}}),signal:x.signal});if(!c.ok){const l=await c.text();throw new Error(l.slice(0,200)||`HTTP ${c.status}`)}if(j&&c.body){const l=c.body.getReader(),oe=new TextDecoder;let q="";for(;;){const{done:de,value:me}=await l.read();if(de)break;q+=oe.decode(me,{stream:!0});const X=q.split(` `);q=X.pop()??"";for(const ue of X){let T="message",z="";for(const t of ue.split(` `))t.startsWith("event:")?T=t.slice(6).trim():t.startsWith("data:")&&(z+=t.slice(5).trim());if(T==="delta"){const t=z.replace(/^"/,"").replace(/"$/,"").replace(/\\n/g,` -`);y(xe=>xe+t)}else if(T==="result")try{const t=JSON.parse(z);k(t.status),v(t.references??[]),w(t.log_id!=null?String(t.log_id):null),S(Array.isArray(t.trace)?t.trace:null)}catch{}}}}else{const l=await c.json();y(l.data.answer),k(l.data.status),v(l.data.references??[]),w(l.data.log_id!=null?String(l.data.log_id):null),S(Array.isArray(l.data.trace)?l.data.trace:null)}}catch(c){c instanceof DOMException&&c.name==="AbortError"||ge.error(c.message)}finally{B(!1),D.current=null}}return e.jsxs("div",{className:"space-y-6",children:[e.jsx(h,{children:e.jsxs(p,{className:"space-y-4 pt-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(se,{value:o,onValueChange:s=>{s&&(ie(s),Q("all"))},items:[{value:"all",label:a("common.all")},...(((V=$.data)==null?void 0:V.items)??[]).map(s=>({value:String(s.id),label:s.name}))],children:[e.jsx(ae,{className:"w-56",children:e.jsx(te,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(re,{children:[e.jsxs(f,{value:"all",children:[a("layout.kb"),":",a("common.all")]}),(((H=$.data)==null?void 0:H.items)??[]).map(s=>e.jsx(f,{value:String(s.id),children:s.name},s.id))]})]}),o!=="all"&&e.jsxs(se,{value:_,onValueChange:s=>{s&&Q(s)},items:[{value:"all",label:a("common.all")},...(((W=J.data)==null?void 0:W.items)??[]).map(s=>({value:String(s.id),label:s.title}))],children:[e.jsx(ae,{className:"w-64",children:e.jsx(te,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(re,{children:[e.jsxs(f,{value:"all",children:[a("layout.kbDocs"),":",a("common.all")]}),(((U=J.data)==null?void 0:U.items)??[]).map(s=>e.jsx(f,{value:String(s.id),children:s.title},s.id))]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(ye,{children:a("kb.askLabel")}),e.jsx(je,{rows:4,value:K,onChange:s=>ne(s.target.value),onKeyDown:s=>{s.key==="Enter"&&!s.shiftKey&&(s.preventDefault(),M())},placeholder:"支持哪些数据库后端?"})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(ee,{checked:g,onCheckedChange:le}),e.jsx("span",{className:"text-muted-foreground",children:a("kb.stream")}),F()&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{checked:R,onCheckedChange:ce}),e.jsx("span",{className:"text-muted-foreground",children:a("kb.traceToggle")})]})]}),C?e.jsxs(I,{size:"sm",variant:"outline",onClick:()=>{var s;return(s=D.current)==null?void 0:s.abort()},children:[e.jsx(we,{className:"size-4"}),a("kb.stop")]}):e.jsxs(I,{size:"sm",onClick:M,children:[e.jsx(Ce,{className:"size-4"}),a("kb.ask")]})]})]})}),(u||j)&&e.jsx(h,{children:e.jsxs(p,{className:"space-y-3 pt-6",children:[u&&e.jsx(m,{variant:u==="answered"?"default":"secondary",children:u}),L&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[a("kb.logId"),":",e.jsx("code",{children:L})]}),C&&!j&&e.jsx("p",{className:"text-sm text-muted-foreground",children:a("kb.thinking")}),e.jsx("div",{className:"text-sm leading-6",children:e.jsx(Z,{source:j||" ",wrapperElement:{"data-color-mode":P==="dark"?"dark":"light"},style:{background:"transparent",color:"inherit"}})})]})}),N&&N.length>0&&e.jsx(h,{children:e.jsxs(p,{className:"space-y-2 pt-6",children:[e.jsx("div",{className:"text-sm font-medium",children:a("kb.tracePanel")}),e.jsx("div",{className:"space-y-2",children:N.map((s,x)=>{var d;return e.jsxs("div",{className:"rounded-md border p-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:s.stage}),e.jsx(m,{variant:s.status==="ok"?"default":s.status==="failed"?"destructive":s.status==="degraded"?"secondary":"outline",children:s.status}),s.latency_ms!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s.latency_ms," ms"]})]}),((d=s.error)==null?void 0:d.message)&&e.jsx("div",{className:"mt-1 font-mono text-xs text-destructive break-all",children:s.error.message}),s.summary&&Object.keys(s.summary).length>0&&e.jsxs("details",{className:"mt-1",children:[e.jsx("summary",{className:"cursor-pointer text-xs text-muted-foreground",children:a("kb.diag.stages")}),e.jsx("pre",{className:"mt-1 overflow-x-auto text-xs text-muted-foreground",children:JSON.stringify(s.summary,null,2)})]})]},x)})})]})}),b.length>0&&e.jsx(h,{children:e.jsxs(p,{className:"space-y-2 pt-6",children:[e.jsxs("div",{className:"text-sm font-medium",children:[a("kb.references"),"(",b.length,")"]}),e.jsx("div",{className:"space-y-2",children:b.map(s=>e.jsxs("div",{className:"cursor-pointer rounded-md border p-3 text-sm transition-colors hover:bg-muted/50",onClick:()=>A(s),title:a("kb.viewFullRef"),children:[e.jsxs("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[e.jsxs(m,{variant:"outline",children:["[",s.n,"]"]}),e.jsx(m,{variant:"secondary",children:s.kind}),e.jsx("span",{className:"font-medium",children:s.title}),e.jsxs("span",{className:"text-muted-foreground",children:["score ",s.score.toFixed(3)]})]}),e.jsx("p",{className:"text-muted-foreground",children:s.snippet})]},s.n))})]})}),e.jsx(ke,{open:!!n,onOpenChange:s=>{s||A(null)},children:e.jsxs(be,{className:"flex max-h-[85vh] sm:max-w-3xl flex-col",children:[e.jsx(ve,{children:e.jsx(Ne,{className:"flex flex-wrap items-center gap-2",children:((G=i.data)==null?void 0:G.breadcrumb)||(n==null?void 0:n.title)})}),i.isLoading?e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:"…"}):i.data?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(m,{variant:"secondary",children:i.data.kind}),i.data.kb_name&&e.jsx("span",{children:i.data.kb_name}),i.data.doc_title&&e.jsxs("span",{children:["· ",i.data.doc_title]})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto rounded-md border p-4",children:e.jsx(Z,{source:i.data.content,wrapperElement:{"data-color-mode":P==="dark"?"dark":"light"},style:{background:"transparent",color:"inherit"}})})]}):e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:a("common.failedToLoad")}),e.jsx(Se,{children:e.jsx(I,{size:"sm",variant:"outline",onClick:()=>A(null),children:a("common.close")})})]})})]})}export{He as default}; +`);y(xe=>xe+t)}else if(T==="result")try{const t=JSON.parse(z);b(t.status),v(t.references??[]),w(t.log_id!=null?String(t.log_id):null),S(Array.isArray(t.trace)?t.trace:null)}catch{}}}}else{const l=await c.json();y(l.data.answer),b(l.data.status),v(l.data.references??[]),w(l.data.log_id!=null?String(l.data.log_id):null),S(Array.isArray(l.data.trace)?l.data.trace:null)}}catch(c){c instanceof DOMException&&c.name==="AbortError"||je.error(c.message)}finally{B(!1),D.current=null}}return e.jsxs("div",{className:"space-y-6",children:[e.jsx(h,{children:e.jsxs(p,{className:"space-y-4 pt-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(se,{value:o,onValueChange:s=>{s&&(ie(s),Q("all"))},items:[{value:"all",label:a("common.all")},...(((M=$.data)==null?void 0:M.items)??[]).map(s=>({value:String(s.id),label:s.name}))],children:[e.jsx(ae,{className:"w-56",children:e.jsx(te,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(re,{children:[e.jsxs(f,{value:"all",children:[a("layout.kb"),":",a("common.all")]}),(((H=$.data)==null?void 0:H.items)??[]).map(s=>e.jsx(f,{value:String(s.id),children:s.name},s.id))]})]}),o!=="all"&&e.jsxs(se,{value:_,onValueChange:s=>{s&&Q(s)},items:[{value:"all",label:a("common.all")},...(((W=V.data)==null?void 0:W.items)??[]).map(s=>({value:String(s.id),label:s.title}))],children:[e.jsx(ae,{className:"w-64",children:e.jsx(te,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(re,{children:[e.jsxs(f,{value:"all",children:[a("layout.kbDocs"),":",a("common.all")]}),(((G=V.data)==null?void 0:G.items)??[]).map(s=>e.jsx(f,{value:String(s.id),children:s.title},s.id))]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(ye,{children:a("kb.askLabel")}),e.jsx(ge,{rows:4,value:K,onChange:s=>ne(s.target.value),onKeyDown:s=>{s.key==="Enter"&&!s.shiftKey&&(s.preventDefault(),J())},placeholder:"支持哪些数据库后端?"})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(ee,{checked:j,onCheckedChange:le}),e.jsx("span",{className:"text-muted-foreground",children:a("kb.stream")}),F()&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{checked:R,onCheckedChange:ce}),e.jsx("span",{className:"text-muted-foreground",children:a("kb.traceToggle")})]})]}),C?e.jsxs(I,{size:"sm",variant:"outline",onClick:()=>{var s;return(s=D.current)==null?void 0:s.abort()},children:[e.jsx(we,{className:"size-4"}),a("kb.stop")]}):e.jsxs(I,{size:"sm",onClick:J,children:[e.jsx(Ce,{className:"size-4"}),a("kb.ask")]})]})]})}),(u||g)&&e.jsx(h,{children:e.jsxs(p,{className:"space-y-3 pt-6",children:[u&&e.jsx(m,{variant:u==="answered"?"default":"secondary",children:u}),L&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[a("kb.logId"),":",e.jsx("code",{children:L})]}),C&&!g&&e.jsx("p",{className:"text-sm text-muted-foreground",children:a("kb.thinking")}),e.jsx("div",{className:"text-sm leading-6",children:e.jsx(Z,{source:g||" ",wrapperElement:{"data-color-mode":P==="dark"?"dark":"light"},style:{background:"transparent",color:"inherit"}})})]})}),N&&N.length>0&&e.jsx(h,{children:e.jsxs(p,{className:"space-y-2 pt-6",children:[e.jsx("div",{className:"text-sm font-medium",children:a("kb.tracePanel")}),e.jsx("div",{className:"space-y-2",children:N.map((s,x)=>{var d;return e.jsxs("div",{className:"rounded-md border p-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:s.stage}),e.jsx(m,{variant:s.status==="ok"?"default":s.status==="failed"?"destructive":s.status==="degraded"?"secondary":"outline",children:s.status}),s.latency_ms!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s.latency_ms," ms"]})]}),((d=s.error)==null?void 0:d.message)&&e.jsx("div",{className:"mt-1 font-mono text-xs text-destructive break-all",children:s.error.message}),s.summary&&Object.keys(s.summary).length>0&&e.jsxs("details",{className:"mt-1",children:[e.jsx("summary",{className:"cursor-pointer text-xs text-muted-foreground",children:a("kb.diag.stages")}),e.jsx("pre",{className:"mt-1 overflow-x-auto text-xs text-muted-foreground",children:JSON.stringify(s.summary,null,2)})]})]},x)})})]})}),k.length>0&&e.jsx(h,{children:e.jsxs(p,{className:"space-y-2 pt-6",children:[e.jsxs("div",{className:"text-sm font-medium",children:[a("kb.references"),"(",k.length,")"]}),e.jsx("div",{className:"space-y-2",children:k.map(s=>e.jsxs("div",{className:"cursor-pointer rounded-md border p-3 text-sm transition-colors hover:bg-muted/50",onClick:()=>A(s),title:a("kb.viewFullRef"),children:[e.jsxs("div",{className:"mb-1 flex flex-wrap items-center gap-2",children:[e.jsxs(m,{variant:"outline",children:["[",s.n,"]"]}),e.jsx(m,{variant:"secondary",children:s.kind}),e.jsx("span",{className:"font-medium",children:s.title}),e.jsxs("span",{className:"text-muted-foreground",children:["score ",s.score.toFixed(3)]})]}),e.jsx("p",{className:"text-muted-foreground",children:s.snippet})]},s.n))})]})}),e.jsx(be,{open:!!n,onOpenChange:s=>{s||A(null)},children:e.jsxs(ke,{className:"flex max-h-[85vh] sm:max-w-3xl flex-col",children:[e.jsx(ve,{children:e.jsx(Ne,{className:"flex flex-wrap items-center gap-2",children:((U=i.data)==null?void 0:U.breadcrumb)||(n==null?void 0:n.title)})}),i.isLoading?e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:"…"}):i.data?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(m,{variant:"secondary",children:i.data.kind}),i.data.kb_name&&e.jsx("span",{children:i.data.kb_name}),i.data.doc_title&&e.jsxs("span",{children:["· ",i.data.doc_title]})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto rounded-md border p-4",children:e.jsx(Z,{source:i.data.content,wrapperElement:{"data-color-mode":P==="dark"?"dark":"light"},style:{background:"transparent",color:"inherit"}})})]}):e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:a("common.failedToLoad")}),e.jsx(Se,{children:e.jsx(I,{size:"sm",variant:"outline",onClick:()=>A(null),children:a("common.close")})})]})})]})}export{He as default}; diff --git a/adminui/assets/audit-BDVWTpZ-.js b/adminui/assets/audit-VczS4FwP.js similarity index 80% rename from adminui/assets/audit-BDVWTpZ-.js rename to adminui/assets/audit-VczS4FwP.js index a0667c30..71a88cff 100644 --- a/adminui/assets/audit-BDVWTpZ-.js +++ b/adminui/assets/audit-VczS4FwP.js @@ -1,2 +1,2 @@ -import{f as l,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as ie}from"./use-url-state-BBO3na5E.js";import{cJ as re,cz as ne,n as w,aI as ce,T as J,_ as Q,q as oe,U as K,V as y,u as de,aL as le,aM as me,aP as xe,aQ as ue,bk as je}from"./index-DFelzBez.js";import{C as he,a as pe}from"./card-D3QxRGt-.js";import{I as fe}from"./input-Bx5u8hTS.js";import{L as G}from"./label-DeKRRvpz.js";import{B as C}from"./badge-BvrzcoWP.js";import{S as ge,e as ve,f as Ne,a as be,c as p}from"./select-Dc4_9PNt.js";import{D as Se}from"./date-range-picker-C5krwo0v.js";import{T as we,d as ye,e as D,c as m,a as Ce,b as o}from"./table-gihdE9_j.js";import{T as De}from"./table-skeleton-BtLTAVzI.js";import{E as _e}from"./empty-state-D0NvGCXa.js";import{P as Te}from"./pagination-bar-DD_HkQGa.js";import{D as Re}from"./download-DA3qByua.js";import{E as ke}from"./ellipsis-vertical-UHYLUh-c.js";import{E as Le}from"./eye-CDueZ4cg.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./calendar-CgYg3JyR.js";import"./chevron-left-CbJIXgY2.js";import"./calendar-CQckEvY8.js";const W={create:"default",update:"secondary",delete:"destructive",upload:"default",register:"outline",login:"secondary"};function u(){return new Date().toISOString().split("T")[0]}function X(s){const j=new Date;return j.setDate(j.getDate()-s),j.toISOString().split("T")[0]}function it(){var M,V,$;const{t:s}=re(),{getInt:j,set:f}=ie(),g=j("page"),[_,T]=l.useState(""),[v,R]=l.useState(""),[N,x]=l.useState({from:"",to:""}),[k,L]=l.useState(""),[E,A]=l.useState(""),[I,O]=l.useState(""),[a,P]=l.useState(null),U=20,z=new URLSearchParams({page:String(g),page_size:String(U)});v&&z.set("action",v);const d=ne({queryKey:["audit",g,v],queryFn:()=>je.send("/admin/audit",{query:Object.fromEntries(z.entries())})});function B(){R(_),A(N.from),O(N.to),f({page:1})}function Y(){T(""),R(""),x({from:"",to:""}),L(""),A(""),O(""),f({page:1})}function Z(t){L(t??""),t==="today"?x({from:u(),to:u()}):t==="7d"?x({from:X(7),to:u()}):t==="30d"?x({from:X(30),to:u()}):t||x({from:"",to:""})}function b(t){let i=t;if(E){const r=new Date(E);i=i.filter(n=>new Date(n.created_at)>=r)}if(I){const r=new Date(I);r.setHours(23,59,59,999),i=i.filter(n=>new Date(n.created_at)<=r)}return i}function ee(){var H;const t=b(((H=d.data)==null?void 0:H.items)??[]),i="Time,Action,Subject,Subject ID,Actor ID,Actor Role,Detail,IP Address",r=t.map(c=>[c.created_at,c.action,c.subject,c.subject_id??"",c.actor_id??"system",c.actor_role??"",(c.detail??"").replace(/"/g,'""'),c.ip_address??""].map(ae=>`"${ae}"`).join(",")),n=[i,...r].join(` -`),h=new Blob([n],{type:"text/csv;charset=utf-8;"}),q=URL.createObjectURL(h),S=document.createElement("a");S.href=q,S.download=`audit-log-${u()}.csv`,S.click(),URL.revokeObjectURL(q)}function te(){var h;const t=b(((h=d.data)==null?void 0:h.items)??[]),i=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),r=URL.createObjectURL(i),n=document.createElement("a");n.href=r,n.download=`audit-log-${u()}.json`,n.click(),URL.revokeObjectURL(r)}const F=b(((M=d.data)==null?void 0:M.items)??[]),se=Math.ceil((((V=d.data)==null?void 0:V.total)??0)/U);return e.jsxs("div",{className:"space-y-6 pb-6",children:[e.jsxs("div",{className:"flex items-end gap-3 flex-wrap",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(G,{className:"text-xs",children:s("audit.action")}),e.jsx(fe,{placeholder:"create, delete, ...",value:_,onChange:t=>T(t.target.value),onKeyDown:t=>t.key==="Enter"&&B(),className:"w-48"})]}),e.jsx("div",{className:"flex items-end gap-2",children:e.jsxs("div",{className:"space-y-1",children:[e.jsx(G,{className:"text-xs",children:s("audit.dateRange")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(ge,{value:k,onValueChange:Z,children:[e.jsx(ve,{className:"w-40",children:e.jsx(Ne,{placeholder:s("audit.dateRange")})}),e.jsxs(be,{children:[e.jsx(p,{value:"today",children:s("audit.today")}),e.jsx(p,{value:"7d",children:"7d"}),e.jsx(p,{value:"30d",children:"30d"}),e.jsx(p,{value:"custom",children:s("audit.custom")})]})]}),k==="custom"&&e.jsx(Se,{value:N,onChange:t=>x(t),placeholder:s("audit.dateRange")})]})]})}),e.jsxs(w,{variant:"outline",size:"sm",onClick:B,children:[e.jsx(ce,{className:"size-4"}),s("audit.search")]}),e.jsx(w,{variant:"ghost",size:"sm",onClick:Y,children:s("audit.clear")}),e.jsx("div",{className:"ml-auto",children:e.jsxs(J,{children:[e.jsx(Q,{render:e.jsxs(w,{variant:"outline",size:"sm",children:[e.jsx(Re,{className:"size-4"}),s("audit.export"),e.jsx(oe,{className:"size-4"})]})}),e.jsxs(K,{align:"end",children:[e.jsx(y,{onClick:ee,children:"CSV"}),e.jsx(y,{onClick:te,children:"JSON"})]})]})})]}),d.error&&e.jsx("div",{className:"text-sm text-destructive bg-destructive/10 p-3 rounded-md",children:s("audit.failedToLoad")}),e.jsx(he,{children:e.jsx(pe,{className:"p-0",children:d.isLoading?e.jsx(De,{cols:6}):e.jsxs(we,{children:[e.jsx(ye,{children:e.jsxs(D,{children:[e.jsx(m,{children:s("audit.timestamp")}),e.jsx(m,{children:s("audit.action")}),e.jsx(m,{children:s("audit.resource")}),e.jsx(m,{children:s("audit.subjectId")}),e.jsx(m,{children:s("audit.actor")}),e.jsx(m,{children:s("audit.detailCol")}),e.jsx(m,{className:"text-end",children:s("common.actions")})]})}),e.jsx(Ce,{children:F.length===0?e.jsx(D,{children:e.jsx(o,{colSpan:7,children:e.jsx(_e,{icon:de,title:s("audit.noEntries"),description:s("audit.noEntriesDesc")})})}):F.map(t=>e.jsxs(D,{children:[e.jsx(o,{className:"text-xs text-muted-foreground whitespace-nowrap",children:new Date(t.created_at).toLocaleString()}),e.jsx(o,{children:e.jsx(C,{variant:W[t.action]??"outline",children:t.action})}),e.jsx(o,{className:"font-medium",children:t.subject}),e.jsx(o,{className:"font-mono text-xs max-w-32 truncate",children:t.subject_id?t.subject_id.slice(0,8)+"...":"—"}),e.jsxs(o,{className:"text-xs",children:[t.actor_id?e.jsx("span",{className:"font-mono",children:t.actor_id.slice(0,8)}):e.jsx("span",{className:"text-muted-foreground",children:s("audit.system")}),t.actor_role&&e.jsx(C,{variant:"outline",className:"ms-1 text-[10px] px-1",children:t.actor_role})]}),e.jsx(o,{className:"text-xs text-muted-foreground max-w-48 truncate",children:t.detail||"—"}),e.jsx(o,{className:"text-end",children:e.jsxs(J,{children:[e.jsx(Q,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(ke,{className:"size-4"})}),e.jsx(K,{align:"end",children:e.jsxs(y,{onClick:()=>P(t),children:[e.jsx(Le,{className:"size-4 me-2"}),s("common.view")]})})]})})]},t.id))})]})})}),e.jsx(Te,{page:g,totalPages:se,total:(($=d.data)==null?void 0:$.total)??0,onPageChange:t=>f({page:t})}),e.jsx(le,{open:!!a,onOpenChange:t=>!t&&P(null),children:e.jsxs(me,{side:"right",className:"sm:max-w-md overflow-y-auto",children:[e.jsx(xe,{children:e.jsx(ue,{children:s("audit.viewEntry")})}),a&&e.jsxs("div",{className:"space-y-3 px-4 pb-4 text-sm",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.timestamp")}),e.jsx("div",{children:new Date(a.created_at).toLocaleString()})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.action")}),e.jsx(C,{variant:W[a.action]??"outline",children:a.action})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.resource")}),e.jsx("div",{children:a.subject})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.subjectId")}),e.jsx("div",{className:"font-mono text-xs break-all",children:a.subject_id||"—"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.actor")}),e.jsx("div",{className:"font-mono text-xs break-all",children:a.actor_id?`${a.actor_id}${a.actor_role?` (${a.actor_role})`:""}`:s("audit.system")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.ipAddress")}),e.jsx("div",{className:"font-mono text-xs break-all",children:a.ip_address||"—"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.userAgent")}),e.jsx("div",{className:"text-xs break-all",children:a.user_agent||"—"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.detailCol")}),e.jsx("div",{className:"whitespace-pre-wrap break-words",children:a.detail||"—"})]})]})]})})]})}export{it as default}; +import{f as l,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as ie}from"./use-url-state-BBO3na5E.js";import{cK as re,cA as ne,n as w,aJ as ce,T as J,_ as K,q as oe,U as Q,V as y,u as de,aM as le,aN as me,aQ as xe,aR as ue,bl as je}from"./index-C-uFVPpg.js";import{C as he,a as pe}from"./card-BBIqLCR8.js";import{I as fe}from"./input-Bp1SimRr.js";import{L as G}from"./label-DiZ0cGhf.js";import{B as C}from"./badge-Dhxp0jil.js";import{S as ge,e as ve,f as Ne,a as be,c as p}from"./select-DJZwiot8.js";import{D as Se}from"./date-range-picker-CGynAr_4.js";import{T as we,d as ye,e as D,c as m,a as Ce,b as o}from"./table-BoLxzYJ7.js";import{T as De}from"./table-skeleton-fqjGRt14.js";import{E as _e}from"./empty-state-CCcgx4uH.js";import{P as Te}from"./pagination-bar-BuL5EI1J.js";import{D as Re}from"./download-DAp88Hv9.js";import{E as ke}from"./ellipsis-vertical-B-dHvJs4.js";import{E as Ee}from"./eye-BjIZjYLa.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./calendar-eg-EvdVA.js";import"./chevron-left-C_tZtLI6.js";import"./calendar-CO7BPWOR.js";const W={create:"default",update:"secondary",delete:"destructive",upload:"default",register:"outline",login:"secondary"};function u(){return new Date().toISOString().split("T")[0]}function X(s){const j=new Date;return j.setDate(j.getDate()-s),j.toISOString().split("T")[0]}function it(){var M,V,$;const{t:s}=re(),{getInt:j,set:f}=ie(),g=j("page"),[_,T]=l.useState(""),[v,R]=l.useState(""),[N,x]=l.useState({from:"",to:""}),[k,E]=l.useState(""),[L,A]=l.useState(""),[I,O]=l.useState(""),[a,P]=l.useState(null),U=20,z=new URLSearchParams({page:String(g),page_size:String(U)});v&&z.set("action",v);const d=ne({queryKey:["audit",g,v],queryFn:()=>je.send("/admin/audit",{query:Object.fromEntries(z.entries())})});function B(){R(_),A(N.from),O(N.to),f({page:1})}function Y(){T(""),R(""),x({from:"",to:""}),E(""),A(""),O(""),f({page:1})}function Z(t){E(t??""),t==="today"?x({from:u(),to:u()}):t==="7d"?x({from:X(7),to:u()}):t==="30d"?x({from:X(30),to:u()}):t||x({from:"",to:""})}function b(t){let i=t;if(L){const r=new Date(L);i=i.filter(n=>new Date(n.created_at)>=r)}if(I){const r=new Date(I);r.setHours(23,59,59,999),i=i.filter(n=>new Date(n.created_at)<=r)}return i}function ee(){var H;const t=b(((H=d.data)==null?void 0:H.items)??[]),i="Time,Action,Subject,Subject ID,Actor ID,Actor Role,Detail,IP Address",r=t.map(c=>[c.created_at,c.action,c.subject,c.subject_id??"",c.actor_id??"system",c.actor_role??"",(c.detail??"").replace(/"/g,'""'),c.ip_address??""].map(ae=>`"${ae}"`).join(",")),n=[i,...r].join(` +`),h=new Blob([n],{type:"text/csv;charset=utf-8;"}),q=URL.createObjectURL(h),S=document.createElement("a");S.href=q,S.download=`audit-log-${u()}.csv`,S.click(),URL.revokeObjectURL(q)}function te(){var h;const t=b(((h=d.data)==null?void 0:h.items)??[]),i=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),r=URL.createObjectURL(i),n=document.createElement("a");n.href=r,n.download=`audit-log-${u()}.json`,n.click(),URL.revokeObjectURL(r)}const F=b(((M=d.data)==null?void 0:M.items)??[]),se=Math.ceil((((V=d.data)==null?void 0:V.total)??0)/U);return e.jsxs("div",{className:"space-y-6 pb-6",children:[e.jsxs("div",{className:"flex items-end gap-3 flex-wrap",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(G,{className:"text-xs",children:s("audit.action")}),e.jsx(fe,{placeholder:"create, delete, ...",value:_,onChange:t=>T(t.target.value),onKeyDown:t=>t.key==="Enter"&&B(),className:"w-48"})]}),e.jsx("div",{className:"flex items-end gap-2",children:e.jsxs("div",{className:"space-y-1",children:[e.jsx(G,{className:"text-xs",children:s("audit.dateRange")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(ge,{value:k,onValueChange:Z,children:[e.jsx(ve,{className:"w-40",children:e.jsx(Ne,{placeholder:s("audit.dateRange")})}),e.jsxs(be,{children:[e.jsx(p,{value:"today",children:s("audit.today")}),e.jsx(p,{value:"7d",children:"7d"}),e.jsx(p,{value:"30d",children:"30d"}),e.jsx(p,{value:"custom",children:s("audit.custom")})]})]}),k==="custom"&&e.jsx(Se,{value:N,onChange:t=>x(t),placeholder:s("audit.dateRange")})]})]})}),e.jsxs(w,{variant:"outline",size:"sm",onClick:B,children:[e.jsx(ce,{className:"size-4"}),s("audit.search")]}),e.jsx(w,{variant:"ghost",size:"sm",onClick:Y,children:s("audit.clear")}),e.jsx("div",{className:"ml-auto",children:e.jsxs(J,{children:[e.jsx(K,{render:e.jsxs(w,{variant:"outline",size:"sm",children:[e.jsx(Re,{className:"size-4"}),s("audit.export"),e.jsx(oe,{className:"size-4"})]})}),e.jsxs(Q,{align:"end",children:[e.jsx(y,{onClick:ee,children:"CSV"}),e.jsx(y,{onClick:te,children:"JSON"})]})]})})]}),d.error&&e.jsx("div",{className:"text-sm text-destructive bg-destructive/10 p-3 rounded-md",children:s("audit.failedToLoad")}),e.jsx(he,{children:e.jsx(pe,{className:"p-0",children:d.isLoading?e.jsx(De,{cols:6}):e.jsxs(we,{children:[e.jsx(ye,{children:e.jsxs(D,{children:[e.jsx(m,{children:s("audit.timestamp")}),e.jsx(m,{children:s("audit.action")}),e.jsx(m,{children:s("audit.resource")}),e.jsx(m,{children:s("audit.subjectId")}),e.jsx(m,{children:s("audit.actor")}),e.jsx(m,{children:s("audit.detailCol")}),e.jsx(m,{className:"text-end",children:s("common.actions")})]})}),e.jsx(Ce,{children:F.length===0?e.jsx(D,{children:e.jsx(o,{colSpan:7,children:e.jsx(_e,{icon:de,title:s("audit.noEntries"),description:s("audit.noEntriesDesc")})})}):F.map(t=>e.jsxs(D,{children:[e.jsx(o,{className:"text-xs text-muted-foreground whitespace-nowrap",children:new Date(t.created_at).toLocaleString()}),e.jsx(o,{children:e.jsx(C,{variant:W[t.action]??"outline",children:t.action})}),e.jsx(o,{className:"font-medium",children:t.subject}),e.jsx(o,{className:"font-mono text-xs max-w-32 truncate",children:t.subject_id?t.subject_id.slice(0,8)+"...":"—"}),e.jsxs(o,{className:"text-xs",children:[t.actor_id?e.jsx("span",{className:"font-mono",children:t.actor_id.slice(0,8)}):e.jsx("span",{className:"text-muted-foreground",children:s("audit.system")}),t.actor_role&&e.jsx(C,{variant:"outline",className:"ms-1 text-[10px] px-1",children:t.actor_role})]}),e.jsx(o,{className:"text-xs text-muted-foreground max-w-48 truncate",children:t.detail||"—"}),e.jsx(o,{className:"text-end",children:e.jsxs(J,{children:[e.jsx(K,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(ke,{className:"size-4"})}),e.jsx(Q,{align:"end",children:e.jsxs(y,{onClick:()=>P(t),children:[e.jsx(Ee,{className:"size-4 me-2"}),s("common.view")]})})]})})]},t.id))})]})})}),e.jsx(Te,{page:g,totalPages:se,total:(($=d.data)==null?void 0:$.total)??0,onPageChange:t=>f({page:t})}),e.jsx(le,{open:!!a,onOpenChange:t=>!t&&P(null),children:e.jsxs(me,{side:"right",className:"sm:max-w-md overflow-y-auto",children:[e.jsx(xe,{children:e.jsx(ue,{children:s("audit.viewEntry")})}),a&&e.jsxs("div",{className:"space-y-3 px-4 pb-4 text-sm",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.timestamp")}),e.jsx("div",{children:new Date(a.created_at).toLocaleString()})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.action")}),e.jsx(C,{variant:W[a.action]??"outline",children:a.action})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.resource")}),e.jsx("div",{children:a.subject})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.subjectId")}),e.jsx("div",{className:"font-mono text-xs break-all",children:a.subject_id||"—"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.actor")}),e.jsx("div",{className:"font-mono text-xs break-all",children:a.actor_id?`${a.actor_id}${a.actor_role?` (${a.actor_role})`:""}`:s("audit.system")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.ipAddress")}),e.jsx("div",{className:"font-mono text-xs break-all",children:a.ip_address||"—"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.userAgent")}),e.jsx("div",{className:"text-xs break-all",children:a.user_agent||"—"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s("audit.detailCol")}),e.jsx("div",{className:"whitespace-pre-wrap break-words",children:a.detail||"—"})]})]})]})})]})}export{it as default}; diff --git a/adminui/assets/await-resume-panel-ZjDeWsP0.js b/adminui/assets/await-resume-panel-X1rwNg9S.js similarity index 77% rename from adminui/assets/await-resume-panel-ZjDeWsP0.js rename to adminui/assets/await-resume-panel-X1rwNg9S.js index c3bc50f6..ef14aa81 100644 --- a/adminui/assets/await-resume-panel-ZjDeWsP0.js +++ b/adminui/assets/await-resume-panel-X1rwNg9S.js @@ -1 +1 @@ -import{f as w,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as v,cA as S,cz as k,c9 as l,bk as y,n as x}from"./index-DFelzBez.js";import{u as q}from"./useMutation-DgRiHz67.js";import{B as F}from"./badge-BvrzcoWP.js";import{I as b}from"./input-Bx5u8hTS.js";import{L as _}from"./label-DeKRRvpz.js";import{T as z}from"./textarea-Daa6n4S-.js";import{S as R}from"./switch-DLTIF0BW.js";import{S as T,e as A,f as D,a as E,c as L}from"./select-Dc4_9PNt.js";import{R as Q}from"./rotate-ccw-DVe8kGkZ.js";import{C as V}from"./copy-BcCPCJtg.js";function B(o,r){return o instanceof Error&&o.message?o.message:r}function I({field:o,value:r,onChange:t}){const{t:m}=v();return o.type==="boolean"?e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx(R,{checked:r===!0,onCheckedChange:n=>t(!!n)}),e.jsx("span",{className:"text-muted-foreground",children:m(r===!0?"common.true":"common.false")})]}):o.type==="number"?e.jsx(b,{type:"number",className:"h-8 text-xs",value:typeof r=="string"?r:"",onChange:n=>t(n.target.value)}):o.type==="select"?e.jsxs(T,{value:typeof r=="string"&&r?r:void 0,onValueChange:n=>t(n??""),children:[e.jsx(A,{className:"h-8 text-xs",children:e.jsx(D,{placeholder:"—"})}),e.jsx(E,{children:(o.options??[]).map(n=>e.jsx(L,{value:n,children:n},n))})]}):e.jsx(b,{className:"h-8 text-xs",value:typeof r=="string"?r:"",onChange:n=>t(n.target.value)})}function Y({instanceId:o,onResumed:r}){const{t}=v(),m=S(),[n,f]=w.useState("{}"),[g,h]=w.useState({}),j=k({queryKey:["flow-instance-waiting",o],queryFn:()=>y.admin.flows.getInstanceWaiting(o),retry:!1}),a=j.data,d=q({mutationFn:s=>y.admin.flows.resume(o,s),onSuccess:s=>{l.success(t("flows.instance.resumed")),f("{}"),h({}),r(s),m.invalidateQueries({queryKey:["flow-instances"]})},onError:s=>l.error(B(s,t("flows.instance.failed")))}),N=s=>{const p=(a==null?void 0:a.inputs)??[],u={};for(const i of p){const c=g[i.name];if(i.required&&(c===void 0||c==="")){l.error(t("flows.instance.formFieldRequired",{field:i.label||i.name}));return}c===void 0||c===""||(u[i.name]=i.type==="number"?Number(c):c)}d.mutate({action:s,data:u})},C=()=>{let s;try{s=JSON.parse(n)}catch{l.error(t("flows.editor.invalidJson"));return}d.mutate({action:"submit",data:s})};return j.isLoading?e.jsx("p",{className:"text-xs text-muted-foreground",children:t("common.loading")}):a?e.jsxs("div",{className:"space-y-2 rounded-md border border-orange-200 bg-orange-50/60 px-3 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx(F,{variant:"secondary",children:"waiting"}),a.resume_until&&e.jsxs("span",{className:"text-muted-foreground",children:["· ",t("flows.instance.resumeUntil")," ",new Date(a.resume_until).toLocaleString()]})]}),e.jsxs("div",{className:"space-y-2",children:[a.form_content&&e.jsx("p",{className:"whitespace-pre-wrap rounded-md bg-background px-2.5 py-2 text-sm",children:a.form_content}),a.approvers.length>0&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("flows.instance.awaitApproversHint",{list:a.approvers.join(", ")})}),a.inputs.map(s=>e.jsxs("div",{className:"space-y-1",children:[e.jsxs(_,{className:"text-xs",children:[s.label||s.name,s.required&&e.jsx("span",{className:"ml-0.5 text-destructive",children:"*"}),e.jsx("span",{className:"ml-1 font-mono text-[10px] text-muted-foreground",children:s.name})]}),e.jsx(I,{field:s,value:g[s.name]??(s.type==="boolean"?!1:""),onChange:p=>h(u=>({...u,[s.name]:p}))})]},s.name)),a.inputs.length===0&&e.jsxs("div",{className:"space-y-1",children:[e.jsx(z,{rows:3,className:"font-mono text-xs",value:n,onChange:s=>f(s.target.value)}),e.jsxs(x,{size:"sm",disabled:d.isPending,onClick:C,children:[e.jsx(Q,{className:"size-3.5"}),t("flows.instance.submitData")]})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:a.actions.map(s=>e.jsx(x,{size:"sm",variant:s.id==="approve"?"default":"outline",className:s.id==="approve"?"bg-emerald-600 hover:bg-emerald-700":"",disabled:d.isPending,onClick:()=>N(s.id),children:s.title},s.id))}),a.resume_path&&e.jsxs("div",{className:"space-y-1 border-t border-orange-200 pt-2",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("flows.instance.resumeUrlHint")}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("code",{className:"flex-1 truncate rounded bg-background px-2 py-1 text-[11px]",children:[typeof window<"u"?window.location.origin:"",a.resume_path]}),e.jsx(x,{variant:"ghost",size:"icon-sm",onClick:()=>{const s=`${typeof window<"u"?window.location.origin:""}${a.resume_path??""}`;navigator.clipboard.writeText(s).then(()=>l.success(t("flows.instance.resumeUrlCopied"))).catch(()=>l.error(t("flows.editor.failedToCopy")))},children:e.jsx(V,{className:"size-3.5"})})]})]})]})]}):null}export{Y as A}; +import{f as w,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as v,cB as S,cA as k,ca as l,bl as y,n as x}from"./index-C-uFVPpg.js";import{u as q}from"./useMutation-BlIm5cor.js";import{B as F}from"./badge-Dhxp0jil.js";import{I as b}from"./input-Bp1SimRr.js";import{L as _}from"./label-DiZ0cGhf.js";import{T as R}from"./textarea-BhaIg3vS.js";import{S as T}from"./switch-DoovYEIg.js";import{S as z,e as A,f as B,a as D,c as E}from"./select-DJZwiot8.js";import{R as L}from"./rotate-ccw-B1uc2XfE.js";import{C as Q}from"./copy-DRI8cFnN.js";function V(o,r){return o instanceof Error&&o.message?o.message:r}function I({field:o,value:r,onChange:t}){const{t:m}=v();return o.type==="boolean"?e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx(T,{checked:r===!0,onCheckedChange:n=>t(!!n)}),e.jsx("span",{className:"text-muted-foreground",children:m(r===!0?"common.true":"common.false")})]}):o.type==="number"?e.jsx(b,{type:"number",className:"h-8 text-xs",value:typeof r=="string"?r:"",onChange:n=>t(n.target.value)}):o.type==="select"?e.jsxs(z,{value:typeof r=="string"&&r?r:void 0,onValueChange:n=>t(n??""),children:[e.jsx(A,{className:"h-8 text-xs",children:e.jsx(B,{placeholder:"—"})}),e.jsx(D,{children:(o.options??[]).map(n=>e.jsx(E,{value:n,children:n},n))})]}):e.jsx(b,{className:"h-8 text-xs",value:typeof r=="string"?r:"",onChange:n=>t(n.target.value)})}function Y({instanceId:o,onResumed:r}){const{t}=v(),m=S(),[n,f]=w.useState("{}"),[g,h]=w.useState({}),j=k({queryKey:["flow-instance-waiting",o],queryFn:()=>y.admin.flows.getInstanceWaiting(o),retry:!1}),a=j.data,d=q({mutationFn:s=>y.admin.flows.resume(o,s),onSuccess:s=>{l.success(t("flows.instance.resumed")),f("{}"),h({}),r(s),m.invalidateQueries({queryKey:["flow-instances"]})},onError:s=>l.error(V(s,t("flows.instance.failed")))}),N=s=>{const p=(a==null?void 0:a.inputs)??[],u={};for(const i of p){const c=g[i.name];if(i.required&&(c===void 0||c==="")){l.error(t("flows.instance.formFieldRequired",{field:i.label||i.name}));return}c===void 0||c===""||(u[i.name]=i.type==="number"?Number(c):c)}d.mutate({action:s,data:u})},C=()=>{let s;try{s=JSON.parse(n)}catch{l.error(t("flows.editor.invalidJson"));return}d.mutate({action:"submit",data:s})};return j.isLoading?e.jsx("p",{className:"text-xs text-muted-foreground",children:t("common.loading")}):a?e.jsxs("div",{className:"space-y-2 rounded-md border border-orange-200 bg-orange-50/60 px-3 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx(F,{variant:"secondary",children:"waiting"}),a.resume_until&&e.jsxs("span",{className:"text-muted-foreground",children:["· ",t("flows.instance.resumeUntil")," ",new Date(a.resume_until).toLocaleString()]})]}),e.jsxs("div",{className:"space-y-2",children:[a.form_content&&e.jsx("p",{className:"whitespace-pre-wrap rounded-md bg-background px-2.5 py-2 text-sm",children:a.form_content}),a.approvers.length>0&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("flows.instance.awaitApproversHint",{list:a.approvers.join(", ")})}),a.inputs.map(s=>e.jsxs("div",{className:"space-y-1",children:[e.jsxs(_,{className:"text-xs",children:[s.label||s.name,s.required&&e.jsx("span",{className:"ml-0.5 text-destructive",children:"*"}),e.jsx("span",{className:"ml-1 font-mono text-[10px] text-muted-foreground",children:s.name})]}),e.jsx(I,{field:s,value:g[s.name]??(s.type==="boolean"?!1:""),onChange:p=>h(u=>({...u,[s.name]:p}))})]},s.name)),a.inputs.length===0&&e.jsxs("div",{className:"space-y-1",children:[e.jsx(R,{rows:3,className:"font-mono text-xs",value:n,onChange:s=>f(s.target.value)}),e.jsxs(x,{size:"sm",disabled:d.isPending,onClick:C,children:[e.jsx(L,{className:"size-3.5"}),t("flows.instance.submitData")]})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:a.actions.map(s=>e.jsx(x,{size:"sm",variant:s.id==="approve"?"default":"outline",className:s.id==="approve"?"bg-emerald-600 hover:bg-emerald-700":"",disabled:d.isPending,onClick:()=>N(s.id),children:s.title},s.id))}),a.resume_path&&e.jsxs("div",{className:"space-y-1 border-t border-orange-200 pt-2",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("flows.instance.resumeUrlHint")}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("code",{className:"flex-1 truncate rounded bg-background px-2 py-1 text-[11px]",children:[typeof window<"u"?window.location.origin:"",a.resume_path]}),e.jsx(x,{variant:"ghost",size:"icon-sm",onClick:()=>{const s=`${typeof window<"u"?window.location.origin:""}${a.resume_path??""}`;navigator.clipboard.writeText(s).then(()=>l.success(t("flows.instance.resumeUrlCopied"))).catch(()=>l.error(t("flows.editor.failedToCopy")))},children:e.jsx(Q,{className:"size-3.5"})})]})]})]})]}):null}export{Y as A}; diff --git a/adminui/assets/badge-BvrzcoWP.js b/adminui/assets/badge-Dhxp0jil.js similarity index 85% rename from adminui/assets/badge-BvrzcoWP.js rename to adminui/assets/badge-Dhxp0jil.js index b70d8118..924ca18b 100644 --- a/adminui/assets/badge-BvrzcoWP.js +++ b/adminui/assets/badge-Dhxp0jil.js @@ -1 +1 @@ -import{cC as a,bW as n,bl as d,br as s}from"./index-DFelzBez.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 g({className:r,variant:e="default",render:t,...i}){return a({defaultTagName:"span",props:n({className:d(o({variant:e}),r)},i),render:t,state:{slot:"badge",variant:e}})}export{g as B}; +import{cD as a,bX as n,bm as s,bs as d}from"./index-C-uFVPpg.js";const o=d("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 g({className:r,variant:e="default",render:t,...i}){return a({defaultTagName:"span",props:n({className:s(o({variant:e}),r)},i),render:t,state:{slot:"badge",variant:e}})}export{g as B}; diff --git a/adminui/assets/ban-BBupK94g.js b/adminui/assets/ban-D3I2e03r.js similarity index 87% rename from adminui/assets/ban-BBupK94g.js rename to adminui/assets/ban-D3I2e03r.js index b313a44c..289e46cd 100644 --- a/adminui/assets/ban-BBupK94g.js +++ b/adminui/assets/ban-D3I2e03r.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/braces-CSqrcTDW.js b/adminui/assets/braces-DzImKT76.js similarity index 90% rename from adminui/assets/braces-CSqrcTDW.js rename to adminui/assets/braces-DzImKT76.js index c35e5bdd..4124dfea 100644 --- a/adminui/assets/braces-CSqrcTDW.js +++ b/adminui/assets/braces-DzImKT76.js @@ -1,4 +1,4 @@ -import{bp as a}from"./index-DFelzBez.js";/** +import{bq as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/brain-Cq0xTcCG.js b/adminui/assets/brain-Dg6Cf5le.js similarity index 94% rename from adminui/assets/brain-Cq0xTcCG.js rename to adminui/assets/brain-Dg6Cf5le.js index 5fd2dec7..3c4c629a 100644 --- a/adminui/assets/brain-Cq0xTcCG.js +++ b/adminui/assets/brain-Dg6Cf5le.js @@ -1,4 +1,4 @@ -import{bp as a}from"./index-DFelzBez.js";/** +import{bq as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/brain-circuit-B84LIert.js b/adminui/assets/brain-circuit-D-nya_Iw.js similarity index 95% rename from adminui/assets/brain-circuit-B84LIert.js rename to adminui/assets/brain-circuit-D-nya_Iw.js index 6b4aba3b..a6166628 100644 --- a/adminui/assets/brain-circuit-B84LIert.js +++ b/adminui/assets/brain-circuit-D-nya_Iw.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/bubble-BcyAFuvd.js b/adminui/assets/bubble-86jLxXoi.js similarity index 85% rename from adminui/assets/bubble-BcyAFuvd.js rename to adminui/assets/bubble-86jLxXoi.js index 6b7699af..7d1ed5b5 100644 --- a/adminui/assets/bubble-BcyAFuvd.js +++ b/adminui/assets/bubble-86jLxXoi.js @@ -1 +1 @@ -import{j as e0}from"./vendor-react-j_G0Dyx0.js";import{cC as _0,bW as E0,br as N0}from"./index-DFelzBez.js";const t0=48,W=(o,l=0)=>{const a=new Int32Array(o.length);for(let r=0;r{const l=new Int32Array(o.length+1);for(let a=0;a{const l=new Int32Array(o.length);let a=0;for(let r=0;r>>1^-(i&1),l[r]=a}return l},M0=384,T0=[],be=Qe(W("E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010")),B0=Qe(W(":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3")),H0="@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom",L0=(()=>{const o=be.length-1,l=new Int32Array(o);for(let i=o-1;i>=0;i--){let m=1,E=i+1;for(let p=be[i];pE?F@03263243255B:032523853:0325B:8GA032542HE?3257D>03258432585:0325B:;0328B:032"),D0=W("012123445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EJK4444::EJ4444441691;644444114244444:;L6666555555555555555999666664444444444444444444444226?6:66644M9N?D:111::::6DJ199"),U0=ae("0202002020020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200"),V0=(()=>{const o=new Int32Array(319).fill(-1),l=ae("02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222"),a=ae("02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222");for(let r=0;r{const l=o.split(" "),a=l.shift();for(let r=0;rʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ244ƸƵ222]d24242ǖǓƚÄȫ2263ȨȥȨ2222222ǣ222222222222222222ǂƽ2ƾƵ2222222422222ƜƑ22222222222222222222144Ŧţ22Ţş222222222222222222222ĸ2ı68ĦģĦɡŰ4Ġ«®ĝ822ĔđĔ2ē2222622"),P0=ae("02222222222222222222222222222222222222222222222222222222222222222203062222222222IL2200IL021042222]`222IL0gj2e50n2222U00X202[^2y0000560|{~ƒ†22‰Œ‹>22|22222222222G000q†OVI00000}š2›>40000ŒB00000I¨­000°00000000000000021Q²±00´“000000000000000000000–222›HGHa5¾222Ã6À2222ÍÐ000­°2±"),n0=new Int32Array(991),o0=new Int32Array(991),r0=new Int32Array(991);let zt="";const St=new Int32Array(1030);{const o=new Map;let l=0,a=0;for(let r=0;rF@286¦2@H2D266226FB22B2>BD\\6N22222Z222D222p"),W0=Qe(W("1::22222432:222:22:22>222222:22:2221322511111311111114")),q0=ae("2Š4A;33N=C@H4A;33N=C@<2;363@QTQʰ222ˉºŴŽ2R2=18cƴÅҜÜÛŲǝȈ:ħ25=11D3A@216Er25;11B3?<438Cn9@7=<8192>2E121@9@EHE@9>2T25511<398216=V25511<398216=„ƧNž2Đå242L222290000f22500ɛ000ǘ222"),J0=W("ij"),K0=W("—"),Z0=W("1"),$0="* ** after backdrop before details-content file first-letter first-line marker placeholder selection";var Q0={GROUP_COUNT:M0,customValidatorNames:T0,edgeStart:be,labelStart:B0,labelText:H0,edgeTarget:L0,nodeGroup:j0,nodeVlist:V0,vlistPat:R0,vlistOps:G0,vlistRef:D0,vlistGroup:U0,litAnchor:n0,litGroup:o0,litPool:r0,poolOffsets:St,poolText:zt,adjGid:X0,adjStart:W0,adjTgt:q0,patGid:J0,patTgt:K0,postfixLookupGroups:Z0,orderSensitiveModifiers:$0};const Y0="line"in new Error,X=-1,he=-1,Ct=(o,l,a)=>{let r=2166136261;for(let i=l;i{const r=a-l;let i=Math.imul(r,2654435761)^o.charCodeAt(l);if(r>3){const m=r>>2,E=r>>1;i=Math.imul(i^o.charCodeAt(l+1)<<8^o.charCodeAt(l+2)<<16^o.charCodeAt(l+m),2246822507),i=Math.imul(i^o.charCodeAt(l+E)<<8^o.charCodeAt(l+E+m)<<16^o.charCodeAt(a-3),3266489909),i^=o.charCodeAt(a-2)<<8^o.charCodeAt(a-1)<<16;for(let p=l+3,q=a-4;p>>15|0},e2=(o,l,a={})=>{const{GROUP_COUNT:r,edgeStart:i,labelStart:m,labelText:E,edgeTarget:p,nodeGroup:q,nodeVlist:Q,vlistPat:Y,vlistOps:Ye,vlistRef:h,vlistGroup:L,litAnchor:S,litGroup:k,litPool:b,poolOffsets:M,poolText:C,adjGid:H,adjStart:y,adjTgt:T,patGid:A,patTgt:I,postfixLookupGroups:ee,customValidatorNames:se,orderSensitiveModifiers:ie}=o,Ce=new Int32Array(r).fill(-1);for(let e=0;eet&&(et=t)}let He=32;for(;He<2*(1+et+A.length);)He<<=1;const tt=new Int32Array(h.length+1);for(let e=0;ent&&(nt=t);const n=C.charCodeAt(M[b[e]*2]);(n===91||n===40)&&(Nt=!1)}let ce=1;for(;ce{let d=(Ct(t,n,s)^Math.imul(e,2654435761)|0)&ce-1;const f=s-n;for(;;){const g=ot[d];if(g===-1)return-1;if(S[g]===e&&M[b[g]*2+1]===f){const z=M[b[g]*2];let v=!0;for(let c=0;c{throw new Error("cn: missing validator "+e)}),i0=/\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$/,c0=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,f0=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,d0=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;let fe=0,Re=-1,Bt=-1,ge=-1,Ie=-1;const Ht=e=>e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95,Lt=e=>/\s/.test(String.fromCharCode(e)),u0=(e,t,n)=>{if(fe=0,Re=-1,n-t<3)return;const s=e.charCodeAt(t),d=e.charCodeAt(n-1);if(s===91&&d===93)fe=1;else if(s===40&&d===41)fe=2;else return;ge=t+1,Ie=n-1;let f=t+1;if(Ht(e.charCodeAt(f))){for(f++;f{if(n-t!==s.length)return!1;for(let d=0;d!!e&&!Number.isNaN(Number(e)),g0=(e,t,n)=>{if(n-t<11||!Ge(e,t,t+10,"@container"))return!1;if(e.charCodeAt(t+10)===47)return n-t>=12;const s=e.charCodeAt(t+11);return s===115&&n-t>=17&&Ge(e,t+10,t+16,"-size/")||s===110&&n-t>=19&&Ge(e,t+10,t+18,"-normal/")},m0=[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2],p0="length|number|number weight|family-name|position percentage|length size bg-size|image url|shadow|length|family-name|position percentage|length size bg-size|image url|shadow|number weight".split("|").map(e=>e.split(" ")),w0=[2,3,1,0,0,0,4,5,0,0,0,0,0,1,1],v0=(e,t,n,s)=>{if(e>=10){if(e>=25)return s0[e-25](t.slice(n,s));const d=e-10;if(fe!==m0[d])return!1;if(Re>=0){for(const f of p0[d])if(Ge(t,Re,Bt,f))return!0;return!1}switch(w0[d]){case 0:return!1;case 1:return!0;case 2:{const f=t.slice(ge,Ie);return i0.test(f)&&!c0.test(f)}case 3:return lt(t.slice(ge,Ie));case 4:return d0.test(t.slice(ge,Ie));default:return f0.test(t.slice(ge,Ie))}}switch(e){case 0:return!0;case 1:return fe===0;case 2:return fe===1;case 3:return fe===2;case 4:return h0.test(t.slice(n,s));case 5:return lt(t.slice(n,s));case 6:{const d=t.slice(n,s);return!!d&&Number.isInteger(Number(d))}case 7:return s>n&&t.charCodeAt(s-1)===37&<(t.slice(n,s-1));case 8:return b0.test(t.slice(n,s));default:return g0(t,n,s)}},x0=new Set(typeof ie=="string"?ie.split(" "):ie),jt=(e,t,n,s,d,f)=>{const g=Ct(t,n,s)^(d?2654435769:0)|0;let z=e.get(g);if(z!==void 0)e:for(let u=0;u{const n=[];let s=0,d=0,f=0;for(let c=0;c1){const c=[];let u=[];for(const w of n)w.charCodeAt(0)===91||x0.has(w)?(u.length&&(c.push(...u.sort()),u=[]),c.push(w)):u.push(w);u.length&&c.push(...u.sort()),g=c.join(":")}const z=t?g+" !":g;let v=st.get(z);return v===void 0&&st.set(z,v=De++),v};let Gt=new Map,Ue=r;const A0=r+4096,k0=()=>Ue++,Dt=2097152,ze=8192,it=new Int32Array(ze),J=new Array(ze).fill(null),Ut=new Int32Array(ze),Vt=new Int32Array(ze),Ft=new Uint8Array(ze);let Ot=0;const Pt=(e,t,n,s,d,f,g,z)=>{let v=e;if(J[e]!==null)if(J[e|1]===null)v=e|1;else if((Ot++&3)===0)v=e|Ot>>2&1;else return;J[v]=t.slice(n,s),it[v]=d,Ut[v]=f,Vt[v]=g,Ft[v]=z},Xt=()=>J.fill(null);let D=256,Ve=[new Int32Array(D),new Int32Array(D),new Int32Array(D),new Int32Array(D)],[me,pe,we,Fe]=Ve,Se=new Uint8Array(D),ve=new Uint8Array(D);const C0=()=>{D*=2,Ve=Ve.map(t=>{const n=new Int32Array(D);return n.set(t),n}),[me,pe,we,Fe]=Ve;const e=new Uint8Array(D);e.set(Se),Se=e,ve=new Uint8Array(D)};let xe=64,_e=new Int32Array(xe),Ee=new Int32Array(xe);const ct=new Int32Array(r);let te=2048,Wt=21,ft=new Float64Array(te),Oe=new Int32Array(te),ne=0;const dt=(e,t)=>{if(e===0&&t>>Wt;for(;Oe[s]===ne;){if(ft[s]===n)return 1;s=s+1&te-1}return ft[s]=n,Oe[s]=ne,0},Pe=(e,t,n,s,d)=>{if(n-t>=2&&e.charCodeAt(t)===91&&e.charCodeAt(n-1)===93){let f=-1;for(let g=t+1;g=0&&q[s]>=0)return q[s];for(let f=d-1;f>=0;f--){const g=Ee[f];if(g>n)continue;const z=_e[f],v=n-g;if(Le[z]===1&&v>0&&v<=nt){const N=e.charCodeAt(g);if(Nt===!1||N!==91&&N!==40){const re=a0(z,e,g,n);if(re>=0)return re}}const c=Q[z];if(c<0)continue;const u=h[c],w=Y[u],_=Y[u+1];if(w===_)continue;u0(e,g,n);const B=tt[c]-w;for(let N=w;N<_;N++)if(v0(Ye[N],e,g,n))return L[B+N]}return X},Xe=e=>{const t=e.length;let n=0,s=0,d=!1;(De>Rt||at.size>Rt)&&(at=new Map,st=new Map,De=2,Xt()),Ue>A0&&(Gt=new Map,Ue=r,Xt());let f=0;for(;f=9&&c<=13||c>=160&&Lt(c)){c!==32&&(d=!0),f++;continue}const u=f;let w=0;for(;f=9&&c<=13){d=!0;break}}else if(c>=160&&Lt(c)){d=!0;break}w=Math.imul(w^c,16777619),f++}const _=f,B=_-u;n===D&&C0();const N=n++;me[N]=u,pe[N]=_,s+=B,w^=Math.imul(B,2654435761);const re=w^w>>>15|0,F=re&8190;{let x=-1;if(it[F]===re&&J[F]!==null&&J[F].length===B?x=F:it[F|1]===re&&J[F|1]!==null&&J[F|1].length===B&&(x=F|1),x>=0){const V=J[x];let Z=!0;for(let $=0;$=Ae?Te+1:Ae;let j=Kt,R=_,Be=!1,Zt=0;R>j&&e.charCodeAt(R-1)===33?(Be=!0,R--):R>j&&e.charCodeAt(j)===33&&(Be=!0,j++,Zt=1);let de=-1;gt>Kt&&(de=gt+Zt,de>=R&&(de=-1));let mt=j;R-j>1&&e.charCodeAt(j)===45&&(mt=j+1);let O=0,le=0,ke=0,$t=-1,P=0;(Q[0]>=0||Le[0]===1)&&(_e[0]=0,Ee[0]=mt,P=1);let pt=he,wt=0;for(let x=mt;x=0&&(Q[Z]>=0||Le[Z]===1)&&x+1=0)if(Ke=!0,G=Pe(e,j,de,pt,wt),G!==X&&G=Te?Be?1:0:jt(at,e,Ae,Te,Be?1:0,x=>y0(x,Be)),we[N]=G,Se[N]=yt,Fe[N]=xt),Pt(F,e,u,_,re,G,xt,yt)}if(n===0)return"";if(n===1)return me[0]===0&&pe[0]===t?e:e.slice(me[0],pe[0]);if(n*He>te){for(;n*He>te;)te<<=1,Wt--;ft=new Float64Array(te),Oe=new Int32Array(te)}if(De>=Dt||Ue>=Dt)throw new Error("cn: too many distinct classes in one merge");ne=ne+1|0,ne===0&&(ct.fill(0),Oe.fill(0),ne=1);let g=!1;for(let c=n-1;c>=0;c--){const u=we[c];if(u===X){ve[c]=1;continue}const w=Fe[c];if(dt(w,u)===1){ve[c]=0,g=!0;continue}if(ve[c]=1,u=0)for(let B=y[_];B0&&(z+=" "),z+=e.slice(c,u),v=w}return z},oe=16384,K=new Int32Array(oe*2);let We=0,U=1,Ne=Object.create(null),qt=Object.create(null),ye=new Map,Jt=new Map,qe=0,Je=0;const Me=()=>{We^=oe,U=U+1|0,Je=0},I0=e=>{let t=Ne[e];if(t!==void 0)return t;const n=It(e,0,e.length),s=(n&16383)+We,d=K[s]===(n^U)||K[s^oe]===(n^U-1);return d&&(t=qt[e],t!==void 0)?(Ne[e]=t,t):(t=Xe(e),d?(Ne[e]=t,++qe>je&&(qe=0,qt=Ne,Ne=Object.create(null),Me())):(K[s]=n^U,++Je>oe&&Me()),t)},z0=e=>{let t=ye.get(e);if(t!==void 0)return t;const n=It(e,0,e.length),s=(n&16383)+We,d=K[s]===(n^U)||K[s^oe]===(n^U-1);return d&&(t=Jt.get(e),t!==void 0)?(ye.set(e,t),t):(t=Xe(e),d?(ye.set(e,t),++qe>je&&(qe=0,Jt=ye,ye=new Map,Me())):(K[s]=n^U,++Je>oe&&Me()),t)},S0=e=>{const t=It(e,0,e.length),n=(t&16383)+We;return K[n]===(t^U)||K[n^oe]===(t^U-1)?!0:(K[n]=t^U,++Je>oe&&Me(),!1)},ut=je===0?Xe:Y0?e=>{const t=ye.get(e);return t!==void 0?t:z0(e)}:I0;return{merge:function(){return arguments.length===1&&typeof arguments[0]=="string"?ut(arguments[0]):ut(n2.apply(null,arguments))},mergeString:ut,seenBefore:je===0?()=>!1:S0,mergeUncached:Xe}},$e=(o,l)=>{if(!o)return"";if(typeof o=="string")return o;let a="";if(typeof o.length=="number"&&(!l||Array.isArray(o))){const r=o;for(let i=0;i{let a="";for(let r=0;r{const a=l===void 0?()=>!0:l.seenBefore,r=l===void 0?o:l.mergeUncached;let i=new Map,m=new Map,E=0,p=null;const q=(h,L,S,k)=>{let b=0;if(L){if(L!==h.a0)return!1;b=1}if(S){if(S!==(b===0?h.a0:h.a1))return!1;b++}if(k){if(k!==(b===0?h.a0:b===1?h.a1:h.a2))return!1;b++}return b===h.t},Q=(h,L)=>{const S=h.a;let k=0;for(let b=0;b{const S=h.length,k=p===null?null:p.n;if(!L){if(k!==null&&Q(k,h))return p=k,k.r;if(p!==null&&p!==k&&Q(p,h))return p.r}let b="",M=-1,C=0,H=!1;for(let A=0;A=256&&y.shift(),y.push(T),++E>1e3&&(E=0,m=i,i=new Map)}return p!==null&&p!==T&&(p.n=T),p=T,T.r},Ye=h=>Array.isArray(h)?Y(h.slice(),!1):o($e(h,!0));return function(h,L,S){const k=arguments.length;if((k|1)===3){const C=p;if(C!==null){const H=C.n;if(H!==null&&q(H,h,L,S))return p=H,H.r;if(C!==H&&q(C,h,L,S))return C.r}return Y([h,L,S],!0)}if(k===1)return typeof h=="string"?o(h):Ye(h);const b=p;if(b!==null){const C=b.n;if(C!==null){const H=C.a;let y=0,T=!0;for(let A=0;A[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80",secondary:"*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",muted:"*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]",tinted:"*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]",outline:"*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30",ghost:"border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50",destructive:"*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30"}},defaultVariants:{variant:"default"}});function c2({variant:o="default",align:l="start",className:a,...r}){return e0.jsx("div",{"data-slot":"bubble","data-variant":o,"data-align":l,className:_t(r2({variant:o}),a),...r})}function f2({className:o,render:l,...a}){return _0({defaultTagName:"div",props:E0({className:_t("w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50",o)},a),render:l,state:{slot:"bubble-content"}})}export{c2 as B,f2 as a,i2 as b}; +import{j as e0}from"./vendor-react-j_G0Dyx0.js";import{cD as _0,bX as E0,bs as N0}from"./index-C-uFVPpg.js";const t0=48,q=(o,l=0)=>{const a=new Int32Array(o.length);for(let r=0;r{const l=new Int32Array(o.length+1);for(let a=0;a{const l=new Int32Array(o.length);let a=0;for(let r=0;r>>1^-(i&1),l[r]=a}return l},M0=384,T0=[],be=Qe(q("E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010")),B0=Qe(q(":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3")),H0="@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom",L0=(()=>{const o=be.length-1,l=new Int32Array(o);for(let i=o-1;i>=0;i--){let m=1,E=i+1;for(let p=be[i];pE?F@03263243255B:032523853:0325B:8GA032542HE?3257D>03258432585:0325B:;0328B:032"),G0=q("012123445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EJK4444::EJ4444441691;644444114244444:;L6666555555555555555999666664444444444444444444444226?6:66644M9N?D:111::::6DJ199"),U0=ae("0202002020020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200"),V0=(()=>{const o=new Int32Array(319).fill(-1),l=ae("02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222"),a=ae("02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222");for(let r=0;r{const l=o.split(" "),a=l.shift();for(let r=0;rʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ244ƸƵ222]d24242ǖǓƚÄȫ2263ȨȥȨ2222222ǣ222222222222222222ǂƽ2ƾƵ2222222422222ƜƑ22222222222222222222144Ŧţ22Ţş222222222222222222222ĸ2ı68ĦģĦɡŰ4Ġ«®ĝ822ĔđĔ2ē2222622"),P0=ae("02222222222222222222222222222222222222222222222222222222222222222203062222222222IL2200IL021042222]`222IL0gj2e50n2222U00X202[^2y0000560|{~ƒ†22‰Œ‹>22|22222222222G000q†OVI00000}š2›>40000ŒB00000I¨­000°00000000000000021Q²±00´“000000000000000000000–222›HGHa5¾222Ã6À2222ÍÐ000­°2±"),n0=new Int32Array(991),o0=new Int32Array(991),r0=new Int32Array(991);let zt="";const St=new Int32Array(1030);{const o=new Map;let l=0,a=0;for(let r=0;rF@286¦2@H2D266226FB22B2>BD\\6N22222Z222D222p"),q0=Qe(q("1::22222432:222:22:22>222222:22:2221322511111311111114")),J0=ae("2Š4A;33N=C@H4A;33N=C@<2;363@QTQʰ222ˉºŴŽ2R2=18cƴÅҜÜÛŲǝȈ:ħ25=11D3A@216Er25;11B3?<438Cn9@7=<8192>2E121@9@EHE@9>2T25511<398216=V25511<398216=„ƧNž2Đå242L222290000f22500ɛ000ǘ222"),K0=q("ij"),W0=q("—"),Z0=q("1"),$0="* ** after backdrop before details-content file first-letter first-line marker placeholder selection";var Q0={GROUP_COUNT:M0,customValidatorNames:T0,edgeStart:be,labelStart:B0,labelText:H0,edgeTarget:L0,nodeGroup:j0,nodeVlist:V0,vlistPat:R0,vlistOps:D0,vlistRef:G0,vlistGroup:U0,litAnchor:n0,litGroup:o0,litPool:r0,poolOffsets:St,poolText:zt,adjGid:X0,adjStart:q0,adjTgt:J0,patGid:K0,patTgt:W0,postfixLookupGroups:Z0,orderSensitiveModifiers:$0};const Y0="line"in new Error,X=-1,he=-1,Ct=(o,l,a)=>{let r=2166136261;for(let i=l;i{const r=a-l;let i=Math.imul(r,2654435761)^o.charCodeAt(l);if(r>3){const m=r>>2,E=r>>1;i=Math.imul(i^o.charCodeAt(l+1)<<8^o.charCodeAt(l+2)<<16^o.charCodeAt(l+m),2246822507),i=Math.imul(i^o.charCodeAt(l+E)<<8^o.charCodeAt(l+E+m)<<16^o.charCodeAt(a-3),3266489909),i^=o.charCodeAt(a-2)<<8^o.charCodeAt(a-1)<<16;for(let p=l+3,J=a-4;p>>15|0},e2=(o,l,a={})=>{const{GROUP_COUNT:r,edgeStart:i,labelStart:m,labelText:E,edgeTarget:p,nodeGroup:J,nodeVlist:Q,vlistPat:Y,vlistOps:Ye,vlistRef:h,vlistGroup:L,litAnchor:S,litGroup:k,litPool:b,poolOffsets:M,poolText:C,adjGid:H,adjStart:y,adjTgt:T,patGid:A,patTgt:I,postfixLookupGroups:ee,customValidatorNames:se,orderSensitiveModifiers:ie}=o,Ce=new Int32Array(r).fill(-1);for(let e=0;eet&&(et=t)}let He=32;for(;He<2*(1+et+A.length);)He<<=1;const tt=new Int32Array(h.length+1);for(let e=0;ent&&(nt=t);const n=C.charCodeAt(M[b[e]*2]);(n===91||n===40)&&(Nt=!1)}let ce=1;for(;ce{let d=(Ct(t,n,s)^Math.imul(e,2654435761)|0)&ce-1;const f=s-n;for(;;){const g=ot[d];if(g===-1)return-1;if(S[g]===e&&M[b[g]*2+1]===f){const z=M[b[g]*2];let v=!0;for(let c=0;c{throw new Error("cn: missing validator "+e)}),i0=/\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$/,c0=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,f0=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,d0=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;let fe=0,Re=-1,Bt=-1,ge=-1,Ie=-1;const Ht=e=>e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95,Lt=e=>/\s/.test(String.fromCharCode(e)),u0=(e,t,n)=>{if(fe=0,Re=-1,n-t<3)return;const s=e.charCodeAt(t),d=e.charCodeAt(n-1);if(s===91&&d===93)fe=1;else if(s===40&&d===41)fe=2;else return;ge=t+1,Ie=n-1;let f=t+1;if(Ht(e.charCodeAt(f))){for(f++;f{if(n-t!==s.length)return!1;for(let d=0;d!!e&&!Number.isNaN(Number(e)),g0=(e,t,n)=>{if(n-t<11||!De(e,t,t+10,"@container"))return!1;if(e.charCodeAt(t+10)===47)return n-t>=12;const s=e.charCodeAt(t+11);return s===115&&n-t>=17&&De(e,t+10,t+16,"-size/")||s===110&&n-t>=19&&De(e,t+10,t+18,"-normal/")},m0=[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2],p0="length|number|number weight|family-name|position percentage|length size bg-size|image url|shadow|length|family-name|position percentage|length size bg-size|image url|shadow|number weight".split("|").map(e=>e.split(" ")),w0=[2,3,1,0,0,0,4,5,0,0,0,0,0,1,1],v0=(e,t,n,s)=>{if(e>=10){if(e>=25)return s0[e-25](t.slice(n,s));const d=e-10;if(fe!==m0[d])return!1;if(Re>=0){for(const f of p0[d])if(De(t,Re,Bt,f))return!0;return!1}switch(w0[d]){case 0:return!1;case 1:return!0;case 2:{const f=t.slice(ge,Ie);return i0.test(f)&&!c0.test(f)}case 3:return lt(t.slice(ge,Ie));case 4:return d0.test(t.slice(ge,Ie));default:return f0.test(t.slice(ge,Ie))}}switch(e){case 0:return!0;case 1:return fe===0;case 2:return fe===1;case 3:return fe===2;case 4:return h0.test(t.slice(n,s));case 5:return lt(t.slice(n,s));case 6:{const d=t.slice(n,s);return!!d&&Number.isInteger(Number(d))}case 7:return s>n&&t.charCodeAt(s-1)===37&<(t.slice(n,s-1));case 8:return b0.test(t.slice(n,s));default:return g0(t,n,s)}},x0=new Set(typeof ie=="string"?ie.split(" "):ie),jt=(e,t,n,s,d,f)=>{const g=Ct(t,n,s)^(d?2654435769:0)|0;let z=e.get(g);if(z!==void 0)e:for(let u=0;u{const n=[];let s=0,d=0,f=0;for(let c=0;c1){const c=[];let u=[];for(const w of n)w.charCodeAt(0)===91||x0.has(w)?(u.length&&(c.push(...u.sort()),u=[]),c.push(w)):u.push(w);u.length&&c.push(...u.sort()),g=c.join(":")}const z=t?g+" !":g;let v=st.get(z);return v===void 0&&st.set(z,v=Ge++),v};let Dt=new Map,Ue=r;const A0=r+4096,k0=()=>Ue++,Gt=2097152,ze=8192,it=new Int32Array(ze),K=new Array(ze).fill(null),Ut=new Int32Array(ze),Vt=new Int32Array(ze),Ft=new Uint8Array(ze);let Ot=0;const Pt=(e,t,n,s,d,f,g,z)=>{let v=e;if(K[e]!==null)if(K[e|1]===null)v=e|1;else if((Ot++&3)===0)v=e|Ot>>2&1;else return;K[v]=t.slice(n,s),it[v]=d,Ut[v]=f,Vt[v]=g,Ft[v]=z},Xt=()=>K.fill(null);let G=256,Ve=[new Int32Array(G),new Int32Array(G),new Int32Array(G),new Int32Array(G)],[me,pe,we,Fe]=Ve,Se=new Uint8Array(G),ve=new Uint8Array(G);const C0=()=>{G*=2,Ve=Ve.map(t=>{const n=new Int32Array(G);return n.set(t),n}),[me,pe,we,Fe]=Ve;const e=new Uint8Array(G);e.set(Se),Se=e,ve=new Uint8Array(G)};let xe=64,_e=new Int32Array(xe),Ee=new Int32Array(xe);const ct=new Int32Array(r);let te=2048,qt=21,ft=new Float64Array(te),Oe=new Int32Array(te),ne=0;const dt=(e,t)=>{if(e===0&&t>>qt;for(;Oe[s]===ne;){if(ft[s]===n)return 1;s=s+1&te-1}return ft[s]=n,Oe[s]=ne,0},Pe=(e,t,n,s,d)=>{if(n-t>=2&&e.charCodeAt(t)===91&&e.charCodeAt(n-1)===93){let f=-1;for(let g=t+1;g=0&&J[s]>=0)return J[s];for(let f=d-1;f>=0;f--){const g=Ee[f];if(g>n)continue;const z=_e[f],v=n-g;if(Le[z]===1&&v>0&&v<=nt){const N=e.charCodeAt(g);if(Nt===!1||N!==91&&N!==40){const re=a0(z,e,g,n);if(re>=0)return re}}const c=Q[z];if(c<0)continue;const u=h[c],w=Y[u],_=Y[u+1];if(w===_)continue;u0(e,g,n);const B=tt[c]-w;for(let N=w;N<_;N++)if(v0(Ye[N],e,g,n))return L[B+N]}return X},Xe=e=>{const t=e.length;let n=0,s=0,d=!1;(Ge>Rt||at.size>Rt)&&(at=new Map,st=new Map,Ge=2,Xt()),Ue>A0&&(Dt=new Map,Ue=r,Xt());let f=0;for(;f=9&&c<=13||c>=160&&Lt(c)){c!==32&&(d=!0),f++;continue}const u=f;let w=0;for(;f=9&&c<=13){d=!0;break}}else if(c>=160&&Lt(c)){d=!0;break}w=Math.imul(w^c,16777619),f++}const _=f,B=_-u;n===G&&C0();const N=n++;me[N]=u,pe[N]=_,s+=B,w^=Math.imul(B,2654435761);const re=w^w>>>15|0,F=re&8190;{let x=-1;if(it[F]===re&&K[F]!==null&&K[F].length===B?x=F:it[F|1]===re&&K[F|1]!==null&&K[F|1].length===B&&(x=F|1),x>=0){const V=K[x];let Z=!0;for(let $=0;$=Ae?Te+1:Ae;let j=Wt,R=_,Be=!1,Zt=0;R>j&&e.charCodeAt(R-1)===33?(Be=!0,R--):R>j&&e.charCodeAt(j)===33&&(Be=!0,j++,Zt=1);let de=-1;gt>Wt&&(de=gt+Zt,de>=R&&(de=-1));let mt=j;R-j>1&&e.charCodeAt(j)===45&&(mt=j+1);let O=0,le=0,ke=0,$t=-1,P=0;(Q[0]>=0||Le[0]===1)&&(_e[0]=0,Ee[0]=mt,P=1);let pt=he,wt=0;for(let x=mt;x=0&&(Q[Z]>=0||Le[Z]===1)&&x+1=0)if(We=!0,D=Pe(e,j,de,pt,wt),D!==X&&D=Te?Be?1:0:jt(at,e,Ae,Te,Be?1:0,x=>y0(x,Be)),we[N]=D,Se[N]=yt,Fe[N]=xt),Pt(F,e,u,_,re,D,xt,yt)}if(n===0)return"";if(n===1)return me[0]===0&&pe[0]===t?e:e.slice(me[0],pe[0]);if(n*He>te){for(;n*He>te;)te<<=1,qt--;ft=new Float64Array(te),Oe=new Int32Array(te)}if(Ge>=Gt||Ue>=Gt)throw new Error("cn: too many distinct classes in one merge");ne=ne+1|0,ne===0&&(ct.fill(0),Oe.fill(0),ne=1);let g=!1;for(let c=n-1;c>=0;c--){const u=we[c];if(u===X){ve[c]=1;continue}const w=Fe[c];if(dt(w,u)===1){ve[c]=0,g=!0;continue}if(ve[c]=1,u=0)for(let B=y[_];B0&&(z+=" "),z+=e.slice(c,u),v=w}return z},oe=16384,W=new Int32Array(oe*2);let qe=0,U=1,Ne=Object.create(null),Jt=Object.create(null),ye=new Map,Kt=new Map,Je=0,Ke=0;const Me=()=>{qe^=oe,U=U+1|0,Ke=0},I0=e=>{let t=Ne[e];if(t!==void 0)return t;const n=It(e,0,e.length),s=(n&16383)+qe,d=W[s]===(n^U)||W[s^oe]===(n^U-1);return d&&(t=Jt[e],t!==void 0)?(Ne[e]=t,t):(t=Xe(e),d?(Ne[e]=t,++Je>je&&(Je=0,Jt=Ne,Ne=Object.create(null),Me())):(W[s]=n^U,++Ke>oe&&Me()),t)},z0=e=>{let t=ye.get(e);if(t!==void 0)return t;const n=It(e,0,e.length),s=(n&16383)+qe,d=W[s]===(n^U)||W[s^oe]===(n^U-1);return d&&(t=Kt.get(e),t!==void 0)?(ye.set(e,t),t):(t=Xe(e),d?(ye.set(e,t),++Je>je&&(Je=0,Kt=ye,ye=new Map,Me())):(W[s]=n^U,++Ke>oe&&Me()),t)},S0=e=>{const t=It(e,0,e.length),n=(t&16383)+qe;return W[n]===(t^U)||W[n^oe]===(t^U-1)?!0:(W[n]=t^U,++Ke>oe&&Me(),!1)},ut=je===0?Xe:Y0?e=>{const t=ye.get(e);return t!==void 0?t:z0(e)}:I0;return{merge:function(){return arguments.length===1&&typeof arguments[0]=="string"?ut(arguments[0]):ut(n2.apply(null,arguments))},mergeString:ut,seenBefore:je===0?()=>!1:S0,mergeUncached:Xe}},$e=(o,l)=>{if(!o)return"";if(typeof o=="string")return o;let a="";if(typeof o.length=="number"&&(!l||Array.isArray(o))){const r=o;for(let i=0;i{let a="";for(let r=0;r{const a=l===void 0?()=>!0:l.seenBefore,r=l===void 0?o:l.mergeUncached;let i=new Map,m=new Map,E=0,p=null;const J=(h,L,S,k)=>{let b=0;if(L){if(L!==h.a0)return!1;b=1}if(S){if(S!==(b===0?h.a0:h.a1))return!1;b++}if(k){if(k!==(b===0?h.a0:b===1?h.a1:h.a2))return!1;b++}return b===h.t},Q=(h,L)=>{const S=h.a;let k=0;for(let b=0;b{const S=h.length,k=p===null?null:p.n;if(!L){if(k!==null&&Q(k,h))return p=k,k.r;if(p!==null&&p!==k&&Q(p,h))return p.r}let b="",M=-1,C=0,H=!1;for(let A=0;A=256&&y.shift(),y.push(T),++E>1e3&&(E=0,m=i,i=new Map)}return p!==null&&p!==T&&(p.n=T),p=T,T.r},Ye=h=>Array.isArray(h)?Y(h.slice(),!1):o($e(h,!0));return function(h,L,S){const k=arguments.length;if((k|1)===3){const C=p;if(C!==null){const H=C.n;if(H!==null&&J(H,h,L,S))return p=H,H.r;if(C!==H&&J(C,h,L,S))return C.r}return Y([h,L,S],!0)}if(k===1)return typeof h=="string"?o(h):Ye(h);const b=p;if(b!==null){const C=b.n;if(C!==null){const H=C.a;let y=0,T=!0;for(let A=0;A[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80",secondary:"*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",muted:"*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]",tinted:"*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]",outline:"*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30",ghost:"border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50",destructive:"*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30"}},defaultVariants:{variant:"default"}});function c2({variant:o="default",align:l="start",className:a,...r}){return e0.jsx("div",{"data-slot":"bubble","data-variant":o,"data-align":l,className:_t(r2({variant:o}),a),...r})}function f2({className:o,render:l,...a}){return _0({defaultTagName:"div",props:E0({className:_t("w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50",o)},a),render:l,state:{slot:"bubble-content"}})}export{c2 as B,f2 as a,i2 as b}; diff --git a/adminui/assets/calendar-CQckEvY8.js b/adminui/assets/calendar-CO7BPWOR.js similarity index 89% rename from adminui/assets/calendar-CQckEvY8.js rename to adminui/assets/calendar-CO7BPWOR.js index 974d32c5..29548952 100644 --- a/adminui/assets/calendar-CQckEvY8.js +++ b/adminui/assets/calendar-CO7BPWOR.js @@ -1,4 +1,4 @@ -import{bp as e}from"./index-DFelzBez.js";/** +import{bq as e}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/calendar-CgYg3JyR.js b/adminui/assets/calendar-eg-EvdVA.js similarity index 99% rename from adminui/assets/calendar-CgYg3JyR.js rename to adminui/assets/calendar-eg-EvdVA.js index e05ee8a1..6159e723 100644 --- a/adminui/assets/calendar-CgYg3JyR.js +++ b/adminui/assets/calendar-eg-EvdVA.js @@ -1 +1 @@ -import{R as y,f as E,j as se}from"./vendor-react-j_G0Dyx0.js";import{bl as T,r as pn,q as xn,bi as it,n as Pn}from"./index-DFelzBez.js";import{C as Tn}from"./chevron-left-CbJIXgY2.js";const Ot=6048e5,Yn=864e5,ut=Symbol.for("constructDateFrom");function q(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 q(t||e,e)}function Wt(e,t,n){const r=F(e,n==null?void 0:n.in);return isNaN(t)?q(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 q(e,NaN);if(!t)return r;const a=r.getDate(),o=q(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=q.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=q(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=q.bind(null,a));const o=F(a,r);(!n||n{!r&&typeof a=="object"&&(r=q.bind(null,a));const o=F(a,r);(!n||n>o||isNaN(+o))&&(n=o)}),q(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 qn(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 zn(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 An(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(q(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(q(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=q((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=q((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=q((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(!qn(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:qr(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 qr(e){const t=e.match(Ir);return t?t[1].replace(Hr,"'"):e}function zr(e,t){const n=F(e,t==null?void 0:t.in),r=n.getFullYear(),a=n.getMonth(),o=q(n,0);return o.setFullYear(r,a+1,0),o.setHours(0,0,0,0),o.getDate()}function Ar(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=q(e,0);s.setFullYear(a,t,15),s.setHours(0,0,0,0);const i=zr(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)?q(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 Ae={},Oe={};function ie(e,t){try{const r=(Ae[e]||(Ae[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 z=new Date(+e),Q=s-a;Q&&z.setUTCMinutes(z.getUTCMinutes()+Q);const j=ie(e.timeZone,z);(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),z=O-B;z&&g<0&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+z)}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 A extends re{static tz(t,...n){return n.length?new A(...n,t):new A(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 A(+this,t)}[Symbol.for("constructDateFrom")](t){return new A(+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 A.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 A(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):An(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):zn(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):Ar(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 qa(e){return y.createElement("div",{...e})}function za(e){return y.createElement("div",{...e})}function Aa(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:qa,Footer:za,Month:Aa,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 qt(e){return!!(e&&typeof e=="object"&&"dayOfWeek"in e)}function zt(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(zt(i,n))return i.some(u=>a(e,u));if(_e(i))return ue(i,e,!1,n);if(qt(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)),z=!!(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),z&&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 At(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:At,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(At,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 A(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(A.tz(e)),newDate:(u,c,d)=>new A(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 A(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 A(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 A(c.getFullYear(),0,1,12,0,0,e);for(;h.getFullYear()<=d.getFullYear();)l.push(new A(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 z=Ge(M);z&&z.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),z=new Ht(Y,v,r);return B?B.days.push(z):S.push(new Ea(I,[z])),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 zo(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=qo(S),I=Eo(S),B=$o(i,n,e,t),z=Ho(i,r,e,t);return{months:S,weeks:Y,days:I,previousMonth:B,nextMonth:z}},[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 Ao(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=Ao(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):zt(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:qt(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 A&&e.timeZone===t?e:new A(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:z,formatWeekdayName:Q,formatYearDropdown:j}=a,R=zo(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"},z()),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:qe,to:ze}=pe;x[J.range_start]=!!(qe&&ze&&s.isSameDay(L,qe)),x[J.range_end]=!!(qe&&ze&&s.isSameDay(L,ze)),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{bm as T,r as pn,q as xn,bj as it,n as Pn}from"./index-C-uFVPpg.js";import{C as Tn}from"./chevron-left-C_tZtLI6.js";const Ot=6048e5,Yn=864e5,ut=Symbol.for("constructDateFrom");function q(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 q(t||e,e)}function Wt(e,t,n){const r=F(e,n==null?void 0:n.in);return isNaN(t)?q(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 q(e,NaN);if(!t)return r;const a=r.getDate(),o=q(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=q.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=q(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=q.bind(null,a));const o=F(a,r);(!n||n{!r&&typeof a=="object"&&(r=q.bind(null,a));const o=F(a,r);(!n||n>o||isNaN(+o))&&(n=o)}),q(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 qn(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 zn(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 An(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(q(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(q(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=q((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=q((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=q((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(!qn(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:qr(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 qr(e){const t=e.match(Ir);return t?t[1].replace(Hr,"'"):e}function zr(e,t){const n=F(e,t==null?void 0:t.in),r=n.getFullYear(),a=n.getMonth(),o=q(n,0);return o.setFullYear(r,a+1,0),o.setHours(0,0,0,0),o.getDate()}function Ar(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=q(e,0);s.setFullYear(a,t,15),s.setHours(0,0,0,0);const i=zr(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)?q(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 Ae={},Oe={};function ie(e,t){try{const r=(Ae[e]||(Ae[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 z=new Date(+e),Q=s-a;Q&&z.setUTCMinutes(z.getUTCMinutes()+Q);const j=ie(e.timeZone,z);(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),z=O-B;z&&g<0&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+z)}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 A extends re{static tz(t,...n){return n.length?new A(...n,t):new A(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 A(+this,t)}[Symbol.for("constructDateFrom")](t){return new A(+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 A.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 A(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):An(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):zn(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):Ar(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 qa(e){return y.createElement("div",{...e})}function za(e){return y.createElement("div",{...e})}function Aa(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:qa,Footer:za,Month:Aa,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 qt(e){return!!(e&&typeof e=="object"&&"dayOfWeek"in e)}function zt(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(zt(i,n))return i.some(u=>a(e,u));if(_e(i))return ue(i,e,!1,n);if(qt(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)),z=!!(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),z&&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 At(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:At,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(At,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 A(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(A.tz(e)),newDate:(u,c,d)=>new A(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 A(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 A(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 A(c.getFullYear(),0,1,12,0,0,e);for(;h.getFullYear()<=d.getFullYear();)l.push(new A(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 z=Ge(M);z&&z.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),z=new Ht(Y,v,r);return B?B.days.push(z):S.push(new Ea(I,[z])),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 zo(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=qo(S),I=Eo(S),B=$o(i,n,e,t),z=Ho(i,r,e,t);return{months:S,weeks:Y,days:I,previousMonth:B,nextMonth:z}},[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 Ao(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=Ao(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):zt(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:qt(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 A&&e.timeZone===t?e:new A(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:z,formatWeekdayName:Q,formatYearDropdown:j}=a,R=zo(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"},z()),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:qe,to:ze}=pe;x[J.range_start]=!!(qe&&ze&&s.isSameDay(L,qe)),x[J.range_end]=!!(qe&&ze&&s.isSameDay(L,ze)),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/card-D3QxRGt-.js b/adminui/assets/card-BBIqLCR8.js similarity index 91% rename from adminui/assets/card-D3QxRGt-.js rename to adminui/assets/card-BBIqLCR8.js index 396b2b65..cb68fd7e 100644 --- a/adminui/assets/card-D3QxRGt-.js +++ b/adminui/assets/card-BBIqLCR8.js @@ -1 +1 @@ -import{j as d}from"./vendor-react-j_G0Dyx0.js";import{bl as r}from"./index-DFelzBez.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{bm as r}from"./index-C-uFVPpg.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-XBjS-cZ6.js b/adminui/assets/categories-GpkyeRPK.js similarity index 84% rename from adminui/assets/categories-XBjS-cZ6.js rename to adminui/assets/categories-GpkyeRPK.js index d1dfe026..520121aa 100644 --- a/adminui/assets/categories-XBjS-cZ6.js +++ b/adminui/assets/categories-GpkyeRPK.js @@ -1,4 +1,4 @@ -import{f as i,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as Ue,cA as Ve,cz as Ye,n as h,aT as $e,a7 as B,aL as Je,aM as We,aP as Pe,aQ as Ae,aN as Fe,c9 as C,aE as L,bk as E,r as Xe,T as Ze,_ as es,U as ss,V as Q,q as ts}from"./index-DFelzBez.js";import{u as H}from"./useMutation-DgRiHz67.js";import{I as p}from"./input-Bx5u8hTS.js";import{L as o}from"./label-DeKRRvpz.js";import{T as K}from"./textarea-Daa6n4S-.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-B-lBTnCF.js";import{a as ms,f as gs,C as Re}from"./category-tree-select-T_ffRVAe.js";import{P}from"./plus-DK-V8p7I.js";import{T as us}from"./tree-Da9oQw3-.js";import{P as Le}from"./pencil-BgXbFsNu.js";import{T as Qe}from"./trash-2-DqWZBWAo.js";import{F as xs}from"./folder-open-DCsNiQiU.js";import{F as hs}from"./file-CHesjbVs.js";import{E as ps}from"./ellipsis-vertical-UHYLUh-c.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./vendor-md-editor-vOqM56Ks.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(Q,{onClick:()=>m(r.data.id),children:[e.jsx(P,{className:"size-4 me-2"}),g.addChild]}),e.jsxs(Q,{onClick:()=>S(r.data.id),children:[e.jsx(Le,{className:"size-4 me-2"}),g.edit]}),e.jsxs(Q,{className:"text-destructive",onClick:()=>N(r.data.id),children:[e.jsx(Qe,{className:"size-4 me-2"}),g.delete]})]})]})]})}function qe({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(K,{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(K,{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(K,{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 Rs(){var ze,Ee;const{t}=Ue(),r=Ve(),[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(""),[V,Y]=i.useState(0),[$,J]=i.useState(null),[W,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=Ye({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=H({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 L?s.message:t("categories.failedToUpdate"))}}),R=H({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 L?s.message:t("categories.failedToCreate"))}}),G=H({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 L?s.message:t("categories.failedToDelete"))}});function ke(s){const a=s??n;a&&(N("edit"),I(a.name),v(a.slug),U(a.description??""),Y(Number(a.sort_order)),J(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]),q=T?T.children.length>0:!1,He=(T==null?void 0:T.children.length)??0,Me=i.useCallback(s=>{f(a=>a===s?a:s)},[]),Ke=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($e,{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(Le,{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(Qe,{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{cK as Ue,cB as Ve,cA as Ye,n as h,aU as $e,a7 as H,aM as Je,aN as We,aQ as Pe,aR as Ae,aO as Fe,ca as C,aE as Q,bl as E,r as Xe,T as Ze,_ as es,U as ss,V as K,q as ts}from"./index-C-uFVPpg.js";import{u as L}from"./useMutation-BlIm5cor.js";import{I as p}from"./input-Bp1SimRr.js";import{L as o}from"./label-DiZ0cGhf.js";import{T as B}from"./textarea-BhaIg3vS.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-C8VouOFc.js";import{a as ms,f as gs,C as Re}from"./category-tree-select-BQ9oz5Sd.js";import{P}from"./plus-FYsVFl-s.js";import{T as us}from"./tree-DGdzL6oK.js";import{P as Qe}from"./pencil-xelQXmMG.js";import{T as Ke}from"./trash-2-BZ2bkzqQ.js";import{F as xs}from"./folder-open-CRex8He5.js";import{F as hs}from"./file-DTh4jxeH.js";import{E as ps}from"./ellipsis-vertical-B-dHvJs4.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./vendor-md-editor-vOqM56Ks.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(H,{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 qe({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(B,{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(B,{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(B,{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 Rs(){var ze,Ee;const{t}=Ue(),r=Ve(),[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(""),[V,Y]=i.useState(0),[$,J]=i.useState(null),[W,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=Ye({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=L({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=L({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=L({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??""),Y(Number(a.sort_order)),J(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]),q=T?T.children.length>0:!1,Le=(T==null?void 0:T.children.length)??0,Me=i.useCallback(s=>{f(a=>a===s?a:s)},[]),Be=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($e,{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(H,{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(He=>He.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(H,{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; } @@ -6,4 +6,4 @@ import{f as i,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as Ue,cA as Ve,c from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } } - `}),e.jsx(Je,{open:w,onOpenChange:d,children:e.jsx(We,{side:"right",className:"sm:max-w-md overflow-y-auto",children:S==="create"?e.jsxs(e.Fragment,{children:[e.jsxs(Pe,{children:[e.jsx(Ae,{children:t("categories.newCategory")}),e.jsx(Fe,{children:t("categories.optionalDesc")})]}),e.jsxs("div",{className:"px-4 pb-6 space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.parent")}),e.jsx(Re,{tree:D,selectedId:pe,onSelect:s=>je(s),noParentLabel:t("categories.noParent")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(o,{children:[t("common.name")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{value:A,onChange:s=>ce(s.target.value),placeholder:t("categories.categoryName")})]}),e.jsx(qe,{slug:de,setSlug:me,desc:ge,setDesc:ue,coverImage:ve,setCoverImage:fe,metaTitle:Ne,setMetaTitle:ye,metaDesc:be,setMetaDesc:_e,ogTitle:Ce,setOgTitle:we,ogDesc:Se,setOgDesc:De,ogImage:Te,setOgImage:Oe,t}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.sortOrder")}),e.jsx(p,{type:"number",value:xe,onChange:s=>he(Number(s.target.value))})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsx(h,{onClick:()=>R.mutate({name:A,slug:de||void 0,description:ge||void 0,sort_order:xe||void 0,parent_id:pe??void 0,cover_image:ve||void 0,meta_title:Ne||void 0,meta_description:be||void 0,og_title:Ce||void 0,og_description:Se||void 0,og_image:Te||void 0}),disabled:!A.trim()||Ke,children:R.isPending?t("common.creating"):t("common.create")}),e.jsx(h,{variant:"outline",onClick:()=>d(!1),children:t("common.cancel")})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs(Pe,{children:[e.jsx(Ae,{children:t("categories.editCategory")}),e.jsx(Fe,{children:j})]}),e.jsxs("div",{className:"px-4 pb-6 space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.parent")}),e.jsx(Re,{tree:D,selectedId:$,excludeId:n==null?void 0:n.id,onSelect:s=>J(s),noParentLabel:t("categories.noParent")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(o,{children:[t("common.name")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{value:j,onChange:s=>I(s.target.value)})]}),e.jsx(qe,{slug:k,setSlug:v,desc:l,setDesc:U,coverImage:W,setCoverImage:X,metaTitle:Z,setMetaTitle:ee,metaDesc:se,setMetaDesc:te,ogTitle:ae,setOgTitle:ie,ogDesc:re,setOgDesc:ne,ogImage:le,setOgImage:oe,t}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.sortOrder")}),e.jsx(p,{type:"number",value:V,onChange:s=>Y(Number(s.target.value))})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsx(h,{onClick:()=>M.mutate({id:n.id,data:{name:j,slug:k||void 0,description:l||void 0,sort_order:V,parent_id:$??void 0,cover_image:W||void 0,meta_title:Z||void 0,meta_description:se||void 0,og_title:ae||void 0,og_description:re||void 0,og_image:le||void 0}}),disabled:M.isPending,children:M.isPending?t("common.saving"):t("common.save")}),e.jsx(h,{variant:"outline",onClick:()=>d(!1),children:t("common.cancel")})]})]})]})})}),e.jsx(as,{open:!!m,onOpenChange:s=>{s||g(null)},children:e.jsxs(is,{children:[e.jsxs(rs,{children:[e.jsx(ns,{children:t("categories.confirmDeleteTitle")}),e.jsx(ls,{children:q?t("categories.cannotDeleteHasChildren",{count:He}):t("categories.confirmDelete")})]}),e.jsxs(os,{children:[e.jsx(cs,{children:t(q?"common.ok":"common.cancel")}),!q&&e.jsx(ds,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{m&&(G.mutate(m),g(null))},children:t("common.delete")})]})]})})]})}export{Rs as default}; + `}),e.jsx(Je,{open:w,onOpenChange:d,children:e.jsx(We,{side:"right",className:"sm:max-w-md overflow-y-auto",children:S==="create"?e.jsxs(e.Fragment,{children:[e.jsxs(Pe,{children:[e.jsx(Ae,{children:t("categories.newCategory")}),e.jsx(Fe,{children:t("categories.optionalDesc")})]}),e.jsxs("div",{className:"px-4 pb-6 space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.parent")}),e.jsx(Re,{tree:D,selectedId:pe,onSelect:s=>je(s),noParentLabel:t("categories.noParent")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(o,{children:[t("common.name")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{value:A,onChange:s=>ce(s.target.value),placeholder:t("categories.categoryName")})]}),e.jsx(qe,{slug:de,setSlug:me,desc:ge,setDesc:ue,coverImage:ve,setCoverImage:fe,metaTitle:Ne,setMetaTitle:ye,metaDesc:be,setMetaDesc:_e,ogTitle:Ce,setOgTitle:we,ogDesc:Se,setOgDesc:De,ogImage:Te,setOgImage:Oe,t}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.sortOrder")}),e.jsx(p,{type:"number",value:xe,onChange:s=>he(Number(s.target.value))})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsx(h,{onClick:()=>R.mutate({name:A,slug:de||void 0,description:ge||void 0,sort_order:xe||void 0,parent_id:pe??void 0,cover_image:ve||void 0,meta_title:Ne||void 0,meta_description:be||void 0,og_title:Ce||void 0,og_description:Se||void 0,og_image:Te||void 0}),disabled:!A.trim()||Be,children:R.isPending?t("common.creating"):t("common.create")}),e.jsx(h,{variant:"outline",onClick:()=>d(!1),children:t("common.cancel")})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs(Pe,{children:[e.jsx(Ae,{children:t("categories.editCategory")}),e.jsx(Fe,{children:j})]}),e.jsxs("div",{className:"px-4 pb-6 space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.parent")}),e.jsx(Re,{tree:D,selectedId:$,excludeId:n==null?void 0:n.id,onSelect:s=>J(s),noParentLabel:t("categories.noParent")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(o,{children:[t("common.name")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{value:j,onChange:s=>I(s.target.value)})]}),e.jsx(qe,{slug:k,setSlug:v,desc:l,setDesc:U,coverImage:W,setCoverImage:X,metaTitle:Z,setMetaTitle:ee,metaDesc:se,setMetaDesc:te,ogTitle:ae,setOgTitle:ie,ogDesc:re,setOgDesc:ne,ogImage:le,setOgImage:oe,t}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{children:t("categories.sortOrder")}),e.jsx(p,{type:"number",value:V,onChange:s=>Y(Number(s.target.value))})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsx(h,{onClick:()=>M.mutate({id:n.id,data:{name:j,slug:k||void 0,description:l||void 0,sort_order:V,parent_id:$??void 0,cover_image:W||void 0,meta_title:Z||void 0,meta_description:se||void 0,og_title:ae||void 0,og_description:re||void 0,og_image:le||void 0}}),disabled:M.isPending,children:M.isPending?t("common.saving"):t("common.save")}),e.jsx(h,{variant:"outline",onClick:()=>d(!1),children:t("common.cancel")})]})]})]})})}),e.jsx(as,{open:!!m,onOpenChange:s=>{s||g(null)},children:e.jsxs(is,{children:[e.jsxs(rs,{children:[e.jsx(ns,{children:t("categories.confirmDeleteTitle")}),e.jsx(ls,{children:q?t("categories.cannotDeleteHasChildren",{count:Le}):t("categories.confirmDelete")})]}),e.jsxs(os,{children:[e.jsx(cs,{children:t(q?"common.ok":"common.cancel")}),!q&&e.jsx(ds,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{m&&(G.mutate(m),g(null))},children:t("common.delete")})]})]})})]})}export{Rs as default}; diff --git a/adminui/assets/category-tree-select-T_ffRVAe.js b/adminui/assets/category-tree-select-BQ9oz5Sd.js similarity index 95% rename from adminui/assets/category-tree-select-T_ffRVAe.js rename to adminui/assets/category-tree-select-BQ9oz5Sd.js index c4be7440..4e066ed5 100644 --- a/adminui/assets/category-tree-select-T_ffRVAe.js +++ b/adminui/assets/category-tree-select-BQ9oz5Sd.js @@ -1 +1 @@ -import{j as n,f as x}from"./vendor-react-j_G0Dyx0.js";import{bd as F,q as O,aI as E,r as R,a7 as L}from"./index-DFelzBez.js";import{F as $}from"./folder-open-DCsNiQiU.js";import{F as P}from"./file-CHesjbVs.js";function J(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 K(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 Q(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(C,{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:k(l,r)).map(l=>{const d=l.children.length>0,h=a.has(l.id);return n.jsx(C,{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 C({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 k(t,e){if(e.has(t.id))return!0;for(const a of t.children)if(k(a,e))return!0;return!1}export{Q as C,J as a,K as b,D as f}; +import{j as n,f as x}from"./vendor-react-j_G0Dyx0.js";import{be as F,q as O,aJ as E,r as R,a7 as L}from"./index-C-uFVPpg.js";import{F as $}from"./folder-open-CRex8He5.js";import{F as P}from"./file-DTh4jxeH.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 K(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 Q(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(C,{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:k(l,r)).map(l=>{const d=l.children.length>0,h=a.has(l.id);return n.jsx(C,{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 C({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 k(t,e){if(e.has(t.id))return!0;for(const a of t.children)if(k(a,e))return!0;return!1}export{Q as C,G as a,K as b,D as f}; diff --git a/adminui/assets/channel-form-Bdz676vK.js b/adminui/assets/channel-form-DT4ddSPj.js similarity index 90% rename from adminui/assets/channel-form-Bdz676vK.js rename to adminui/assets/channel-form-DT4ddSPj.js index f4f8837b..abb240ae 100644 --- a/adminui/assets/channel-form-Bdz676vK.js +++ b/adminui/assets/channel-form-DT4ddSPj.js @@ -1,4 +1,4 @@ -import{k as Q,f as U,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as G,cF as W,cA as X,cz as Z,c9 as k,n as J,aE as Y,bk as P,bl as ee}from"./index-DFelzBez.js";import{u as q}from"./useMutation-DgRiHz67.js";import{C as _,c as v,d as j,a as b}from"./card-D3QxRGt-.js";import{I as f}from"./input-Bx5u8hTS.js";import{L as r}from"./label-DeKRRvpz.js";import{S as $,e as O,f as w,a as A,c as I}from"./select-Dc4_9PNt.js";import{S as ne}from"./switch-DLTIF0BW.js";import{C as ie}from"./code-editor-DZgggbjW.js";import{S as ae}from"./save-Dw1cTtUv.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./vendor-md-editor-vOqM56Ks.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"],z=["raw","json-rpc","dispatch","pb-frame"],B=["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{cK as z,cG as W,cB as X,cA as Z,ca as k,n as Y,aE as q,bl as P,bm as ee}from"./index-C-uFVPpg.js";import{u as J}from"./useMutation-BlIm5cor.js";import{C as _,c as v,d as j,a as b}from"./card-BBIqLCR8.js";import{I as f}from"./input-Bp1SimRr.js";import{L as r}from"./label-DiZ0cGhf.js";import{S as $,e as O,f as w,a as A,c as I}from"./select-DJZwiot8.js";import{S as ne}from"./switch-DoovYEIg.js";import{C as ie}from"./code-editor-DjTus6iJ.js";import{S as ae}from"./save-Bhy1j3dM.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./vendor-md-editor-vOqM56Ks.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"],G=["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}=z(),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" @@ -26,4 +26,4 @@ import{k as Q,f as U,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as G,cF a }`,routeExtra:`{ "events": ["integration.received"], "retry_mode": "internal" -}`};function re(i){return{channel_key:i.channelKey,app_id:"",display_name:i.displayName,provider:i.provider,mode:i.mode,transport:i.transport,framing:i.framing,endpoint:i.endpoint,target_type:i.targetType,verify_kind:i.verifyKind,verify_config:i.verifyConfig??"",credentials:i.credentials??"",mapping:i.mapping??"",pull_config:i.pullConfig??"",stream_config:i.streamConfig??"",route_extra:"",redelivery_max:"5",enabled:!0}}function Ke(){const{t:i}=G(),m=W(),h=X(),{id:u}=Q(),o=!!u,[a,y]=U.useState(te),g=Z({queryKey:["admin-integration-channel",u],queryFn:()=>P.admin.integration.getChannel(u),enabled:o});U.useEffect(()=>{if(!g.data)return;const n=g.data;y({channel_key:n.channel_key,app_id:n.app_id??"",display_name:n.display_name,provider:n.provider,mode:n.mode,transport:n.transport,framing:n.framing,endpoint:n.endpoint??"",target_type:n.target_type,verify_kind:n.verify_kind,verify_config:n.verify_config?JSON.stringify(n.verify_config,null,2):"",credentials:"",mapping:n.mapping?JSON.stringify(n.mapping,null,2):"",pull_config:n.pull_config?JSON.stringify(n.pull_config,null,2):"",stream_config:n.stream_config?JSON.stringify(n.stream_config,null,2):"",route_extra:n.route_extra?JSON.stringify(n.route_extra,null,2):"",redelivery_max:String(n.redelivery_max),enabled:n.enabled})},[g.data]);const s=(n,c)=>y(p=>({...p,[n]:c})),R=q({mutationFn:n=>P.admin.integration.createChannel(n),onSuccess:()=>{k.success(i("integration.channelCreated")),h.invalidateQueries({queryKey:["admin-integration-channels"]}),m.push("/channels")},onError:n=>k.error(n instanceof Y?n.message:i("integration.failedToCreate"))}),D=q({mutationFn:n=>P.admin.integration.updateChannel(u,n),onSuccess:()=>{k.success(i("integration.channelUpdated")),h.invalidateQueries({queryKey:["admin-integration-channels"]}),h.invalidateQueries({queryKey:["admin-integration-channel",u]}),m.push("/channels")},onError:n=>k.error(n instanceof Y?n.message:i("integration.failedToUpdate"))});function V(){const n=C(a.verify_config,i);if(n===null)return;const c=C(a.credentials,i);if(c===null)return;const p=C(a.mapping,i);if(p===null)return;const K=C(a.pull_config,i);if(K===null)return;const S=C(a.stream_config,i);if(S===null)return;const E=C(a.route_extra,i);if(E!==null)if(o){const l={display_name:a.display_name||a.channel_key,endpoint:a.endpoint||null,verify_kind:a.verify_kind,framing:a.framing,redelivery_max:Number(a.redelivery_max)||5,enabled:a.enabled};n!==void 0&&(l.verify_config=n),c!==void 0&&(l.credentials=c),p!==void 0&&(l.mapping=p),a.mode==="pull"&&K!==void 0&&(l.pull_config=K),a.mode==="stream"&&S!==void 0&&(l.stream_config=S),E!==void 0&&(l.route_extra=E),D.mutate(l)}else{const l={channel_key:a.channel_key,provider:a.provider,display_name:a.display_name||a.channel_key,mode:a.mode,transport:a.transport,framing:a.framing,codec:a.framing==="mime"?"email":"json",endpoint:a.endpoint||null,verify_kind:a.verify_kind,target_type:a.target_type,redelivery_max:Number(a.redelivery_max)||5,enabled:a.enabled};a.app_id.trim()&&(l.app_id=a.app_id.trim()),n!==void 0&&(l.verify_config=n),c!==void 0&&(l.credentials=c),p!==void 0&&(l.mapping=p),a.mode==="pull"&&(l.pull_semantics=a.transport==="imap"?"mark-read":"cursor",K!==void 0&&(l.pull_config=K)),a.mode==="stream"&&S!==void 0&&(l.stream_config=S),E!==void 0&&(l.route_extra=E),R.mutate(l)}}if(o&&g.isLoading)return e.jsx("div",{className:"flex min-h-[40vh] items-center justify-center",children:e.jsx("span",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-transparent"})});const H=R.isPending||D.isPending,F=L[a.mode]??[];return e.jsxs("div",{className:"space-y-6",children:[!o&&e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.presetTitle")})}),e.jsxs(b,{className:"space-y-2",children:[e.jsxs($,{value:void 0,onValueChange:n=>{const c=T.find(p=>p.id===n);c&&(y(re(c)),k.info(i("integration.presetApplied")))},items:Object.fromEntries(T.map(n=>[n.id,i(n.labelKey)])),children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{placeholder:i("integration.presetPlaceholder")})}),e.jsx(A,{children:T.map(n=>e.jsx(I,{value:n.id,children:e.jsxs("div",{className:"flex flex-col items-start py-0.5",children:[e.jsx("span",{children:i(n.labelKey)}),e.jsx("span",{className:"text-xs text-muted-foreground",children:i(n.descKey)})]})},n.id))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i("integration.presetHint")})]})]}),e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.basicInfo")})}),e.jsxs(b,{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(r,{children:[i("integration.channelKey")," *"]}),e.jsx(f,{value:a.channel_key,onChange:n=>s("channel_key",n.target.value),disabled:o,placeholder:"github-issues"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["/ingress/",a.channel_key||"{key}"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.displayName")}),e.jsx(f,{value:a.display_name,onChange:n=>s("display_name",n.target.value)})]})]}),!o&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.ownerApp")}),e.jsx(f,{value:a.app_id,onChange:n=>s("app_id",n.target.value),placeholder:"chat"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i("integration.ownerAppHint")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.provider")}),e.jsx(f,{value:a.provider,onChange:n=>s("provider",n.target.value),disabled:o,placeholder:"generic-hmac"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.targetType")," *"]}),e.jsx(f,{value:a.target_type,onChange:n=>s("target_type",n.target.value),disabled:o,placeholder:"conversation_message"})]})]})]})]}),e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.stack")})}),e.jsxs(b,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.mode")," *"]}),e.jsxs($,{value:a.mode,onValueChange:n=>{const c=n??"push";s("mode",c);const p=L[c]??[];p.includes(a.transport)||s("transport",p[0]??"")},items:Object.fromEntries(M.map(n=>[n,n])),disabled:o,children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:M.map(n=>e.jsx(I,{value:n,children:n},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.transport")," *"]}),e.jsxs($,{value:a.transport,onValueChange:n=>s("transport",n??""),items:Object.fromEntries(F.map(n=>[n,n])),disabled:o,children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:F.map(n=>e.jsx(I,{value:n,children:n},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.framing")," *"]}),e.jsxs($,{value:a.framing,onValueChange:n=>s("framing",n??"raw"),items:Object.fromEntries(z.map(n=>[n,n])),children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:z.map(n=>e.jsx(I,{value:n,children:n},n))})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.endpoint")}),e.jsx(f,{value:a.endpoint,onChange:n=>s("endpoint",n.target.value),placeholder:a.transport==="imap"?"imaps://imap.example.com:993":a.mode==="listen"?"0.0.0.0:9321":"https://… / wss://…"})]}),a.mode==="pull"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.pullConfig"),a.transport==="imap"?"":" *"]}),a.transport==="imap"?e.jsx(x,{children:"folder · ssl · batch · idle_secs(均可选,IMAP 无本地 cursor)"}):e.jsx(x,{children:"list_path · id_field · param · page_size"}),e.jsx(N,{value:a.pull_config,onChange:n=>s("pull_config",n),placeholder:a.transport==="imap"?d.imapPullConfig:d.pullConfig,example:a.transport==="imap"?d.imapPullConfig:d.pullConfig})]}),a.mode==="stream"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.streamConfig")," *"]}),e.jsx(x,{children:"dispatch: pre_connect · events · ack_reply | pb-frame: pre_connect · pb_frame"}),e.jsx(N,{value:a.stream_config,onChange:n=>s("stream_config",n),placeholder:d.streamConfig,example:d.streamConfig,minHeight:"180px"})]})]})]}),e.jsxs("div",{className:"grid gap-6 xl:grid-cols-2 items-stretch",children:[e.jsxs(_,{className:"flex flex-col",children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.trustSection")})}),e.jsxs(b,{className:"flex flex-col gap-4 flex-1",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.verifyKind")," *"]}),e.jsxs($,{value:a.verify_kind,onValueChange:n=>s("verify_kind",n??"none"),items:Object.fromEntries(B.map(n=>[n,n])),children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:B.map(n=>e.jsx(I,{value:n,children:n},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.redeliveryMax")}),e.jsx(f,{type:"number",min:0,value:a.redelivery_max,onChange:n=>s("redelivery_max",n.target.value)})]})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(r,{children:i("integration.verifyConfig")}),e.jsx(x,{children:"header · scheme · encoding (hex | base64 | base64url)"}),e.jsx(N,{value:a.verify_config,onChange:n=>s("verify_config",n),placeholder:d.verifyConfig,example:d.verifyConfig,minHeight:"100px",fill:!0})]}),e.jsxs("div",{className:"flex flex-col gap-2 flex-1 min-h-0",children:[e.jsx(r,{children:i("integration.credentials")}),e.jsxs(x,{children:["hmac → secret · oauth → grant",""]}),e.jsx(N,{value:a.credentials,onChange:n=>s("credentials",n),placeholder:o?i("integration.credentialsKeepHint"):d.credentials,example:d.credentials,minHeight:"80px",fill:!0}),o&&e.jsx("p",{className:"text-xs text-muted-foreground",children:i("integration.credentialsKeepHint")})]})]})]}),e.jsxs(_,{className:"flex flex-col",children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.normalizeSection")})}),e.jsxs(b,{className:"flex flex-col gap-2 flex-1 min-h-0",children:[e.jsx(r,{children:i("integration.mapping")}),e.jsx(x,{children:"external_id · sender · kind · payload.* — pipes: as_json · default · as_number · as_datetime — 邮件: $._headers.* 可取任意原始头"}),e.jsx(N,{value:a.mapping,onChange:n=>s("mapping",n),placeholder:d.mapping,example:d.mapping,minHeight:"300px",fill:!0})]})]})]}),e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.routingSection")})}),e.jsxs(b,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.routeExtra")}),e.jsx(x,{children:"events · jobs · retry_mode · autoreply"}),e.jsx(N,{value:a.route_extra,onChange:n=>s("route_extra",n),placeholder:d.routeExtra,example:d.routeExtra,minHeight:"100px"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ne,{checked:a.enabled,onCheckedChange:n=>s("enabled",n)}),e.jsx(r,{className:"cursor-pointer",children:a.enabled?i("common.enabled"):i("common.disabled")})]})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pb-4",children:[e.jsx(J,{variant:"outline",onClick:()=>m.push("/channels"),children:i("common.cancel")}),e.jsxs(J,{onClick:V,disabled:H||!a.channel_key||!a.target_type,children:[e.jsx(ae,{className:"size-4 me-2"}),i(H?"common.saving":"common.save")]})]})]})}export{Ke as default}; +}`};function re(i){return{channel_key:i.channelKey,app_id:"",display_name:i.displayName,provider:i.provider,mode:i.mode,transport:i.transport,framing:i.framing,endpoint:i.endpoint,target_type:i.targetType,verify_kind:i.verifyKind,verify_config:i.verifyConfig??"",credentials:i.credentials??"",mapping:i.mapping??"",pull_config:i.pullConfig??"",stream_config:i.streamConfig??"",route_extra:"",redelivery_max:"5",enabled:!0}}function Ke(){const{t:i}=z(),m=W(),h=X(),{id:u}=Q(),o=!!u,[a,y]=F.useState(te),g=Z({queryKey:["admin-integration-channel",u],queryFn:()=>P.admin.integration.getChannel(u),enabled:o});F.useEffect(()=>{if(!g.data)return;const n=g.data;y({channel_key:n.channel_key,app_id:n.app_id??"",display_name:n.display_name,provider:n.provider,mode:n.mode,transport:n.transport,framing:n.framing,endpoint:n.endpoint??"",target_type:n.target_type,verify_kind:n.verify_kind,verify_config:n.verify_config?JSON.stringify(n.verify_config,null,2):"",credentials:"",mapping:n.mapping?JSON.stringify(n.mapping,null,2):"",pull_config:n.pull_config?JSON.stringify(n.pull_config,null,2):"",stream_config:n.stream_config?JSON.stringify(n.stream_config,null,2):"",route_extra:n.route_extra?JSON.stringify(n.route_extra,null,2):"",redelivery_max:String(n.redelivery_max),enabled:n.enabled})},[g.data]);const s=(n,c)=>y(p=>({...p,[n]:c})),R=J({mutationFn:n=>P.admin.integration.createChannel(n),onSuccess:()=>{k.success(i("integration.channelCreated")),h.invalidateQueries({queryKey:["admin-integration-channels"]}),m.push("/channels")},onError:n=>k.error(n instanceof q?n.message:i("integration.failedToCreate"))}),D=J({mutationFn:n=>P.admin.integration.updateChannel(u,n),onSuccess:()=>{k.success(i("integration.channelUpdated")),h.invalidateQueries({queryKey:["admin-integration-channels"]}),h.invalidateQueries({queryKey:["admin-integration-channel",u]}),m.push("/channels")},onError:n=>k.error(n instanceof q?n.message:i("integration.failedToUpdate"))});function V(){const n=C(a.verify_config,i);if(n===null)return;const c=C(a.credentials,i);if(c===null)return;const p=C(a.mapping,i);if(p===null)return;const K=C(a.pull_config,i);if(K===null)return;const S=C(a.stream_config,i);if(S===null)return;const E=C(a.route_extra,i);if(E!==null)if(o){const l={display_name:a.display_name||a.channel_key,endpoint:a.endpoint||null,verify_kind:a.verify_kind,framing:a.framing,redelivery_max:Number(a.redelivery_max)||5,enabled:a.enabled};n!==void 0&&(l.verify_config=n),c!==void 0&&(l.credentials=c),p!==void 0&&(l.mapping=p),a.mode==="pull"&&K!==void 0&&(l.pull_config=K),a.mode==="stream"&&S!==void 0&&(l.stream_config=S),E!==void 0&&(l.route_extra=E),D.mutate(l)}else{const l={channel_key:a.channel_key,provider:a.provider,display_name:a.display_name||a.channel_key,mode:a.mode,transport:a.transport,framing:a.framing,codec:a.framing==="mime"?"email":"json",endpoint:a.endpoint||null,verify_kind:a.verify_kind,target_type:a.target_type,redelivery_max:Number(a.redelivery_max)||5,enabled:a.enabled};a.app_id.trim()&&(l.app_id=a.app_id.trim()),n!==void 0&&(l.verify_config=n),c!==void 0&&(l.credentials=c),p!==void 0&&(l.mapping=p),a.mode==="pull"&&(l.pull_semantics=a.transport==="imap"?"mark-read":"cursor",K!==void 0&&(l.pull_config=K)),a.mode==="stream"&&S!==void 0&&(l.stream_config=S),E!==void 0&&(l.route_extra=E),R.mutate(l)}}if(o&&g.isLoading)return e.jsx("div",{className:"flex min-h-[40vh] items-center justify-center",children:e.jsx("span",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-transparent"})});const H=R.isPending||D.isPending,U=L[a.mode]??[];return e.jsxs("div",{className:"space-y-6",children:[!o&&e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.presetTitle")})}),e.jsxs(b,{className:"space-y-2",children:[e.jsxs($,{value:void 0,onValueChange:n=>{const c=T.find(p=>p.id===n);c&&(y(re(c)),k.info(i("integration.presetApplied")))},items:Object.fromEntries(T.map(n=>[n.id,i(n.labelKey)])),children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{placeholder:i("integration.presetPlaceholder")})}),e.jsx(A,{children:T.map(n=>e.jsx(I,{value:n.id,children:e.jsxs("div",{className:"flex flex-col items-start py-0.5",children:[e.jsx("span",{children:i(n.labelKey)}),e.jsx("span",{className:"text-xs text-muted-foreground",children:i(n.descKey)})]})},n.id))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i("integration.presetHint")})]})]}),e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.basicInfo")})}),e.jsxs(b,{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(r,{children:[i("integration.channelKey")," *"]}),e.jsx(f,{value:a.channel_key,onChange:n=>s("channel_key",n.target.value),disabled:o,placeholder:"github-issues"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["/ingress/",a.channel_key||"{key}"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.displayName")}),e.jsx(f,{value:a.display_name,onChange:n=>s("display_name",n.target.value)})]})]}),!o&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.ownerApp")}),e.jsx(f,{value:a.app_id,onChange:n=>s("app_id",n.target.value),placeholder:"chat"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i("integration.ownerAppHint")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.provider")}),e.jsx(f,{value:a.provider,onChange:n=>s("provider",n.target.value),disabled:o,placeholder:"generic-hmac"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.targetType")," *"]}),e.jsx(f,{value:a.target_type,onChange:n=>s("target_type",n.target.value),disabled:o,placeholder:"conversation_message"})]})]})]})]}),e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.stack")})}),e.jsxs(b,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.mode")," *"]}),e.jsxs($,{value:a.mode,onValueChange:n=>{const c=n??"push";s("mode",c);const p=L[c]??[];p.includes(a.transport)||s("transport",p[0]??"")},items:Object.fromEntries(M.map(n=>[n,n])),disabled:o,children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:M.map(n=>e.jsx(I,{value:n,children:n},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.transport")," *"]}),e.jsxs($,{value:a.transport,onValueChange:n=>s("transport",n??""),items:Object.fromEntries(U.map(n=>[n,n])),disabled:o,children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:U.map(n=>e.jsx(I,{value:n,children:n},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.framing")," *"]}),e.jsxs($,{value:a.framing,onValueChange:n=>s("framing",n??"raw"),items:Object.fromEntries(B.map(n=>[n,n])),children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:B.map(n=>e.jsx(I,{value:n,children:n},n))})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.endpoint")}),e.jsx(f,{value:a.endpoint,onChange:n=>s("endpoint",n.target.value),placeholder:a.transport==="imap"?"imaps://imap.example.com:993":a.mode==="listen"?"0.0.0.0:9321":"https://… / wss://…"})]}),a.mode==="pull"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.pullConfig"),a.transport==="imap"?"":" *"]}),a.transport==="imap"?e.jsx(x,{children:"folder · ssl · batch · idle_secs(均可选,IMAP 无本地 cursor)"}):e.jsx(x,{children:"list_path · id_field · param · page_size"}),e.jsx(N,{value:a.pull_config,onChange:n=>s("pull_config",n),placeholder:a.transport==="imap"?d.imapPullConfig:d.pullConfig,example:a.transport==="imap"?d.imapPullConfig:d.pullConfig})]}),a.mode==="stream"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.streamConfig")," *"]}),e.jsx(x,{children:"dispatch: pre_connect · events · ack_reply | pb-frame: pre_connect · pb_frame"}),e.jsx(N,{value:a.stream_config,onChange:n=>s("stream_config",n),placeholder:d.streamConfig,example:d.streamConfig,minHeight:"180px"})]})]})]}),e.jsxs("div",{className:"grid gap-6 xl:grid-cols-2 items-stretch",children:[e.jsxs(_,{className:"flex flex-col",children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.trustSection")})}),e.jsxs(b,{className:"flex flex-col gap-4 flex-1",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(r,{children:[i("integration.verifyKind")," *"]}),e.jsxs($,{value:a.verify_kind,onValueChange:n=>s("verify_kind",n??"none"),items:Object.fromEntries(G.map(n=>[n,n])),children:[e.jsx(O,{className:"w-full",children:e.jsx(w,{})}),e.jsx(A,{children:G.map(n=>e.jsx(I,{value:n,children:n},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.redeliveryMax")}),e.jsx(f,{type:"number",min:0,value:a.redelivery_max,onChange:n=>s("redelivery_max",n.target.value)})]})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(r,{children:i("integration.verifyConfig")}),e.jsx(x,{children:"header · scheme · encoding (hex | base64 | base64url)"}),e.jsx(N,{value:a.verify_config,onChange:n=>s("verify_config",n),placeholder:d.verifyConfig,example:d.verifyConfig,minHeight:"100px",fill:!0})]}),e.jsxs("div",{className:"flex flex-col gap-2 flex-1 min-h-0",children:[e.jsx(r,{children:i("integration.credentials")}),e.jsxs(x,{children:["hmac → secret · oauth → grant",""]}),e.jsx(N,{value:a.credentials,onChange:n=>s("credentials",n),placeholder:o?i("integration.credentialsKeepHint"):d.credentials,example:d.credentials,minHeight:"80px",fill:!0}),o&&e.jsx("p",{className:"text-xs text-muted-foreground",children:i("integration.credentialsKeepHint")})]})]})]}),e.jsxs(_,{className:"flex flex-col",children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.normalizeSection")})}),e.jsxs(b,{className:"flex flex-col gap-2 flex-1 min-h-0",children:[e.jsx(r,{children:i("integration.mapping")}),e.jsx(x,{children:"external_id · sender · kind · payload.* — pipes: as_json · default · as_number · as_datetime — 邮件: $._headers.* 可取任意原始头"}),e.jsx(N,{value:a.mapping,onChange:n=>s("mapping",n),placeholder:d.mapping,example:d.mapping,minHeight:"300px",fill:!0})]})]})]}),e.jsxs(_,{children:[e.jsx(v,{children:e.jsx(j,{className:"text-sm",children:i("integration.routingSection")})}),e.jsxs(b,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(r,{children:i("integration.routeExtra")}),e.jsx(x,{children:"events · jobs · retry_mode · autoreply"}),e.jsx(N,{value:a.route_extra,onChange:n=>s("route_extra",n),placeholder:d.routeExtra,example:d.routeExtra,minHeight:"100px"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ne,{checked:a.enabled,onCheckedChange:n=>s("enabled",n)}),e.jsx(r,{className:"cursor-pointer",children:a.enabled?i("common.enabled"):i("common.disabled")})]})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pb-4",children:[e.jsx(Y,{variant:"outline",onClick:()=>m.push("/channels"),children:i("common.cancel")}),e.jsxs(Y,{onClick:V,disabled:H||!a.channel_key||!a.target_type,children:[e.jsx(ae,{className:"size-4 me-2"}),i(H?"common.saving":"common.save")]})]})]})}export{Ke as default}; diff --git a/adminui/assets/channels-CLsZn6Bq.js b/adminui/assets/channels-BXujz4N7.js similarity index 85% rename from adminui/assets/channels-CLsZn6Bq.js rename to adminui/assets/channels-BXujz4N7.js index 97246973..7e0c26d5 100644 --- a/adminui/assets/channels-CLsZn6Bq.js +++ b/adminui/assets/channels-BXujz4N7.js @@ -1 +1 @@ -import{f as v,j as e,L as _e}from"./vendor-react-j_G0Dyx0.js";import{cJ as Y,cA as ve,cz as R,n as f,b9 as fe,ah as re,T as be,_ as Ne,U as Ce,V as z,be as ke,W as Se,c9 as h,aE as T,bk as g,b3 as Me,bd as we}from"./index-DFelzBez.js";import{u as M}from"./useMutation-DgRiHz67.js";import{B as de}from"./badge-BvrzcoWP.js";import{C as Te,a as Pe}from"./card-D3QxRGt-.js";import{D as U,a as I,d as Q,e as B,c as V}from"./dialog-Bx55NyOm.js";import{I as b}from"./input-Bx5u8hTS.js";import{L as u}from"./label-DeKRRvpz.js";import{S as A,e as W,f as G,a as J,c as D}from"./select-Dc4_9PNt.js";import{S as X}from"./switch-DLTIF0BW.js";import{T as ce,d as me,e as E,c as m,a as ue,b as d}from"./table-gihdE9_j.js";import{T as De}from"./table-skeleton-BtLTAVzI.js";import{C as Ee}from"./confirm-delete-dialog-QxeOrQYk.js";import{E as Ke}from"./empty-state-D0NvGCXa.js";import{P as je}from"./plus-DK-V8p7I.js";import{E as Oe}from"./ellipsis-vertical-UHYLUh-c.js";import{P as ze}from"./pencil-BgXbFsNu.js";import{T as He}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";const xe={name:"",provider:"generic",base_url:"",models:"",test_model:"",priority:"0",weight:"0",key_mode:"polling",auto_ban:!0,cost_mode:"usage",cost_discount:"1",monthly_cost:""};function pe({rows:l,setRows:i}){const{t:r}=Y();return e.jsxs("div",{className:"space-y-2",children:[l.map((n,j)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b,{className:"font-mono",value:n.key,onChange:x=>i(p=>p.map((a,y)=>y===j?{...a,key:x.target.value}:a)),placeholder:"sk-..."}),e.jsx(b,{className:"w-28",type:"number",value:n.max_concurrency,onChange:x=>i(p=>p.map((a,y)=>y===j?{...a,max_concurrency:x.target.value}:a)),placeholder:r("llm.fMaxConcurrency")}),e.jsx(f,{variant:"ghost",size:"icon",disabled:l.length===1,onClick:()=>i(x=>x.filter((p,a)=>a!==j)),children:e.jsx(we,{className:"size-4"})})]},j)),e.jsxs(f,{variant:"outline",size:"sm",onClick:()=>i(n=>[...n,{key:"",max_concurrency:""}]),children:[e.jsx(je,{className:"size-4"}),r("llm.addKey")]})]})}function he({editing:l,form:i,setForm:r,presets:n,formKeys:j,setFormKeys:x,directoryEmpty:p}){const{t:a}=Y(),y=t=>n.find(o=>o.key===t);return e.jsxs("div",{className:"space-y-4",children:[p&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/40 bg-amber-500/10 p-3 text-sm",children:[e.jsx(Me,{className:"mt-0.5 size-4 shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-medium",children:a("llm.noDirectoryTitle")}),e.jsx("p",{className:"text-muted-foreground",children:a("llm.noDirectoryHint")}),e.jsx(_e,{to:"/llm/models",className:"inline-block font-medium text-primary underline-offset-4 hover:underline",children:a("llm.goToModels")})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fName")}),e.jsx(b,{value:i.name,onChange:t=>r(o=>({...o,name:t.target.value})),placeholder:"openai-pool"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fProvider")}),e.jsxs(A,{value:i.provider,onValueChange:t=>{const o=t??"generic",N=y(o);r(C=>({...C,provider:o,base_url:!C.base_url&&(N!=null&&N.default_base_url)?N.default_base_url:C.base_url}))},items:Object.fromEntries((n.length>0?n:[{key:"generic",display_name:"Generic",default_base_url:"",requires_auth:!0}]).map(t=>[t.key,t.display_name])),children:[e.jsx(W,{children:e.jsx(G,{})}),e.jsx(J,{children:(n.length>0?n:[{key:"generic",display_name:"Generic",default_base_url:"",requires_auth:!0}]).map(t=>e.jsx(D,{value:t.key,children:t.display_name},t.key))})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fBaseUrl")}),e.jsx(b,{value:i.base_url,onChange:t=>r(o=>({...o,base_url:t.target.value})),placeholder:"https://api.openai.com/v1"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fModels")}),e.jsx(b,{value:i.models,onChange:t=>r(o=>({...o,models:t.target.value})),placeholder:"gpt-4o, gpt-4o-mini"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fTestModel")}),e.jsx(b,{value:i.test_model,onChange:t=>r(o=>({...o,test_model:t.target.value})),placeholder:"gpt-4o-mini"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a(p?"llm.testModelNoDirHint":"llm.testModelHint")})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fPriority")}),e.jsx(b,{type:"number",value:i.priority,onChange:t=>r(o=>({...o,priority:t.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fKeyMode")}),e.jsxs(A,{value:i.key_mode,onValueChange:t=>r(o=>({...o,key_mode:t??"polling"})),items:{polling:a("llm.keyModePolling"),random:a("llm.keyModeRandom")},children:[e.jsx(W,{children:e.jsx(G,{})}),e.jsxs(J,{children:[e.jsx(D,{value:"polling",children:a("llm.keyModePolling")}),e.jsx(D,{value:"random",children:a("llm.keyModeRandom")})]})]})]}),e.jsxs("div",{className:"flex items-end gap-2 pb-1",children:[e.jsx(X,{checked:i.auto_ban,onCheckedChange:t=>r(o=>({...o,auto_ban:t}))}),e.jsx(u,{className:"font-normal",children:a("llm.fAutoBan")})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fCostMode")}),e.jsxs(A,{value:i.cost_mode,onValueChange:t=>r(o=>({...o,cost_mode:t??"usage"})),items:{usage:a("llm.costModeUsage"),fixed:a("llm.costModeFixed")},children:[e.jsx(W,{children:e.jsx(G,{})}),e.jsxs(J,{children:[e.jsx(D,{value:"usage",children:a("llm.costModeUsage")}),e.jsx(D,{value:"fixed",children:a("llm.costModeFixed")})]})]})]}),i.cost_mode==="usage"?e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fCostDiscount")}),e.jsx(b,{type:"number",step:"0.01",value:i.cost_discount,onChange:t=>r(o=>({...o,cost_discount:t.target.value}))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("llm.costDiscountHint")})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fMonthlyCost")}),e.jsx(b,{type:"number",step:"0.01",value:i.monthly_cost,onChange:t=>r(o=>({...o,monthly_cost:t.target.value})),placeholder:"200"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("llm.monthlyCostHint")})]})]}),!l&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fInitialKeys")}),e.jsx(pe,{rows:j,setRows:x})]}),l&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a("llm.keysWriteOnlyHint")})]})}function cs(){var ie;const{t:l}=Y(),i=ve(),r=["admin-llm-channels"],[n,j]=v.useState({...xe}),[x,p]=v.useState([{key:"",max_concurrency:""}]),[a,y]=v.useState(!1),[t,o]=v.useState(null),[N,C]=v.useState(null),[H,$]=v.useState([{key:"",max_concurrency:""}]),[w,q]=v.useState(null),L=R({queryKey:r,queryFn:()=>g.send("/admin/llm/channels")}),K=v.useMemo(()=>L.data??[],[L.data]),c=v.useMemo(()=>K.find(s=>s.id===N)??null,[K,N]),Z=((ie=R({queryKey:["admin-llm-providers"],queryFn:()=>g.send("/admin/llm/providers"),staleTime:300*1e3}).data)==null?void 0:ie.providers)??[],ee=R({queryKey:["admin-llm-models"],queryFn:()=>g.send("/admin/llm/models"),staleTime:60*1e3}),se=ee.data!==void 0&&ee.data.length===0;function k(){i.invalidateQueries({queryKey:r})}const le=M({mutationFn:()=>g.send("/admin/llm/channels",{method:"POST",body:{name:n.name,provider:n.provider,base_url:n.base_url,models:n.models,test_model:n.test_model||void 0,priority:Number(n.priority)||0,weight:Number(n.weight)||0,key_mode:n.key_mode,auto_ban:n.auto_ban,cost_mode:n.cost_mode,cost_discount:Number(n.cost_discount)||0,monthly_cost:n.cost_mode==="fixed"?Number(n.monthly_cost)||0:void 0,initial_keys:x.filter(s=>s.key.trim()).map(s=>({key:s.key.trim(),max_concurrency:s.max_concurrency?Number(s.max_concurrency):void 0}))}}),onSuccess:()=>{h.success(l("llm.channelCreated")),k(),y(!1),j({...xe}),p([{key:"",max_concurrency:""}])},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),ne=M({mutationFn:()=>g.send(`/admin/llm/channels/${t==null?void 0:t.id}`,{method:"PUT",body:{name:n.name,provider:n.provider,base_url:n.base_url,models:n.models,test_model:n.test_model||void 0,priority:Number(n.priority)||0,weight:Number(n.weight)||0,key_mode:n.key_mode,auto_ban:n.auto_ban,cost_mode:n.cost_mode,cost_discount:Number(n.cost_discount)||0,monthly_cost:n.cost_mode==="fixed"?Number(n.monthly_cost)||0:void 0}}),onSuccess:()=>{h.success(l("llm.channelUpdated")),k(),o(null)},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),ae=M({mutationFn:s=>g.send(`/admin/llm/channels/${s}`,{method:"DELETE"}),onSuccess:()=>{h.success(l("llm.channelDeleted")),k(),q(null)},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToDelete"))}),te=M({mutationFn:s=>g.send(`/admin/llm/channels/${s}/test`,{method:"POST"}),onSuccess:s=>{s.ok?h.success(l("llm.testOk",{ms:s.elapsed_ms,model:s.model})):h.error(l("llm.testFailed",{detail:s.detail})),k()}}),F=M({mutationFn:({id:s,action:_})=>g.send(`/admin/llm/channels/${s}/${_}`,{method:"POST"}),onSuccess:()=>k(),onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),O=M({mutationFn:({id:s,index:_,action:S})=>g.send(`/admin/llm/channels/${s}/keys/${_}/${S}`,{method:"POST"}),onSuccess:()=>k(),onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),oe=M({mutationFn:()=>g.send(`/admin/llm/channels/${c==null?void 0:c.id}/keys`,{method:"PUT",body:{keys:H.filter(s=>s.key.trim()).map(s=>({key:s.key.trim(),max_concurrency:s.max_concurrency?Number(s.max_concurrency):void 0}))}}),onSuccess:()=>{h.success(l("llm.keysReplaced")),k(),$([{key:"",max_concurrency:""}])},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))});function ye(s){o(s),j({name:s.name,provider:s.provider,base_url:s.base_url,models:s.models,test_model:s.test_model??"",priority:String(s.priority),weight:String(s.weight),key_mode:s.key_mode,auto_ban:s.auto_ban,cost_mode:s.cost_mode??"usage",cost_discount:String(s.cost_discount??1),monthly_cost:s.monthly_cost!==null?String(s.monthly_cost):""})}function ge(s){C(s.id),$([{key:"",max_concurrency:""}])}return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end gap-2",children:e.jsxs(f,{onClick:()=>y(!0),children:[e.jsx(je,{className:"size-4"}),l("llm.newChannel")]})}),e.jsx(Te,{children:e.jsx(Pe,{className:"p-0",children:L.isLoading?e.jsx(De,{cols:9}):e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(E,{children:[e.jsx(m,{children:l("llm.colChannel")}),e.jsx(m,{children:l("llm.fProvider")}),e.jsx(m,{children:l("llm.fModels")}),e.jsx(m,{children:l("llm.colPriority")}),e.jsx(m,{children:l("llm.colKeys")}),e.jsx(m,{children:l("llm.colCreatedAt")}),e.jsx(m,{children:l("llm.colUpdatedAt")}),e.jsx(m,{children:l("common.status")}),e.jsx(m,{className:"text-end",children:l("common.actions")})]})}),e.jsx(ue,{children:K.length===0?e.jsx(E,{children:e.jsx(d,{colSpan:9,children:e.jsx(Ke,{icon:fe,title:l("llm.noChannels"),description:l("llm.noChannelsDesc"),action:{label:l("llm.newChannel"),onClick:()=>y(!0)}})})}):K.map(s=>{var S;const _=s.keys.filter(P=>P.status==="active").length;return e.jsxs(E,{children:[e.jsx(d,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:s.name}),e.jsx("span",{className:"font-mono text-xs text-muted-foreground truncate max-w-64",children:s.base_url})]})}),e.jsx(d,{children:e.jsx(de,{variant:"outline",className:"font-mono",children:s.provider})}),e.jsx(d,{children:e.jsx("span",{className:"font-mono text-xs",title:s.models,children:s.models.length>40?`${s.models.slice(0,40)}…`:s.models})}),e.jsx(d,{children:e.jsx("span",{className:"text-sm tabular-nums",children:s.priority})}),e.jsx(d,{children:e.jsxs("span",{className:"flex items-center gap-1.5 text-sm tabular-nums",title:l("llm.keysSummary",{active:_,total:s.keys.length}),children:[e.jsx(re,{className:"size-3.5 text-muted-foreground"}),_,"/",s.keys.length]})}),e.jsx(d,{className:"whitespace-nowrap font-mono text-xs",children:new Date(s.created_at).toLocaleString()}),e.jsx(d,{className:"whitespace-nowrap font-mono text-xs",children:new Date(s.updated_at).toLocaleString()}),e.jsx(d,{children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(X,{checked:s.status==="enabled",disabled:F.isPending&&((S=F.variables)==null?void 0:S.id)===s.id,onCheckedChange:P=>F.mutate({id:s.id,action:P?"enable":"disable"})}),s.status!=="enabled"&&e.jsx(de,{variant:"outline",className:"text-[10px]",title:s.status,children:s.status==="auto_disabled"?"auto":s.status==="manual_disabled"?"manual":s.status})]})}),e.jsx(d,{className:"text-end",children:e.jsxs(be,{children:[e.jsx(Ne,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Oe,{className:"size-4"})}),e.jsxs(Ce,{align:"end",children:[e.jsxs(z,{onClick:()=>ye(s),children:[e.jsx(ze,{className:"size-4 me-2"}),l("common.edit")]}),e.jsxs(z,{onClick:()=>ge(s),children:[e.jsx(re,{className:"size-4 me-2"}),l("llm.manageKeys")]}),e.jsxs(z,{onClick:()=>te.mutate(s.id),disabled:te.isPending,children:[e.jsx(ke,{className:"size-4 me-2"}),l("llm.testChannel")]}),e.jsx(Se,{}),e.jsxs(z,{onClick:()=>q(s),className:"text-destructive",children:[e.jsx(He,{className:"size-4 me-2"}),l("common.delete")]})]})]})})]},s.id)})})]})})}),e.jsx(U,{open:a,onOpenChange:y,children:e.jsxs(I,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(Q,{children:e.jsx(B,{children:l("llm.newChannel")})}),e.jsx(he,{editing:!1,form:n,setForm:j,presets:Z,formKeys:x,setFormKeys:p,directoryEmpty:se}),e.jsxs(V,{children:[e.jsx(f,{variant:"outline",onClick:()=>y(!1),children:l("common.cancel")}),e.jsx(f,{onClick:()=>le.mutate(),disabled:le.isPending||!n.name.trim()||!n.base_url.trim()||!n.models.trim()||!x.some(s=>s.key.trim()),children:l("common.create")})]})]})}),e.jsx(U,{open:!!t,onOpenChange:s=>{s||o(null)},children:e.jsxs(I,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(Q,{children:e.jsxs(B,{children:[l("common.edit")," — ",t==null?void 0:t.name]})}),e.jsx(he,{editing:!0,form:n,setForm:j,presets:Z,formKeys:x,setFormKeys:p,directoryEmpty:se}),e.jsxs(V,{children:[e.jsx(f,{variant:"outline",onClick:()=>o(null),children:l("common.cancel")}),e.jsx(f,{onClick:()=>ne.mutate(),disabled:ne.isPending,children:l("common.save")})]})]})}),e.jsx(U,{open:!!N,onOpenChange:s=>{s||C(null)},children:e.jsxs(I,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(Q,{children:e.jsxs(B,{children:[l("llm.manageKeys")," — ",c==null?void 0:c.name]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(E,{children:[e.jsx(m,{children:"#"}),e.jsx(m,{children:l("llm.colMaskedKey")}),e.jsx(m,{children:l("llm.colMaxConcurrency")}),e.jsx(m,{className:"text-end",children:l("common.status")})]})}),e.jsx(ue,{children:((c==null?void 0:c.keys)??[]).map(s=>{var _,S;return e.jsxs(E,{children:[e.jsx(d,{className:"tabular-nums",children:s.index}),e.jsxs(d,{children:[e.jsx("span",{className:"font-mono text-xs",children:s.masked_key}),s.disabled_reason&&e.jsx("span",{className:"block text-xs text-muted-foreground truncate max-w-48",title:s.disabled_reason,children:s.disabled_reason})]}),e.jsx(d,{className:"tabular-nums text-sm",children:s.max_concurrency??"—"}),e.jsx(d,{className:"text-end",children:e.jsx(X,{checked:s.status==="active",disabled:O.isPending&&((_=O.variables)==null?void 0:_.id)===(c==null?void 0:c.id)&&((S=O.variables)==null?void 0:S.index)===s.index,onCheckedChange:P=>O.mutate({id:c.id,index:s.index,action:P?"enable":"disable"})})})]},s.index)})})]}),e.jsxs("div",{className:"space-y-2 border-t pt-4",children:[e.jsx(u,{children:l("llm.replacePool")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:l("llm.replacePoolHint")}),e.jsx(pe,{rows:H,setRows:$}),e.jsx(f,{size:"sm",variant:"destructive",disabled:!H.some(s=>s.key.trim())||oe.isPending,onClick:()=>oe.mutate(),children:l("llm.replacePoolSubmit")})]})]}),e.jsx(V,{children:e.jsx(f,{variant:"outline",onClick:()=>C(null),children:l("common.close")})})]})}),e.jsx(Ee,{open:!!w,onOpenChange:s=>{s||q(null)},name:(w==null?void 0:w.name)??"",pending:ae.isPending,onConfirm:()=>w&&ae.mutate(w.id)})]})}export{cs as default}; +import{f as v,j as e,L as _e}from"./vendor-react-j_G0Dyx0.js";import{cK as Z,cB as ve,cA as R,n as f,ba as fe,ah as re,T as be,_ as Ne,U as Ce,V as z,bf as ke,W as Se,ca as h,aE as T,bl as g,b4 as Me,be as we}from"./index-C-uFVPpg.js";import{u as M}from"./useMutation-BlIm5cor.js";import{B as de}from"./badge-Dhxp0jil.js";import{C as Te,a as Pe}from"./card-BBIqLCR8.js";import{D as U,a as B,d as I,e as Q,c as V}from"./dialog-if7Fez9x.js";import{I as b}from"./input-Bp1SimRr.js";import{L as u}from"./label-DiZ0cGhf.js";import{S as A,e as W,f as G,a as X,c as D}from"./select-DJZwiot8.js";import{S as Y}from"./switch-DoovYEIg.js";import{T as ce,d as me,e as E,c as m,a as ue,b as d}from"./table-BoLxzYJ7.js";import{T as De}from"./table-skeleton-fqjGRt14.js";import{C as Ee}from"./confirm-delete-dialog-4HgrRwRm.js";import{E as Ke}from"./empty-state-CCcgx4uH.js";import{P as je}from"./plus-FYsVFl-s.js";import{E as Oe}from"./ellipsis-vertical-B-dHvJs4.js";import{P as ze}from"./pencil-xelQXmMG.js";import{T as He}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";const xe={name:"",provider:"generic",base_url:"",models:"",test_model:"",priority:"0",weight:"0",key_mode:"polling",auto_ban:!0,cost_mode:"usage",cost_discount:"1",monthly_cost:""};function pe({rows:l,setRows:i}){const{t:r}=Z();return e.jsxs("div",{className:"space-y-2",children:[l.map((n,j)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b,{className:"font-mono",value:n.key,onChange:x=>i(p=>p.map((a,y)=>y===j?{...a,key:x.target.value}:a)),placeholder:"sk-..."}),e.jsx(b,{className:"w-28",type:"number",value:n.max_concurrency,onChange:x=>i(p=>p.map((a,y)=>y===j?{...a,max_concurrency:x.target.value}:a)),placeholder:r("llm.fMaxConcurrency")}),e.jsx(f,{variant:"ghost",size:"icon",disabled:l.length===1,onClick:()=>i(x=>x.filter((p,a)=>a!==j)),children:e.jsx(we,{className:"size-4"})})]},j)),e.jsxs(f,{variant:"outline",size:"sm",onClick:()=>i(n=>[...n,{key:"",max_concurrency:""}]),children:[e.jsx(je,{className:"size-4"}),r("llm.addKey")]})]})}function he({editing:l,form:i,setForm:r,presets:n,formKeys:j,setFormKeys:x,directoryEmpty:p}){const{t:a}=Z(),y=t=>n.find(o=>o.key===t);return e.jsxs("div",{className:"space-y-4",children:[p&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/40 bg-amber-500/10 p-3 text-sm",children:[e.jsx(Me,{className:"mt-0.5 size-4 shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-medium",children:a("llm.noDirectoryTitle")}),e.jsx("p",{className:"text-muted-foreground",children:a("llm.noDirectoryHint")}),e.jsx(_e,{to:"/llm/models",className:"inline-block font-medium text-primary underline-offset-4 hover:underline",children:a("llm.goToModels")})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fName")}),e.jsx(b,{value:i.name,onChange:t=>r(o=>({...o,name:t.target.value})),placeholder:"openai-pool"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fProvider")}),e.jsxs(A,{value:i.provider,onValueChange:t=>{const o=t??"generic",N=y(o);r(C=>({...C,provider:o,base_url:!C.base_url&&(N!=null&&N.default_base_url)?N.default_base_url:C.base_url}))},items:Object.fromEntries((n.length>0?n:[{key:"generic",display_name:"Generic",default_base_url:"",requires_auth:!0}]).map(t=>[t.key,t.display_name])),children:[e.jsx(W,{children:e.jsx(G,{})}),e.jsx(X,{children:(n.length>0?n:[{key:"generic",display_name:"Generic",default_base_url:"",requires_auth:!0}]).map(t=>e.jsx(D,{value:t.key,children:t.display_name},t.key))})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fBaseUrl")}),e.jsx(b,{value:i.base_url,onChange:t=>r(o=>({...o,base_url:t.target.value})),placeholder:"https://api.openai.com/v1"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fModels")}),e.jsx(b,{value:i.models,onChange:t=>r(o=>({...o,models:t.target.value})),placeholder:"gpt-4o, gpt-4o-mini"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fTestModel")}),e.jsx(b,{value:i.test_model,onChange:t=>r(o=>({...o,test_model:t.target.value})),placeholder:"gpt-4o-mini"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a(p?"llm.testModelNoDirHint":"llm.testModelHint")})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fPriority")}),e.jsx(b,{type:"number",value:i.priority,onChange:t=>r(o=>({...o,priority:t.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fKeyMode")}),e.jsxs(A,{value:i.key_mode,onValueChange:t=>r(o=>({...o,key_mode:t??"polling"})),items:{polling:a("llm.keyModePolling"),random:a("llm.keyModeRandom")},children:[e.jsx(W,{children:e.jsx(G,{})}),e.jsxs(X,{children:[e.jsx(D,{value:"polling",children:a("llm.keyModePolling")}),e.jsx(D,{value:"random",children:a("llm.keyModeRandom")})]})]})]}),e.jsxs("div",{className:"flex items-end gap-2 pb-1",children:[e.jsx(Y,{checked:i.auto_ban,onCheckedChange:t=>r(o=>({...o,auto_ban:t}))}),e.jsx(u,{className:"font-normal",children:a("llm.fAutoBan")})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fCostMode")}),e.jsxs(A,{value:i.cost_mode,onValueChange:t=>r(o=>({...o,cost_mode:t??"usage"})),items:{usage:a("llm.costModeUsage"),fixed:a("llm.costModeFixed")},children:[e.jsx(W,{children:e.jsx(G,{})}),e.jsxs(X,{children:[e.jsx(D,{value:"usage",children:a("llm.costModeUsage")}),e.jsx(D,{value:"fixed",children:a("llm.costModeFixed")})]})]})]}),i.cost_mode==="usage"?e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fCostDiscount")}),e.jsx(b,{type:"number",step:"0.01",value:i.cost_discount,onChange:t=>r(o=>({...o,cost_discount:t.target.value}))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("llm.costDiscountHint")})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fMonthlyCost")}),e.jsx(b,{type:"number",step:"0.01",value:i.monthly_cost,onChange:t=>r(o=>({...o,monthly_cost:t.target.value})),placeholder:"200"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("llm.monthlyCostHint")})]})]}),!l&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{children:a("llm.fInitialKeys")}),e.jsx(pe,{rows:j,setRows:x})]}),l&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a("llm.keysWriteOnlyHint")})]})}function cs(){var ie;const{t:l}=Z(),i=ve(),r=["admin-llm-channels"],[n,j]=v.useState({...xe}),[x,p]=v.useState([{key:"",max_concurrency:""}]),[a,y]=v.useState(!1),[t,o]=v.useState(null),[N,C]=v.useState(null),[H,$]=v.useState([{key:"",max_concurrency:""}]),[w,q]=v.useState(null),L=R({queryKey:r,queryFn:()=>g.send("/admin/llm/channels")}),K=v.useMemo(()=>L.data??[],[L.data]),c=v.useMemo(()=>K.find(s=>s.id===N)??null,[K,N]),J=((ie=R({queryKey:["admin-llm-providers"],queryFn:()=>g.send("/admin/llm/providers"),staleTime:300*1e3}).data)==null?void 0:ie.providers)??[],ee=R({queryKey:["admin-llm-models"],queryFn:()=>g.send("/admin/llm/models"),staleTime:60*1e3}),se=ee.data!==void 0&&ee.data.length===0;function k(){i.invalidateQueries({queryKey:r})}const le=M({mutationFn:()=>g.send("/admin/llm/channels",{method:"POST",body:{name:n.name,provider:n.provider,base_url:n.base_url,models:n.models,test_model:n.test_model||void 0,priority:Number(n.priority)||0,weight:Number(n.weight)||0,key_mode:n.key_mode,auto_ban:n.auto_ban,cost_mode:n.cost_mode,cost_discount:Number(n.cost_discount)||0,monthly_cost:n.cost_mode==="fixed"?Number(n.monthly_cost)||0:void 0,initial_keys:x.filter(s=>s.key.trim()).map(s=>({key:s.key.trim(),max_concurrency:s.max_concurrency?Number(s.max_concurrency):void 0}))}}),onSuccess:()=>{h.success(l("llm.channelCreated")),k(),y(!1),j({...xe}),p([{key:"",max_concurrency:""}])},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),ne=M({mutationFn:()=>g.send(`/admin/llm/channels/${t==null?void 0:t.id}`,{method:"PUT",body:{name:n.name,provider:n.provider,base_url:n.base_url,models:n.models,test_model:n.test_model||void 0,priority:Number(n.priority)||0,weight:Number(n.weight)||0,key_mode:n.key_mode,auto_ban:n.auto_ban,cost_mode:n.cost_mode,cost_discount:Number(n.cost_discount)||0,monthly_cost:n.cost_mode==="fixed"?Number(n.monthly_cost)||0:void 0}}),onSuccess:()=>{h.success(l("llm.channelUpdated")),k(),o(null)},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),ae=M({mutationFn:s=>g.send(`/admin/llm/channels/${s}`,{method:"DELETE"}),onSuccess:()=>{h.success(l("llm.channelDeleted")),k(),q(null)},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToDelete"))}),te=M({mutationFn:s=>g.send(`/admin/llm/channels/${s}/test`,{method:"POST"}),onSuccess:s=>{s.ok?h.success(l("llm.testOk",{ms:s.elapsed_ms,model:s.model})):h.error(l("llm.testFailed",{detail:s.detail})),k()}}),F=M({mutationFn:({id:s,action:_})=>g.send(`/admin/llm/channels/${s}/${_}`,{method:"POST"}),onSuccess:()=>k(),onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),O=M({mutationFn:({id:s,index:_,action:S})=>g.send(`/admin/llm/channels/${s}/keys/${_}/${S}`,{method:"POST"}),onSuccess:()=>k(),onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))}),oe=M({mutationFn:()=>g.send(`/admin/llm/channels/${c==null?void 0:c.id}/keys`,{method:"PUT",body:{keys:H.filter(s=>s.key.trim()).map(s=>({key:s.key.trim(),max_concurrency:s.max_concurrency?Number(s.max_concurrency):void 0}))}}),onSuccess:()=>{h.success(l("llm.keysReplaced")),k(),$([{key:"",max_concurrency:""}])},onError:s=>h.error(s instanceof T?s.message:l("llm.failedToSave"))});function ye(s){o(s),j({name:s.name,provider:s.provider,base_url:s.base_url,models:s.models,test_model:s.test_model??"",priority:String(s.priority),weight:String(s.weight),key_mode:s.key_mode,auto_ban:s.auto_ban,cost_mode:s.cost_mode??"usage",cost_discount:String(s.cost_discount??1),monthly_cost:s.monthly_cost!==null?String(s.monthly_cost):""})}function ge(s){C(s.id),$([{key:"",max_concurrency:""}])}return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end gap-2",children:e.jsxs(f,{onClick:()=>y(!0),children:[e.jsx(je,{className:"size-4"}),l("llm.newChannel")]})}),e.jsx(Te,{children:e.jsx(Pe,{className:"p-0",children:L.isLoading?e.jsx(De,{cols:9}):e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(E,{children:[e.jsx(m,{children:l("llm.colChannel")}),e.jsx(m,{children:l("llm.fProvider")}),e.jsx(m,{children:l("llm.fModels")}),e.jsx(m,{children:l("llm.colPriority")}),e.jsx(m,{children:l("llm.colKeys")}),e.jsx(m,{children:l("llm.colCreatedAt")}),e.jsx(m,{children:l("llm.colUpdatedAt")}),e.jsx(m,{children:l("common.status")}),e.jsx(m,{className:"text-end",children:l("common.actions")})]})}),e.jsx(ue,{children:K.length===0?e.jsx(E,{children:e.jsx(d,{colSpan:9,children:e.jsx(Ke,{icon:fe,title:l("llm.noChannels"),description:l("llm.noChannelsDesc"),action:{label:l("llm.newChannel"),onClick:()=>y(!0)}})})}):K.map(s=>{var S;const _=s.keys.filter(P=>P.status==="active").length;return e.jsxs(E,{children:[e.jsx(d,{children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:s.name}),e.jsx("span",{className:"font-mono text-xs text-muted-foreground truncate max-w-64",children:s.base_url})]})}),e.jsx(d,{children:e.jsx(de,{variant:"outline",className:"font-mono",children:s.provider})}),e.jsx(d,{children:e.jsx("span",{className:"font-mono text-xs",title:s.models,children:s.models.length>40?`${s.models.slice(0,40)}…`:s.models})}),e.jsx(d,{children:e.jsx("span",{className:"text-sm tabular-nums",children:s.priority})}),e.jsx(d,{children:e.jsxs("span",{className:"flex items-center gap-1.5 text-sm tabular-nums",title:l("llm.keysSummary",{active:_,total:s.keys.length}),children:[e.jsx(re,{className:"size-3.5 text-muted-foreground"}),_,"/",s.keys.length]})}),e.jsx(d,{className:"whitespace-nowrap font-mono text-xs",children:new Date(s.created_at).toLocaleString()}),e.jsx(d,{className:"whitespace-nowrap font-mono text-xs",children:new Date(s.updated_at).toLocaleString()}),e.jsx(d,{children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Y,{checked:s.status==="enabled",disabled:F.isPending&&((S=F.variables)==null?void 0:S.id)===s.id,onCheckedChange:P=>F.mutate({id:s.id,action:P?"enable":"disable"})}),s.status!=="enabled"&&e.jsx(de,{variant:"outline",className:"text-[10px]",title:s.status,children:s.status==="auto_disabled"?"auto":s.status==="manual_disabled"?"manual":s.status})]})}),e.jsx(d,{className:"text-end",children:e.jsxs(be,{children:[e.jsx(Ne,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Oe,{className:"size-4"})}),e.jsxs(Ce,{align:"end",children:[e.jsxs(z,{onClick:()=>ye(s),children:[e.jsx(ze,{className:"size-4 me-2"}),l("common.edit")]}),e.jsxs(z,{onClick:()=>ge(s),children:[e.jsx(re,{className:"size-4 me-2"}),l("llm.manageKeys")]}),e.jsxs(z,{onClick:()=>te.mutate(s.id),disabled:te.isPending,children:[e.jsx(ke,{className:"size-4 me-2"}),l("llm.testChannel")]}),e.jsx(Se,{}),e.jsxs(z,{onClick:()=>q(s),className:"text-destructive",children:[e.jsx(He,{className:"size-4 me-2"}),l("common.delete")]})]})]})})]},s.id)})})]})})}),e.jsx(U,{open:a,onOpenChange:y,children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(I,{children:e.jsx(Q,{children:l("llm.newChannel")})}),e.jsx(he,{editing:!1,form:n,setForm:j,presets:J,formKeys:x,setFormKeys:p,directoryEmpty:se}),e.jsxs(V,{children:[e.jsx(f,{variant:"outline",onClick:()=>y(!1),children:l("common.cancel")}),e.jsx(f,{onClick:()=>le.mutate(),disabled:le.isPending||!n.name.trim()||!n.base_url.trim()||!n.models.trim()||!x.some(s=>s.key.trim()),children:l("common.create")})]})]})}),e.jsx(U,{open:!!t,onOpenChange:s=>{s||o(null)},children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(I,{children:e.jsxs(Q,{children:[l("common.edit")," — ",t==null?void 0:t.name]})}),e.jsx(he,{editing:!0,form:n,setForm:j,presets:J,formKeys:x,setFormKeys:p,directoryEmpty:se}),e.jsxs(V,{children:[e.jsx(f,{variant:"outline",onClick:()=>o(null),children:l("common.cancel")}),e.jsx(f,{onClick:()=>ne.mutate(),disabled:ne.isPending,children:l("common.save")})]})]})}),e.jsx(U,{open:!!N,onOpenChange:s=>{s||C(null)},children:e.jsxs(B,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(I,{children:e.jsxs(Q,{children:[l("llm.manageKeys")," — ",c==null?void 0:c.name]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(E,{children:[e.jsx(m,{children:"#"}),e.jsx(m,{children:l("llm.colMaskedKey")}),e.jsx(m,{children:l("llm.colMaxConcurrency")}),e.jsx(m,{className:"text-end",children:l("common.status")})]})}),e.jsx(ue,{children:((c==null?void 0:c.keys)??[]).map(s=>{var _,S;return e.jsxs(E,{children:[e.jsx(d,{className:"tabular-nums",children:s.index}),e.jsxs(d,{children:[e.jsx("span",{className:"font-mono text-xs",children:s.masked_key}),s.disabled_reason&&e.jsx("span",{className:"block text-xs text-muted-foreground truncate max-w-48",title:s.disabled_reason,children:s.disabled_reason})]}),e.jsx(d,{className:"tabular-nums text-sm",children:s.max_concurrency??"—"}),e.jsx(d,{className:"text-end",children:e.jsx(Y,{checked:s.status==="active",disabled:O.isPending&&((_=O.variables)==null?void 0:_.id)===(c==null?void 0:c.id)&&((S=O.variables)==null?void 0:S.index)===s.index,onCheckedChange:P=>O.mutate({id:c.id,index:s.index,action:P?"enable":"disable"})})})]},s.index)})})]}),e.jsxs("div",{className:"space-y-2 border-t pt-4",children:[e.jsx(u,{children:l("llm.replacePool")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:l("llm.replacePoolHint")}),e.jsx(pe,{rows:H,setRows:$}),e.jsx(f,{size:"sm",variant:"destructive",disabled:!H.some(s=>s.key.trim())||oe.isPending,onClick:()=>oe.mutate(),children:l("llm.replacePoolSubmit")})]})]}),e.jsx(V,{children:e.jsx(f,{variant:"outline",onClick:()=>C(null),children:l("common.close")})})]})}),e.jsx(Ee,{open:!!w,onOpenChange:s=>{s||q(null)},name:(w==null?void 0:w.name)??"",pending:ae.isPending,onConfirm:()=>w&&ae.mutate(w.id)})]})}export{cs as default}; diff --git a/adminui/assets/channels-B427Ras0.js b/adminui/assets/channels-CqH_2QfQ.js similarity index 74% rename from adminui/assets/channels-B427Ras0.js rename to adminui/assets/channels-CqH_2QfQ.js index 70fa9cb7..85956590 100644 --- a/adminui/assets/channels-B427Ras0.js +++ b/adminui/assets/channels-CqH_2QfQ.js @@ -1 +1 @@ -import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as O,cF as q,cA as B,cz as K,n as y,aC as L,T as Q,_ as R,U as V,V as N,be as H,c9 as p,aE as b,bk as u}from"./index-DFelzBez.js";import{u as D}from"./useMutation-DgRiHz67.js";import{A as I,c as J,f as U,g as W,d as Z,e as $,b as G,a as X}from"./alert-dialog-B-lBTnCF.js";import{B as w}from"./badge-BvrzcoWP.js";import{C as Y,a as ee}from"./card-D3QxRGt-.js";import{D as ne,a as se,d as ae,e as te,c as ie}from"./dialog-Bx55NyOm.js";import{S as re,e as oe,f as le,a as de,c as _}from"./select-Dc4_9PNt.js";import{S as ce}from"./switch-DLTIF0BW.js";import{T as me,d as xe,e as S,c as o,a as pe,b as a}from"./table-gihdE9_j.js";import{L as E}from"./label-DeKRRvpz.js";import{T as ue}from"./textarea-Daa6n4S-.js";import{T as he}from"./table-skeleton-BtLTAVzI.js";import{E as ge}from"./empty-state-D0NvGCXa.js";import{P as je}from"./plus-DK-V8p7I.js";import{E as fe}from"./ellipsis-vertical-UHYLUh-c.js";import{P as Ce}from"./pencil-BgXbFsNu.js";import{T as ve}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.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 We(){const{t:s}=O(),g=q(),T=B(),[l,j]=r.useState(null),[t,f]=r.useState(null),[C,k]=r.useState(""),[i,m]=r.useState(null),[x,P]=r.useState(h),d=K({queryKey:["admin-integration-channels",x],queryFn:()=>u.admin.integration.listChannels(x===h?void 0:{app:x})}),A=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]),z=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"))}),M=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"))}),v=D({mutationFn:()=>u.admin.integration.testMapping((t==null?void 0:t.id)??"",{sample:C}),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(re,{value:x,onValueChange:n=>P(n??h),children:[e.jsx(oe,{className:"w-48",children:e.jsx(le,{placeholder:s("integration.ownerAppAll")})}),e.jsxs(de,{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(je,{className:"size-4"}),s("integration.newChannel")]})]}),e.jsx(Y,{children:e.jsx(ee,{className:"p-0",children:d.isLoading?e.jsx(he,{cols:7}):e.jsxs(me,{children:[e.jsx(xe,{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(pe,{children:A.length===0?e.jsx(S,{children:e.jsx(a,{colSpan:7,children:e.jsx(ge,{icon:L,title:s("integration.noChannels"),description:s("integration.noChannelsDesc"),action:{label:s("integration.newChannel"),onClick:()=>g.push("/channels/new")}})})}):A.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(ce,{checked:n.enabled,onCheckedChange:c=>z.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(Q,{children:[e.jsx(R,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(fe,{className:"size-4"})}),e.jsxs(V,{align:"end",children:[e.jsxs(N,{onClick:()=>g.push(`/channels/${n.id}/edit`),children:[e.jsx(Ce,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(N,{onClick:()=>{f(n),k(""),m(null)},disabled:!n.mapping,children:[e.jsx(H,{className:"size-4 me-2"}),s("integration.testMapping")]}),e.jsxs(N,{onClick:()=>j(n),disabled:M.isPending,className:"text-destructive",children:[e.jsx(ve,{className:"size-4 me-2"}),s("common.delete")]})]})]})})]},n.id))})]})})}),e.jsx(ne,{open:!!t,onOpenChange:n=>{n||(f(null),m(null))},children:e.jsxs(se,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(ae,{children:e.jsxs(te,{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(ue,{value:C,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(ie,{children:[e.jsx(y,{variant:"outline",onClick:()=>{f(null),m(null)},children:s("common.close")}),e.jsx(y,{onClick:()=>v.mutate(),disabled:v.isPending||!C.trim(),children:v.isPending?s("common.loading"):s("integration.runTest")})]})]})}),e.jsx(I,{open:!!l,onOpenChange:n=>{n||j(null)},children:e.jsxs(J,{children:[e.jsxs(U,{children:[e.jsx(W,{children:s("common.confirmDeleteTitle")}),e.jsx(Z,{children:s("integration.confirmDeleteChannel",{key:(l==null?void 0:l.channel_key)??""})})]}),e.jsxs($,{children:[e.jsx(G,{children:s("common.cancel")}),e.jsx(X,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>l&&M.mutate(l.id),children:s("common.delete")})]})]})})]})}export{We as default}; +import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as K,cG as O,cB as q,cA as z,n as y,aC as L,T as Q,_ as R,U as V,V as N,bf as H,ca as p,aE as b,bl as u}from"./index-C-uFVPpg.js";import{u as D}from"./useMutation-BlIm5cor.js";import{A as I,c as U,f as G,g as J,d as W,e as Z,b as $,a as X}from"./alert-dialog-C8VouOFc.js";import{B as w}from"./badge-Dhxp0jil.js";import{C as Y,a as ee}from"./card-BBIqLCR8.js";import{D as ne,a as se,d as ae,e as te,c as ie}from"./dialog-if7Fez9x.js";import{S as re,e as oe,f as le,a as de,c as _}from"./select-DJZwiot8.js";import{S as ce}from"./switch-DoovYEIg.js";import{T as me,d as xe,e as S,c as o,a as pe,b as a}from"./table-BoLxzYJ7.js";import{L as E}from"./label-DiZ0cGhf.js";import{T as ue}from"./textarea-BhaIg3vS.js";import{T as he}from"./table-skeleton-fqjGRt14.js";import{E as ge}from"./empty-state-CCcgx4uH.js";import{P as je}from"./plus-FYsVFl-s.js";import{E as fe}from"./ellipsis-vertical-B-dHvJs4.js";import{P as Ce}from"./pencil-xelQXmMG.js";import{T as ve}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.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}=K(),g=O(),T=q(),[l,j]=r.useState(null),[t,f]=r.useState(null),[C,k]=r.useState(""),[i,m]=r.useState(null),[x,P]=r.useState(h),d=z({queryKey:["admin-integration-channels",x],queryFn:()=>u.admin.integration.listChannels(x===h?void 0:{app:x})}),A=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]),B=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"))}),M=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"))}),v=D({mutationFn:()=>u.admin.integration.testMapping((t==null?void 0:t.id)??"",{sample:C}),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(re,{value:x,onValueChange:n=>P(n??h),children:[e.jsx(oe,{className:"w-48",children:e.jsx(le,{placeholder:s("integration.ownerAppAll")})}),e.jsxs(de,{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(je,{className:"size-4"}),s("integration.newChannel")]})]}),e.jsx(Y,{children:e.jsx(ee,{className:"p-0",children:d.isLoading?e.jsx(he,{cols:7}):e.jsxs(me,{children:[e.jsx(xe,{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(pe,{children:A.length===0?e.jsx(S,{children:e.jsx(a,{colSpan:7,children:e.jsx(ge,{icon:L,title:s("integration.noChannels"),description:s("integration.noChannelsDesc"),action:{label:s("integration.newChannel"),onClick:()=>g.push("/channels/new")}})})}):A.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(ce,{checked:n.enabled,onCheckedChange:c=>B.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(Q,{children:[e.jsx(R,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(fe,{className:"size-4"})}),e.jsxs(V,{align:"end",children:[e.jsxs(N,{onClick:()=>g.push(`/channels/${n.id}/edit`),children:[e.jsx(Ce,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(N,{onClick:()=>{f(n),k(""),m(null)},disabled:!n.mapping,children:[e.jsx(H,{className:"size-4 me-2"}),s("integration.testMapping")]}),e.jsxs(N,{onClick:()=>j(n),disabled:M.isPending,className:"text-destructive",children:[e.jsx(ve,{className:"size-4 me-2"}),s("common.delete")]})]})]})})]},n.id))})]})})}),e.jsx(ne,{open:!!t,onOpenChange:n=>{n||(f(null),m(null))},children:e.jsxs(se,{className:"sm:max-w-2xl max-h-[85vh] overflow-y-auto",children:[e.jsx(ae,{children:e.jsxs(te,{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(ue,{value:C,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(ie,{children:[e.jsx(y,{variant:"outline",onClick:()=>{f(null),m(null)},children:s("common.close")}),e.jsx(y,{onClick:()=>v.mutate(),disabled:v.isPending||!C.trim(),children:v.isPending?s("common.loading"):s("integration.runTest")})]})]})}),e.jsx(I,{open:!!l,onOpenChange:n=>{n||j(null)},children:e.jsxs(U,{children:[e.jsxs(G,{children:[e.jsx(J,{children:s("common.confirmDeleteTitle")}),e.jsx(W,{children:s("integration.confirmDeleteChannel",{key:(l==null?void 0:l.channel_key)??""})})]}),e.jsxs(Z,{children:[e.jsx($,{children:s("common.cancel")}),e.jsx(X,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>l&&M.mutate(l.id),children:s("common.delete")})]})]})})]})}export{Je as default}; diff --git a/adminui/assets/check-DUua1sBA.js b/adminui/assets/check-BrJnpLnE.js similarity index 84% rename from adminui/assets/check-DUua1sBA.js rename to adminui/assets/check-BrJnpLnE.js index 10da4756..5c5feba3 100644 --- a/adminui/assets/check-DUua1sBA.js +++ b/adminui/assets/check-BrJnpLnE.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/checkbox-ZiPbJKLR.js b/adminui/assets/checkbox-CP5mLBLk.js similarity index 59% rename from adminui/assets/checkbox-ZiPbJKLR.js rename to adminui/assets/checkbox-CP5mLBLk.js index f0c556f3..9563cfe8 100644 --- a/adminui/assets/checkbox-ZiPbJKLR.js +++ b/adminui/assets/checkbox-CP5mLBLk.js @@ -1 +1 @@ -import{f as r,j as E}from"./vendor-react-j_G0Dyx0.js";import{bA as ue,ch as se,cB as qe,ci as Le,cr as oe,aq as de,ct as He,cQ as We,bW as Ue,a0 as ze,cE as fe,bL as ce,cS as Ye,cR as _e,bn as $e,bY as Je,cM as Qe,cv as Xe,ca as Ze,bl as Ae}from"./index-DFelzBez.js";import{C as et}from"./check-DUua1sBA.js";import{u as tt}from"./useControlled-C_2SAunx.js";import{f as pe,u as nt,a as rt,b as at}from"./useRegisterFieldControl-D_vrP_l5.js";import{u as it}from"./FormContext-DtOchBZg.js";import{u as st}from"./useAriaLabelledBy-DZQntSuy.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:N=!1,style:ht,...be}=a,{clearErrors:ke}=it(),{disabled:ye,name:ge,setDirty:xe,setFilled:O,setFocused:J,setTouched:Pe,state:Q,validationMode:Ce,validityData:Ee,shouldValidateOnChange:Ie,validation:Re}=nt(),Me=dt(),{labelId:Se,controlId:Ve,registerControlId:g,getDescriptionProps:X}=rt(),t=lt(),M=t==null?void 0:t.parent,S=M&&t.allValues,l=ye||Me.disabled||(t==null?void 0:t.disabled)||j,x=ge??G,i=B??x,Z=se(),Be=se();let u=Ve;S?u=o?Be:`${M.id}-${i}`:h&&(u=h);let q={};S&&(o?q=t.parent.getParentProps():i&&(q=t.parent.getChildProps(i)));const{checked:A=I,indeterminate:T=R,onCheckedChange:L,...Ne}=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")),W=r.useRef(!1),{getButtonProps:Te,buttonRef:we}=Le({disabled:l,native:N}),f=(t==null?void 0:t.validation)??Re,[s,Fe]=tt({controlled:i&&P&&!o?P.includes(i):A,default:i&&te&&!o?te.includes(i):_,name:"Checkbox",state:"checked"});oe(()=>{g!==de&&(W.current=!0,g(w.current,u))},[u,g,w]),r.useEffect(()=>{const e=w.current;return()=>{!W.current||g===de||(W.current=!1,g(e,void 0))}},[g,w]),at(H,Z,s,void 0,!t);const p=r.useRef(null),Ke=He(D,p,f.inputRef),je=st(K,Se,p,!N,u??void 0);oe(()=>{p.current&&(p.current.indeterminate=T,s&&O(!0))},[s,T,O]),We(s,()=>{t&&!o||(ke(x),O(s),xe(s!==Ee.initialValue),Ie()?f.commit(s):f.commit(s,!0))});const De=Ue({checked:s,disabled:l,form:c,name:o?void 0:x,id:N?void 0:u??void 0,required:y,ref:Ke,style:x?Ye:_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&&!S)){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,X,t?f.getValidationProps:f.getInputValidationProps),ne=S?!!A:s,re=S&&T||R;r.useEffect(()=>{if(!M||!i)return;const e=M.disabledStatesRef.current;return e.set(i,l),()=>{e.delete(i)}},[M,l,i]);const U=r.useMemo(()=>({...Q,checked:ne,disabled:l,readOnly:k,required:y,indeterminate:re}),[Q,ne,l,k,y,re]),Ge=me(U),Oe=fe("span",a,{state:U,ref:[we,H,v,t==null?void 0:t.registerControlRef],props:[{id:N?u??void 0:Z,role:"checkbox","aria-checked":T?"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 Y=!1;e.preventDefault=()=>{Y=!0,F.call(e)},m.preventDefault=()=>{Y=!0,z.call(m)},z.call(m),ce(C).queueMicrotask(()=>{var ie;e.preventDefault=F,m.preventDefault=z,Y||(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}))}},X,f.getValidationProps,be,Ne,Te],stateAttributesMapping:Ge});return E.jsxs(ve.Provider,{value:U,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}=Qe(h),b=r.useRef(null),o={...c,transitionStatus:D};Xe({open:h,ref:b,onComplete(){h||G(!1)}});const $={...me(c),...Ze,...pe},y=K||R,V=fe("span",a,{ref:[v,b],state:o,stateAttributesMapping:$,props:j});return y?V:null});function Et({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{Et as C}; +import{f as r,j as E}from"./vendor-react-j_G0Dyx0.js";import{bB as ue,ci as se,cC as qe,cj as He,cs as oe,aq as de,cu as Le,cR as Ue,bX as We,a0 as ze,cF as fe,bM as ce,cT as Xe,cS as _e,bo as $e,bZ as Je,cN as Ye,cw as Ze,cb as Qe,bm as Ae}from"./index-C-uFVPpg.js";import{C as et}from"./check-BrJnpLnE.js";import{u as tt}from"./useControlled-C_2SAunx.js";import{f as pe,u as nt,a as rt,b as at}from"./useRegisterFieldControl-BUFSeOf3.js";import{u as it}from"./FormContext-CMyWQz7b.js";import{u as st}from"./useAriaLabelledBy-BpS7IJWF.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":j,disabled:K=!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:N=!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}=nt(),Me=dt(),{labelId:Se,controlId:Ve,registerControlId:g,getDescriptionProps:Z}=rt(),t=lt(),M=t==null?void 0:t.parent,S=M&&t.allValues,l=ye||Me.disabled||(t==null?void 0:t.disabled)||K,x=ge??G,i=B??x,Q=se(),Be=se();let u=Ve;S?u=o?Be:`${M.id}-${i}`:h&&(u=h);let q={};S&&(o?q=t.parent.getParentProps():i&&(q=t.parent.getChildProps(i)));const{checked:A=I,indeterminate:T=R,onCheckedChange:H,...Ne}=q,P=t==null?void 0:t.value,ee=t==null?void 0:t.setValue,te=t==null?void 0:t.defaultValue,L=r.useRef(null),w=qe(()=>Symbol("checkbox-control")),U=r.useRef(!1),{getButtonProps:Te,buttonRef:we}=He({disabled:l,native:N}),f=(t==null?void 0:t.validation)??Re,[s,Fe]=tt({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(L,Q,s,void 0,!t);const p=r.useRef(null),je=Le(D,p,f.inputRef),Ke=st(j,Se,p,!N,u??void 0);oe(()=>{p.current&&(p.current.indeterminate=T,s&&O(!0))},[s,T,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:N?void 0:u??void 0,required:y,ref:je,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(H==null||H(d,C),b==null||b(d,C),!C.isCanceled&&(Fe(d),i&&P&&ee&&!o&&!S)){const m=d?[...P,i]:P.filter(F=>F!==i);ee(m,C)}},onFocus(){var e;(e=L.current)==null||e.focus()}},B!==void 0?{value:(t?s&&B:B)||""}:ze,Z,t?f.getValidationProps:f.getInputValidationProps),ne=S?!!A:s,re=S&&T||R;r.useEffect(()=>{if(!M||!i)return;const e=M.disabledStatesRef.current;return e.set(i,l),()=>{e.delete(i)}},[M,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,L,v,t==null?void 0:t.registerControlRef],props:[{id:N?u??void 0:Q,role:"checkbox","aria-checked":T?"mixed":s,"aria-readonly":k||void 0,"aria-required":y||void 0,"aria-labelledby":Ke,[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,Ne,Te],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:j=!1,...K}=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=j||R,V=fe("span",a,{ref:[v,b],state:o,stateAttributesMapping:$,props:K});return y?V:null});function Et({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{Et as C}; diff --git a/adminui/assets/chevron-left-CbJIXgY2.js b/adminui/assets/chevron-left-C_tZtLI6.js similarity index 85% rename from adminui/assets/chevron-left-CbJIXgY2.js rename to adminui/assets/chevron-left-C_tZtLI6.js index c791505d..7bff1f0c 100644 --- a/adminui/assets/chevron-left-CbJIXgY2.js +++ b/adminui/assets/chevron-left-C_tZtLI6.js @@ -1,4 +1,4 @@ -import{bp as e}from"./index-DFelzBez.js";/** +import{bq as e}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/chevron-up-BHyyZ98X.js b/adminui/assets/chevron-up-hicU2AmB.js similarity index 85% rename from adminui/assets/chevron-up-BHyyZ98X.js rename to adminui/assets/chevron-up-hicU2AmB.js index 09fe110f..8690179a 100644 --- a/adminui/assets/chevron-up-BHyyZ98X.js +++ b/adminui/assets/chevron-up-hicU2AmB.js @@ -1,4 +1,4 @@ -import{bp as o}from"./index-DFelzBez.js";/** +import{bq as o}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/chevrons-up-down-CYWVywcp.js b/adminui/assets/chevrons-up-down-D2U8cLa1.js similarity index 87% rename from adminui/assets/chevrons-up-down-CYWVywcp.js rename to adminui/assets/chevrons-up-down-D2U8cLa1.js index 09d86aa5..addb335d 100644 --- a/adminui/assets/chevrons-up-down-CYWVywcp.js +++ b/adminui/assets/chevrons-up-down-D2U8cLa1.js @@ -1,4 +1,4 @@ -import{bp as o}from"./index-DFelzBez.js";/** +import{bq as o}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/chunker-preview-BgLVUwLI.js b/adminui/assets/chunker-preview-CLCr-h2g.js similarity index 83% rename from adminui/assets/chunker-preview-BgLVUwLI.js rename to adminui/assets/chunker-preview-CLCr-h2g.js index 88c49efa..daff183b 100644 --- a/adminui/assets/chunker-preview-BgLVUwLI.js +++ b/adminui/assets/chunker-preview-CLCr-h2g.js @@ -1,6 +1,6 @@ -import{f as c,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as u,n as j,aG as f,bk as b,c9 as y}from"./index-DFelzBez.js";import{B as n}from"./badge-BvrzcoWP.js";import{C as d,a as o}from"./card-D3QxRGt-.js";import{L as v}from"./label-DeKRRvpz.js";import{T as k}from"./textarea-Daa6n4S-.js";import"./vendor-xyflow-C2hOf6Vp.js";function P(){const{t:a}=u(),[t,m]=c.useState(`# 标题 +import{f as c,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as u,n as j,aH as f,bl as b,ca as y}from"./index-C-uFVPpg.js";import{B as n}from"./badge-Dhxp0jil.js";import{C as d,a as o}from"./card-BBIqLCR8.js";import{L as v}from"./label-DiZ0cGhf.js";import{T as g}from"./textarea-BhaIg3vS.js";import"./vendor-xyflow-C2hOf6Vp.js";function P(){const{t:a}=u(),[t,m]=c.useState(`# 标题 -正文示例…`),[r,x]=c.useState(null),[l,i]=c.useState(!1);async function p(){if(t.trim()){i(!0);try{const s=await b.send("/admin/kb/chunker/preview",{method:"POST",body:{markdown:t}});x(s)}catch(s){y.error(s.message)}finally{i(!1)}}}return e.jsxs("div",{className:"space-y-6",children:[e.jsx(d,{children:e.jsxs(o,{className:"space-y-4 pt-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("kb.sample")}),e.jsx(k,{rows:10,value:t,onChange:s=>m(s.target.value),placeholder:`# 章节 +正文示例…`),[r,x]=c.useState(null),[l,i]=c.useState(!1);async function p(){if(t.trim()){i(!0);try{const s=await b.send("/admin/kb/chunker/preview",{method:"POST",body:{markdown:t}});x(s)}catch(s){y.error(s.message)}finally{i(!1)}}}return e.jsxs("div",{className:"space-y-6",children:[e.jsx(d,{children:e.jsxs(o,{className:"space-y-4 pt-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("kb.sample")}),e.jsx(g,{rows:10,value:t,onChange:s=>m(s.target.value),placeholder:`# 章节 内容… diff --git a/adminui/assets/chunks-Dx4M8_6n.js b/adminui/assets/chunks-C_53xzyV.js similarity index 77% rename from adminui/assets/chunks-Dx4M8_6n.js rename to adminui/assets/chunks-C_53xzyV.js index 407b4565..642f4677 100644 --- a/adminui/assets/chunks-Dx4M8_6n.js +++ b/adminui/assets/chunks-C_53xzyV.js @@ -1 +1 @@ -import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as ie,cA as le,cz as E,ak as X,n as q,g as oe,c9 as v,bk as f,q as re,r as de,a4 as ce,T as me,_ as xe,U as ue,V as H}from"./index-DFelzBez.js";import{u as U}from"./useMutation-DgRiHz67.js";import{B as k}from"./badge-BvrzcoWP.js";import{C as he,a as ge}from"./card-D3QxRGt-.js";import{D as pe,a as je,d as be,e as fe,c as ke}from"./dialog-Bx55NyOm.js";import{L as ve}from"./label-DeKRRvpz.js";import{T as Ce}from"./textarea-Daa6n4S-.js";import{S as R,e as O,f as G,a as J,c as C}from"./select-Dc4_9PNt.js";import{T as Ne,d as we,e as z,c as m,a as ye,b as r}from"./table-gihdE9_j.js";import{A as De,c as Te,f as Se,g as _e,d as Pe,e as Ee,b as qe,a as ze}from"./alert-dialog-B-lBTnCF.js";import{T as Ae}from"./table-skeleton-BtLTAVzI.js";import{E as Me}from"./empty-state-D0NvGCXa.js";import{P as Fe}from"./pagination-bar-DD_HkQGa.js";import{u as Ke}from"./use-url-state-BBO3na5E.js";import{D as Qe}from"./database-CAtPG7tU.js";import{E as Be}from"./ellipsis-vertical-UHYLUh-c.js";import{P as Ie}from"./pencil-BgXbFsNu.js";import{T as Le}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./chevron-left-CbJIXgY2.js";const Z=50;function ps(){var Q,B,I,L,V;const{t:a}=ie(),d=le(),{get:l,set:x}=Ke(),c=l("doc_id")||null,i=l("kb_id")||null,u=Math.max(1,l("page")&&parseInt(l("page"),10)||1),[g,o]=j.useState(new Set),[t,N]=j.useState(null),[w,A]=j.useState(""),[y,D]=j.useState(null),M=E({queryKey:["kb-kbs"],queryFn:()=>f.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),F=E({queryKey:["kb-docs-options",i],queryFn:()=>f.send("/admin/kb/documents",{query:{...i?{kb_id:i}:{},page:"1",page_size:"100"}})}),b=E({queryKey:["kb-chunks",c,i,u],queryFn:()=>{const s={page:String(u),page_size:String(Z)};return c?s.doc_id=c:i&&(s.kb_id=i),f.send("/admin/kb/chunks",{query:s})}}),K=()=>{d.invalidateQueries({queryKey:["kb-chunks"]}),d.invalidateQueries({queryKey:["kb-docs"]}),d.invalidateQueries({queryKey:["kb-stats"]})},T=U({mutationFn:async s=>f.send(`/admin/kb/chunks/${s.id}`,{method:"PUT",body:{content:w}}),onSuccess:()=>{v.success(a("kb.chunkUpdated")),N(null),K()},onError:s=>v.error(s.message)}),S=U({mutationFn:async s=>f.send(`/admin/kb/chunks/${s}`,{method:"DELETE"}),onSuccess:()=>{v.success(a("kb.chunkDeleted")),D(null),K()},onError:s=>v.error(`${a("common.failedToDelete")}:${s.message}`)}),p=j.useMemo(()=>{var s;return((s=b.data)==null?void 0:s.items)??[]},[b.data]),_=j.useMemo(()=>{const s=p.filter(n=>!n.parent_id),h=new Map;for(const n of p)if(n.parent_id){const $=h.get(n.parent_id)??[];$.push(n),h.set(n.parent_id,$)}return s.map(n=>({parent:n,children:h.get(n.id)??[]}))},[p]),Y=p.filter(s=>s.has_embedding).length;function ee(s){o(h=>{const n=new Set(h);return n.has(s)?n.delete(s):n.add(s),n})}function se(s){A(s.content),N(s)}function ae(s){x({kb_id:s==="all"?void 0:s,doc_id:void 0,page:void 0})}function te(s){x({doc_id:s==="all"?void 0:s,page:void 0})}const P=((Q=b.data)==null?void 0:Q.total)??0,ne=Math.max(1,Math.ceil(P/Z));return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c&&e.jsx(X,{to:"/kb/docs",children:e.jsx(q,{size:"icon-xs",variant:"ghost",title:a("kb.backToDocs"),children:e.jsx(oe,{className:"size-4"})})}),e.jsxs(R,{value:i??"all",onValueChange:s=>{s&&ae(s)},items:[{value:"all",label:a("kb.allKbs")},...(((B=M.data)==null?void 0:B.items)??[]).map(s=>({value:String(s.id),label:s.name}))],children:[e.jsx(O,{className:"w-52",children:e.jsx(G,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(J,{children:[e.jsx(C,{value:"all",children:a("kb.allKbs")}),(((I=M.data)==null?void 0:I.items)??[]).map(s=>e.jsx(C,{value:String(s.id),children:s.name},s.id))]})]}),e.jsxs(R,{value:c??"all",onValueChange:s=>{s&&te(s)},items:[{value:"all",label:a("kb.allDocs")},...(((L=F.data)==null?void 0:L.items)??[]).map(s=>({value:String(s.id),label:s.title}))],children:[e.jsx(O,{className:"w-52",children:e.jsx(G,{placeholder:a("kb.allDocs")})}),e.jsxs(J,{children:[e.jsx(C,{value:"all",children:a("kb.allDocs")}),(((V=F.data)==null?void 0:V.items)??[]).map(s=>e.jsx(C,{value:String(s.id),children:s.title},s.id))]})]})]}),b.data&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs(k,{variant:"outline",children:[a("kb.chunkCount"),":",p.length]}),e.jsxs(k,{variant:"outline",children:[a("kb.parents"),":",_.length]}),e.jsxs(k,{variant:"outline",children:[a("kb.embedded"),":",Y,"/",p.length]})]})]}),b.isLoading?e.jsx(Ae,{rows:6}):_.length===0?e.jsx(Me,{icon:Qe,title:a("kb.noChunks"),description:a("kb.noChunksDesc")}):e.jsx(he,{children:e.jsx(ge,{className:"p-0",children:e.jsxs(Ne,{children:[e.jsx(we,{children:e.jsxs(z,{children:[e.jsx(m,{className:"w-8"}),e.jsx(m,{children:a("layout.kb")}),e.jsx(m,{children:a("layout.kbDocs")}),e.jsx(m,{className:"w-12",children:"#"}),e.jsx(m,{className:"w-16",children:a("kb.pageCol")}),e.jsx(m,{className:"w-20",children:a("kb.type")}),e.jsx(m,{children:a("kb.breadcrumb")}),e.jsx(m,{className:"w-24",children:a("kb.bytes")}),e.jsx(m,{className:"w-24",children:a("kb.vectorCol")}),e.jsx(m,{className:"text-end",children:a("common.actions")})]})}),e.jsx(ye,{children:_.map(({parent:s,children:h})=>e.jsx(Ve,{parent:s,children:h,expanded:g,onToggle:ee,onEdit:se,onDelete:D,deletePending:S.isPending,t:a},s.id))})]})})}),P>0&&e.jsx(Fe,{page:u,totalPages:ne,total:P,onPageChange:s=>x({page:s===1?void 0:String(s)})}),e.jsx(pe,{open:!!t,children:e.jsxs(je,{showCloseButton:!1,className:"flex max-h-[85vh] sm:max-w-3xl flex-col",children:[e.jsx(be,{children:e.jsx(fe,{children:a("kb.editChunk")})}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-2",children:[e.jsx(ve,{children:a("kb.mdContent")}),e.jsx(Ce,{className:"min-h-0 flex-1 resize-none font-mono text-xs",value:w,onChange:s=>A(s.target.value)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("kb.editChunkHint")})]}),e.jsxs(ke,{children:[e.jsx(q,{size:"sm",variant:"outline",onClick:()=>N(null),children:a("common.cancel")}),e.jsx(q,{size:"sm",disabled:!w.trim()||T.isPending,onClick:()=>{t&&T.mutate(t)},children:T.isPending?a("common.saving"):a("common.save")})]})]})}),e.jsx(De,{open:!!y,onOpenChange:s=>{s||D(null)},children:e.jsxs(Te,{children:[e.jsxs(Se,{children:[e.jsx(_e,{children:a("common.confirmDeleteTitle")}),e.jsx(Pe,{children:a("kb.confirmDeleteChunk")})]}),e.jsxs(Ee,{children:[e.jsx(qe,{children:a("common.cancel")}),e.jsx(ze,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",disabled:S.isPending,onClick:()=>{y&&S.mutate(y.id)},children:a("common.delete")})]})]})})]})}function Ve({parent:a,children:d,expanded:l,onToggle:x,onEdit:c,onDelete:i,deletePending:u,t:g}){const o=l.has(a.id);return e.jsxs(e.Fragment,{children:[e.jsx(W,{chunk:a,level:0,chevron:d.length>0?o?"down":"right":null,expanded:l.has(a.id),onToggle:x,onEdit:c,onDelete:i,deletePending:u,t:g}),o&&d.map(t=>e.jsx(W,{chunk:t,level:1,chevron:null,expanded:l.has(t.id),onToggle:x,onEdit:c,onDelete:i,deletePending:u,t:g},t.id))]})}function W({chunk:a,level:d,chevron:l,expanded:x,onToggle:c,onEdit:i,onDelete:u,deletePending:g,t:o}){return e.jsxs(e.Fragment,{children:[e.jsxs(z,{className:`cursor-pointer hover:bg-muted/50 ${d===1?"bg-muted/30":""}`,onClick:()=>c(a.id),children:[e.jsxs(r,{className:"w-8",children:[l==="down"&&e.jsx(re,{className:"size-4 text-muted-foreground"}),l==="right"&&e.jsx(de,{className:"size-4 text-muted-foreground"})]}),e.jsx(r,{className:"whitespace-nowrap text-muted-foreground",children:a.kb_name??"-"}),e.jsx(r,{className:"max-w-48",children:a.doc_id&&a.doc_title?e.jsxs(X,{to:`/kb/chunks?doc_id=${a.doc_id}`,className:"block truncate hover:underline",onClick:t=>t.stopPropagation(),children:[e.jsx(ce,{className:"me-1 inline size-3.5 text-muted-foreground"}),a.doc_title]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),e.jsx(r,{className:"text-muted-foreground",children:a.page??"-"}),e.jsx(r,{className:"text-muted-foreground",children:a.seq}),e.jsx(r,{children:e.jsx(k,{variant:d===1?"secondary":"outline",children:o(d===1?"kb.child":"kb.parent")})}),e.jsx(r,{className:"max-w-96",children:e.jsxs("div",{className:"truncate text-sm",children:[a.breadcrumb&&e.jsxs("span",{className:"me-1 text-xs text-muted-foreground",children:[a.breadcrumb," ›"]}),a.preview]})}),e.jsx(r,{className:"text-muted-foreground",children:a.bytes}),e.jsx(r,{children:e.jsx(k,{variant:a.has_embedding?"default":"secondary",children:a.has_embedding?o("kb.embedded"):o("kb.notEmbedded")})}),e.jsx(r,{className:"text-end",children:e.jsxs(me,{children:[e.jsx(xe,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",onClick:t=>t.stopPropagation(),children:e.jsx(Be,{className:"size-4"})}),e.jsxs(ue,{align:"end",children:[e.jsxs(H,{onClick:t=>{t.stopPropagation(),i(a)},children:[e.jsx(Ie,{className:"size-4 me-2"}),o("kb.editChunk")]}),e.jsxs(H,{className:"text-destructive",onClick:t=>{t.stopPropagation(),u(a)},disabled:g,children:[e.jsx(Le,{className:"size-4 me-2"}),o("common.delete")]})]})]})})]}),x&&e.jsx(z,{children:e.jsx(r,{colSpan:9,className:"bg-muted/20 p-0",children:e.jsx("pre",{className:"max-h-96 overflow-auto whitespace-pre-wrap p-4 font-mono text-xs leading-relaxed",children:a.content})})})]})}export{ps as default}; +import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as ie,cB as le,cA as E,ak as X,n as q,g as oe,ca as v,bl as f,q as re,r as de,a4 as ce,T as me,_ as xe,U as ue,V as H}from"./index-C-uFVPpg.js";import{u as U}from"./useMutation-BlIm5cor.js";import{B as k}from"./badge-Dhxp0jil.js";import{C as he,a as ge}from"./card-BBIqLCR8.js";import{D as pe,a as je,d as be,e as fe,c as ke}from"./dialog-if7Fez9x.js";import{L as ve}from"./label-DiZ0cGhf.js";import{T as Ce}from"./textarea-BhaIg3vS.js";import{S as R,e as O,f as G,a as Z,c as C}from"./select-DJZwiot8.js";import{T as Ne,d as we,e as z,c as m,a as ye,b as r}from"./table-BoLxzYJ7.js";import{A as De,c as Te,f as Se,g as _e,d as Pe,e as Ee,b as qe,a as ze}from"./alert-dialog-C8VouOFc.js";import{T as Ae}from"./table-skeleton-fqjGRt14.js";import{E as Me}from"./empty-state-CCcgx4uH.js";import{P as Ke}from"./pagination-bar-BuL5EI1J.js";import{u as Fe}from"./use-url-state-BBO3na5E.js";import{D as Qe}from"./database-BWHgXN31.js";import{E as Be}from"./ellipsis-vertical-B-dHvJs4.js";import{P as Ie}from"./pencil-xelQXmMG.js";import{T as Le}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./chevron-left-C_tZtLI6.js";const J=50;function ps(){var Q,B,I,L,V;const{t:a}=ie(),d=le(),{get:l,set:x}=Fe(),c=l("doc_id")||null,i=l("kb_id")||null,u=Math.max(1,l("page")&&parseInt(l("page"),10)||1),[g,o]=j.useState(new Set),[t,N]=j.useState(null),[w,A]=j.useState(""),[y,D]=j.useState(null),M=E({queryKey:["kb-kbs"],queryFn:()=>f.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),K=E({queryKey:["kb-docs-options",i],queryFn:()=>f.send("/admin/kb/documents",{query:{...i?{kb_id:i}:{},page:"1",page_size:"100"}})}),b=E({queryKey:["kb-chunks",c,i,u],queryFn:()=>{const s={page:String(u),page_size:String(J)};return c?s.doc_id=c:i&&(s.kb_id=i),f.send("/admin/kb/chunks",{query:s})}}),F=()=>{d.invalidateQueries({queryKey:["kb-chunks"]}),d.invalidateQueries({queryKey:["kb-docs"]}),d.invalidateQueries({queryKey:["kb-stats"]})},T=U({mutationFn:async s=>f.send(`/admin/kb/chunks/${s.id}`,{method:"PUT",body:{content:w}}),onSuccess:()=>{v.success(a("kb.chunkUpdated")),N(null),F()},onError:s=>v.error(s.message)}),S=U({mutationFn:async s=>f.send(`/admin/kb/chunks/${s}`,{method:"DELETE"}),onSuccess:()=>{v.success(a("kb.chunkDeleted")),D(null),F()},onError:s=>v.error(`${a("common.failedToDelete")}:${s.message}`)}),p=j.useMemo(()=>{var s;return((s=b.data)==null?void 0:s.items)??[]},[b.data]),_=j.useMemo(()=>{const s=p.filter(n=>!n.parent_id),h=new Map;for(const n of p)if(n.parent_id){const $=h.get(n.parent_id)??[];$.push(n),h.set(n.parent_id,$)}return s.map(n=>({parent:n,children:h.get(n.id)??[]}))},[p]),Y=p.filter(s=>s.has_embedding).length;function ee(s){o(h=>{const n=new Set(h);return n.has(s)?n.delete(s):n.add(s),n})}function se(s){A(s.content),N(s)}function ae(s){x({kb_id:s==="all"?void 0:s,doc_id:void 0,page:void 0})}function te(s){x({doc_id:s==="all"?void 0:s,page:void 0})}const P=((Q=b.data)==null?void 0:Q.total)??0,ne=Math.max(1,Math.ceil(P/J));return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c&&e.jsx(X,{to:"/kb/docs",children:e.jsx(q,{size:"icon-xs",variant:"ghost",title:a("kb.backToDocs"),children:e.jsx(oe,{className:"size-4"})})}),e.jsxs(R,{value:i??"all",onValueChange:s=>{s&&ae(s)},items:[{value:"all",label:a("kb.allKbs")},...(((B=M.data)==null?void 0:B.items)??[]).map(s=>({value:String(s.id),label:s.name}))],children:[e.jsx(O,{className:"w-52",children:e.jsx(G,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(Z,{children:[e.jsx(C,{value:"all",children:a("kb.allKbs")}),(((I=M.data)==null?void 0:I.items)??[]).map(s=>e.jsx(C,{value:String(s.id),children:s.name},s.id))]})]}),e.jsxs(R,{value:c??"all",onValueChange:s=>{s&&te(s)},items:[{value:"all",label:a("kb.allDocs")},...(((L=K.data)==null?void 0:L.items)??[]).map(s=>({value:String(s.id),label:s.title}))],children:[e.jsx(O,{className:"w-52",children:e.jsx(G,{placeholder:a("kb.allDocs")})}),e.jsxs(Z,{children:[e.jsx(C,{value:"all",children:a("kb.allDocs")}),(((V=K.data)==null?void 0:V.items)??[]).map(s=>e.jsx(C,{value:String(s.id),children:s.title},s.id))]})]})]}),b.data&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs(k,{variant:"outline",children:[a("kb.chunkCount"),":",p.length]}),e.jsxs(k,{variant:"outline",children:[a("kb.parents"),":",_.length]}),e.jsxs(k,{variant:"outline",children:[a("kb.embedded"),":",Y,"/",p.length]})]})]}),b.isLoading?e.jsx(Ae,{rows:6}):_.length===0?e.jsx(Me,{icon:Qe,title:a("kb.noChunks"),description:a("kb.noChunksDesc")}):e.jsx(he,{children:e.jsx(ge,{className:"p-0",children:e.jsxs(Ne,{children:[e.jsx(we,{children:e.jsxs(z,{children:[e.jsx(m,{className:"w-8"}),e.jsx(m,{children:a("layout.kb")}),e.jsx(m,{children:a("layout.kbDocs")}),e.jsx(m,{className:"w-12",children:"#"}),e.jsx(m,{className:"w-16",children:a("kb.pageCol")}),e.jsx(m,{className:"w-20",children:a("kb.type")}),e.jsx(m,{children:a("kb.breadcrumb")}),e.jsx(m,{className:"w-24",children:a("kb.bytes")}),e.jsx(m,{className:"w-24",children:a("kb.vectorCol")}),e.jsx(m,{className:"text-end",children:a("common.actions")})]})}),e.jsx(ye,{children:_.map(({parent:s,children:h})=>e.jsx(Ve,{parent:s,children:h,expanded:g,onToggle:ee,onEdit:se,onDelete:D,deletePending:S.isPending,t:a},s.id))})]})})}),P>0&&e.jsx(Ke,{page:u,totalPages:ne,total:P,onPageChange:s=>x({page:s===1?void 0:String(s)})}),e.jsx(pe,{open:!!t,children:e.jsxs(je,{showCloseButton:!1,className:"flex max-h-[85vh] sm:max-w-3xl flex-col",children:[e.jsx(be,{children:e.jsx(fe,{children:a("kb.editChunk")})}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-2",children:[e.jsx(ve,{children:a("kb.mdContent")}),e.jsx(Ce,{className:"min-h-0 flex-1 resize-none font-mono text-xs",value:w,onChange:s=>A(s.target.value)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("kb.editChunkHint")})]}),e.jsxs(ke,{children:[e.jsx(q,{size:"sm",variant:"outline",onClick:()=>N(null),children:a("common.cancel")}),e.jsx(q,{size:"sm",disabled:!w.trim()||T.isPending,onClick:()=>{t&&T.mutate(t)},children:T.isPending?a("common.saving"):a("common.save")})]})]})}),e.jsx(De,{open:!!y,onOpenChange:s=>{s||D(null)},children:e.jsxs(Te,{children:[e.jsxs(Se,{children:[e.jsx(_e,{children:a("common.confirmDeleteTitle")}),e.jsx(Pe,{children:a("kb.confirmDeleteChunk")})]}),e.jsxs(Ee,{children:[e.jsx(qe,{children:a("common.cancel")}),e.jsx(ze,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",disabled:S.isPending,onClick:()=>{y&&S.mutate(y.id)},children:a("common.delete")})]})]})})]})}function Ve({parent:a,children:d,expanded:l,onToggle:x,onEdit:c,onDelete:i,deletePending:u,t:g}){const o=l.has(a.id);return e.jsxs(e.Fragment,{children:[e.jsx(W,{chunk:a,level:0,chevron:d.length>0?o?"down":"right":null,expanded:l.has(a.id),onToggle:x,onEdit:c,onDelete:i,deletePending:u,t:g}),o&&d.map(t=>e.jsx(W,{chunk:t,level:1,chevron:null,expanded:l.has(t.id),onToggle:x,onEdit:c,onDelete:i,deletePending:u,t:g},t.id))]})}function W({chunk:a,level:d,chevron:l,expanded:x,onToggle:c,onEdit:i,onDelete:u,deletePending:g,t:o}){return e.jsxs(e.Fragment,{children:[e.jsxs(z,{className:`cursor-pointer hover:bg-muted/50 ${d===1?"bg-muted/30":""}`,onClick:()=>c(a.id),children:[e.jsxs(r,{className:"w-8",children:[l==="down"&&e.jsx(re,{className:"size-4 text-muted-foreground"}),l==="right"&&e.jsx(de,{className:"size-4 text-muted-foreground"})]}),e.jsx(r,{className:"whitespace-nowrap text-muted-foreground",children:a.kb_name??"-"}),e.jsx(r,{className:"max-w-48",children:a.doc_id&&a.doc_title?e.jsxs(X,{to:`/kb/chunks?doc_id=${a.doc_id}`,className:"block truncate hover:underline",onClick:t=>t.stopPropagation(),children:[e.jsx(ce,{className:"me-1 inline size-3.5 text-muted-foreground"}),a.doc_title]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),e.jsx(r,{className:"text-muted-foreground",children:a.page??"-"}),e.jsx(r,{className:"text-muted-foreground",children:a.seq}),e.jsx(r,{children:e.jsx(k,{variant:d===1?"secondary":"outline",children:o(d===1?"kb.child":"kb.parent")})}),e.jsx(r,{className:"max-w-96",children:e.jsxs("div",{className:"truncate text-sm",children:[a.breadcrumb&&e.jsxs("span",{className:"me-1 text-xs text-muted-foreground",children:[a.breadcrumb," ›"]}),a.preview]})}),e.jsx(r,{className:"text-muted-foreground",children:a.bytes}),e.jsx(r,{children:e.jsx(k,{variant:a.has_embedding?"default":"secondary",children:a.has_embedding?o("kb.embedded"):o("kb.notEmbedded")})}),e.jsx(r,{className:"text-end",children:e.jsxs(me,{children:[e.jsx(xe,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",onClick:t=>t.stopPropagation(),children:e.jsx(Be,{className:"size-4"})}),e.jsxs(ue,{align:"end",children:[e.jsxs(H,{onClick:t=>{t.stopPropagation(),i(a)},children:[e.jsx(Ie,{className:"size-4 me-2"}),o("kb.editChunk")]}),e.jsxs(H,{className:"text-destructive",onClick:t=>{t.stopPropagation(),u(a)},disabled:g,children:[e.jsx(Le,{className:"size-4 me-2"}),o("common.delete")]})]})]})})]}),x&&e.jsx(z,{children:e.jsx(r,{colSpan:9,className:"bg-muted/20 p-0",children:e.jsx("pre",{className:"max-h-96 overflow-auto whitespace-pre-wrap p-4 font-mono text-xs leading-relaxed",children:a.content})})})]})}export{ps as default}; diff --git a/adminui/assets/circle-alert-DGgaAjA1.js b/adminui/assets/circle-alert-nC4JTWNi.js similarity index 89% rename from adminui/assets/circle-alert-DGgaAjA1.js rename to adminui/assets/circle-alert-nC4JTWNi.js index 482cafcd..735d62c9 100644 --- a/adminui/assets/circle-alert-DGgaAjA1.js +++ b/adminui/assets/circle-alert-nC4JTWNi.js @@ -1,4 +1,4 @@ -import{bp as e}from"./index-DFelzBez.js";/** +import{bq as e}from"./index-C-uFVPpg.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-DuqRRx-0.js b/adminui/assets/circle-check-big-WjXNJO8D.js similarity index 87% rename from adminui/assets/circle-check-big-DuqRRx-0.js rename to adminui/assets/circle-check-big-WjXNJO8D.js index de4e4f73..a8ff375c 100644 --- a/adminui/assets/circle-check-big-DuqRRx-0.js +++ b/adminui/assets/circle-check-big-WjXNJO8D.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/circle-x-B2QO34ya.js b/adminui/assets/circle-x-D4bMzyXK.js similarity index 88% rename from adminui/assets/circle-x-B2QO34ya.js rename to adminui/assets/circle-x-D4bMzyXK.js index 15c46ea0..0e117337 100644 --- a/adminui/assets/circle-x-B2QO34ya.js +++ b/adminui/assets/circle-x-D4bMzyXK.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/code-editor-DZgggbjW.js b/adminui/assets/code-editor-DjTus6iJ.js similarity index 99% rename from adminui/assets/code-editor-DZgggbjW.js rename to adminui/assets/code-editor-DjTus6iJ.js index a47eacf1..6a1ddb1d 100644 --- a/adminui/assets/code-editor-DZgggbjW.js +++ b/adminui/assets/code-editor-DjTus6iJ.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-vOqM56Ks.js";import{cU as ju,bl as Nu}from"./index-DFelzBez.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-vOqM56Ks.js";import{cV as ju,bm as Nu}from"./index-C-uFVPpg.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-C6Jdf3VS.js b/adminui/assets/comments-CDaESYiI.js similarity index 75% rename from adminui/assets/comments-C6Jdf3VS.js rename to adminui/assets/comments-CDaESYiI.js index f3797f1a..1c191aa2 100644 --- a/adminui/assets/comments-C6Jdf3VS.js +++ b/adminui/assets/comments-CDaESYiI.js @@ -1,6 +1,6 @@ -import{f as k,j as s}from"./vendor-react-j_G0Dyx0.js";import{u as oe}from"./use-url-state-BBO3na5E.js";import{bp as ie,cJ as re,cg as ce,cA as le,cz as me,an as K,ak as de,n as g,T as ue,_ as pe,U as he,V as N,aE as f,c9 as i,bk as h}from"./index-DFelzBez.js";import{u as j}from"./useMutation-DgRiHz67.js";import{B as xe}from"./badge-BvrzcoWP.js";import{C as ge,a as fe}from"./card-D3QxRGt-.js";import{C as U}from"./checkbox-ZiPbJKLR.js";import{T as je,d as be,e as w,c as m,a as Se,b as l}from"./table-gihdE9_j.js";import{A as O,c as L,f as V,g as H,d as I,e as R,b as J,a as X}from"./alert-dialog-B-lBTnCF.js";import{C as o}from"./types-C-xO67t8.js";import{P as ve}from"./pagination-bar-DD_HkQGa.js";import{T as ye}from"./table-skeleton-BtLTAVzI.js";import{E as Ce}from"./empty-state-D0NvGCXa.js";import{E as De}from"./ellipsis-vertical-UHYLUh-c.js";import{C as ke}from"./circle-check-big-DuqRRx-0.js";import{C as Ne}from"./circle-x-B2QO34ya.js";import{T as we}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./chevron-left-CbJIXgY2.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{bq as ie,cK as re,ch as ce,cB as le,cA as me,an as K,ak as de,n as g,T as ue,_ as pe,U as he,V as N,aE as f,ca as i,bl as h}from"./index-C-uFVPpg.js";import{u as j}from"./useMutation-BlIm5cor.js";import{B as xe}from"./badge-Dhxp0jil.js";import{C as ge,a as fe}from"./card-BBIqLCR8.js";import{C as U}from"./checkbox-CP5mLBLk.js";import{T as je,d as be,e as w,c as m,a as Se,b as l}from"./table-BoLxzYJ7.js";import{A as O,c as L,f as V,g as H,d as I,e as R,b as X,a as $}from"./alert-dialog-C8VouOFc.js";import{C as o}from"./types-C-xO67t8.js";import{P as ve}from"./pagination-bar-BuL5EI1J.js";import{T as ye}from"./table-skeleton-fqjGRt14.js";import{E as Ce}from"./empty-state-CCcgx4uH.js";import{E as De}from"./ellipsis-vertical-B-dHvJs4.js";import{C as ke}from"./circle-check-big-WjXNJO8D.js";import{C as Ne}from"./circle-x-D4bMzyXK.js";import{T as we}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./chevron-left-C_tZtLI6.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Te=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Ae=ie("square-check-big",Te);function ze(t){switch(t){case o.approved:return"default";case o.pending:return"secondary";case o.spam:return"destructive";default:return"secondary"}}const Pe=[{value:o.pending,label:"Pending"},{value:o.approved,label:"Approved"},{value:o.spam,label:"Spam"}];function ts(){var Q,F,_;const{t}=re(),{isAdmin:T}=ce(),c=le(),{get:$,getInt:G,set:A}=oe(),d=G("page"),b=$("status")||"all",[r,u]=k.useState(new Set),[S,v]=k.useState(null),[W,y]=k.useState(!1),z=20,x=me({queryKey:["admin-comments",d],queryFn:async()=>{const e=await h.admin.comments.list({page:d,page_size:z});return{...e,items:e.items.map(n=>({...n,id:String(n.id)}))}},enabled:T()}),P=j({mutationFn:({id:e,status:n})=>h.admin.comments.updateStatus(e,n),onSuccess:()=>{i.success(t("comments.commentStatusUpdated")),c.invalidateQueries({queryKey:["admin-comments"]})},onError:e=>{e instanceof f?i.error(e.message):i.error(t("comments.failedToUpdateStatus"))}}),M=j({mutationFn:e=>h.admin.comments.delete(e),onMutate:async e=>{await c.cancelQueries({queryKey:["admin-comments"]});const n=c.getQueryData(["admin-comments",d]);return c.setQueryData(["admin-comments",d],a=>a&&{...a,items:a.items.filter(D=>D.id!==e)}),{previousData:n}},onError:(e,n,a)=>{a!=null&&a.previousData&&c.setQueryData(["admin-comments",d],a.previousData),e instanceof f?i.error(e.message):i.error(t("comments.failedToDelete"))},onSuccess:()=>{i.success(t("comments.commentDeleted")),u(new Set)},onSettled:()=>{c.invalidateQueries({queryKey:["admin-comments"]})}}),C=j({mutationFn:({ids:e,status:n})=>Promise.all(e.map(a=>h.admin.comments.updateStatus(a,n))),onSuccess:(e,n)=>{i.success(t("comments.bulkActionDone",{count:n.ids.length,status:n.status})),c.invalidateQueries({queryKey:["admin-comments"]}),u(new Set)},onError:e=>{e instanceof f?i.error(e.message):i.error(t("comments.bulkActionFailed"))}}),B=j({mutationFn:e=>Promise.all(e.map(n=>h.admin.comments.delete(n))),onSuccess:(e,n)=>{i.success(t("comments.bulkDeleted",{count:n.length})),c.invalidateQueries({queryKey:["admin-comments"]}),u(new Set)},onError:e=>{e instanceof f?i.error(e.message):i.error(t("comments.bulkDeleteFailed"))}});function Y(e){v(e)}function Z(){S&&(M.mutate(S),v(null))}function ee(e){u(n=>{const a=new Set(n);return a.has(e)?a.delete(e):a.add(e),a})}function se(e){u(n=>e.every(D=>n.has(D))?new Set:new Set(e))}function E(e){r.size!==0&&C.mutate({ids:Array.from(r),status:e})}function te(){r.size!==0&&y(!0)}function ne(){B.mutate(Array.from(r)),y(!1)}if(!T())return s.jsx("div",{className:"flex min-h-[50vh] items-center justify-center",children:s.jsxs("div",{className:"text-center space-y-4",children:[s.jsx(K,{className:"size-12 mx-auto text-muted-foreground"}),s.jsx("h2",{className:"text-xl font-semibold",children:t("common.adminOnly")}),s.jsx("p",{className:"text-muted-foreground",children:t("common.adminOnlyMsg")}),s.jsx(de,{href:"/dashboard",children:s.jsx(g,{variant:"outline",children:t("common.backToDashboard")})})]})});const q=((Q=x.data)==null?void 0:Q.items)??[],p=b==="all"?q:q.filter(e=>e.status===b),ae=Math.ceil((((F=x.data)==null?void 0:F.total)??0)/z);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"space-y-6",children:[s.jsx("div",{className:"flex gap-1 bg-muted rounded-lg p-[3px] w-fit",children:["all",...Pe.map(e=>e.value)].map(e=>s.jsx("button",{type:"button",onClick:()=>A({status:e},!0),className:`px-3 py-1 text-sm rounded-md transition-colors ${b===e?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:e==="all"?t("comments.all"):e===o.pending?t("comments.pending"):e===o.approved?t("comments.approved"):t("comments.spam")},e))}),r.size>0&&s.jsxs("div",{className:"flex items-center gap-2 p-2 bg-muted rounded-md",children:[s.jsx(Ae,{className:"size-4"}),s.jsx("span",{className:"text-sm font-medium",children:t("comments.selected",{count:r.size})}),s.jsx(g,{variant:"outline",size:"sm",onClick:()=>E(o.approved),disabled:C.isPending,children:t("comments.approve")}),s.jsx(g,{variant:"outline",size:"sm",onClick:()=>E(o.spam),disabled:C.isPending,children:t("comments.reject")}),s.jsx(g,{variant:"destructive",size:"sm",onClick:te,disabled:B.isPending,children:t("common.delete")})]}),s.jsx(ge,{children:s.jsx(fe,{className:"p-0",children:x.isLoading?s.jsx(ye,{cols:7}):s.jsxs(je,{children:[s.jsx(be,{children:s.jsxs(w,{children:[s.jsx(m,{className:"w-10",children:s.jsx(U,{checked:p.length>0&&p.every(e=>r.has(e.id)),onCheckedChange:()=>se(p.map(e=>e.id))})}),s.jsx(m,{children:t("comments.author")}),s.jsx(m,{children:t("comments.contentCol")}),s.jsx(m,{children:t("comments.post")}),s.jsx(m,{children:t("common.status")}),s.jsx(m,{children:t("comments.date")}),s.jsx(m,{className:"text-end",children:t("common.actions")})]})}),s.jsx(Se,{children:p.length===0?s.jsx(w,{children:s.jsx(l,{colSpan:7,children:s.jsx(Ce,{icon:K,title:t("comments.noComments"),description:t("comments.noCommentsDesc")})})}):p.map(e=>s.jsxs(w,{className:r.has(e.id)?"bg-muted/50":"",children:[s.jsx(l,{children:s.jsx(U,{checked:r.has(e.id),onCheckedChange:()=>ee(e.id)})}),s.jsx(l,{className:"font-medium whitespace-nowrap",children:e.nickname||"User"}),s.jsx(l,{className:"max-w-[300px] truncate",children:e.content}),s.jsx(l,{className:"whitespace-nowrap",children:s.jsx("span",{className:"text-sm",children:e.post_title})}),s.jsx(l,{children:s.jsx(xe,{variant:ze(e.status),children:e.status})}),s.jsx(l,{className:"whitespace-nowrap",children:new Date(e.created_at).toLocaleDateString()}),s.jsx(l,{className:"text-end",children:s.jsxs(ue,{children:[s.jsx(pe,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:s.jsx(De,{className:"size-4"})}),s.jsxs(he,{align:"end",children:[e.status!==o.approved&&s.jsxs(N,{onClick:()=>P.mutate({id:e.id,status:o.approved}),children:[s.jsx(ke,{className:"size-4 text-green-600"}),t("comments.approve")]}),e.status!==o.spam&&s.jsxs(N,{onClick:()=>P.mutate({id:e.id,status:o.spam}),children:[s.jsx(Ne,{className:"size-4 text-red-500"}),t("comments.reject")]}),s.jsxs(N,{className:"text-destructive",onClick:()=>Y(e.id),disabled:M.isPending,children:[s.jsx(we,{className:"size-4"}),t("common.delete")]})]})]})})]},e.id))})]})})}),s.jsx(ve,{page:d,totalPages:ae,total:((_=x.data)==null?void 0:_.total)??0,onPageChange:e=>A({page:e})})]}),s.jsx(O,{open:!!S,onOpenChange:e=>{e||v(null)},children:s.jsxs(L,{children:[s.jsxs(V,{children:[s.jsx(H,{children:t("common.confirmDeleteTitle")}),s.jsx(I,{children:t("comments.confirmDelete")})]}),s.jsxs(R,{children:[s.jsx(J,{children:t("common.cancel")}),s.jsx(X,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:Z,children:t("common.delete")})]})]})}),s.jsx(O,{open:W,onOpenChange:e=>{e||y(!1)},children:s.jsxs(L,{children:[s.jsxs(V,{children:[s.jsx(H,{children:t("common.confirmDeleteTitle")}),s.jsx(I,{children:t("comments.confirmBulkDelete",{count:r.size})})]}),s.jsxs(R,{children:[s.jsx(J,{children:t("common.cancel")}),s.jsx(X,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:ne,children:t("common.delete")})]})]})})]})}export{ts as default}; + */const Te=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Ae=ie("square-check-big",Te);function ze(t){switch(t){case o.approved:return"default";case o.pending:return"secondary";case o.spam:return"destructive";default:return"secondary"}}const Pe=[{value:o.pending,label:"Pending"},{value:o.approved,label:"Approved"},{value:o.spam,label:"Spam"}];function ts(){var Q,F,_;const{t}=re(),{isAdmin:T}=ce(),c=le(),{get:G,getInt:J,set:A}=oe(),d=J("page"),b=G("status")||"all",[r,u]=k.useState(new Set),[S,v]=k.useState(null),[W,y]=k.useState(!1),z=20,x=me({queryKey:["admin-comments",d],queryFn:async()=>{const e=await h.admin.comments.list({page:d,page_size:z});return{...e,items:e.items.map(n=>({...n,id:String(n.id)}))}},enabled:T()}),P=j({mutationFn:({id:e,status:n})=>h.admin.comments.updateStatus(e,n),onSuccess:()=>{i.success(t("comments.commentStatusUpdated")),c.invalidateQueries({queryKey:["admin-comments"]})},onError:e=>{e instanceof f?i.error(e.message):i.error(t("comments.failedToUpdateStatus"))}}),B=j({mutationFn:e=>h.admin.comments.delete(e),onMutate:async e=>{await c.cancelQueries({queryKey:["admin-comments"]});const n=c.getQueryData(["admin-comments",d]);return c.setQueryData(["admin-comments",d],a=>a&&{...a,items:a.items.filter(D=>D.id!==e)}),{previousData:n}},onError:(e,n,a)=>{a!=null&&a.previousData&&c.setQueryData(["admin-comments",d],a.previousData),e instanceof f?i.error(e.message):i.error(t("comments.failedToDelete"))},onSuccess:()=>{i.success(t("comments.commentDeleted")),u(new Set)},onSettled:()=>{c.invalidateQueries({queryKey:["admin-comments"]})}}),C=j({mutationFn:({ids:e,status:n})=>Promise.all(e.map(a=>h.admin.comments.updateStatus(a,n))),onSuccess:(e,n)=>{i.success(t("comments.bulkActionDone",{count:n.ids.length,status:n.status})),c.invalidateQueries({queryKey:["admin-comments"]}),u(new Set)},onError:e=>{e instanceof f?i.error(e.message):i.error(t("comments.bulkActionFailed"))}}),M=j({mutationFn:e=>Promise.all(e.map(n=>h.admin.comments.delete(n))),onSuccess:(e,n)=>{i.success(t("comments.bulkDeleted",{count:n.length})),c.invalidateQueries({queryKey:["admin-comments"]}),u(new Set)},onError:e=>{e instanceof f?i.error(e.message):i.error(t("comments.bulkDeleteFailed"))}});function Y(e){v(e)}function Z(){S&&(B.mutate(S),v(null))}function ee(e){u(n=>{const a=new Set(n);return a.has(e)?a.delete(e):a.add(e),a})}function se(e){u(n=>e.every(D=>n.has(D))?new Set:new Set(e))}function q(e){r.size!==0&&C.mutate({ids:Array.from(r),status:e})}function te(){r.size!==0&&y(!0)}function ne(){M.mutate(Array.from(r)),y(!1)}if(!T())return s.jsx("div",{className:"flex min-h-[50vh] items-center justify-center",children:s.jsxs("div",{className:"text-center space-y-4",children:[s.jsx(K,{className:"size-12 mx-auto text-muted-foreground"}),s.jsx("h2",{className:"text-xl font-semibold",children:t("common.adminOnly")}),s.jsx("p",{className:"text-muted-foreground",children:t("common.adminOnlyMsg")}),s.jsx(de,{href:"/dashboard",children:s.jsx(g,{variant:"outline",children:t("common.backToDashboard")})})]})});const E=((Q=x.data)==null?void 0:Q.items)??[],p=b==="all"?E:E.filter(e=>e.status===b),ae=Math.ceil((((F=x.data)==null?void 0:F.total)??0)/z);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"space-y-6",children:[s.jsx("div",{className:"flex gap-1 bg-muted rounded-lg p-[3px] w-fit",children:["all",...Pe.map(e=>e.value)].map(e=>s.jsx("button",{type:"button",onClick:()=>A({status:e},!0),className:`px-3 py-1 text-sm rounded-md transition-colors ${b===e?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:e==="all"?t("comments.all"):e===o.pending?t("comments.pending"):e===o.approved?t("comments.approved"):t("comments.spam")},e))}),r.size>0&&s.jsxs("div",{className:"flex items-center gap-2 p-2 bg-muted rounded-md",children:[s.jsx(Ae,{className:"size-4"}),s.jsx("span",{className:"text-sm font-medium",children:t("comments.selected",{count:r.size})}),s.jsx(g,{variant:"outline",size:"sm",onClick:()=>q(o.approved),disabled:C.isPending,children:t("comments.approve")}),s.jsx(g,{variant:"outline",size:"sm",onClick:()=>q(o.spam),disabled:C.isPending,children:t("comments.reject")}),s.jsx(g,{variant:"destructive",size:"sm",onClick:te,disabled:M.isPending,children:t("common.delete")})]}),s.jsx(ge,{children:s.jsx(fe,{className:"p-0",children:x.isLoading?s.jsx(ye,{cols:7}):s.jsxs(je,{children:[s.jsx(be,{children:s.jsxs(w,{children:[s.jsx(m,{className:"w-10",children:s.jsx(U,{checked:p.length>0&&p.every(e=>r.has(e.id)),onCheckedChange:()=>se(p.map(e=>e.id))})}),s.jsx(m,{children:t("comments.author")}),s.jsx(m,{children:t("comments.contentCol")}),s.jsx(m,{children:t("comments.post")}),s.jsx(m,{children:t("common.status")}),s.jsx(m,{children:t("comments.date")}),s.jsx(m,{className:"text-end",children:t("common.actions")})]})}),s.jsx(Se,{children:p.length===0?s.jsx(w,{children:s.jsx(l,{colSpan:7,children:s.jsx(Ce,{icon:K,title:t("comments.noComments"),description:t("comments.noCommentsDesc")})})}):p.map(e=>s.jsxs(w,{className:r.has(e.id)?"bg-muted/50":"",children:[s.jsx(l,{children:s.jsx(U,{checked:r.has(e.id),onCheckedChange:()=>ee(e.id)})}),s.jsx(l,{className:"font-medium whitespace-nowrap",children:e.nickname||"User"}),s.jsx(l,{className:"max-w-[300px] truncate",children:e.content}),s.jsx(l,{className:"whitespace-nowrap",children:s.jsx("span",{className:"text-sm",children:e.post_title})}),s.jsx(l,{children:s.jsx(xe,{variant:ze(e.status),children:e.status})}),s.jsx(l,{className:"whitespace-nowrap",children:new Date(e.created_at).toLocaleDateString()}),s.jsx(l,{className:"text-end",children:s.jsxs(ue,{children:[s.jsx(pe,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:s.jsx(De,{className:"size-4"})}),s.jsxs(he,{align:"end",children:[e.status!==o.approved&&s.jsxs(N,{onClick:()=>P.mutate({id:e.id,status:o.approved}),children:[s.jsx(ke,{className:"size-4 text-green-600"}),t("comments.approve")]}),e.status!==o.spam&&s.jsxs(N,{onClick:()=>P.mutate({id:e.id,status:o.spam}),children:[s.jsx(Ne,{className:"size-4 text-red-500"}),t("comments.reject")]}),s.jsxs(N,{className:"text-destructive",onClick:()=>Y(e.id),disabled:B.isPending,children:[s.jsx(we,{className:"size-4"}),t("common.delete")]})]})]})})]},e.id))})]})})}),s.jsx(ve,{page:d,totalPages:ae,total:((_=x.data)==null?void 0:_.total)??0,onPageChange:e=>A({page:e})})]}),s.jsx(O,{open:!!S,onOpenChange:e=>{e||v(null)},children:s.jsxs(L,{children:[s.jsxs(V,{children:[s.jsx(H,{children:t("common.confirmDeleteTitle")}),s.jsx(I,{children:t("comments.confirmDelete")})]}),s.jsxs(R,{children:[s.jsx(X,{children:t("common.cancel")}),s.jsx($,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:Z,children:t("common.delete")})]})]})}),s.jsx(O,{open:W,onOpenChange:e=>{e||y(!1)},children:s.jsxs(L,{children:[s.jsxs(V,{children:[s.jsx(H,{children:t("common.confirmDeleteTitle")}),s.jsx(I,{children:t("comments.confirmBulkDelete",{count:r.size})})]}),s.jsxs(R,{children:[s.jsx(X,{children:t("common.cancel")}),s.jsx($,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:ne,children:t("common.delete")})]})]})})]})}export{ts as default}; diff --git a/adminui/assets/confirm-delete-dialog-QxeOrQYk.js b/adminui/assets/confirm-delete-dialog-4HgrRwRm.js similarity index 62% rename from adminui/assets/confirm-delete-dialog-QxeOrQYk.js rename to adminui/assets/confirm-delete-dialog-4HgrRwRm.js index a2a51447..a2a19b59 100644 --- a/adminui/assets/confirm-delete-dialog-QxeOrQYk.js +++ b/adminui/assets/confirm-delete-dialog-4HgrRwRm.js @@ -1 +1 @@ -import{f as m,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as g,n}from"./index-DFelzBez.js";import{D as v,a as y,d as C,e as N,b,c as L}from"./dialog-Bx55NyOm.js";import{I as T}from"./input-Bx5u8hTS.js";import{L as K}from"./label-DeKRRvpz.js";function $({open:a,onOpenChange:l,name:s,onConfirm:d,pending:i=!1,title:f,description:x,confirmLabel:D}){const{t:o}=g(),[r,c]=m.useState(""),t=`${a}|${s}`,[j,u]=m.useState(t);j!==t&&(u(t),c(""));const h=s!==""&&r.trim()===s;return e.jsx(v,{open:a,onOpenChange:l,children:e.jsxs(y,{className:"sm:max-w-md",children:[e.jsxs(C,{children:[e.jsx(N,{children:f??o("common.confirmDeleteTitle")}),e.jsx(b,{children:x??o("common.confirmDeleteNameDesc",{name:s})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(K,{htmlFor:"confirm-delete-name",children:o("common.confirmDeleteNameLabel")}),e.jsx(T,{id:"confirm-delete-name",autoComplete:"off",className:"font-mono",value:r,onChange:p=>c(p.target.value),placeholder:s})]}),e.jsxs(L,{children:[e.jsx(n,{variant:"outline",onClick:()=>l(!1),children:o("common.cancel")}),e.jsx(n,{variant:"destructive",disabled:!h||i,onClick:d,children:i?o("common.deleting"):D??o("common.delete")})]})]})})}export{$ as C}; +import{f as m,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as g,n}from"./index-C-uFVPpg.js";import{D as v,a as y,d as C,e as N,b,c as K}from"./dialog-if7Fez9x.js";import{I as L}from"./input-Bp1SimRr.js";import{L as T}from"./label-DiZ0cGhf.js";function $({open:a,onOpenChange:l,name:s,onConfirm:d,pending:i=!1,title:f,description:x,confirmLabel:D}){const{t:o}=g(),[r,c]=m.useState(""),t=`${a}|${s}`,[j,u]=m.useState(t);j!==t&&(u(t),c(""));const h=s!==""&&r.trim()===s;return e.jsx(v,{open:a,onOpenChange:l,children:e.jsxs(y,{className:"sm:max-w-md",children:[e.jsxs(C,{children:[e.jsx(N,{children:f??o("common.confirmDeleteTitle")}),e.jsx(b,{children:x??o("common.confirmDeleteNameDesc",{name:s})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(T,{htmlFor:"confirm-delete-name",children:o("common.confirmDeleteNameLabel")}),e.jsx(L,{id:"confirm-delete-name",autoComplete:"off",className:"font-mono",value:r,onChange:p=>c(p.target.value),placeholder:s})]}),e.jsxs(K,{children:[e.jsx(n,{variant:"outline",onClick:()=>l(!1),children:o("common.cancel")}),e.jsx(n,{variant:"destructive",disabled:!h||i,onClick:d,children:i?o("common.deleting"):D??o("common.delete")})]})]})})}export{$ as C}; diff --git a/adminui/assets/content-types-Ctc8KdB3.js b/adminui/assets/content-types-CgI1zXD1.js similarity index 72% rename from adminui/assets/content-types-Ctc8KdB3.js rename to adminui/assets/content-types-CgI1zXD1.js index 03e79e69..ca5f3509 100644 --- a/adminui/assets/content-types-Ctc8KdB3.js +++ b/adminui/assets/content-types-CgI1zXD1.js @@ -1 +1 @@ -import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{cF as ee,cJ as se,cA as te,cz as R,aT as ne,ak as v,n as w,aj as k,aI as oe,r as ae,q as re,T as ie,_ as le,U as ce,V as d,X as de,Z as pe,Y as me,aE as S,c9 as u,bk as j,bt as ue}from"./index-DFelzBez.js";import{u as _}from"./useMutation-DgRiHz67.js";import{u as xe}from"./use-url-state-BBO3na5E.js";import{L as he}from"./list-filter-uozkR8Of.js";import{B as K}from"./badge-BvrzcoWP.js";import{C as b,a as A,c as fe,d as ge,b as ye}from"./card-D3QxRGt-.js";import{A as je,c as Ne,f as Te,g as Ce,d as De,e as ve,b as we,a as ke}from"./alert-dialog-B-lBTnCF.js";import{d as Se,A as be,b as Ae,a as Pe}from"./api-config-sheet-f4EYqFLf.js";import{P}from"./plus-DK-V8p7I.js";import{F as ze}from"./folder-open-DCsNiQiU.js";import{E as $e}from"./ellipsis-vertical-UHYLUh-c.js";import{S as Fe}from"./shield-DVprApaA.js";import{L as Me}from"./list-D5KGVMom.js";import{P as Ee}from"./pencil-BgXbFsNu.js";import{D as Le}from"./download-DA3qByua.js";import{T as qe}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./input-Bx5u8hTS.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./select-Dc4_9PNt.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./switch-DLTIF0BW.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./save-Dw1cTtUv.js";import"./copy-BcCPCJtg.js";function N(l){return l.group?`${l.group}/${l.singular}`:l.singular}function Oe(l,t){return l||t("contentTypes.ungrouped")}function hs(){const l=ee(),{t}=se(),z=te(),[f,T]=x.useState(null),[Q,B]=x.useState(new Set),{get:G,set:$}=xe(),g=G("keyword"),[I,C]=x.useState(!1),[p,U]=x.useState(null),[F,M]=x.useState(Se),D=R({queryKey:["content-types"],queryFn:()=>j.send("/admin/content-types")}),E=_({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"))}}),L=_({mutationFn:async()=>{p&&await j.admin.contentTypes.update(N(p),{api:Ae(F)})},onSuccess:()=>{u.success(t("contentTypes.apiSaved")),C(!1),z.invalidateQueries({queryKey:["content-types"]})},onError:s=>{u.error(s instanceof S?s.message:t("contentTypes.apiSaveFailed"))}});function V(s){U(s),M(Pe(s.api)),C(!0)}function H(s,o){s.preventDefault(),s.stopPropagation(),T(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&&(E.mutate(f),T(null))}function X(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]),Y=[{type:"search",key:"keyword",placeholder:t("contentTypes.searchTypes")}];function Z(s){$({keyword:s.keyword??""})}const q=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]),W=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:Y,values:{keyword:g},onChange:Z}),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")]})})]})}):q.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:q.map(([s,o])=>{const n=Oe(s,t),i=Q.has(s);return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>X(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(K,{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(),V(r)},children:[e.jsx(Fe,{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(Me,{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(Ee,{className:"size-4 me-2"}),t("common.edit")]}),e.jsxs(de,{children:[e.jsxs(pe,{onClick:a=>a.stopPropagation(),children:[e.jsx(Le,{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=>H(a,c),disabled:E.isPending,children:[e.jsx(qe,{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(K,{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=W.data)==null?void 0:O.get(c))??"—"})})]})})]})},c)})})]},s||"__ungrouped__")})})]}),e.jsx(je,{open:!!f,onOpenChange:s=>{s||T(null)},children:e.jsxs(Ne,{children:[e.jsxs(Te,{children:[e.jsx(Ce,{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:I,onOpenChange:C,api:F,onChange:M,plural:(p==null?void 0:p.plural)??"",group:(p==null?void 0:p.group)??"",onSave:L.mutateAsync,saving:L.isPending})]})}export{hs as default}; +import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{cG as ee,cK as se,cB as te,cA as R,aU as ne,ak as v,n as w,aj as k,aJ as oe,r as ae,q as re,T as ie,_ as le,U as ce,V as d,X as de,Z as pe,Y as me,aE as S,ca as u,bl as j,bu as ue}from"./index-C-uFVPpg.js";import{u as K}from"./useMutation-BlIm5cor.js";import{u as xe}from"./use-url-state-BBO3na5E.js";import{L as he}from"./list-filter-BT2bcL5X.js";import{B as _}from"./badge-Dhxp0jil.js";import{C as b,a as A,c as fe,d as ge,b as ye}from"./card-BBIqLCR8.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-C8VouOFc.js";import{d as Se,A as be,b as Ae,a as Pe}from"./api-config-sheet--dx-VZNy.js";import{P}from"./plus-FYsVFl-s.js";import{F as ze}from"./folder-open-CRex8He5.js";import{E as $e}from"./ellipsis-vertical-B-dHvJs4.js";import{S as Me}from"./shield-D-KuMU6n.js";import{L as Fe}from"./list-DB26GY3p.js";import{P as Ee}from"./pencil-xelQXmMG.js";import{D as Le}from"./download-DAp88Hv9.js";import{T as qe}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./input-Bp1SimRr.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./select-DJZwiot8.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./switch-DoovYEIg.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./save-Bhy1j3dM.js";import"./copy-DRI8cFnN.js";function N(l){return l.group?`${l.group}/${l.singular}`:l.singular}function Oe(l,t){return l||t("contentTypes.ungrouped")}function hs(){const l=ee(),{t}=se(),z=te(),[f,C]=x.useState(null),[Q,B]=x.useState(new Set),{get:G,set:$}=xe(),g=G("keyword"),[U,T]=x.useState(!1),[p,V]=x.useState(null),[M,F]=x.useState(Se),D=R({queryKey:["content-types"],queryFn:()=>j.send("/admin/content-types")}),E=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"))}}),L=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 H(s){V(s),F(Pe(s.api)),T(!0)}function I(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&&(E.mutate(f),C(null))}function X(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]),Y=[{type:"search",key:"keyword",placeholder:t("contentTypes.searchTypes")}];function Z(s){$({keyword:s.keyword??""})}const q=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]),W=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:Y,values:{keyword:g},onChange:Z}),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")]})})]})}):q.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:q.map(([s,o])=>{const n=Oe(s,t),i=Q.has(s);return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>X(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(_,{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(),H(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(Ee,{className:"size-4 me-2"}),t("common.edit")]}),e.jsxs(de,{children:[e.jsxs(pe,{onClick:a=>a.stopPropagation(),children:[e.jsx(Le,{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=>I(a,c),disabled:E.isPending,children:[e.jsx(qe,{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(_,{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=W.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:U,onOpenChange:T,api:M,onChange:F,plural:(p==null?void 0:p.plural)??"",group:(p==null?void 0:p.group)??"",onSave:L.mutateAsync,saving:L.isPending})]})}export{hs as default}; diff --git a/adminui/assets/content-types-builder-DyPH0rjU.js b/adminui/assets/content-types-builder-CL72qfiG.js similarity index 88% rename from adminui/assets/content-types-builder-DyPH0rjU.js rename to adminui/assets/content-types-builder-CL72qfiG.js index 1d7e41cb..544b8ce0 100644 --- a/adminui/assets/content-types-builder-DyPH0rjU.js +++ b/adminui/assets/content-types-builder-CL72qfiG.js @@ -1,4 +1,4 @@ -import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as S,cJ as $,cF as _e,cG as Ce,cA as ke,cz as Se,aj as we,q as Te,n as C,bd as Me,a4 as qe,v as De,ae as Ae,aL as Fe,aM as ze,aP as Oe,aQ as $e,aN as Le,aE as W,c9 as _,bk as B,b0 as ie,a_ as ne,b1 as re,t as Pe,a$ as oe,bl as Ee,at as Ie,az as Re,au as Be,aI as Qe}from"./index-DFelzBez.js";import{u as ce}from"./useMutation-DgRiHz67.js";import{C as Y,c as Z,d as X,a as U}from"./card-D3QxRGt-.js";import{I as v}from"./input-Bx5u8hTS.js";import{L as b}from"./label-DeKRRvpz.js";import{T as He}from"./textarea-Daa6n4S-.js";import{S as Ve,e as Ge,f as Ke,a as We,c as Q}from"./select-Dc4_9PNt.js";import{D as Je,a as Ye,d as Ze,e as Xe,b as Ue}from"./dialog-Bx55NyOm.js";import{S as M}from"./separator-D01NErsM.js";import{A as et,c as tt,f as at,g as st,d as lt,e as it,b as nt,a as rt}from"./alert-dialog-B-lBTnCF.js";import{B as F}from"./badge-BvrzcoWP.js";import{C as w}from"./checkbox-ZiPbJKLR.js";import{S as ot}from"./save-status-phbiF6i3.js";import{M as ct}from"./types-C-xO67t8.js";import{d as dt,a as mt,A as ut,b as J}from"./api-config-sheet-f4EYqFLf.js";import{T as pt,j as H,F as xt,b as ht}from"./media-utils-CAWMicYD.js";import{T as V}from"./type-SsZV2Os-.js";import{C as gt}from"./chevron-up-BHyyZ98X.js";import{P as de}from"./plus-DK-V8p7I.js";import{C as ft,L as bt}from"./link-B77fN-f1.js";import{S as yt}from"./shield-DVprApaA.js";import{S as jt}from"./save-Dw1cTtUv.js";import{L as vt}from"./lock-Cc0UXHyt.js";import{D as Nt}from"./dollar-sign-DoWHiaN9.js";import{T as _t}from"./trending-up-DvzR4Zg7.js";import{C as Ct}from"./calendar-CQckEvY8.js";import{L as kt}from"./list-D5KGVMom.js";import{B as St}from"./braces-CSqrcTDW.js";import{C as wt}from"./check-DUua1sBA.js";import{C as Tt}from"./copy-BcCPCJtg.js";import{T as Mt}from"./trash-2-DqWZBWAo.js";import{F as qt}from"./file-CHesjbVs.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./circle-alert-DGgaAjA1.js";import"./switch-DLTIF0BW.js";import"./archive-BygiklY2.js";/** +import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bq as S,cK as $,cG as _e,cH as Ce,cB as ke,cA as Se,aj as we,q as Te,n as C,be as Me,a4 as qe,v as De,ae as Ae,aM as Fe,aN as Oe,aQ as ze,aR as $e,aO as Le,aE as W,ca as _,bl as B,b1 as ie,a$ as ne,b2 as re,t as Pe,b0 as oe,bm as Ee,at as Ie,az as Re,au as Be,aJ as He}from"./index-C-uFVPpg.js";import{u as ce}from"./useMutation-BlIm5cor.js";import{C as Y,c as Z,d as X,a as U}from"./card-BBIqLCR8.js";import{I as v}from"./input-Bp1SimRr.js";import{L as b}from"./label-DiZ0cGhf.js";import{T as Qe}from"./textarea-BhaIg3vS.js";import{S as Ve,e as Ge,f as Ke,a as We,c as H}from"./select-DJZwiot8.js";import{D as Je,a as Ye,d as Ze,e as Xe,b as Ue}from"./dialog-if7Fez9x.js";import{S as M}from"./separator-VXjQ1TI2.js";import{A as et,c as tt,f as at,g as st,d as lt,e as it,b as nt,a as rt}from"./alert-dialog-C8VouOFc.js";import{B as F}from"./badge-Dhxp0jil.js";import{C as w}from"./checkbox-CP5mLBLk.js";import{S as ot}from"./save-status-BJ1Wf1eC.js";import{M as ct}from"./types-C-xO67t8.js";import{d as dt,a as mt,A as ut,b as J}from"./api-config-sheet--dx-VZNy.js";import{T as pt,j as Q,F as xt,b as ht}from"./media-utils-8fvT1GGl.js";import{T as V}from"./type-oTYNOCGK.js";import{C as gt}from"./chevron-up-hicU2AmB.js";import{P as de}from"./plus-FYsVFl-s.js";import{C as ft,L as bt}from"./link-C3iEk-_n.js";import{S as yt}from"./shield-D-KuMU6n.js";import{S as jt}from"./save-Bhy1j3dM.js";import{L as vt}from"./lock-CoJ0G9o5.js";import{D as Nt}from"./dollar-sign-T34glauG.js";import{T as _t}from"./trending-up-BP8P_gCl.js";import{C as Ct}from"./calendar-CO7BPWOR.js";import{L as kt}from"./list-DB26GY3p.js";import{B as St}from"./braces-DzImKT76.js";import{C as wt}from"./check-BrJnpLnE.js";import{C as Tt}from"./copy-DRI8cFnN.js";import{T as Mt}from"./trash-2-BZ2bkzqQ.js";import{F as qt}from"./file-DTh4jxeH.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./circle-alert-nC4JTWNi.js";import"./switch-DoovYEIg.js";import"./archive-jZZoXCGk.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. @@ -8,12 +8,12 @@ import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as S,cJ as $,cF * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ft=[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]],zt=S("calendar-clock",Ft);/** + */const Ft=[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]],Ot=S("calendar-clock",Ft);/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ot=[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]],$t=S("file-code-corner",Ot);/** + */const zt=[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]],$t=S("file-code-corner",zt);/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. @@ -33,10 +33,10 @@ import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as S,cJ as $,cF * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Bt=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],Qt=S("mail",Bt);/** + */const Bt=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],Ht=S("mail",Bt);/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ht=[["circle",{cx:"9",cy:"12",r:"3",key:"u3jwor"}],["rect",{width:"20",height:"14",x:"2",y:"5",rx:"7",key:"g7kal2"}]],Vt=S("toggle-left",Ht),Gt=["#64748b","#ef4444","#f97316","#f59e0b","#22c55e","#10b981","#14b8a6","#06b6d4","#0ea5e9","#3b82f6","#6366f1","#8b5cf6","#a855f7","#d946ef","#ec4899"],Kt=[{id:"ownable",label:"Ownable",desc:"created_by, updated_by",detail:"Automatically injects the creator and last updater's user ID on create/update."},{id:"timestampable",label:"Timestampable",desc:"created_at, updated_at",detail:"Automatically injects creation and last modification timestamps."},{id:"soft_deletable",label:"Soft Deletable",desc:"deleted_at, deleted_by",detail:"Marks records as deleted instead of removing them. Queries auto-filter deleted rows."},{id:"versionable",label:"Versionable",desc:"version history",detail:"Saves revision snapshots on every update. Registers /revisions API endpoints."},{id:"lockable",label:"Lockable",desc:"optimistic locking",detail:"Prevents concurrent edit conflicts using a lock_version counter. Returns 409 on conflict."},{id:"sortable",label:"Sortable",desc:"default ordering",detail:"Applies a default sort order to list queries. Configurable field and direction."},{id:"expirable",label:"Expirable",desc:"expires_at",detail:"Adds an expiration timestamp. List queries auto-filter expired records."},{id:"nestable",label:"Nestable",desc:"parent_id, tree",detail:"Enables parent-child tree structure with depth and position tracking."},{id:"statusable",label:"Statusable",desc:"status field",detail:"Adds a configurable status field (e.g. draft/published/archived). Supports string or numeric modes."},{id:"metaable",label:"Metaable",desc:"__meta JSON",detail:"Adds a dynamic JSON metadata column. Supports __meta.xxx query parameters."},{id:"tenantable",label:"Tenantable",desc:"tenant_id",detail:"Multi-tenant isolation. Auto-injects and filters by tenant ID."}],Wt={ownable:[{name:"created_by",type:"bigint"},{name:"updated_by",type:"bigint"}],timestampable:[{name:"created_at",type:"datetime"},{name:"updated_at",type:"datetime"}],soft_deletable:[{name:"deleted_at",type:"datetime"},{name:"deleted_by",type:"bigint"}],versionable:[{name:"version",type:"integer"}],lockable:[{name:"lock_version",type:"integer"}],sortable:[],expirable:[{name:"expires_at",type:"datetime"}],nestable:[{name:"parent_id",type:"bigint"},{name:"depth",type:"integer"},{name:"position",type:"integer"}],statusable:[{name:"status",type:"text"}],metaable:[{name:"__meta",type:"json"}],tenantable:[{name:"tenant_id",type:"text"}]},xe=[{label:"Text",types:[{type:"text",label:"Text",icon:V},{type:"rich_text",label:"Rich Text",icon:qe},{type:"email",label:"Email",icon:Qt},{type:"password",label:"Password",icon:vt},{type:"uid",label:"UID",icon:Pt}]},{label:"Number",types:[{type:"integer",label:"Integer",icon:me},{type:"big_int",label:"Big Int",icon:me},{type:"decimal",label:"Decimal",icon:Nt},{type:"float",label:"Float",icon:_t}]},{label:"Date",types:[{type:"date",label:"Date",icon:Ct},{type:"date_time",label:"DateTime",icon:zt},{type:"time",label:"Time",icon:De}]},{label:"Other",types:[{type:"boolean",label:"Boolean",icon:Vt},{type:"enum",label:"Enum",icon:kt},{type:"json",label:"JSON",icon:St},{type:"media",label:"Media",icon:Ae},{type:"media_set",label:"Media Set",icon:Rt},{type:"blob",label:"Blob",icon:At},{type:"relation",label:"Relation",icon:bt}]}],Jt=xe.flatMap(t=>t.types),G={};for(const t of Jt)G[t.type]=t.icon;const z=Object.values(ct),ue=(()=>{const t=xt.map(a=>({...a,mimes:z.filter(n=>ht(n)===a.key)})).filter(a=>a.mimes.length>0),o=new Set(t.flatMap(a=>a.mimes)),s=z.filter(a=>!o.has(a));return s.length>0&&t.push({key:"other",label:"Other",icon:qt,mimes:s}),t})();function K(t,o){return t.endsWith("/*")&&o.startsWith(t.slice(0,-1))}function O(t,o){return t.includes(o)||t.some(s=>K(s,o))}function Yt(t,o){if(!O(t,o))return[...t,o];if(t.includes(o))return t.filter(i=>i!==o);const s=t.find(i=>K(i,o)),a=s.slice(0,-1),n=z.filter(i=>i.startsWith(a)&&i!==o);return[...t.filter(i=>i!==s),...n]}function Zt(t,o){if(!o.every(n=>O(t,n))){const n=[...t];for(const i of o)O(t,i)||n.push(i);return n}const a=new Set;for(const n of o)t.includes(n)&&a.add(n);for(const n of t)K(n,o[0])&&a.add(n);return t.filter(n=>!a.has(n))}function Xt({value:t,onChange:o}){const{t:s}=$(),[a,n]=j.useState(!1),[i,u]=j.useState(""),d=t.filter(c=>!z.includes(c)&&!z.some(N=>K(c,N))),p=i.trim().toLowerCase(),m=p?ue.map(c=>({...c,mimes:c.mimes.filter(N=>N.toLowerCase().includes(p)||H(N).toLowerCase().includes(p))})).filter(c=>c.mimes.length>0):ue;return e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ie,{open:a,onOpenChange:n,children:[e.jsx(Re,{render:e.jsx(C,{type:"button",variant:"outline",size:"sm",className:"w-full justify-start font-normal",children:t.length===0?s("builder.acceptAll"):t.length===1?H(t[0]):`${t.length} ${s("field.mediaItems")}`})}),e.jsxs(Be,{align:"start",className:"w-72 p-2",children:[e.jsxs("div",{className:"relative mb-1.5",children:[e.jsx(Qe,{className:"absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground"}),e.jsx(v,{value:i,onChange:c=>u(c.target.value),placeholder:s("builder.searchTypes"),className:"h-8 pl-7 text-sm"})]}),e.jsx("div",{className:"max-h-72 overflow-y-auto",children:m.length===0?e.jsx("p",{className:"px-1.5 py-3 text-sm text-muted-foreground",children:s("builder.noMatch")}):m.map((c,N)=>{const q=c.mimes.filter(k=>O(t,k)).length,D=q===c.mimes.length,L=q>0&&!D;return e.jsxs("div",{children:[N>0&&e.jsx(M,{className:"my-2"}),e.jsxs("label",{className:"mb-1 flex cursor-pointer items-center gap-2 rounded border-b border-border/60 px-1.5 pb-1.5 pt-0.5 hover:bg-muted",children:[e.jsx(w,{checked:D,indeterminate:L,onCheckedChange:()=>o(Zt(t,c.mimes))}),e.jsx("span",{className:"flex-1 text-xs font-semibold uppercase tracking-wide text-foreground",children:c.label}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:[q,"/",c.mimes.length]})]}),e.jsx("div",{className:"space-y-0.5",children:c.mimes.map(k=>e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded px-1.5 py-1 text-sm hover:bg-muted",children:[e.jsx(w,{checked:O(t,k),onCheckedChange:()=>o(Yt(t,k))}),e.jsx("span",{children:H(k)})]},k))})]},c.key)})})]})]}),d.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:d.map(c=>e.jsx(F,{variant:"outline",className:"text-[10px] font-normal",children:H(c)},c))})]})}function Ut(t){return{name:"",field_type:t,required:!1,unique:!1,private:!1,immutable:!1,label:"",description:"",default:"",max_length:t==="text"||t==="email"||t==="password"?255:null,min:null,max:null,enum_values:t==="enum"?[]:[],relation:t==="relation"?{relation_type:"one_to_many",target:""}:null,media_config:t==="media"?{accept:[],max_count:1}:t==="media_set"?{accept:[],max_count:5}:null}}function ea(t){return{name:t.name,field_type:t.field_type,required:t.required,unique:t.unique,private:t.private,immutable:t.immutable,label:t.label??"",description:t.description??"",default:t.default==null?"":String(t.default),max_length:t.max_length,min:t.min,max:t.max,enum_values:t.enum_values??[],relation:t.relation?{relation_type:t.relation.relation_type,target:t.relation.target}:null,media_config:t.media_config?{accept:t.media_config.accept,max_count:t.media_config.max_count}:null}}function pe(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"_")}function y(t){return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function ta(t,o){const s=[];s.push("[content_type]"),s.push(`name = ${y(t.name)}`),s.push(`singular = ${y(t.singular)}`),s.push(`plural = ${y(t.plural)}`),s.push(`table = ${y(t.table)}`),t.group&&s.push(`group = ${y(t.group)}`),t.description&&s.push(`description = ${y(t.description)}`),t.icon&&s.push(`icon = ${y(t.icon)}`),t.color&&s.push(`color = ${y(t.color)}`),t.implements.length>0&&s.push(`implements = [${t.implements.map(y).join(", ")}]`),s.push("");for(const a of o)a.name&&(s.push(`[fields.${a.name}]`),s.push(`type = ${y(a.field_type)}`),a.required&&s.push("required = true"),a.unique&&s.push("unique = true"),a.private&&s.push("private = true"),a.immutable&&s.push("immutable = true"),a.label&&s.push(`label = ${y(a.label)}`),a.description&&s.push(`description = ${y(a.description)}`),a.default&&s.push(`default = ${y(a.default)}`),a.max_length!=null&&s.push(`max_length = ${a.max_length}`),a.min!=null&&s.push(`min = ${a.min}`),a.max!=null&&s.push(`max = ${a.max}`),a.enum_values.length>0&&s.push(`enum_values = [${a.enum_values.map(y).join(", ")}]`),a.relation&&(s.push(`relation_type = ${y(a.relation.relation_type)}`),s.push(`target = ${y(a.relation.target)}`),a.relation.through&&s.push(`through = ${y(a.relation.through)}`),a.relation.foreign_key&&s.push(`foreign_key = ${y(a.relation.foreign_key)}`)),a.media_config&&(s.push(`accept = [${a.media_config.accept.map(y).join(", ")}]`),s.push(`max_count = ${a.media_config.max_count}`)),s.push(""));return s.join(` -`).trimEnd()}function T(){return e.jsx("span",{className:"text-destructive ms-1",children:"*"})}function Ka(){const{t}=$(),o=_e(),s=Ce(),a=ke(),n=s.get("edit"),i=!!n,[u,d]=j.useState([]),[p,m]=j.useState(null),[c,N]=j.useState(!1),[q,D]=j.useState(!1),[L,k]=j.useState(!1),[he,P]=j.useState(!1),[E,ee]=j.useState(dt),[h,te]=j.useState({name:"",singular:"",plural:"",table:"",group:"",description:"",icon:"",color:"",implements:["ownable","timestampable"]}),I=Se({queryKey:["content-type",n],queryFn:()=>B.send(`/admin/content-types/${n}`),enabled:i});j.useEffect(()=>{if(I.data){const r=I.data;te({name:r.name,singular:r.singular,plural:r.plural,table:r.table,group:r.group??"",description:r.description??"",icon:r.icon??"",color:r.color??"",implements:(r.implements??[]).map(l=>typeof l=="string"?l:l.name)}),d(r.fields.map(ea)),ee(mt(r.api))}},[I.data]);const A=ce({mutationFn:()=>{const r=u.map(l=>{const g={name:l.name,field_type:l.field_type,required:l.required,unique:l.unique,private:l.private,immutable:l.immutable,label:l.label||null,description:l.description||null,default:l.default||null};return(l.field_type==="text"||l.field_type==="email"||l.field_type==="password")&&(g.max_length=l.max_length),(l.field_type==="integer"||l.field_type==="big_int"||l.field_type==="decimal"||l.field_type==="float")&&(g.min=l.min,g.max=l.max),l.field_type==="enum"&&(g.enum_values=l.enum_values),l.field_type==="relation"&&(g.relation=l.relation),(l.field_type==="media"||l.field_type==="media_set")&&(g.media_config=l.media_config),g});return i?B.admin.contentTypes.update(n,{name:h.name,description:h.description,icon:h.icon||null,color:h.color||null,implements:h.implements,fields:r,api:J(E)}):B.admin.contentTypes.create({name:h.name,singular:h.singular,plural:h.plural,table:h.table,group:h.group,description:h.description,icon:h.icon||null,color:h.color||null,implements:h.implements,fields:r,api:J(E)})},onSuccess:()=>{_.success(t(i?"builder.contentTypeUpdated":"builder.contentTypeCreated")),o.push("/content-types")},onError:r=>{r instanceof W?_.error(r.message):_.error(t("builder.failedToSave"))}}),ge=A.isPending?"saving":A.isError?"error":"idle";function fe(){if(!i){const x=[["common.name",h.name],["builder.singularName",h.singular],["builder.pluralName",h.plural],["builder.tableName",h.table]].find(([,f])=>!f.trim());if(x){_.error(t("builder.requiredField",{field:t(x[0])}));return}}const r=u.find(x=>!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(x.name||""));if(r){_.error(t("builder.invalidFieldName",{field:r.name||t("builder.newField")}));return}const l=u.find(x=>x.field_type==="enum"&&(x.enum_values??[]).length===0);if(l){_.error(t("builder.enumValuesRequired",{field:l.name}));return}const g=u.find(x=>{var f;return x.field_type==="relation"&&!(((f=x.relation)==null?void 0:f.target)??"").trim()});if(g){_.error(t("builder.relationTargetRequired",{field:g.name}));return}A.mutate()}const be=j.useCallback((r,l)=>{d(g=>g.map((x,f)=>f===r?{...x,...l}:x))},[]),ye=j.useCallback(r=>{d(l=>l.filter((g,x)=>x!==r)),m(null)},[]),R=j.useCallback((r,l)=>{d(g=>{const x=r+l;if(x<0||x>=g.length)return g;const f=[...g];return[f[r],f[x]]=[f[x],f[r]],p===r?m(x):p===x&&m(r),f})},[p]),je=j.useCallback(r=>{const l=Ut(r);d(g=>{const x=[...g,l];return m(x.length-1),x}),N(!1)},[]);j.useEffect(()=>{p!==null&&p>=u.length&&m(u.length>0?u.length-1:null)},[u.length,p]);const ae=p!==null&&p{k(!0),_.success(t("builder.tomlCopied")),setTimeout(()=>k(!1),1500)})}const le=ce({mutationFn:()=>n?B.admin.contentTypes.update(n,{api:J(E)}):Promise.reject(new W(400,"content type not created",400)),onSuccess:()=>{_.success(t("builder.apiSaved")),P(!1),n&&a.invalidateQueries({queryKey:["content-type",n]})},onError:r=>{_.error(r instanceof W?r.message:t("builder.failedToSave"))}});function Ne(){if(!i){_.info(t("builder.apiSaveNeedsCreate")),P(!1);return}le.mutate()}return i&&I.isLoading?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-transparent"})}):e.jsxs("form",{className:"flex flex-col h-[calc(100vh-10rem)]",onSubmit:r=>{r.preventDefault(),fe()},children:[e.jsxs("div",{className:"flex flex-1 gap-6 min-h-0",children:[e.jsxs("div",{className:"w-1/3 flex flex-col gap-2 min-h-0 p-1",children:[e.jsxs(Y,{className:"cursor-pointer transition-colors !ring-0 border border-border !border-l-4 !border-l-primary !gap-0 shrink-0",onClick:()=>m(null),children:[e.jsx(Z,{className:"py-5 px-5",children:e.jsxs(X,{className:"text-3xl font-bold flex items-center gap-3",children:[e.jsx(we,{className:"size-5"}),h.name||t("builder.untitled")]})}),e.jsx(U,{className:"py-2 px-5",children:e.jsxs("div",{className:"flex items-center justify-between pl-8",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:h.description||""}),e.jsx(F,{variant:"secondary",className:"text-xs shrink-0",children:t("builder.fieldCount",{count:u.length})})]})})]}),e.jsx(M,{className:"shrink-0"}),e.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto flex flex-col gap-2",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider shrink-0",children:t("builder.fieldList")}),e.jsx("div",{className:"flex flex-col gap-1",children:u.map((r,l)=>{const g=G[r.field_type]??V,x=l===p;return e.jsxs("button",{type:"button",onClick:()=>m(l),className:`group/field flex items-center gap-1.5 rounded px-2 py-1 text-left text-sm transition-colors w-full ${x?"bg-primary/10 text-primary":"hover:bg-muted"}`,children:[e.jsxs("div",{className:"flex flex-col gap-px opacity-0 group-hover/field:opacity-100 transition-opacity",children:[e.jsx("span",{role:"button",tabIndex:0,className:"p-0 hover:text-foreground disabled:opacity-30 cursor-pointer",onClick:f=>{f.stopPropagation(),R(l,-1)},onKeyDown:f=>{f.key==="Enter"&&(f.stopPropagation(),R(l,-1))},children:e.jsx(gt,{className:"size-2.5"})}),e.jsx("span",{role:"button",tabIndex:0,className:"p-0 hover:text-foreground disabled:opacity-30 cursor-pointer",onClick:f=>{f.stopPropagation(),R(l,1)},onKeyDown:f=>{f.key==="Enter"&&(f.stopPropagation(),R(l,1))},children:e.jsx(Te,{className:"size-2.5"})})]}),e.jsx(g,{className:"size-3 shrink-0"}),e.jsxs("span",{className:"flex-1 truncate",children:[r.name||t("builder.newField"),r.required&&e.jsx("span",{className:"text-destructive ms-0.5",children:"*"})]}),e.jsx(F,{variant:"secondary",className:"text-[9px] px-1 py-0",children:r.field_type})]},l)})}),e.jsxs(C,{type:"button",variant:"outline",size:"sm",className:"w-full mt-1",onClick:()=>N(!0),children:[e.jsx(de,{className:"size-3"}),t("builder.addAnotherField")]}),(()=>{const r=[{name:"id",type:"bigint"},...h.implements.flatMap(l=>Wt[l]??[])];return e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mt-2",children:t("builder.systemFields")}),e.jsx("div",{className:"flex flex-col gap-1",children:r.map(l=>{const g=G[l.type]??V;return e.jsxs("div",{className:"flex items-center gap-1.5 rounded px-2 py-1 text-left text-sm text-muted-foreground bg-muted/50",children:[e.jsx("div",{className:"w-2.5 shrink-0"}),e.jsx(g,{className:"size-3 shrink-0"}),e.jsx("span",{className:"flex-1 truncate",children:l.name}),e.jsx(F,{variant:"secondary",className:"text-[9px] px-1 py-0",children:l.type})]},l.name)})})]})})()]})]}),e.jsx("div",{className:"w-2/3 overflow-y-auto p-3",children:ae?e.jsx(sa,{className:"!ring-0 border border-border",field:ae,onUpdate:r=>p!==null&&be(p,r),onRemove:()=>p!==null&&ye(p)},p):e.jsx(aa,{className:"!ring-0 border border-border",base:h,onChange:te})})]}),e.jsx(M,{className:"my-4"}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>o.push("/content-types"),children:[e.jsx(Me,{className:"size-4"}),t("common.cancel")]}),i&&e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>o.push(`/content-types/${n}`),children:[e.jsx(pt,{className:"size-4"}),t("builder.viewData")]}),e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>N(!0),children:[e.jsx(de,{className:"size-4"}),t("builder.addAnotherField")]}),e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>D(!0),children:[e.jsx(ft,{className:"size-4"}),t("builder.viewToml")]}),e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>P(!0),children:[e.jsx(yt,{className:"size-4"}),t("builder.viewApi")," "]}),e.jsxs(C,{size:"lg",type:"submit",disabled:A.isPending,children:[e.jsx(jt,{className:"size-4"}),A.isPending?t("builder.saving"):t("builder.save")]}),e.jsx(ot,{state:ge})]}),e.jsx(Je,{open:c,onOpenChange:N,children:e.jsxs(Ye,{className:"sm:max-w-2xl",children:[e.jsxs(Ze,{children:[e.jsx(Xe,{children:t("builder.addAField")}),e.jsx(Ue,{children:t("builder.chooseFieldType")})]}),e.jsx("div",{className:"space-y-4 mt-2",children:xe.map(r=>e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wider",children:r.label}),e.jsx("div",{className:"grid grid-cols-3 gap-2",children:r.types.map(l=>{const g=l.icon;return e.jsxs("button",{type:"button",onClick:()=>je(l.type),className:"flex items-center gap-2 rounded-lg border p-3 text-sm hover:bg-muted transition-colors",children:[e.jsx(g,{className:"size-4 text-muted-foreground"}),e.jsx("span",{children:l.label})]},l.type)})})]},r.label))})]})}),e.jsx(Fe,{open:q,onOpenChange:D,children:e.jsxs(ze,{side:"right",className:"flex flex-col",style:{width:"min(560px, 95vw)",maxWidth:"95vw"},children:[e.jsxs(Oe,{children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 pe-10",children:[e.jsxs($e,{className:"flex items-center gap-2",children:[e.jsx($t,{className:"size-4"}),t("builder.viewToml")]}),e.jsxs(C,{variant:"outline",size:"sm",onClick:ve,children:[L?e.jsx(wt,{className:"size-4"}):e.jsx(Tt,{className:"size-4"}),t(L?"common.copied":"builder.copy")]})]}),e.jsx(Le,{children:t("builder.tomlDescription")})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-auto rounded-md border bg-muted/40 p-3",children:e.jsx("pre",{className:"whitespace-pre-wrap break-all font-mono text-xs text-foreground",children:se})})]})}),e.jsx(ut,{open:he,onOpenChange:P,api:E,onChange:ee,plural:h.plural,group:h.group,onSave:Ne,saving:le.isPending,saveHint:i?void 0:t("builder.apiSaveNeedsCreate")})]})}function aa({base:t,onChange:o,className:s}){const{t:a}=$();function n(i){o({...t,...i})}return e.jsxs(Y,{className:s,children:[e.jsx(Z,{children:e.jsx(X,{className:"text-base",children:a("builder.baseConfig")})}),e.jsxs(U,{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(b,{className:"text-muted-foreground",children:[a("common.name"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.name,onChange:i=>{const u=i.target.value,d=pe(u),p=d.endsWith("s")?d:d+"s";o({...t,name:u,singular:d,plural:p,table:p})},placeholder:"e.g. Product"})]}),e.jsx(ie,{delay:100,children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs(ne,{children:[e.jsx(re,{render:i=>e.jsxs(b,{...i,className:"text-muted-foreground flex items-center gap-1 cursor-help",children:[a("builder.groupName"),e.jsx(Pe,{className:"size-3.5 text-muted-foreground/60"})]})}),e.jsx(oe,{side:"top",className:"max-w-60 text-balance",children:a("builder.groupHint")})]}),e.jsx(v,{value:t.group,onChange:i=>n({group:pe(i.target.value)}),placeholder:a("builder.groupPlaceholder")})]})})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[a("builder.singularName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.singular,onChange:i=>n({singular:i.target.value}),placeholder:"product"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[a("builder.pluralName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.plural,onChange:i=>n({plural:i.target.value}),placeholder:"products"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[a("builder.tableName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.table,onChange:i=>n({table:i.target.value}),placeholder:"products"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:a("common.description")}),e.jsx(He,{value:t.description,onChange:i=>n({description:i.target.value}),placeholder:a("builder.describeContentType"),rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:a("builder.color")}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:Gt.map(i=>e.jsx("button",{type:"button",onClick:()=>n({color:t.color===i?"":i}),className:Ee("size-7 rounded-full transition-transform",t.color===i?"ring-2 ring-ring ring-offset-2":"hover:scale-110"),style:{backgroundColor:i},title:i},i))})]}),e.jsx(M,{}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(b,{className:"text-muted-foreground",children:a("builder.protocols")}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:Kt.map(i=>{const u=t.implements.includes(i.id);return e.jsx(ie,{delay:100,children:e.jsxs(ne,{children:[e.jsx(re,{render:d=>e.jsxs("label",{...d,className:`flex items-center gap-2 rounded-lg border p-2.5 cursor-pointer transition-colors text-sm ${u?"border-primary bg-primary/5":"border-border hover:bg-muted"}`,children:[e.jsx(w,{checked:u,onCheckedChange:p=>{const m=p===!0?[...t.implements,i.id]:t.implements.filter(c=>c!==i.id);n({implements:m})}}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium leading-tight",children:i.label}),e.jsx("div",{className:"text-xs text-muted-foreground",children:i.desc})]})]})}),e.jsx(oe,{side:"top",className:"max-w-60 text-balance",children:i.detail})]})},i.id)})})]})]})]})}function sa({field:t,onUpdate:o,onRemove:s,className:a}){const{t:n}=$(),[i,u]=j.useState(!1);return e.jsxs(Y,{className:a,children:[e.jsx(Z,{children:e.jsxs(X,{className:"text-base flex items-center gap-2",children:[(()=>{const d=G[t.field_type]??V;return e.jsx(d,{className:"size-4"})})(),n("builder.fieldConfiguration"),e.jsx(F,{variant:"secondary",className:"ms-auto",children:t.field_type})]})}),e.jsxs(U,{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(b,{className:"text-muted-foreground",children:[n("builder.fieldName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.name,onChange:d=>o({name:d.target.value}),placeholder:"e.g. title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("builder.fieldTypeLabel")}),e.jsx(v,{value:t.field_type,disabled:!0})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("builder.defaultValue")}),e.jsx(v,{value:t.default,onChange:d=>o({default:d.target.value}),placeholder:"Default value"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("builder.label")}),e.jsx(v,{value:t.label,onChange:d=>o({label:d.target.value}),placeholder:n("builder.displayLabel")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("common.description")}),e.jsx(v,{value:t.description,onChange:d=>o({description:d.target.value}),placeholder:n("builder.helpText")})]}),e.jsx(M,{}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.required,onCheckedChange:d=>o({required:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.required")})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.unique,onCheckedChange:d=>o({unique:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.unique")})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.private,onCheckedChange:d=>o({private:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.privateField")})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.immutable,onCheckedChange:d=>o({immutable:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.immutable")})]})]}),e.jsx(M,{}),e.jsx(la,{field:t,onUpdate:o}),e.jsx(M,{}),e.jsxs(C,{variant:"destructive",size:"sm",onClick:()=>u(!0),children:[e.jsx(Mt,{className:"size-4"}),n("builder.removeField")]})]}),e.jsx(et,{open:i,onOpenChange:u,children:e.jsxs(tt,{children:[e.jsxs(at,{children:[e.jsx(st,{children:n("builder.removeField")}),e.jsx(lt,{children:n("builder.removeFieldConfirm")})]}),e.jsxs(it,{children:[e.jsx(nt,{children:n("common.cancel")}),e.jsx(rt,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{s(),u(!1)},children:n("builder.removeField")})]})]})})]})}function la({field:t,onUpdate:o}){var i,u,d,p;const{t:s}=$(),[a,n]=j.useState(null);switch(t.field_type){case"text":case"email":case"password":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.maxLength")}),e.jsx(v,{type:"number",value:t.max_length??"",onChange:m=>{const c=m.target.value;o({max_length:c===""?null:Number(c)})},placeholder:"255"})]});case"integer":case"big_int":case"decimal":case"float":return e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.minValue")}),e.jsx(v,{type:"number",value:t.min??"",onChange:m=>{const c=m.target.value;o({min:c===""?null:Number(c)})},placeholder:"Min value"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.maxValue")}),e.jsx(v,{type:"number",value:t.max??"",onChange:m=>{const c=m.target.value;o({max:c===""?null:Number(c)})},placeholder:"Max value"})]})]});case"enum":return e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[s("builder.valuesComma"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:a??(t.enum_values??[]).join(", "),onChange:m=>{n(m.target.value);const c=m.target.value.split(",").map(N=>N.trim()).filter(Boolean);o({enum_values:c})},onBlur:()=>n(null),placeholder:"draft, published, archived"})]});case"relation":return e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[s("builder.target"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:((i=t.relation)==null?void 0:i.target)??"",onChange:m=>{var c;return o({relation:{relation_type:((c=t.relation)==null?void 0:c.relation_type)??"one_to_many",target:m.target.value}})},placeholder:"e.g. posts"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.relationType")}),e.jsxs(Ve,{value:((u=t.relation)==null?void 0:u.relation_type)??"one_to_many",onValueChange:m=>{var c;return o({relation:{relation_type:m??"one_to_many",target:((c=t.relation)==null?void 0:c.target)??""}})},items:{one_to_one:"One to One",one_to_many:"One to Many",many_to_one:"Many to One",many_to_many:"Many to Many"},children:[e.jsx(Ge,{className:"w-full",children:e.jsx(Ke,{})}),e.jsxs(We,{children:[e.jsx(Q,{value:"one_to_one",children:"One to One"}),e.jsx(Q,{value:"one_to_many",children:"One to Many"}),e.jsx(Q,{value:"many_to_one",children:"Many to One"}),e.jsx(Q,{value:"many_to_many",children:"Many to Many"})]})]})]})]});case"media":case"media_set":return e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[s("builder.acceptedTypes"),e.jsx("span",{className:"text-destructive ms-1",children:"*"})]}),e.jsx(Xt,{value:((d=t.media_config)==null?void 0:d.accept)??[],onChange:m=>{var c;return o({media_config:{accept:m,max_count:t.field_type==="media"?1:((c=t.media_config)==null?void 0:c.max_count)??5}})}})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.maxCount")}),e.jsx(v,{type:"number",min:0,value:t.field_type==="media"?1:((p=t.media_config)==null?void 0:p.max_count)??5,disabled:t.field_type==="media",placeholder:t.field_type==="media"?"1":"5",onChange:m=>{var N;const c=m.target.value;o({media_config:{accept:((N=t.media_config)==null?void 0:N.accept)??[],max_count:c===""?5:Number(c)}})}})]})]});case"rich_text":case"boolean":case"date":case"date_time":case"time":case"uid":case"json":case"blob":return e.jsx("p",{className:"text-sm text-muted-foreground",children:s("builder.noAdditionalOptions")});default:return null}}export{Ka as default}; + */const Qt=[["circle",{cx:"9",cy:"12",r:"3",key:"u3jwor"}],["rect",{width:"20",height:"14",x:"2",y:"5",rx:"7",key:"g7kal2"}]],Vt=S("toggle-left",Qt),Gt=["#64748b","#ef4444","#f97316","#f59e0b","#22c55e","#10b981","#14b8a6","#06b6d4","#0ea5e9","#3b82f6","#6366f1","#8b5cf6","#a855f7","#d946ef","#ec4899"],Kt=[{id:"ownable",label:"Ownable",desc:"created_by, updated_by",detail:"Automatically injects the creator and last updater's user ID on create/update."},{id:"timestampable",label:"Timestampable",desc:"created_at, updated_at",detail:"Automatically injects creation and last modification timestamps."},{id:"soft_deletable",label:"Soft Deletable",desc:"deleted_at, deleted_by",detail:"Marks records as deleted instead of removing them. Queries auto-filter deleted rows."},{id:"versionable",label:"Versionable",desc:"version history",detail:"Saves revision snapshots on every update. Registers /revisions API endpoints."},{id:"lockable",label:"Lockable",desc:"optimistic locking",detail:"Prevents concurrent edit conflicts using a lock_version counter. Returns 409 on conflict."},{id:"sortable",label:"Sortable",desc:"default ordering",detail:"Applies a default sort order to list queries. Configurable field and direction."},{id:"expirable",label:"Expirable",desc:"expires_at",detail:"Adds an expiration timestamp. List queries auto-filter expired records."},{id:"nestable",label:"Nestable",desc:"parent_id, tree",detail:"Enables parent-child tree structure with depth and position tracking."},{id:"statusable",label:"Statusable",desc:"status field",detail:"Adds a configurable status field (e.g. draft/published/archived). Supports string or numeric modes."},{id:"metaable",label:"Metaable",desc:"__meta JSON",detail:"Adds a dynamic JSON metadata column. Supports __meta.xxx query parameters."},{id:"tenantable",label:"Tenantable",desc:"tenant_id",detail:"Multi-tenant isolation. Auto-injects and filters by tenant ID."}],Wt={ownable:[{name:"created_by",type:"bigint"},{name:"updated_by",type:"bigint"}],timestampable:[{name:"created_at",type:"datetime"},{name:"updated_at",type:"datetime"}],soft_deletable:[{name:"deleted_at",type:"datetime"},{name:"deleted_by",type:"bigint"}],versionable:[{name:"version",type:"integer"}],lockable:[{name:"lock_version",type:"integer"}],sortable:[],expirable:[{name:"expires_at",type:"datetime"}],nestable:[{name:"parent_id",type:"bigint"},{name:"depth",type:"integer"},{name:"position",type:"integer"}],statusable:[{name:"status",type:"text"}],metaable:[{name:"__meta",type:"json"}],tenantable:[{name:"tenant_id",type:"text"}]},xe=[{label:"Text",types:[{type:"text",label:"Text",icon:V},{type:"rich_text",label:"Rich Text",icon:qe},{type:"email",label:"Email",icon:Ht},{type:"password",label:"Password",icon:vt},{type:"uid",label:"UID",icon:Pt}]},{label:"Number",types:[{type:"integer",label:"Integer",icon:me},{type:"big_int",label:"Big Int",icon:me},{type:"decimal",label:"Decimal",icon:Nt},{type:"float",label:"Float",icon:_t}]},{label:"Date",types:[{type:"date",label:"Date",icon:Ct},{type:"date_time",label:"DateTime",icon:Ot},{type:"time",label:"Time",icon:De}]},{label:"Other",types:[{type:"boolean",label:"Boolean",icon:Vt},{type:"enum",label:"Enum",icon:kt},{type:"json",label:"JSON",icon:St},{type:"media",label:"Media",icon:Ae},{type:"media_set",label:"Media Set",icon:Rt},{type:"blob",label:"Blob",icon:At},{type:"relation",label:"Relation",icon:bt}]}],Jt=xe.flatMap(t=>t.types),G={};for(const t of Jt)G[t.type]=t.icon;const O=Object.values(ct),ue=(()=>{const t=xt.map(a=>({...a,mimes:O.filter(n=>ht(n)===a.key)})).filter(a=>a.mimes.length>0),o=new Set(t.flatMap(a=>a.mimes)),s=O.filter(a=>!o.has(a));return s.length>0&&t.push({key:"other",label:"Other",icon:qt,mimes:s}),t})();function K(t,o){return t.endsWith("/*")&&o.startsWith(t.slice(0,-1))}function z(t,o){return t.includes(o)||t.some(s=>K(s,o))}function Yt(t,o){if(!z(t,o))return[...t,o];if(t.includes(o))return t.filter(i=>i!==o);const s=t.find(i=>K(i,o)),a=s.slice(0,-1),n=O.filter(i=>i.startsWith(a)&&i!==o);return[...t.filter(i=>i!==s),...n]}function Zt(t,o){if(!o.every(n=>z(t,n))){const n=[...t];for(const i of o)z(t,i)||n.push(i);return n}const a=new Set;for(const n of o)t.includes(n)&&a.add(n);for(const n of t)K(n,o[0])&&a.add(n);return t.filter(n=>!a.has(n))}function Xt({value:t,onChange:o}){const{t:s}=$(),[a,n]=j.useState(!1),[i,u]=j.useState(""),d=t.filter(c=>!O.includes(c)&&!O.some(N=>K(c,N))),p=i.trim().toLowerCase(),m=p?ue.map(c=>({...c,mimes:c.mimes.filter(N=>N.toLowerCase().includes(p)||Q(N).toLowerCase().includes(p))})).filter(c=>c.mimes.length>0):ue;return e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(Ie,{open:a,onOpenChange:n,children:[e.jsx(Re,{render:e.jsx(C,{type:"button",variant:"outline",size:"sm",className:"w-full justify-start font-normal",children:t.length===0?s("builder.acceptAll"):t.length===1?Q(t[0]):`${t.length} ${s("field.mediaItems")}`})}),e.jsxs(Be,{align:"start",className:"w-72 p-2",children:[e.jsxs("div",{className:"relative mb-1.5",children:[e.jsx(He,{className:"absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground"}),e.jsx(v,{value:i,onChange:c=>u(c.target.value),placeholder:s("builder.searchTypes"),className:"h-8 pl-7 text-sm"})]}),e.jsx("div",{className:"max-h-72 overflow-y-auto",children:m.length===0?e.jsx("p",{className:"px-1.5 py-3 text-sm text-muted-foreground",children:s("builder.noMatch")}):m.map((c,N)=>{const q=c.mimes.filter(k=>z(t,k)).length,D=q===c.mimes.length,L=q>0&&!D;return e.jsxs("div",{children:[N>0&&e.jsx(M,{className:"my-2"}),e.jsxs("label",{className:"mb-1 flex cursor-pointer items-center gap-2 rounded border-b border-border/60 px-1.5 pb-1.5 pt-0.5 hover:bg-muted",children:[e.jsx(w,{checked:D,indeterminate:L,onCheckedChange:()=>o(Zt(t,c.mimes))}),e.jsx("span",{className:"flex-1 text-xs font-semibold uppercase tracking-wide text-foreground",children:c.label}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:[q,"/",c.mimes.length]})]}),e.jsx("div",{className:"space-y-0.5",children:c.mimes.map(k=>e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded px-1.5 py-1 text-sm hover:bg-muted",children:[e.jsx(w,{checked:z(t,k),onCheckedChange:()=>o(Yt(t,k))}),e.jsx("span",{children:Q(k)})]},k))})]},c.key)})})]})]}),d.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:d.map(c=>e.jsx(F,{variant:"outline",className:"text-[10px] font-normal",children:Q(c)},c))})]})}function Ut(t){return{name:"",field_type:t,required:!1,unique:!1,private:!1,immutable:!1,label:"",description:"",default:"",max_length:t==="text"||t==="email"||t==="password"?255:null,min:null,max:null,enum_values:t==="enum"?[]:[],relation:t==="relation"?{relation_type:"one_to_many",target:""}:null,media_config:t==="media"?{accept:[],max_count:1}:t==="media_set"?{accept:[],max_count:5}:null}}function ea(t){return{name:t.name,field_type:t.field_type,required:t.required,unique:t.unique,private:t.private,immutable:t.immutable,label:t.label??"",description:t.description??"",default:t.default==null?"":String(t.default),max_length:t.max_length,min:t.min,max:t.max,enum_values:t.enum_values??[],relation:t.relation?{relation_type:t.relation.relation_type,target:t.relation.target}:null,media_config:t.media_config?{accept:t.media_config.accept,max_count:t.media_config.max_count}:null}}function pe(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"_")}function y(t){return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function ta(t,o){const s=[];s.push("[content_type]"),s.push(`name = ${y(t.name)}`),s.push(`singular = ${y(t.singular)}`),s.push(`plural = ${y(t.plural)}`),s.push(`table = ${y(t.table)}`),t.group&&s.push(`group = ${y(t.group)}`),t.description&&s.push(`description = ${y(t.description)}`),t.icon&&s.push(`icon = ${y(t.icon)}`),t.color&&s.push(`color = ${y(t.color)}`),t.implements.length>0&&s.push(`implements = [${t.implements.map(y).join(", ")}]`),s.push("");for(const a of o)a.name&&(s.push(`[fields.${a.name}]`),s.push(`type = ${y(a.field_type)}`),a.required&&s.push("required = true"),a.unique&&s.push("unique = true"),a.private&&s.push("private = true"),a.immutable&&s.push("immutable = true"),a.label&&s.push(`label = ${y(a.label)}`),a.description&&s.push(`description = ${y(a.description)}`),a.default&&s.push(`default = ${y(a.default)}`),a.max_length!=null&&s.push(`max_length = ${a.max_length}`),a.min!=null&&s.push(`min = ${a.min}`),a.max!=null&&s.push(`max = ${a.max}`),a.enum_values.length>0&&s.push(`enum_values = [${a.enum_values.map(y).join(", ")}]`),a.relation&&(s.push(`relation_type = ${y(a.relation.relation_type)}`),s.push(`target = ${y(a.relation.target)}`),a.relation.through&&s.push(`through = ${y(a.relation.through)}`),a.relation.foreign_key&&s.push(`foreign_key = ${y(a.relation.foreign_key)}`)),a.media_config&&(s.push(`accept = [${a.media_config.accept.map(y).join(", ")}]`),s.push(`max_count = ${a.media_config.max_count}`)),s.push(""));return s.join(` +`).trimEnd()}function T(){return e.jsx("span",{className:"text-destructive ms-1",children:"*"})}function Ka(){const{t}=$(),o=_e(),s=Ce(),a=ke(),n=s.get("edit"),i=!!n,[u,d]=j.useState([]),[p,m]=j.useState(null),[c,N]=j.useState(!1),[q,D]=j.useState(!1),[L,k]=j.useState(!1),[he,P]=j.useState(!1),[E,ee]=j.useState(dt),[h,te]=j.useState({name:"",singular:"",plural:"",table:"",group:"",description:"",icon:"",color:"",implements:["ownable","timestampable"]}),I=Se({queryKey:["content-type",n],queryFn:()=>B.send(`/admin/content-types/${n}`),enabled:i});j.useEffect(()=>{if(I.data){const r=I.data;te({name:r.name,singular:r.singular,plural:r.plural,table:r.table,group:r.group??"",description:r.description??"",icon:r.icon??"",color:r.color??"",implements:(r.implements??[]).map(l=>typeof l=="string"?l:l.name)}),d(r.fields.map(ea)),ee(mt(r.api))}},[I.data]);const A=ce({mutationFn:()=>{const r=u.map(l=>{const g={name:l.name,field_type:l.field_type,required:l.required,unique:l.unique,private:l.private,immutable:l.immutable,label:l.label||null,description:l.description||null,default:l.default||null};return(l.field_type==="text"||l.field_type==="email"||l.field_type==="password")&&(g.max_length=l.max_length),(l.field_type==="integer"||l.field_type==="big_int"||l.field_type==="decimal"||l.field_type==="float")&&(g.min=l.min,g.max=l.max),l.field_type==="enum"&&(g.enum_values=l.enum_values),l.field_type==="relation"&&(g.relation=l.relation),(l.field_type==="media"||l.field_type==="media_set")&&(g.media_config=l.media_config),g});return i?B.admin.contentTypes.update(n,{name:h.name,description:h.description,icon:h.icon||null,color:h.color||null,implements:h.implements,fields:r,api:J(E)}):B.admin.contentTypes.create({name:h.name,singular:h.singular,plural:h.plural,table:h.table,group:h.group,description:h.description,icon:h.icon||null,color:h.color||null,implements:h.implements,fields:r,api:J(E)})},onSuccess:()=>{_.success(t(i?"builder.contentTypeUpdated":"builder.contentTypeCreated")),o.push("/content-types")},onError:r=>{r instanceof W?_.error(r.message):_.error(t("builder.failedToSave"))}}),ge=A.isPending?"saving":A.isError?"error":"idle";function fe(){if(!i){const x=[["common.name",h.name],["builder.singularName",h.singular],["builder.pluralName",h.plural],["builder.tableName",h.table]].find(([,f])=>!f.trim());if(x){_.error(t("builder.requiredField",{field:t(x[0])}));return}}const r=u.find(x=>!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(x.name||""));if(r){_.error(t("builder.invalidFieldName",{field:r.name||t("builder.newField")}));return}const l=u.find(x=>x.field_type==="enum"&&(x.enum_values??[]).length===0);if(l){_.error(t("builder.enumValuesRequired",{field:l.name}));return}const g=u.find(x=>{var f;return x.field_type==="relation"&&!(((f=x.relation)==null?void 0:f.target)??"").trim()});if(g){_.error(t("builder.relationTargetRequired",{field:g.name}));return}A.mutate()}const be=j.useCallback((r,l)=>{d(g=>g.map((x,f)=>f===r?{...x,...l}:x))},[]),ye=j.useCallback(r=>{d(l=>l.filter((g,x)=>x!==r)),m(null)},[]),R=j.useCallback((r,l)=>{d(g=>{const x=r+l;if(x<0||x>=g.length)return g;const f=[...g];return[f[r],f[x]]=[f[x],f[r]],p===r?m(x):p===x&&m(r),f})},[p]),je=j.useCallback(r=>{const l=Ut(r);d(g=>{const x=[...g,l];return m(x.length-1),x}),N(!1)},[]);j.useEffect(()=>{p!==null&&p>=u.length&&m(u.length>0?u.length-1:null)},[u.length,p]);const ae=p!==null&&p{k(!0),_.success(t("builder.tomlCopied")),setTimeout(()=>k(!1),1500)})}const le=ce({mutationFn:()=>n?B.admin.contentTypes.update(n,{api:J(E)}):Promise.reject(new W(400,"content type not created",400)),onSuccess:()=>{_.success(t("builder.apiSaved")),P(!1),n&&a.invalidateQueries({queryKey:["content-type",n]})},onError:r=>{_.error(r instanceof W?r.message:t("builder.failedToSave"))}});function Ne(){if(!i){_.info(t("builder.apiSaveNeedsCreate")),P(!1);return}le.mutate()}return i&&I.isLoading?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-transparent"})}):e.jsxs("form",{className:"flex flex-col h-[calc(100vh-10rem)]",onSubmit:r=>{r.preventDefault(),fe()},children:[e.jsxs("div",{className:"flex flex-1 gap-6 min-h-0",children:[e.jsxs("div",{className:"w-1/3 flex flex-col gap-2 min-h-0 p-1",children:[e.jsxs(Y,{className:"cursor-pointer transition-colors !ring-0 border border-border !border-l-4 !border-l-primary !gap-0 shrink-0",onClick:()=>m(null),children:[e.jsx(Z,{className:"py-5 px-5",children:e.jsxs(X,{className:"text-3xl font-bold flex items-center gap-3",children:[e.jsx(we,{className:"size-5"}),h.name||t("builder.untitled")]})}),e.jsx(U,{className:"py-2 px-5",children:e.jsxs("div",{className:"flex items-center justify-between pl-8",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:h.description||""}),e.jsx(F,{variant:"secondary",className:"text-xs shrink-0",children:t("builder.fieldCount",{count:u.length})})]})})]}),e.jsx(M,{className:"shrink-0"}),e.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto flex flex-col gap-2",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider shrink-0",children:t("builder.fieldList")}),e.jsx("div",{className:"flex flex-col gap-1",children:u.map((r,l)=>{const g=G[r.field_type]??V,x=l===p;return e.jsxs("button",{type:"button",onClick:()=>m(l),className:`group/field flex items-center gap-1.5 rounded px-2 py-1 text-left text-sm transition-colors w-full ${x?"bg-primary/10 text-primary":"hover:bg-muted"}`,children:[e.jsxs("div",{className:"flex flex-col gap-px opacity-0 group-hover/field:opacity-100 transition-opacity",children:[e.jsx("span",{role:"button",tabIndex:0,className:"p-0 hover:text-foreground disabled:opacity-30 cursor-pointer",onClick:f=>{f.stopPropagation(),R(l,-1)},onKeyDown:f=>{f.key==="Enter"&&(f.stopPropagation(),R(l,-1))},children:e.jsx(gt,{className:"size-2.5"})}),e.jsx("span",{role:"button",tabIndex:0,className:"p-0 hover:text-foreground disabled:opacity-30 cursor-pointer",onClick:f=>{f.stopPropagation(),R(l,1)},onKeyDown:f=>{f.key==="Enter"&&(f.stopPropagation(),R(l,1))},children:e.jsx(Te,{className:"size-2.5"})})]}),e.jsx(g,{className:"size-3 shrink-0"}),e.jsxs("span",{className:"flex-1 truncate",children:[r.name||t("builder.newField"),r.required&&e.jsx("span",{className:"text-destructive ms-0.5",children:"*"})]}),e.jsx(F,{variant:"secondary",className:"text-[9px] px-1 py-0",children:r.field_type})]},l)})}),e.jsxs(C,{type:"button",variant:"outline",size:"sm",className:"w-full mt-1",onClick:()=>N(!0),children:[e.jsx(de,{className:"size-3"}),t("builder.addAnotherField")]}),(()=>{const r=[{name:"id",type:"bigint"},...h.implements.flatMap(l=>Wt[l]??[])];return e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mt-2",children:t("builder.systemFields")}),e.jsx("div",{className:"flex flex-col gap-1",children:r.map(l=>{const g=G[l.type]??V;return e.jsxs("div",{className:"flex items-center gap-1.5 rounded px-2 py-1 text-left text-sm text-muted-foreground bg-muted/50",children:[e.jsx("div",{className:"w-2.5 shrink-0"}),e.jsx(g,{className:"size-3 shrink-0"}),e.jsx("span",{className:"flex-1 truncate",children:l.name}),e.jsx(F,{variant:"secondary",className:"text-[9px] px-1 py-0",children:l.type})]},l.name)})})]})})()]})]}),e.jsx("div",{className:"w-2/3 overflow-y-auto p-3",children:ae?e.jsx(sa,{className:"!ring-0 border border-border",field:ae,onUpdate:r=>p!==null&&be(p,r),onRemove:()=>p!==null&&ye(p)},p):e.jsx(aa,{className:"!ring-0 border border-border",base:h,onChange:te})})]}),e.jsx(M,{className:"my-4"}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>o.push("/content-types"),children:[e.jsx(Me,{className:"size-4"}),t("common.cancel")]}),i&&e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>o.push(`/content-types/${n}`),children:[e.jsx(pt,{className:"size-4"}),t("builder.viewData")]}),e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>N(!0),children:[e.jsx(de,{className:"size-4"}),t("builder.addAnotherField")]}),e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>D(!0),children:[e.jsx(ft,{className:"size-4"}),t("builder.viewToml")]}),e.jsxs(C,{size:"lg",type:"button",variant:"outline",onClick:()=>P(!0),children:[e.jsx(yt,{className:"size-4"}),t("builder.viewApi")," "]}),e.jsxs(C,{size:"lg",type:"submit",disabled:A.isPending,children:[e.jsx(jt,{className:"size-4"}),A.isPending?t("builder.saving"):t("builder.save")]}),e.jsx(ot,{state:ge})]}),e.jsx(Je,{open:c,onOpenChange:N,children:e.jsxs(Ye,{className:"sm:max-w-2xl",children:[e.jsxs(Ze,{children:[e.jsx(Xe,{children:t("builder.addAField")}),e.jsx(Ue,{children:t("builder.chooseFieldType")})]}),e.jsx("div",{className:"space-y-4 mt-2",children:xe.map(r=>e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wider",children:r.label}),e.jsx("div",{className:"grid grid-cols-3 gap-2",children:r.types.map(l=>{const g=l.icon;return e.jsxs("button",{type:"button",onClick:()=>je(l.type),className:"flex items-center gap-2 rounded-lg border p-3 text-sm hover:bg-muted transition-colors",children:[e.jsx(g,{className:"size-4 text-muted-foreground"}),e.jsx("span",{children:l.label})]},l.type)})})]},r.label))})]})}),e.jsx(Fe,{open:q,onOpenChange:D,children:e.jsxs(Oe,{side:"right",className:"flex flex-col",style:{width:"min(560px, 95vw)",maxWidth:"95vw"},children:[e.jsxs(ze,{children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 pe-10",children:[e.jsxs($e,{className:"flex items-center gap-2",children:[e.jsx($t,{className:"size-4"}),t("builder.viewToml")]}),e.jsxs(C,{variant:"outline",size:"sm",onClick:ve,children:[L?e.jsx(wt,{className:"size-4"}):e.jsx(Tt,{className:"size-4"}),t(L?"common.copied":"builder.copy")]})]}),e.jsx(Le,{children:t("builder.tomlDescription")})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-auto rounded-md border bg-muted/40 p-3",children:e.jsx("pre",{className:"whitespace-pre-wrap break-all font-mono text-xs text-foreground",children:se})})]})}),e.jsx(ut,{open:he,onOpenChange:P,api:E,onChange:ee,plural:h.plural,group:h.group,onSave:Ne,saving:le.isPending,saveHint:i?void 0:t("builder.apiSaveNeedsCreate")})]})}function aa({base:t,onChange:o,className:s}){const{t:a}=$();function n(i){o({...t,...i})}return e.jsxs(Y,{className:s,children:[e.jsx(Z,{children:e.jsx(X,{className:"text-base",children:a("builder.baseConfig")})}),e.jsxs(U,{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(b,{className:"text-muted-foreground",children:[a("common.name"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.name,onChange:i=>{const u=i.target.value,d=pe(u),p=d.endsWith("s")?d:d+"s";o({...t,name:u,singular:d,plural:p,table:p})},placeholder:"e.g. Product"})]}),e.jsx(ie,{delay:100,children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs(ne,{children:[e.jsx(re,{render:i=>e.jsxs(b,{...i,className:"text-muted-foreground flex items-center gap-1 cursor-help",children:[a("builder.groupName"),e.jsx(Pe,{className:"size-3.5 text-muted-foreground/60"})]})}),e.jsx(oe,{side:"top",className:"max-w-60 text-balance",children:a("builder.groupHint")})]}),e.jsx(v,{value:t.group,onChange:i=>n({group:pe(i.target.value)}),placeholder:a("builder.groupPlaceholder")})]})})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[a("builder.singularName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.singular,onChange:i=>n({singular:i.target.value}),placeholder:"product"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[a("builder.pluralName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.plural,onChange:i=>n({plural:i.target.value}),placeholder:"products"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[a("builder.tableName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.table,onChange:i=>n({table:i.target.value}),placeholder:"products"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:a("common.description")}),e.jsx(Qe,{value:t.description,onChange:i=>n({description:i.target.value}),placeholder:a("builder.describeContentType"),rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:a("builder.color")}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:Gt.map(i=>e.jsx("button",{type:"button",onClick:()=>n({color:t.color===i?"":i}),className:Ee("size-7 rounded-full transition-transform",t.color===i?"ring-2 ring-ring ring-offset-2":"hover:scale-110"),style:{backgroundColor:i},title:i},i))})]}),e.jsx(M,{}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(b,{className:"text-muted-foreground",children:a("builder.protocols")}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:Kt.map(i=>{const u=t.implements.includes(i.id);return e.jsx(ie,{delay:100,children:e.jsxs(ne,{children:[e.jsx(re,{render:d=>e.jsxs("label",{...d,className:`flex items-center gap-2 rounded-lg border p-2.5 cursor-pointer transition-colors text-sm ${u?"border-primary bg-primary/5":"border-border hover:bg-muted"}`,children:[e.jsx(w,{checked:u,onCheckedChange:p=>{const m=p===!0?[...t.implements,i.id]:t.implements.filter(c=>c!==i.id);n({implements:m})}}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium leading-tight",children:i.label}),e.jsx("div",{className:"text-xs text-muted-foreground",children:i.desc})]})]})}),e.jsx(oe,{side:"top",className:"max-w-60 text-balance",children:i.detail})]})},i.id)})})]})]})]})}function sa({field:t,onUpdate:o,onRemove:s,className:a}){const{t:n}=$(),[i,u]=j.useState(!1);return e.jsxs(Y,{className:a,children:[e.jsx(Z,{children:e.jsxs(X,{className:"text-base flex items-center gap-2",children:[(()=>{const d=G[t.field_type]??V;return e.jsx(d,{className:"size-4"})})(),n("builder.fieldConfiguration"),e.jsx(F,{variant:"secondary",className:"ms-auto",children:t.field_type})]})}),e.jsxs(U,{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(b,{className:"text-muted-foreground",children:[n("builder.fieldName"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:t.name,onChange:d=>o({name:d.target.value}),placeholder:"e.g. title"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("builder.fieldTypeLabel")}),e.jsx(v,{value:t.field_type,disabled:!0})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("builder.defaultValue")}),e.jsx(v,{value:t.default,onChange:d=>o({default:d.target.value}),placeholder:"Default value"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("builder.label")}),e.jsx(v,{value:t.label,onChange:d=>o({label:d.target.value}),placeholder:n("builder.displayLabel")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:n("common.description")}),e.jsx(v,{value:t.description,onChange:d=>o({description:d.target.value}),placeholder:n("builder.helpText")})]}),e.jsx(M,{}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.required,onCheckedChange:d=>o({required:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.required")})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.unique,onCheckedChange:d=>o({unique:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.unique")})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.private,onCheckedChange:d=>o({private:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.privateField")})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(w,{checked:t.immutable,onCheckedChange:d=>o({immutable:d===!0})}),e.jsx("span",{className:"text-sm",children:n("builder.immutable")})]})]}),e.jsx(M,{}),e.jsx(la,{field:t,onUpdate:o}),e.jsx(M,{}),e.jsxs(C,{variant:"destructive",size:"sm",onClick:()=>u(!0),children:[e.jsx(Mt,{className:"size-4"}),n("builder.removeField")]})]}),e.jsx(et,{open:i,onOpenChange:u,children:e.jsxs(tt,{children:[e.jsxs(at,{children:[e.jsx(st,{children:n("builder.removeField")}),e.jsx(lt,{children:n("builder.removeFieldConfirm")})]}),e.jsxs(it,{children:[e.jsx(nt,{children:n("common.cancel")}),e.jsx(rt,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{s(),u(!1)},children:n("builder.removeField")})]})]})})]})}function la({field:t,onUpdate:o}){var i,u,d,p;const{t:s}=$(),[a,n]=j.useState(null);switch(t.field_type){case"text":case"email":case"password":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.maxLength")}),e.jsx(v,{type:"number",value:t.max_length??"",onChange:m=>{const c=m.target.value;o({max_length:c===""?null:Number(c)})},placeholder:"255"})]});case"integer":case"big_int":case"decimal":case"float":return e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.minValue")}),e.jsx(v,{type:"number",value:t.min??"",onChange:m=>{const c=m.target.value;o({min:c===""?null:Number(c)})},placeholder:"Min value"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.maxValue")}),e.jsx(v,{type:"number",value:t.max??"",onChange:m=>{const c=m.target.value;o({max:c===""?null:Number(c)})},placeholder:"Max value"})]})]});case"enum":return e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[s("builder.valuesComma"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:a??(t.enum_values??[]).join(", "),onChange:m=>{n(m.target.value);const c=m.target.value.split(",").map(N=>N.trim()).filter(Boolean);o({enum_values:c})},onBlur:()=>n(null),placeholder:"draft, published, archived"})]});case"relation":return e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[s("builder.target"),e.jsx(T,{})]}),e.jsx(v,{required:!0,value:((i=t.relation)==null?void 0:i.target)??"",onChange:m=>{var c;return o({relation:{relation_type:((c=t.relation)==null?void 0:c.relation_type)??"one_to_many",target:m.target.value}})},placeholder:"e.g. posts"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.relationType")}),e.jsxs(Ve,{value:((u=t.relation)==null?void 0:u.relation_type)??"one_to_many",onValueChange:m=>{var c;return o({relation:{relation_type:m??"one_to_many",target:((c=t.relation)==null?void 0:c.target)??""}})},items:{one_to_one:"One to One",one_to_many:"One to Many",many_to_one:"Many to One",many_to_many:"Many to Many"},children:[e.jsx(Ge,{className:"w-full",children:e.jsx(Ke,{})}),e.jsxs(We,{children:[e.jsx(H,{value:"one_to_one",children:"One to One"}),e.jsx(H,{value:"one_to_many",children:"One to Many"}),e.jsx(H,{value:"many_to_one",children:"Many to One"}),e.jsx(H,{value:"many_to_many",children:"Many to Many"})]})]})]})]});case"media":case"media_set":return e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(b,{className:"text-muted-foreground",children:[s("builder.acceptedTypes"),e.jsx("span",{className:"text-destructive ms-1",children:"*"})]}),e.jsx(Xt,{value:((d=t.media_config)==null?void 0:d.accept)??[],onChange:m=>{var c;return o({media_config:{accept:m,max_count:t.field_type==="media"?1:((c=t.media_config)==null?void 0:c.max_count)??5}})}})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{className:"text-muted-foreground",children:s("builder.maxCount")}),e.jsx(v,{type:"number",min:0,value:t.field_type==="media"?1:((p=t.media_config)==null?void 0:p.max_count)??5,disabled:t.field_type==="media",placeholder:t.field_type==="media"?"1":"5",onChange:m=>{var N;const c=m.target.value;o({media_config:{accept:((N=t.media_config)==null?void 0:N.accept)??[],max_count:c===""?5:Number(c)}})}})]})]});case"rich_text":case"boolean":case"date":case"date_time":case"time":case"uid":case"json":case"blob":return e.jsx("p",{className:"text-sm text-muted-foreground",children:s("builder.noAdditionalOptions")});default:return null}}export{Ka as default}; diff --git a/adminui/assets/content-types-edit-CJhRxbZL.js b/adminui/assets/content-types-edit-Cu-qOSWt.js similarity index 53% rename from adminui/assets/content-types-edit-CJhRxbZL.js rename to adminui/assets/content-types-edit-Cu-qOSWt.js index 057d4643..e8ca1bc2 100644 --- a/adminui/assets/content-types-edit-CJhRxbZL.js +++ b/adminui/assets/content-types-edit-Cu-qOSWt.js @@ -1 +1 @@ -import{k as R,f as u,j as e}from"./vendor-react-j_G0Dyx0.js";import{cF as z,cJ as B,cz as F,aT as k,ak as I,n as C,aE as J,c9 as f,bk as h}from"./index-DFelzBez.js";import{u as K}from"./useMutation-DgRiHz67.js";import{C as $,a as E}from"./card-D3QxRGt-.js";import{B as M}from"./badge-BvrzcoWP.js";import{L as O}from"./label-DeKRRvpz.js";import{S as Q,e as V,f as U,a as A,c as x}from"./select-Dc4_9PNt.js";import{b as c}from"./types-C-xO67t8.js";import{a as G,h as H,c as W}from"./field-renderer-B16JYsaw.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./input-Bx5u8hTS.js";import"./textarea-Daa6n4S-.js";import"./multi-media-upload-CTj_w8wW.js";import"./vendor-md-editor-vOqM56Ks.js";import"./dialog-Bx55NyOm.js";import"./media-utils-CAWMicYD.js";import"./archive-BygiklY2.js";import"./type-SsZV2Os-.js";import"./file-CHesjbVs.js";import"./link-B77fN-f1.js";import"./list-checks-BObmEj-I.js";import"./list-D5KGVMom.js";import"./chevron-left-CbJIXgY2.js";import"./upload-Cqpometq.js";import"./grip-vertical-BHYRkqhd.js";import"./shuffle-DaVyXqDN.js";import"./arrow-right-jJ6PUH_T.js";import"./download-DA3qByua.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 we(){const i=R(),n=i.group?`${i.group}/${i.singular}`:i.ctPath??"",l=i.id??"",q=z(),{t:r}=B(),g=F({queryKey:["content-type",n],queryFn:()=>h.send(`/admin/content-types/${n}`)}),s=g.data,j=F({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,m]of Object.entries(d))a!=="id"&&a!=="created_at"&&a!=="updated_at"&&(t[a]=m);y(t)}},[d,b]);const p=K({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 J?f.error(t.message):f.error(r("common.failedToUpdate",{name:s.name}))}});function N(t,a){y(m=>({...m,[t]:a})),v(m=>{const S={...m};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:W(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(k,{className:"h-8 w-32"}),e.jsx(k,{className:"h-64 w-full"})]}):!s||!d?e.jsx("div",{className:"space-y-6",children:e.jsx($,{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(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:_,className:"space-y-6 p-6 pt-0",children:[e.jsx($,{children:e.jsxs(E,{className:"pt-6 space-y-5",children:[D.map(t=>e.jsx(G,{field:t,value:o[t.name],onChange:a=>N(t.name,a),error:w[t.name]},t.name)),H(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(O,{children:r("common.status")}),e.jsxs(Q,{value:o.status||c.draft,onValueChange:t=>{t&&N("status",t)},items:{[c.draft]:r("common.draft"),[c.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(A,{children:[e.jsx(x,{value:c.draft,children:r("common.draft")}),e.jsx(x,{value:c.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(I,{href:`/content-types/${n}`,children:e.jsx(C,{type:"button",variant:"outline",children:r("common.cancel")})}),e.jsx(C,{type:"submit",disabled:p.isPending,children:p.isPending?r("common.saving"):r("posts.saveChanges")})]})]})]})}export{we as default}; +import{k as K,f as u,j as e}from"./vendor-react-j_G0Dyx0.js";import{cG as R,cK as B,cA as C,aU as F,ak as I,n as $,aE as M,ca as f,bl as h}from"./index-C-uFVPpg.js";import{u as O}from"./useMutation-BlIm5cor.js";import{C as k,a as E}from"./card-BBIqLCR8.js";import{B as Q}from"./badge-Dhxp0jil.js";import{L as z}from"./label-DiZ0cGhf.js";import{S as J,e as U,f as V,a as A,c as x}from"./select-DJZwiot8.js";import{b as c}from"./types-C-xO67t8.js";import{a as G,h as H,c as W}from"./field-renderer-RFQvRwv7.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./input-Bp1SimRr.js";import"./textarea-BhaIg3vS.js";import"./multi-media-upload-JNDODXRR.js";import"./vendor-md-editor-vOqM56Ks.js";import"./dialog-if7Fez9x.js";import"./media-utils-8fvT1GGl.js";import"./archive-jZZoXCGk.js";import"./type-oTYNOCGK.js";import"./file-DTh4jxeH.js";import"./link-C3iEk-_n.js";import"./list-checks--lQS7OzB.js";import"./list-DB26GY3p.js";import"./chevron-left-C_tZtLI6.js";import"./upload-BbRPA2Fp.js";import"./grip-vertical-BFYOA9qd.js";import"./shuffle-ubxqp0_q.js";import"./arrow-right-C66mthM0.js";import"./download-DAp88Hv9.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 we(){const i=K(),n=i.group?`${i.group}/${i.singular}`:i.ctPath??"",l=i.id??"",q=R(),{t:r}=B(),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,m]of Object.entries(d))a!=="id"&&a!=="created_at"&&a!=="updated_at"&&(t[a]=m);y(t)}},[d,b]);const p=O({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 M?f.error(t.message):f.error(r("common.failedToUpdate",{name:s.name}))}});function N(t,a){y(m=>({...m,[t]:a})),v(m=>{const S={...m};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:W(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(Q,{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(G,{field:t,value:o[t.name],onChange:a=>N(t.name,a),error:w[t.name]},t.name)),H(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(z,{children:r("common.status")}),e.jsxs(J,{value:o.status||c.draft,onValueChange:t=>{t&&N("status",t)},items:{[c.draft]:r("common.draft"),[c.published]:r("common.published"),archived:r("common.archived")},children:[e.jsx(U,{className:"w-full",children:e.jsx(V,{placeholder:r("common.selectStatus")})}),e.jsxs(A,{children:[e.jsx(x,{value:c.draft,children:r("common.draft")}),e.jsx(x,{value:c.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(I,{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{we as default}; diff --git a/adminui/assets/content-types-list-C_4X3oOo.js b/adminui/assets/content-types-list-BxsFZVzf.js similarity index 57% rename from adminui/assets/content-types-list-C_4X3oOo.js rename to adminui/assets/content-types-list-BxsFZVzf.js index 148ce437..e94e1020 100644 --- a/adminui/assets/content-types-list-C_4X3oOo.js +++ b/adminui/assets/content-types-list-BxsFZVzf.js @@ -1,6 +1,6 @@ -import{k as Be,f as l,j as t}from"./vendor-react-j_G0Dyx0.js";import{u as Ke}from"./use-url-state-BBO3na5E.js";import{bp as Ue,cJ as Re,cF as Ve,cA as He,cz as ie,aT as ae,T as Q,_ as B,n as j,U as K,V as p,ak as ce,q as Je,aj as Ge,aE as N,c9 as a,bk as C,bw as We,bu as Xe,bv as Ye,cc as Ze}from"./index-DFelzBez.js";import{u as w}from"./useMutation-DgRiHz67.js";import{C as le,a as de}from"./card-D3QxRGt-.js";import{C as pe}from"./checkbox-ZiPbJKLR.js";import{T as et}from"./table-skeleton-BtLTAVzI.js";import{P as tt}from"./pagination-bar-DD_HkQGa.js";import{T as st,d as nt,e as U,c as R,a as rt,b as $}from"./table-gihdE9_j.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-B-lBTnCF.js";import{b as Se}from"./types-C-xO67t8.js";import{L as ot}from"./list-filter-uozkR8Of.js";import{g as it,h as Te,b as Ce,F as at,c as ct}from"./field-renderer-B16JYsaw.js";import{E as lt}from"./empty-state-D0NvGCXa.js";import{d as dt,A as pt,b as mt,a as ut}from"./api-config-sheet-f4EYqFLf.js";import{D as xt}from"./download-DA3qByua.js";import{T as ve}from"./trash-2-DqWZBWAo.js";import{U as ft}from"./upload-Cqpometq.js";import{S as ht}from"./shield-DVprApaA.js";import{P as gt}from"./plus-DK-V8p7I.js";import{C as jt}from"./chevron-up-BHyyZ98X.js";import{E as yt}from"./ellipsis-vertical-UHYLUh-c.js";import{P as St}from"./pencil-BgXbFsNu.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./chevron-left-CbJIXgY2.js";import"./input-Bx5u8hTS.js";import"./useLabelableId-D6-89JTk.js";import"./select-Dc4_9PNt.js";import"./textarea-Daa6n4S-.js";import"./label-DeKRRvpz.js";import"./badge-BvrzcoWP.js";import"./multi-media-upload-CTj_w8wW.js";import"./vendor-md-editor-vOqM56Ks.js";import"./dialog-Bx55NyOm.js";import"./media-utils-CAWMicYD.js";import"./archive-BygiklY2.js";import"./type-SsZV2Os-.js";import"./file-CHesjbVs.js";import"./link-B77fN-f1.js";import"./list-checks-BObmEj-I.js";import"./list-D5KGVMom.js";import"./grip-vertical-BHYRkqhd.js";import"./shuffle-DaVyXqDN.js";import"./arrow-right-jJ6PUH_T.js";import"./switch-DLTIF0BW.js";import"./save-Dw1cTtUv.js";import"./copy-BcCPCJtg.js";/** +import{k as Oe,f as l,j as t}from"./vendor-react-j_G0Dyx0.js";import{u as Qe}from"./use-url-state-BBO3na5E.js";import{bq as Ue,cK as Re,cG as Ve,cB as He,cA as ae,aU as ie,T as K,_ as O,n as j,U as Q,V as p,ak as ce,q as Je,aj as Ge,aE as N,ca as i,bl as C,bx as We,bv as Xe,bw as Ye,cd as Ze}from"./index-C-uFVPpg.js";import{u as w}from"./useMutation-BlIm5cor.js";import{C as le,a as de}from"./card-BBIqLCR8.js";import{C as pe}from"./checkbox-CP5mLBLk.js";import{T as et}from"./table-skeleton-fqjGRt14.js";import{P as tt}from"./pagination-bar-BuL5EI1J.js";import{T as st,d as nt,e as U,c as R,a as rt,b as $}from"./table-BoLxzYJ7.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-C8VouOFc.js";import{b as Se}from"./types-C-xO67t8.js";import{L as ot}from"./list-filter-BT2bcL5X.js";import{g as at,h as Te,b as Ce,F as it,c as ct}from"./field-renderer-RFQvRwv7.js";import{E as lt}from"./empty-state-CCcgx4uH.js";import{d as dt,A as pt,b as mt,a as ut}from"./api-config-sheet--dx-VZNy.js";import{D as xt}from"./download-DAp88Hv9.js";import{T as ve}from"./trash-2-BZ2bkzqQ.js";import{U as ft}from"./upload-BbRPA2Fp.js";import{S as ht}from"./shield-D-KuMU6n.js";import{P as gt}from"./plus-FYsVFl-s.js";import{C as jt}from"./chevron-up-hicU2AmB.js";import{E as yt}from"./ellipsis-vertical-B-dHvJs4.js";import{P as St}from"./pencil-xelQXmMG.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./chevron-left-C_tZtLI6.js";import"./input-Bp1SimRr.js";import"./useLabelableId-qP3If8Bd.js";import"./select-DJZwiot8.js";import"./textarea-BhaIg3vS.js";import"./label-DiZ0cGhf.js";import"./badge-Dhxp0jil.js";import"./multi-media-upload-JNDODXRR.js";import"./vendor-md-editor-vOqM56Ks.js";import"./dialog-if7Fez9x.js";import"./media-utils-8fvT1GGl.js";import"./archive-jZZoXCGk.js";import"./type-oTYNOCGK.js";import"./file-DTh4jxeH.js";import"./link-C3iEk-_n.js";import"./list-checks--lQS7OzB.js";import"./list-DB26GY3p.js";import"./grip-vertical-BFYOA9qd.js";import"./shuffle-ubxqp0_q.js";import"./arrow-right-C66mthM0.js";import"./switch-DoovYEIg.js";import"./save-Bhy1j3dM.js";import"./copy-DRI8cFnN.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Tt=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],Ct=Ue("settings-2",Tt);function Ts(){var se,ne,re;const v=Be(),{t:n}=Re(),V=Ve(),b=He(),d=v.group?`${v.group}/${v.singular}`:v.ctPath??"",{get:H,getInt:be,set:F}=Ke(),A=be("page"),u=H("status"),D=H("keyword"),J=50,[x,De]=l.useState("created_at"),[k,G]=l.useState("desc"),[P,z]=l.useState(null),[m,y]=l.useState(new Set),[ke,I]=l.useState(!1),[E,Ne]=l.useState(null),S=l.useRef(null),[we,M]=l.useState(!1),[W,X]=l.useState(dt),q=ie({queryKey:["content-type",d],queryFn:()=>C.send(`/admin/content-types/${d}`)}),s=q.data,T=ie({queryKey:["cms-items",s==null?void 0:s.plural,A,u,D],queryFn:()=>{if(!s)return{items:[],total:0,page:1,page_size:50};const e={page:String(A),page_size:String(J)};return u&&(e.status=u),D&&(e.search=D),C.send(`/admin/cms/${s.group?`${s.group}/`:""}${s.plural}`,{query:e})},enabled:!!s}),$e=[{type:"search",key:"keyword",placeholder:n("contentTypes.searchPlaceholder")}];function Fe(e){y(new Set),F({...e,status:u},!0)}const f=l.useMemo(()=>{var r;const e=((r=T.data)==null?void 0:r.items)??[];return x?[...e].sort((o,i)=>{const c=o[x],g=i[x];if(c==null&&g==null)return 0;if(c==null)return 1;if(g==null)return-1;if(typeof c=="number"&&typeof g=="number")return k==="asc"?c-g:g-c;const oe=String(c).localeCompare(String(g));return k==="asc"?oe:-oe}):e},[(se=T.data)==null?void 0:se.items,x,k]),Y=w({mutationFn:({collection:e,id:r})=>C.adminCt(e).delete(r),onSuccess:()=>{a.success(n("contentTypes.itemDeleted")),s&&b.invalidateQueries({queryKey:["cms-items",s.plural]})},onError:e=>{e instanceof N?a.error(e.message):a.error(n("contentTypes.failedToDeleteItem"))}}),Z=f.length>0&&f.every(e=>m.has(String(e.id))),Ae=m.size>0;function Pe(e){y(r=>{const o=new Set(r);return o.has(e)?o.delete(e):o.add(e),o})}function ze(){y(Z?new Set:new Set(f.map(e=>String(e.id))))}const ee=w({mutationFn:({collection:e,ids:r})=>C.send(`/admin/cms/${e}/batch`,{method:"POST",body:{action:"delete",ids:r}}),onSuccess:e=>{a.success(n("contentTypes.batchDeleteSuccess",{count:(e==null?void 0:e.affected)??0})),y(new Set),s&&b.invalidateQueries({queryKey:["cms-items",s.plural]})},onError:e=>{e instanceof N?a.error(e.message):a.error(n("contentTypes.failedToDeleteItem"))}});function Ie(){if(!s)return;const e=s.group?`${s.group}/${s.plural}`:s.plural;ee.mutate({collection:e,ids:[...m]}),I(!1)}function L(e){if(!s)return;const r=f.filter(c=>m.has(String(c.id)));if(r.length===0)return;const o=new Date().toISOString().slice(0,10),i=s.plural;e==="json"?We(r,`${i}-${o}.json`):e==="csv"?Xe(r,h,O,`${i}-${o}.csv`):Ye(r,h,O,`${i}-${o}.xlsx`),a.success(n("contentTypes.exportSuccess",{count:r.length}))}const Ee=w({mutationFn:async({format:e,file:r})=>{if(!s)throw new Error("schema not loaded");const o=s.group?`${s.group}/${s.plural}`:s.plural;return Ze(`/admin/cms/${o}/import`,e,r)},onSuccess:e=>{var r;if(e.failed===0)a.success(n("contentTypes.importSuccess",{count:e.created}));else{const o=n("contentTypes.importPartial",{ok:e.created,failed:e.failed}),i=(r=e.errors[0])==null?void 0:r.message,c=e.errors.length>1?` (+${e.errors.length-1} more)`:"";a.error(i?`${o} — ${i}${c}`:o),e.errors.length>0&&console.error("import errors:",e.errors)}s&&b.invalidateQueries({queryKey:["cms-items",s.plural]})},onError:e=>{a.error(e instanceof N?e.message:n("contentTypes.importFailed"))}}),te=w({mutationFn:async()=>{s&&await C.admin.contentTypes.update(d,{api:mt(W)})},onSuccess:()=>{a.success(n("contentTypes.apiSaved")),M(!1),b.invalidateQueries({queryKey:["content-type",d]})},onError:e=>{a.error(e instanceof N?e.message:n("contentTypes.apiSaveFailed"))}});function Me(){s&&(X(ut(s.api)),M(!0))}function _(e){Ne(e),S.current&&(S.current.accept=e==="json"?".json":e==="csv"?".csv":".xlsx",S.current.value="",S.current.click())}async function qe(e){var i;const r=(i=e.target.files)==null?void 0:i[0];if(e.target.value="",!r||!E||!s)return;const o=E==="excel"?"xlsx":E;if(r.size>8*1024*1024){a.error(n("contentTypes.importTooLarge"));return}Ee.mutate({format:o,file:r})}function Le(e){e===x?G(r=>r==="asc"?"desc":"asc"):(De(e),G("asc"))}function _e(e){z(e)}function Oe(){if(!s||!P)return;const e=s.group?`${s.group}/${s.plural}`:s.plural;Y.mutate({collection:e,id:P}),z(null)}const Qe=Math.ceil((((ne=T.data)==null?void 0:ne.total)??0)/J),h=s?["id",...it(s),...Te(s,"timestampable")?["created_at","updated_at"]:[]]:[];function O(e){if(e==="id")return"ID";if(e==="created_at")return n("contentTypes.createdAt");if(e==="updated_at")return n("contentTypes.updatedAt");const r=Ce(s,e);return r?ct(r):e}return q.isLoading?t.jsxs("div",{className:"space-y-6",children:[t.jsx(ae,{className:"h-8 w-48"}),t.jsx(ae,{className:"h-64 w-full"})]}):q.error||!s?t.jsx("div",{className:"space-y-6",children:t.jsx(le,{children:t.jsx(de,{className:"py-8 text-center text-muted-foreground",children:n("contentTypes.notFoundMsg",{singular:d})})})}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"space-y-6 -m-6",children:t.jsxs("div",{className:"space-y-6 px-6 pt-6 pb-6",children:[t.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[t.jsx(ot,{filters:$e,values:{keyword:D},onChange:Fe}),t.jsxs("div",{className:"flex items-center gap-2",children:[Ae&&t.jsxs(t.Fragment,{children:[t.jsxs(Q,{children:[t.jsxs(B,{render:t.jsx(j,{variant:"outline",size:"sm"}),children:[t.jsx(xt,{className:"size-4"}),n("contentTypes.export")]}),t.jsxs(K,{align:"start",children:[t.jsx(p,{onClick:()=>L("json"),children:n("contentTypes.exportJson")}),t.jsx(p,{onClick:()=>L("csv"),children:n("contentTypes.exportCsv")}),t.jsx(p,{onClick:()=>L("excel"),children:n("contentTypes.exportExcel")})]})]}),t.jsxs(j,{variant:"destructive",size:"sm",onClick:()=>I(!0),disabled:ee.isPending,children:[t.jsx(ve,{className:"size-4"}),n("common.delete")," (",m.size,")"]})]}),t.jsxs(Q,{children:[t.jsxs(B,{render:t.jsx(j,{variant:"outline",size:"sm"}),children:[t.jsx(ft,{className:"size-4"}),n("contentTypes.import")]}),t.jsxs(K,{align:"end",children:[t.jsx(p,{onClick:()=>_("json"),children:n("contentTypes.importJson")}),t.jsx(p,{onClick:()=>_("csv"),children:n("contentTypes.importCsv")}),t.jsx(p,{onClick:()=>_("excel"),children:n("contentTypes.importExcel")})]})]}),t.jsx(ce,{href:`/content-types/builder?edit=${d}`,children:t.jsxs(j,{variant:"outline",children:[t.jsx(Ct,{className:"size-4"}),n("contentTypes.editStructure")]})}),t.jsxs(j,{variant:"outline",onClick:Me,children:[t.jsx(ht,{className:"size-4"}),n("contentTypes.api")]}),t.jsx(ce,{href:`/content-types/${d}/new`,children:t.jsxs(j,{children:[t.jsx(gt,{className:"size-4 me-1"}),n("contentTypes.newItem",{name:s.name})]})})]})]}),t.jsx("input",{ref:S,type:"file",accept:".json,.csv,.xlsx",className:"hidden",onChange:qe}),Te(s,"statusable")&&t.jsx("div",{className:"flex gap-1 bg-muted rounded-lg p-[3px] w-fit",children:["all",Se.draft,Se.published].map(e=>{const r=e==="all"?u==="":u===e;return t.jsx("button",{type:"button",onClick:()=>{F({status:e==="all"?"":e},!0)},className:`px-3 py-1 text-sm rounded-md transition-colors ${r?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:e.charAt(0).toUpperCase()+e.slice(1)},e)})}),t.jsx(le,{children:t.jsx(de,{className:"p-0",children:T.isLoading?t.jsx(et,{cols:h.length+2}):t.jsxs(st,{children:[t.jsx(nt,{children:t.jsxs(U,{children:[t.jsx(R,{className:"w-10",children:t.jsx(pe,{checked:Z,onCheckedChange:ze})}),h.map(e=>t.jsx(R,{children:t.jsxs("button",{type:"button",className:"inline-flex items-center gap-1 hover:text-foreground transition-colors",onClick:()=>Le(e),children:[O(e),x===e?k==="asc"?t.jsx(jt,{className:"size-3"}):t.jsx(Je,{className:"size-3"}):null]})},e)),t.jsx(R,{className:"text-end",children:n("common.actions")})]})}),t.jsx(rt,{children:f.length===0?t.jsx(U,{children:t.jsx($,{colSpan:h.length+2,children:t.jsx(lt,{icon:Ge,title:n("contentTypes.noItems"),description:n("contentTypes.noItemsDesc"),action:{label:n("contentTypes.newItem",{name:s.name}),onClick:()=>V.push(`/content-types/${d}/new`)}})})}):f.map((e,r)=>t.jsxs(U,{className:r%2===1?"bg-muted/50":void 0,children:[t.jsx($,{children:t.jsx(pe,{checked:m.has(String(e.id)),onCheckedChange:()=>Pe(String(e.id))})}),h.map(o=>{const i=Ce(s,o);return t.jsx($,{children:t.jsx(at,{field:i,value:e[o],columnName:o})},o)}),t.jsx($,{className:"text-end",children:t.jsxs(Q,{children:[t.jsx(B,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",onClick:o=>{o.stopPropagation(),o.preventDefault()},children:t.jsx(yt,{className:"size-4"})}),t.jsxs(K,{align:"end",children:[t.jsxs(p,{onClick:o=>{o.stopPropagation(),V.push(`/content-types/${d}/${e.id}/edit`)},children:[t.jsx(St,{className:"size-4 me-2"}),n("common.edit")]}),t.jsxs(p,{className:"text-destructive",onClick:o=>{o.stopPropagation(),_e(e.id)},disabled:Y.isPending,children:[t.jsx(ve,{className:"size-4 me-2"}),n("common.delete")]})]})]})})]},e.id))})]})})}),t.jsx(tt,{page:A,totalPages:Qe,total:((re=T.data)==null?void 0:re.total)??0,onPageChange:e=>F({page:e})})]})}),t.jsx(me,{open:!!P,onOpenChange:e=>{e||z(null)},children:t.jsxs(ue,{children:[t.jsxs(xe,{children:[t.jsx(fe,{children:n("common.confirmDeleteTitle")}),t.jsx(he,{children:n("contentTypes.confirmDeleteItem")})]}),t.jsxs(ge,{children:[t.jsx(je,{children:n("common.cancel")}),t.jsx(ye,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:Oe,children:n("common.delete")})]})]})}),t.jsx(me,{open:ke,onOpenChange:I,children:t.jsxs(ue,{children:[t.jsxs(xe,{children:[t.jsx(fe,{children:n("common.confirmDeleteTitle")}),t.jsx(he,{children:n("contentTypes.confirmBatchDelete",{count:m.size})})]}),t.jsxs(ge,{children:[t.jsx(je,{children:n("common.cancel")}),t.jsx(ye,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:Ie,children:n("common.delete")})]})]})}),t.jsx(pt,{open:we,onOpenChange:M,api:W,onChange:X,plural:(s==null?void 0:s.plural)??"",group:(s==null?void 0:s.group)??"",onSave:te.mutateAsync,saving:te.isPending})]})}export{Ts as default}; + */const Tt=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],Ct=Ue("settings-2",Tt);function Ts(){var se,ne,re;const v=Oe(),{t:n}=Re(),V=Ve(),b=He(),d=v.group?`${v.group}/${v.singular}`:v.ctPath??"",{get:H,getInt:be,set:A}=Qe(),F=be("page"),u=H("status"),D=H("keyword"),J=50,[x,De]=l.useState("created_at"),[k,G]=l.useState("desc"),[P,z]=l.useState(null),[m,y]=l.useState(new Set),[ke,I]=l.useState(!1),[E,Ne]=l.useState(null),S=l.useRef(null),[we,M]=l.useState(!1),[W,X]=l.useState(dt),q=ae({queryKey:["content-type",d],queryFn:()=>C.send(`/admin/content-types/${d}`)}),s=q.data,T=ae({queryKey:["cms-items",s==null?void 0:s.plural,F,u,D],queryFn:()=>{if(!s)return{items:[],total:0,page:1,page_size:50};const e={page:String(F),page_size:String(J)};return u&&(e.status=u),D&&(e.search=D),C.send(`/admin/cms/${s.group?`${s.group}/`:""}${s.plural}`,{query:e})},enabled:!!s}),$e=[{type:"search",key:"keyword",placeholder:n("contentTypes.searchPlaceholder")}];function Ae(e){y(new Set),A({...e,status:u},!0)}const f=l.useMemo(()=>{var r;const e=((r=T.data)==null?void 0:r.items)??[];return x?[...e].sort((o,a)=>{const c=o[x],g=a[x];if(c==null&&g==null)return 0;if(c==null)return 1;if(g==null)return-1;if(typeof c=="number"&&typeof g=="number")return k==="asc"?c-g:g-c;const oe=String(c).localeCompare(String(g));return k==="asc"?oe:-oe}):e},[(se=T.data)==null?void 0:se.items,x,k]),Y=w({mutationFn:({collection:e,id:r})=>C.adminCt(e).delete(r),onSuccess:()=>{i.success(n("contentTypes.itemDeleted")),s&&b.invalidateQueries({queryKey:["cms-items",s.plural]})},onError:e=>{e instanceof N?i.error(e.message):i.error(n("contentTypes.failedToDeleteItem"))}}),Z=f.length>0&&f.every(e=>m.has(String(e.id))),Fe=m.size>0;function Pe(e){y(r=>{const o=new Set(r);return o.has(e)?o.delete(e):o.add(e),o})}function ze(){y(Z?new Set:new Set(f.map(e=>String(e.id))))}const ee=w({mutationFn:({collection:e,ids:r})=>C.send(`/admin/cms/${e}/batch`,{method:"POST",body:{action:"delete",ids:r}}),onSuccess:e=>{i.success(n("contentTypes.batchDeleteSuccess",{count:(e==null?void 0:e.affected)??0})),y(new Set),s&&b.invalidateQueries({queryKey:["cms-items",s.plural]})},onError:e=>{e instanceof N?i.error(e.message):i.error(n("contentTypes.failedToDeleteItem"))}});function Ie(){if(!s)return;const e=s.group?`${s.group}/${s.plural}`:s.plural;ee.mutate({collection:e,ids:[...m]}),I(!1)}function L(e){if(!s)return;const r=f.filter(c=>m.has(String(c.id)));if(r.length===0)return;const o=new Date().toISOString().slice(0,10),a=s.plural;e==="json"?We(r,`${a}-${o}.json`):e==="csv"?Xe(r,h,B,`${a}-${o}.csv`):Ye(r,h,B,`${a}-${o}.xlsx`),i.success(n("contentTypes.exportSuccess",{count:r.length}))}const Ee=w({mutationFn:async({format:e,file:r})=>{if(!s)throw new Error("schema not loaded");const o=s.group?`${s.group}/${s.plural}`:s.plural;return Ze(`/admin/cms/${o}/import`,e,r)},onSuccess:e=>{var r;if(e.failed===0)i.success(n("contentTypes.importSuccess",{count:e.created}));else{const o=n("contentTypes.importPartial",{ok:e.created,failed:e.failed}),a=(r=e.errors[0])==null?void 0:r.message,c=e.errors.length>1?` (+${e.errors.length-1} more)`:"";i.error(a?`${o} — ${a}${c}`:o),e.errors.length>0&&console.error("import errors:",e.errors)}s&&b.invalidateQueries({queryKey:["cms-items",s.plural]})},onError:e=>{i.error(e instanceof N?e.message:n("contentTypes.importFailed"))}}),te=w({mutationFn:async()=>{s&&await C.admin.contentTypes.update(d,{api:mt(W)})},onSuccess:()=>{i.success(n("contentTypes.apiSaved")),M(!1),b.invalidateQueries({queryKey:["content-type",d]})},onError:e=>{i.error(e instanceof N?e.message:n("contentTypes.apiSaveFailed"))}});function Me(){s&&(X(ut(s.api)),M(!0))}function _(e){Ne(e),S.current&&(S.current.accept=e==="json"?".json":e==="csv"?".csv":".xlsx",S.current.value="",S.current.click())}async function qe(e){var a;const r=(a=e.target.files)==null?void 0:a[0];if(e.target.value="",!r||!E||!s)return;const o=E==="excel"?"xlsx":E;if(r.size>8*1024*1024){i.error(n("contentTypes.importTooLarge"));return}Ee.mutate({format:o,file:r})}function Le(e){e===x?G(r=>r==="asc"?"desc":"asc"):(De(e),G("asc"))}function _e(e){z(e)}function Be(){if(!s||!P)return;const e=s.group?`${s.group}/${s.plural}`:s.plural;Y.mutate({collection:e,id:P}),z(null)}const Ke=Math.ceil((((ne=T.data)==null?void 0:ne.total)??0)/J),h=s?["id",...at(s),...Te(s,"timestampable")?["created_at","updated_at"]:[]]:[];function B(e){if(e==="id")return"ID";if(e==="created_at")return n("contentTypes.createdAt");if(e==="updated_at")return n("contentTypes.updatedAt");const r=Ce(s,e);return r?ct(r):e}return q.isLoading?t.jsxs("div",{className:"space-y-6",children:[t.jsx(ie,{className:"h-8 w-48"}),t.jsx(ie,{className:"h-64 w-full"})]}):q.error||!s?t.jsx("div",{className:"space-y-6",children:t.jsx(le,{children:t.jsx(de,{className:"py-8 text-center text-muted-foreground",children:n("contentTypes.notFoundMsg",{singular:d})})})}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"space-y-6 -m-6",children:t.jsxs("div",{className:"space-y-6 px-6 pt-6 pb-6",children:[t.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[t.jsx(ot,{filters:$e,values:{keyword:D},onChange:Ae}),t.jsxs("div",{className:"flex items-center gap-2",children:[Fe&&t.jsxs(t.Fragment,{children:[t.jsxs(K,{children:[t.jsxs(O,{render:t.jsx(j,{variant:"outline",size:"sm"}),children:[t.jsx(xt,{className:"size-4"}),n("contentTypes.export")]}),t.jsxs(Q,{align:"start",children:[t.jsx(p,{onClick:()=>L("json"),children:n("contentTypes.exportJson")}),t.jsx(p,{onClick:()=>L("csv"),children:n("contentTypes.exportCsv")}),t.jsx(p,{onClick:()=>L("excel"),children:n("contentTypes.exportExcel")})]})]}),t.jsxs(j,{variant:"destructive",size:"sm",onClick:()=>I(!0),disabled:ee.isPending,children:[t.jsx(ve,{className:"size-4"}),n("common.delete")," (",m.size,")"]})]}),t.jsxs(K,{children:[t.jsxs(O,{render:t.jsx(j,{variant:"outline",size:"sm"}),children:[t.jsx(ft,{className:"size-4"}),n("contentTypes.import")]}),t.jsxs(Q,{align:"end",children:[t.jsx(p,{onClick:()=>_("json"),children:n("contentTypes.importJson")}),t.jsx(p,{onClick:()=>_("csv"),children:n("contentTypes.importCsv")}),t.jsx(p,{onClick:()=>_("excel"),children:n("contentTypes.importExcel")})]})]}),t.jsx(ce,{href:`/content-types/builder?edit=${d}`,children:t.jsxs(j,{variant:"outline",children:[t.jsx(Ct,{className:"size-4"}),n("contentTypes.editStructure")]})}),t.jsxs(j,{variant:"outline",onClick:Me,children:[t.jsx(ht,{className:"size-4"}),n("contentTypes.api")]}),t.jsx(ce,{href:`/content-types/${d}/new`,children:t.jsxs(j,{children:[t.jsx(gt,{className:"size-4 me-1"}),n("contentTypes.newItem",{name:s.name})]})})]})]}),t.jsx("input",{ref:S,type:"file",accept:".json,.csv,.xlsx",className:"hidden",onChange:qe}),Te(s,"statusable")&&t.jsx("div",{className:"flex gap-1 bg-muted rounded-lg p-[3px] w-fit",children:["all",Se.draft,Se.published].map(e=>{const r=e==="all"?u==="":u===e;return t.jsx("button",{type:"button",onClick:()=>{A({status:e==="all"?"":e},!0)},className:`px-3 py-1 text-sm rounded-md transition-colors ${r?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:e.charAt(0).toUpperCase()+e.slice(1)},e)})}),t.jsx(le,{children:t.jsx(de,{className:"p-0",children:T.isLoading?t.jsx(et,{cols:h.length+2}):t.jsxs(st,{children:[t.jsx(nt,{children:t.jsxs(U,{children:[t.jsx(R,{className:"w-10",children:t.jsx(pe,{checked:Z,onCheckedChange:ze})}),h.map(e=>t.jsx(R,{children:t.jsxs("button",{type:"button",className:"inline-flex items-center gap-1 hover:text-foreground transition-colors",onClick:()=>Le(e),children:[B(e),x===e?k==="asc"?t.jsx(jt,{className:"size-3"}):t.jsx(Je,{className:"size-3"}):null]})},e)),t.jsx(R,{className:"text-end",children:n("common.actions")})]})}),t.jsx(rt,{children:f.length===0?t.jsx(U,{children:t.jsx($,{colSpan:h.length+2,children:t.jsx(lt,{icon:Ge,title:n("contentTypes.noItems"),description:n("contentTypes.noItemsDesc"),action:{label:n("contentTypes.newItem",{name:s.name}),onClick:()=>V.push(`/content-types/${d}/new`)}})})}):f.map((e,r)=>t.jsxs(U,{className:r%2===1?"bg-muted/50":void 0,children:[t.jsx($,{children:t.jsx(pe,{checked:m.has(String(e.id)),onCheckedChange:()=>Pe(String(e.id))})}),h.map(o=>{const a=Ce(s,o);return t.jsx($,{children:t.jsx(it,{field:a,value:e[o],columnName:o})},o)}),t.jsx($,{className:"text-end",children:t.jsxs(K,{children:[t.jsx(O,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",onClick:o=>{o.stopPropagation(),o.preventDefault()},children:t.jsx(yt,{className:"size-4"})}),t.jsxs(Q,{align:"end",children:[t.jsxs(p,{onClick:o=>{o.stopPropagation(),V.push(`/content-types/${d}/${e.id}/edit`)},children:[t.jsx(St,{className:"size-4 me-2"}),n("common.edit")]}),t.jsxs(p,{className:"text-destructive",onClick:o=>{o.stopPropagation(),_e(e.id)},disabled:Y.isPending,children:[t.jsx(ve,{className:"size-4 me-2"}),n("common.delete")]})]})]})})]},e.id))})]})})}),t.jsx(tt,{page:F,totalPages:Ke,total:((re=T.data)==null?void 0:re.total)??0,onPageChange:e=>A({page:e})})]})}),t.jsx(me,{open:!!P,onOpenChange:e=>{e||z(null)},children:t.jsxs(ue,{children:[t.jsxs(xe,{children:[t.jsx(fe,{children:n("common.confirmDeleteTitle")}),t.jsx(he,{children:n("contentTypes.confirmDeleteItem")})]}),t.jsxs(ge,{children:[t.jsx(je,{children:n("common.cancel")}),t.jsx(ye,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:Be,children:n("common.delete")})]})]})}),t.jsx(me,{open:ke,onOpenChange:I,children:t.jsxs(ue,{children:[t.jsxs(xe,{children:[t.jsx(fe,{children:n("common.confirmDeleteTitle")}),t.jsx(he,{children:n("contentTypes.confirmBatchDelete",{count:m.size})})]}),t.jsxs(ge,{children:[t.jsx(je,{children:n("common.cancel")}),t.jsx(ye,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:Ie,children:n("common.delete")})]})]})}),t.jsx(pt,{open:we,onOpenChange:M,api:W,onChange:X,plural:(s==null?void 0:s.plural)??"",group:(s==null?void 0:s.group)??"",onSave:te.mutateAsync,saving:te.isPending})]})}export{Ts as default}; diff --git a/adminui/assets/content-types-new-CP2kBubL.js b/adminui/assets/content-types-new-CgPM-paM.js similarity index 54% rename from adminui/assets/content-types-new-CP2kBubL.js rename to adminui/assets/content-types-new-CgPM-paM.js index e82601f0..ce4a136f 100644 --- a/adminui/assets/content-types-new-CP2kBubL.js +++ b/adminui/assets/content-types-new-CgPM-paM.js @@ -1 +1 @@ -import{k as L,f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{cF as q,cJ as R,cz as z,aT as b,ak as B,n as N,aE as I,c9 as p,bk as v}from"./index-DFelzBez.js";import{u as J}from"./useMutation-DgRiHz67.js";import{C as S,a as C}from"./card-D3QxRGt-.js";import{B as M}from"./badge-BvrzcoWP.js";import{L as _}from"./label-DeKRRvpz.js";import{S as K,e as O,f as Q,a as V,c as F}from"./select-Dc4_9PNt.js";import{b as c}from"./types-C-xO67t8.js";import{a as A,h as $,c as G}from"./field-renderer-B16JYsaw.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./input-Bx5u8hTS.js";import"./textarea-Daa6n4S-.js";import"./multi-media-upload-CTj_w8wW.js";import"./vendor-md-editor-vOqM56Ks.js";import"./dialog-Bx55NyOm.js";import"./media-utils-CAWMicYD.js";import"./archive-BygiklY2.js";import"./type-SsZV2Os-.js";import"./file-CHesjbVs.js";import"./link-B77fN-f1.js";import"./list-checks-BObmEj-I.js";import"./list-D5KGVMom.js";import"./chevron-left-CbJIXgY2.js";import"./upload-Cqpometq.js";import"./grip-vertical-BHYRkqhd.js";import"./shuffle-DaVyXqDN.js";import"./arrow-right-jJ6PUH_T.js";import"./download-DA3qByua.js";function k(o){return o.fields.filter(r=>!(r.private||r.name==="id"||r.name==="status"||r.name==="created_at"||r.name==="updated_at"))}function H(o){const r={};for(const m of o.fields)m.default!==void 0&&m.default!==null&&(r[m.name]=m.default);return $(o,"statusable")&&(r.status=c.draft),r}function we(){const o=L(),r=o.group?`${o.group}/${o.singular}`:o.ctPath??"",m=q(),{t:n}=R(),f=z({queryKey:["content-type",r],queryFn:()=>v.send(`/admin/content-types/${r}`)}),s=f.data,[i,x]=d.useState({}),[E,h]=d.useState({}),[w,P]=d.useState(!1);s&&!w&&(x(H(s)),P(!0));const l=J({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})),m.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 T(){if(!s)return!1;const t={};for(const a of k(s))if(a.required&&(i[a.name]==null||i[a.name]==="")&&(t[a.name]=n("common.isRequired",{field:G(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 D(t){t.preventDefault(),T()&&l.mutate(i)}const j=s?k(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:D,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(A,{field:t,value:i[t.name],onChange:a=>g(t.name,a),error:E[t.name]},t.name)),$(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(K,{value:i.status||c.draft,onValueChange:t=>{t&&g("status",t)},items:{[c.draft]:n("common.draft"),[c.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:c.draft,children:n("common.draft")}),e.jsx(F,{value:c.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{we as default}; +import{k as T,f as d,j as e}from"./vendor-react-j_G0Dyx0.js";import{cG as q,cK as R,cA as B,aU as b,ak as I,n as N,aE as K,ca as p,bl as v}from"./index-C-uFVPpg.js";import{u as M}from"./useMutation-BlIm5cor.js";import{C as S,a as C}from"./card-BBIqLCR8.js";import{B as _}from"./badge-Dhxp0jil.js";import{L as z}from"./label-DiZ0cGhf.js";import{S as J,e as O,f as Q,a as V,c as F}from"./select-DJZwiot8.js";import{b as c}from"./types-C-xO67t8.js";import{a as A,h as $,c as G}from"./field-renderer-RFQvRwv7.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./input-Bp1SimRr.js";import"./textarea-BhaIg3vS.js";import"./multi-media-upload-JNDODXRR.js";import"./vendor-md-editor-vOqM56Ks.js";import"./dialog-if7Fez9x.js";import"./media-utils-8fvT1GGl.js";import"./archive-jZZoXCGk.js";import"./type-oTYNOCGK.js";import"./file-DTh4jxeH.js";import"./link-C3iEk-_n.js";import"./list-checks--lQS7OzB.js";import"./list-DB26GY3p.js";import"./chevron-left-C_tZtLI6.js";import"./upload-BbRPA2Fp.js";import"./grip-vertical-BFYOA9qd.js";import"./shuffle-ubxqp0_q.js";import"./arrow-right-C66mthM0.js";import"./download-DAp88Hv9.js";function k(o){return o.fields.filter(r=>!(r.private||r.name==="id"||r.name==="status"||r.name==="created_at"||r.name==="updated_at"))}function U(o){const r={};for(const m of o.fields)m.default!==void 0&&m.default!==null&&(r[m.name]=m.default);return $(o,"statusable")&&(r.status=c.draft),r}function we(){const o=T(),r=o.group?`${o.group}/${o.singular}`:o.ctPath??"",m=q(),{t:n}=R(),f=B({queryKey:["content-type",r],queryFn:()=>v.send(`/admin/content-types/${r}`)}),s=f.data,[i,x]=d.useState({}),[E,h]=d.useState({}),[w,P]=d.useState(!1);s&&!w&&(x(U(s)),P(!0));const l=M({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})),m.push(`/content-types/${r}`)},onError:t=>{t instanceof K?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 k(s))if(a.required&&(i[a.name]==null||i[a.name]==="")&&(t[a.name]=n("common.isRequired",{field:G(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?k(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(_,{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(A,{field:t,value:i[t.name],onChange:a=>g(t.name,a),error:E[t.name]},t.name)),$(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(z,{children:n("common.status")}),e.jsxs(J,{value:i.status||c.draft,onValueChange:t=>{t&&g("status",t)},items:{[c.draft]:n("common.draft"),[c.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:c.draft,children:n("common.draft")}),e.jsx(F,{value:c.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(I,{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{we as default}; diff --git a/adminui/assets/convert-BA0j83AZ.js b/adminui/assets/convert-C9hr-qBt.js similarity index 68% rename from adminui/assets/convert-BA0j83AZ.js rename to adminui/assets/convert-C9hr-qBt.js index a6db9794..e048b48e 100644 --- a/adminui/assets/convert-BA0j83AZ.js +++ b/adminui/assets/convert-C9hr-qBt.js @@ -1 +1 @@ -import{f as o,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as z,cz as f,n as j,a4 as T,al as M,c9 as v,aE as P,bk as l}from"./index-DFelzBez.js";import{u as L}from"./useMutation-DgRiHz67.js";import{B as b}from"./badge-BvrzcoWP.js";import{C as N,a as y}from"./card-D3QxRGt-.js";import{I as Q}from"./input-Bx5u8hTS.js";import{L as m}from"./label-DeKRRvpz.js";import{S as q,e as B,f as D,a as J,c as S}from"./select-Dc4_9PNt.js";import{S as K}from"./switch-DLTIF0BW.js";import{M as R}from"./vendor-md-editor-vOqM56Ks.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";const w=new Set(["completed","failed"]);function ce(){var h;const{t}=z(),[p,u]=o.useState(null),[c,C]=o.useState("auto"),[x,k]=o.useState(!0),[n,g]=o.useState(null),I=(((h=f({queryKey:["docparse-engines"],queryFn:()=>l.send("/admin/docparse/engines")}).data)==null?void 0:h.items)??[]).filter(a=>a.enabled&&a.registered),F=f({queryKey:["docparse-conversion",n],enabled:!!n,queryFn:()=>l.send(`/document-conversions/${n}`),refetchInterval:a=>a.state.data&&w.has(a.state.data.status)?!1:1500}),d=L({mutationFn:async()=>{const a=new FormData;return a.append("file",p),c!=="auto"&&a.append("engine",c),a.append("extract_images",String(x)),l.send("/document-conversions",{method:"POST",body:a})},onSuccess:a=>{g(a.job_id),v.success(t("docparse.jobSubmitted"))},onError:a=>v.error(a instanceof P?a.message:t("docparse.failedToSubmit"))});function E(){g(null),u(null)}const s=F.data,r=s==null?void 0:s.status,_=!!n&&!!r&&!w.has(r);return e.jsxs("div",{className:"space-y-6",children:[e.jsx(N,{children:e.jsxs(y,{className:"space-y-4 p-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("docparse.convertHint")}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"dp-cv-file",children:[t("docparse.file")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(Q,{id:"dp-cv-file",type:"file",disabled:!!n,onChange:a=>{var i;return u(((i=a.target.files)==null?void 0:i[0])??null)}})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{children:t("docparse.engineName")}),e.jsxs(q,{value:c,onValueChange:a=>C(a??"auto"),disabled:!!n,children:[e.jsx(B,{children:e.jsx(D,{})}),e.jsxs(J,{children:[e.jsx(S,{value:"auto",children:t("docparse.engineAuto")}),I.map(a=>e.jsx(S,{value:a.engine_name,children:a.engine_name},a.engine_name))]})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{id:"dp-cv-extract",checked:x,disabled:!!n,onCheckedChange:k}),e.jsx(m,{htmlFor:"dp-cv-extract",className:"font-normal",children:t("docparse.extractImages")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[n?e.jsx(j,{size:"sm",variant:"outline",onClick:E,children:t("docparse.newJob")}):e.jsxs(j,{size:"sm",disabled:!p||d.isPending,onClick:()=>d.mutate(),children:[e.jsx(T,{className:"me-2 size-4"}),d.isPending?t("common.saving"):t("docparse.parse")]}),_&&e.jsxs("span",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(M,{className:"size-4 animate-spin"}),t("docparse.jobRunning")]})]})]})}),n&&r&&e.jsx(N,{children:e.jsxs(y,{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[e.jsx(b,{variant:r==="completed"?"outline":r==="failed"?"destructive":"secondary",className:"capitalize",children:r}),e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:n}),(s==null?void 0:s.engine)&&e.jsx(b,{variant:"secondary",className:"font-mono text-xs",children:s.engine}),(s==null?void 0:s.pages)!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t("docparse.pages"),": ",s.pages]}),(s==null?void 0:s.images)!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t("docparse.images"),": ",s.images]}),(s==null?void 0:s.finished_at)&&e.jsx("span",{className:"text-xs text-muted-foreground",children:s.finished_at})]}),(s==null?void 0:s.warnings)&&s.warnings.length>0&&e.jsx("div",{className:"rounded-md border border-amber-500/40 bg-amber-500/10 p-3 text-xs",children:s.warnings.map((a,i)=>e.jsx("p",{children:a},i))}),r==="failed"&&e.jsx("p",{className:"text-sm text-destructive",children:(s==null?void 0:s.error)??t("docparse.jobFailed")}),r==="completed"&&(s==null?void 0:s.markdown)&&e.jsx("div",{"data-color-mode":"auto",className:"max-h-[32rem] overflow-auto rounded-md border p-4",children:e.jsx(R,{source:s.markdown,style:{background:"transparent"},skipHtml:!0})})]})})]})}export{ce as default}; +import{f as o,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as T,cA as f,n as j,a4 as z,al as M,ca as v,aE as P,bl as l}from"./index-C-uFVPpg.js";import{u as K}from"./useMutation-BlIm5cor.js";import{B as b}from"./badge-Dhxp0jil.js";import{C as N,a as y}from"./card-BBIqLCR8.js";import{I as L}from"./input-Bp1SimRr.js";import{L as m}from"./label-DiZ0cGhf.js";import{S as Q,e as q,f as A,a as B,c as S}from"./select-DJZwiot8.js";import{S as D}from"./switch-DoovYEIg.js";import{M as R}from"./vendor-md-editor-vOqM56Ks.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";const w=new Set(["completed","failed"]);function ce(){var h;const{t}=T(),[p,u]=o.useState(null),[c,C]=o.useState("auto"),[x,I]=o.useState(!0),[n,g]=o.useState(null),k=(((h=f({queryKey:["docparse-engines"],queryFn:()=>l.send("/admin/docparse/engines")}).data)==null?void 0:h.items)??[]).filter(a=>a.enabled&&a.registered),F=f({queryKey:["docparse-conversion",n],enabled:!!n,queryFn:()=>l.send(`/document-conversions/${n}`),refetchInterval:a=>a.state.data&&w.has(a.state.data.status)?!1:1500}),d=K({mutationFn:async()=>{const a=new FormData;return a.append("file",p),c!=="auto"&&a.append("engine",c),a.append("extract_images",String(x)),l.send("/document-conversions",{method:"POST",body:a})},onSuccess:a=>{g(a.job_id),v.success(t("docparse.jobSubmitted"))},onError:a=>v.error(a instanceof P?a.message:t("docparse.failedToSubmit"))});function E(){g(null),u(null)}const s=F.data,r=s==null?void 0:s.status,_=!!n&&!!r&&!w.has(r);return e.jsxs("div",{className:"space-y-6",children:[e.jsx(N,{children:e.jsxs(y,{className:"space-y-4 p-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("docparse.convertHint")}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"dp-cv-file",children:[t("docparse.file")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(L,{id:"dp-cv-file",type:"file",disabled:!!n,onChange:a=>{var i;return u(((i=a.target.files)==null?void 0:i[0])??null)}})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{children:t("docparse.engineName")}),e.jsxs(Q,{value:c,onValueChange:a=>C(a??"auto"),disabled:!!n,children:[e.jsx(q,{children:e.jsx(A,{})}),e.jsxs(B,{children:[e.jsx(S,{value:"auto",children:t("docparse.engineAuto")}),k.map(a=>e.jsx(S,{value:a.engine_name,children:a.engine_name},a.engine_name))]})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(D,{id:"dp-cv-extract",checked:x,disabled:!!n,onCheckedChange:I}),e.jsx(m,{htmlFor:"dp-cv-extract",className:"font-normal",children:t("docparse.extractImages")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[n?e.jsx(j,{size:"sm",variant:"outline",onClick:E,children:t("docparse.newJob")}):e.jsxs(j,{size:"sm",disabled:!p||d.isPending,onClick:()=>d.mutate(),children:[e.jsx(z,{className:"me-2 size-4"}),d.isPending?t("common.saving"):t("docparse.parse")]}),_&&e.jsxs("span",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(M,{className:"size-4 animate-spin"}),t("docparse.jobRunning")]})]})]})}),n&&r&&e.jsx(N,{children:e.jsxs(y,{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[e.jsx(b,{variant:r==="completed"?"outline":r==="failed"?"destructive":"secondary",className:"capitalize",children:r}),e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:n}),(s==null?void 0:s.engine)&&e.jsx(b,{variant:"secondary",className:"font-mono text-xs",children:s.engine}),(s==null?void 0:s.pages)!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t("docparse.pages"),": ",s.pages]}),(s==null?void 0:s.images)!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t("docparse.images"),": ",s.images]}),(s==null?void 0:s.finished_at)&&e.jsx("span",{className:"text-xs text-muted-foreground",children:s.finished_at})]}),(s==null?void 0:s.warnings)&&s.warnings.length>0&&e.jsx("div",{className:"rounded-md border border-amber-500/40 bg-amber-500/10 p-3 text-xs",children:s.warnings.map((a,i)=>e.jsx("p",{children:a},i))}),r==="failed"&&e.jsx("p",{className:"text-sm text-destructive",children:(s==null?void 0:s.error)??t("docparse.jobFailed")}),r==="completed"&&(s==null?void 0:s.markdown)&&e.jsx("div",{"data-color-mode":"auto",className:"max-h-[32rem] overflow-auto rounded-md border p-4",children:e.jsx(R,{source:s.markdown,style:{background:"transparent"},skipHtml:!0})})]})})]})}export{ce as default}; diff --git a/adminui/assets/copy-BcCPCJtg.js b/adminui/assets/copy-DRI8cFnN.js similarity index 88% rename from adminui/assets/copy-BcCPCJtg.js rename to adminui/assets/copy-DRI8cFnN.js index f95770d6..d0efdb7a 100644 --- a/adminui/assets/copy-BcCPCJtg.js +++ b/adminui/assets/copy-DRI8cFnN.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/coupons-BjX-Du0I.js b/adminui/assets/coupons-BjX-Du0I.js new file mode 100644 index 00000000..f058c31e --- /dev/null +++ b/adminui/assets/coupons-BjX-Du0I.js @@ -0,0 +1 @@ +import{f as m,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as Z}from"./use-url-state-BBO3na5E.js";import{cK as $,cB as G,cA as J,n as C,aZ as W,T as X,_ as Y,U as ee,V as U,ca as l,aE as D,bl as x}from"./index-C-uFVPpg.js";import{u as N}from"./useMutation-BlIm5cor.js";import{B}from"./badge-Dhxp0jil.js";import{C as se,a as ae}from"./card-BBIqLCR8.js";import{I as c}from"./input-Bp1SimRr.js";import{L as r}from"./label-DiZ0cGhf.js";import{D as oe,a as ne,d as te,e as re,c as ie}from"./dialog-if7Fez9x.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-C8VouOFc.js";import{T as ge,d as je,e as b,c as d,a as _e,b as i}from"./table-BoLxzYJ7.js";import{P as ve}from"./pagination-bar-BuL5EI1J.js";import{T as fe}from"./table-skeleton-fqjGRt14.js";import{E as ye}from"./empty-state-CCcgx4uH.js";import{P as Ce}from"./plus-FYsVFl-s.js";import{E as De}from"./ellipsis-vertical-B-dHvJs4.js";import{P as Ne}from"./pencil-xelQXmMG.js";import{T as be}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./chevron-left-C_tZtLI6.js";const T={title:"",code:"",coupon_type:"percentage",value:"",min_order_amount:"",max_uses:"",max_uses_per_user:"",starts_at:"",expires_at:""};function Ge(){var k,M,q;const{t:a}=$(),h=G(),{getInt:K,set:Q}=Z(),g=K("page"),[j,_]=m.useState(null),S=20,[z,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=((k=p.data)==null?void 0:k.items)??[],V=Math.ceil((((M=p.data)==null?void 0:M.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:W,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(B,{variant:"outline",children:s.coupon_type==="percentage"?"%":"$"})}),e.jsxs(i,{children:[s.value,s.coupon_type==="percentage"?"%":""]}),e.jsx(i,{children:e.jsx(B,{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(X,{children:[e.jsx(Y,{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(U,{onClick:()=>O(s),children:[e.jsx(Ne,{className:"size-4 me-2"}),a("common.edit")]}),e.jsxs(U,{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=>Q({page:s})}),e.jsx(oe,{open:z,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{Ge as default}; diff --git a/adminui/assets/coupons-D5weDO7O.js b/adminui/assets/coupons-D5weDO7O.js deleted file mode 100644 index 63bb635b..00000000 --- a/adminui/assets/coupons-D5weDO7O.js +++ /dev/null @@ -1 +0,0 @@ -import{f as m,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as J}from"./use-url-state-BBO3na5E.js";import{cJ as Y,cA as $,cz as G,n as C,aY as W,T as X,_ as Z,U as ee,V as U,c9 as l,aE as D,bk as x}from"./index-DFelzBez.js";import{u as N}from"./useMutation-DgRiHz67.js";import{B as z}from"./badge-BvrzcoWP.js";import{C as se,a as ae}from"./card-D3QxRGt-.js";import{I as c}from"./input-Bx5u8hTS.js";import{L as r}from"./label-DeKRRvpz.js";import{D as oe,a as ne,d as te,e as re,c as ie}from"./dialog-Bx55NyOm.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-B-lBTnCF.js";import{T as ge,d as je,e as b,c as d,a as _e,b as i}from"./table-gihdE9_j.js";import{P as ve}from"./pagination-bar-DD_HkQGa.js";import{T as fe}from"./table-skeleton-BtLTAVzI.js";import{E as ye}from"./empty-state-D0NvGCXa.js";import{P as Ce}from"./plus-DK-V8p7I.js";import{E as De}from"./ellipsis-vertical-UHYLUh-c.js";import{P as Ne}from"./pencil-BgXbFsNu.js";import{T as be}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./chevron-left-CbJIXgY2.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 I,M,q;const{t:a}=Y(),h=$(),{getInt:Q,set:B}=J(),g=Q("page"),[j,_]=m.useState(null),S=20,[K,u]=m.useState(!1),[v,f]=m.useState(null),[o,t]=m.useState(T),p=G({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=((I=p.data)==null?void 0:I.items)??[],V=Math.ceil((((M=p.data)==null?void 0:M.total)??0)/S),k=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:W,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(z,{variant:"outline",children:s.coupon_type==="percentage"?"%":"$"})}),e.jsxs(i,{children:[s.value,s.coupon_type==="percentage"?"%":""]}),e.jsx(i,{children:e.jsx(z,{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(X,{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(U,{onClick:()=>O(s),children:[e.jsx(Ne,{className:"size-4 me-2"}),a("common.edit")]}),e.jsxs(U,{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=>B({page:s})}),e.jsx(oe,{open:K,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:k,children:a(k?"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-C5XnW_mt.js b/adminui/assets/cron-detail-Beisq5yZ.js similarity index 68% rename from adminui/assets/cron-detail-C5XnW_mt.js rename to adminui/assets/cron-detail-Beisq5yZ.js index d873ee1c..197fadff 100644 --- a/adminui/assets/cron-detail-C5XnW_mt.js +++ b/adminui/assets/cron-detail-Beisq5yZ.js @@ -1,6 +1,6 @@ -import{k as $,f as J,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as V,cJ as X,cF as G,cA as W,cz as q,ak as z,n as i,aT as f,v as M,aE as N,a4 as Y,f as I,a_ as Z,b1 as ee,a$ as se,c9 as m,bk as u,al as E}from"./index-DFelzBez.js";import{u as T}from"./useMutation-DgRiHz67.js";import{u as ae}from"./use-url-state-BBO3na5E.js";import{P as ne}from"./pagination-bar-DD_HkQGa.js";import{B as t}from"./badge-BvrzcoWP.js";import{C as k,a as _}from"./card-D3QxRGt-.js";import{S as y}from"./separator-D01NErsM.js";import{T as re,d as te,e as b,c as h,a as ce,b as d}from"./table-gihdE9_j.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-B-lBTnCF.js";import{P as je}from"./pencil-BgXbFsNu.js";import{a as pe,P as ge}from"./power-Bw66vTVi.js";import{T as fe}from"./trash-2-DqWZBWAo.js";import{C as U}from"./circle-x-B2QO34ya.js";import{C as Ne}from"./circle-check-big-DuqRRx-0.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-CbJIXgY2.js";/** +import{k as $,f as V,j as e}from"./vendor-react-j_G0Dyx0.js";import{bq as G,cK as J,cG as X,cB as W,cA as F,ak as z,n as i,aU as f,v as K,aE as N,a4 as Y,f as I,a$ as Z,b2 as ee,b0 as se,ca as m,bl as u,al as U}from"./index-C-uFVPpg.js";import{u as T}from"./useMutation-BlIm5cor.js";import{u as ae}from"./use-url-state-BBO3na5E.js";import{P as ne}from"./pagination-bar-BuL5EI1J.js";import{B as t}from"./badge-Dhxp0jil.js";import{C as k,a as S}from"./card-BBIqLCR8.js";import{S as b}from"./separator-VXjQ1TI2.js";import{T as re,d as te,e as y,c as h,a as ce,b as d}from"./table-BoLxzYJ7.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-C8VouOFc.js";import{P as je}from"./pencil-xelQXmMG.js";import{a as pe,P as ge}from"./power-BpWucA9X.js";import{T as fe}from"./trash-2-BZ2bkzqQ.js";import{C as E}from"./circle-x-D4bMzyXK.js";import{C as Ne}from"./circle-check-big-WjXNJO8D.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-C_tZtLI6.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ye=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],be=V("trash",ye);function L(s){if(s==null)return null;if(typeof s=="string")return s;try{return JSON.stringify(s)}catch{return String(s)}}function x(s){if(!s)return"-";try{return new Date(s).toLocaleString()}catch{return s}}function c({label:s,children:r}){return e.jsxs("div",{className:"flex items-center gap-2 py-2 min-w-0",children:[e.jsx("span",{className:"text-sm text-muted-foreground shrink-0",children:s}),e.jsx("span",{className:"text-sm text-muted-foreground",children:":"}),e.jsx("div",{className:"text-sm flex-1 min-w-0 truncate",children:r})]})}function ve(s,r){switch(s){case"completed":return e.jsxs(t,{variant:"default",className:"gap-1",children:[e.jsx(Ne,{className:"size-3"}),r("cron.success")]});case"failed":return e.jsxs(t,{variant:"destructive",className:"gap-1",children:[e.jsx(U,{className:"size-3"}),r("cron.failedStatus")]});case"running":return e.jsxs(t,{variant:"secondary",className:"gap-1",children:[e.jsx(E,{className:"size-3 animate-spin"}),r("cron.running")]});case"dispatched":return e.jsxs(t,{variant:"secondary",className:"gap-1",children:[e.jsx(E,{className:"size-3 animate-spin"}),r("cron.dispatched")]});case"dead":return e.jsxs(t,{variant:"destructive",className:"gap-1",children:[e.jsx(U,{className:"size-3"}),r("cron.dead")]});case"timed_out":return e.jsxs(t,{variant:"destructive",className:"gap-1",children:[e.jsx(M,{className:"size-3"}),r("cron.timedOut")]});default:return e.jsx(t,{variant:"outline",children:s})}}function Me(){var A,R,F;const{t:s}=X(),r=G(),Q=$(),j=W(),l=decodeURIComponent(Q.id),[B,v]=J.useState(!1),{getInt:K,set:H}=ae(),C=K("log_page",1),S=20,o=q({queryKey:["cron",l],queryFn:()=>u.send(`/admin/crons/${encodeURIComponent(l)}`),retry:!1}),p=q({queryKey:["cron-logs",l,C],queryFn:()=>u.send("/admin/crons/logs",{query:{schedule_id:encodeURIComponent(l),page:String(C),page_size:String(S)}}),enabled:!!o.data}),g=T({mutationFn:a=>u.admin.crons.toggle(encodeURIComponent(l),a),onSuccess:()=>{m.success(s("cron.scheduleToggled")),j.invalidateQueries({queryKey:["cron",l]}),j.invalidateQueries({queryKey:["crons"]})},onError:a=>{m.error(a instanceof N?a.message:s("cron.failedToCreate"))}}),w=T({mutationFn:()=>u.admin.crons.delete(encodeURIComponent(l)),onSuccess:()=>{m.success(s("cron.scheduleDeleted")),j.invalidateQueries({queryKey:["crons"]}),r.push("/crons")},onError:a=>{m.error(a instanceof N?a.message:s("cron.failedToDelete"))}}),D=T({mutationFn:()=>u.admin.crons.cleanupLogs(),onSuccess:()=>{m.success(s("cron.cleanedUp")),j.invalidateQueries({queryKey:["cron-logs",l]})},onError:a=>{m.error(a instanceof N?a.message:"Failed to cleanup")}});if(o.isLoading)return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(z,{href:"/crons",children:e.jsx(i,{variant:"outline",size:"sm",children:s("common.back")})}),e.jsx(f,{className:"h-8 w-48"})]}),e.jsx("div",{className:"grid gap-6 md:grid-cols-2",children:e.jsx(k,{children:e.jsxs(_,{className:"pt-6 space-y-4",children:[e.jsx(f,{className:"h-5 w-32"}),e.jsx(f,{className:"h-5 w-full"}),e.jsx(f,{className:"h-5 w-full"})]})})})]});if(o.error||!o.data)return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center gap-4",children:e.jsx(z,{href:"/crons",children:e.jsx(i,{variant:"outline",size:"sm",children:s("common.back")})})}),e.jsx(k,{children:e.jsx(_,{className:"pt-6",children:e.jsxs("div",{className:"flex flex-col items-center gap-2 py-8 text-muted-foreground",children:[e.jsx(M,{className:"size-8"}),e.jsx("p",{children:o.error instanceof N?o.error.message:s("cron.scheduleNotFound")}),e.jsx(z,{href:"/crons",children:e.jsx(i,{variant:"outline",size:"sm",children:s("cron.backToCronSchedules")})})]})})})]});const n=o.data,P=((A=p.data)==null?void 0:A.items)??[],O=Math.ceil((((R=p.data)==null?void 0:R.total)??0)/S);return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h2",{className:"flex items-center gap-2 text-lg font-semibold",children:[e.jsx(Y,{className:"size-4"}),n.label]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(i,{variant:"outline",size:"sm",onClick:()=>r.push(`/crons/${encodeURIComponent(l)}/edit`),children:[e.jsx(je,{className:"size-4"}),s("common.edit")]}),n.enabled?e.jsxs(i,{variant:"outline",size:"sm",disabled:g.isPending,onClick:()=>g.mutate(!1),children:[e.jsx(pe,{className:"size-4"}),s("common.disabled")]}):e.jsxs(i,{variant:"outline",size:"sm",disabled:g.isPending,onClick:()=>g.mutate(!0),children:[e.jsx(ge,{className:"size-4"}),s("common.enabled")]}),e.jsxs(i,{variant:"outline",size:"sm",className:"text-destructive hover:text-destructive",disabled:w.isPending,onClick:()=>v(!0),children:[e.jsx(fe,{className:"size-4"}),s("common.delete")]})]})]}),e.jsx(k,{children:e.jsx(_,{className:"pt-6",children:e.jsxs("div",{className:"grid grid-cols-2 gap-x-8",children:[e.jsx(c,{label:s("cron.idField"),children:e.jsx("span",{className:"font-mono text-xs",children:n.id})}),e.jsx(c,{label:s("cron.jobType"),children:e.jsx(t,{variant:"ghost",className:"font-mono",children:n.job_type})}),e.jsx(y,{className:"col-span-2"}),e.jsx(c,{label:s("cron.cronExpression"),children:e.jsx("code",{className:"text-sm bg-muted px-2 py-0.5 rounded",children:n.cron_expr})}),e.jsx(c,{label:s("common.status"),children:n.enabled?e.jsx(t,{variant:"default",children:s("common.enabled")}):e.jsx(t,{variant:"outline",children:s("common.disabled")})}),e.jsx(y,{className:"col-span-2"}),e.jsx(c,{label:s("cron.payload"),children:L(n.payload)?e.jsx("code",{className:"text-xs bg-muted px-2 py-0.5 rounded truncate block",children:L(n.payload)}):e.jsx("span",{className:"text-muted-foreground",children:s("common.none")})}),e.jsx(c,{label:s("cron.pluginCol"),children:n.plugin_id?e.jsx(t,{variant:"secondary",children:n.plugin_id}):e.jsx("span",{className:"text-muted-foreground",children:s("cron.builtIn")})}),e.jsx(y,{className:"col-span-2"}),e.jsx(c,{label:s("cron.lastRun"),children:x(n.last_run_at)}),e.jsx(c,{label:s("cron.nextRun"),children:x(n.next_run_at)}),e.jsx(y,{className:"col-span-2"}),e.jsx(c,{label:s("cron.created"),children:x(n.created_at)}),e.jsx(c,{label:s("cron.updated"),children:x(n.updated_at)})]})})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"flex items-center gap-2 text-lg font-semibold",children:[e.jsx(I,{className:"size-4"}),s("cron.executionHistory")]}),e.jsxs(i,{variant:"outline",size:"sm",disabled:D.isPending,onClick:()=>D.mutate(),children:[e.jsx(be,{className:"size-4"}),s("cron.cleanupOld")]})]}),e.jsx("div",{className:"rounded-md border",children:e.jsxs(re,{children:[e.jsx(te,{children:e.jsxs(b,{children:[e.jsx(h,{children:s("common.status")}),e.jsx(h,{children:s("cron.started")}),e.jsx(h,{children:s("cron.finished")}),e.jsx(h,{children:s("cron.duration")}),e.jsx(h,{children:s("cron.error")})]})}),e.jsx(ce,{children:p.isLoading?e.jsx(b,{children:e.jsx(d,{colSpan:5,className:"text-center py-8",children:s("common.loading")})}):P.length===0?e.jsx(b,{children:e.jsx(d,{colSpan:5,className:"text-center py-8",children:e.jsxs("div",{className:"flex flex-col items-center gap-2 text-muted-foreground",children:[e.jsx(I,{className:"size-6"}),e.jsx("p",{className:"text-sm",children:s("cron.noExecutionLogs")})]})})}):P.map(a=>e.jsxs(b,{children:[e.jsx(d,{children:ve(a.status,s)}),e.jsx(d,{className:"text-sm text-muted-foreground",children:x(a.started_at)}),e.jsx(d,{className:"text-sm text-muted-foreground",children:x(a.finished_at)}),e.jsx(d,{className:"text-sm",children:a.duration_ms!=null?`${a.duration_ms}ms`:"-"}),e.jsx(d,{className:"text-sm max-w-xs",children:a.error?e.jsxs(Z,{children:[e.jsx(ee,{children:e.jsx("span",{className:"text-destructive truncate block",children:a.error})}),e.jsx(se,{className:"max-w-sm",children:a.error})]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})})]},a.id))})]})}),e.jsx("div",{className:"pt-4",children:e.jsx(ne,{page:C,totalPages:O,total:((F=p.data)==null?void 0:F.total)??0,onPageChange:a=>H({log_page:a})})}),e.jsx("div",{className:"h-8"})]}),e.jsx(le,{open:B,onOpenChange:v,children:e.jsxs(ie,{children:[e.jsxs(oe,{children:[e.jsx(de,{children:s("common.delete")}),e.jsx(me,{children:s("cron.confirmDeleteSchedule",{name:n.label})})]}),e.jsxs(xe,{children:[e.jsx(ue,{children:s("common.cancel")}),e.jsx(he,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{w.mutate(),v(!1)},children:s("common.delete")})]})]})})]})}export{Me as default}; + */const be=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],ye=G("trash",be);function B(s){if(s==null)return null;if(typeof s=="string")return s;try{return JSON.stringify(s)}catch{return String(s)}}function x(s){if(!s)return"-";try{return new Date(s).toLocaleString()}catch{return s}}function c({label:s,children:r}){return e.jsxs("div",{className:"flex items-center gap-2 py-2 min-w-0",children:[e.jsx("span",{className:"text-sm text-muted-foreground shrink-0",children:s}),e.jsx("span",{className:"text-sm text-muted-foreground",children:":"}),e.jsx("div",{className:"text-sm flex-1 min-w-0 truncate",children:r})]})}function ve(s,r){switch(s){case"completed":return e.jsxs(t,{variant:"default",className:"gap-1",children:[e.jsx(Ne,{className:"size-3"}),r("cron.success")]});case"failed":return e.jsxs(t,{variant:"destructive",className:"gap-1",children:[e.jsx(E,{className:"size-3"}),r("cron.failedStatus")]});case"running":return e.jsxs(t,{variant:"secondary",className:"gap-1",children:[e.jsx(U,{className:"size-3 animate-spin"}),r("cron.running")]});case"dispatched":return e.jsxs(t,{variant:"secondary",className:"gap-1",children:[e.jsx(U,{className:"size-3 animate-spin"}),r("cron.dispatched")]});case"dead":return e.jsxs(t,{variant:"destructive",className:"gap-1",children:[e.jsx(E,{className:"size-3"}),r("cron.dead")]});case"timed_out":return e.jsxs(t,{variant:"destructive",className:"gap-1",children:[e.jsx(K,{className:"size-3"}),r("cron.timedOut")]});default:return e.jsx(t,{variant:"outline",children:s})}}function Ke(){var A,R,q;const{t:s}=J(),r=X(),L=$(),j=W(),l=decodeURIComponent(L.id),[M,v]=V.useState(!1),{getInt:Q,set:H}=ae(),C=Q("log_page",1),_=20,o=F({queryKey:["cron",l],queryFn:()=>u.send(`/admin/crons/${encodeURIComponent(l)}`),retry:!1}),p=F({queryKey:["cron-logs",l,C],queryFn:()=>u.send("/admin/crons/logs",{query:{schedule_id:encodeURIComponent(l),page:String(C),page_size:String(_)}}),enabled:!!o.data}),g=T({mutationFn:a=>u.admin.crons.toggle(encodeURIComponent(l),a),onSuccess:()=>{m.success(s("cron.scheduleToggled")),j.invalidateQueries({queryKey:["cron",l]}),j.invalidateQueries({queryKey:["crons"]})},onError:a=>{m.error(a instanceof N?a.message:s("cron.failedToCreate"))}}),w=T({mutationFn:()=>u.admin.crons.delete(encodeURIComponent(l)),onSuccess:()=>{m.success(s("cron.scheduleDeleted")),j.invalidateQueries({queryKey:["crons"]}),r.push("/crons")},onError:a=>{m.error(a instanceof N?a.message:s("cron.failedToDelete"))}}),D=T({mutationFn:()=>u.admin.crons.cleanupLogs(),onSuccess:()=>{m.success(s("cron.cleanedUp")),j.invalidateQueries({queryKey:["cron-logs",l]})},onError:a=>{m.error(a instanceof N?a.message:"Failed to cleanup")}});if(o.isLoading)return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(z,{href:"/crons",children:e.jsx(i,{variant:"outline",size:"sm",children:s("common.back")})}),e.jsx(f,{className:"h-8 w-48"})]}),e.jsx("div",{className:"grid gap-6 md:grid-cols-2",children:e.jsx(k,{children:e.jsxs(S,{className:"pt-6 space-y-4",children:[e.jsx(f,{className:"h-5 w-32"}),e.jsx(f,{className:"h-5 w-full"}),e.jsx(f,{className:"h-5 w-full"})]})})})]});if(o.error||!o.data)return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center gap-4",children:e.jsx(z,{href:"/crons",children:e.jsx(i,{variant:"outline",size:"sm",children:s("common.back")})})}),e.jsx(k,{children:e.jsx(S,{className:"pt-6",children:e.jsxs("div",{className:"flex flex-col items-center gap-2 py-8 text-muted-foreground",children:[e.jsx(K,{className:"size-8"}),e.jsx("p",{children:o.error instanceof N?o.error.message:s("cron.scheduleNotFound")}),e.jsx(z,{href:"/crons",children:e.jsx(i,{variant:"outline",size:"sm",children:s("cron.backToCronSchedules")})})]})})})]});const n=o.data,P=((A=p.data)==null?void 0:A.items)??[],O=Math.ceil((((R=p.data)==null?void 0:R.total)??0)/_);return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h2",{className:"flex items-center gap-2 text-lg font-semibold",children:[e.jsx(Y,{className:"size-4"}),n.label]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(i,{variant:"outline",size:"sm",onClick:()=>r.push(`/crons/${encodeURIComponent(l)}/edit`),children:[e.jsx(je,{className:"size-4"}),s("common.edit")]}),n.enabled?e.jsxs(i,{variant:"outline",size:"sm",disabled:g.isPending,onClick:()=>g.mutate(!1),children:[e.jsx(pe,{className:"size-4"}),s("common.disabled")]}):e.jsxs(i,{variant:"outline",size:"sm",disabled:g.isPending,onClick:()=>g.mutate(!0),children:[e.jsx(ge,{className:"size-4"}),s("common.enabled")]}),e.jsxs(i,{variant:"outline",size:"sm",className:"text-destructive hover:text-destructive",disabled:w.isPending,onClick:()=>v(!0),children:[e.jsx(fe,{className:"size-4"}),s("common.delete")]})]})]}),e.jsx(k,{children:e.jsx(S,{className:"pt-6",children:e.jsxs("div",{className:"grid grid-cols-2 gap-x-8",children:[e.jsx(c,{label:s("cron.idField"),children:e.jsx("span",{className:"font-mono text-xs",children:n.id})}),e.jsx(c,{label:s("cron.jobType"),children:e.jsx(t,{variant:"ghost",className:"font-mono",children:n.job_type})}),e.jsx(b,{className:"col-span-2"}),e.jsx(c,{label:s("cron.cronExpression"),children:e.jsx("code",{className:"text-sm bg-muted px-2 py-0.5 rounded",children:n.cron_expr})}),e.jsx(c,{label:s("common.status"),children:n.enabled?e.jsx(t,{variant:"default",children:s("common.enabled")}):e.jsx(t,{variant:"outline",children:s("common.disabled")})}),e.jsx(b,{className:"col-span-2"}),e.jsx(c,{label:s("cron.payload"),children:B(n.payload)?e.jsx("code",{className:"text-xs bg-muted px-2 py-0.5 rounded truncate block",children:B(n.payload)}):e.jsx("span",{className:"text-muted-foreground",children:s("common.none")})}),e.jsx(c,{label:s("cron.pluginCol"),children:n.plugin_id?e.jsx(t,{variant:"secondary",children:n.plugin_id}):e.jsx("span",{className:"text-muted-foreground",children:s("cron.builtIn")})}),e.jsx(b,{className:"col-span-2"}),e.jsx(c,{label:s("cron.lastRun"),children:x(n.last_run_at)}),e.jsx(c,{label:s("cron.nextRun"),children:x(n.next_run_at)}),e.jsx(b,{className:"col-span-2"}),e.jsx(c,{label:s("cron.created"),children:x(n.created_at)}),e.jsx(c,{label:s("cron.updated"),children:x(n.updated_at)})]})})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"flex items-center gap-2 text-lg font-semibold",children:[e.jsx(I,{className:"size-4"}),s("cron.executionHistory")]}),e.jsxs(i,{variant:"outline",size:"sm",disabled:D.isPending,onClick:()=>D.mutate(),children:[e.jsx(ye,{className:"size-4"}),s("cron.cleanupOld")]})]}),e.jsx("div",{className:"rounded-md border",children:e.jsxs(re,{children:[e.jsx(te,{children:e.jsxs(y,{children:[e.jsx(h,{children:s("common.status")}),e.jsx(h,{children:s("cron.started")}),e.jsx(h,{children:s("cron.finished")}),e.jsx(h,{children:s("cron.duration")}),e.jsx(h,{children:s("cron.error")})]})}),e.jsx(ce,{children:p.isLoading?e.jsx(y,{children:e.jsx(d,{colSpan:5,className:"text-center py-8",children:s("common.loading")})}):P.length===0?e.jsx(y,{children:e.jsx(d,{colSpan:5,className:"text-center py-8",children:e.jsxs("div",{className:"flex flex-col items-center gap-2 text-muted-foreground",children:[e.jsx(I,{className:"size-6"}),e.jsx("p",{className:"text-sm",children:s("cron.noExecutionLogs")})]})})}):P.map(a=>e.jsxs(y,{children:[e.jsx(d,{children:ve(a.status,s)}),e.jsx(d,{className:"text-sm text-muted-foreground",children:x(a.started_at)}),e.jsx(d,{className:"text-sm text-muted-foreground",children:x(a.finished_at)}),e.jsx(d,{className:"text-sm",children:a.duration_ms!=null?`${a.duration_ms}ms`:"-"}),e.jsx(d,{className:"text-sm max-w-xs",children:a.error?e.jsxs(Z,{children:[e.jsx(ee,{children:e.jsx("span",{className:"text-destructive truncate block",children:a.error})}),e.jsx(se,{className:"max-w-sm",children:a.error})]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})})]},a.id))})]})}),e.jsx("div",{className:"pt-4",children:e.jsx(ne,{page:C,totalPages:O,total:((q=p.data)==null?void 0:q.total)??0,onPageChange:a=>H({log_page:a})})}),e.jsx("div",{className:"h-8"})]}),e.jsx(le,{open:M,onOpenChange:v,children:e.jsxs(ie,{children:[e.jsxs(oe,{children:[e.jsx(de,{children:s("common.delete")}),e.jsx(me,{children:s("cron.confirmDeleteSchedule",{name:n.label})})]}),e.jsxs(xe,{children:[e.jsx(ue,{children:s("common.cancel")}),e.jsx(he,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",onClick:()=>{w.mutate(),v(!1)},children:s("common.delete")})]})]})})]})}export{Ke as default}; diff --git a/adminui/assets/cron-form-6S0gMt66.js b/adminui/assets/cron-form-CZqavXng.js similarity index 88% rename from adminui/assets/cron-form-6S0gMt66.js rename to adminui/assets/cron-form-CZqavXng.js index a25145b6..16644a73 100644 --- a/adminui/assets/cron-form-6S0gMt66.js +++ b/adminui/assets/cron-form-CZqavXng.js @@ -1,4 +1,4 @@ -import{k as ie,f as y,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as ce,cF as oe,cA as de,cz as J,n as U,c9 as E,aE as Y,bk as w}from"./index-DFelzBez.js";import{u as X}from"./useMutation-DgRiHz67.js";import{C as Z,a as ee}from"./card-D3QxRGt-.js";import{I as k}from"./input-Bx5u8hTS.js";import{T as ue}from"./textarea-Daa6n4S-.js";import{L as f}from"./label-DeKRRvpz.js";import{S as me}from"./switch-DLTIF0BW.js";import{T as pe,b as he,c as H,a as I}from"./tabs-I7xZXZiG.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-Dc4_9PNt.js";import{C as se}from"./code-editor-DZgggbjW.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./vendor-md-editor-vOqM56Ks.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=J({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(A(r.cron_expr));let T={};if(typeof _=="string"&&_)try{T=JSON.parse(_)}catch{T={}}else _&&typeof _=="object"&&(T=_);const te=r.use_shell,B=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:B!=null?String(B):""})},[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 O=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"))}}),R=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()),W=O.isPending||R.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?R.mutate(r):O.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(A(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(A(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:(z=b.data)==null?void 0:z.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{cK as ce,cG as oe,cB as de,cA as z,n as J,ca as E,aE as Y,bl as w}from"./index-C-uFVPpg.js";import{u as X}from"./useMutation-BlIm5cor.js";import{C as Z,a as ee}from"./card-BBIqLCR8.js";import{I as k}from"./input-Bp1SimRr.js";import{T as ue}from"./textarea-BhaIg3vS.js";import{L as f}from"./label-DiZ0cGhf.js";import{S as me}from"./switch-DoovYEIg.js";import{T as pe,b as he,c as H,a as I}from"./tabs-DbCrogTH.js";import{S as q,e as K,f as G,a as Q,b as F,d as M,c as h}from"./select-DJZwiot8.js";import{C as se}from"./code-editor-DjTus6iJ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./vendor-md-editor-vOqM56Ks.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(A(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 O=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"))}}),R=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()),W=O.isPending||R.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?R.mutate(r):O.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(A(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(A(r)))},children:[e.jsx(K,{className:"w-[160px] shrink-0",children:e.jsx(G,{placeholder:s("cron.presetHint")})}),e.jsxs(Q,{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(G,{placeholder:s("cron.jobTypeHint")})}),e.jsx(Q,{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(G,{placeholder:o.title??n})}),e.jsx(Q,{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") @@ -6,4 +6,4 @@ end`:`fn on_cron_tick(payload) { host.log('info', 'hello from cron'); }`,minHeight:"300px"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cron.scriptHint")||"可用 API: host.log, host.getData, host.setData, host.dbQuery, host.dbExecute, host.httpGet 等"})]})]}),e.jsxs(I,{value:"system",className:"space-y-4 mt-4",children:[e.jsx("div",{className:"rounded-md border border-amber-500/50 bg-amber-50 dark:bg-amber-950/20 p-3 text-sm",children:e.jsxs("p",{className:"font-medium text-amber-700 dark:text-amber-400",children:["⚠️ ",s("cron.systemWarning")]})}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"use_shell",children:s("cron.useShell")}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsx("input",{type:"checkbox",id:"use_shell",checked:a.use_shell,onChange:r=>p(n=>({...n,use_shell:r.target.checked})),className:"size-4"}),e.jsx("span",{className:"text-sm text-muted-foreground",children:a.use_shell?'/bin/sh -c "command"':"exec argv directly (no shell)"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"timeout_secs",children:s("cron.timeoutSecs")}),e.jsx(k,{id:"timeout_secs",type:"number",value:a.timeout_secs,onChange:r=>p(n=>({...n,timeout_secs:r.target.value})),placeholder:"300"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"system_command",children:s("cron.systemCommand")}),e.jsx(se,{value:a.script_source,onChange:r=>p(n=>({...n,script_source:r})),language:"js",placeholder:`echo "[$(date)] backup done" >> /var/log/backup.log pg_dump $DATABASE_URL > /backups/db.sql -curl -s https://example.com/health`,minHeight:"150px"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cron.systemHint")})]})]})]})]})]})}),e.jsx("div",{className:"space-y-6",children:e.jsx(Z,{children:e.jsxs(ee,{className:"space-y-5 pt-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(f,{htmlFor:"enabled",children:s("common.enabled")}),e.jsx(me,{id:"enabled",checked:a.enabled,onCheckedChange:r=>p(n=>({...n,enabled:r}))})]}),e.jsxs("div",{className:"space-y-1 border-t pt-4 text-sm",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.executionType")}),e.jsx("span",{className:"font-medium",children:s(i==="builtin"?"cron.builtinTab":i==="script"?"cron.scriptTab":"cron.systemTab")})]}),i==="builtin"&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.jobType")}),e.jsx("span",{className:"font-medium",children:(g==null?void 0:g.display_name)??"-"})]}),i==="script"&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.scriptLang")}),e.jsx("span",{className:"font-medium uppercase",children:a.script_lang})]}),i==="system"&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.useShell")}),e.jsx("span",{className:"font-medium",children:a.use_shell?"/bin/sh -c":"exec"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.scheduleTitle")}),e.jsx("span",{className:"font-mono text-xs",children:P??a.cron_expr??"-"})]})]})]})})}),e.jsxs("div",{className:"flex items-center gap-2 lg:col-span-3 pt-2 pb-6",children:[e.jsx(U,{onClick:ae,disabled:!ne||W,children:W?s("common.saving")||s("common.creating"):s(c?"common.save":"common.create")}),e.jsx(U,{variant:"outline",onClick:()=>t.push(c?`/crons/${l}`:"/crons"),children:s("common.cancel")})]})]})}export{Qe as default}; +curl -s https://example.com/health`,minHeight:"150px"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cron.systemHint")})]})]})]})]})]})}),e.jsx("div",{className:"space-y-6",children:e.jsx(Z,{children:e.jsxs(ee,{className:"space-y-5 pt-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(f,{htmlFor:"enabled",children:s("common.enabled")}),e.jsx(me,{id:"enabled",checked:a.enabled,onCheckedChange:r=>p(n=>({...n,enabled:r}))})]}),e.jsxs("div",{className:"space-y-1 border-t pt-4 text-sm",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.executionType")}),e.jsx("span",{className:"font-medium",children:s(i==="builtin"?"cron.builtinTab":i==="script"?"cron.scriptTab":"cron.systemTab")})]}),i==="builtin"&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.jobType")}),e.jsx("span",{className:"font-medium",children:(g==null?void 0:g.display_name)??"-"})]}),i==="script"&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.scriptLang")}),e.jsx("span",{className:"font-medium uppercase",children:a.script_lang})]}),i==="system"&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.useShell")}),e.jsx("span",{className:"font-medium",children:a.use_shell?"/bin/sh -c":"exec"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cron.scheduleTitle")}),e.jsx("span",{className:"font-mono text-xs",children:P??a.cron_expr??"-"})]})]})]})})}),e.jsxs("div",{className:"flex items-center gap-2 lg:col-span-3 pt-2 pb-6",children:[e.jsx(J,{onClick:ae,disabled:!ne||W,children:W?s("common.saving")||s("common.creating"):s(c?"common.save":"common.create")}),e.jsx(J,{variant:"outline",onClick:()=>t.push(c?`/crons/${l}`:"/crons"),children:s("common.cancel")})]})]})}export{Ge as default}; diff --git a/adminui/assets/crons-DCMpOlFW.js b/adminui/assets/crons-kbM9vP_Z.js similarity index 65% rename from adminui/assets/crons-DCMpOlFW.js rename to adminui/assets/crons-kbM9vP_Z.js index a81619ac..652328d7 100644 --- a/adminui/assets/crons-DCMpOlFW.js +++ b/adminui/assets/crons-kbM9vP_Z.js @@ -1 +1 @@ -import{f as _,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as A}from"./use-url-state-BBO3na5E.js";import{cJ as P,cF as z,cA as M,cz as R,n as $,v as F,ak as U,a_ as q,b1 as B,a$ as H,T as I,_ as L,U as Q,V as x,a2 as K,c9 as m,aE as v,bk as h}from"./index-DFelzBez.js";import{u as S}from"./useMutation-DgRiHz67.js";import{P as V}from"./pagination-bar-DD_HkQGa.js";import{B as J}from"./badge-BvrzcoWP.js";import{C as O,a as G}from"./card-D3QxRGt-.js";import{T as W,d as X,e as p,c as i,a as Y,b as o}from"./table-gihdE9_j.js";import{S as Z}from"./switch-DLTIF0BW.js";import{T as ee}from"./table-skeleton-BtLTAVzI.js";import{E as se}from"./empty-state-D0NvGCXa.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-B-lBTnCF.js";import{P as de}from"./plus-DK-V8p7I.js";import{E as me}from"./ellipsis-vertical-UHYLUh-c.js";import{P as ue}from"./pencil-BgXbFsNu.js";import{T as xe}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-CbJIXgY2.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./useLabelableId-D6-89JTk.js";function k(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 Ue(){var y,T,D;const{t:n}=P(),t=z(),r=M(),{getInt:a,set:E}=A(),j=a("page"),g=20,[l,u]=_.useState(null),d=R({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((((T=d.data)==null?void 0:T.total)??0)/g);return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs($,{size:"sm",onClick:()=>t.push("/crons/new"),children:[e.jsx(de,{className:"size-4"}),n("cron.newSchedule")]})}),e.jsx(O,{children:e.jsx(G,{className:"p-0",children:d.isLoading?e.jsx(ee,{cols:7}):e.jsxs(W,{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:F,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(U,{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(J,{variant:"ghost",className:"font-mono text-xs",children:s.job_type})}),e.jsx(o,{children:e.jsxs(q,{children:[e.jsx(B,{children:e.jsx("span",{className:"text-sm font-mono",children:he(s.cron_expr)})}),e.jsx(H,{children:e.jsx("code",{className:"text-xs",children:s.cron_expr})})]})}),e.jsx(o,{className:"text-sm text-muted-foreground",children:k(s.last_run_at)}),e.jsx(o,{className:"text-sm",children:k(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(L,{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(K,{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:((D=d.data)==null?void 0:D.total)??0,onPageChange:s=>E({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{Ue as default}; +import{f as A,j as e}from"./vendor-react-j_G0Dyx0.js";import{u as P}from"./use-url-state-BBO3na5E.js";import{cK as _,cG as z,cB as M,cA as R,n as $,v as B,ak as U,a$ as q,b2 as F,b0 as H,T as I,_ as K,U as L,V as x,a2 as Q,ca as m,aE as v,bl as h}from"./index-C-uFVPpg.js";import{u as S}from"./useMutation-BlIm5cor.js";import{P as V}from"./pagination-bar-BuL5EI1J.js";import{B as G}from"./badge-Dhxp0jil.js";import{C as O,a as J}from"./card-BBIqLCR8.js";import{T as W,d as X,e as p,c as i,a as Y,b as o}from"./table-BoLxzYJ7.js";import{S as Z}from"./switch-DoovYEIg.js";import{T as ee}from"./table-skeleton-fqjGRt14.js";import{E as se}from"./empty-state-CCcgx4uH.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-C8VouOFc.js";import{P as de}from"./plus-FYsVFl-s.js";import{E as me}from"./ellipsis-vertical-B-dHvJs4.js";import{P as ue}from"./pencil-xelQXmMG.js";import{T as xe}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-C_tZtLI6.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./useLabelableId-qP3If8Bd.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 Ue(){var y,T,D;const{t:n}=_(),t=z(),r=M(),{getInt:a,set:k}=P(),j=a("page"),g=20,[l,u]=A.useState(null),d=R({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((((T=d.data)==null?void 0:T.total)??0)/g);return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs($,{size:"sm",onClick:()=>t.push("/crons/new"),children:[e.jsx(de,{className:"size-4"}),n("cron.newSchedule")]})}),e.jsx(O,{children:e.jsx(J,{className:"p-0",children:d.isLoading?e.jsx(ee,{cols:7}):e.jsxs(W,{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:B,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(U,{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(G,{variant:"ghost",className:"font-mono text-xs",children:s.job_type})}),e.jsx(o,{children:e.jsxs(q,{children:[e.jsx(F,{children:e.jsx("span",{className:"text-sm font-mono",children:he(s.cron_expr)})}),e.jsx(H,{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(L,{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(Q,{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:((D=d.data)==null?void 0:D.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{Ue as default}; diff --git a/adminui/assets/currencies-Cvd8gjrn.js b/adminui/assets/currencies-Cvd8gjrn.js deleted file mode 100644 index 51e75bc4..00000000 --- a/adminui/assets/currencies-Cvd8gjrn.js +++ /dev/null @@ -1 +0,0 @@ -import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as G,cA as W,cz as X,n as i,w as Z,T as $,_ as ee,U as se,V as H,bk as v,c9 as t,aE as N}from"./index-DFelzBez.js";import{C as ne,a as re}from"./card-D3QxRGt-.js";import{I as o}from"./input-Bx5u8hTS.js";import{L as a}from"./label-DeKRRvpz.js";import{S as L}from"./switch-DLTIF0BW.js";import{T as ce,d as ie,e as b,c as d,a as ae,b as l}from"./table-gihdE9_j.js";import{D,f as te,a as S,d as T,e as k,c as w}from"./dialog-Bx55NyOm.js";import{B as E}from"./badge-BvrzcoWP.js";import{T as le}from"./table-skeleton-BtLTAVzI.js";import{E as oe}from"./empty-state-D0NvGCXa.js";import{P as de}from"./plus-DK-V8p7I.js";import{E as me}from"./ellipsis-vertical-UHYLUh-c.js";import{P as ue}from"./pencil-BgXbFsNu.js";import{T as xe}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";function Ae(){const{t:s}=G(),C=W(),[R,m]=r.useState(!1),[c,u]=r.useState(null),[x,h]=r.useState(null),[j,F]=r.useState(""),[p,q]=r.useState(""),[Q,U]=r.useState("2"),[z,A]=r.useState(!0),[y,B]=r.useState(!1),[f,I]=r.useState(""),[K,O]=r.useState(!0),[g,P]=r.useState(!1);async function V(){if(!(!j||!p||y)){B(!0);try{await v.admin.currencies.create({code:j.toUpperCase(),name:p,decimals:BigInt(parseInt(Q)||2),is_active:z}),t.success(s("currencies.currencyCreated")),C.invalidateQueries({queryKey:["admin-currencies"]}),m(!1),F(""),q(""),U("2"),A(!0)}catch(n){t.error(n instanceof N?n.message:s("currencies.failedToCreate"))}finally{B(!1)}}}async function J(){if(!(!c||!f||g)){P(!0);try{await v.admin.currencies.update(c.code,{name:f,is_active:K}),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{P(!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 _=X({queryKey:["admin-currencies"],queryFn:()=>v.admin.currencies.list()}),M=_.data??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(D,{open:R,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:Q,onChange:n=>U(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{children:s("common.status")}),e.jsx(L,{checked:z,onCheckedChange:A})]})]}),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:_.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:M.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)}})})}):M.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(H,{onClick:()=>{u(n),I(n.name),O(n.is_active)},children:[e.jsx(ue,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(H,{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=>I(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a,{children:s("common.status")}),e.jsx(L,{checked:K,onCheckedChange:O})]})]}),e.jsxs(w,{children:[e.jsx(i,{variant:"outline",onClick:()=>u(null),children:s("common.cancel")}),e.jsx(i,{onClick:J,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{Ae as default}; diff --git a/adminui/assets/currencies-jD2_rWcM.js b/adminui/assets/currencies-jD2_rWcM.js new file mode 100644 index 00000000..5dfda4c8 --- /dev/null +++ b/adminui/assets/currencies-jD2_rWcM.js @@ -0,0 +1 @@ +import{f as r,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as J,cB as W,cA as X,n as a,w as Z,T as $,_ as ee,U as se,V as H,bl as v,ca as t,aE as N}from"./index-C-uFVPpg.js";import{C as ne,a as re}from"./card-BBIqLCR8.js";import{I as o}from"./input-Bp1SimRr.js";import{L as i}from"./label-DiZ0cGhf.js";import{S as L}from"./switch-DoovYEIg.js";import{T as ce,d as ae,e as b,c as d,a as ie,b as l}from"./table-BoLxzYJ7.js";import{D,f as te,a as S,d as T,e as k,c as w}from"./dialog-if7Fez9x.js";import{B as E}from"./badge-Dhxp0jil.js";import{T as le}from"./table-skeleton-fqjGRt14.js";import{E as oe}from"./empty-state-CCcgx4uH.js";import{P as de}from"./plus-FYsVFl-s.js";import{E as me}from"./ellipsis-vertical-B-dHvJs4.js";import{P as ue}from"./pencil-xelQXmMG.js";import{T as xe}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";function Ue(){const{t:s}=J(),C=W(),[R,m]=r.useState(!1),[c,u]=r.useState(null),[x,h]=r.useState(null),[j,F]=r.useState(""),[p,q]=r.useState(""),[B,K]=r.useState("2"),[Q,U]=r.useState(!0),[y,A]=r.useState(!1),[f,I]=r.useState(""),[O,P]=r.useState(!0),[g,_]=r.useState(!1);async function V(){if(!(!j||!p||y)){A(!0);try{await v.admin.currencies.create({code:j.toUpperCase(),name:p,decimals:BigInt(parseInt(B)||2),is_active:Q}),t.success(s("currencies.currencyCreated")),C.invalidateQueries({queryKey:["admin-currencies"]}),m(!1),F(""),q(""),K("2"),U(!0)}catch(n){t.error(n instanceof N?n.message:s("currencies.failedToCreate"))}finally{A(!1)}}}async function Y(){if(!(!c||!f||g)){_(!0);try{await v.admin.currencies.update(c.code,{name:f,is_active:O}),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{_(!1)}}}async function G(){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 z=X({queryKey:["admin-currencies"],queryFn:()=>v.admin.currencies.list()}),M=z.data??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex items-center justify-end",children:e.jsxs(D,{open:R,onOpenChange:m,children:[e.jsxs(te,{render:e.jsx(a,{}),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(i,{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(i,{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(i,{children:s("currencies.decimals")}),e.jsx(o,{type:"number",min:"0",max:"8",value:B,onChange:n=>K(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{children:s("common.status")}),e.jsx(L,{checked:Q,onCheckedChange:U})]})]}),e.jsxs(w,{children:[e.jsx(a,{variant:"outline",onClick:()=>m(!1),children:s("common.cancel")}),e.jsx(a,{onClick:V,disabled:y||!j||!p,children:s(y?"common.creating":"common.create")})]})]})]})}),e.jsx(ne,{children:e.jsx(re,{className:"p-0",children:z.isLoading?e.jsx(le,{cols:5}):e.jsxs(ce,{children:[e.jsx(ae,{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(ie,{children:M.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)}})})}):M.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(H,{onClick:()=>{u(n),I(n.name),P(n.is_active)},children:[e.jsx(ue,{className:"size-4 me-2"}),s("common.edit")]}),e.jsxs(H,{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(i,{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(i,{children:s("currencies.name")}),e.jsx(o,{value:f,onChange:n=>I(n.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{children:s("common.status")}),e.jsx(L,{checked:O,onCheckedChange:P})]})]}),e.jsxs(w,{children:[e.jsx(a,{variant:"outline",onClick:()=>u(null),children:s("common.cancel")}),e.jsx(a,{onClick:Y,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(a,{variant:"outline",onClick:()=>h(null),children:s("common.cancel")}),e.jsx(a,{variant:"destructive",onClick:G,children:s("common.delete")})]})]})})]})}export{Ue as default}; diff --git a/adminui/assets/dashboard-DsgdvBI1.js b/adminui/assets/dashboard-C0Qo_lZ1.js similarity index 84% rename from adminui/assets/dashboard-DsgdvBI1.js rename to adminui/assets/dashboard-C0Qo_lZ1.js index eeff3046..47d7f53c 100644 --- a/adminui/assets/dashboard-DsgdvBI1.js +++ b/adminui/assets/dashboard-C0Qo_lZ1.js @@ -1 +1 @@ -import{f as z,j as e}from"./vendor-react-j_G0Dyx0.js";import{cg as F,cJ as P,cz as j,aT as b,a4 as I,ar as Q,aS as Y,b5 as W,an as H,n as L,ak as p,a7 as U,aY as Z,ae as J,aZ as G,bk as y}from"./index-DFelzBez.js";import{B as V,D as X,b as ee,C as se,c as ae,a as te,A as re,P as oe,L as de,d as le,i as ne}from"./vendor-charts-KgA3E3bV.js";import{C as x,a as g}from"./card-D3QxRGt-.js";import{T as ce,d as ie,e as R,c as N,a as me,b as C}from"./table-gihdE9_j.js";import{D as ue}from"./dollar-sign-DoWHiaN9.js";import{T as xe}from"./trending-up-DvzR4Zg7.js";import"./vendor-xyflow-C2hOf6Vp.js";ee.register(se,ae,te,re,oe,de,le,ne);const w={posts:{gradient:"from-blue-600/80 to-blue-700/80",iconBg:"bg-blue-400/25",textColor:"text-blue-50"},products:{gradient:"from-violet-600/80 to-purple-700/80",iconBg:"bg-violet-400/25",textColor:"text-violet-50"},orders:{gradient:"from-amber-600/80 to-orange-600/80",iconBg:"bg-amber-400/25",textColor:"text-amber-50"},revenue:{gradient:"from-emerald-600/80 to-green-700/80",iconBg:"bg-emerald-400/25",textColor:"text-emerald-50"},users:{gradient:"from-rose-600/80 to-pink-700/80",iconBg:"bg-rose-400/25",textColor:"text-rose-50"},comments:{gradient:"from-cyan-600/80 to-teal-600/80",iconBg:"bg-cyan-400/25",textColor:"text-cyan-50"}};function be({label:r,value:s,icon:n,styleKey:m,sub:c,href:i}){const l=w[m]??w.posts;return e.jsx(p,{href:i,className:"block h-full",children:e.jsx(x,{className:"overflow-hidden rounded-xl border-0 py-0 gap-0 shadow-sm hover:shadow-md transition-shadow cursor-pointer h-full",children:e.jsxs("div",{className:`bg-gradient-to-br ${l.gradient} p-5 h-full flex flex-col justify-between rounded-xl`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:`text-xs font-medium ${l.textColor} opacity-80`,children:r}),e.jsx("div",{className:`text-2xl font-bold ${l.textColor}`,children:s===void 0?e.jsx(b,{className:"h-7 w-16 bg-white/20"}):s})]}),e.jsx("div",{className:`flex size-10 items-center justify-center rounded-lg ${l.iconBg}`,children:e.jsx(n,{className:`size-5 ${l.textColor}`})})]}),c?e.jsx("div",{className:"mt-2",children:c}):e.jsx("div",{className:"mt-2"})]})})})}function he({label:r,count:s,variant:n="secondary"}){return e.jsxs("span",{className:`inline-flex items-center gap-1 text-xs ${n==="default"?"text-white/90":"text-white/60"}`,children:[e.jsx("span",{className:"font-medium",children:s}),e.jsx("span",{className:"opacity-70",children:r})]})}function k({items:r}){return e.jsx("div",{className:"flex flex-wrap gap-x-3 gap-y-1",children:r.map(s=>e.jsx(he,{label:s.label,count:s.count},s.label))})}function E(r){if(r>=100){const s=Math.floor(r/100),n=r%100;return n>0?`$${s}.${n.toString().padStart(2,"0")}`:`$${s}`}return`${r}`}function ge(r,s){const n=Date.now(),m=new Date(r).getTime(),c=n-m,i=Math.floor(c/6e4);if(i<1)return s("dashboard.justNow");if(i<60)return`${i}${s("dashboard.minutesAgo")}`;const l=Math.floor(i/60);if(l<24)return`${l}${s("dashboard.hoursAgo")}`;const a=Math.floor(l/24);return a<30?`${a}${s("dashboard.daysAgo")}`:new Date(r).toLocaleDateString()}function pe({type:r,t:s}){const m={"post.created":{label:s("dashboard.post"),className:"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300"},"comment.created":{label:s("dashboard.comment"),className:"bg-cyan-100 text-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-300"},"order.created":{label:s("dashboard.order"),className:"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300"},"product.created":{label:s("dashboard.product"),className:"bg-violet-100 text-violet-700 dark:bg-violet-900/40 dark:text-violet-300"}}[r]??{label:r,className:"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300"};return e.jsx("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${m.className}`,children:m.label})}function Se(){var D,A;const{isAdmin:r}=F(),{t:s}=P(),[n,m]=z.useState(!1);z.useEffect(()=>{m(!0)},[]);const c=j({queryKey:["admin-stats"],queryFn:()=>y.admin.stats.overview(),refetchInterval:3e4}),i=j({queryKey:["admin-stats-trends","orders",14],queryFn:()=>y.admin.stats.trends("orders",14),refetchInterval:6e4}),l=j({queryKey:["admin-stats-trends","products",14],queryFn:()=>y.admin.stats.trends("products",14),refetchInterval:6e4}),a=c.data,v=(a==null?void 0:a.recent_activity)??[],f=((D=i.data)==null?void 0:D.data)??[],T=((A=l.data)==null?void 0:A.data)??[],d=typeof document<"u"&&document.documentElement.classList.contains("dark"),K={labels:f.map(t=>{const o=new Date(t.date);return`${o.getMonth()+1}/${o.getDate()}`}),datasets:[{label:s("dashboard.orders"),data:f.map(t=>t.count),backgroundColor:d?"rgba(251, 191, 36, 0.7)":"rgba(245, 158, 11, 0.7)",hoverBackgroundColor:d?"rgba(251, 191, 36, 0.9)":"rgba(245, 158, 11, 0.9)",borderRadius:4,borderSkipped:!1},{label:s("dashboard.products"),data:T.map(t=>t.count),backgroundColor:d?"rgba(167, 139, 250, 0.7)":"rgba(139, 92, 246, 0.7)",hoverBackgroundColor:d?"rgba(167, 139, 250, 0.9)":"rgba(139, 92, 246, 0.9)",borderRadius:4,borderSkipped:!1}]},$=d?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.5)",M={responsive:!0,maintainAspectRatio:!1,plugins:{tooltip:{backgroundColor:d?"#1c1c24":"#fff",titleColor:d?"#e5e5e5":"#333",bodyColor:d?"#a3a3a3":"#666",borderColor:d?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)",borderWidth:1,cornerRadius:8,padding:10}},scales:{x:{grid:{display:!1},ticks:{color:$,font:{size:11}},border:{display:!1}},y:{grid:{color:d?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)"},ticks:{color:$,font:{size:11}},border:{display:!1},beginAtZero:!0}}},S=(a==null?void 0:a.orders_by_status)??{},u=Object.entries(S),_={labels:u.map(([t])=>t),datasets:[{data:u.map(([,t])=>t),backgroundColor:["rgba(245, 158, 11, 0.8)","rgba(16, 185, 129, 0.8)","rgba(59, 130, 246, 0.8)","rgba(107, 114, 128, 0.8)","rgba(239, 68, 68, 0.8)","rgba(139, 92, 246, 0.8)"],borderWidth:0,hoverOffset:4}]},O={responsive:!0,maintainAspectRatio:!0,cutout:"65%",plugins:{tooltip:{backgroundColor:d?"#1c1c24":"#fff",titleColor:d?"#e5e5e5":"#333",bodyColor:d?"#a3a3a3":"#666",borderColor:d?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)",borderWidth:1,cornerRadius:8}}};if(!n)return e.jsx("div",{className:"space-y-6 pb-6",children:e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6",children:Array.from({length:6}).map((t,o)=>e.jsx(x,{children:e.jsx(b,{className:"h-24"})},o))})});const q=[{label:s("dashboard.posts"),value:a==null?void 0:a.total_posts,icon:I,styleKey:"posts",href:"/posts",sub:e.jsx(k,{items:Object.entries((a==null?void 0:a.posts_by_status)??{}).map(([t,o])=>({label:t,count:Number(o)}))})},{label:s("dashboard.products"),value:a==null?void 0:a.total_products,icon:Q,styleKey:"products",href:"/products",sub:e.jsx(k,{items:Object.entries((a==null?void 0:a.products_by_status)??{}).map(([t,o])=>({label:t,count:Number(o)}))})},{label:s("dashboard.orders"),value:a==null?void 0:a.total_orders,icon:Y,styleKey:"orders",href:"/orders",sub:e.jsx(k,{items:Object.entries(S).map(([t,o])=>({label:t,count:Number(o)}))})},{label:s("dashboard.revenue"),value:(a==null?void 0:a.total_revenue)!==void 0?E(a.total_revenue):void 0,icon:ue,styleKey:"revenue",href:"/orders"},...r()?[{label:s("dashboard.users"),value:a==null?void 0:a.total_users,icon:W,styleKey:"users",href:"/users"}]:[],{label:s("dashboard.comments"),value:a==null?void 0:a.total_comments,icon:H,styleKey:"comments",href:"/comments"}];return e.jsxs("div",{className:"space-y-6 pb-6",children:[c.error&&e.jsxs("div",{className:"text-sm text-destructive bg-destructive/10 p-3 rounded-md flex items-center justify-between",children:[e.jsx("span",{children:s("dashboard.failedToLoad")}),e.jsx(L,{variant:"ghost",size:"sm",onClick:()=>c.refetch(),children:s("common.retry")})]}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6",children:q.map(t=>e.jsx(be,{...t},t.styleKey))}),e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3",children:[e.jsx(x,{className:"lg:col-span-2 shadow-sm",children:e.jsxs(g,{className:"pt-1",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h3",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx(xe,{className:"size-4 text-muted-foreground"}),s("dashboard.ordersAndProducts14Days")]}),e.jsx("div",{className:"flex gap-3",children:e.jsx(p,{href:"/orders",children:e.jsx(L,{variant:"outline",size:"sm",children:s("dashboard.viewAll")})})})]}),i.isLoading&&l.isLoading?e.jsx(b,{className:"h-48 w-full"}):f.length===0&&T.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-10 text-center",children:s("dashboard.noDataYet")}):e.jsx("div",{className:"h-52",children:e.jsx(V,{data:K,options:M})})]})}),e.jsx(x,{className:"shadow-sm",children:e.jsxs(g,{className:"pt-1",children:[e.jsx("h3",{className:"text-sm font-semibold mb-4",children:s("dashboard.orderStatus")}),u.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-10 text-center",children:s("dashboard.noDataYet")}):e.jsxs("div",{className:"flex flex-col items-center gap-4",children:[e.jsx("div",{className:"w-36 h-36",children:e.jsx(X,{data:_,options:O})}),e.jsx("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1 w-full",children:u.map(([t,o])=>e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"size-2 rounded-full shrink-0",style:{backgroundColor:_.datasets[0].backgroundColor[u.indexOf(u.find(([h])=>h===t))]}}),e.jsx("span",{className:"text-muted-foreground capitalize",children:t}),e.jsx("span",{className:"font-medium ms-auto",children:String(o)})]},t))})]})]})})]}),e.jsx(x,{className:"shadow-sm",children:e.jsxs(g,{className:"pt-1",children:[e.jsx("h3",{className:"text-sm font-semibold mb-4",children:s("dashboard.recentActivity")}),c.isLoading?e.jsx("div",{className:"space-y-2",children:Array.from({length:5}).map((t,o)=>e.jsx(b,{className:"h-8 w-full"},o))}):v.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s("dashboard.noActivity")}):e.jsxs(ce,{children:[e.jsx(ie,{children:e.jsxs(R,{children:[e.jsx(N,{className:"w-24",children:s("dashboard.type")}),e.jsx(N,{children:s("dashboard.detail")}),e.jsx(N,{className:"w-32",children:s("dashboard.time")})]})}),e.jsx(me,{children:v.map((t,o)=>{var h,B;return e.jsxs(R,{children:[e.jsx(C,{children:e.jsx(pe,{type:t.type,t:s})}),e.jsx(C,{className:"max-w-[260px] truncate",children:t.type==="post.created"||t.type==="product.created"?e.jsx(p,{href:t.type==="post.created"?`/posts/${t.id}/edit`:`/products/${t.id}/edit`,className:"hover:underline text-sm",children:t.title}):t.type==="order.created"?e.jsxs("span",{className:"text-sm",children:[t.title,t.amount!==void 0&&e.jsx("span",{className:"text-muted-foreground ms-2",children:E(t.amount)})]}):e.jsxs("span",{className:"text-sm text-muted-foreground",children:[(h=t.content)==null?void 0:h.slice(0,60),(((B=t.content)==null?void 0:B.length)??0)>60?"...":""]})}),e.jsx(C,{className:"text-muted-foreground text-xs",children:ge(t.at,s)})]},o)})})]})]})}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[{label:s("dashboard.categories"),value:a==null?void 0:a.total_categories,icon:U,href:"/categories"},{label:s("dashboard.tags"),value:a==null?void 0:a.total_tags,icon:Z,href:"/tags"},{label:s("dashboard.media"),value:a==null?void 0:a.total_media,icon:J,href:"/media"},{label:s("dashboard.coupons"),value:a==null?void 0:a.total_coupons,icon:G,href:"/coupons"}].map(t=>e.jsx(p,{href:t.href,className:"block",children:e.jsx(x,{className:"shadow-sm hover:shadow-md transition-shadow cursor-pointer",children:e.jsx(g,{className:"pt-1",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:t.label}),e.jsx("div",{className:"text-xl font-bold mt-1",children:t.value??e.jsx(b,{className:"h-6 w-12"})})]}),e.jsx(t.icon,{className:"size-5 text-muted-foreground"})]})})})},t.label))})]})}export{Se as default}; +import{f as K,j as e}from"./vendor-react-j_G0Dyx0.js";import{ch as F,cK as P,cA as j,aU as b,a4 as I,ar as Q,aT as U,b6 as W,an as Y,n as L,ak as p,a7 as H,aZ as Z,ae as G,a_ as J,bl as y}from"./index-C-uFVPpg.js";import{B as V,D as X,b as ee,C as se,c as ae,a as te,A as re,P as oe,L as de,d as le,i as ne}from"./vendor-charts-KgA3E3bV.js";import{C as x,a as g}from"./card-BBIqLCR8.js";import{T as ce,d as ie,e as R,c as N,a as me,b as C}from"./table-BoLxzYJ7.js";import{D as ue}from"./dollar-sign-T34glauG.js";import{T as xe}from"./trending-up-BP8P_gCl.js";import"./vendor-xyflow-C2hOf6Vp.js";ee.register(se,ae,te,re,oe,de,le,ne);const w={posts:{gradient:"from-blue-600/80 to-blue-700/80",iconBg:"bg-blue-400/25",textColor:"text-blue-50"},products:{gradient:"from-violet-600/80 to-purple-700/80",iconBg:"bg-violet-400/25",textColor:"text-violet-50"},orders:{gradient:"from-amber-600/80 to-orange-600/80",iconBg:"bg-amber-400/25",textColor:"text-amber-50"},revenue:{gradient:"from-emerald-600/80 to-green-700/80",iconBg:"bg-emerald-400/25",textColor:"text-emerald-50"},users:{gradient:"from-rose-600/80 to-pink-700/80",iconBg:"bg-rose-400/25",textColor:"text-rose-50"},comments:{gradient:"from-cyan-600/80 to-teal-600/80",iconBg:"bg-cyan-400/25",textColor:"text-cyan-50"}};function be({label:r,value:s,icon:n,styleKey:m,sub:c,href:i}){const l=w[m]??w.posts;return e.jsx(p,{href:i,className:"block h-full",children:e.jsx(x,{className:"overflow-hidden rounded-xl border-0 py-0 gap-0 shadow-sm hover:shadow-md transition-shadow cursor-pointer h-full",children:e.jsxs("div",{className:`bg-gradient-to-br ${l.gradient} p-5 h-full flex flex-col justify-between rounded-xl`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:`text-xs font-medium ${l.textColor} opacity-80`,children:r}),e.jsx("div",{className:`text-2xl font-bold ${l.textColor}`,children:s===void 0?e.jsx(b,{className:"h-7 w-16 bg-white/20"}):s})]}),e.jsx("div",{className:`flex size-10 items-center justify-center rounded-lg ${l.iconBg}`,children:e.jsx(n,{className:`size-5 ${l.textColor}`})})]}),c?e.jsx("div",{className:"mt-2",children:c}):e.jsx("div",{className:"mt-2"})]})})})}function he({label:r,count:s,variant:n="secondary"}){return e.jsxs("span",{className:`inline-flex items-center gap-1 text-xs ${n==="default"?"text-white/90":"text-white/60"}`,children:[e.jsx("span",{className:"font-medium",children:s}),e.jsx("span",{className:"opacity-70",children:r})]})}function k({items:r}){return e.jsx("div",{className:"flex flex-wrap gap-x-3 gap-y-1",children:r.map(s=>e.jsx(he,{label:s.label,count:s.count},s.label))})}function z(r){if(r>=100){const s=Math.floor(r/100),n=r%100;return n>0?`$${s}.${n.toString().padStart(2,"0")}`:`$${s}`}return`${r}`}function ge(r,s){const n=Date.now(),m=new Date(r).getTime(),c=n-m,i=Math.floor(c/6e4);if(i<1)return s("dashboard.justNow");if(i<60)return`${i}${s("dashboard.minutesAgo")}`;const l=Math.floor(i/60);if(l<24)return`${l}${s("dashboard.hoursAgo")}`;const a=Math.floor(l/24);return a<30?`${a}${s("dashboard.daysAgo")}`:new Date(r).toLocaleDateString()}function pe({type:r,t:s}){const m={"post.created":{label:s("dashboard.post"),className:"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300"},"comment.created":{label:s("dashboard.comment"),className:"bg-cyan-100 text-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-300"},"order.created":{label:s("dashboard.order"),className:"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300"},"product.created":{label:s("dashboard.product"),className:"bg-violet-100 text-violet-700 dark:bg-violet-900/40 dark:text-violet-300"}}[r]??{label:r,className:"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300"};return e.jsx("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${m.className}`,children:m.label})}function $e(){var S,A;const{isAdmin:r}=F(),{t:s}=P(),[n,m]=K.useState(!1);K.useEffect(()=>{m(!0)},[]);const c=j({queryKey:["admin-stats"],queryFn:()=>y.admin.stats.overview(),refetchInterval:3e4}),i=j({queryKey:["admin-stats-trends","orders",14],queryFn:()=>y.admin.stats.trends("orders",14),refetchInterval:6e4}),l=j({queryKey:["admin-stats-trends","products",14],queryFn:()=>y.admin.stats.trends("products",14),refetchInterval:6e4}),a=c.data,v=(a==null?void 0:a.recent_activity)??[],f=((S=i.data)==null?void 0:S.data)??[],T=((A=l.data)==null?void 0:A.data)??[],d=typeof document<"u"&&document.documentElement.classList.contains("dark"),E={labels:f.map(t=>{const o=new Date(t.date);return`${o.getMonth()+1}/${o.getDate()}`}),datasets:[{label:s("dashboard.orders"),data:f.map(t=>t.count),backgroundColor:d?"rgba(251, 191, 36, 0.7)":"rgba(245, 158, 11, 0.7)",hoverBackgroundColor:d?"rgba(251, 191, 36, 0.9)":"rgba(245, 158, 11, 0.9)",borderRadius:4,borderSkipped:!1},{label:s("dashboard.products"),data:T.map(t=>t.count),backgroundColor:d?"rgba(167, 139, 250, 0.7)":"rgba(139, 92, 246, 0.7)",hoverBackgroundColor:d?"rgba(167, 139, 250, 0.9)":"rgba(139, 92, 246, 0.9)",borderRadius:4,borderSkipped:!1}]},_=d?"rgba(255,255,255,0.5)":"rgba(0,0,0,0.5)",M={responsive:!0,maintainAspectRatio:!1,plugins:{tooltip:{backgroundColor:d?"#1c1c24":"#fff",titleColor:d?"#e5e5e5":"#333",bodyColor:d?"#a3a3a3":"#666",borderColor:d?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)",borderWidth:1,cornerRadius:8,padding:10}},scales:{x:{grid:{display:!1},ticks:{color:_,font:{size:11}},border:{display:!1}},y:{grid:{color:d?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)"},ticks:{color:_,font:{size:11}},border:{display:!1},beginAtZero:!0}}},$=(a==null?void 0:a.orders_by_status)??{},u=Object.entries($),D={labels:u.map(([t])=>t),datasets:[{data:u.map(([,t])=>t),backgroundColor:["rgba(245, 158, 11, 0.8)","rgba(16, 185, 129, 0.8)","rgba(59, 130, 246, 0.8)","rgba(107, 114, 128, 0.8)","rgba(239, 68, 68, 0.8)","rgba(139, 92, 246, 0.8)"],borderWidth:0,hoverOffset:4}]},O={responsive:!0,maintainAspectRatio:!0,cutout:"65%",plugins:{tooltip:{backgroundColor:d?"#1c1c24":"#fff",titleColor:d?"#e5e5e5":"#333",bodyColor:d?"#a3a3a3":"#666",borderColor:d?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)",borderWidth:1,cornerRadius:8}}};if(!n)return e.jsx("div",{className:"space-y-6 pb-6",children:e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6",children:Array.from({length:6}).map((t,o)=>e.jsx(x,{children:e.jsx(b,{className:"h-24"})},o))})});const q=[{label:s("dashboard.posts"),value:a==null?void 0:a.total_posts,icon:I,styleKey:"posts",href:"/posts",sub:e.jsx(k,{items:Object.entries((a==null?void 0:a.posts_by_status)??{}).map(([t,o])=>({label:t,count:Number(o)}))})},{label:s("dashboard.products"),value:a==null?void 0:a.total_products,icon:Q,styleKey:"products",href:"/products",sub:e.jsx(k,{items:Object.entries((a==null?void 0:a.products_by_status)??{}).map(([t,o])=>({label:t,count:Number(o)}))})},{label:s("dashboard.orders"),value:a==null?void 0:a.total_orders,icon:U,styleKey:"orders",href:"/orders",sub:e.jsx(k,{items:Object.entries($).map(([t,o])=>({label:t,count:Number(o)}))})},{label:s("dashboard.revenue"),value:(a==null?void 0:a.total_revenue)!==void 0?z(a.total_revenue):void 0,icon:ue,styleKey:"revenue",href:"/orders"},...r()?[{label:s("dashboard.users"),value:a==null?void 0:a.total_users,icon:W,styleKey:"users",href:"/users"}]:[],{label:s("dashboard.comments"),value:a==null?void 0:a.total_comments,icon:Y,styleKey:"comments",href:"/comments"}];return e.jsxs("div",{className:"space-y-6 pb-6",children:[c.error&&e.jsxs("div",{className:"text-sm text-destructive bg-destructive/10 p-3 rounded-md flex items-center justify-between",children:[e.jsx("span",{children:s("dashboard.failedToLoad")}),e.jsx(L,{variant:"ghost",size:"sm",onClick:()=>c.refetch(),children:s("common.retry")})]}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6",children:q.map(t=>e.jsx(be,{...t},t.styleKey))}),e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3",children:[e.jsx(x,{className:"lg:col-span-2 shadow-sm",children:e.jsxs(g,{className:"pt-1",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h3",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx(xe,{className:"size-4 text-muted-foreground"}),s("dashboard.ordersAndProducts14Days")]}),e.jsx("div",{className:"flex gap-3",children:e.jsx(p,{href:"/orders",children:e.jsx(L,{variant:"outline",size:"sm",children:s("dashboard.viewAll")})})})]}),i.isLoading&&l.isLoading?e.jsx(b,{className:"h-48 w-full"}):f.length===0&&T.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-10 text-center",children:s("dashboard.noDataYet")}):e.jsx("div",{className:"h-52",children:e.jsx(V,{data:E,options:M})})]})}),e.jsx(x,{className:"shadow-sm",children:e.jsxs(g,{className:"pt-1",children:[e.jsx("h3",{className:"text-sm font-semibold mb-4",children:s("dashboard.orderStatus")}),u.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-10 text-center",children:s("dashboard.noDataYet")}):e.jsxs("div",{className:"flex flex-col items-center gap-4",children:[e.jsx("div",{className:"w-36 h-36",children:e.jsx(X,{data:D,options:O})}),e.jsx("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1 w-full",children:u.map(([t,o])=>e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"size-2 rounded-full shrink-0",style:{backgroundColor:D.datasets[0].backgroundColor[u.indexOf(u.find(([h])=>h===t))]}}),e.jsx("span",{className:"text-muted-foreground capitalize",children:t}),e.jsx("span",{className:"font-medium ms-auto",children:String(o)})]},t))})]})]})})]}),e.jsx(x,{className:"shadow-sm",children:e.jsxs(g,{className:"pt-1",children:[e.jsx("h3",{className:"text-sm font-semibold mb-4",children:s("dashboard.recentActivity")}),c.isLoading?e.jsx("div",{className:"space-y-2",children:Array.from({length:5}).map((t,o)=>e.jsx(b,{className:"h-8 w-full"},o))}):v.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s("dashboard.noActivity")}):e.jsxs(ce,{children:[e.jsx(ie,{children:e.jsxs(R,{children:[e.jsx(N,{className:"w-24",children:s("dashboard.type")}),e.jsx(N,{children:s("dashboard.detail")}),e.jsx(N,{className:"w-32",children:s("dashboard.time")})]})}),e.jsx(me,{children:v.map((t,o)=>{var h,B;return e.jsxs(R,{children:[e.jsx(C,{children:e.jsx(pe,{type:t.type,t:s})}),e.jsx(C,{className:"max-w-[260px] truncate",children:t.type==="post.created"||t.type==="product.created"?e.jsx(p,{href:t.type==="post.created"?`/posts/${t.id}/edit`:`/products/${t.id}/edit`,className:"hover:underline text-sm",children:t.title}):t.type==="order.created"?e.jsxs("span",{className:"text-sm",children:[t.title,t.amount!==void 0&&e.jsx("span",{className:"text-muted-foreground ms-2",children:z(t.amount)})]}):e.jsxs("span",{className:"text-sm text-muted-foreground",children:[(h=t.content)==null?void 0:h.slice(0,60),(((B=t.content)==null?void 0:B.length)??0)>60?"...":""]})}),e.jsx(C,{className:"text-muted-foreground text-xs",children:ge(t.at,s)})]},o)})})]})]})}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[{label:s("dashboard.categories"),value:a==null?void 0:a.total_categories,icon:H,href:"/categories"},{label:s("dashboard.tags"),value:a==null?void 0:a.total_tags,icon:Z,href:"/tags"},{label:s("dashboard.media"),value:a==null?void 0:a.total_media,icon:G,href:"/media"},{label:s("dashboard.coupons"),value:a==null?void 0:a.total_coupons,icon:J,href:"/coupons"}].map(t=>e.jsx(p,{href:t.href,className:"block",children:e.jsx(x,{className:"shadow-sm hover:shadow-md transition-shadow cursor-pointer",children:e.jsx(g,{className:"pt-1",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:t.label}),e.jsx("div",{className:"text-xl font-bold mt-1",children:t.value??e.jsx(b,{className:"h-6 w-12"})})]}),e.jsx(t.icon,{className:"size-5 text-muted-foreground"})]})})})},t.label))})]})}export{$e as default}; diff --git a/adminui/assets/database-CAtPG7tU.js b/adminui/assets/database-BWHgXN31.js similarity index 89% rename from adminui/assets/database-CAtPG7tU.js rename to adminui/assets/database-BWHgXN31.js index 8daa386d..a4d8467f 100644 --- a/adminui/assets/database-CAtPG7tU.js +++ b/adminui/assets/database-BWHgXN31.js @@ -1,4 +1,4 @@ -import{bp as e}from"./index-DFelzBez.js";/** +import{bq as e}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/date-range-picker-C5krwo0v.js b/adminui/assets/date-range-picker-CGynAr_4.js similarity index 99% rename from adminui/assets/date-range-picker-C5krwo0v.js rename to adminui/assets/date-range-picker-CGynAr_4.js index dd7a73b4..264884a3 100644 --- a/adminui/assets/date-range-picker-C5krwo0v.js +++ b/adminui/assets/date-range-picker-CGynAr_4.js @@ -1 +1 @@ -import{j as u}from"./vendor-react-j_G0Dyx0.js";import{b as s,a as r,c as i,d as m,z as b,e as g,C as w}from"./calendar-CgYg3JyR.js";import{cq as P,at as v,az as p,n as M,au as y}from"./index-DFelzBez.js";import{C as $}from"./calendar-CQckEvY8.js";const W={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}} سنة"}},j=(e,n,t)=>{const a=W[e];let o;return typeof a=="string"?o=a:n===1?o=a.one:n===2?o=a.two:n<=10?o=a.threeToTen.replace("{{count}}",String(n)):o=a.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"خلال "+o:"منذ "+o:o},D={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"d MMM y",short:"dd/MM/yyyy"},x={full:"HH:mm:ss",long:"HH:mm:ss",medium:"HH:mm:ss",short:"HH:mm"},k={full:"{{date}} 'عند الساعة' {{time}}",long:"{{date}} 'عند الساعة' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},S={date:s({formats:D,defaultWidth:"full"}),time:s({formats:x,defaultWidth:"full"}),dateTime:s({formats:k,defaultWidth:"full"})},T={lastWeek:"eeee 'الماضي عند الساعة' p",yesterday:"'الأمس عند الساعة' p",today:"'اليوم عند الساعة' p",tomorrow:"'غدا عند الساعة' p",nextWeek:"eeee 'القادم عند الساعة' p",other:"P"},C=e=>T[e],z={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},H={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},N={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},X={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},V={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:"منتصف الليل"}},q={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:"منتصف الليل"}},J=e=>String(e),E={ordinalNumber:J,era:r({values:z,defaultWidth:"wide"}),quarter:r({values:H,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:N,defaultWidth:"wide"}),day:r({values:X,defaultWidth:"wide"}),dayPeriod:r({values:V,defaultWidth:"wide",formattingValues:q,defaultFormattingWidth:"wide"})},F=/^(\d+)(th|st|nd|rd)?/i,A=/\d+/i,L={narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},Q={any:[/قبل/,/بعد/]},O={narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},Y={any:[/1/i,/2/i,/3/i,/4/i]},R={narrow:/^[أيفمسند]/,abbreviated:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},_={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]},I={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},B={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},G={narrow:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,any:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/},U={any:{am:/^ص/,pm:/^م/,midnight:/منتصف الليل/,noon:/الظهر/,afternoon:/بعد الظهر/,morning:/في الصباح/,evening:/في المساء/,night:/في الليل/}},Z={ordinalNumber:m({matchPattern:F,parsePattern:A,valueCallback:e=>parseInt(e,10)}),era:i({matchPatterns:L,defaultMatchWidth:"wide",parsePatterns:Q,defaultParseWidth:"any"}),quarter:i({matchPatterns:O,defaultMatchWidth:"wide",parsePatterns:Y,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:R,defaultMatchWidth:"wide",parsePatterns:_,defaultParseWidth:"any"}),day:i({matchPatterns:I,defaultMatchWidth:"wide",parsePatterns:B,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:G,defaultMatchWidth:"any",parsePatterns:U,defaultParseWidth:"any"})},K={code:"ar",formatDistance:j,formatLong:S,formatRelative:C,localize:E,match:Z,options:{weekStartsOn:6,firstWeekContainsDate:1}},h={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"}}},ee=(e,n,t)=>{let a;const o=t!=null&&t.addSuffix?h[e].withPreposition:h[e].standalone;return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+a:"vor "+a:a},te={full:"EEEE, do MMMM y",long:"do MMMM y",medium:"do MMM y",short:"dd.MM.y"},ae={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},ne={full:"{{date}} 'um' {{time}}",long:"{{date}} 'um' {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},oe={date:s({formats:te,defaultWidth:"full"}),time:s({formats:ae,defaultWidth:"full"}),dateTime:s({formats:ne,defaultWidth:"full"})},re={lastWeek:"'letzten' eeee 'um' p",yesterday:"'gestern um' p",today:"'heute um' p",tomorrow:"'morgen um' p",nextWeek:"eeee 'um' p",other:"P"},ie=(e,n,t,a)=>re[e],se={narrow:["v.Chr.","n.Chr."],abbreviated:["v.Chr.","n.Chr."],wide:["vor Christus","nach Christus"]},de={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"]},c={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"]},me={narrow:c.narrow,abbreviated:["Jan.","Feb.","März","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."],wide:c.wide},ue={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"]},ce={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"}},he={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"}},le=e=>Number(e)+".",fe={ordinalNumber:le,era:r({values:se,defaultWidth:"wide"}),quarter:r({values:de,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:c,formattingValues:me,defaultWidth:"wide"}),day:r({values:ue,defaultWidth:"wide"}),dayPeriod:r({values:ce,defaultWidth:"wide",formattingValues:he,defaultFormattingWidth:"wide"})},ge=/^(\d+)(\.)?/i,be=/\d+/i,we={narrow:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,abbreviated:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,wide:/^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i},Pe={any:[/^v/i,/^n/i]},ve={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](\.)? Quartal/i},pe={any:[/1/i,/2/i,/3/i,/4/i]},Me={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},ye={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]},$e={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},We={any:[/^so/i,/^mo/i,/^di/i,/^mi/i,/^do/i,/^f/i,/^sa/i]},je={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},De={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}},xe={ordinalNumber:m({matchPattern:ge,parsePattern:be,valueCallback:e=>parseInt(e)}),era:i({matchPatterns:we,defaultMatchWidth:"wide",parsePatterns:Pe,defaultParseWidth:"any"}),quarter:i({matchPatterns:ve,defaultMatchWidth:"wide",parsePatterns:pe,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:Me,defaultMatchWidth:"wide",parsePatterns:ye,defaultParseWidth:"any"}),day:i({matchPatterns:$e,defaultMatchWidth:"wide",parsePatterns:We,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:je,defaultMatchWidth:"wide",parsePatterns:De,defaultParseWidth:"any"})},ke={code:"de",formatDistance:ee,formatLong:oe,formatRelative:ie,localize:fe,match:xe,options:{weekStartsOn:1,firstWeekContainsDate:4}},Se={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"}},Te=(e,n,t)=>{let a;const o=Se[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",n.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"en "+a:"hace "+a:a},Ce={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d MMM y",short:"dd/MM/y"},ze={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},He={full:"{{date}} 'a las' {{time}}",long:"{{date}} 'a las' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ne={date:s({formats:Ce,defaultWidth:"full"}),time:s({formats:ze,defaultWidth:"full"}),dateTime:s({formats:He,defaultWidth:"full"})},Xe={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"},Ve={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"},qe=(e,n,t,a)=>n.getHours()!==1?Ve[e]:Xe[e],Je={narrow:["AC","DC"],abbreviated:["AC","DC"],wide:["antes de cristo","después de cristo"]},Ee={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},Fe={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"]},Ae={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"]},Le={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"}},Qe={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"}},Oe=(e,n)=>Number(e)+"º",Ye={ordinalNumber:Oe,era:r({values:Je,defaultWidth:"wide"}),quarter:r({values:Ee,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:r({values:Fe,defaultWidth:"wide"}),day:r({values:Ae,defaultWidth:"wide"}),dayPeriod:r({values:Le,defaultWidth:"wide",formattingValues:Qe,defaultFormattingWidth:"wide"})},Re=/^(\d+)(º)?/i,_e=/\d+/i,Ie={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},Be={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]},Ge={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º)? trimestre/i},Ue={any:[/1/i,/2/i,/3/i,/4/i]},Ze={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},Ke={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]},et={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},tt={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]},at={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},nt={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}},ot={ordinalNumber:m({matchPattern:Re,parsePattern:_e,valueCallback:function(e){return parseInt(e,10)}}),era:i({matchPatterns:Ie,defaultMatchWidth:"wide",parsePatterns:Be,defaultParseWidth:"any"}),quarter:i({matchPatterns:Ge,defaultMatchWidth:"wide",parsePatterns:Ue,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:Ze,defaultMatchWidth:"wide",parsePatterns:Ke,defaultParseWidth:"any"}),day:i({matchPatterns:et,defaultMatchWidth:"wide",parsePatterns:tt,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:at,defaultMatchWidth:"any",parsePatterns:nt,defaultParseWidth:"any"})},rt={code:"es",formatDistance:Te,formatLong:Ne,formatRelative:qe,localize:Ye,match:ot,options:{weekStartsOn:1,firstWeekContainsDate:1}},it={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"}},st=(e,n,t)=>{let a;const o=it[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"dans "+a:"il y a "+a:a},dt={full:"EEEE d MMMM y",long:"d MMMM y",medium:"d MMM y",short:"dd/MM/y"},mt={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},ut={full:"{{date}} 'à' {{time}}",long:"{{date}} 'à' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ct={date:s({formats:dt,defaultWidth:"full"}),time:s({formats:mt,defaultWidth:"full"}),dateTime:s({formats:ut,defaultWidth:"full"})},ht={lastWeek:"eeee 'dernier à' p",yesterday:"'hier à' p",today:"'aujourd’hui à' p",tomorrow:"'demain à' p'",nextWeek:"eeee 'prochain à' p",other:"P"},lt=(e,n,t,a)=>ht[e],ft={narrow:["av. J.-C","ap. J.-C"],abbreviated:["av. J.-C","ap. J.-C"],wide:["avant Jésus-Christ","après Jésus-Christ"]},gt={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"]},bt={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"]},wt={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"]},Pt={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"}},vt=(e,n)=>{const t=Number(e),a=n==null?void 0:n.unit;if(t===0)return"0";const o=["year","week","hour","minute","second"];let d;return t===1?d=a&&o.includes(a)?"ère":"er":d="ème",t+d},pt=["MMM","MMMM"],Mt={preprocessor:(e,n)=>e.getDate()===1||!n.some(a=>a.isToken&&pt.includes(a.value))?n:n.map(a=>a.isToken&&a.value==="do"?{isToken:!0,value:"d"}:a),ordinalNumber:vt,era:r({values:ft,defaultWidth:"wide"}),quarter:r({values:gt,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:bt,defaultWidth:"wide"}),day:r({values:wt,defaultWidth:"wide"}),dayPeriod:r({values:Pt,defaultWidth:"wide"})},yt=/^(\d+)(ième|ère|ème|er|e)?/i,$t=/\d+/i,Wt={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},jt={any:[/^av/i,/^ap/i]},Dt={narrow:/^T?[1234]/i,abbreviated:/^[1234](er|ème|e)? trim\.?/i,wide:/^[1234](er|ème|e)? trimestre/i},xt={any:[/1/i,/2/i,/3/i,/4/i]},kt={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},St={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]},Tt={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},Ct={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]},zt={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},Ht={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}},Nt={ordinalNumber:m({matchPattern:yt,parsePattern:$t,valueCallback:e=>parseInt(e)}),era:i({matchPatterns:Wt,defaultMatchWidth:"wide",parsePatterns:jt,defaultParseWidth:"any"}),quarter:i({matchPatterns:Dt,defaultMatchWidth:"wide",parsePatterns:xt,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:kt,defaultMatchWidth:"wide",parsePatterns:St,defaultParseWidth:"any"}),day:i({matchPatterns:Tt,defaultMatchWidth:"wide",parsePatterns:Ct,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:zt,defaultMatchWidth:"any",parsePatterns:Ht,defaultParseWidth:"any"})},Xt={code:"fr",formatDistance:st,formatLong:ct,formatRelative:lt,localize:Mt,match:Nt,options:{weekStartsOn:1,firstWeekContainsDate:4}},Vt={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}}年近く"}},qt=(e,n,t)=>{t=t||{};let a;const o=Vt[e];return typeof o=="string"?a=o:n===1?t.addSuffix&&o.oneWithSuffix?a=o.oneWithSuffix:a=o.one:t.addSuffix&&o.otherWithSuffix?a=o.otherWithSuffix.replace("{{count}}",String(n)):a=o.other.replace("{{count}}",String(n)),t.addSuffix?t.comparison&&t.comparison>0?a+"後":a+"前":a},Jt={full:"y年M月d日EEEE",long:"y年M月d日",medium:"y/MM/dd",short:"y/MM/dd"},Et={full:"H時mm分ss秒 zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},Ft={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},At={date:s({formats:Jt,defaultWidth:"full"}),time:s({formats:Et,defaultWidth:"full"}),dateTime:s({formats:Ft,defaultWidth:"full"})},Lt={lastWeek:"先週のeeeeのp",yesterday:"昨日のp",today:"今日のp",tomorrow:"明日のp",nextWeek:"翌週のeeeeのp",other:"P"},Qt=(e,n,t,a)=>Lt[e],Ot={narrow:["BC","AC"],abbreviated:["紀元前","西暦"],wide:["紀元前","西暦"]},Yt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["第1四半期","第2四半期","第3四半期","第4四半期"]},Rt={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月"]},_t={narrow:["日","月","火","水","木","金","土"],short:["日","月","火","水","木","金","土"],abbreviated:["日","月","火","水","木","金","土"],wide:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},It={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:"深夜"}},Bt={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:"深夜"}},Gt=(e,n)=>{const t=Number(e);switch(String(n==null?void 0:n.unit)){case"year":return`${t}年`;case"quarter":return`第${t}四半期`;case"month":return`${t}月`;case"week":return`第${t}週`;case"date":return`${t}日`;case"hour":return`${t}時`;case"minute":return`${t}分`;case"second":return`${t}秒`;default:return`${t}`}},Ut={ordinalNumber:Gt,era:r({values:Ot,defaultWidth:"wide"}),quarter:r({values:Yt,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:r({values:Rt,defaultWidth:"wide"}),day:r({values:_t,defaultWidth:"wide"}),dayPeriod:r({values:It,defaultWidth:"wide",formattingValues:Bt,defaultFormattingWidth:"wide"})},Zt=/^第?\d+(年|四半期|月|週|日|時|分|秒)?/i,Kt=/\d+/i,ea={narrow:/^(B\.?C\.?|A\.?D\.?)/i,abbreviated:/^(紀元[前後]|西暦)/i,wide:/^(紀元[前後]|西暦)/i},ta={narrow:[/^B/i,/^A/i],any:[/^(紀元前)/i,/^(西暦|紀元後)/i]},aa={narrow:/^[1234]/i,abbreviated:/^Q[1234]/i,wide:/^第[1234一二三四1234]四半期/i},na={any:[/(1|一|1)/i,/(2|二|2)/i,/(3|三|3)/i,/(4|四|4)/i]},oa={narrow:/^([123456789]|1[012])/,abbreviated:/^([123456789]|1[012])月/i,wide:/^([123456789]|1[012])月/i},ra={any:[/^1\D/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},ia={narrow:/^[日月火水木金土]/,short:/^[日月火水木金土]/,abbreviated:/^[日月火水木金土]/,wide:/^[日月火水木金土]曜日/},sa={any:[/^日/,/^月/,/^火/,/^水/,/^木/,/^金/,/^土/]},da={any:/^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i},ma={any:{am:/^(A|午前)/i,pm:/^(P|午後)/i,midnight:/^深夜|真夜中/i,noon:/^正午/i,morning:/^朝/i,afternoon:/^午後/i,evening:/^夜/i,night:/^深夜/i}},ua={ordinalNumber:m({matchPattern:Zt,parsePattern:Kt,valueCallback:function(e){return parseInt(e,10)}}),era:i({matchPatterns:ea,defaultMatchWidth:"wide",parsePatterns:ta,defaultParseWidth:"any"}),quarter:i({matchPatterns:aa,defaultMatchWidth:"wide",parsePatterns:na,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:oa,defaultMatchWidth:"wide",parsePatterns:ra,defaultParseWidth:"any"}),day:i({matchPatterns:ia,defaultMatchWidth:"wide",parsePatterns:sa,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:da,defaultMatchWidth:"any",parsePatterns:ma,defaultParseWidth:"any"})},ca={code:"ja",formatDistance:qt,formatLong:At,formatRelative:Qt,localize:Ut,match:ua,options:{weekStartsOn:0,firstWeekContainsDate:1}},ha={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}}년"}},la=(e,n,t)=>{let a;const o=ha[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",n.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?a+" 후":a+" 전":a},fa={full:"y년 M월 d일 EEEE",long:"y년 M월 d일",medium:"y.MM.dd",short:"y.MM.dd"},ga={full:"a H시 mm분 ss초 zzzz",long:"a H:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},ba={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},wa={date:s({formats:fa,defaultWidth:"full"}),time:s({formats:ga,defaultWidth:"full"}),dateTime:s({formats:ba,defaultWidth:"full"})},Pa={lastWeek:"'지난' eeee p",yesterday:"'어제' p",today:"'오늘' p",tomorrow:"'내일' p",nextWeek:"'다음' eeee p",other:"P"},va=(e,n,t,a)=>Pa[e],pa={narrow:["BC","AD"],abbreviated:["BC","AD"],wide:["기원전","서기"]},Ma={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1분기","2분기","3분기","4분기"]},ya={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월"]},$a={narrow:["일","월","화","수","목","금","토"],short:["일","월","화","수","목","금","토"],abbreviated:["일","월","화","수","목","금","토"],wide:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},Wa={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:"밤"}},ja={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=(e,n)=>{const t=Number(e);switch(String(n==null?void 0:n.unit)){case"minute":case"second":return String(t);case"date":return t+"일";default:return t+"번째"}},xa={ordinalNumber:Da,era:r({values:pa,defaultWidth:"wide"}),quarter:r({values:Ma,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:ya,defaultWidth:"wide"}),day:r({values:$a,defaultWidth:"wide"}),dayPeriod:r({values:Wa,defaultWidth:"wide",formattingValues:ja,defaultFormattingWidth:"wide"})},ka=/^(\d+)(일|번째)?/i,Sa=/\d+/i,Ta={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},Ca={any:[/^(bc|기원전)/i,/^(ad|서기)/i]},za={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234]사?분기/i},Ha={any:[/1/i,/2/i,/3/i,/4/i]},Na={narrow:/^(1[012]|[123456789])/,abbreviated:/^(1[012]|[123456789])월/i,wide:/^(1[012]|[123456789])월/i},Xa={any:[/^1월?$/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},Va={narrow:/^[일월화수목금토]/,short:/^[일월화수목금토]/,abbreviated:/^[일월화수목금토]/,wide:/^[일월화수목금토]요일/},qa={any:[/^일/,/^월/,/^화/,/^수/,/^목/,/^금/,/^토/]},Ja={any:/^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i},Ea={any:{am:/^(am|오전)/i,pm:/^(pm|오후)/i,midnight:/^자정/i,noon:/^정오/i,morning:/^아침/i,afternoon:/^오후/i,evening:/^저녁/i,night:/^밤/i}},Fa={ordinalNumber:m({matchPattern:ka,parsePattern:Sa,valueCallback:e=>parseInt(e,10)}),era:i({matchPatterns:Ta,defaultMatchWidth:"wide",parsePatterns:Ca,defaultParseWidth:"any"}),quarter:i({matchPatterns:za,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:Na,defaultMatchWidth:"wide",parsePatterns:Xa,defaultParseWidth:"any"}),day:i({matchPatterns:Va,defaultMatchWidth:"wide",parsePatterns:qa,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:Ja,defaultMatchWidth:"any",parsePatterns:Ea,defaultParseWidth:"any"})},Aa={code:"ko",formatDistance:la,formatLong:wa,formatRelative:va,localize:xa,match:Fa,options:{weekStartsOn:0,firstWeekContainsDate:1}},La={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"}},Qa=(e,n,t)=>{let a;const o=La[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"daqui a "+a:"há "+a:a},Oa={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d 'de' MMM 'de' y",short:"dd/MM/y"},Ya={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},Ra={full:"{{date}} 'às' {{time}}",long:"{{date}} 'às' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},_a={date:s({formats:Oa,defaultWidth:"full"}),time:s({formats:Ya,defaultWidth:"full"}),dateTime:s({formats:Ra,defaultWidth:"full"})},Ia={lastWeek:e=>{const n=e.getDay();return"'"+(n===0||n===6?"último":"última")+"' eeee 'às' p"},yesterday:"'ontem às' p",today:"'hoje às' p",tomorrow:"'amanhã às' p",nextWeek:"eeee 'às' p",other:"P"},Ba=(e,n,t,a)=>{const o=Ia[e];return typeof o=="function"?o(n):o},Ga={narrow:["aC","dC"],abbreviated:["a.C.","d.C."],wide:["antes de Cristo","depois de Cristo"]},Ua={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},Za={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"]},Ka={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"]},en={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"}},tn={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"}},an=(e,n)=>Number(e)+"º",nn={ordinalNumber:an,era:r({values:Ga,defaultWidth:"wide"}),quarter:r({values:Ua,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:Za,defaultWidth:"wide"}),day:r({values:Ka,defaultWidth:"wide"}),dayPeriod:r({values:en,defaultWidth:"wide",formattingValues:tn,defaultFormattingWidth:"wide"})},on=/^(\d+)(º|ª)?/i,rn=/\d+/i,sn={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},dn={any:[/^ac/i,/^dc/i],wide:[/^(antes de cristo|antes da era comum)/i,/^(depois de cristo|era comum)/i]},mn={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º|ª)? trimestre/i},un={any:[/1/i,/2/i,/3/i,/4/i]},cn={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},hn={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]},ln={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},fn={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]},gn={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},bn={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}},wn={ordinalNumber:m({matchPattern:on,parsePattern:rn,valueCallback:e=>parseInt(e,10)}),era:i({matchPatterns:sn,defaultMatchWidth:"wide",parsePatterns:dn,defaultParseWidth:"any"}),quarter:i({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:un,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:cn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),day:i({matchPatterns:ln,defaultMatchWidth:"wide",parsePatterns:fn,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:gn,defaultMatchWidth:"any",parsePatterns:bn,defaultParseWidth:"any"})},Pn={code:"pt",formatDistance:Qa,formatLong:_a,formatRelative:Ba,localize:nn,match:wn,options:{weekStartsOn:0,firstWeekContainsDate:4}},vn={en:g,zh:b,ja:ca,ko:Aa,es:rt,pt:Pn,de:ke,fr:Xt,ar:K};function pn(){const e=P(n=>n.locale);return vn[e]??g}function l(e){if(!e)return;const n=new Date(`${e}T00:00:00`);return Number.isNaN(n.getTime())?void 0:n}function f(e){const n=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${n}-${t}-${a}`}function jn({value:e,onChange:n,placeholder:t="Select date range"}){const a=pn(),o=e.from||e.to?{from:l(e.from),to:l(e.to)}:void 0;return u.jsxs(v,{children:[u.jsx(p,{render:u.jsxs(M,{type:"button",variant:"outline",size:"sm",className:"justify-start font-normal",children:[u.jsx($,{className:"size-4"}),e.from||e.to?`${e.from||"…"} ~ ${e.to||"…"}`:t]})}),u.jsx(y,{className:"w-auto p-0",align:"start",children:u.jsx(w,{locale:a,mode:"range",selected:o,onSelect:d=>{d&&n({from:d.from?f(d.from):e.from,to:d.to?f(d.to):e.to})},numberOfMonths:2})})]})}export{jn as D}; +import{j as u}from"./vendor-react-j_G0Dyx0.js";import{b as s,a as r,c as i,d as m,z as b,e as g,C as w}from"./calendar-eg-EvdVA.js";import{cr as P,at as v,az as p,n as M,au as y}from"./index-C-uFVPpg.js";import{C as $}from"./calendar-CO7BPWOR.js";const W={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}} سنة"}},j=(e,n,t)=>{const a=W[e];let o;return typeof a=="string"?o=a:n===1?o=a.one:n===2?o=a.two:n<=10?o=a.threeToTen.replace("{{count}}",String(n)):o=a.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"خلال "+o:"منذ "+o:o},D={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"d MMM y",short:"dd/MM/yyyy"},x={full:"HH:mm:ss",long:"HH:mm:ss",medium:"HH:mm:ss",short:"HH:mm"},k={full:"{{date}} 'عند الساعة' {{time}}",long:"{{date}} 'عند الساعة' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},S={date:s({formats:D,defaultWidth:"full"}),time:s({formats:x,defaultWidth:"full"}),dateTime:s({formats:k,defaultWidth:"full"})},T={lastWeek:"eeee 'الماضي عند الساعة' p",yesterday:"'الأمس عند الساعة' p",today:"'اليوم عند الساعة' p",tomorrow:"'غدا عند الساعة' p",nextWeek:"eeee 'القادم عند الساعة' p",other:"P"},C=e=>T[e],z={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},H={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},N={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},X={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},V={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:"منتصف الليل"}},q={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:"منتصف الليل"}},J=e=>String(e),E={ordinalNumber:J,era:r({values:z,defaultWidth:"wide"}),quarter:r({values:H,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:N,defaultWidth:"wide"}),day:r({values:X,defaultWidth:"wide"}),dayPeriod:r({values:V,defaultWidth:"wide",formattingValues:q,defaultFormattingWidth:"wide"})},F=/^(\d+)(th|st|nd|rd)?/i,A=/\d+/i,L={narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},Q={any:[/قبل/,/بعد/]},O={narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},Y={any:[/1/i,/2/i,/3/i,/4/i]},R={narrow:/^[أيفمسند]/,abbreviated:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},_={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]},I={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},B={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},G={narrow:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,any:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/},U={any:{am:/^ص/,pm:/^م/,midnight:/منتصف الليل/,noon:/الظهر/,afternoon:/بعد الظهر/,morning:/في الصباح/,evening:/في المساء/,night:/في الليل/}},Z={ordinalNumber:m({matchPattern:F,parsePattern:A,valueCallback:e=>parseInt(e,10)}),era:i({matchPatterns:L,defaultMatchWidth:"wide",parsePatterns:Q,defaultParseWidth:"any"}),quarter:i({matchPatterns:O,defaultMatchWidth:"wide",parsePatterns:Y,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:R,defaultMatchWidth:"wide",parsePatterns:_,defaultParseWidth:"any"}),day:i({matchPatterns:I,defaultMatchWidth:"wide",parsePatterns:B,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:G,defaultMatchWidth:"any",parsePatterns:U,defaultParseWidth:"any"})},K={code:"ar",formatDistance:j,formatLong:S,formatRelative:C,localize:E,match:Z,options:{weekStartsOn:6,firstWeekContainsDate:1}},h={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"}}},ee=(e,n,t)=>{let a;const o=t!=null&&t.addSuffix?h[e].withPreposition:h[e].standalone;return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+a:"vor "+a:a},te={full:"EEEE, do MMMM y",long:"do MMMM y",medium:"do MMM y",short:"dd.MM.y"},ae={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},ne={full:"{{date}} 'um' {{time}}",long:"{{date}} 'um' {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},oe={date:s({formats:te,defaultWidth:"full"}),time:s({formats:ae,defaultWidth:"full"}),dateTime:s({formats:ne,defaultWidth:"full"})},re={lastWeek:"'letzten' eeee 'um' p",yesterday:"'gestern um' p",today:"'heute um' p",tomorrow:"'morgen um' p",nextWeek:"eeee 'um' p",other:"P"},ie=(e,n,t,a)=>re[e],se={narrow:["v.Chr.","n.Chr."],abbreviated:["v.Chr.","n.Chr."],wide:["vor Christus","nach Christus"]},de={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1. Quartal","2. Quartal","3. Quartal","4. Quartal"]},c={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"]},me={narrow:c.narrow,abbreviated:["Jan.","Feb.","März","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."],wide:c.wide},ue={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"]},ce={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"}},he={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"}},le=e=>Number(e)+".",fe={ordinalNumber:le,era:r({values:se,defaultWidth:"wide"}),quarter:r({values:de,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:c,formattingValues:me,defaultWidth:"wide"}),day:r({values:ue,defaultWidth:"wide"}),dayPeriod:r({values:ce,defaultWidth:"wide",formattingValues:he,defaultFormattingWidth:"wide"})},ge=/^(\d+)(\.)?/i,be=/\d+/i,we={narrow:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,abbreviated:/^(v\.? ?Chr\.?|n\.? ?Chr\.?)/i,wide:/^(vor Christus|vor unserer Zeitrechnung|nach Christus|unserer Zeitrechnung)/i},Pe={any:[/^v/i,/^n/i]},ve={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](\.)? Quartal/i},pe={any:[/1/i,/2/i,/3/i,/4/i]},Me={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},ye={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]},$e={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},We={any:[/^so/i,/^mo/i,/^di/i,/^mi/i,/^do/i,/^f/i,/^sa/i]},je={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},De={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}},xe={ordinalNumber:m({matchPattern:ge,parsePattern:be,valueCallback:e=>parseInt(e)}),era:i({matchPatterns:we,defaultMatchWidth:"wide",parsePatterns:Pe,defaultParseWidth:"any"}),quarter:i({matchPatterns:ve,defaultMatchWidth:"wide",parsePatterns:pe,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:Me,defaultMatchWidth:"wide",parsePatterns:ye,defaultParseWidth:"any"}),day:i({matchPatterns:$e,defaultMatchWidth:"wide",parsePatterns:We,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:je,defaultMatchWidth:"wide",parsePatterns:De,defaultParseWidth:"any"})},ke={code:"de",formatDistance:ee,formatLong:oe,formatRelative:ie,localize:fe,match:xe,options:{weekStartsOn:1,firstWeekContainsDate:4}},Se={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"}},Te=(e,n,t)=>{let a;const o=Se[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",n.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"en "+a:"hace "+a:a},Ce={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d MMM y",short:"dd/MM/y"},ze={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},He={full:"{{date}} 'a las' {{time}}",long:"{{date}} 'a las' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ne={date:s({formats:Ce,defaultWidth:"full"}),time:s({formats:ze,defaultWidth:"full"}),dateTime:s({formats:He,defaultWidth:"full"})},Xe={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"},Ve={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"},qe=(e,n,t,a)=>n.getHours()!==1?Ve[e]:Xe[e],Je={narrow:["AC","DC"],abbreviated:["AC","DC"],wide:["antes de cristo","después de cristo"]},Ee={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},Fe={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"]},Ae={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"]},Le={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"}},Qe={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"}},Oe=(e,n)=>Number(e)+"º",Ye={ordinalNumber:Oe,era:r({values:Je,defaultWidth:"wide"}),quarter:r({values:Ee,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:r({values:Fe,defaultWidth:"wide"}),day:r({values:Ae,defaultWidth:"wide"}),dayPeriod:r({values:Le,defaultWidth:"wide",formattingValues:Qe,defaultFormattingWidth:"wide"})},Re=/^(\d+)(º)?/i,_e=/\d+/i,Ie={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},Be={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]},Ge={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º)? trimestre/i},Ue={any:[/1/i,/2/i,/3/i,/4/i]},Ze={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},Ke={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]},et={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},tt={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]},at={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},nt={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}},ot={ordinalNumber:m({matchPattern:Re,parsePattern:_e,valueCallback:function(e){return parseInt(e,10)}}),era:i({matchPatterns:Ie,defaultMatchWidth:"wide",parsePatterns:Be,defaultParseWidth:"any"}),quarter:i({matchPatterns:Ge,defaultMatchWidth:"wide",parsePatterns:Ue,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:Ze,defaultMatchWidth:"wide",parsePatterns:Ke,defaultParseWidth:"any"}),day:i({matchPatterns:et,defaultMatchWidth:"wide",parsePatterns:tt,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:at,defaultMatchWidth:"any",parsePatterns:nt,defaultParseWidth:"any"})},rt={code:"es",formatDistance:Te,formatLong:Ne,formatRelative:qe,localize:Ye,match:ot,options:{weekStartsOn:1,firstWeekContainsDate:1}},it={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"}},st=(e,n,t)=>{let a;const o=it[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"dans "+a:"il y a "+a:a},dt={full:"EEEE d MMMM y",long:"d MMMM y",medium:"d MMM y",short:"dd/MM/y"},mt={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},ut={full:"{{date}} 'à' {{time}}",long:"{{date}} 'à' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ct={date:s({formats:dt,defaultWidth:"full"}),time:s({formats:mt,defaultWidth:"full"}),dateTime:s({formats:ut,defaultWidth:"full"})},ht={lastWeek:"eeee 'dernier à' p",yesterday:"'hier à' p",today:"'aujourd’hui à' p",tomorrow:"'demain à' p'",nextWeek:"eeee 'prochain à' p",other:"P"},lt=(e,n,t,a)=>ht[e],ft={narrow:["av. J.-C","ap. J.-C"],abbreviated:["av. J.-C","ap. J.-C"],wide:["avant Jésus-Christ","après Jésus-Christ"]},gt={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"]},bt={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"]},wt={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"]},Pt={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"}},vt=(e,n)=>{const t=Number(e),a=n==null?void 0:n.unit;if(t===0)return"0";const o=["year","week","hour","minute","second"];let d;return t===1?d=a&&o.includes(a)?"ère":"er":d="ème",t+d},pt=["MMM","MMMM"],Mt={preprocessor:(e,n)=>e.getDate()===1||!n.some(a=>a.isToken&&pt.includes(a.value))?n:n.map(a=>a.isToken&&a.value==="do"?{isToken:!0,value:"d"}:a),ordinalNumber:vt,era:r({values:ft,defaultWidth:"wide"}),quarter:r({values:gt,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:bt,defaultWidth:"wide"}),day:r({values:wt,defaultWidth:"wide"}),dayPeriod:r({values:Pt,defaultWidth:"wide"})},yt=/^(\d+)(ième|ère|ème|er|e)?/i,$t=/\d+/i,Wt={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},jt={any:[/^av/i,/^ap/i]},Dt={narrow:/^T?[1234]/i,abbreviated:/^[1234](er|ème|e)? trim\.?/i,wide:/^[1234](er|ème|e)? trimestre/i},xt={any:[/1/i,/2/i,/3/i,/4/i]},kt={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},St={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]},Tt={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},Ct={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]},zt={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},Ht={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}},Nt={ordinalNumber:m({matchPattern:yt,parsePattern:$t,valueCallback:e=>parseInt(e)}),era:i({matchPatterns:Wt,defaultMatchWidth:"wide",parsePatterns:jt,defaultParseWidth:"any"}),quarter:i({matchPatterns:Dt,defaultMatchWidth:"wide",parsePatterns:xt,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:kt,defaultMatchWidth:"wide",parsePatterns:St,defaultParseWidth:"any"}),day:i({matchPatterns:Tt,defaultMatchWidth:"wide",parsePatterns:Ct,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:zt,defaultMatchWidth:"any",parsePatterns:Ht,defaultParseWidth:"any"})},Xt={code:"fr",formatDistance:st,formatLong:ct,formatRelative:lt,localize:Mt,match:Nt,options:{weekStartsOn:1,firstWeekContainsDate:4}},Vt={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}}年近く"}},qt=(e,n,t)=>{t=t||{};let a;const o=Vt[e];return typeof o=="string"?a=o:n===1?t.addSuffix&&o.oneWithSuffix?a=o.oneWithSuffix:a=o.one:t.addSuffix&&o.otherWithSuffix?a=o.otherWithSuffix.replace("{{count}}",String(n)):a=o.other.replace("{{count}}",String(n)),t.addSuffix?t.comparison&&t.comparison>0?a+"後":a+"前":a},Jt={full:"y年M月d日EEEE",long:"y年M月d日",medium:"y/MM/dd",short:"y/MM/dd"},Et={full:"H時mm分ss秒 zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},Ft={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},At={date:s({formats:Jt,defaultWidth:"full"}),time:s({formats:Et,defaultWidth:"full"}),dateTime:s({formats:Ft,defaultWidth:"full"})},Lt={lastWeek:"先週のeeeeのp",yesterday:"昨日のp",today:"今日のp",tomorrow:"明日のp",nextWeek:"翌週のeeeeのp",other:"P"},Qt=(e,n,t,a)=>Lt[e],Ot={narrow:["BC","AC"],abbreviated:["紀元前","西暦"],wide:["紀元前","西暦"]},Yt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["第1四半期","第2四半期","第3四半期","第4四半期"]},Rt={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月"]},_t={narrow:["日","月","火","水","木","金","土"],short:["日","月","火","水","木","金","土"],abbreviated:["日","月","火","水","木","金","土"],wide:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},It={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:"深夜"}},Bt={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:"深夜"}},Gt=(e,n)=>{const t=Number(e);switch(String(n==null?void 0:n.unit)){case"year":return`${t}年`;case"quarter":return`第${t}四半期`;case"month":return`${t}月`;case"week":return`第${t}週`;case"date":return`${t}日`;case"hour":return`${t}時`;case"minute":return`${t}分`;case"second":return`${t}秒`;default:return`${t}`}},Ut={ordinalNumber:Gt,era:r({values:Ot,defaultWidth:"wide"}),quarter:r({values:Yt,defaultWidth:"wide",argumentCallback:e=>Number(e)-1}),month:r({values:Rt,defaultWidth:"wide"}),day:r({values:_t,defaultWidth:"wide"}),dayPeriod:r({values:It,defaultWidth:"wide",formattingValues:Bt,defaultFormattingWidth:"wide"})},Zt=/^第?\d+(年|四半期|月|週|日|時|分|秒)?/i,Kt=/\d+/i,ea={narrow:/^(B\.?C\.?|A\.?D\.?)/i,abbreviated:/^(紀元[前後]|西暦)/i,wide:/^(紀元[前後]|西暦)/i},ta={narrow:[/^B/i,/^A/i],any:[/^(紀元前)/i,/^(西暦|紀元後)/i]},aa={narrow:/^[1234]/i,abbreviated:/^Q[1234]/i,wide:/^第[1234一二三四1234]四半期/i},na={any:[/(1|一|1)/i,/(2|二|2)/i,/(3|三|3)/i,/(4|四|4)/i]},oa={narrow:/^([123456789]|1[012])/,abbreviated:/^([123456789]|1[012])月/i,wide:/^([123456789]|1[012])月/i},ra={any:[/^1\D/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},ia={narrow:/^[日月火水木金土]/,short:/^[日月火水木金土]/,abbreviated:/^[日月火水木金土]/,wide:/^[日月火水木金土]曜日/},sa={any:[/^日/,/^月/,/^火/,/^水/,/^木/,/^金/,/^土/]},da={any:/^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i},ma={any:{am:/^(A|午前)/i,pm:/^(P|午後)/i,midnight:/^深夜|真夜中/i,noon:/^正午/i,morning:/^朝/i,afternoon:/^午後/i,evening:/^夜/i,night:/^深夜/i}},ua={ordinalNumber:m({matchPattern:Zt,parsePattern:Kt,valueCallback:function(e){return parseInt(e,10)}}),era:i({matchPatterns:ea,defaultMatchWidth:"wide",parsePatterns:ta,defaultParseWidth:"any"}),quarter:i({matchPatterns:aa,defaultMatchWidth:"wide",parsePatterns:na,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:oa,defaultMatchWidth:"wide",parsePatterns:ra,defaultParseWidth:"any"}),day:i({matchPatterns:ia,defaultMatchWidth:"wide",parsePatterns:sa,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:da,defaultMatchWidth:"any",parsePatterns:ma,defaultParseWidth:"any"})},ca={code:"ja",formatDistance:qt,formatLong:At,formatRelative:Qt,localize:Ut,match:ua,options:{weekStartsOn:0,firstWeekContainsDate:1}},ha={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}}년"}},la=(e,n,t)=>{let a;const o=ha[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",n.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?a+" 후":a+" 전":a},fa={full:"y년 M월 d일 EEEE",long:"y년 M월 d일",medium:"y.MM.dd",short:"y.MM.dd"},ga={full:"a H시 mm분 ss초 zzzz",long:"a H:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},ba={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},wa={date:s({formats:fa,defaultWidth:"full"}),time:s({formats:ga,defaultWidth:"full"}),dateTime:s({formats:ba,defaultWidth:"full"})},Pa={lastWeek:"'지난' eeee p",yesterday:"'어제' p",today:"'오늘' p",tomorrow:"'내일' p",nextWeek:"'다음' eeee p",other:"P"},va=(e,n,t,a)=>Pa[e],pa={narrow:["BC","AD"],abbreviated:["BC","AD"],wide:["기원전","서기"]},Ma={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1분기","2분기","3분기","4분기"]},ya={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월"]},$a={narrow:["일","월","화","수","목","금","토"],short:["일","월","화","수","목","금","토"],abbreviated:["일","월","화","수","목","금","토"],wide:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},Wa={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:"밤"}},ja={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=(e,n)=>{const t=Number(e);switch(String(n==null?void 0:n.unit)){case"minute":case"second":return String(t);case"date":return t+"일";default:return t+"번째"}},xa={ordinalNumber:Da,era:r({values:pa,defaultWidth:"wide"}),quarter:r({values:Ma,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:ya,defaultWidth:"wide"}),day:r({values:$a,defaultWidth:"wide"}),dayPeriod:r({values:Wa,defaultWidth:"wide",formattingValues:ja,defaultFormattingWidth:"wide"})},ka=/^(\d+)(일|번째)?/i,Sa=/\d+/i,Ta={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},Ca={any:[/^(bc|기원전)/i,/^(ad|서기)/i]},za={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234]사?분기/i},Ha={any:[/1/i,/2/i,/3/i,/4/i]},Na={narrow:/^(1[012]|[123456789])/,abbreviated:/^(1[012]|[123456789])월/i,wide:/^(1[012]|[123456789])월/i},Xa={any:[/^1월?$/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},Va={narrow:/^[일월화수목금토]/,short:/^[일월화수목금토]/,abbreviated:/^[일월화수목금토]/,wide:/^[일월화수목금토]요일/},qa={any:[/^일/,/^월/,/^화/,/^수/,/^목/,/^금/,/^토/]},Ja={any:/^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i},Ea={any:{am:/^(am|오전)/i,pm:/^(pm|오후)/i,midnight:/^자정/i,noon:/^정오/i,morning:/^아침/i,afternoon:/^오후/i,evening:/^저녁/i,night:/^밤/i}},Fa={ordinalNumber:m({matchPattern:ka,parsePattern:Sa,valueCallback:e=>parseInt(e,10)}),era:i({matchPatterns:Ta,defaultMatchWidth:"wide",parsePatterns:Ca,defaultParseWidth:"any"}),quarter:i({matchPatterns:za,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:Na,defaultMatchWidth:"wide",parsePatterns:Xa,defaultParseWidth:"any"}),day:i({matchPatterns:Va,defaultMatchWidth:"wide",parsePatterns:qa,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:Ja,defaultMatchWidth:"any",parsePatterns:Ea,defaultParseWidth:"any"})},Aa={code:"ko",formatDistance:la,formatLong:wa,formatRelative:va,localize:xa,match:Fa,options:{weekStartsOn:0,firstWeekContainsDate:1}},La={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"}},Qa=(e,n,t)=>{let a;const o=La[e];return typeof o=="string"?a=o:n===1?a=o.one:a=o.other.replace("{{count}}",String(n)),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"daqui a "+a:"há "+a:a},Oa={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d 'de' MMM 'de' y",short:"dd/MM/y"},Ya={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},Ra={full:"{{date}} 'às' {{time}}",long:"{{date}} 'às' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},_a={date:s({formats:Oa,defaultWidth:"full"}),time:s({formats:Ya,defaultWidth:"full"}),dateTime:s({formats:Ra,defaultWidth:"full"})},Ia={lastWeek:e=>{const n=e.getDay();return"'"+(n===0||n===6?"último":"última")+"' eeee 'às' p"},yesterday:"'ontem às' p",today:"'hoje às' p",tomorrow:"'amanhã às' p",nextWeek:"eeee 'às' p",other:"P"},Ba=(e,n,t,a)=>{const o=Ia[e];return typeof o=="function"?o(n):o},Ga={narrow:["aC","dC"],abbreviated:["a.C.","d.C."],wide:["antes de Cristo","depois de Cristo"]},Ua={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},Za={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"]},Ka={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"]},en={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"}},tn={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"}},an=(e,n)=>Number(e)+"º",nn={ordinalNumber:an,era:r({values:Ga,defaultWidth:"wide"}),quarter:r({values:Ua,defaultWidth:"wide",argumentCallback:e=>e-1}),month:r({values:Za,defaultWidth:"wide"}),day:r({values:Ka,defaultWidth:"wide"}),dayPeriod:r({values:en,defaultWidth:"wide",formattingValues:tn,defaultFormattingWidth:"wide"})},on=/^(\d+)(º|ª)?/i,rn=/\d+/i,sn={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},dn={any:[/^ac/i,/^dc/i],wide:[/^(antes de cristo|antes da era comum)/i,/^(depois de cristo|era comum)/i]},mn={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º|ª)? trimestre/i},un={any:[/1/i,/2/i,/3/i,/4/i]},cn={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},hn={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]},ln={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},fn={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]},gn={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},bn={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}},wn={ordinalNumber:m({matchPattern:on,parsePattern:rn,valueCallback:e=>parseInt(e,10)}),era:i({matchPatterns:sn,defaultMatchWidth:"wide",parsePatterns:dn,defaultParseWidth:"any"}),quarter:i({matchPatterns:mn,defaultMatchWidth:"wide",parsePatterns:un,defaultParseWidth:"any",valueCallback:e=>e+1}),month:i({matchPatterns:cn,defaultMatchWidth:"wide",parsePatterns:hn,defaultParseWidth:"any"}),day:i({matchPatterns:ln,defaultMatchWidth:"wide",parsePatterns:fn,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:gn,defaultMatchWidth:"any",parsePatterns:bn,defaultParseWidth:"any"})},Pn={code:"pt",formatDistance:Qa,formatLong:_a,formatRelative:Ba,localize:nn,match:wn,options:{weekStartsOn:0,firstWeekContainsDate:4}},vn={en:g,zh:b,ja:ca,ko:Aa,es:rt,pt:Pn,de:ke,fr:Xt,ar:K};function pn(){const e=P(n=>n.locale);return vn[e]??g}function l(e){if(!e)return;const n=new Date(`${e}T00:00:00`);return Number.isNaN(n.getTime())?void 0:n}function f(e){const n=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${n}-${t}-${a}`}function jn({value:e,onChange:n,placeholder:t="Select date range"}){const a=pn(),o=e.from||e.to?{from:l(e.from),to:l(e.to)}:void 0;return u.jsxs(v,{children:[u.jsx(p,{render:u.jsxs(M,{type:"button",variant:"outline",size:"sm",className:"justify-start font-normal",children:[u.jsx($,{className:"size-4"}),e.from||e.to?`${e.from||"…"} ~ ${e.to||"…"}`:t]})}),u.jsx(y,{className:"w-auto p-0",align:"start",children:u.jsx(w,{locale:a,mode:"range",selected:o,onSelect:d=>{d&&n({from:d.from?f(d.from):e.from,to:d.to?f(d.to):e.to})},numberOfMonths:2})})]})}export{jn as D}; diff --git a/adminui/assets/debates-0wJDZ15Y.js b/adminui/assets/debates-0wJDZ15Y.js new file mode 100644 index 00000000..1eb45418 --- /dev/null +++ b/adminui/assets/debates-0wJDZ15Y.js @@ -0,0 +1 @@ +import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as A,cB as W,cA as E,n as v,aF as X,ca as y,aE as k,bl as $}from"./index-C-uFVPpg.js";import{B}from"./badge-Dhxp0jil.js";import{C as Y,a as Z}from"./card-BBIqLCR8.js";import{T as ee,d as se,e as z,c as T,a as ae,b as D}from"./table-BoLxzYJ7.js";import{T as te}from"./table-skeleton-fqjGRt14.js";import{E as ie}from"./empty-state-CCcgx4uH.js";import{P as ne}from"./pagination-bar-BuL5EI1J.js";import{D as H,a as V,d as L,e as I,b as J,c as re}from"./dialog-if7Fez9x.js";import{S as F,e as K,f as O,a as Q,c as R}from"./select-DJZwiot8.js";import{I as M}from"./input-Bp1SimRr.js";import{L as P}from"./label-DiZ0cGhf.js";import{T as G}from"./textarea-BhaIg3vS.js";import{P as le}from"./plus-FYsVFl-s.js";import{E as ce}from"./eye-BjIZjYLa.js";import{B as oe}from"./ban-D3I2e03r.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./chevron-left-C_tZtLI6.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";async function _(n,c){return $.send(n,{method:c==null?void 0:c.method,body:c==null?void 0:c.body})}function de(n){try{return new Date(n).toLocaleString()}catch{return n}}function U(n){switch(n){case"running":return"default";case"consensus":case"concluded":return"secondary";case"escalated":return"destructive";default:return"outline"}}function Ke(){var w,g,b,r,s;const{t:n}=A(),c=W(),[p,N]=x.useState(1),i=20,[a,m]=x.useState(!1),[u,C]=x.useState(null),o=E({queryKey:["ai-debates",p],queryFn:()=>_(`/ai/debates?page=${p}&page_size=${i}`),refetchInterval:t=>{var l;return(((l=t.state.data)==null?void 0:l.items)??[]).some(d=>d.status==="running")?3e3:!1}}),j=E({queryKey:["ai-debate",u],queryFn:()=>_(`/ai/debates/${u}`),enabled:!!u,refetchInterval:t=>{var l;return["running","finalizing"].includes(((l=t.state.data)==null?void 0:l.debate.status)??"")?3e3:!1}}),f=E({queryKey:["ai-agents"],queryFn:()=>$.admin.aiAgents.list({page:1,page_size:100})});function S(){c.invalidateQueries({queryKey:["ai-debates"]}),c.invalidateQueries({queryKey:["ai-debate",u]})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-lg font-semibold",children:n("aiDebates.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:n("aiDebates.subtitle")})]}),e.jsxs(v,{onClick:()=>m(!0),children:[e.jsx(le,{className:"size-4"})," ",n("aiDebates.new")]})]}),e.jsx(Y,{children:e.jsx(Z,{className:"p-0",children:o.isLoading?e.jsx(te,{cols:6}):e.jsxs(ee,{children:[e.jsx(se,{children:e.jsxs(z,{children:[e.jsx(T,{children:n("aiDebates.requirement")}),e.jsx(T,{children:n("aiDebates.status")}),e.jsx(T,{children:n("aiDebates.rounds")}),e.jsx(T,{children:n("aiDebates.disputes")}),e.jsx(T,{children:n("aiDebates.created")}),e.jsx(T,{className:"text-end",children:n("aiDebates.actions")})]})}),e.jsx(ae,{children:(((w=o.data)==null?void 0:w.items)??[]).length===0?e.jsx(z,{children:e.jsx(D,{colSpan:6,children:e.jsx(ie,{icon:X,title:n("aiDebates.noDebates"),description:n("aiDebates.emptyHint")})})}):(((g=o.data)==null?void 0:g.items)??[]).map(t=>{var l,d;return e.jsxs(z,{children:[e.jsx(D,{className:"max-w-[260px]",children:e.jsx("span",{className:"block truncate font-medium",children:t.requirement})}),e.jsx(D,{children:e.jsx(B,{variant:U(t.status),className:"font-mono text-xs",children:t.status})}),e.jsx(D,{className:"text-sm text-muted-foreground",children:t.rounds_done}),e.jsx(D,{className:"text-sm text-muted-foreground",children:((d=(l=t.ledger)==null?void 0:l.disputes)==null?void 0:d.length)??0}),e.jsx(D,{className:"text-sm text-muted-foreground",children:de(t.created_at)}),e.jsx(D,{className:"text-end",children:e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>C(t.id),title:n("aiDebates.view"),children:e.jsx(ce,{className:"size-4"})})})]},t.id)})})]})})}),e.jsx(ne,{page:p,totalPages:Math.ceil((((b=o.data)==null?void 0:b.total)??0)/i),total:((r=o.data)==null?void 0:r.total)??0,onPageChange:N}),e.jsx(me,{open:a,onOpenChange:m,agents:((s=f.data)==null?void 0:s.items)??[],onCreated:()=>{m(!1),S()}}),e.jsx(ue,{debateId:u,onClose:()=>C(null),query:j,invalidate:S})]})}function me({open:n,onOpenChange:c,agents:p,onCreated:N}){const{t:i}=A(),[a,m]=x.useState(""),[u,C]=x.useState(""),[o,j]=x.useState(""),[f,S]=x.useState("3"),[w,g]=x.useState(!1);async function b(){g(!0);try{await _("/ai/debates",{method:"POST",body:JSON.stringify({agent_a_id:a,agent_b_id:u,requirement:o,max_rounds:Number(f)||3})}),y.success(i("aiDebates.started")),N()}catch(r){y.error(r instanceof k?r.message:i("aiDebates.startFailed"))}finally{g(!1)}}return e.jsx(H,{open:n,onOpenChange:c,children:e.jsxs(V,{className:"sm:max-w-xl",children:[e.jsxs(L,{children:[e.jsx(I,{children:i("aiDebates.new")}),e.jsx(J,{children:i("aiDebates.subtitle")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(P,{children:i("aiDebates.proposer")}),e.jsxs(F,{value:a,onValueChange:r=>m(r??""),children:[e.jsx(K,{children:e.jsx(O,{})}),e.jsx(Q,{children:p.map(r=>e.jsx(R,{value:r.id,children:r.name},r.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(P,{children:i("aiDebates.reviewer")}),e.jsxs(F,{value:u,onValueChange:r=>C(r??""),children:[e.jsx(K,{children:e.jsx(O,{})}),e.jsx(Q,{children:p.filter(r=>r.id!==a).map(r=>e.jsx(R,{value:r.id,children:r.name},r.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(P,{children:i("aiDebates.requirement")}),e.jsx(G,{rows:5,value:o,onChange:r=>j(r.target.value),placeholder:i("aiDebates.requirementPlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(P,{children:i("aiDebates.maxRounds")}),e.jsx(M,{type:"number",min:1,max:5,value:f,onChange:r=>S(r.target.value)})]})]}),e.jsxs(re,{children:[e.jsx(v,{variant:"outline",onClick:()=>c(!1),children:i("common.cancel")}),e.jsx(v,{disabled:w||!a||!u||o.trim().length===0,onClick:b,children:i("aiDebates.start")})]})]})})}function ue({debateId:n,onClose:c,query:p,invalidate:N}){var g,b,r;const{t:i}=A(),a=(g=p.data)==null?void 0:g.debate,[m,u]=x.useState({}),[C,o]=x.useState(!1),j=((r=(b=a==null?void 0:a.ledger)==null?void 0:b.disputes)==null?void 0:r.filter(s=>s.status==="escalated"))??[];function f(s,t){u(l=>{const d=l[s]??{verdict:"",resolution:"",note:""};return{...l,[s]:{...d,...t}}})}async function S(){if(!n)return;const s=j.map(t=>{var l,d,q;return{dispute_id:t.id,verdict:((l=m[t.id])==null?void 0:l.verdict)??"",resolution:((d=m[t.id])==null?void 0:d.resolution)||null,note:((q=m[t.id])==null?void 0:q.note)||null}});if(s.some(t=>!t.verdict)){y.error(i("aiDebates.verdictHint"));return}o(!0);try{await _(`/ai/debates/${n}/verdicts`,{method:"POST",body:JSON.stringify({verdicts:s})}),y.success(i("aiDebates.verdictsSubmitted")),N()}catch(t){y.error(t instanceof k?t.message:i("aiDebates.verdictsFailed"))}finally{o(!1)}}async function w(){if(n)try{await _(`/ai/debates/${n}`,{method:"DELETE"}),y.success(i("aiDebates.cancelled")),N()}catch(s){y.error(s instanceof k?s.message:i("aiDebates.cancelFailed"))}}return e.jsx(H,{open:!!n,onOpenChange:s=>!s&&c(),children:e.jsxs(V,{className:"max-h-[85vh] max-w-3xl overflow-y-auto",children:[e.jsxs(L,{children:[e.jsxs(I,{className:"flex items-center gap-2",children:[e.jsx(B,{variant:U((a==null?void 0:a.status)??""),className:"font-mono text-xs",children:(a==null?void 0:a.status)??"-"}),n&&`${n.slice(0,8)}…`]}),e.jsx(J,{className:"whitespace-pre-wrap",children:a==null?void 0:a.requirement})]}),(a==null?void 0:a.status)==="running"&&e.jsxs(v,{variant:"outline",size:"sm",onClick:w,children:[e.jsx(oe,{className:"size-4"})," ",i("aiDebates.cancel")]}),(a==null?void 0:a.status)==="escalated"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:i("aiDebates.verdictHint")}),j.map(s=>{var l,d,q;const t=m[s.id]??{verdict:"",resolution:"",note:""};return e.jsxs("div",{className:"rounded-lg border p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{variant:"outline",className:"font-mono text-xs",children:s.id}),e.jsx("span",{className:"text-sm font-medium",children:s.title}),e.jsx(B,{variant:"secondary",className:"text-xs",children:s.severity})]}),((l=s.challenges)==null?void 0:l[0])&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:["B:",s.challenges[0].argument]}),((d=s.responses)==null?void 0:d[0])&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:["A:",s.responses[0].reasoning]}),((q=s.brief)==null?void 0:q.recommendation)&&e.jsxs("p",{className:"text-sm",children:["💡 ",s.brief.recommendation,s.brief.impact?`(${s.brief.impact})`:""]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:["side_a","side_b","custom"].map(h=>e.jsx(v,{type:"button",size:"sm",variant:t.verdict===h?"default":"outline",onClick:()=>f(s.id,{verdict:h}),children:i(h==="side_a"?"aiDebates.sideA":h==="side_b"?"aiDebates.sideB":"aiDebates.custom")},h))}),t.verdict==="custom"&&e.jsx(G,{rows:2,value:t.resolution,onChange:h=>f(s.id,{resolution:h.target.value}),placeholder:i("aiDebates.resolution")}),e.jsx(M,{value:t.note,onChange:h=>f(s.id,{note:h.target.value}),placeholder:i("aiDebates.note")})]},s.id)}),j.length>0&&e.jsx(v,{disabled:C||j.some(s=>{var t;return!((t=m[s.id])!=null&&t.verdict)}),onClick:S,children:i("aiDebates.submitVerdicts")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("h3",{className:"text-sm font-semibold",children:i("aiDebates.report")}),(a==null?void 0:a.status)==="consensus"?e.jsx("p",{className:"text-sm text-muted-foreground",children:i("aiDebates.consensus")}):a!=null&&a.report?e.jsx("pre",{className:"max-h-96 overflow-auto rounded-lg bg-muted p-3 text-xs whitespace-pre-wrap",children:a.report}):e.jsx("p",{className:"text-sm text-muted-foreground",children:i("aiDebates.noReport")})]})]})})}export{Ke as default}; diff --git a/adminui/assets/diagnostics-CwvJdmqM.js b/adminui/assets/diagnostics-CkEVl_O4.js similarity index 78% rename from adminui/assets/diagnostics-CwvJdmqM.js rename to adminui/assets/diagnostics-CkEVl_O4.js index df8ab829..a39a4bd5 100644 --- a/adminui/assets/diagnostics-CwvJdmqM.js +++ b/adminui/assets/diagnostics-CkEVl_O4.js @@ -1 +1 @@ -import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as S,cz as _,n as f,aR as B,bk as T}from"./index-DFelzBez.js";import{B as g}from"./badge-BvrzcoWP.js";import{T as F,b as H,c as N,a as k}from"./tabs-I7xZXZiG.js";import{D as Q,a as U,d as M,e as A}from"./dialog-Bx55NyOm.js";import{I as G}from"./input-Bx5u8hTS.js";import{S as K,e as q,f as P,a as $,c as b}from"./select-Dc4_9PNt.js";import{T as W,d as X,e as J,c as o,a as Y,b as m}from"./table-gihdE9_j.js";import{T as w}from"./table-skeleton-BtLTAVzI.js";import{E as Z}from"./empty-state-D0NvGCXa.js";import{R as ee}from"./refresh-cw-CFztQf6i.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";const L=["ingest_doc","ingest_image","ask","search","chunk_edit","index_faq","publish_wiki","distill","rebuild_vector"],V=["running","ok","failed","degraded"];function y(a){switch(a){case"ok":return"default";case"degraded":return"secondary";case"failed":return"destructive";default:return"outline"}}function Ne(){var D,O;const{t:a}=S(),[r,u]=x.useState("all"),[n,i]=x.useState("all"),[l,c]=x.useState(""),[d,h]=x.useState(1),[t,C]=x.useState(null),E=20,j=_({queryKey:["kb-runs",r,n,l,d],queryFn:()=>{const s=new URLSearchParams({page:String(d),page_size:String(E)});return r!=="all"&&s.set("kind",r),n!=="all"&&s.set("status",n),l.trim()&&s.set("doc_id",l.trim()),T.send(`/admin/kb/runs?${s.toString()}`)}}),R=((D=j.data)==null?void 0:D.total)??0,v=Math.max(1,Math.ceil(R/E)),z=x.useMemo(()=>{var s;return((s=j.data)==null?void 0:s.items)??[]},[j.data]);return e.jsxs(F,{defaultValue:"runs",className:"space-y-4",children:[e.jsxs(H,{children:[e.jsx(N,{value:"runs",children:a("kb.diag.runs")}),e.jsx(N,{value:"scan",children:a("kb.diag.checkup")}),e.jsx(N,{value:"health",children:a("kb.diag.health")})]}),e.jsxs(k,{value:"runs",className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(K,{value:r,onValueChange:s=>{u(s??"all"),h(1)},items:{all:a("kb.diag.allKinds"),...Object.fromEntries(L.map(s=>[s,s]))},children:[e.jsx(q,{className:"w-40",children:e.jsx(P,{})}),e.jsxs($,{children:[e.jsx(b,{value:"all",children:a("kb.diag.allKinds")}),L.map(s=>e.jsx(b,{value:s,children:s},s))]})]}),e.jsxs(K,{value:n,onValueChange:s=>{i(s??"all"),h(1)},items:{all:a("kb.diag.allStatuses"),...Object.fromEntries(V.map(s=>[s,s]))},children:[e.jsx(q,{className:"w-32",children:e.jsx(P,{})}),e.jsxs($,{children:[e.jsx(b,{value:"all",children:a("kb.diag.allStatuses")}),V.map(s=>e.jsx(b,{value:s,children:s},s))]})]}),e.jsx(G,{className:"w-56",placeholder:a("kb.diag.docFilter"),value:l,onChange:s=>{c(s.target.value),h(1)}}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a("kb.diag.total",{n:R})})]}),j.isLoading?e.jsx(w,{rows:8}):z.length===0?e.jsx(Z,{title:a("kb.diag.noRuns"),description:a("kb.diag.noRunsDesc")}):e.jsxs(W,{children:[e.jsx(X,{children:e.jsxs(J,{children:[e.jsx(o,{children:a("kb.diag.kind")}),e.jsx(o,{children:a("kb.diag.status")}),e.jsx(o,{children:a("kb.diag.trigger")}),e.jsx(o,{children:a("kb.diag.attempt")}),e.jsx(o,{children:a("kb.diag.latency")}),e.jsx(o,{children:a("kb.diag.error")}),e.jsx(o,{children:a("kb.diag.created")})]})}),e.jsx(Y,{children:z.map(s=>{var p;return e.jsxs(J,{className:"cursor-pointer",onClick:()=>C(s),children:[e.jsx(m,{className:"font-medium",children:s.kind}),e.jsx(m,{children:e.jsx(g,{variant:y(s.status),children:s.status})}),e.jsx(m,{className:"text-muted-foreground",children:s.trigger_src}),e.jsx(m,{children:s.attempt}),e.jsx(m,{className:"text-muted-foreground",children:s.latency_ms!=null?`${s.latency_ms} ms`:"-"}),e.jsx(m,{className:"max-w-64 truncate text-muted-foreground",children:s.error??"-"}),e.jsx(m,{className:"whitespace-nowrap text-muted-foreground",children:(p=s.created_at)==null?void 0:p.replace("T"," ").slice(0,19)})]},s.id)})})]}),v>1&&e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(f,{variant:"outline",size:"sm",disabled:d<=1,onClick:()=>h(s=>s-1),children:a("kb.diag.prev")}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[d," / ",v]}),e.jsx(f,{variant:"outline",size:"sm",disabled:d>=v,onClick:()=>h(s=>s+1),children:a("kb.diag.next")})]})]}),e.jsx(k,{value:"scan",children:e.jsx(se,{})}),e.jsx(k,{value:"health",children:e.jsx(ae,{})}),e.jsx(Q,{open:!!t,onOpenChange:s=>!s&&C(null),children:e.jsxs(U,{className:"max-h-[85vh] overflow-y-auto sm:max-w-2xl",children:[e.jsx(M,{children:e.jsxs(A,{children:[a("kb.diag.detail")," · ",t==null?void 0:t.kind]})}),t&&e.jsxs("div",{className:"space-y-4 text-sm",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.status"),":"]}),e.jsx(g,{variant:y(t.status),children:t.status})]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.attempt"),":"]}),t.attempt]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.latency"),":"]}),t.latency_ms!=null?`${t.latency_ms} ms`:"-"]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.trigger"),":"]}),t.trigger_src]}),e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"text-muted-foreground",children:"doc_id:"}),t.doc_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"text-muted-foreground",children:"kb_id:"}),t.kb_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.agent"),":"]}),t.agent_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.session"),":"]}),t.session_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"text-muted-foreground",children:"job_id:"}),t.job_id??"-"]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.created"),":"]}),(O=t.created_at)==null?void 0:O.replace("T"," ").slice(0,19)]})]}),t.error&&e.jsx("div",{className:"rounded-md border border-destructive/40 bg-destructive/10 p-2 font-mono text-xs break-all",children:t.error}),t.config_snapshot&&e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 font-medium",children:a("kb.diag.configSnapshot")}),e.jsx("pre",{className:"overflow-x-auto rounded-md bg-muted p-2 text-xs",children:JSON.stringify(t.config_snapshot,null,2)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 font-medium",children:a("kb.diag.stages")}),(t.stages??[]).length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:a("kb.diag.noStages")}):e.jsx("div",{className:"space-y-2",children:(t.stages??[]).map((s,p)=>{var I;return e.jsxs("div",{className:"rounded-md border p-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:s.stage}),e.jsx(g,{variant:y(s.status),children:s.status}),s.latency_ms!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s.latency_ms," ms"]})]}),((I=s.error)==null?void 0:I.message)&&e.jsx("div",{className:"mt-1 font-mono text-xs text-destructive break-all",children:s.error.message}),s.summary&&Object.keys(s.summary).length>0&&e.jsx("pre",{className:"mt-1 overflow-x-auto text-xs text-muted-foreground",children:JSON.stringify(s.summary,null,2)})]},p)})})]})]})]})})]})}function se(){var n;const{t:a}=S(),r=_({queryKey:["kb-diagnostics"],queryFn:()=>T.send("/admin/kb/diagnostics")});if(r.isLoading)return e.jsx(w,{rows:6});if(r.isError)return e.jsx("p",{className:"text-sm text-destructive",children:r.error.message});const u=((n=r.data)==null?void 0:n.rules)??[];return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{size:"sm",variant:"outline",onClick:()=>r.refetch(),children:[e.jsx(ee,{className:"size-4"}),a("common.refresh")]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a("kb.diag.checkupIntro")})]}),u.map(i=>e.jsxs("div",{className:`rounded-md border p-3 ${i.count>0?"border-destructive/40":""}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{variant:i.count>0?"destructive":"secondary",children:i.count}),e.jsx("span",{className:"text-sm font-medium",children:a(`${i.title}`)}),e.jsx("span",{className:"text-xs text-muted-foreground",children:i.id})]}),i.items.length>0&&e.jsx("div",{className:"mt-2 space-y-1",children:i.items.slice(0,8).map((l,c)=>e.jsx("div",{className:"rounded border px-2 py-1 font-mono text-xs break-all",children:JSON.stringify(l)},c))})]},i.id))]})}function ae(){var l;const{t:a}=S(),[r,u]=x.useState(!1),n=_({queryKey:["kb-health",r],queryFn:()=>T.send(`/admin/kb/health${r?"?probe=embed":""}`)});if(n.isLoading)return e.jsx(w,{rows:4});if(n.isError)return e.jsx("p",{className:"text-sm text-destructive",children:n.error.message});const i=Object.entries(((l=n.data)==null?void 0:l.components)??{});return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{size:"sm",variant:"outline",onClick:()=>u(c=>!c),children:[e.jsx(B,{className:"size-4"}),a("kb.diag.embedProbe")]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a("kb.diag.healthIntro")})]}),i.map(([c,d])=>e.jsxs("div",{className:"rounded-md border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-sm",children:c}),e.jsx(g,{variant:d.status==="up"?"default":d.status==="down"?"destructive":"secondary",children:String(d.status??"-")})]}),e.jsx("pre",{className:"mt-1 overflow-x-auto text-xs text-muted-foreground",children:JSON.stringify(d,null,2)})]},c))]})}export{Ne as default}; +import{f as x,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as S,cA as _,n as f,aS as F,bl as T}from"./index-C-uFVPpg.js";import{B as g}from"./badge-Dhxp0jil.js";import{T as H,b as J,c as N,a as k}from"./tabs-DbCrogTH.js";import{D as Q,a as U,d as M,e as A}from"./dialog-if7Fez9x.js";import{I as G}from"./input-Bp1SimRr.js";import{S as I,e as q,f as P,a as $,c as b}from"./select-DJZwiot8.js";import{T as W,d as X,e as L,c as o,a as Y,b as m}from"./table-BoLxzYJ7.js";import{T as w}from"./table-skeleton-fqjGRt14.js";import{E as Z}from"./empty-state-CCcgx4uH.js";import{R as ee}from"./refresh-cw-6xbzwvFF.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";const V=["ingest_doc","ingest_image","ask","search","chunk_edit","index_faq","publish_wiki","distill","rebuild_vector"],B=["running","ok","failed","degraded"];function y(a){switch(a){case"ok":return"default";case"degraded":return"secondary";case"failed":return"destructive";default:return"outline"}}function Ne(){var O,R;const{t:a}=S(),[r,u]=x.useState("all"),[n,i]=x.useState("all"),[l,c]=x.useState(""),[d,h]=x.useState(1),[t,C]=x.useState(null),E=20,j=_({queryKey:["kb-runs",r,n,l,d],queryFn:()=>{const s=new URLSearchParams({page:String(d),page_size:String(E)});return r!=="all"&&s.set("kind",r),n!=="all"&&s.set("status",n),l.trim()&&s.set("doc_id",l.trim()),T.send(`/admin/kb/runs?${s.toString()}`)}}),D=((O=j.data)==null?void 0:O.total)??0,v=Math.max(1,Math.ceil(D/E)),K=x.useMemo(()=>{var s;return((s=j.data)==null?void 0:s.items)??[]},[j.data]);return e.jsxs(H,{defaultValue:"runs",className:"space-y-4",children:[e.jsxs(J,{children:[e.jsx(N,{value:"runs",children:a("kb.diag.runs")}),e.jsx(N,{value:"scan",children:a("kb.diag.checkup")}),e.jsx(N,{value:"health",children:a("kb.diag.health")})]}),e.jsxs(k,{value:"runs",className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(I,{value:r,onValueChange:s=>{u(s??"all"),h(1)},items:{all:a("kb.diag.allKinds"),...Object.fromEntries(V.map(s=>[s,s]))},children:[e.jsx(q,{className:"w-40",children:e.jsx(P,{})}),e.jsxs($,{children:[e.jsx(b,{value:"all",children:a("kb.diag.allKinds")}),V.map(s=>e.jsx(b,{value:s,children:s},s))]})]}),e.jsxs(I,{value:n,onValueChange:s=>{i(s??"all"),h(1)},items:{all:a("kb.diag.allStatuses"),...Object.fromEntries(B.map(s=>[s,s]))},children:[e.jsx(q,{className:"w-32",children:e.jsx(P,{})}),e.jsxs($,{children:[e.jsx(b,{value:"all",children:a("kb.diag.allStatuses")}),B.map(s=>e.jsx(b,{value:s,children:s},s))]})]}),e.jsx(G,{className:"w-56",placeholder:a("kb.diag.docFilter"),value:l,onChange:s=>{c(s.target.value),h(1)}}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a("kb.diag.total",{n:D})})]}),j.isLoading?e.jsx(w,{rows:8}):K.length===0?e.jsx(Z,{title:a("kb.diag.noRuns"),description:a("kb.diag.noRunsDesc")}):e.jsxs(W,{children:[e.jsx(X,{children:e.jsxs(L,{children:[e.jsx(o,{children:a("kb.diag.kind")}),e.jsx(o,{children:a("kb.diag.status")}),e.jsx(o,{children:a("kb.diag.trigger")}),e.jsx(o,{children:a("kb.diag.attempt")}),e.jsx(o,{children:a("kb.diag.latency")}),e.jsx(o,{children:a("kb.diag.error")}),e.jsx(o,{children:a("kb.diag.created")})]})}),e.jsx(Y,{children:K.map(s=>{var p;return e.jsxs(L,{className:"cursor-pointer",onClick:()=>C(s),children:[e.jsx(m,{className:"font-medium",children:s.kind}),e.jsx(m,{children:e.jsx(g,{variant:y(s.status),children:s.status})}),e.jsx(m,{className:"text-muted-foreground",children:s.trigger_src}),e.jsx(m,{children:s.attempt}),e.jsx(m,{className:"text-muted-foreground",children:s.latency_ms!=null?`${s.latency_ms} ms`:"-"}),e.jsx(m,{className:"max-w-64 truncate text-muted-foreground",children:s.error??"-"}),e.jsx(m,{className:"whitespace-nowrap text-muted-foreground",children:(p=s.created_at)==null?void 0:p.replace("T"," ").slice(0,19)})]},s.id)})})]}),v>1&&e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(f,{variant:"outline",size:"sm",disabled:d<=1,onClick:()=>h(s=>s-1),children:a("kb.diag.prev")}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[d," / ",v]}),e.jsx(f,{variant:"outline",size:"sm",disabled:d>=v,onClick:()=>h(s=>s+1),children:a("kb.diag.next")})]})]}),e.jsx(k,{value:"scan",children:e.jsx(se,{})}),e.jsx(k,{value:"health",children:e.jsx(ae,{})}),e.jsx(Q,{open:!!t,onOpenChange:s=>!s&&C(null),children:e.jsxs(U,{className:"max-h-[85vh] overflow-y-auto sm:max-w-2xl",children:[e.jsx(M,{children:e.jsxs(A,{children:[a("kb.diag.detail")," · ",t==null?void 0:t.kind]})}),t&&e.jsxs("div",{className:"space-y-4 text-sm",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.status"),":"]}),e.jsx(g,{variant:y(t.status),children:t.status})]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.attempt"),":"]}),t.attempt]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.latency"),":"]}),t.latency_ms!=null?`${t.latency_ms} ms`:"-"]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.trigger"),":"]}),t.trigger_src]}),e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"text-muted-foreground",children:"doc_id:"}),t.doc_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"text-muted-foreground",children:"kb_id:"}),t.kb_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.agent"),":"]}),t.agent_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.session"),":"]}),t.session_id??"-"]}),e.jsxs("div",{className:"truncate",children:[e.jsx("span",{className:"text-muted-foreground",children:"job_id:"}),t.job_id??"-"]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[a("kb.diag.created"),":"]}),(R=t.created_at)==null?void 0:R.replace("T"," ").slice(0,19)]})]}),t.error&&e.jsx("div",{className:"rounded-md border border-destructive/40 bg-destructive/10 p-2 font-mono text-xs break-all",children:t.error}),t.config_snapshot&&e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 font-medium",children:a("kb.diag.configSnapshot")}),e.jsx("pre",{className:"overflow-x-auto rounded-md bg-muted p-2 text-xs",children:JSON.stringify(t.config_snapshot,null,2)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 font-medium",children:a("kb.diag.stages")}),(t.stages??[]).length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:a("kb.diag.noStages")}):e.jsx("div",{className:"space-y-2",children:(t.stages??[]).map((s,p)=>{var z;return e.jsxs("div",{className:"rounded-md border p-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:s.stage}),e.jsx(g,{variant:y(s.status),children:s.status}),s.latency_ms!=null&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s.latency_ms," ms"]})]}),((z=s.error)==null?void 0:z.message)&&e.jsx("div",{className:"mt-1 font-mono text-xs text-destructive break-all",children:s.error.message}),s.summary&&Object.keys(s.summary).length>0&&e.jsx("pre",{className:"mt-1 overflow-x-auto text-xs text-muted-foreground",children:JSON.stringify(s.summary,null,2)})]},p)})})]})]})]})})]})}function se(){var n;const{t:a}=S(),r=_({queryKey:["kb-diagnostics"],queryFn:()=>T.send("/admin/kb/diagnostics")});if(r.isLoading)return e.jsx(w,{rows:6});if(r.isError)return e.jsx("p",{className:"text-sm text-destructive",children:r.error.message});const u=((n=r.data)==null?void 0:n.rules)??[];return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{size:"sm",variant:"outline",onClick:()=>r.refetch(),children:[e.jsx(ee,{className:"size-4"}),a("common.refresh")]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a("kb.diag.checkupIntro")})]}),u.map(i=>e.jsxs("div",{className:`rounded-md border p-3 ${i.count>0?"border-destructive/40":""}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{variant:i.count>0?"destructive":"secondary",children:i.count}),e.jsx("span",{className:"text-sm font-medium",children:a(`${i.title}`)}),e.jsx("span",{className:"text-xs text-muted-foreground",children:i.id})]}),i.items.length>0&&e.jsx("div",{className:"mt-2 space-y-1",children:i.items.slice(0,8).map((l,c)=>e.jsx("div",{className:"rounded border px-2 py-1 font-mono text-xs break-all",children:JSON.stringify(l)},c))})]},i.id))]})}function ae(){var l;const{t:a}=S(),[r,u]=x.useState(!1),n=_({queryKey:["kb-health",r],queryFn:()=>T.send(`/admin/kb/health${r?"?probe=embed":""}`)});if(n.isLoading)return e.jsx(w,{rows:4});if(n.isError)return e.jsx("p",{className:"text-sm text-destructive",children:n.error.message});const i=Object.entries(((l=n.data)==null?void 0:l.components)??{});return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{size:"sm",variant:"outline",onClick:()=>u(c=>!c),children:[e.jsx(F,{className:"size-4"}),a("kb.diag.embedProbe")]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a("kb.diag.healthIntro")})]}),i.map(([c,d])=>e.jsxs("div",{className:"rounded-md border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-sm",children:c}),e.jsx(g,{variant:d.status==="up"?"default":d.status==="down"?"destructive":"secondary",children:String(d.status??"-")})]}),e.jsx("pre",{className:"mt-1 overflow-x-auto text-xs text-muted-foreground",children:JSON.stringify(d,null,2)})]},c))]})}export{Ne as default}; diff --git a/adminui/assets/dialog-Bx55NyOm.js b/adminui/assets/dialog-if7Fez9x.js similarity index 69% rename from adminui/assets/dialog-Bx55NyOm.js rename to adminui/assets/dialog-if7Fez9x.js index e6f9eacd..428f0277 100644 --- a/adminui/assets/dialog-Bx55NyOm.js +++ b/adminui/assets/dialog-if7Fez9x.js @@ -1 +1 @@ -import{f,j as t}from"./vendor-react-j_G0Dyx0.js";import{cm as w,bA as M,ch as k,cN as O,ci as S,cj as z,cx as $,cE as F,C as A,cb as G,R as _,P as H,N as x,bd as K,n as m,bl as s,S as L,O as Q,Q as U,M as X}from"./index-DFelzBez.js";const q=f.forwardRef(function(a,r){const{render:n,className:W,style:Y,disabled:g=!1,nativeButton:D=!0,id:b,payload:j,handle:l,...h}=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(b),c=o.useState("floatingRootContext"),u=o.useState("isOpenedByTrigger",i),T=o.useState("triggerPopupId",i),p=f.useRef(null),{registerTrigger:v,isMountedByThisTrigger:N}=O(i,p,o,{payload:j}),{getButtonProps:R,buttonRef:y}=S({disabled:g,native:D}),P=z(c,{enabled:c!=null}),C=$(()=>o.select("open"),I=>{o.set("openMethod",I)}),E={disabled:g,open:u},B=o.useState("triggerProps",N);return F("button",a,{state:E,ref:[y,r,v,p],props:[P.reference,B,C,{[A]:"",id:i,"aria-haspopup":"dialog","aria-expanded":u,"aria-controls":T},h,R],stateAttributesMapping:G})});function te({...e}){return t.jsx(_,{"data-slot":"dialog",...e})}function ae({...e}){return t.jsx(q,{"data-slot":"dialog-trigger",...e})}function J({...e}){return t.jsx(U,{"data-slot":"dialog-portal",...e})}function V({className:e,...a}){return t.jsx(X,{"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(J,{children:[t.jsx(V,{}),t.jsxs(H,{"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(K,{}),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(L,{"data-slot":"dialog-title",className:s("font-heading text-base leading-none font-medium",e),...a})}function ie({className:e,...a}){return t.jsx(Q,{"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{cn as w,bB as k,ci as M,cO as O,cj as S,ck as z,cy as F,cF as $,C as G,cc as _,R as A,P as H,N as x,be as K,n as m,bm as s,S as L,O as Q,Q as U,M as X}from"./index-C-uFVPpg.js";const q=f.forwardRef(function(a,r){const{render:n,className:W,style:Y,disabled:g=!1,nativeButton:D=!0,id:b,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(k(79));const i=M(b),c=o.useState("floatingRootContext"),u=o.useState("isOpenedByTrigger",i),h=o.useState("triggerPopupId",i),p=f.useRef(null),{registerTrigger:v,isMountedByThisTrigger:y}=O(i,p,o,{payload:j}),{getButtonProps:R,buttonRef:N}=S({disabled:g,native:D}),P=z(c,{enabled:c!=null}),B=F(()=>o.select("open"),I=>{o.set("openMethod",I)}),C={disabled:g,open:u},E=o.useState("triggerProps",y);return $("button",a,{state:C,ref:[N,r,v,p],props:[P.reference,E,B,{[G]:"",id:i,"aria-haspopup":"dialog","aria-expanded":u,"aria-controls":h},T,R],stateAttributesMapping:_})});function te({...e}){return t.jsx(A,{"data-slot":"dialog",...e})}function ae({...e}){return t.jsx(q,{"data-slot":"dialog-trigger",...e})}function J({...e}){return t.jsx(U,{"data-slot":"dialog-portal",...e})}function V({className:e,...a}){return t.jsx(X,{"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(J,{children:[t.jsx(V,{}),t.jsxs(H,{"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(K,{}),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(L,{"data-slot":"dialog-title",className:s("font-heading text-base leading-none font-medium",e),...a})}function ie({className:e,...a}){return t.jsx(Q,{"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/docs-BwIG57iY.js b/adminui/assets/docs-Cy4sieSw.js similarity index 73% rename from adminui/assets/docs-BwIG57iY.js rename to adminui/assets/docs-Cy4sieSw.js index 42ee44d0..d95093eb 100644 --- a/adminui/assets/docs-BwIG57iY.js +++ b/adminui/assets/docs-Cy4sieSw.js @@ -1,4 +1,4 @@ -import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as pe,cJ as Se,cA as ve,cF as Ce,cz as L,n as C,aU as ae,v as we,al as he,T as Te,_ as De,U as _e,V as b,i as ze,aj as Me,ad as Pe,c9 as m,bk as x}from"./index-DFelzBez.js";import{u as w}from"./useMutation-DgRiHz67.js";import{B as q}from"./badge-BvrzcoWP.js";import{C as $e,a as Ee}from"./card-D3QxRGt-.js";import{C as ie}from"./checkbox-ZiPbJKLR.js";import{D as re,a as le,d as de,e as oe,c as Oe}from"./dialog-Bx55NyOm.js";import{L as ce}from"./label-DeKRRvpz.js";import{T as Fe}from"./textarea-Daa6n4S-.js";import{I as Ie}from"./input-Bx5u8hTS.js";import{S as Ae,e as Le,f as qe,a as Ke,c as me}from"./select-Dc4_9PNt.js";import{T as Re,d as Qe,e as ue,c as o,a as Be,b as c}from"./table-gihdE9_j.js";import{T as xe}from"./table-skeleton-BtLTAVzI.js";import{E as He}from"./empty-state-D0NvGCXa.js";import{C as Ue}from"./confirm-delete-dialog-QxeOrQYk.js";import{P as Ve}from"./pagination-bar-DD_HkQGa.js";import{u as Je}from"./use-url-state-BBO3na5E.js";import{E as We}from"./ellipsis-vertical-UHYLUh-c.js";import{T as Ge}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./useLabelableId-D6-89JTk.js";import"./chevron-up-BHyyZ98X.js";import"./chevron-left-CbJIXgY2.js";/** +import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bq as pe,cK as Se,cB as ve,cG as Ce,cA as q,n as C,aV as ae,v as we,al as he,T as Te,_ as De,U as _e,V as b,i as ze,aj as Me,ad as Pe,ca as m,bl as x}from"./index-C-uFVPpg.js";import{u as w}from"./useMutation-BlIm5cor.js";import{B as L}from"./badge-Dhxp0jil.js";import{C as $e,a as Ee}from"./card-BBIqLCR8.js";import{C as ie}from"./checkbox-CP5mLBLk.js";import{D as re,a as le,d as de,e as oe,c as Oe}from"./dialog-if7Fez9x.js";import{L as ce}from"./label-DiZ0cGhf.js";import{T as Fe}from"./textarea-BhaIg3vS.js";import{I as Ie}from"./input-Bp1SimRr.js";import{S as Ae,e as qe,f as Le,a as Ke,c as me}from"./select-DJZwiot8.js";import{T as Re,d as Be,e as ue,c as o,a as Qe,b as c}from"./table-BoLxzYJ7.js";import{T as xe}from"./table-skeleton-fqjGRt14.js";import{E as He}from"./empty-state-CCcgx4uH.js";import{C as Ve}from"./confirm-delete-dialog-4HgrRwRm.js";import{P as Ue}from"./pagination-bar-BuL5EI1J.js";import{u as We}from"./use-url-state-BBO3na5E.js";import{E as Ge}from"./ellipsis-vertical-B-dHvJs4.js";import{T as Je}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./useLabelableId-qP3If8Bd.js";import"./chevron-up-hicU2AmB.js";import"./chevron-left-C_tZtLI6.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. @@ -8,6 +8,6 @@ import{f as j,j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as pe,cJ as Se,c * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ze=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]],es=pe("rotate-cw",Ze),ss={ready:"default",pending:"secondary",parsing:"secondary",chunking:"secondary",embedding:"secondary",indexing:"secondary",stale:"outline",failed:"destructive"},R=new Set(["pending","parsing","chunking","embedding","indexing"]);function K(t){return t?new Date(t).toLocaleString():"-"}function ge(t,l){const i=`kb.status.${l}`,p=t(i);return p===i?l:p}const Q=["parsing","chunking","embedding","indexing"];function ts(t){if(t<0||Number.isNaN(t))return"-";if(t<6e4)return`${(t/1e3).toFixed(1)}s`;const l=Math.floor(t/6e4),i=Math.round(t%6e4/1e3);return`${l}m${i.toString().padStart(2,"0")}s`}function ns(t){const l=new Date(t.start).getTime();return(t.end?new Date(t.end).getTime():Date.now())-l}function as({doc:t,t:l}){const i=t.steps??{};return!(Object.keys(i).length>0)&&t.status==="pending"?null:e.jsx("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:Q.map(u=>{const r=i[u],y=!!(r!=null&&r.end),n=!y&&(t.status===u||!r&&is(t,i,u)),h=t.status==="failed"&&r&&!r.end,T=y?e.jsx("span",{className:"text-green-600 dark:text-green-400",children:"✓"}):h?e.jsx("span",{className:"text-destructive",children:"✗"}):n?e.jsx(he,{className:"size-3 animate-spin text-muted-foreground"}):e.jsx("span",{className:"text-muted-foreground/50",children:"○"});return e.jsxs("span",{className:`inline-flex items-center gap-1 text-xs ${y||n||h?"text-foreground":"text-muted-foreground/60"}`,children:[T,ge(l,u),(y||n||h)&&r&&e.jsx("span",{className:"text-muted-foreground",children:ts(ns(r))})]},u)})})}function is(t,l,i){if(!R.has(t.status))return!1;const p=Q.indexOf(i);return Q.slice(0,p).every(u=>{var r;return(r=l[u])==null?void 0:r.end})}function Es(){var Z,ee,se,te,ne;const{t}=Se(),l=ve(),i=Ce(),{get:p,getInt:u,set:r}=Je(),n=p("kb_id")||null,h=u("page"),T=20,B=j.useRef(null),[je,z]=j.useState(!1),[M,H]=j.useState(""),[P,U]=j.useState(""),[d,V]=j.useState(null),[k,$]=j.useState(null),[N,f]=j.useState(new Set),J=L({queryKey:["kb-kbs"],queryFn:()=>x.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),E=L({queryKey:["kb-docs",n,h],queryFn:()=>x.send("/admin/kb/documents",{query:{...n?{kb_id:n}:{},page:String(h),page_size:String(T)}}),refetchInterval:s=>{var g;return(((g=s.state.data)==null?void 0:g.items)??[]).some(v=>R.has(v.status))?2e3:!1}}),O=L({queryKey:["kb-doc-jobs",d==null?void 0:d.id],enabled:!!d,queryFn:()=>x.send(`/admin/kb/documents/${d==null?void 0:d.id}/jobs`)}),D=()=>{l.invalidateQueries({queryKey:["kb-docs"]}),l.invalidateQueries({queryKey:["kb-stats"]})},ke=w({mutationFn:async s=>{const a=new FormData;return a.append("kb_id",String(n)),a.append("file",s),x.send("/admin/kb/documents",{method:"POST",body:a})},onSuccess:()=>{m.success(t("kb.uploadOk")),D()},onError:s=>m.error(`${t("kb.uploadFailed")}:${s.message}`)}),W=w({mutationFn:async()=>x.send("/admin/kb/documents/online",{method:"POST",body:{kb_id:n,title:M,markdown:P}}),onSuccess:()=>{m.success(t("kb.onlineOk")),z(!1),H(""),U(""),D()},onError:s=>m.error(`${t("kb.onlineFailed")}:${s.message}`)}),G=w({mutationFn:async s=>x.send(`/admin/kb/documents/${s}/reparse`,{method:"POST"}),onSuccess:()=>{m.success(t("kb.reparse")),D()},onError:s=>m.error(`${t("kb.reparseFailed")}:${s.message}`)}),F=w({mutationFn:async s=>x.send(`/admin/kb/documents/${s}`,{method:"DELETE"}),onSuccess:()=>{m.success(t("kb.deleted")),$(null),D()},onError:s=>m.error(`${t("common.failedToDelete")}:${s.message}`)}),_=w({mutationFn:async s=>x.send("/admin/kb/wiki/distill",{method:"POST",body:{kb_id:n,doc_ids:s}}),onSuccess:(s,a)=>{m.success(t("kb.distillQueued",{count:a.length})),f(new Set)},onError:s=>m.error(s.message)}),I=((Z=J.data)==null?void 0:Z.items)??[],fe=new Map(I.map(s=>[String(s.id),s.name])),A=((ee=E.data)==null?void 0:ee.items)??[],X=((se=E.data)==null?void 0:se.total)??0,be=Math.max(1,Math.ceil(X/T)),S=A.filter(s=>s.status==="ready"),Y=S.length>0&&S.every(s=>N.has(s.id));function ye(s,a){f(g=>{const v=new Set(g);return a?v.add(s):v.delete(s),v})}function Ne(s){f(new Set),r({kb_id:s==="all"?void 0:s,page:1})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs(Ae,{value:n??"all",onValueChange:s=>{s&&Ne(s)},items:[{value:"all",label:t("kb.allKbs")},...I.map(s=>({value:String(s.id),label:s.name}))],children:[e.jsx(Le,{className:"w-56",children:e.jsx(qe,{placeholder:t("kb.selectPlaceholder")})}),e.jsxs(Ke,{children:[e.jsx(me,{value:"all",children:t("kb.allKbs")}),I.map(s=>e.jsx(me,{value:String(s.id),children:s.name},s.id))]})]}),n&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{ref:B,type:"file",className:"hidden",accept:".md,.txt,.html,.csv,.pdf,.doc,.docx,.ppt,.pptx,.xls,.xlsx,.epub,.json,.rtf,.odt",onChange:s=>{var g;const a=(g=s.target.files)==null?void 0:g[0];a&&ke.mutate(a),s.target.value=""}}),e.jsxs(C,{size:"sm",variant:"outline",onClick:()=>{var s;return(s=B.current)==null?void 0:s.click()},children:[e.jsx(Ye,{className:"size-4"}),t("kb.upload")]}),e.jsxs(C,{size:"sm",variant:"outline",disabled:S.length===0,title:t("kb.distillWikiHint"),onClick:()=>{f(Y?new Set:new Set(S.map(s=>s.id)))},children:[e.jsx(ae,{className:"size-4"}),t("kb.distillWiki")]}),N.size>0&&e.jsx(C,{size:"sm",disabled:_.isPending,onClick:()=>_.mutate(Array.from(N)),children:t("kb.distillSubmit",{count:N.size})}),e.jsx(C,{size:"sm",onClick:()=>z(!0),children:t("kb.online")})]})]}),J.isLoading?e.jsx(xe,{rows:5}):E.isLoading?e.jsx(xe,{rows:5}):A.length===0?e.jsx(He,{title:t("kb.noDocs"),description:`${t("kb.noDocsDesc")}`}):e.jsx($e,{children:e.jsx(Ee,{className:"p-0",children:e.jsxs(Re,{children:[e.jsx(Qe,{children:e.jsxs(ue,{children:[n&&e.jsx(o,{className:"w-10",children:e.jsx(ie,{checked:Y,onCheckedChange:s=>{f(s?new Set(S.map(a=>a.id)):new Set)},"aria-label":t("common.all")})}),!n&&e.jsx(o,{children:t("layout.kb")}),e.jsx(o,{children:t("kb.title")}),e.jsx(o,{children:t("kb.source")}),e.jsx(o,{children:t("kb.state")}),e.jsx(o,{children:t("kb.progress")}),e.jsx(o,{children:t("kb.pagesCol")}),e.jsx(o,{children:t("kb.imagesCol")}),e.jsx(o,{children:t("kb.chunkCount")}),e.jsx(o,{children:t("kb.updatedAt")}),e.jsx(o,{className:"text-end",children:t("common.actions")})]})}),e.jsx(Be,{children:A.map(s=>e.jsxs(ue,{children:[n&&e.jsx(c,{children:s.status==="ready"&&e.jsx(ie,{checked:N.has(s.id),onCheckedChange:a=>ye(s.id,!!a),"aria-label":s.title})}),!n&&e.jsx(c,{className:"whitespace-nowrap text-muted-foreground",children:fe.get(s.kb_id)??"-"}),e.jsxs(c,{className:"font-medium",children:[s.title,s.status==="failed"&&s.error&&e.jsx("div",{className:"max-w-96 truncate text-xs text-destructive",title:s.error,children:s.error})]}),e.jsx(c,{children:e.jsx(q,{variant:"outline",children:s.source})}),e.jsx(c,{children:e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[R.has(s.status)&&(s.status==="pending"?e.jsx(we,{className:"size-3 text-muted-foreground"}):e.jsx(he,{className:"size-3 animate-spin text-muted-foreground"})),e.jsx(q,{variant:ss[s.status]??"secondary",children:ge(t,s.status)})]})}),e.jsx(c,{children:e.jsx(as,{doc:s,t})}),e.jsx(c,{className:"text-muted-foreground",children:s.pages??"-"}),e.jsx(c,{className:"text-muted-foreground",children:s.images}),e.jsx(c,{children:s.chunk_count}),e.jsx(c,{className:"text-xs text-muted-foreground",children:K(s.updated_at)}),e.jsx(c,{className:"text-end",children:e.jsxs(Te,{children:[e.jsx(De,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(We,{className:"size-4"})}),e.jsxs(_e,{align:"end",children:[e.jsxs(b,{onClick:()=>i.push(`/kb/reader?doc_id=${s.id}`),children:[e.jsx(ze,{className:"size-4 me-2"}),t("kb.reader")]}),e.jsxs(b,{onClick:()=>i.push(`/kb/chunks?doc_id=${s.id}`),children:[e.jsx(Me,{className:"size-4 me-2"}),t("kb.viewChunks")]}),e.jsxs(b,{onClick:()=>V(s),children:[e.jsx(Pe,{className:"size-4 me-2"}),t("kb.jobHistory")]}),n&&s.status==="ready"&&e.jsxs(b,{onClick:()=>_.mutate([s.id]),disabled:_.isPending,children:[e.jsx(ae,{className:"size-4 me-2"}),t("kb.distillWiki")]}),e.jsxs(b,{onClick:()=>G.mutate(s.id),disabled:G.isPending,children:[e.jsx(es,{className:"size-4 me-2"}),t("kb.reparseAction")]}),e.jsxs(b,{className:"text-destructive",onClick:()=>$(s),disabled:F.isPending,children:[e.jsx(Ge,{className:"size-4 me-2"}),t("common.delete")]})]})]})})]},s.id))})]})})}),e.jsx(Ve,{page:h,totalPages:be,total:X,onPageChange:s=>r({page:s})}),e.jsx(re,{open:!!d,onOpenChange:s=>{s||V(null)},children:e.jsxs(le,{className:"max-w-2xl",children:[e.jsx(de,{children:e.jsxs(oe,{children:[t("kb.jobHistory"),":",d==null?void 0:d.title]})}),O.isLoading?e.jsx("div",{className:"space-y-2",children:Array.from({length:3}).map((s,a)=>e.jsx("div",{className:"h-12 animate-pulse rounded bg-muted"},a))}):(((te=O.data)==null?void 0:te.items)??[]).length===0?e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:t("kb.noJobs")}):e.jsx("div",{className:"max-h-96 space-y-3 overflow-y-auto",children:(((ne=O.data)==null?void 0:ne.items)??[]).map(s=>e.jsxs("div",{className:"rounded-lg border p-3 text-sm",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(q,{variant:s.status==="completed"?"default":s.status==="dead"||s.status==="failed"?"destructive":"secondary",children:s.status}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t("kb.jobAttempts"),":",s.attempts,"/",s.max_attempts]})]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:K(s.updated_at)})]}),s.error&&e.jsx("p",{className:"mt-2 break-all text-xs text-destructive",children:s.error}),e.jsxs("p",{className:"mt-1 text-xs text-muted-foreground",children:[t("posts.createdCol"),":",K(s.created_at)]})]},s.id))})]})}),e.jsx(re,{open:je,onOpenChange:z,children:e.jsxs(le,{className:"max-w-2xl",children:[e.jsx(de,{children:e.jsxs(oe,{children:[t("kb.online")," Markdown"]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(ce,{children:t("kb.mdTitle")}),e.jsx(Ie,{value:M,onChange:s=>H(s.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(ce,{children:t("kb.mdContent")}),e.jsx(Fe,{rows:12,value:P,onChange:s=>U(s.target.value),placeholder:`# 安装指南 + */const Ze=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]],es=pe("rotate-cw",Ze),ss={ready:"default",pending:"secondary",parsing:"secondary",chunking:"secondary",embedding:"secondary",indexing:"secondary",stale:"outline",failed:"destructive"},R=new Set(["pending","parsing","chunking","embedding","indexing"]);function K(t){return t?new Date(t).toLocaleString():"-"}function ge(t,l){const i=`kb.status.${l}`,p=t(i);return p===i?l:p}const B=["parsing","chunking","embedding","indexing"];function ts(t){if(t<0||Number.isNaN(t))return"-";if(t<6e4)return`${(t/1e3).toFixed(1)}s`;const l=Math.floor(t/6e4),i=Math.round(t%6e4/1e3);return`${l}m${i.toString().padStart(2,"0")}s`}function ns(t){const l=new Date(t.start).getTime();return(t.end?new Date(t.end).getTime():Date.now())-l}function as({doc:t,t:l}){const i=t.steps??{};return!(Object.keys(i).length>0)&&t.status==="pending"?null:e.jsx("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:B.map(u=>{const r=i[u],y=!!(r!=null&&r.end),n=!y&&(t.status===u||!r&&is(t,i,u)),h=t.status==="failed"&&r&&!r.end,T=y?e.jsx("span",{className:"text-green-600 dark:text-green-400",children:"✓"}):h?e.jsx("span",{className:"text-destructive",children:"✗"}):n?e.jsx(he,{className:"size-3 animate-spin text-muted-foreground"}):e.jsx("span",{className:"text-muted-foreground/50",children:"○"});return e.jsxs("span",{className:`inline-flex items-center gap-1 text-xs ${y||n||h?"text-foreground":"text-muted-foreground/60"}`,children:[T,ge(l,u),(y||n||h)&&r&&e.jsx("span",{className:"text-muted-foreground",children:ts(ns(r))})]},u)})})}function is(t,l,i){if(!R.has(t.status))return!1;const p=B.indexOf(i);return B.slice(0,p).every(u=>{var r;return(r=l[u])==null?void 0:r.end})}function Es(){var Z,ee,se,te,ne;const{t}=Se(),l=ve(),i=Ce(),{get:p,getInt:u,set:r}=We(),n=p("kb_id")||null,h=u("page"),T=20,Q=j.useRef(null),[je,z]=j.useState(!1),[M,H]=j.useState(""),[P,V]=j.useState(""),[d,U]=j.useState(null),[k,$]=j.useState(null),[N,f]=j.useState(new Set),W=q({queryKey:["kb-kbs"],queryFn:()=>x.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),E=q({queryKey:["kb-docs",n,h],queryFn:()=>x.send("/admin/kb/documents",{query:{...n?{kb_id:n}:{},page:String(h),page_size:String(T)}}),refetchInterval:s=>{var g;return(((g=s.state.data)==null?void 0:g.items)??[]).some(v=>R.has(v.status))?2e3:!1}}),O=q({queryKey:["kb-doc-jobs",d==null?void 0:d.id],enabled:!!d,queryFn:()=>x.send(`/admin/kb/documents/${d==null?void 0:d.id}/jobs`)}),D=()=>{l.invalidateQueries({queryKey:["kb-docs"]}),l.invalidateQueries({queryKey:["kb-stats"]})},ke=w({mutationFn:async s=>{const a=new FormData;return a.append("kb_id",String(n)),a.append("file",s),x.send("/admin/kb/documents",{method:"POST",body:a})},onSuccess:()=>{m.success(t("kb.uploadOk")),D()},onError:s=>m.error(`${t("kb.uploadFailed")}:${s.message}`)}),G=w({mutationFn:async()=>x.send("/admin/kb/documents/online",{method:"POST",body:{kb_id:n,title:M,markdown:P}}),onSuccess:()=>{m.success(t("kb.onlineOk")),z(!1),H(""),V(""),D()},onError:s=>m.error(`${t("kb.onlineFailed")}:${s.message}`)}),J=w({mutationFn:async s=>x.send(`/admin/kb/documents/${s}/reparse`,{method:"POST"}),onSuccess:()=>{m.success(t("kb.reparse")),D()},onError:s=>m.error(`${t("kb.reparseFailed")}:${s.message}`)}),F=w({mutationFn:async s=>x.send(`/admin/kb/documents/${s}`,{method:"DELETE"}),onSuccess:()=>{m.success(t("kb.deleted")),$(null),D()},onError:s=>m.error(`${t("common.failedToDelete")}:${s.message}`)}),_=w({mutationFn:async s=>x.send("/admin/kb/wiki/distill",{method:"POST",body:{kb_id:n,doc_ids:s}}),onSuccess:(s,a)=>{m.success(t("kb.distillQueued",{count:a.length})),f(new Set)},onError:s=>m.error(s.message)}),I=((Z=W.data)==null?void 0:Z.items)??[],fe=new Map(I.map(s=>[String(s.id),s.name])),A=((ee=E.data)==null?void 0:ee.items)??[],X=((se=E.data)==null?void 0:se.total)??0,be=Math.max(1,Math.ceil(X/T)),S=A.filter(s=>s.status==="ready"),Y=S.length>0&&S.every(s=>N.has(s.id));function ye(s,a){f(g=>{const v=new Set(g);return a?v.add(s):v.delete(s),v})}function Ne(s){f(new Set),r({kb_id:s==="all"?void 0:s,page:1})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs(Ae,{value:n??"all",onValueChange:s=>{s&&Ne(s)},items:[{value:"all",label:t("kb.allKbs")},...I.map(s=>({value:String(s.id),label:s.name}))],children:[e.jsx(qe,{className:"w-56",children:e.jsx(Le,{placeholder:t("kb.selectPlaceholder")})}),e.jsxs(Ke,{children:[e.jsx(me,{value:"all",children:t("kb.allKbs")}),I.map(s=>e.jsx(me,{value:String(s.id),children:s.name},s.id))]})]}),n&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{ref:Q,type:"file",className:"hidden",accept:".md,.txt,.html,.csv,.pdf,.doc,.docx,.ppt,.pptx,.xls,.xlsx,.epub,.json,.rtf,.odt",onChange:s=>{var g;const a=(g=s.target.files)==null?void 0:g[0];a&&ke.mutate(a),s.target.value=""}}),e.jsxs(C,{size:"sm",variant:"outline",onClick:()=>{var s;return(s=Q.current)==null?void 0:s.click()},children:[e.jsx(Ye,{className:"size-4"}),t("kb.upload")]}),e.jsxs(C,{size:"sm",variant:"outline",disabled:S.length===0,title:t("kb.distillWikiHint"),onClick:()=>{f(Y?new Set:new Set(S.map(s=>s.id)))},children:[e.jsx(ae,{className:"size-4"}),t("kb.distillWiki")]}),N.size>0&&e.jsx(C,{size:"sm",disabled:_.isPending,onClick:()=>_.mutate(Array.from(N)),children:t("kb.distillSubmit",{count:N.size})}),e.jsx(C,{size:"sm",onClick:()=>z(!0),children:t("kb.online")})]})]}),W.isLoading?e.jsx(xe,{rows:5}):E.isLoading?e.jsx(xe,{rows:5}):A.length===0?e.jsx(He,{title:t("kb.noDocs"),description:`${t("kb.noDocsDesc")}`}):e.jsx($e,{children:e.jsx(Ee,{className:"p-0",children:e.jsxs(Re,{children:[e.jsx(Be,{children:e.jsxs(ue,{children:[n&&e.jsx(o,{className:"w-10",children:e.jsx(ie,{checked:Y,onCheckedChange:s=>{f(s?new Set(S.map(a=>a.id)):new Set)},"aria-label":t("common.all")})}),!n&&e.jsx(o,{children:t("layout.kb")}),e.jsx(o,{children:t("kb.title")}),e.jsx(o,{children:t("kb.source")}),e.jsx(o,{children:t("kb.state")}),e.jsx(o,{children:t("kb.progress")}),e.jsx(o,{children:t("kb.pagesCol")}),e.jsx(o,{children:t("kb.imagesCol")}),e.jsx(o,{children:t("kb.chunkCount")}),e.jsx(o,{children:t("kb.updatedAt")}),e.jsx(o,{className:"text-end",children:t("common.actions")})]})}),e.jsx(Qe,{children:A.map(s=>e.jsxs(ue,{children:[n&&e.jsx(c,{children:s.status==="ready"&&e.jsx(ie,{checked:N.has(s.id),onCheckedChange:a=>ye(s.id,!!a),"aria-label":s.title})}),!n&&e.jsx(c,{className:"whitespace-nowrap text-muted-foreground",children:fe.get(s.kb_id)??"-"}),e.jsxs(c,{className:"font-medium",children:[s.title,s.status==="failed"&&s.error&&e.jsx("div",{className:"max-w-96 truncate text-xs text-destructive",title:s.error,children:s.error})]}),e.jsx(c,{children:e.jsx(L,{variant:"outline",children:s.source})}),e.jsx(c,{children:e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[R.has(s.status)&&(s.status==="pending"?e.jsx(we,{className:"size-3 text-muted-foreground"}):e.jsx(he,{className:"size-3 animate-spin text-muted-foreground"})),e.jsx(L,{variant:ss[s.status]??"secondary",children:ge(t,s.status)})]})}),e.jsx(c,{children:e.jsx(as,{doc:s,t})}),e.jsx(c,{className:"text-muted-foreground",children:s.pages??"-"}),e.jsx(c,{className:"text-muted-foreground",children:s.images}),e.jsx(c,{children:s.chunk_count}),e.jsx(c,{className:"text-xs text-muted-foreground",children:K(s.updated_at)}),e.jsx(c,{className:"text-end",children:e.jsxs(Te,{children:[e.jsx(De,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Ge,{className:"size-4"})}),e.jsxs(_e,{align:"end",children:[e.jsxs(b,{onClick:()=>i.push(`/kb/reader?doc_id=${s.id}`),children:[e.jsx(ze,{className:"size-4 me-2"}),t("kb.reader")]}),e.jsxs(b,{onClick:()=>i.push(`/kb/chunks?doc_id=${s.id}`),children:[e.jsx(Me,{className:"size-4 me-2"}),t("kb.viewChunks")]}),e.jsxs(b,{onClick:()=>U(s),children:[e.jsx(Pe,{className:"size-4 me-2"}),t("kb.jobHistory")]}),n&&s.status==="ready"&&e.jsxs(b,{onClick:()=>_.mutate([s.id]),disabled:_.isPending,children:[e.jsx(ae,{className:"size-4 me-2"}),t("kb.distillWiki")]}),e.jsxs(b,{onClick:()=>J.mutate(s.id),disabled:J.isPending,children:[e.jsx(es,{className:"size-4 me-2"}),t("kb.reparseAction")]}),e.jsxs(b,{className:"text-destructive",onClick:()=>$(s),disabled:F.isPending,children:[e.jsx(Je,{className:"size-4 me-2"}),t("common.delete")]})]})]})})]},s.id))})]})})}),e.jsx(Ue,{page:h,totalPages:be,total:X,onPageChange:s=>r({page:s})}),e.jsx(re,{open:!!d,onOpenChange:s=>{s||U(null)},children:e.jsxs(le,{className:"max-w-2xl",children:[e.jsx(de,{children:e.jsxs(oe,{children:[t("kb.jobHistory"),":",d==null?void 0:d.title]})}),O.isLoading?e.jsx("div",{className:"space-y-2",children:Array.from({length:3}).map((s,a)=>e.jsx("div",{className:"h-12 animate-pulse rounded bg-muted"},a))}):(((te=O.data)==null?void 0:te.items)??[]).length===0?e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:t("kb.noJobs")}):e.jsx("div",{className:"max-h-96 space-y-3 overflow-y-auto",children:(((ne=O.data)==null?void 0:ne.items)??[]).map(s=>e.jsxs("div",{className:"rounded-lg border p-3 text-sm",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(L,{variant:s.status==="completed"?"default":s.status==="dead"||s.status==="failed"?"destructive":"secondary",children:s.status}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[t("kb.jobAttempts"),":",s.attempts,"/",s.max_attempts]})]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:K(s.updated_at)})]}),s.error&&e.jsx("p",{className:"mt-2 break-all text-xs text-destructive",children:s.error}),e.jsxs("p",{className:"mt-1 text-xs text-muted-foreground",children:[t("posts.createdCol"),":",K(s.created_at)]})]},s.id))})]})}),e.jsx(re,{open:je,onOpenChange:z,children:e.jsxs(le,{className:"max-w-2xl",children:[e.jsx(de,{children:e.jsxs(oe,{children:[t("kb.online")," Markdown"]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(ce,{children:t("kb.mdTitle")}),e.jsx(Ie,{value:M,onChange:s=>H(s.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(ce,{children:t("kb.mdContent")}),e.jsx(Fe,{rows:12,value:P,onChange:s=>V(s.target.value),placeholder:`# 安装指南 -内容…`})]})]}),e.jsx(Oe,{children:e.jsx(C,{size:"sm",disabled:!M.trim()||!P.trim()||W.isPending,onClick:()=>W.mutate(),children:t("kb.ask")})})]})}),e.jsx(Ue,{open:!!k,onOpenChange:s=>{s||$(null)},name:(k==null?void 0:k.title)??"",pending:F.isPending,onConfirm:()=>{k&&F.mutate(k.id)}})]})}export{Es as default}; +内容…`})]})]}),e.jsx(Oe,{children:e.jsx(C,{size:"sm",disabled:!M.trim()||!P.trim()||G.isPending,onClick:()=>G.mutate(),children:t("kb.ask")})})]})}),e.jsx(Ve,{open:!!k,onOpenChange:s=>{s||$(null)},name:(k==null?void 0:k.title)??"",pending:F.isPending,onConfirm:()=>{k&&F.mutate(k.id)}})]})}export{Es as default}; diff --git a/adminui/assets/dollar-sign-DoWHiaN9.js b/adminui/assets/dollar-sign-T34glauG.js similarity index 88% rename from adminui/assets/dollar-sign-DoWHiaN9.js rename to adminui/assets/dollar-sign-T34glauG.js index f619a698..ff243b9a 100644 --- a/adminui/assets/dollar-sign-DoWHiaN9.js +++ b/adminui/assets/dollar-sign-T34glauG.js @@ -1,4 +1,4 @@ -import{bp as o}from"./index-DFelzBez.js";/** +import{bq as o}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/download-DA3qByua.js b/adminui/assets/download-DAp88Hv9.js similarity index 88% rename from adminui/assets/download-DA3qByua.js rename to adminui/assets/download-DAp88Hv9.js index aa77a0f3..5f3e021c 100644 --- a/adminui/assets/download-DA3qByua.js +++ b/adminui/assets/download-DAp88Hv9.js @@ -1,4 +1,4 @@ -import{bp as o}from"./index-DFelzBez.js";/** +import{bq as o}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/ellipsis-vertical-UHYLUh-c.js b/adminui/assets/ellipsis-vertical-B-dHvJs4.js similarity index 88% rename from adminui/assets/ellipsis-vertical-UHYLUh-c.js rename to adminui/assets/ellipsis-vertical-B-dHvJs4.js index f5a7a121..3579b60d 100644 --- a/adminui/assets/ellipsis-vertical-UHYLUh-c.js +++ b/adminui/assets/ellipsis-vertical-B-dHvJs4.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/empty-state-D0NvGCXa.js b/adminui/assets/empty-state-CCcgx4uH.js similarity index 78% rename from adminui/assets/empty-state-D0NvGCXa.js rename to adminui/assets/empty-state-CCcgx4uH.js index 339047e4..273429f7 100644 --- a/adminui/assets/empty-state-D0NvGCXa.js +++ b/adminui/assets/empty-state-CCcgx4uH.js @@ -1,6 +1,6 @@ -import{j as e}from"./vendor-react-j_G0Dyx0.js";import{bp as l,n as r,bl as a}from"./index-DFelzBez.js";/** +import{j as e}from"./vendor-react-j_G0Dyx0.js";import{bq as r,n as l,bm as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const i=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],m=l("inbox",i);function u({icon:n=m,title:o,description:t,action:s,className:c}){return e.jsxs("div",{className:a("flex flex-col items-center gap-3 py-8 text-muted-foreground",c),children:[e.jsx("div",{className:"flex size-12 items-center justify-center rounded-full bg-muted",children:e.jsx(n,{className:"size-5"})}),e.jsxs("div",{className:"text-center space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:o}),t&&e.jsx("p",{className:"text-xs text-muted-foreground",children:t})]}),s&&e.jsx(r,{size:"sm",onClick:s.onClick,children:s.label})]})}export{u as E}; + */const i=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],m=r("inbox",i);function u({icon:n=m,title:o,description:t,action:s,className:c}){return e.jsxs("div",{className:a("flex flex-col items-center gap-3 py-8 text-muted-foreground",c),children:[e.jsx("div",{className:"flex size-12 items-center justify-center rounded-full bg-muted",children:e.jsx(n,{className:"size-5"})}),e.jsxs("div",{className:"text-center space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:o}),t&&e.jsx("p",{className:"text-xs text-muted-foreground",children:t})]}),s&&e.jsx(l,{size:"sm",onClick:s.onClick,children:s.label})]})}export{u as E}; diff --git a/adminui/assets/engines-Dkf3iWcQ.js b/adminui/assets/engines-BgDeXEmX.js similarity index 70% rename from adminui/assets/engines-Dkf3iWcQ.js rename to adminui/assets/engines-BgDeXEmX.js index b4f81279..c324040b 100644 --- a/adminui/assets/engines-Dkf3iWcQ.js +++ b/adminui/assets/engines-BgDeXEmX.js @@ -1 +1 @@ -import{f as N,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as S,cA as T,cz as F,J as k,s as M,T as q,_ as z,U as B,V as L,n as y,c9 as g,aE as v,bk as x}from"./index-DFelzBez.js";import{u as C}from"./useMutation-DgRiHz67.js";import{B as p}from"./badge-BvrzcoWP.js";import{C as U,a as H}from"./card-D3QxRGt-.js";import{D as I,a as K,d as Q,e as R,b as A,c as J}from"./dialog-Bx55NyOm.js";import{I as u}from"./input-Bx5u8hTS.js";import{L as h}from"./label-DeKRRvpz.js";import{S as O}from"./switch-DLTIF0BW.js";import{T as V,d as $,e as w,c as n,a as G,b as c}from"./table-gihdE9_j.js";import{T as W}from"./table-skeleton-BtLTAVzI.js";import{E as X}from"./empty-state-D0NvGCXa.js";import{E as Y}from"./ellipsis-vertical-UHYLUh-c.js";import{P as Z}from"./pencil-BgXbFsNu.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";function be(){var b;const{t:a}=S(),D=T(),[i,t]=N.useState(null),[o,l]=N.useState({price_per_page:"",price_per_call:"",cost_per_page:""}),j=F({queryKey:["docparse-engines"],queryFn:()=>x.send("/admin/docparse/engines")}),_=()=>D.invalidateQueries({queryKey:["docparse-engines"]}),d=C({mutationFn:({name:s,enabled:r})=>x.send(`/admin/docparse/engines/${s}`,{method:"PUT",body:{enabled:r}}),onSuccess:_,onError:s=>g.error(s instanceof v?s.message:a("docparse.failedToSave"))}),m=C({mutationFn:()=>x.send(`/admin/docparse/engines/${i==null?void 0:i.engine_name}`,{method:"PUT",body:{price_per_page:Number(o.price_per_page)||0,price_per_call:Number(o.price_per_call)||0,cost_per_page:Number(o.cost_per_page)||0}}),onSuccess:()=>{g.success(a("docparse.engineUpdated")),_(),t(null)},onError:s=>g.error(s instanceof v?s.message:a("docparse.failedToSave"))});function P(s){t(s),l({price_per_page:String(s.price_per_page),price_per_call:String(s.price_per_call),cost_per_page:String(s.cost_per_page)})}const f=((b=j.data)==null?void 0:b.items)??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsx(U,{children:e.jsx(H,{className:"p-0",children:j.isLoading?e.jsx(W,{cols:8}):f.length===0?e.jsx("div",{className:"p-6",children:e.jsx(X,{icon:k,title:a("docparse.noEngines")})}):e.jsxs(V,{children:[e.jsx($,{children:e.jsxs(w,{children:[e.jsx(n,{children:a("docparse.engineName")}),e.jsx(n,{className:"w-28",children:a("docparse.category")}),e.jsx(n,{className:"w-24",children:a("docparse.enabled")}),e.jsx(n,{className:"w-32",children:a("docparse.pricePerPage")}),e.jsx(n,{className:"w-32",children:a("docparse.pricePerCall")}),e.jsx(n,{className:"w-32",children:a("docparse.costPerPage")}),e.jsx(n,{className:"w-28",children:a("docparse.registered")}),e.jsx(n,{className:"w-40",children:a("docparse.updatedAt")}),e.jsx(n,{className:"text-end w-20",children:a("common.actions")})]})}),e.jsx(G,{children:f.map(s=>{var r;return e.jsxs(w,{children:[e.jsx(c,{className:"font-mono text-sm",children:s.engine_name}),e.jsx(c,{children:s.category==="ocr"?e.jsx(p,{variant:"secondary",children:a("docparse.categoryOcr")}):e.jsx(p,{variant:"outline",children:a("docparse.categoryDocument")})}),e.jsx(c,{children:e.jsx(O,{checked:s.enabled,disabled:d.isPending&&((r=d.variables)==null?void 0:r.name)===s.engine_name,onCheckedChange:E=>d.mutate({name:s.engine_name,enabled:E})})}),e.jsx(c,{className:"font-mono text-xs tabular-nums",children:s.price_per_page}),e.jsx(c,{className:"font-mono text-xs tabular-nums",children:s.price_per_call}),e.jsx(c,{className:"font-mono text-xs tabular-nums",children:s.cost_per_page}),e.jsx(c,{children:s.registered?e.jsxs(p,{variant:"outline",className:"gap-1 text-green-600",children:[e.jsx(M,{className:"size-3"}),a("docparse.registered")]}):e.jsx(p,{variant:"secondary",children:a("docparse.notRegistered")})}),e.jsx(c,{className:"whitespace-nowrap font-mono text-xs",children:s.updated_at?new Date(s.updated_at).toLocaleString():"—"}),e.jsx(c,{className:"text-end",children:e.jsxs(q,{children:[e.jsx(z,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Y,{className:"size-4"})}),e.jsx(B,{align:"end",children:e.jsxs(L,{onClick:()=>P(s),children:[e.jsx(Z,{className:"size-4 me-2"}),a("common.edit")]})})]})})]},s.engine_name)})})]})})}),e.jsx(I,{open:!!i,onOpenChange:s=>{s||t(null)},children:e.jsxs(K,{className:"sm:max-w-md",children:[e.jsxs(Q,{children:[e.jsx(R,{children:a("docparse.editEngine")}),e.jsx(A,{children:a("docparse.editEngineDesc",{name:(i==null?void 0:i.engine_name)??""})})]}),e.jsxs("form",{onSubmit:s=>{s.preventDefault(),m.mutate()},className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"dp-ppp",children:a("docparse.pricePerPage")}),e.jsx(u,{id:"dp-ppp",type:"number",value:o.price_per_page,onChange:s=>l(r=>({...r,price_per_page:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"dp-ppc",children:a("docparse.pricePerCall")}),e.jsx(u,{id:"dp-ppc",type:"number",value:o.price_per_call,onChange:s=>l(r=>({...r,price_per_call:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"dp-cpp",children:a("docparse.costPerPage")}),e.jsx(u,{id:"dp-cpp",type:"number",value:o.cost_per_page,onChange:s=>l(r=>({...r,cost_per_page:s.target.value}))})]}),e.jsxs(J,{children:[e.jsx(y,{type:"button",variant:"outline",onClick:()=>t(null),children:a("common.cancel")}),e.jsx(y,{type:"submit",disabled:m.isPending,children:m.isPending?a("common.saving"):a("common.save")})]})]})]})})]})}export{be as default}; +import{f as N,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as S,cB as T,cA as F,J as M,s as k,T as q,_ as B,U as K,V as L,n as y,ca as g,aE as v,bl as x}from"./index-C-uFVPpg.js";import{u as C}from"./useMutation-BlIm5cor.js";import{B as p}from"./badge-Dhxp0jil.js";import{C as U,a as z}from"./card-BBIqLCR8.js";import{D as H,a as I,d as Q,e as R,b as A,c as O}from"./dialog-if7Fez9x.js";import{I as u}from"./input-Bp1SimRr.js";import{L as h}from"./label-DiZ0cGhf.js";import{S as V}from"./switch-DoovYEIg.js";import{T as $,d as J,e as w,c as n,a as G,b as c}from"./table-BoLxzYJ7.js";import{T as W}from"./table-skeleton-fqjGRt14.js";import{E as X}from"./empty-state-CCcgx4uH.js";import{E as Y}from"./ellipsis-vertical-B-dHvJs4.js";import{P as Z}from"./pencil-xelQXmMG.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";function be(){var b;const{t:a}=S(),D=T(),[i,t]=N.useState(null),[o,l]=N.useState({price_per_page:"",price_per_call:"",cost_per_page:""}),j=F({queryKey:["docparse-engines"],queryFn:()=>x.send("/admin/docparse/engines")}),_=()=>D.invalidateQueries({queryKey:["docparse-engines"]}),d=C({mutationFn:({name:s,enabled:r})=>x.send(`/admin/docparse/engines/${s}`,{method:"PUT",body:{enabled:r}}),onSuccess:_,onError:s=>g.error(s instanceof v?s.message:a("docparse.failedToSave"))}),m=C({mutationFn:()=>x.send(`/admin/docparse/engines/${i==null?void 0:i.engine_name}`,{method:"PUT",body:{price_per_page:Number(o.price_per_page)||0,price_per_call:Number(o.price_per_call)||0,cost_per_page:Number(o.cost_per_page)||0}}),onSuccess:()=>{g.success(a("docparse.engineUpdated")),_(),t(null)},onError:s=>g.error(s instanceof v?s.message:a("docparse.failedToSave"))});function P(s){t(s),l({price_per_page:String(s.price_per_page),price_per_call:String(s.price_per_call),cost_per_page:String(s.cost_per_page)})}const f=((b=j.data)==null?void 0:b.items)??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsx(U,{children:e.jsx(z,{className:"p-0",children:j.isLoading?e.jsx(W,{cols:8}):f.length===0?e.jsx("div",{className:"p-6",children:e.jsx(X,{icon:M,title:a("docparse.noEngines")})}):e.jsxs($,{children:[e.jsx(J,{children:e.jsxs(w,{children:[e.jsx(n,{children:a("docparse.engineName")}),e.jsx(n,{className:"w-28",children:a("docparse.category")}),e.jsx(n,{className:"w-24",children:a("docparse.enabled")}),e.jsx(n,{className:"w-32",children:a("docparse.pricePerPage")}),e.jsx(n,{className:"w-32",children:a("docparse.pricePerCall")}),e.jsx(n,{className:"w-32",children:a("docparse.costPerPage")}),e.jsx(n,{className:"w-28",children:a("docparse.registered")}),e.jsx(n,{className:"w-40",children:a("docparse.updatedAt")}),e.jsx(n,{className:"text-end w-20",children:a("common.actions")})]})}),e.jsx(G,{children:f.map(s=>{var r;return e.jsxs(w,{children:[e.jsx(c,{className:"font-mono text-sm",children:s.engine_name}),e.jsx(c,{children:s.category==="ocr"?e.jsx(p,{variant:"secondary",children:a("docparse.categoryOcr")}):e.jsx(p,{variant:"outline",children:a("docparse.categoryDocument")})}),e.jsx(c,{children:e.jsx(V,{checked:s.enabled,disabled:d.isPending&&((r=d.variables)==null?void 0:r.name)===s.engine_name,onCheckedChange:E=>d.mutate({name:s.engine_name,enabled:E})})}),e.jsx(c,{className:"font-mono text-xs tabular-nums",children:s.price_per_page}),e.jsx(c,{className:"font-mono text-xs tabular-nums",children:s.price_per_call}),e.jsx(c,{className:"font-mono text-xs tabular-nums",children:s.cost_per_page}),e.jsx(c,{children:s.registered?e.jsxs(p,{variant:"outline",className:"gap-1 text-green-600",children:[e.jsx(k,{className:"size-3"}),a("docparse.registered")]}):e.jsx(p,{variant:"secondary",children:a("docparse.notRegistered")})}),e.jsx(c,{className:"whitespace-nowrap font-mono text-xs",children:s.updated_at?new Date(s.updated_at).toLocaleString():"—"}),e.jsx(c,{className:"text-end",children:e.jsxs(q,{children:[e.jsx(B,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(Y,{className:"size-4"})}),e.jsx(K,{align:"end",children:e.jsxs(L,{onClick:()=>P(s),children:[e.jsx(Z,{className:"size-4 me-2"}),a("common.edit")]})})]})})]},s.engine_name)})})]})})}),e.jsx(H,{open:!!i,onOpenChange:s=>{s||t(null)},children:e.jsxs(I,{className:"sm:max-w-md",children:[e.jsxs(Q,{children:[e.jsx(R,{children:a("docparse.editEngine")}),e.jsx(A,{children:a("docparse.editEngineDesc",{name:(i==null?void 0:i.engine_name)??""})})]}),e.jsxs("form",{onSubmit:s=>{s.preventDefault(),m.mutate()},className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"dp-ppp",children:a("docparse.pricePerPage")}),e.jsx(u,{id:"dp-ppp",type:"number",value:o.price_per_page,onChange:s=>l(r=>({...r,price_per_page:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"dp-ppc",children:a("docparse.pricePerCall")}),e.jsx(u,{id:"dp-ppc",type:"number",value:o.price_per_call,onChange:s=>l(r=>({...r,price_per_call:s.target.value}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"dp-cpp",children:a("docparse.costPerPage")}),e.jsx(u,{id:"dp-cpp",type:"number",value:o.cost_per_page,onChange:s=>l(r=>({...r,cost_per_page:s.target.value}))})]}),e.jsxs(O,{children:[e.jsx(y,{type:"button",variant:"outline",onClick:()=>t(null),children:a("common.cancel")}),e.jsx(y,{type:"submit",disabled:m.isPending,children:m.isPending?a("common.saving"):a("common.save")})]})]})]})})]})}export{be as default}; diff --git a/adminui/assets/eraser-CE8V89hp.js b/adminui/assets/eraser-BrWrxyL9.js similarity index 90% rename from adminui/assets/eraser-CE8V89hp.js rename to adminui/assets/eraser-BrWrxyL9.js index 2faf055f..fed0183e 100644 --- a/adminui/assets/eraser-CE8V89hp.js +++ b/adminui/assets/eraser-BrWrxyL9.js @@ -1,4 +1,4 @@ -import{bp as a}from"./index-DFelzBez.js";/** +import{bq as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/eye-CDueZ4cg.js b/adminui/assets/eye-BjIZjYLa.js similarity index 89% rename from adminui/assets/eye-CDueZ4cg.js rename to adminui/assets/eye-BjIZjYLa.js index ea0f297e..c59aac6a 100644 --- a/adminui/assets/eye-CDueZ4cg.js +++ b/adminui/assets/eye-BjIZjYLa.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/eye-off-l8p8btM4.js b/adminui/assets/eye-off-B4aIdVJp.js similarity index 92% rename from adminui/assets/eye-off-l8p8btM4.js rename to adminui/assets/eye-off-B4aIdVJp.js index 337e4b2a..f8b3a543 100644 --- a/adminui/assets/eye-off-l8p8btM4.js +++ b/adminui/assets/eye-off-B4aIdVJp.js @@ -1,4 +1,4 @@ -import{bp as e}from"./index-DFelzBez.js";/** +import{bq as e}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/faqs-DVukXtvY.js b/adminui/assets/faqs-CCMFtwu5.js similarity index 67% rename from adminui/assets/faqs-DVukXtvY.js rename to adminui/assets/faqs-CCMFtwu5.js index a62caa69..4529a075 100644 --- a/adminui/assets/faqs-DVukXtvY.js +++ b/adminui/assets/faqs-CCMFtwu5.js @@ -1,3 +1,3 @@ -import{f as c,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as B,cA as I,cz as N,n as h,c9 as i,bk as n}from"./index-DFelzBez.js";import{u as b}from"./useMutation-DgRiHz67.js";import{u as M}from"./use-url-state-BBO3na5E.js";import{D as H,a as A,d as R,e as U,c as V}from"./dialog-Bx55NyOm.js";import{I as $}from"./input-Bx5u8hTS.js";import{L as p}from"./label-DeKRRvpz.js";import{S as J,e as G,f as W,a as X,c as Y}from"./select-Dc4_9PNt.js";import{S as Z}from"./switch-DLTIF0BW.js";import{T as F}from"./textarea-Daa6n4S-.js";import{T as ee,d as se,e as _,c as r,a as ae,b as o}from"./table-gihdE9_j.js";import{T as te}from"./table-skeleton-BtLTAVzI.js";import{E}from"./empty-state-D0NvGCXa.js";import{P as ie}from"./plus-DK-V8p7I.js";import{T as ne}from"./trash-2-DqWZBWAo.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";function Fe(){var T,C,w;const{t:a}=B(),D=I(),{get:z,set:Q}=M(),t=z("kb_id"),[P,d]=c.useState(!1),[m,j]=c.useState(""),[g,k]=c.useState(""),[u,f]=c.useState(""),y=N({queryKey:["kb-kbs"],queryFn:()=>n.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),q=N({queryKey:["kb-faqs",t],enabled:!!t,queryFn:()=>n.send("/admin/kb/faqs",{query:{kb_id:t??"",page:"1",page_size:"50"}})}),x=()=>D.invalidateQueries({queryKey:["kb-faqs"]}),S=b({mutationFn:async()=>n.send("/admin/kb/faqs",{method:"POST",body:{kb_id:t,standard_question:m,similar_questions:g.split(` +import{f as c,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as O,cB as I,cA as N,n as h,ca as i,bl as n}from"./index-C-uFVPpg.js";import{u as b}from"./useMutation-BlIm5cor.js";import{u as M}from"./use-url-state-BBO3na5E.js";import{D as H,a as A,d as R,e as U,c as V}from"./dialog-if7Fez9x.js";import{I as $}from"./input-Bp1SimRr.js";import{L as p}from"./label-DiZ0cGhf.js";import{S as G,e as J,f as W,a as X,c as Y}from"./select-DJZwiot8.js";import{S as Z}from"./switch-DoovYEIg.js";import{T as F}from"./textarea-BhaIg3vS.js";import{T as ee,d as se,e as _,c as r,a as ae,b as o}from"./table-BoLxzYJ7.js";import{T as te}from"./table-skeleton-fqjGRt14.js";import{E}from"./empty-state-CCcgx4uH.js";import{P as ie}from"./plus-FYsVFl-s.js";import{T as ne}from"./trash-2-BZ2bkzqQ.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";function Fe(){var T,C,w;const{t:a}=O(),D=I(),{get:Q,set:z}=M(),t=Q("kb_id"),[K,d]=c.useState(!1),[m,j]=c.useState(""),[g,k]=c.useState(""),[u,f]=c.useState(""),y=N({queryKey:["kb-kbs"],queryFn:()=>n.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),q=N({queryKey:["kb-faqs",t],enabled:!!t,queryFn:()=>n.send("/admin/kb/faqs",{query:{kb_id:t??"",page:"1",page_size:"50"}})}),x=()=>D.invalidateQueries({queryKey:["kb-faqs"]}),S=b({mutationFn:async()=>n.send("/admin/kb/faqs",{method:"POST",body:{kb_id:t,standard_question:m,similar_questions:g.split(` `).map(s=>s.trim()).filter(Boolean),answers:u.split(` -`).map(s=>s.trim()).filter(Boolean),enabled:!0}}),onSuccess:()=>{i.success(a("kb.faqCreated")),d(!1),j(""),k(""),f(""),x()},onError:s=>i.error(s.message)}),K=b({mutationFn:async({id:s,enabled:l})=>n.send(`/admin/kb/faqs/${s}/enabled`,{method:"POST",body:{enabled:l}}),onSuccess:()=>{i.success(a("kb.toggleOk")),x()},onError:s=>i.error(s.message)}),L=b({mutationFn:async s=>n.send(`/admin/kb/faqs/${s}`,{method:"DELETE"}),onSuccess:()=>{i.success(a("common.deleted")),x()},onError:s=>i.error(s.message)}),v=((T=q.data)==null?void 0:T.items)??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(J,{value:t??void 0,onValueChange:s=>{s&&Q({kb_id:s})},items:(((C=y.data)==null?void 0:C.items)??[]).map(s=>({value:s.id,label:s.name})),children:[e.jsx(G,{className:"w-56",children:e.jsx(W,{placeholder:a("kb.selectPlaceholder")})}),e.jsx(X,{children:(((w=y.data)==null?void 0:w.items)??[]).map(s=>e.jsx(Y,{value:s.id,children:s.name},s.id))})]}),t&&e.jsxs(h,{size:"sm",onClick:()=>d(!0),children:[e.jsx(ie,{className:"size-4"}),a("kb.newFaq")]})]}),t?q.isLoading?e.jsx(te,{rows:5}):v.length===0?e.jsx(E,{title:a("kb.noFaqs"),description:a("kb.noFaqsDesc")}):e.jsxs(ee,{children:[e.jsx(se,{children:e.jsxs(_,{children:[e.jsx(r,{children:a("kb.stdQuestion")}),e.jsx(r,{children:a("kb.similarCount")}),e.jsx(r,{children:a("kb.hits")}),e.jsx(r,{children:a("common.enabled")}),e.jsx(r,{})]})}),e.jsx(ae,{children:v.map(s=>{var l;return e.jsxs(_,{children:[e.jsx(o,{className:"max-w-80 truncate font-medium",children:s.standard_question}),e.jsx(o,{className:"text-muted-foreground",children:((l=s.similar_questions)==null?void 0:l.length)??0}),e.jsx(o,{children:s.hit_count}),e.jsx(o,{children:e.jsx(Z,{checked:s.enabled,onCheckedChange:O=>K.mutate({id:s.id,enabled:O})})}),e.jsx(o,{children:e.jsx(h,{size:"sm",variant:"ghost",onClick:()=>L.mutate(s.id),children:e.jsx(ne,{className:"size-4 text-destructive"})})})]},s.id)})})]}):e.jsx(E,{title:a("kb.selectKb"),description:a("kb.selectKbDesc")}),e.jsx(H,{open:P,onOpenChange:d,children:e.jsxs(A,{className:"max-w-xl",children:[e.jsx(R,{children:e.jsx(U,{children:a("kb.newFaq")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(p,{children:a("kb.stdQuestion")}),e.jsx($,{value:m,onChange:s=>j(s.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(p,{children:a("kb.similarLabel")}),e.jsx(F,{rows:3,value:g,onChange:s=>k(s.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(p,{children:a("kb.answersLabel")}),e.jsx(F,{rows:4,value:u,onChange:s=>f(s.target.value)})]})]}),e.jsx(V,{children:e.jsx(h,{size:"sm",disabled:!m.trim()||!u.trim()||S.isPending,onClick:()=>S.mutate(),children:a("common.create")})})]})})]})}export{Fe as default}; +`).map(s=>s.trim()).filter(Boolean),enabled:!0}}),onSuccess:()=>{i.success(a("kb.faqCreated")),d(!1),j(""),k(""),f(""),x()},onError:s=>i.error(s.message)}),P=b({mutationFn:async({id:s,enabled:l})=>n.send(`/admin/kb/faqs/${s}/enabled`,{method:"POST",body:{enabled:l}}),onSuccess:()=>{i.success(a("kb.toggleOk")),x()},onError:s=>i.error(s.message)}),L=b({mutationFn:async s=>n.send(`/admin/kb/faqs/${s}`,{method:"DELETE"}),onSuccess:()=>{i.success(a("common.deleted")),x()},onError:s=>i.error(s.message)}),v=((T=q.data)==null?void 0:T.items)??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(G,{value:t??void 0,onValueChange:s=>{s&&z({kb_id:s})},items:(((C=y.data)==null?void 0:C.items)??[]).map(s=>({value:s.id,label:s.name})),children:[e.jsx(J,{className:"w-56",children:e.jsx(W,{placeholder:a("kb.selectPlaceholder")})}),e.jsx(X,{children:(((w=y.data)==null?void 0:w.items)??[]).map(s=>e.jsx(Y,{value:s.id,children:s.name},s.id))})]}),t&&e.jsxs(h,{size:"sm",onClick:()=>d(!0),children:[e.jsx(ie,{className:"size-4"}),a("kb.newFaq")]})]}),t?q.isLoading?e.jsx(te,{rows:5}):v.length===0?e.jsx(E,{title:a("kb.noFaqs"),description:a("kb.noFaqsDesc")}):e.jsxs(ee,{children:[e.jsx(se,{children:e.jsxs(_,{children:[e.jsx(r,{children:a("kb.stdQuestion")}),e.jsx(r,{children:a("kb.similarCount")}),e.jsx(r,{children:a("kb.hits")}),e.jsx(r,{children:a("common.enabled")}),e.jsx(r,{})]})}),e.jsx(ae,{children:v.map(s=>{var l;return e.jsxs(_,{children:[e.jsx(o,{className:"max-w-80 truncate font-medium",children:s.standard_question}),e.jsx(o,{className:"text-muted-foreground",children:((l=s.similar_questions)==null?void 0:l.length)??0}),e.jsx(o,{children:s.hit_count}),e.jsx(o,{children:e.jsx(Z,{checked:s.enabled,onCheckedChange:B=>P.mutate({id:s.id,enabled:B})})}),e.jsx(o,{children:e.jsx(h,{size:"sm",variant:"ghost",onClick:()=>L.mutate(s.id),children:e.jsx(ne,{className:"size-4 text-destructive"})})})]},s.id)})})]}):e.jsx(E,{title:a("kb.selectKb"),description:a("kb.selectKbDesc")}),e.jsx(H,{open:K,onOpenChange:d,children:e.jsxs(A,{className:"max-w-xl",children:[e.jsx(R,{children:e.jsx(U,{children:a("kb.newFaq")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(p,{children:a("kb.stdQuestion")}),e.jsx($,{value:m,onChange:s=>j(s.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(p,{children:a("kb.similarLabel")}),e.jsx(F,{rows:3,value:g,onChange:s=>k(s.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(p,{children:a("kb.answersLabel")}),e.jsx(F,{rows:4,value:u,onChange:s=>f(s.target.value)})]})]}),e.jsx(V,{children:e.jsx(h,{size:"sm",disabled:!m.trim()||!u.trim()||S.isPending,onClick:()=>S.mutate(),children:a("common.create")})})]})})]})}export{Fe as default}; diff --git a/adminui/assets/field-renderer-B16JYsaw.js b/adminui/assets/field-renderer-RFQvRwv7.js similarity index 92% rename from adminui/assets/field-renderer-B16JYsaw.js rename to adminui/assets/field-renderer-RFQvRwv7.js index fd433b30..a177eaf7 100644 --- a/adminui/assets/field-renderer-B16JYsaw.js +++ b/adminui/assets/field-renderer-RFQvRwv7.js @@ -1,4 +1,4 @@ -import{j as t,f as _}from"./vendor-react-j_G0Dyx0.js";import{I as y}from"./input-Bx5u8hTS.js";import{T as B}from"./textarea-Daa6n4S-.js";import{L as E}from"./label-DeKRRvpz.js";import{B as N}from"./badge-BvrzcoWP.js";import{bp as S,cJ as L,bd as R,a_ as $,b1 as v,a$ as I,b9 as O,bk as z,n as k}from"./index-DFelzBez.js";import{M as A,a as D}from"./multi-media-upload-CTj_w8wW.js";import{j as F}from"./media-utils-CAWMicYD.js";import{S as C,e as U,f as V,a as P,c as H}from"./select-Dc4_9PNt.js";import{a as W}from"./types-C-xO67t8.js";import{C as J}from"./check-DUua1sBA.js";import{S as Y}from"./shuffle-DaVyXqDN.js";import{A as T}from"./arrow-right-jJ6PUH_T.js";import{F as G}from"./file-CHesjbVs.js";import{D as K}from"./download-DA3qByua.js";import{U as X}from"./upload-Cqpometq.js";/** +import{j as t,f as _}from"./vendor-react-j_G0Dyx0.js";import{I as y}from"./input-Bp1SimRr.js";import{T as B}from"./textarea-BhaIg3vS.js";import{L as E}from"./label-DiZ0cGhf.js";import{B as N}from"./badge-Dhxp0jil.js";import{bq as S,cK as L,be as R,a$ as $,b2 as v,b0 as I,ba as O,bl as z,n as k}from"./index-C-uFVPpg.js";import{M as A,a as D}from"./multi-media-upload-JNDODXRR.js";import{j as F}from"./media-utils-8fvT1GGl.js";import{S as C,e as U,f as V,a as P,c as H}from"./select-DJZwiot8.js";import{a as W}from"./types-C-xO67t8.js";import{C as K}from"./check-BrJnpLnE.js";import{S as Y}from"./shuffle-ubxqp0_q.js";import{A as q}from"./arrow-right-C66mthM0.js";import{F as G}from"./file-DTh4jxeH.js";import{D as J}from"./download-DAp88Hv9.js";import{U as X}from"./upload-BbRPA2Fp.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. @@ -13,4 +13,4 @@ import{j as t,f as _}from"./vendor-react-j_G0Dyx0.js";import{I as y}from"./input * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ne=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],ae=S("git-merge",ne),se={text:"Text",rich_text:"Rich Text",integer:"Integer",big_int:"Bigint",decimal:"Decimal",float:"Float",boolean:"Boolean",date:"Date",date_time:"Datetime",time:"Time",email:"Email",password:"Password",enum:"Enum",uid:"UID",json:"JSON",media:"Media",media_set:"Media Set",blob:"Blob",relation:"Relation"},re={one_to_one:Q,one_to_many:te,many_to_one:ae,many_to_many:O,one_way:T,many_way:Y},ie={one_to_one:"One to One",one_to_many:"One to Many",many_to_one:"Many to One",many_to_many:"Many to Many",one_way:"One Way",many_way:"Many Way"};function ce({type:e,className:n}){const s=re[e]??T;return t.jsx(s,{className:n})}function Re(e,n){return e.implements.some(s=>typeof s=="string"?s===n:s.name===n)}function oe(e){return e.label??e.name}function $e(e){return e.fields.filter(n=>!n.private&&n.name!=="id").slice(0,5).map(n=>n.name)}function ve(e,n){return e.fields.find(s=>s.name===n)??null}function j(e,n){return e.length<=n?e:e.slice(0,n)+"…"}function le(e){return e.replace(/<[^>]*>/g,"")}function M(e){return{draft:"secondary",pending:"secondary",published:"default",active:"default",archived:"outline",inactive:"outline",deleted:"destructive",error:"destructive"}[e]??"secondary"}const w=512*1024;function me(e){if(e==null)return null;if(typeof e=="string")return e?{data:e}:null;if(typeof e=="object"){const n=e,s=typeof n.data=="string"?n.data:"";return s?{data:s,filename:typeof n.filename=="string"?n.filename:null,mimetype:typeof n.mimetype=="string"?n.mimetype:null}:null}return null}function de(e){try{return window.atob(e).length}catch{return 0}}function ue(e){return e&&W[e]||"bin"}function pe(e){const n=e.indexOf(","),s=n>0&&e.slice(0,n).includes(";base64")?e.slice(n+1):e,m=window.atob(s),d=new Uint8Array(m.length);for(let c=0;cw){const r=`${Math.round(w/1024)} KB`;o(m("field.blobTooLarge",{max:r}));return}const h=new FileReader;h.onload=()=>{const r=h.result;s({data:r.split(",")[1]??""}),o(null)},h.onerror=()=>o(m("field.blobReadError")),h.readAsDataURL(x)}function g(){var i;if(u)try{const x=pe(u.data),h=(i=u.filename)!=null&&i.trim()?u.filename:`${e.name}.${ue(u.mimetype)}`,a=URL.createObjectURL(new Blob([x],u.mimetype?{type:u.mimetype}:void 0)),r=document.createElement("a");r.href=a,r.download=h,r.click(),URL.revokeObjectURL(a)}catch{o(m("field.blobReadError"))}}return t.jsxs("div",{className:"space-y-2",children:[t.jsx("input",{ref:d,type:"file",className:"hidden",onChange:p}),l?t.jsxs("div",{className:"flex items-center gap-2 rounded-md border p-2",children:[t.jsx(G,{className:"size-4 shrink-0 text-muted-foreground"}),t.jsx("span",{className:"flex-1 truncate text-xs text-muted-foreground",children:(f=u.filename)!=null&&f.trim()?u.filename:m("field.blobBytes",{size:de(u.data)})}),t.jsx(k,{type:"button",variant:"ghost",size:"sm",onClick:g,title:m("common.download"),children:t.jsx(K,{className:"size-3.5"})}),t.jsx(k,{type:"button",variant:"outline",size:"sm",onClick:()=>{var i;return(i=d.current)==null?void 0:i.click()},children:m("field.blobReplace")}),t.jsx(k,{type:"button",variant:"ghost",size:"sm",onClick:()=>s(null),children:m("common.remove")})]}):t.jsxs(k,{type:"button",variant:"outline",className:"w-full",onClick:()=>{var i;return(i=d.current)==null?void 0:i.click()},children:[t.jsx(X,{className:"size-4"}),m("field.blobChooseFile")]}),c&&t.jsx("p",{className:"text-xs text-destructive",children:c})]})}function he({field:e,value:n,onChange:s}){var g,f;const[m,d]=_.useState([]),c=_.useRef(!1),o=typeof n=="string"&&n?[n]:Array.isArray(n)?n.filter(i=>typeof i=="string"):[];_.useEffect(()=>{if(c.current||o.length===0)return;c.current=!0;let i=!1;return z.admin.media.list(1,100).then(x=>{if(i)return;const h=new Map(x.items.map(r=>[String(r.id),r])),a=o.map(r=>h.get(String(r))).filter(r=>!!r).map(r=>({id:String(r.id),url:r.url,filename:r.filename,mimetype:r.mimetype}));d(a)}).catch(()=>{}),()=>{i=!0}},[JSON.stringify(o)]);const u=e.field_type==="media",l=u?1:((g=e.media_config)==null?void 0:g.max_count)??5,p=(((f=e.media_config)==null?void 0:f.accept)??[]).join(",");return t.jsx(D,{items:m,max:l&&l>0?l:void 0,accept:p||"*/*",onChange:i=>{d(i),s(u?i.length>0?i[0].id:null:i.map(x=>x.id))}})}function Ie({field:e,value:n,onChange:s,error:m}){var i,x,h;const d=oe(e),{t:c}=L(),o=n==null?"":String(n);function u(a){const r=a.target.value;if(r==="")s(null);else{const b=Number(r);s(isNaN(b)?null:b)}}let l;switch(e.field_type){case"text":case"email":case"password":case"uid":l=t.jsx(y,{type:e.field_type==="email"?"email":e.field_type==="password"?"password":"text",value:o,onChange:a=>s(a.target.value),disabled:e.field_type==="uid",required:e.required,maxLength:e.max_length??void 0});break;case"rich_text":l=t.jsx(A,{value:o,onChange:s,placeholder:c("field.startWriting")});break;case"integer":case"big_int":l=t.jsx(y,{type:"number",value:n==null?"":String(n),onChange:u,min:e.min??void 0,max:e.max??void 0,step:1,required:e.required});break;case"decimal":case"float":l=t.jsx(y,{type:"number",value:n==null?"":String(n),onChange:u,min:e.min??void 0,max:e.max??void 0,step:.01,required:e.required});break;case"boolean":l=t.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[t.jsx("button",{type:"button",role:"switch","aria-checked":n===!0,onClick:()=>s(!n),className:`relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors ${n?"bg-primary":"bg-input"}`,children:t.jsx("span",{className:`pointer-events-none block size-5 rounded-full bg-background shadow-sm ring-0 transition-transform ${n?"translate-x-5":"translate-x-0"}`})}),t.jsx("span",{className:"text-sm",children:c(n?"field.yes":"field.no")})]});break;case"date":l=t.jsx(y,{type:"date",value:o?o.split("T")[0]:"",onChange:a=>s(a.target.value),required:e.required});break;case"date_time":l=t.jsx(y,{type:"datetime-local",value:o?new Date(o).toISOString().slice(0,16):"",onChange:a=>s(a.target.value),required:e.required});break;case"time":l=t.jsx(y,{type:"time",value:o,onChange:a=>s(a.target.value),required:e.required});break;case"enum":l=t.jsxs(C,{value:o||void 0,onValueChange:a=>{a&&s(a)},required:e.required,items:Object.fromEntries((e.enum_values??[]).map(a=>[a,a])),children:[t.jsx(U,{className:"w-full",children:t.jsx(V,{placeholder:`Select ${d}`})}),t.jsx(P,{children:(e.enum_values??[]).map(a=>t.jsx(H,{value:a,children:a},a))})]},o||"__empty__");break;case"json":l=t.jsx(B,{value:o,onChange:a=>s(a.target.value),rows:6,className:"font-mono text-sm",placeholder:"{}",required:e.required});break;case"blob":l=t.jsx(xe,{field:e,value:n,onChange:s});break;case"media":case"media_set":l=t.jsx(he,{field:e,value:n,onChange:s});break;case"relation":l=t.jsx(y,{type:"text",value:o,onChange:a=>s(a.target.value),required:e.required,placeholder:(i=e.relation)!=null&&i.foreign_key?`${e.relation.foreign_key} value`:c("field.relatedItemId")});break;default:l=t.jsx(y,{type:"text",value:o,onChange:a=>s(a.target.value)})}const p=[];if(e.unique&&p.push("unique"),e.immutable&&p.push("immutable"),e.max_length!=null&&p.push(`max ${e.max_length} chars`),e.min!=null&&e.max!=null?p.push(`${e.min}–${e.max}`):e.min!=null?p.push(`min ${e.min}`):e.max!=null&&e.field_type!=="text"&&p.push(`max ${e.max}`),e.default!=null&&e.default!==""&&p.push(`default: ${e.default}`),e.pattern&&p.push(`pattern: ${e.pattern}`),e.field_type==="blob"){const a=`${Math.round(w/1024)} KB`;p.push(c("field.blobMaxSize",{max:a}))}const g=[];if(e.field_type==="media"||e.field_type==="media_set"){const a=((x=e.media_config)==null?void 0:x.accept)??[],r=a.length>0?a.map(q=>F(q)).join(", "):c("field.allTypes");g.push(c("field.supportsTypes",{types:r}));const b=(h=e.media_config)==null?void 0:h.max_count;b&&b>0&&g.push(c("field.maxFiles",{max:b}))}const f=e.field_type==="relation"?e.relation:null;return t.jsxs("div",{className:"grid grid-cols-1 gap-x-6 sm:grid-cols-3",children:[t.jsxs("div",{className:"min-w-0 space-y-1.5 sm:col-span-2",children:[t.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[t.jsxs(E,{children:[d,e.required&&t.jsx("span",{className:"text-destructive ms-1",children:"*"})]}),t.jsx(N,{variant:"outline",className:"text-[10px] font-normal px-1.5 py-0 text-muted-foreground",children:se[e.field_type]??e.field_type})]}),l,m&&t.jsx("p",{className:"text-sm text-destructive",children:m})]}),t.jsxs("div",{className:"hidden sm:block pt-[30px] text-xs text-muted-foreground space-y-1",children:[p.length>0&&t.jsx("p",{className:"text-muted-foreground/70",children:p.join(" · ")}),g.length>0&&t.jsx("div",{className:"space-y-0.5 text-muted-foreground/70",children:g.map((a,r)=>t.jsx("p",{children:a},r))}),f&&t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsxs($,{children:[t.jsx(v,{render:a=>t.jsx("span",{...a,className:"inline-flex shrink-0 cursor-help text-muted-foreground",children:t.jsx(ce,{type:f.relation_type,className:"size-3.5"})})}),t.jsx(I,{side:"top",children:ie[f.relation_type]})]}),t.jsx("span",{className:"text-muted-foreground/50",children:"→"}),t.jsx("span",{className:"text-muted-foreground",children:f.target})]}),e.description&&t.jsx("p",{children:e.description})]})]})}function Oe({field:e,value:n,columnName:s}){const{t:m}=L();if(n==null||n==="")return t.jsx("span",{className:"text-muted-foreground",children:"—"});if(s==="status")return t.jsx(N,{variant:M(String(n)),children:String(n)});if(s==="id")return t.jsx("span",{className:"font-mono text-xs whitespace-nowrap",children:String(n)});if(s==="created_at"||s==="updated_at"||s==="published_at")try{return t.jsx("span",{className:"text-sm",children:new Date(String(n)).toLocaleString()})}catch{return t.jsx("span",{className:"text-sm",children:String(n)})}if(!e)return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(String(n),50)});switch(e.field_type){case"text":case"email":case"uid":case"media":case"relation":return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(String(n),50)});case"blob":{const d=typeof n=="object"&&n!=null?n:null,c=d!=null&&d.filename&&typeof d.filename=="string"?d.filename:"Blob";return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(c,50)})}case"media_set":return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:Array.isArray(n)?`${n.length} ${m("field.mediaItems")}`:"0"});case"rich_text":return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(le(String(n)),50)});case"boolean":return n?t.jsx(J,{className:"size-4 text-green-600"}):t.jsx(R,{className:"size-4 text-muted-foreground"});case"integer":case"big_int":case"decimal":case"float":return t.jsx("span",{className:"text-sm font-mono",children:String(n)});case"date":try{return t.jsx("span",{className:"text-sm",children:new Date(String(n)).toLocaleDateString()})}catch{return t.jsx("span",{className:"text-sm",children:String(n)})}case"date_time":try{return t.jsx("span",{className:"text-sm",children:new Date(String(n)).toLocaleString()})}catch{return t.jsx("span",{className:"text-sm",children:String(n)})}case"time":return t.jsx("span",{className:"text-sm",children:String(n)});case"enum":return t.jsx(N,{variant:M(String(n)),children:String(n)});case"password":return t.jsx("span",{className:"text-sm text-muted-foreground",children:"••••••"});case"json":return t.jsx("span",{className:"text-sm font-mono truncate max-w-[200px] block",children:j(String(n),50)});default:return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(String(n),50)})}}export{Oe as F,Ie as a,ve as b,oe as c,$e as g,Re as h}; + */const ne=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],ae=S("git-merge",ne),se={text:"Text",rich_text:"Rich Text",integer:"Integer",big_int:"Bigint",decimal:"Decimal",float:"Float",boolean:"Boolean",date:"Date",date_time:"Datetime",time:"Time",email:"Email",password:"Password",enum:"Enum",uid:"UID",json:"JSON",media:"Media",media_set:"Media Set",blob:"Blob",relation:"Relation"},re={one_to_one:Q,one_to_many:te,many_to_one:ae,many_to_many:O,one_way:q,many_way:Y},ie={one_to_one:"One to One",one_to_many:"One to Many",many_to_one:"Many to One",many_to_many:"Many to Many",one_way:"One Way",many_way:"Many Way"};function ce({type:e,className:n}){const s=re[e]??q;return t.jsx(s,{className:n})}function Re(e,n){return e.implements.some(s=>typeof s=="string"?s===n:s.name===n)}function oe(e){return e.label??e.name}function $e(e){return e.fields.filter(n=>!n.private&&n.name!=="id").slice(0,5).map(n=>n.name)}function ve(e,n){return e.fields.find(s=>s.name===n)??null}function j(e,n){return e.length<=n?e:e.slice(0,n)+"…"}function le(e){return e.replace(/<[^>]*>/g,"")}function M(e){return{draft:"secondary",pending:"secondary",published:"default",active:"default",archived:"outline",inactive:"outline",deleted:"destructive",error:"destructive"}[e]??"secondary"}const w=512*1024;function me(e){if(e==null)return null;if(typeof e=="string")return e?{data:e}:null;if(typeof e=="object"){const n=e,s=typeof n.data=="string"?n.data:"";return s?{data:s,filename:typeof n.filename=="string"?n.filename:null,mimetype:typeof n.mimetype=="string"?n.mimetype:null}:null}return null}function de(e){try{return window.atob(e).length}catch{return 0}}function ue(e){return e&&W[e]||"bin"}function pe(e){const n=e.indexOf(","),s=n>0&&e.slice(0,n).includes(";base64")?e.slice(n+1):e,m=window.atob(s),d=new Uint8Array(m.length);for(let c=0;cw){const r=`${Math.round(w/1024)} KB`;o(m("field.blobTooLarge",{max:r}));return}const h=new FileReader;h.onload=()=>{const r=h.result;s({data:r.split(",")[1]??""}),o(null)},h.onerror=()=>o(m("field.blobReadError")),h.readAsDataURL(x)}function g(){var i;if(u)try{const x=pe(u.data),h=(i=u.filename)!=null&&i.trim()?u.filename:`${e.name}.${ue(u.mimetype)}`,a=URL.createObjectURL(new Blob([x],u.mimetype?{type:u.mimetype}:void 0)),r=document.createElement("a");r.href=a,r.download=h,r.click(),URL.revokeObjectURL(a)}catch{o(m("field.blobReadError"))}}return t.jsxs("div",{className:"space-y-2",children:[t.jsx("input",{ref:d,type:"file",className:"hidden",onChange:p}),l?t.jsxs("div",{className:"flex items-center gap-2 rounded-md border p-2",children:[t.jsx(G,{className:"size-4 shrink-0 text-muted-foreground"}),t.jsx("span",{className:"flex-1 truncate text-xs text-muted-foreground",children:(f=u.filename)!=null&&f.trim()?u.filename:m("field.blobBytes",{size:de(u.data)})}),t.jsx(k,{type:"button",variant:"ghost",size:"sm",onClick:g,title:m("common.download"),children:t.jsx(J,{className:"size-3.5"})}),t.jsx(k,{type:"button",variant:"outline",size:"sm",onClick:()=>{var i;return(i=d.current)==null?void 0:i.click()},children:m("field.blobReplace")}),t.jsx(k,{type:"button",variant:"ghost",size:"sm",onClick:()=>s(null),children:m("common.remove")})]}):t.jsxs(k,{type:"button",variant:"outline",className:"w-full",onClick:()=>{var i;return(i=d.current)==null?void 0:i.click()},children:[t.jsx(X,{className:"size-4"}),m("field.blobChooseFile")]}),c&&t.jsx("p",{className:"text-xs text-destructive",children:c})]})}function he({field:e,value:n,onChange:s}){var g,f;const[m,d]=_.useState([]),c=_.useRef(!1),o=typeof n=="string"&&n?[n]:Array.isArray(n)?n.filter(i=>typeof i=="string"):[];_.useEffect(()=>{if(c.current||o.length===0)return;c.current=!0;let i=!1;return z.admin.media.list(1,100).then(x=>{if(i)return;const h=new Map(x.items.map(r=>[String(r.id),r])),a=o.map(r=>h.get(String(r))).filter(r=>!!r).map(r=>({id:String(r.id),url:r.url,filename:r.filename,mimetype:r.mimetype}));d(a)}).catch(()=>{}),()=>{i=!0}},[JSON.stringify(o)]);const u=e.field_type==="media",l=u?1:((g=e.media_config)==null?void 0:g.max_count)??5,p=(((f=e.media_config)==null?void 0:f.accept)??[]).join(",");return t.jsx(D,{items:m,max:l&&l>0?l:void 0,accept:p||"*/*",onChange:i=>{d(i),s(u?i.length>0?i[0].id:null:i.map(x=>x.id))}})}function Ie({field:e,value:n,onChange:s,error:m}){var i,x,h;const d=oe(e),{t:c}=L(),o=n==null?"":String(n);function u(a){const r=a.target.value;if(r==="")s(null);else{const b=Number(r);s(isNaN(b)?null:b)}}let l;switch(e.field_type){case"text":case"email":case"password":case"uid":l=t.jsx(y,{type:e.field_type==="email"?"email":e.field_type==="password"?"password":"text",value:o,onChange:a=>s(a.target.value),disabled:e.field_type==="uid",required:e.required,maxLength:e.max_length??void 0});break;case"rich_text":l=t.jsx(A,{value:o,onChange:s,placeholder:c("field.startWriting")});break;case"integer":case"big_int":l=t.jsx(y,{type:"number",value:n==null?"":String(n),onChange:u,min:e.min??void 0,max:e.max??void 0,step:1,required:e.required});break;case"decimal":case"float":l=t.jsx(y,{type:"number",value:n==null?"":String(n),onChange:u,min:e.min??void 0,max:e.max??void 0,step:.01,required:e.required});break;case"boolean":l=t.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[t.jsx("button",{type:"button",role:"switch","aria-checked":n===!0,onClick:()=>s(!n),className:`relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors ${n?"bg-primary":"bg-input"}`,children:t.jsx("span",{className:`pointer-events-none block size-5 rounded-full bg-background shadow-sm ring-0 transition-transform ${n?"translate-x-5":"translate-x-0"}`})}),t.jsx("span",{className:"text-sm",children:c(n?"field.yes":"field.no")})]});break;case"date":l=t.jsx(y,{type:"date",value:o?o.split("T")[0]:"",onChange:a=>s(a.target.value),required:e.required});break;case"date_time":l=t.jsx(y,{type:"datetime-local",value:o?new Date(o).toISOString().slice(0,16):"",onChange:a=>s(a.target.value),required:e.required});break;case"time":l=t.jsx(y,{type:"time",value:o,onChange:a=>s(a.target.value),required:e.required});break;case"enum":l=t.jsxs(C,{value:o||void 0,onValueChange:a=>{a&&s(a)},required:e.required,items:Object.fromEntries((e.enum_values??[]).map(a=>[a,a])),children:[t.jsx(U,{className:"w-full",children:t.jsx(V,{placeholder:`Select ${d}`})}),t.jsx(P,{children:(e.enum_values??[]).map(a=>t.jsx(H,{value:a,children:a},a))})]},o||"__empty__");break;case"json":l=t.jsx(B,{value:o,onChange:a=>s(a.target.value),rows:6,className:"font-mono text-sm",placeholder:"{}",required:e.required});break;case"blob":l=t.jsx(xe,{field:e,value:n,onChange:s});break;case"media":case"media_set":l=t.jsx(he,{field:e,value:n,onChange:s});break;case"relation":l=t.jsx(y,{type:"text",value:o,onChange:a=>s(a.target.value),required:e.required,placeholder:(i=e.relation)!=null&&i.foreign_key?`${e.relation.foreign_key} value`:c("field.relatedItemId")});break;default:l=t.jsx(y,{type:"text",value:o,onChange:a=>s(a.target.value)})}const p=[];if(e.unique&&p.push("unique"),e.immutable&&p.push("immutable"),e.max_length!=null&&p.push(`max ${e.max_length} chars`),e.min!=null&&e.max!=null?p.push(`${e.min}–${e.max}`):e.min!=null?p.push(`min ${e.min}`):e.max!=null&&e.field_type!=="text"&&p.push(`max ${e.max}`),e.default!=null&&e.default!==""&&p.push(`default: ${e.default}`),e.pattern&&p.push(`pattern: ${e.pattern}`),e.field_type==="blob"){const a=`${Math.round(w/1024)} KB`;p.push(c("field.blobMaxSize",{max:a}))}const g=[];if(e.field_type==="media"||e.field_type==="media_set"){const a=((x=e.media_config)==null?void 0:x.accept)??[],r=a.length>0?a.map(T=>F(T)).join(", "):c("field.allTypes");g.push(c("field.supportsTypes",{types:r}));const b=(h=e.media_config)==null?void 0:h.max_count;b&&b>0&&g.push(c("field.maxFiles",{max:b}))}const f=e.field_type==="relation"?e.relation:null;return t.jsxs("div",{className:"grid grid-cols-1 gap-x-6 sm:grid-cols-3",children:[t.jsxs("div",{className:"min-w-0 space-y-1.5 sm:col-span-2",children:[t.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[t.jsxs(E,{children:[d,e.required&&t.jsx("span",{className:"text-destructive ms-1",children:"*"})]}),t.jsx(N,{variant:"outline",className:"text-[10px] font-normal px-1.5 py-0 text-muted-foreground",children:se[e.field_type]??e.field_type})]}),l,m&&t.jsx("p",{className:"text-sm text-destructive",children:m})]}),t.jsxs("div",{className:"hidden sm:block pt-[30px] text-xs text-muted-foreground space-y-1",children:[p.length>0&&t.jsx("p",{className:"text-muted-foreground/70",children:p.join(" · ")}),g.length>0&&t.jsx("div",{className:"space-y-0.5 text-muted-foreground/70",children:g.map((a,r)=>t.jsx("p",{children:a},r))}),f&&t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsxs($,{children:[t.jsx(v,{render:a=>t.jsx("span",{...a,className:"inline-flex shrink-0 cursor-help text-muted-foreground",children:t.jsx(ce,{type:f.relation_type,className:"size-3.5"})})}),t.jsx(I,{side:"top",children:ie[f.relation_type]})]}),t.jsx("span",{className:"text-muted-foreground/50",children:"→"}),t.jsx("span",{className:"text-muted-foreground",children:f.target})]}),e.description&&t.jsx("p",{children:e.description})]})]})}function Oe({field:e,value:n,columnName:s}){const{t:m}=L();if(n==null||n==="")return t.jsx("span",{className:"text-muted-foreground",children:"—"});if(s==="status")return t.jsx(N,{variant:M(String(n)),children:String(n)});if(s==="id")return t.jsx("span",{className:"font-mono text-xs whitespace-nowrap",children:String(n)});if(s==="created_at"||s==="updated_at"||s==="published_at")try{return t.jsx("span",{className:"text-sm",children:new Date(String(n)).toLocaleString()})}catch{return t.jsx("span",{className:"text-sm",children:String(n)})}if(!e)return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(String(n),50)});switch(e.field_type){case"text":case"email":case"uid":case"media":case"relation":return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(String(n),50)});case"blob":{const d=typeof n=="object"&&n!=null?n:null,c=d!=null&&d.filename&&typeof d.filename=="string"?d.filename:"Blob";return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(c,50)})}case"media_set":return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:Array.isArray(n)?`${n.length} ${m("field.mediaItems")}`:"0"});case"rich_text":return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(le(String(n)),50)});case"boolean":return n?t.jsx(K,{className:"size-4 text-green-600"}):t.jsx(R,{className:"size-4 text-muted-foreground"});case"integer":case"big_int":case"decimal":case"float":return t.jsx("span",{className:"text-sm font-mono",children:String(n)});case"date":try{return t.jsx("span",{className:"text-sm",children:new Date(String(n)).toLocaleDateString()})}catch{return t.jsx("span",{className:"text-sm",children:String(n)})}case"date_time":try{return t.jsx("span",{className:"text-sm",children:new Date(String(n)).toLocaleString()})}catch{return t.jsx("span",{className:"text-sm",children:String(n)})}case"time":return t.jsx("span",{className:"text-sm",children:String(n)});case"enum":return t.jsx(N,{variant:M(String(n)),children:String(n)});case"password":return t.jsx("span",{className:"text-sm text-muted-foreground",children:"••••••"});case"json":return t.jsx("span",{className:"text-sm font-mono truncate max-w-[200px] block",children:j(String(n),50)});default:return t.jsx("span",{className:"text-sm truncate max-w-[200px] block",children:j(String(n),50)})}}export{Oe as F,Ie as a,ve as b,oe as c,$e as g,Re as h}; diff --git a/adminui/assets/file-CHesjbVs.js b/adminui/assets/file-DTh4jxeH.js similarity index 89% rename from adminui/assets/file-CHesjbVs.js rename to adminui/assets/file-DTh4jxeH.js index 58b36c66..07c782d2 100644 --- a/adminui/assets/file-CHesjbVs.js +++ b/adminui/assets/file-DTh4jxeH.js @@ -1,4 +1,4 @@ -import{bp as a}from"./index-DFelzBez.js";/** +import{bq as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/flows-DL1TuZab.js b/adminui/assets/flows-BkPWResu.js similarity index 84% rename from adminui/assets/flows-DL1TuZab.js rename to adminui/assets/flows-BkPWResu.js index 144feafb..8394d193 100644 --- a/adminui/assets/flows-DL1TuZab.js +++ b/adminui/assets/flows-BkPWResu.js @@ -1,4 +1,4 @@ -import{f,j as e}from"./vendor-react-j_G0Dyx0.js";import{cA as W,cJ as G,cF as ee,cz as U,ak as se,n as d,bb as te,T as ne,_ as ae,U as ie,V as y,bk as u,c9 as o,a9 as X,al as le,aE as S}from"./index-DFelzBez.js";import{u as v}from"./useMutation-DgRiHz67.js";import{S as z}from"./switch-DLTIF0BW.js";import{C as re,a as oe}from"./card-D3QxRGt-.js";import{L as k}from"./label-DeKRRvpz.js";import{T as de}from"./textarea-Daa6n4S-.js";import{T as ce,d as me,e as F,c as N,a as ue,b as p}from"./table-gihdE9_j.js";import{D as E,a as q,d as M,e as O,c as J}from"./dialog-Bx55NyOm.js";import{B as b}from"./badge-BvrzcoWP.js";import{A as xe,c as pe,f as fe,g as he,d as je,e as ge,b as we,a as Ne}from"./alert-dialog-B-lBTnCF.js";import{u as be}from"./use-workflow-events-8T1a_Ah8.js";import{T as ye}from"./table-skeleton-BtLTAVzI.js";import{S as ve}from"./step-logs-BeP2bpGZ.js";import{A as Ce}from"./await-resume-panel-ZjDeWsP0.js";import{E as ke}from"./empty-state-D0NvGCXa.js";import{P as Se}from"./pagination-bar-DD_HkQGa.js";import{P as Te}from"./plus-DK-V8p7I.js";import{E as De}from"./ellipsis-vertical-UHYLUh-c.js";import{P as Pe}from"./pencil-BgXbFsNu.js";import{P as $}from"./play-yg6esoXP.js";import{E as Ae}from"./eye-CDueZ4cg.js";import{T as ze}from"./trash-2-DqWZBWAo.js";import{S as Fe}from"./square-bbq5PKnt.js";import{C as V}from"./copy-BcCPCJtg.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./useLabelableId-D6-89JTk.js";import"./refresh-cw-CFztQf6i.js";import"./input-Bx5u8hTS.js";import"./select-Dc4_9PNt.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./rotate-ccw-DVe8kGkZ.js";import"./chevron-left-CbJIXgY2.js";function Ee(i){return["completed","succeeded"].includes(i)?"default":["running","waiting","starting"].includes(i)?"secondary":["canceled","failed","error","stopped"].includes(i)?"destructive":"outline"}function qe(i){return i==null||typeof i=="object"&&!Array.isArray(i)&&Object.keys(i).length===0}function C(i,s){return i instanceof S?i.message:s}function Me({flowId:i,onClose:s}){const{t:a}=G(),h=W(),[c,j]=f.useState(!0),x=U({queryKey:["flow-api",i],queryFn:()=>u.admin.flows.apiStatus(i)}),n=v({mutationFn:r=>u.admin.flows.enableApi(i,{require_auth:r}),onSuccess:()=>{o.success(a("flows.api.enabled")),x.refetch(),h.invalidateQueries({queryKey:["flows"]})},onError:r=>o.error(r instanceof S?r.message:a("flows.api.failed"))}),m=v({mutationFn:()=>u.admin.flows.disableApi(i),onSuccess:()=>{o.success(a("flows.api.disabled")),x.refetch(),h.invalidateQueries({queryKey:["flows"]})},onError:r=>o.error(r instanceof S?r.message:a("flows.api.failed"))}),l=x.data,g=r=>navigator.clipboard.writeText(r).then(()=>o.success(a("flows.api.copied"))).catch(()=>o.error(a("flows.api.failed")));return e.jsx(E,{open:!0,onOpenChange:r=>{r||s()},children:e.jsxs(q,{className:"max-w-3xl",children:[e.jsx(M,{children:e.jsxs(O,{className:"flex items-center gap-2",children:[e.jsx(X,{className:"size-4"}),a("flows.api.title")]})}),x.isLoading?e.jsx("p",{className:"text-sm text-muted-foreground",children:"…"}):l!=null&&l.enabled&&l.token?e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsx("p",{className:"rounded-md bg-muted px-2 py-1.5 text-xs text-muted-foreground",children:a("flows.api.hint")}),e.jsxs("label",{className:"flex items-center justify-between rounded-md border px-2 py-1.5 text-xs",children:[e.jsx("span",{className:"flex-1 pr-2 text-xs leading-snug text-muted-foreground",children:a("flows.api.requireAuth")}),e.jsx(z,{checked:c,onCheckedChange:j})]}),e.jsxs("label",{className:"flex items-center justify-between rounded-md border px-2 py-1.5 text-xs",children:[e.jsx("span",{className:"flex-1 pr-2 text-xs leading-snug text-muted-foreground",children:a("flows.api.requireAuth")}),e.jsx(z,{checked:c,onCheckedChange:j})]}),e.jsxs("div",{children:[e.jsx(k,{className:"text-xs",children:a("flows.api.token")}),e.jsxs("div",{className:"mt-1 flex gap-1",children:[e.jsx("code",{className:"flex-1 truncate rounded-md border bg-background px-2 py-1 font-mono text-xs",children:l.token}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>g(l.token??""),children:[e.jsx(V,{className:"size-3.5 me-1"}),a("flows.api.copy")]})]})]}),e.jsxs("div",{children:[e.jsx(k,{className:"text-xs",children:a("flows.api.endpoint")}),e.jsxs("div",{className:"mt-1 flex gap-1",children:[e.jsxs("code",{className:"flex-1 truncate rounded-md border bg-background px-2 py-1 font-mono text-xs",children:["POST ",l.endpoint]}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>g(`POST ${l.endpoint??""}`),children:[e.jsx(V,{className:"size-3.5 me-1"}),a("flows.api.copy")]})]})]}),e.jsxs("div",{children:[e.jsx(k,{className:"text-xs",children:a("flows.api.curl")}),e.jsx("pre",{className:"mt-1 overflow-auto rounded-md bg-muted p-2 font-mono text-xs",children:`curl -X POST "http://127.0.0.1:9898/api/v1${l.endpoint??""}" \\ +import{f,j as e}from"./vendor-react-j_G0Dyx0.js";import{cB as W,cK as G,cG as ee,cA as U,ak as se,n as d,bc as te,T as ne,_ as ae,U as ie,V as y,bl as u,ca as o,a9 as X,al as le,aE as S}from"./index-C-uFVPpg.js";import{u as v}from"./useMutation-BlIm5cor.js";import{S as z}from"./switch-DoovYEIg.js";import{C as re,a as oe}from"./card-BBIqLCR8.js";import{L as k}from"./label-DiZ0cGhf.js";import{T as de}from"./textarea-BhaIg3vS.js";import{T as ce,d as me,e as F,c as N,a as ue,b as p}from"./table-BoLxzYJ7.js";import{D as E,a as q,d as M,e as O,c as J}from"./dialog-if7Fez9x.js";import{B as b}from"./badge-Dhxp0jil.js";import{A as xe,c as pe,f as fe,g as he,d as je,e as ge,b as we,a as Ne}from"./alert-dialog-C8VouOFc.js";import{u as be}from"./use-workflow-events-8T1a_Ah8.js";import{T as ye}from"./table-skeleton-fqjGRt14.js";import{S as ve}from"./step-logs-BLt19Swa.js";import{A as Ce}from"./await-resume-panel-X1rwNg9S.js";import{E as ke}from"./empty-state-CCcgx4uH.js";import{P as Se}from"./pagination-bar-BuL5EI1J.js";import{P as Te}from"./plus-FYsVFl-s.js";import{E as De}from"./ellipsis-vertical-B-dHvJs4.js";import{P as Pe}from"./pencil-xelQXmMG.js";import{P as $}from"./play-eK32ao3n.js";import{E as Ae}from"./eye-BjIZjYLa.js";import{T as ze}from"./trash-2-BZ2bkzqQ.js";import{S as Fe}from"./square-mdalbJDD.js";import{C as V}from"./copy-DRI8cFnN.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./useLabelableId-qP3If8Bd.js";import"./refresh-cw-6xbzwvFF.js";import"./input-Bp1SimRr.js";import"./select-DJZwiot8.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./rotate-ccw-B1uc2XfE.js";import"./chevron-left-C_tZtLI6.js";function Ee(i){return["completed","succeeded"].includes(i)?"default":["running","waiting","starting"].includes(i)?"secondary":["canceled","failed","error","stopped"].includes(i)?"destructive":"outline"}function qe(i){return i==null||typeof i=="object"&&!Array.isArray(i)&&Object.keys(i).length===0}function C(i,s){return i instanceof S?i.message:s}function Me({flowId:i,onClose:s}){const{t:a}=G(),h=W(),[c,j]=f.useState(!0),x=U({queryKey:["flow-api",i],queryFn:()=>u.admin.flows.apiStatus(i)}),n=v({mutationFn:r=>u.admin.flows.enableApi(i,{require_auth:r}),onSuccess:()=>{o.success(a("flows.api.enabled")),x.refetch(),h.invalidateQueries({queryKey:["flows"]})},onError:r=>o.error(r instanceof S?r.message:a("flows.api.failed"))}),m=v({mutationFn:()=>u.admin.flows.disableApi(i),onSuccess:()=>{o.success(a("flows.api.disabled")),x.refetch(),h.invalidateQueries({queryKey:["flows"]})},onError:r=>o.error(r instanceof S?r.message:a("flows.api.failed"))}),l=x.data,g=r=>navigator.clipboard.writeText(r).then(()=>o.success(a("flows.api.copied"))).catch(()=>o.error(a("flows.api.failed")));return e.jsx(E,{open:!0,onOpenChange:r=>{r||s()},children:e.jsxs(q,{className:"max-w-3xl",children:[e.jsx(M,{children:e.jsxs(O,{className:"flex items-center gap-2",children:[e.jsx(X,{className:"size-4"}),a("flows.api.title")]})}),x.isLoading?e.jsx("p",{className:"text-sm text-muted-foreground",children:"…"}):l!=null&&l.enabled&&l.token?e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsx("p",{className:"rounded-md bg-muted px-2 py-1.5 text-xs text-muted-foreground",children:a("flows.api.hint")}),e.jsxs("label",{className:"flex items-center justify-between rounded-md border px-2 py-1.5 text-xs",children:[e.jsx("span",{className:"flex-1 pr-2 text-xs leading-snug text-muted-foreground",children:a("flows.api.requireAuth")}),e.jsx(z,{checked:c,onCheckedChange:j})]}),e.jsxs("label",{className:"flex items-center justify-between rounded-md border px-2 py-1.5 text-xs",children:[e.jsx("span",{className:"flex-1 pr-2 text-xs leading-snug text-muted-foreground",children:a("flows.api.requireAuth")}),e.jsx(z,{checked:c,onCheckedChange:j})]}),e.jsxs("div",{children:[e.jsx(k,{className:"text-xs",children:a("flows.api.token")}),e.jsxs("div",{className:"mt-1 flex gap-1",children:[e.jsx("code",{className:"flex-1 truncate rounded-md border bg-background px-2 py-1 font-mono text-xs",children:l.token}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>g(l.token??""),children:[e.jsx(V,{className:"size-3.5 me-1"}),a("flows.api.copy")]})]})]}),e.jsxs("div",{children:[e.jsx(k,{className:"text-xs",children:a("flows.api.endpoint")}),e.jsxs("div",{className:"mt-1 flex gap-1",children:[e.jsxs("code",{className:"flex-1 truncate rounded-md border bg-background px-2 py-1 font-mono text-xs",children:["POST ",l.endpoint]}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>g(`POST ${l.endpoint??""}`),children:[e.jsx(V,{className:"size-3.5 me-1"}),a("flows.api.copy")]})]})]}),e.jsxs("div",{children:[e.jsx(k,{className:"text-xs",children:a("flows.api.curl")}),e.jsx("pre",{className:"mt-1 overflow-auto rounded-md bg-muted p-2 font-mono text-xs",children:`curl -X POST "http://127.0.0.1:9898/api/v1${l.endpoint??""}" \\ -H "Authorization: Bearer ${l.token}" \\ -H "Content-Type: application/json" \\ - -d '{"inputs":{"who":"world"}}'`}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a("flows.api.curlHint")})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",onClick:()=>n.mutate(c),disabled:n.isPending,children:a("flows.api.regenerate")}),e.jsx(d,{variant:"destructive",onClick:()=>m.mutate(),disabled:m.isPending,children:a("flows.api.disable")})]})]}):e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsx("p",{className:"rounded-md bg-muted px-2 py-1.5 text-xs text-muted-foreground",children:a("flows.api.hint")}),e.jsxs("label",{className:"flex items-center justify-between rounded-md border px-2 py-1.5 text-xs",children:[e.jsx("span",{className:"flex-1 pr-2 text-xs leading-snug text-muted-foreground",children:a("flows.api.requireAuth")}),e.jsx(z,{checked:c,onCheckedChange:j})]}),e.jsx("p",{className:"text-muted-foreground",children:a("flows.api.disabledDesc")}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",onClick:s,children:a("common.cancel")}),e.jsx(d,{onClick:()=>n.mutate(c),disabled:n.isPending,children:a("flows.api.enable")})]})]})]})})}function bs(){var B,I;const i=W(),{t:s}=G(),a=ee(),[h,c]=f.useState(null),[j,x]=f.useState("{}"),[n,m]=f.useState(null),[l,g]=f.useState(null),[r,Y]=f.useState(1),[_,L]=f.useState(null),T=U({queryKey:["flows",r],queryFn:()=>u.admin.flows.listFlowsPaged({page:r,page_size:20})}),D=v({mutationFn:t=>u.admin.flows.delete(t),onSuccess:()=>{o.success(s("flows.flowDeleted")),i.invalidateQueries({queryKey:["flows"]}),g(null)},onError:t=>o.error(C(t,s("flows.failedToDelete")))}),P=v({mutationFn:t=>{let w;try{w=JSON.parse(j)}catch{throw new S(0,s("flows.editor.invalidJson"),400,"",{})}return u.admin.flows.run(t.id,{inputs:w})},onSuccess:t=>{o.success(s("flows.runStarted")),c(null),x("{}"),m(t)},onError:t=>o.error(C(t,s("flows.failedToRun")))}),R=v({mutationFn:t=>u.admin.flows.stopInstance(t),onSuccess:()=>{o.success(s("flows.instance.stopped")),i.invalidateQueries({queryKey:["flows"]}),m(null)},onError:t=>o.error(C(t,s("flows.instance.failed")))}),H=((B=T.data)==null?void 0:B.items)??[],A=((I=T.data)==null?void 0:I.total)??0,Q=Math.max(1,Math.ceil(A/20)),Z=Math.min(r,Q),K=(n==null?void 0:n.status)==="waiting";return be((n==null?void 0:n.id)??null,()=>{n&&u.admin.flows.getInstance(n.id).then(m,()=>{})}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("flows.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s("flows.editor.hint")})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(se,{href:"/flows/editor",children:e.jsxs(d,{size:"sm",children:[e.jsx(Te,{className:"size-4"}),s("flows.newFlow")]})})})]}),e.jsx(re,{children:e.jsx(oe,{className:"p-0",children:T.isLoading?e.jsx(ye,{cols:5}):e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(F,{children:[e.jsx(N,{children:s("flows.name")}),e.jsx(N,{children:s("flows.description")}),e.jsx(N,{children:s("flows.versionColumn")}),e.jsx(N,{children:s("common.status")}),e.jsx(N,{children:s("flows.updated")}),e.jsx(N,{className:"text-end",children:s("common.actions")})]})}),e.jsx(ue,{children:H.length===0?e.jsx(F,{children:e.jsx(p,{colSpan:6,children:e.jsx(ke,{icon:te,title:s("flows.noFlows"),description:s("flows.noFlowsDesc"),action:{label:s("flows.newFlow"),onClick:()=>a.push("/flows/editor")}})})}):H.map(t=>e.jsxs(F,{children:[e.jsx(p,{className:"font-medium",children:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[t.name,t.has_draft&&e.jsx(b,{variant:"secondary",className:"text-[10px]",children:s("flows.draft")}),t.has_api&&e.jsx(b,{variant:"outline",className:"text-[10px]",children:"API"})]})}),e.jsx(p,{className:"max-w-64 truncate text-muted-foreground",children:t.description??"—"}),e.jsx(p,{children:e.jsx(b,{variant:"secondary",children:t.version_number!=null?s("flows.version",{version:t.version_number}):"—"})}),e.jsx(p,{children:t.enabled?e.jsx(b,{children:s("flows.enabled")}):e.jsx(b,{variant:"destructive",children:s("flows.disabled")})}),e.jsx(p,{className:"text-muted-foreground",children:new Date(t.updated_at).toLocaleString()}),e.jsx(p,{className:"text-end",children:e.jsxs(ne,{children:[e.jsx(ae,{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(ie,{align:"end",children:[e.jsxs(y,{onClick:()=>a.push(`/flows/${t.id}/editor`),children:[e.jsx(Pe,{className:"size-4 me-2"}),s("flows.editFlow")]}),e.jsxs(y,{onClick:()=>c(t),children:[e.jsx($,{className:"size-4 me-2"}),s("flows.run")]}),e.jsxs(y,{onClick:()=>u.admin.flows.run(t.id,{}).then(w=>{m(w),o.success(s("flows.runStarted"))},w=>o.error(C(w,s("flows.failedToRun")))),children:[e.jsx(Ae,{className:"size-4 me-2"}),s("flows.instances")]}),e.jsxs(y,{onClick:()=>L(t.id),children:[e.jsx(X,{className:"size-4 me-2"}),s("flows.api.title")]}),e.jsxs(y,{className:"text-destructive",onClick:()=>g({id:t.id,name:t.name}),disabled:D.isPending,children:[e.jsx(ze,{className:"size-4 me-2"}),s("flows.deleteFlow")]})]})]})})]},t.id))})]})})}),A>0&&e.jsx(Se,{page:Z,totalPages:Q,total:A,onPageChange:Y}),e.jsx(E,{open:!!h,onOpenChange:t=>{t||c(null)},children:e.jsxs(q,{className:"max-w-md",children:[e.jsx(M,{children:e.jsx(O,{children:s("flows.runFlow")})}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(k,{htmlFor:"run-inputs",children:s("flows.inputsJson")}),e.jsx(de,{id:"run-inputs",rows:6,className:"font-mono text-xs",value:j,onChange:t=>x(t.target.value)})]}),e.jsxs(J,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>c(null),children:s("common.cancel")}),e.jsxs(d,{type:"button",disabled:P.isPending,onClick:()=>h&&P.mutate(h),children:[P.isPending?e.jsx(le,{className:"size-4 animate-spin"}):e.jsx($,{className:"size-4"}),s("flows.run")]})]})]})}),e.jsx(E,{open:!!n,onOpenChange:t=>{t||m(null)},children:e.jsxs(q,{className:"max-w-3xl",children:[e.jsx(M,{children:e.jsx(O,{children:s("flows.instance.title")})}),n&&e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b,{variant:Ee(n.status),children:n.status}),e.jsx("span",{className:"text-muted-foreground",children:n.finished_at?new Date(n.finished_at).toLocaleString():n.started_at?new Date(n.started_at).toLocaleString():""})]}),n.error!=null&&n.error!==""&&e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs text-muted-foreground",children:s("flows.instance.error")}),e.jsx("pre",{className:"overflow-auto rounded-md bg-muted p-2 text-xs",children:typeof n.error=="string"?n.error:JSON.stringify(n.error,null,2)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs text-muted-foreground",children:s("flows.instance.outputs")}),qe(n.outputs)?e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-muted-foreground",children:s("flows.instance.noOutputs")}),e.jsx("p",{className:"text-xs text-muted-foreground/80 rounded-md bg-muted px-2 py-1.5",children:s("flows.instance.outputsEmptyHint")})]}):e.jsx("pre",{className:"overflow-auto rounded-md bg-muted p-2 text-xs",children:JSON.stringify(n.outputs,null,2)})]})]}),n&&e.jsx(ve,{instanceId:n.id}),e.jsxs(J,{className:"flex-wrap",children:[n&&K&&e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[e.jsx(Ce,{instanceId:n.id,onResumed:m},n.id),e.jsx("div",{className:"flex justify-end",children:e.jsxs(d,{type:"button",variant:"destructive",disabled:R.isPending,onClick:()=>R.mutate(n.id),children:[e.jsx(Fe,{className:"size-4"}),s("flows.instance.stop")]})})]}),n&&!K&&e.jsx(d,{type:"button",variant:"outline",onClick:()=>m(null),children:s("common.close")})]})]})}),_&&e.jsx(Me,{flowId:_,onClose:()=>L(null)}),e.jsx(xe,{open:!!l,onOpenChange:t=>{t||g(null)},children:e.jsxs(pe,{children:[e.jsxs(fe,{children:[e.jsx(he,{children:s("flows.deleteFlow")}),e.jsx(je,{children:s("flows.deleteConfirm",{name:(l==null?void 0:l.name)??""})})]}),e.jsxs(ge,{children:[e.jsx(we,{children:s("common.cancel")}),e.jsx(Ne,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",disabled:D.isPending,onClick:()=>l&&D.mutate(l.id),children:s("common.delete")})]})]})})]})}export{bs as default}; + -d '{"inputs":{"who":"world"}}'`}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a("flows.api.curlHint")})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",onClick:()=>n.mutate(c),disabled:n.isPending,children:a("flows.api.regenerate")}),e.jsx(d,{variant:"destructive",onClick:()=>m.mutate(),disabled:m.isPending,children:a("flows.api.disable")})]})]}):e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsx("p",{className:"rounded-md bg-muted px-2 py-1.5 text-xs text-muted-foreground",children:a("flows.api.hint")}),e.jsxs("label",{className:"flex items-center justify-between rounded-md border px-2 py-1.5 text-xs",children:[e.jsx("span",{className:"flex-1 pr-2 text-xs leading-snug text-muted-foreground",children:a("flows.api.requireAuth")}),e.jsx(z,{checked:c,onCheckedChange:j})]}),e.jsx("p",{className:"text-muted-foreground",children:a("flows.api.disabledDesc")}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",onClick:s,children:a("common.cancel")}),e.jsx(d,{onClick:()=>n.mutate(c),disabled:n.isPending,children:a("flows.api.enable")})]})]})]})})}function bs(){var B,I;const i=W(),{t:s}=G(),a=ee(),[h,c]=f.useState(null),[j,x]=f.useState("{}"),[n,m]=f.useState(null),[l,g]=f.useState(null),[r,Y]=f.useState(1),[_,L]=f.useState(null),T=U({queryKey:["flows",r],queryFn:()=>u.admin.flows.listFlowsPaged({page:r,page_size:20})}),D=v({mutationFn:t=>u.admin.flows.delete(t),onSuccess:()=>{o.success(s("flows.flowDeleted")),i.invalidateQueries({queryKey:["flows"]}),g(null)},onError:t=>o.error(C(t,s("flows.failedToDelete")))}),P=v({mutationFn:t=>{let w;try{w=JSON.parse(j)}catch{throw new S(0,s("flows.editor.invalidJson"),400,"",{})}return u.admin.flows.run(t.id,{inputs:w})},onSuccess:t=>{o.success(s("flows.runStarted")),c(null),x("{}"),m(t)},onError:t=>o.error(C(t,s("flows.failedToRun")))}),R=v({mutationFn:t=>u.admin.flows.stopInstance(t),onSuccess:()=>{o.success(s("flows.instance.stopped")),i.invalidateQueries({queryKey:["flows"]}),m(null)},onError:t=>o.error(C(t,s("flows.instance.failed")))}),H=((B=T.data)==null?void 0:B.items)??[],A=((I=T.data)==null?void 0:I.total)??0,K=Math.max(1,Math.ceil(A/20)),Z=Math.min(r,K),Q=(n==null?void 0:n.status)==="waiting";return be((n==null?void 0:n.id)??null,()=>{n&&u.admin.flows.getInstance(n.id).then(m,()=>{})}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("flows.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s("flows.editor.hint")})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(se,{href:"/flows/editor",children:e.jsxs(d,{size:"sm",children:[e.jsx(Te,{className:"size-4"}),s("flows.newFlow")]})})})]}),e.jsx(re,{children:e.jsx(oe,{className:"p-0",children:T.isLoading?e.jsx(ye,{cols:5}):e.jsxs(ce,{children:[e.jsx(me,{children:e.jsxs(F,{children:[e.jsx(N,{children:s("flows.name")}),e.jsx(N,{children:s("flows.description")}),e.jsx(N,{children:s("flows.versionColumn")}),e.jsx(N,{children:s("common.status")}),e.jsx(N,{children:s("flows.updated")}),e.jsx(N,{className:"text-end",children:s("common.actions")})]})}),e.jsx(ue,{children:H.length===0?e.jsx(F,{children:e.jsx(p,{colSpan:6,children:e.jsx(ke,{icon:te,title:s("flows.noFlows"),description:s("flows.noFlowsDesc"),action:{label:s("flows.newFlow"),onClick:()=>a.push("/flows/editor")}})})}):H.map(t=>e.jsxs(F,{children:[e.jsx(p,{className:"font-medium",children:e.jsxs("span",{className:"inline-flex items-center gap-2",children:[t.name,t.has_draft&&e.jsx(b,{variant:"secondary",className:"text-[10px]",children:s("flows.draft")}),t.has_api&&e.jsx(b,{variant:"outline",className:"text-[10px]",children:"API"})]})}),e.jsx(p,{className:"max-w-64 truncate text-muted-foreground",children:t.description??"—"}),e.jsx(p,{children:e.jsx(b,{variant:"secondary",children:t.version_number!=null?s("flows.version",{version:t.version_number}):"—"})}),e.jsx(p,{children:t.enabled?e.jsx(b,{children:s("flows.enabled")}):e.jsx(b,{variant:"destructive",children:s("flows.disabled")})}),e.jsx(p,{className:"text-muted-foreground",children:new Date(t.updated_at).toLocaleString()}),e.jsx(p,{className:"text-end",children:e.jsxs(ne,{children:[e.jsx(ae,{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(ie,{align:"end",children:[e.jsxs(y,{onClick:()=>a.push(`/flows/${t.id}/editor`),children:[e.jsx(Pe,{className:"size-4 me-2"}),s("flows.editFlow")]}),e.jsxs(y,{onClick:()=>c(t),children:[e.jsx($,{className:"size-4 me-2"}),s("flows.run")]}),e.jsxs(y,{onClick:()=>u.admin.flows.run(t.id,{}).then(w=>{m(w),o.success(s("flows.runStarted"))},w=>o.error(C(w,s("flows.failedToRun")))),children:[e.jsx(Ae,{className:"size-4 me-2"}),s("flows.instances")]}),e.jsxs(y,{onClick:()=>L(t.id),children:[e.jsx(X,{className:"size-4 me-2"}),s("flows.api.title")]}),e.jsxs(y,{className:"text-destructive",onClick:()=>g({id:t.id,name:t.name}),disabled:D.isPending,children:[e.jsx(ze,{className:"size-4 me-2"}),s("flows.deleteFlow")]})]})]})})]},t.id))})]})})}),A>0&&e.jsx(Se,{page:Z,totalPages:K,total:A,onPageChange:Y}),e.jsx(E,{open:!!h,onOpenChange:t=>{t||c(null)},children:e.jsxs(q,{className:"max-w-md",children:[e.jsx(M,{children:e.jsx(O,{children:s("flows.runFlow")})}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(k,{htmlFor:"run-inputs",children:s("flows.inputsJson")}),e.jsx(de,{id:"run-inputs",rows:6,className:"font-mono text-xs",value:j,onChange:t=>x(t.target.value)})]}),e.jsxs(J,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>c(null),children:s("common.cancel")}),e.jsxs(d,{type:"button",disabled:P.isPending,onClick:()=>h&&P.mutate(h),children:[P.isPending?e.jsx(le,{className:"size-4 animate-spin"}):e.jsx($,{className:"size-4"}),s("flows.run")]})]})]})}),e.jsx(E,{open:!!n,onOpenChange:t=>{t||m(null)},children:e.jsxs(q,{className:"max-w-3xl",children:[e.jsx(M,{children:e.jsx(O,{children:s("flows.instance.title")})}),n&&e.jsxs("div",{className:"space-y-3 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b,{variant:Ee(n.status),children:n.status}),e.jsx("span",{className:"text-muted-foreground",children:n.finished_at?new Date(n.finished_at).toLocaleString():n.started_at?new Date(n.started_at).toLocaleString():""})]}),n.error!=null&&n.error!==""&&e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs text-muted-foreground",children:s("flows.instance.error")}),e.jsx("pre",{className:"overflow-auto rounded-md bg-muted p-2 text-xs",children:typeof n.error=="string"?n.error:JSON.stringify(n.error,null,2)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-xs text-muted-foreground",children:s("flows.instance.outputs")}),qe(n.outputs)?e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-muted-foreground",children:s("flows.instance.noOutputs")}),e.jsx("p",{className:"text-xs text-muted-foreground/80 rounded-md bg-muted px-2 py-1.5",children:s("flows.instance.outputsEmptyHint")})]}):e.jsx("pre",{className:"overflow-auto rounded-md bg-muted p-2 text-xs",children:JSON.stringify(n.outputs,null,2)})]})]}),n&&e.jsx(ve,{instanceId:n.id}),e.jsxs(J,{className:"flex-wrap",children:[n&&Q&&e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[e.jsx(Ce,{instanceId:n.id,onResumed:m},n.id),e.jsx("div",{className:"flex justify-end",children:e.jsxs(d,{type:"button",variant:"destructive",disabled:R.isPending,onClick:()=>R.mutate(n.id),children:[e.jsx(Fe,{className:"size-4"}),s("flows.instance.stop")]})})]}),n&&!Q&&e.jsx(d,{type:"button",variant:"outline",onClick:()=>m(null),children:s("common.close")})]})]})}),_&&e.jsx(Me,{flowId:_,onClose:()=>L(null)}),e.jsx(xe,{open:!!l,onOpenChange:t=>{t||g(null)},children:e.jsxs(pe,{children:[e.jsxs(fe,{children:[e.jsx(he,{children:s("flows.deleteFlow")}),e.jsx(je,{children:s("flows.deleteConfirm",{name:(l==null?void 0:l.name)??""})})]}),e.jsxs(ge,{children:[e.jsx(we,{children:s("common.cancel")}),e.jsx(Ne,{className:"bg-destructive! text-destructive-foreground! hover:bg-destructive/90!",disabled:D.isPending,onClick:()=>l&&D.mutate(l.id),children:s("common.delete")})]})]})})]})}export{bs as default}; diff --git a/adminui/assets/flows-editor-Cepm-OB8.js b/adminui/assets/flows-editor-B19Qa7XC.js similarity index 98% rename from adminui/assets/flows-editor-Cepm-OB8.js rename to adminui/assets/flows-editor-B19Qa7XC.js index 82b32003..1a473bb4 100644 --- a/adminui/assets/flows-editor-Cepm-OB8.js +++ b/adminui/assets/flows-editor-B19Qa7XC.js @@ -1,4 +1,4 @@ -import{f as b,j as e,k as Ps}from"./vendor-react-j_G0Dyx0.js";import{bp as le,cJ as J,n as C,bd as de,bl as Mt,p as Ms,at as it,az as ct,au as dt,aU as Os,a4 as Ts,a9 as Is,a8 as Fs,cG as Rs,cz as nt,bk as me,c9 as q,aE as Gt,b0 as Ot,a_ as As,b1 as Ds,a$ as Ls}from"./index-DFelzBez.js";import{P as Be,H as Se,R as Hs,c as Vs,u as qs,d as Bs,e as Js,b as Us,i as Ws,B as Gs,a as Ks,M as Xs}from"./vendor-xyflow-C2hOf6Vp.js";import{L as Q}from"./label-DeKRRvpz.js";import{T as fe}from"./textarea-Daa6n4S-.js";import{B as ut}from"./badge-BvrzcoWP.js";import{D as ht,a as pt,d as xt,e as gt}from"./dialog-Bx55NyOm.js";import{u as Ys}from"./use-workflow-events-8T1a_Ah8.js";import{I as z}from"./input-Bx5u8hTS.js";import{S as W,e as G,f as K,a as X,c as T,b as Zs,d as Qs}from"./select-Dc4_9PNt.js";import{S as yt}from"./switch-DLTIF0BW.js";import{P as er}from"./pencil-BgXbFsNu.js";import{C as tr}from"./check-DUua1sBA.js";import{G as Kt}from"./grip-vertical-BHYRkqhd.js";import{P as Oe}from"./plus-DK-V8p7I.js";import{C as Tt}from"./code-editor-DZgggbjW.js";import{B as mt}from"./braces-CSqrcTDW.js";import{M as Xt,a as sr,Z as rr}from"./zoom-out-qtMkh8Zn.js";import{a as ar}from"./model-select-PQ1YHedf.js";import{D as nr}from"./database-CAtPG7tU.js";import{H as or}from"./hourglass-B2rv03q9.js";import{T as Je}from"./trash-2-DqWZBWAo.js";import{S as lr}from"./shuffle-DaVyXqDN.js";import{L as ir}from"./layout-grid-DF9F3GnA.js";import{S as cr}from"./save-Dw1cTtUv.js";import{P as dr}from"./play-yg6esoXP.js";import{T as ur}from"./type-SsZV2Os-.js";import{C as mr}from"./copy-BcCPCJtg.js";import{R as fr}from"./refresh-cw-CFztQf6i.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./chevron-up-BHyyZ98X.js";import"./FormContext-DtOchBZg.js";import"./useAriaLabelledBy-DZQntSuy.js";import"./vendor-md-editor-vOqM56Ks.js";import"./chevrons-up-down-CYWVywcp.js";/** +import{f as b,j as e,k as Ps}from"./vendor-react-j_G0Dyx0.js";import{bq as le,cK as J,n as C,be as de,bm as Mt,p as Ms,at as it,az as ct,au as dt,aV as Os,a4 as Ts,a9 as Is,a8 as Fs,cH as Rs,cA as nt,bl as me,ca as q,aE as Gt,b1 as Ot,a$ as As,b2 as Ds,b0 as Ls}from"./index-C-uFVPpg.js";import{P as Be,H as Se,R as Hs,c as Vs,u as qs,d as Bs,e as Js,b as Us,i as Ws,B as Gs,a as Ks,M as Xs}from"./vendor-xyflow-C2hOf6Vp.js";import{L as Q}from"./label-DiZ0cGhf.js";import{T as fe}from"./textarea-BhaIg3vS.js";import{B as ut}from"./badge-Dhxp0jil.js";import{D as ht,a as pt,d as xt,e as gt}from"./dialog-if7Fez9x.js";import{u as Ys}from"./use-workflow-events-8T1a_Ah8.js";import{I as z}from"./input-Bp1SimRr.js";import{S as W,e as G,f as K,a as X,c as T,b as Zs,d as Qs}from"./select-DJZwiot8.js";import{S as yt}from"./switch-DoovYEIg.js";import{P as er}from"./pencil-xelQXmMG.js";import{C as tr}from"./check-BrJnpLnE.js";import{G as Kt}from"./grip-vertical-BFYOA9qd.js";import{P as Oe}from"./plus-FYsVFl-s.js";import{C as Tt}from"./code-editor-DjTus6iJ.js";import{B as mt}from"./braces-DzImKT76.js";import{M as Xt,a as sr,Z as rr}from"./zoom-out-CizcPOe1.js";import{a as ar}from"./model-select-CfIsbs0T.js";import{D as nr}from"./database-BWHgXN31.js";import{H as or}from"./hourglass-B0dHJz58.js";import{T as Je}from"./trash-2-BZ2bkzqQ.js";import{S as lr}from"./shuffle-ubxqp0_q.js";import{L as ir}from"./layout-grid-BdBqHXKm.js";import{S as cr}from"./save-Bhy1j3dM.js";import{P as dr}from"./play-eK32ao3n.js";import{T as ur}from"./type-oTYNOCGK.js";import{C as mr}from"./copy-DRI8cFnN.js";import{R as fr}from"./refresh-cw-6xbzwvFF.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./chevron-up-hicU2AmB.js";import"./FormContext-CMyWQz7b.js";import"./useAriaLabelledBy-BpS7IJWF.js";import"./vendor-md-editor-vOqM56Ks.js";import"./chevrons-up-down-D2U8cLa1.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/folder-open-DCsNiQiU.js b/adminui/assets/folder-open-CRex8He5.js similarity index 90% rename from adminui/assets/folder-open-DCsNiQiU.js rename to adminui/assets/folder-open-CRex8He5.js index daf435dd..42d964f6 100644 --- a/adminui/assets/folder-open-DCsNiQiU.js +++ b/adminui/assets/folder-open-CRex8He5.js @@ -1,4 +1,4 @@ -import{bp as a}from"./index-DFelzBez.js";/** +import{bq as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/gaps-BsaBDijc.js b/adminui/assets/gaps-CLumIROa.js similarity index 68% rename from adminui/assets/gaps-BsaBDijc.js rename to adminui/assets/gaps-CLumIROa.js index 3e0bdfe5..6916aa96 100644 --- a/adminui/assets/gaps-BsaBDijc.js +++ b/adminui/assets/gaps-CLumIROa.js @@ -1 +1 @@ -import{j as s}from"./vendor-react-j_G0Dyx0.js";import{cJ as p,cz as u,n as b,aU as x,c9 as l,bk as c}from"./index-DFelzBez.js";import{u as j}from"./useMutation-DgRiHz67.js";import{B as f}from"./badge-BvrzcoWP.js";import{T as h,d as k,e as m,c as r,a as g,b as t}from"./table-gihdE9_j.js";import{T}from"./table-skeleton-BtLTAVzI.js";import{E as y}from"./empty-state-D0NvGCXa.js";import"./vendor-xyflow-C2hOf6Vp.js";function G(){var d;const{t:e}=p(),n=u({queryKey:["kb-gaps"],queryFn:()=>c.send("/admin/kb/gaps")}),o=j({mutationFn:async a=>c.send(`/admin/kb/faqs/from-log/${a}`,{method:"POST"}),onSuccess:()=>{l.success(e("kb.drafted"))},onError:a=>l.error(a.message)}),i=((d=n.data)==null?void 0:d.items)??[];return s.jsxs("div",{className:"space-y-6",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:e("kb.gapsIntro")}),n.isLoading?s.jsx(T,{rows:5}):i.length===0?s.jsx(y,{title:e("kb.noGaps"),description:e("kb.noGapsDesc")}):s.jsxs(h,{children:[s.jsx(k,{children:s.jsxs(m,{children:[s.jsx(r,{children:e("kb.askLabel")}),s.jsx(r,{children:e("kb.freq")}),s.jsx(r,{children:e("kb.operations")})]})}),s.jsx(g,{children:i.map(a=>s.jsxs(m,{children:[s.jsx(t,{className:"font-medium",children:a.question}),s.jsx(t,{children:s.jsx(f,{variant:"secondary",children:a.count})}),s.jsx(t,{children:s.jsxs(b,{size:"sm",variant:"outline",disabled:o.isPending,onClick:()=>o.mutate(a.log_id),children:[s.jsx(x,{className:"size-4"}),e("kb.draftFaq")]})})]},a.log_id))})]})]})}export{G as default}; +import{j as s}from"./vendor-react-j_G0Dyx0.js";import{cK as p,cA as u,n as b,aV as x,ca as l,bl as c}from"./index-C-uFVPpg.js";import{u as j}from"./useMutation-BlIm5cor.js";import{B as f}from"./badge-Dhxp0jil.js";import{T as h,d as k,e as m,c as r,a as g,b as t}from"./table-BoLxzYJ7.js";import{T}from"./table-skeleton-fqjGRt14.js";import{E as y}from"./empty-state-CCcgx4uH.js";import"./vendor-xyflow-C2hOf6Vp.js";function K(){var d;const{t:e}=p(),n=u({queryKey:["kb-gaps"],queryFn:()=>c.send("/admin/kb/gaps")}),o=j({mutationFn:async a=>c.send(`/admin/kb/faqs/from-log/${a}`,{method:"POST"}),onSuccess:()=>{l.success(e("kb.drafted"))},onError:a=>l.error(a.message)}),i=((d=n.data)==null?void 0:d.items)??[];return s.jsxs("div",{className:"space-y-6",children:[s.jsx("p",{className:"text-sm text-muted-foreground",children:e("kb.gapsIntro")}),n.isLoading?s.jsx(T,{rows:5}):i.length===0?s.jsx(y,{title:e("kb.noGaps"),description:e("kb.noGapsDesc")}):s.jsxs(h,{children:[s.jsx(k,{children:s.jsxs(m,{children:[s.jsx(r,{children:e("kb.askLabel")}),s.jsx(r,{children:e("kb.freq")}),s.jsx(r,{children:e("kb.operations")})]})}),s.jsx(g,{children:i.map(a=>s.jsxs(m,{children:[s.jsx(t,{className:"font-medium",children:a.question}),s.jsx(t,{children:s.jsx(f,{variant:"secondary",children:a.count})}),s.jsx(t,{children:s.jsxs(b,{size:"sm",variant:"outline",disabled:o.isPending,onClick:()=>o.mutate(a.log_id),children:[s.jsx(x,{className:"size-4"}),e("kb.draftFaq")]})})]},a.log_id))})]})]})}export{K as default}; diff --git a/adminui/assets/grip-vertical-BHYRkqhd.js b/adminui/assets/grip-vertical-BFYOA9qd.js similarity index 91% rename from adminui/assets/grip-vertical-BHYRkqhd.js rename to adminui/assets/grip-vertical-BFYOA9qd.js index 94c991a5..e49cc2f4 100644 --- a/adminui/assets/grip-vertical-BHYRkqhd.js +++ b/adminui/assets/grip-vertical-BFYOA9qd.js @@ -1,4 +1,4 @@ -import{bp as c}from"./index-DFelzBez.js";/** +import{bq as c}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. diff --git a/adminui/assets/hourglass-B2rv03q9.js b/adminui/assets/hourglass-B0dHJz58.js similarity index 79% rename from adminui/assets/hourglass-B2rv03q9.js rename to adminui/assets/hourglass-B0dHJz58.js index 76589e20..2133d7bb 100644 --- a/adminui/assets/hourglass-B2rv03q9.js +++ b/adminui/assets/hourglass-B0dHJz58.js @@ -1,6 +1,6 @@ -import{bp as a}from"./index-DFelzBez.js";/** +import{bq as a}from"./index-C-uFVPpg.js";/** * @license lucide-react v1.17.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const e=[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M5 2h14",key:"pdyrp9"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22",key:"1d314k"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2",key:"1vvvr6"}]],p=a("hourglass",e);export{p as H}; + */const e=[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M5 2h14",key:"pdyrp9"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22",key:"1d314k"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2",key:"1vvvr6"}]],t=a("hourglass",e);export{t as H}; diff --git a/adminui/assets/images-C95CSzy2.js b/adminui/assets/images-CjPrpsFb.js similarity index 81% rename from adminui/assets/images-C95CSzy2.js rename to adminui/assets/images-CjPrpsFb.js index fad7940e..381b9506 100644 --- a/adminui/assets/images-C95CSzy2.js +++ b/adminui/assets/images-CjPrpsFb.js @@ -1 +1 @@ -import{f,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as $,cz as S,ae as T,T as H,_ as Y,U as X,V as B,a4 as G,n as N,bx as J,bk as _}from"./index-DFelzBez.js";import{B as W}from"./badge-BvrzcoWP.js";import{C as ee,a as se}from"./card-D3QxRGt-.js";import{D as ae,a as te,d as le,e as ne}from"./dialog-Bx55NyOm.js";import{S as z,e as I,f as M,a as D,c as h}from"./select-Dc4_9PNt.js";import{T as ie,d as re,e as V,c as p,a as ce,b as j}from"./table-gihdE9_j.js";import{T as oe}from"./table-skeleton-BtLTAVzI.js";import{E as de}from"./empty-state-D0NvGCXa.js";import{P as xe}from"./pagination-bar-DD_HkQGa.js";import{u as me}from"./use-url-state-BBO3na5E.js";import{E as ue}from"./ellipsis-vertical-UHYLUh-c.js";import{a as he,Z as pe,M as je}from"./zoom-out-qtMkh8Zn.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-DUua1sBA.js";import"./chevron-up-BHyyZ98X.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-D_vrP_l5.js";import"./useLabelableId-D6-89JTk.js";import"./FormContext-DtOchBZg.js";import"./chevron-left-CbJIXgY2.js";const fe={done:"default",pending:"secondary",failed:"destructive",skipped:"outline"},K=20;function O(a){return a?new Date(a).toLocaleString():"-"}function Ve(){var R,q,L,A;const{t:a}=$(),{get:o,getInt:n,set:g}=me(),i=o("kb_id")||null,d=o("doc_id")||null,r=o("status")||"all",c=n("page"),[x,b]=f.useState(null),[t,l]=f.useState(null),m=S({queryKey:["kb-kbs"],queryFn:()=>_.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),Q=S({queryKey:["kb-docs-options",i],queryFn:()=>_.send("/admin/kb/documents",{query:{...i?{kb_id:i}:{},page:"1",page_size:"100"}})}),y=S({queryKey:["kb-images",i,d,r,c],queryFn:()=>_.send("/admin/kb/images",{query:{...i?{kb_id:i}:{},...d?{doc_id:d}:{},...r!=="all"?{status:r}:{},page:String(c),page_size:String(K)}}),refetchInterval:s=>{var k;return(((k=s.state.data)==null?void 0:k.items)??[]).some(v=>v.status==="pending")?5e3:!1}}),U=((R=m.data)==null?void 0:R.items)??[],P=((q=Q.data)==null?void 0:q.items)??[],E=((L=y.data)==null?void 0:L.items)??[],w=((A=y.data)==null?void 0:A.total)??0,Z=Math.max(1,Math.ceil(w/K)),u=s=>{const k=`kb.imageStatus.${s}`,v=a(k);return v===k?s:v};function C(s){g({...s,doc_id:"kb_id"in s?void 0:d??void 0,page:void 0})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(z,{value:i??"all",onValueChange:s=>C({kb_id:s&&s!=="all"?s:void 0}),items:[{value:"all",label:a("kb.allKbs")},...U.map(s=>({value:s.id,label:s.name}))],children:[e.jsx(I,{className:"w-52",children:e.jsx(M,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(D,{children:[e.jsx(h,{value:"all",children:a("kb.allKbs")}),U.map(s=>e.jsx(h,{value:s.id,children:s.name},s.id))]})]}),e.jsxs(z,{value:d??"all",onValueChange:s=>C({doc_id:s&&s!=="all"?s:void 0}),items:[{value:"all",label:a("kb.allDocs")},...P.map(s=>({value:s.id,label:s.title}))],children:[e.jsx(I,{className:"w-52",children:e.jsx(M,{placeholder:a("kb.allDocs")})}),e.jsxs(D,{children:[e.jsx(h,{value:"all",children:a("kb.allDocs")}),P.map(s=>e.jsx(h,{value:s.id,children:s.title},s.id))]})]}),e.jsxs(z,{value:r,onValueChange:s=>C({status:s&&s!=="all"?s:void 0}),items:{all:a("kb.allStatus"),pending:u("pending"),done:u("done"),failed:u("failed"),skipped:u("skipped")},children:[e.jsx(I,{className:"w-36",children:e.jsx(M,{})}),e.jsxs(D,{children:[e.jsx(h,{value:"all",children:a("kb.allStatus")}),e.jsx(h,{value:"pending",children:u("pending")}),e.jsx(h,{value:"done",children:u("done")}),e.jsx(h,{value:"failed",children:u("failed")}),e.jsx(h,{value:"skipped",children:u("skipped")})]})]})]}),y.isLoading?e.jsx(oe,{rows:6}):E.length===0?e.jsx(de,{icon:T,title:a("kb.noImages"),description:a("kb.noImagesDesc")}):e.jsx(ee,{children:e.jsx(se,{className:"p-0",children:e.jsxs(ie,{children:[e.jsx(re,{children:e.jsxs(V,{children:[e.jsx(p,{className:"w-20",children:a("kb.imageThumb")}),e.jsx(p,{children:a("layout.kb")}),e.jsx(p,{children:a("kb.title")}),e.jsx(p,{className:"w-16",children:a("kb.pageCol")}),e.jsx(p,{className:"w-24",children:a("kb.state")}),e.jsx(p,{children:a("kb.recognition")}),e.jsx(p,{children:a("kb.createdAtCol")}),e.jsx(p,{children:a("kb.updatedAt")}),e.jsx(p,{className:"text-end",children:a("common.actions")})]})}),e.jsx(ce,{children:E.map(s=>e.jsxs(V,{children:[e.jsx(j,{children:e.jsx("button",{type:"button",className:"block h-12 w-16 overflow-hidden rounded border bg-muted/40",title:a("kb.imagePreview"),onClick:()=>b(s),children:e.jsx(be,{row:s})})}),e.jsx(j,{className:"whitespace-nowrap text-muted-foreground",children:s.kb_name??"-"}),e.jsx(j,{className:"max-w-48",children:e.jsx("span",{className:"block truncate",title:s.doc_title??"",children:s.doc_title??"-"})}),e.jsx(j,{className:"text-muted-foreground",children:s.page??"-"}),e.jsxs(j,{children:[e.jsx(W,{variant:fe[s.status]??"secondary",children:u(s.status)}),s.status==="failed"&&s.error&&e.jsx("div",{className:"max-w-48 truncate text-xs text-destructive",title:s.error,children:s.error})]}),e.jsx(j,{className:"max-w-96",children:s.caption?e.jsx("span",{className:"block truncate text-muted-foreground",title:s.caption,children:s.caption}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),e.jsx(j,{className:"whitespace-nowrap text-xs text-muted-foreground",children:O(s.created_at)}),e.jsx(j,{className:"whitespace-nowrap text-xs text-muted-foreground",children:O(s.updated_at)}),e.jsx(j,{className:"text-end",children:e.jsxs(H,{children:[e.jsx(Y,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(ue,{className:"size-4"})}),e.jsxs(X,{align:"end",children:[e.jsxs(B,{onClick:()=>l(s),children:[e.jsx(G,{className:"size-4 me-2"}),a("kb.imageContent")]}),e.jsxs(B,{onClick:()=>b(s),children:[e.jsx(T,{className:"size-4 me-2"}),a("kb.imagePreview")]})]})]})})]},s.id))})]})})}),w>0&&e.jsx(xe,{page:c,totalPages:Z,total:w,onPageChange:s=>g({page:s===1?void 0:String(s)})}),e.jsx(ae,{open:!!t,onOpenChange:s=>{s||l(null)},children:e.jsxs(te,{className:"flex max-h-[85vh] flex-col sm:max-w-2xl",children:[e.jsx(le,{children:e.jsxs(ne,{children:[(t==null?void 0:t.doc_title)??""," · ",a("kb.pageCol")," ",(t==null?void 0:t.page)??"-"]})}),e.jsxs("div",{className:"min-h-0 flex-1 space-y-3 overflow-y-auto",children:[(t==null?void 0:t.caption)&&e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("kb.imageCaption")}),e.jsx("p",{className:"text-sm",children:t.caption})]}),(t==null?void 0:t.ocr_text)&&e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("kb.imageOcr")}),e.jsx("pre",{className:"whitespace-pre-wrap rounded-md bg-muted/40 p-3 font-mono text-xs leading-relaxed",children:t.ocr_text})]}),(t==null?void 0:t.error)&&e.jsx("p",{className:"break-all text-xs text-destructive",children:t.error}),!(t!=null&&t.caption)&&!(t!=null&&t.ocr_text)&&!(t!=null&&t.error)&&e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:a("kb.imageStatus."+((t==null?void 0:t.status)??"pending"))})]})]})}),x&&e.jsx(ge,{row:x,onClose:()=>b(null)})]})}function F(a){const[o,n]=f.useState(null),[g,i]=f.useState(!1),d=(a==null?void 0:a.id)??null;return f.useEffect(()=>{if(!a){n(null),i(!1);return}if(a.source==="external"&&a.original_url){n(a.original_url),i(!1);return}let r=null,c=!0;return n(null),i(!1),J(`/admin/kb/images/${a.id}/preview`).then(x=>{c?(r=x,n(x)):URL.revokeObjectURL(x)}).catch(()=>{c&&i(!0)}),()=>{c=!1,r&&URL.revokeObjectURL(r)}},[d]),{url:o,error:g}}function be({row:a}){const{url:o,error:n}=F(a);return n?e.jsx("span",{className:"flex h-full w-full items-center justify-center text-[10px] text-muted-foreground",children:"N/A"}):o?e.jsx("img",{src:o,alt:"",className:"h-full w-full object-cover",loading:"lazy"}):e.jsx("span",{className:"flex h-full w-full items-center justify-center text-[10px] text-muted-foreground",children:"…"})}function ge({row:a,onClose:o}){const{t:n}=$(),{url:g,error:i}=F(a),[d,r]=f.useState(1),[c,x]=f.useState({x:0,y:0}),b=f.useRef(null);f.useEffect(()=>{r(1),x({x:0,y:0})},[a.id]);const t=l=>r(m=>Math.min(8,Math.max(.2,Math.round((m+l)*10)/10)));return e.jsxs("div",{className:"fixed inset-0 z-50 flex flex-col bg-black/85",onClick:l=>{l.target===l.currentTarget&&o()},onWheel:l=>{l.preventDefault(),t(l.deltaY<0?.2:-.2)},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 p-3 text-white",children:[e.jsxs("span",{className:"truncate text-sm",children:[a.doc_title??""," · ",n("kb.pageCol")," ",a.page??"-"]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx(N,{size:"icon-xs",variant:"ghost",className:"text-white hover:bg-white/10",onClick:()=>t(-.2),title:n("kb.zoomOut"),children:e.jsx(he,{className:"size-4"})}),e.jsxs("span",{className:"w-12 text-center text-xs tabular-nums",children:[Math.round(d*100),"%"]}),e.jsx(N,{size:"icon-xs",variant:"ghost",className:"text-white hover:bg-white/10",onClick:()=>t(.2),title:n("kb.zoomIn"),children:e.jsx(pe,{className:"size-4"})}),e.jsx(N,{size:"icon-xs",variant:"ghost",className:"text-white hover:bg-white/10",onClick:()=>{r(1),x({x:0,y:0})},title:n("kb.zoomReset"),children:e.jsx(je,{className:"size-4"})}),e.jsx(N,{size:"sm",variant:"ghost",className:"text-white hover:bg-white/10",onClick:o,children:n("common.close")})]})]}),e.jsx("div",{className:"flex flex-1 cursor-grab items-center justify-center overflow-hidden active:cursor-grabbing",onMouseDown:l=>{d<=1||(b.current={x:l.clientX,y:l.clientY,ox:c.x,oy:c.y})},onMouseMove:l=>{const m=b.current;m&&x({x:m.ox+(l.clientX-m.x),y:m.oy+(l.clientY-m.y)})},onMouseUp:()=>{b.current=null},onMouseLeave:()=>{b.current=null},children:i?e.jsx("span",{className:"text-sm text-white/70",children:n("kb.imagePreviewUnavailable")}):g?e.jsx("img",{src:g,alt:a.caption??"image",draggable:!1,className:"max-h-full max-w-full select-none object-contain transition-transform duration-100",style:{transform:`translate(${c.x}px, ${c.y}px) scale(${d})`}}):e.jsx("span",{className:"text-sm text-white/70",children:"…"})})]})}export{Ve as default}; +import{f,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as $,cA as S,ae as T,T as H,_ as Y,U as X,V as B,a4 as G,n as N,by as W,bl as _}from"./index-C-uFVPpg.js";import{B as J}from"./badge-Dhxp0jil.js";import{C as ee,a as se}from"./card-BBIqLCR8.js";import{D as ae,a as te,d as le,e as ne}from"./dialog-if7Fez9x.js";import{S as z,e as I,f as M,a as D,c as h}from"./select-DJZwiot8.js";import{T as ie,d as re,e as K,c as p,a as ce,b as j}from"./table-BoLxzYJ7.js";import{T as oe}from"./table-skeleton-fqjGRt14.js";import{E as de}from"./empty-state-CCcgx4uH.js";import{P as xe}from"./pagination-bar-BuL5EI1J.js";import{u as me}from"./use-url-state-BBO3na5E.js";import{E as ue}from"./ellipsis-vertical-B-dHvJs4.js";import{a as he,Z as pe,M as je}from"./zoom-out-CizcPOe1.js";import"./vendor-xyflow-C2hOf6Vp.js";import"./check-BrJnpLnE.js";import"./chevron-up-hicU2AmB.js";import"./useControlled-C_2SAunx.js";import"./useRegisterFieldControl-BUFSeOf3.js";import"./useLabelableId-qP3If8Bd.js";import"./FormContext-CMyWQz7b.js";import"./chevron-left-C_tZtLI6.js";const fe={done:"default",pending:"secondary",failed:"destructive",skipped:"outline"},V=20;function O(a){return a?new Date(a).toLocaleString():"-"}function Ke(){var R,q,A,L;const{t:a}=$(),{get:o,getInt:n,set:g}=me(),i=o("kb_id")||null,d=o("doc_id")||null,r=o("status")||"all",c=n("page"),[x,b]=f.useState(null),[t,l]=f.useState(null),m=S({queryKey:["kb-kbs"],queryFn:()=>_.send("/admin/kb/knowledge-bases",{query:{page:"1",page_size:"50"}})}),Q=S({queryKey:["kb-docs-options",i],queryFn:()=>_.send("/admin/kb/documents",{query:{...i?{kb_id:i}:{},page:"1",page_size:"100"}})}),y=S({queryKey:["kb-images",i,d,r,c],queryFn:()=>_.send("/admin/kb/images",{query:{...i?{kb_id:i}:{},...d?{doc_id:d}:{},...r!=="all"?{status:r}:{},page:String(c),page_size:String(V)}}),refetchInterval:s=>{var k;return(((k=s.state.data)==null?void 0:k.items)??[]).some(v=>v.status==="pending")?5e3:!1}}),U=((R=m.data)==null?void 0:R.items)??[],P=((q=Q.data)==null?void 0:q.items)??[],E=((A=y.data)==null?void 0:A.items)??[],w=((L=y.data)==null?void 0:L.total)??0,Z=Math.max(1,Math.ceil(w/V)),u=s=>{const k=`kb.imageStatus.${s}`,v=a(k);return v===k?s:v};function C(s){g({...s,doc_id:"kb_id"in s?void 0:d??void 0,page:void 0})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(z,{value:i??"all",onValueChange:s=>C({kb_id:s&&s!=="all"?s:void 0}),items:[{value:"all",label:a("kb.allKbs")},...U.map(s=>({value:s.id,label:s.name}))],children:[e.jsx(I,{className:"w-52",children:e.jsx(M,{placeholder:a("kb.selectPlaceholder")})}),e.jsxs(D,{children:[e.jsx(h,{value:"all",children:a("kb.allKbs")}),U.map(s=>e.jsx(h,{value:s.id,children:s.name},s.id))]})]}),e.jsxs(z,{value:d??"all",onValueChange:s=>C({doc_id:s&&s!=="all"?s:void 0}),items:[{value:"all",label:a("kb.allDocs")},...P.map(s=>({value:s.id,label:s.title}))],children:[e.jsx(I,{className:"w-52",children:e.jsx(M,{placeholder:a("kb.allDocs")})}),e.jsxs(D,{children:[e.jsx(h,{value:"all",children:a("kb.allDocs")}),P.map(s=>e.jsx(h,{value:s.id,children:s.title},s.id))]})]}),e.jsxs(z,{value:r,onValueChange:s=>C({status:s&&s!=="all"?s:void 0}),items:{all:a("kb.allStatus"),pending:u("pending"),done:u("done"),failed:u("failed"),skipped:u("skipped")},children:[e.jsx(I,{className:"w-36",children:e.jsx(M,{})}),e.jsxs(D,{children:[e.jsx(h,{value:"all",children:a("kb.allStatus")}),e.jsx(h,{value:"pending",children:u("pending")}),e.jsx(h,{value:"done",children:u("done")}),e.jsx(h,{value:"failed",children:u("failed")}),e.jsx(h,{value:"skipped",children:u("skipped")})]})]})]}),y.isLoading?e.jsx(oe,{rows:6}):E.length===0?e.jsx(de,{icon:T,title:a("kb.noImages"),description:a("kb.noImagesDesc")}):e.jsx(ee,{children:e.jsx(se,{className:"p-0",children:e.jsxs(ie,{children:[e.jsx(re,{children:e.jsxs(K,{children:[e.jsx(p,{className:"w-20",children:a("kb.imageThumb")}),e.jsx(p,{children:a("layout.kb")}),e.jsx(p,{children:a("kb.title")}),e.jsx(p,{className:"w-16",children:a("kb.pageCol")}),e.jsx(p,{className:"w-24",children:a("kb.state")}),e.jsx(p,{children:a("kb.recognition")}),e.jsx(p,{children:a("kb.createdAtCol")}),e.jsx(p,{children:a("kb.updatedAt")}),e.jsx(p,{className:"text-end",children:a("common.actions")})]})}),e.jsx(ce,{children:E.map(s=>e.jsxs(K,{children:[e.jsx(j,{children:e.jsx("button",{type:"button",className:"block h-12 w-16 overflow-hidden rounded border bg-muted/40",title:a("kb.imagePreview"),onClick:()=>b(s),children:e.jsx(be,{row:s})})}),e.jsx(j,{className:"whitespace-nowrap text-muted-foreground",children:s.kb_name??"-"}),e.jsx(j,{className:"max-w-48",children:e.jsx("span",{className:"block truncate",title:s.doc_title??"",children:s.doc_title??"-"})}),e.jsx(j,{className:"text-muted-foreground",children:s.page??"-"}),e.jsxs(j,{children:[e.jsx(J,{variant:fe[s.status]??"secondary",children:u(s.status)}),s.status==="failed"&&s.error&&e.jsx("div",{className:"max-w-48 truncate text-xs text-destructive",title:s.error,children:s.error})]}),e.jsx(j,{className:"max-w-96",children:s.caption?e.jsx("span",{className:"block truncate text-muted-foreground",title:s.caption,children:s.caption}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),e.jsx(j,{className:"whitespace-nowrap text-xs text-muted-foreground",children:O(s.created_at)}),e.jsx(j,{className:"whitespace-nowrap text-xs text-muted-foreground",children:O(s.updated_at)}),e.jsx(j,{className:"text-end",children:e.jsxs(H,{children:[e.jsx(Y,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:e.jsx(ue,{className:"size-4"})}),e.jsxs(X,{align:"end",children:[e.jsxs(B,{onClick:()=>l(s),children:[e.jsx(G,{className:"size-4 me-2"}),a("kb.imageContent")]}),e.jsxs(B,{onClick:()=>b(s),children:[e.jsx(T,{className:"size-4 me-2"}),a("kb.imagePreview")]})]})]})})]},s.id))})]})})}),w>0&&e.jsx(xe,{page:c,totalPages:Z,total:w,onPageChange:s=>g({page:s===1?void 0:String(s)})}),e.jsx(ae,{open:!!t,onOpenChange:s=>{s||l(null)},children:e.jsxs(te,{className:"flex max-h-[85vh] flex-col sm:max-w-2xl",children:[e.jsx(le,{children:e.jsxs(ne,{children:[(t==null?void 0:t.doc_title)??""," · ",a("kb.pageCol")," ",(t==null?void 0:t.page)??"-"]})}),e.jsxs("div",{className:"min-h-0 flex-1 space-y-3 overflow-y-auto",children:[(t==null?void 0:t.caption)&&e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("kb.imageCaption")}),e.jsx("p",{className:"text-sm",children:t.caption})]}),(t==null?void 0:t.ocr_text)&&e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-muted-foreground",children:a("kb.imageOcr")}),e.jsx("pre",{className:"whitespace-pre-wrap rounded-md bg-muted/40 p-3 font-mono text-xs leading-relaxed",children:t.ocr_text})]}),(t==null?void 0:t.error)&&e.jsx("p",{className:"break-all text-xs text-destructive",children:t.error}),!(t!=null&&t.caption)&&!(t!=null&&t.ocr_text)&&!(t!=null&&t.error)&&e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:a("kb.imageStatus."+((t==null?void 0:t.status)??"pending"))})]})]})}),x&&e.jsx(ge,{row:x,onClose:()=>b(null)})]})}function F(a){const[o,n]=f.useState(null),[g,i]=f.useState(!1),d=(a==null?void 0:a.id)??null;return f.useEffect(()=>{if(!a){n(null),i(!1);return}if(a.source==="external"&&a.original_url){n(a.original_url),i(!1);return}let r=null,c=!0;return n(null),i(!1),W(`/admin/kb/images/${a.id}/preview`).then(x=>{c?(r=x,n(x)):URL.revokeObjectURL(x)}).catch(()=>{c&&i(!0)}),()=>{c=!1,r&&URL.revokeObjectURL(r)}},[d]),{url:o,error:g}}function be({row:a}){const{url:o,error:n}=F(a);return n?e.jsx("span",{className:"flex h-full w-full items-center justify-center text-[10px] text-muted-foreground",children:"N/A"}):o?e.jsx("img",{src:o,alt:"",className:"h-full w-full object-cover",loading:"lazy"}):e.jsx("span",{className:"flex h-full w-full items-center justify-center text-[10px] text-muted-foreground",children:"…"})}function ge({row:a,onClose:o}){const{t:n}=$(),{url:g,error:i}=F(a),[d,r]=f.useState(1),[c,x]=f.useState({x:0,y:0}),b=f.useRef(null);f.useEffect(()=>{r(1),x({x:0,y:0})},[a.id]);const t=l=>r(m=>Math.min(8,Math.max(.2,Math.round((m+l)*10)/10)));return e.jsxs("div",{className:"fixed inset-0 z-50 flex flex-col bg-black/85",onClick:l=>{l.target===l.currentTarget&&o()},onWheel:l=>{l.preventDefault(),t(l.deltaY<0?.2:-.2)},children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 p-3 text-white",children:[e.jsxs("span",{className:"truncate text-sm",children:[a.doc_title??""," · ",n("kb.pageCol")," ",a.page??"-"]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx(N,{size:"icon-xs",variant:"ghost",className:"text-white hover:bg-white/10",onClick:()=>t(-.2),title:n("kb.zoomOut"),children:e.jsx(he,{className:"size-4"})}),e.jsxs("span",{className:"w-12 text-center text-xs tabular-nums",children:[Math.round(d*100),"%"]}),e.jsx(N,{size:"icon-xs",variant:"ghost",className:"text-white hover:bg-white/10",onClick:()=>t(.2),title:n("kb.zoomIn"),children:e.jsx(pe,{className:"size-4"})}),e.jsx(N,{size:"icon-xs",variant:"ghost",className:"text-white hover:bg-white/10",onClick:()=>{r(1),x({x:0,y:0})},title:n("kb.zoomReset"),children:e.jsx(je,{className:"size-4"})}),e.jsx(N,{size:"sm",variant:"ghost",className:"text-white hover:bg-white/10",onClick:o,children:n("common.close")})]})]}),e.jsx("div",{className:"flex flex-1 cursor-grab items-center justify-center overflow-hidden active:cursor-grabbing",onMouseDown:l=>{d<=1||(b.current={x:l.clientX,y:l.clientY,ox:c.x,oy:c.y})},onMouseMove:l=>{const m=b.current;m&&x({x:m.ox+(l.clientX-m.x),y:m.oy+(l.clientY-m.y)})},onMouseUp:()=>{b.current=null},onMouseLeave:()=>{b.current=null},children:i?e.jsx("span",{className:"text-sm text-white/70",children:n("kb.imagePreviewUnavailable")}):g?e.jsx("img",{src:g,alt:a.caption??"image",draggable:!1,className:"max-h-full max-w-full select-none object-contain transition-transform duration-100",style:{transform:`translate(${c.x}px, ${c.y}px) scale(${d})`}}):e.jsx("span",{className:"text-sm text-white/70",children:"…"})})]})}export{Ke as default}; diff --git a/adminui/assets/index-CqbPRAud.js b/adminui/assets/index-BNHfsfmZ.js similarity index 96% rename from adminui/assets/index-CqbPRAud.js rename to adminui/assets/index-BNHfsfmZ.js index 92451385..be9d806a 100644 --- a/adminui/assets/index-CqbPRAud.js +++ b/adminui/assets/index-BNHfsfmZ.js @@ -1 +1 @@ -import{f,j as e}from"./vendor-react-j_G0Dyx0.js";import{cJ as q,n as v,q as S}from"./index-DFelzBez.js";import{C as L,a as z}from"./card-D3QxRGt-.js";import{I as o}from"./input-Bx5u8hTS.js";import{L as w}from"./label-DeKRRvpz.js";import{T as N}from"./textarea-Daa6n4S-.js";import{G as B}from"./grip-vertical-BHYRkqhd.js";import{C as E}from"./chevron-up-BHyyZ98X.js";import{P as b}from"./plus-DK-V8p7I.js";import{T as _}from"./trash-2-DqWZBWAo.js";const T=[{type:"hero",label:"Hero",icon:"🖼"},{type:"richtext",label:"Text",icon:"📝"},{type:"image",label:"Image",icon:"📷"},{type:"gallery",label:"Gallery",icon:"🖼"},{type:"video",label:"Video",icon:"🎬"},{type:"cta",label:"CTA",icon:"📢"},{type:"testimonial",label:"Testimonial",icon:"⭐"},{type:"faq",label:"FAQ",icon:"❓"},{type:"stats",label:"Stats",icon:"📊"},{type:"timeline",label:"Timeline",icon:"⏱"},{type:"team",label:"Team",icon:"👥"},{type:"pricing",label:"Pricing",icon:"💰"},{type:"contact_form",label:"Form",icon:"📮"},{type:"map",label:"Map",icon:"📍"},{type:"code",label:"Code",icon:"📋"},{type:"quote",label:"Quote",icon:"💬"},{type:"divider",label:"Divider",icon:"➖"},{type:"spacer",label:"Spacer",icon:"↕️"},{type:"columns",label:"Columns",icon:"📦"},{type:"html",label:"HTML",icon:"🌐"},{type:"reusable",label:"Reusable",icon:"🔄"}];function H({blocks:t,onChange:n}){const{t:u}=q(),[l,a]=f.useState(!1),[g,r]=f.useState(-1),d=f.useCallback((i,p)=>{const x=[...t];x[i]=p,n(x)},[t,n]),s=f.useCallback(i=>{n(t.filter((p,x)=>x!==i))},[t,n]),c=f.useCallback((i,p)=>{const x=i+p;if(x<0||x>=t.length)return;const j=[...t];[j[i],j[x]]=[j[x],j[i]],n(j)},[t,n]);function m(i){const x={hero:{type:"hero",title:"",subtitle:"",height:"md"},richtext:{type:"richtext",content:""},image:{type:"image",url:"",alt:""},gallery:{type:"gallery",images:[]},video:{type:"video",url:""},cta:{type:"cta",title:"",button_text:"",button_url:""},testimonial:{type:"testimonial",items:[]},faq:{type:"faq",items:[]},stats:{type:"stats",items:[]},timeline:{type:"timeline",items:[]},team:{type:"team",members:[]},pricing:{type:"pricing",plans:[]},contact_form:{type:"contact_form",fields:[{name:"name",label:"Name",field_type:"text",required:!0},{name:"email",label:"Email",field_type:"email",required:!0},{name:"message",label:"Message",field_type:"textarea",required:!0}],submit_text:""},map:{type:"map",address:"",lat:"",lng:"",zoom:14},code:{type:"code",code:"",language:""},quote:{type:"quote",content:""},divider:{type:"divider",style:"solid"},spacer:{type:"spacer",height:"md"},columns:{type:"columns",columns:[{blocks:[]},{blocks:[]}]},html:{type:"html",content:""},reusable:{type:"reusable",ref_id:""}}[i]??{type:i},j=g>=0?g:t.length,C=[...t];C.splice(j,0,x),n(C),a(!1),r(-1)}function h(i){const p=i.type,x=T.find(C=>C.type===p),j=i.title||i.content||"";return x?`${x.icon} ${x.label}${j?": "+j.slice(0,30):""}`:p}return e.jsxs("div",{className:"space-y-3",children:[t.map((i,p)=>e.jsx(L,{className:"group",children:e.jsxs(z,{className:"p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(B,{className:"size-4 text-muted-foreground cursor-grab"}),e.jsx("span",{className:"text-sm font-medium flex-1 truncate",children:h(i)}),e.jsxs("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>c(p,-1),disabled:p===0,children:e.jsx(E,{className:"size-3"})}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>c(p,1),disabled:p===t.length-1,children:e.jsx(S,{className:"size-3"})}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>{a(!0),r(p+1)},children:e.jsx(b,{className:"size-3"})}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>s(p),children:e.jsx(_,{className:"size-3"})})]})]}),e.jsx(F,{block:i,onChange:x=>d(p,x)})]})},p)),e.jsxs(v,{variant:"outline",className:"w-full border-dashed",onClick:()=>{a(!0),r(-1)},children:[e.jsx(b,{className:"size-4 me-2"}),u("pages.addBlock")]}),l&&e.jsx(L,{className:"border-primary/50",children:e.jsxs(z,{className:"p-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium",children:u("pages.chooseBlock")}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>{a(!1),r(-1)},children:"✕"})]}),e.jsx("div",{className:"grid grid-cols-4 gap-2",children:T.map(i=>e.jsxs("button",{type:"button",onClick:()=>m(i.type),className:"flex items-center gap-1.5 rounded-md border px-3 py-2 text-xs hover:bg-muted transition-colors text-left",children:[e.jsx("span",{children:i.icon}),e.jsx("span",{children:i.label})]},i.type))})]})})]})}function F({block:t,onChange:n}){const u=t.type;function l(a,g){n({...t,[a]:g})}switch(u){case"hero":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Title",value:t.title??"",onChange:a=>l("title",a.target.value)}),e.jsx(o,{placeholder:"Subtitle",value:t.subtitle??"",onChange:a=>l("subtitle",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"CTA Text",value:t.cta_text??"",onChange:a=>l("cta_text",a.target.value)}),e.jsx(o,{placeholder:"CTA URL",value:t.cta_url??"",onChange:a=>l("cta_url",a.target.value)})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Background Image",value:t.background_image??"",onChange:a=>l("background_image",a.target.value)}),e.jsxs("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:t.height??"md",onChange:a=>l("height",a.target.value),children:[e.jsx("option",{value:"sm",children:"Small"}),e.jsx("option",{value:"md",children:"Medium"}),e.jsx("option",{value:"lg",children:"Large"}),e.jsx("option",{value:"full",children:"Full"})]})]})]});case"richtext":return e.jsx(N,{rows:6,placeholder:"Markdown content...",value:t.content??"",onChange:a=>l("content",a.target.value)});case"image":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Image URL",value:t.url??"",onChange:a=>l("url",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Alt text",value:t.alt??"",onChange:a=>l("alt",a.target.value)}),e.jsx(o,{placeholder:"Caption",value:t.caption??"",onChange:a=>l("caption",a.target.value)})]})]});case"video":return e.jsx(o,{placeholder:"Video URL (YouTube / Bilibili)",value:t.url??"",onChange:a=>l("url",a.target.value)});case"cta":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Title",value:t.title??"",onChange:a=>l("title",a.target.value)}),e.jsx(o,{placeholder:"Description",value:t.description??"",onChange:a=>l("description",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Button Text",value:t.button_text??"",onChange:a=>l("button_text",a.target.value)}),e.jsx(o,{placeholder:"Button URL",value:t.button_url??"",onChange:a=>l("button_url",a.target.value)})]})]});case"code":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{rows:6,placeholder:"Code...",value:t.code??"",onChange:a=>l("code",a.target.value)}),e.jsx(o,{placeholder:"Language (js, rust, ...)",value:t.language??"",onChange:a=>l("language",a.target.value)})]});case"quote":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{rows:3,placeholder:"Quote...",value:t.content??"",onChange:a=>l("content",a.target.value)}),e.jsx(o,{placeholder:"Author",value:t.author??"",onChange:a=>l("author",a.target.value)})]});case"html":return e.jsx(N,{rows:6,placeholder:"
...
",value:t.content??"",onChange:a=>l("content",a.target.value)});case"divider":return e.jsxs("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:t.style??"solid",onChange:a=>l("style",a.target.value),children:[e.jsx("option",{value:"solid",children:"Solid"}),e.jsx("option",{value:"dashed",children:"Dashed"}),e.jsx("option",{value:"dotted",children:"Dotted"}),e.jsx("option",{value:"space",children:"Space"})]});case"spacer":return e.jsxs("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:t.height??"md",onChange:a=>l("height",a.target.value),children:[e.jsx("option",{value:"sm",children:"Small"}),e.jsx("option",{value:"md",children:"Medium"}),e.jsx("option",{value:"lg",children:"Large"}),e.jsx("option",{value:"xl",children:"Extra Large"})]});case"reusable":return e.jsx(o,{placeholder:"Reusable Block ID",value:t.ref_id??"",onChange:a=>l("ref_id",a.target.value)});case"map":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Address",value:t.address??"",onChange:a=>l("address",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Latitude",value:t.lat??"",onChange:a=>l("lat",a.target.value)}),e.jsx(o,{placeholder:"Longitude",value:t.lng??"",onChange:a=>l("lng",a.target.value)})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Zoom (1-20)",type:"number",min:1,max:20,value:t.zoom??14,onChange:a=>l("zoom",parseInt(a.target.value)||14)}),e.jsx(o,{placeholder:"Title",value:t.title??"",onChange:a=>l("title",a.target.value)})]})]});case"contact_form":return e.jsx(I,{block:t,onChange:n});case"columns":return e.jsx(M,{block:t,onChange:n});case"stats":return e.jsx(y,{block:t,field:"items",itemLabel:"Stat",fields:["label","value","suffix"],onChange:n});case"faq":return e.jsx(y,{block:t,field:"items",itemLabel:"FAQ",fields:["question","answer"],onChange:n});case"testimonial":return e.jsx(y,{block:t,field:"items",itemLabel:"Testimonial",fields:["quote","author","company"],onChange:n});case"timeline":return e.jsx(y,{block:t,field:"items",itemLabel:"Event",fields:["date","title","description"],onChange:n});case"team":return e.jsx(y,{block:t,field:"members",itemLabel:"Member",fields:["name","role","avatar"],onChange:n});case"pricing":return e.jsx(y,{block:t,field:"plans",itemLabel:"Plan",fields:["name","price","period"],onChange:n});case"gallery":return e.jsx(y,{block:t,field:"images",itemLabel:"Image",fields:["url","alt","caption"],onChange:n});default:return e.jsx(N,{rows:4,value:JSON.stringify(t,null,2),onChange:a=>{try{n(JSON.parse(a.target.value))}catch{}}})}}function y({block:t,field:n,itemLabel:u,fields:l,onChange:a}){const g=t[n]??[];function r(c,m,h){const i=[...g];i[c]={...i[c],[m]:h},a({...t,[n]:i})}function d(){const c=[...g,Object.fromEntries(l.map(m=>[m,""]))];a({...t,[n]:c})}function s(c){a({...t,[n]:g.filter((m,h)=>h!==c)})}return e.jsxs("div",{className:"space-y-2",children:[g.map((c,m)=>e.jsxs("div",{className:"flex items-start gap-2 p-2 rounded border",children:[e.jsx("div",{className:"flex-1 grid grid-cols-2 gap-2",children:l.map(h=>e.jsx(o,{placeholder:h,value:c[h]??"",onChange:i=>r(m,h,i.target.value)},h))}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>s(m),children:e.jsx(_,{className:"size-3"})})]},m)),e.jsxs(v,{variant:"outline",size:"sm",onClick:d,children:[e.jsx(b,{className:"size-3 me-1"}),u]})]})}const A=["text","email","textarea","tel","number","url","select"];function I({block:t,onChange:n}){const u=t.fields??[];function l(r,d,s){const c=[...u];c[r]={...c[r],[d]:s},n({...t,fields:c})}function a(){n({...t,fields:[...u,{name:"",label:"",field_type:"text",required:!1}]})}function g(r){n({...t,fields:u.filter((d,s)=>s!==r)})}return e.jsxs("div",{className:"space-y-3",children:[u.map((r,d)=>e.jsxs("div",{className:"flex items-start gap-2 p-2 rounded border",children:[e.jsxs("div",{className:"flex-1 grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Field name",value:r.name,onChange:s=>l(d,"name",s.target.value)}),e.jsx(o,{placeholder:"Label",value:r.label,onChange:s=>l(d,"label",s.target.value)}),e.jsx("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:r.field_type,onChange:s=>l(d,"field_type",s.target.value),children:A.map(s=>e.jsx("option",{value:s,children:s},s))}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("label",{className:"flex items-center gap-1.5 text-sm",children:[e.jsx("input",{type:"checkbox",checked:r.required??!1,onChange:s=>l(d,"required",s.target.checked)}),"Required"]})}),r.field_type==="select"&&e.jsx(o,{className:"col-span-2",placeholder:"Options (comma separated)",value:r.options??"",onChange:s=>l(d,"options",s.target.value)})]}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>g(d),children:e.jsx(_,{className:"size-3"})})]},d)),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(v,{variant:"outline",size:"sm",onClick:a,children:[e.jsx(b,{className:"size-3 me-1"}),"Field"]}),e.jsx(o,{placeholder:"Submit button text",value:t.submit_text??"",onChange:r=>n({...t,submit_text:r.target.value}),className:"max-w-xs"})]})]})}function M({block:t,onChange:n}){const u=t.columns??[{blocks:[]},{blocks:[]}];function l(r,d){const s=[...u];s[r]={...s[r],blocks:d},n({...t,columns:s})}function a(){n({...t,columns:[...u,{blocks:[]}]})}function g(r){u.length<=1||n({...t,columns:u.filter((d,s)=>s!==r)})}return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsxs(w,{className:"text-xs text-muted-foreground",children:[u.length," columns"]}),e.jsxs(v,{variant:"outline",size:"sm",onClick:a,disabled:u.length>=6,children:[e.jsx(b,{className:"size-3 me-1"}),"Column"]})]}),e.jsx("div",{className:"grid gap-2",style:{gridTemplateColumns:`repeat(${u.length}, 1fr)`},children:u.map((r,d)=>e.jsxs("div",{className:"rounded border p-2 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-xs font-medium text-muted-foreground",children:["Col ",d+1]}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>g(d),disabled:u.length<=1,children:e.jsx(_,{className:"size-3"})})]}),e.jsx(P,{blocks:r.blocks,onChange:s=>l(d,s)})]},d))})]})}function P({blocks:t,onChange:n}){const[u,l]=f.useState(!1);function a(s){const c={richtext:{type:"richtext",content:""},image:{type:"image",url:"",alt:""},video:{type:"video",url:""},code:{type:"code",code:"",language:""},html:{type:"html",content:""},quote:{type:"quote",content:""}};n([...t,c[s]??{type:s,content:""}]),l(!1)}function g(s){n(t.filter((c,m)=>m!==s))}function r(s,c){const m=s+c;if(m<0||m>=t.length)return;const h=[...t];[h[s],h[m]]=[h[m],h[s]],n(h)}const d=[{type:"richtext",label:"Text",icon:"📝"},{type:"image",label:"Image",icon:"📷"},{type:"video",label:"Video",icon:"🎬"},{type:"code",label:"Code",icon:"📋"},{type:"html",label:"HTML",icon:"🌐"},{type:"quote",label:"Quote",icon:"💬"}];return e.jsxs("div",{className:"space-y-1",children:[t.map((s,c)=>{const m=s;return e.jsxs("div",{className:"flex items-center gap-1 text-xs bg-muted/50 rounded px-1.5 py-1",children:[e.jsxs("span",{className:"flex-1 truncate",children:[String(m.type),": ",String(m.content??m.url??"").slice(0,20)]}),e.jsx("button",{type:"button",className:"hover:text-primary",onClick:()=>r(c,-1),children:"↑"}),e.jsx("button",{type:"button",className:"hover:text-primary",onClick:()=>r(c,1),children:"↓"}),e.jsx("button",{type:"button",className:"hover:text-destructive",onClick:()=>g(c),children:"✕"})]},c)}),u?e.jsx("div",{className:"grid grid-cols-3 gap-1",children:d.map(s=>e.jsxs("button",{type:"button",onClick:()=>a(s.type),className:"text-xs rounded border px-1.5 py-1 hover:bg-muted",children:[s.icon," ",s.label]},s.type))}):e.jsx("button",{type:"button",onClick:()=>l(!0),className:"text-xs text-muted-foreground hover:text-primary w-full text-center py-1 border border-dashed rounded",children:"+ Add"})]})}export{H as B}; +import{f,j as e}from"./vendor-react-j_G0Dyx0.js";import{cK as q,n as v,q as S}from"./index-C-uFVPpg.js";import{C as L,a as z}from"./card-BBIqLCR8.js";import{I as o}from"./input-Bp1SimRr.js";import{L as w}from"./label-DiZ0cGhf.js";import{T as N}from"./textarea-BhaIg3vS.js";import{G as B}from"./grip-vertical-BFYOA9qd.js";import{C as E}from"./chevron-up-hicU2AmB.js";import{P as b}from"./plus-FYsVFl-s.js";import{T as _}from"./trash-2-BZ2bkzqQ.js";const T=[{type:"hero",label:"Hero",icon:"🖼"},{type:"richtext",label:"Text",icon:"📝"},{type:"image",label:"Image",icon:"📷"},{type:"gallery",label:"Gallery",icon:"🖼"},{type:"video",label:"Video",icon:"🎬"},{type:"cta",label:"CTA",icon:"📢"},{type:"testimonial",label:"Testimonial",icon:"⭐"},{type:"faq",label:"FAQ",icon:"❓"},{type:"stats",label:"Stats",icon:"📊"},{type:"timeline",label:"Timeline",icon:"⏱"},{type:"team",label:"Team",icon:"👥"},{type:"pricing",label:"Pricing",icon:"💰"},{type:"contact_form",label:"Form",icon:"📮"},{type:"map",label:"Map",icon:"📍"},{type:"code",label:"Code",icon:"📋"},{type:"quote",label:"Quote",icon:"💬"},{type:"divider",label:"Divider",icon:"➖"},{type:"spacer",label:"Spacer",icon:"↕️"},{type:"columns",label:"Columns",icon:"📦"},{type:"html",label:"HTML",icon:"🌐"},{type:"reusable",label:"Reusable",icon:"🔄"}];function J({blocks:t,onChange:n}){const{t:u}=q(),[l,a]=f.useState(!1),[g,r]=f.useState(-1),d=f.useCallback((i,p)=>{const x=[...t];x[i]=p,n(x)},[t,n]),s=f.useCallback(i=>{n(t.filter((p,x)=>x!==i))},[t,n]),c=f.useCallback((i,p)=>{const x=i+p;if(x<0||x>=t.length)return;const j=[...t];[j[i],j[x]]=[j[x],j[i]],n(j)},[t,n]);function m(i){const x={hero:{type:"hero",title:"",subtitle:"",height:"md"},richtext:{type:"richtext",content:""},image:{type:"image",url:"",alt:""},gallery:{type:"gallery",images:[]},video:{type:"video",url:""},cta:{type:"cta",title:"",button_text:"",button_url:""},testimonial:{type:"testimonial",items:[]},faq:{type:"faq",items:[]},stats:{type:"stats",items:[]},timeline:{type:"timeline",items:[]},team:{type:"team",members:[]},pricing:{type:"pricing",plans:[]},contact_form:{type:"contact_form",fields:[{name:"name",label:"Name",field_type:"text",required:!0},{name:"email",label:"Email",field_type:"email",required:!0},{name:"message",label:"Message",field_type:"textarea",required:!0}],submit_text:""},map:{type:"map",address:"",lat:"",lng:"",zoom:14},code:{type:"code",code:"",language:""},quote:{type:"quote",content:""},divider:{type:"divider",style:"solid"},spacer:{type:"spacer",height:"md"},columns:{type:"columns",columns:[{blocks:[]},{blocks:[]}]},html:{type:"html",content:""},reusable:{type:"reusable",ref_id:""}}[i]??{type:i},j=g>=0?g:t.length,C=[...t];C.splice(j,0,x),n(C),a(!1),r(-1)}function h(i){const p=i.type,x=T.find(C=>C.type===p),j=i.title||i.content||"";return x?`${x.icon} ${x.label}${j?": "+j.slice(0,30):""}`:p}return e.jsxs("div",{className:"space-y-3",children:[t.map((i,p)=>e.jsx(L,{className:"group",children:e.jsxs(z,{className:"p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(B,{className:"size-4 text-muted-foreground cursor-grab"}),e.jsx("span",{className:"text-sm font-medium flex-1 truncate",children:h(i)}),e.jsxs("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>c(p,-1),disabled:p===0,children:e.jsx(E,{className:"size-3"})}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>c(p,1),disabled:p===t.length-1,children:e.jsx(S,{className:"size-3"})}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>{a(!0),r(p+1)},children:e.jsx(b,{className:"size-3"})}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>s(p),children:e.jsx(_,{className:"size-3"})})]})]}),e.jsx(F,{block:i,onChange:x=>d(p,x)})]})},p)),e.jsxs(v,{variant:"outline",className:"w-full border-dashed",onClick:()=>{a(!0),r(-1)},children:[e.jsx(b,{className:"size-4 me-2"}),u("pages.addBlock")]}),l&&e.jsx(L,{className:"border-primary/50",children:e.jsxs(z,{className:"p-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium",children:u("pages.chooseBlock")}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>{a(!1),r(-1)},children:"✕"})]}),e.jsx("div",{className:"grid grid-cols-4 gap-2",children:T.map(i=>e.jsxs("button",{type:"button",onClick:()=>m(i.type),className:"flex items-center gap-1.5 rounded-md border px-3 py-2 text-xs hover:bg-muted transition-colors text-left",children:[e.jsx("span",{children:i.icon}),e.jsx("span",{children:i.label})]},i.type))})]})})]})}function F({block:t,onChange:n}){const u=t.type;function l(a,g){n({...t,[a]:g})}switch(u){case"hero":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Title",value:t.title??"",onChange:a=>l("title",a.target.value)}),e.jsx(o,{placeholder:"Subtitle",value:t.subtitle??"",onChange:a=>l("subtitle",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"CTA Text",value:t.cta_text??"",onChange:a=>l("cta_text",a.target.value)}),e.jsx(o,{placeholder:"CTA URL",value:t.cta_url??"",onChange:a=>l("cta_url",a.target.value)})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Background Image",value:t.background_image??"",onChange:a=>l("background_image",a.target.value)}),e.jsxs("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:t.height??"md",onChange:a=>l("height",a.target.value),children:[e.jsx("option",{value:"sm",children:"Small"}),e.jsx("option",{value:"md",children:"Medium"}),e.jsx("option",{value:"lg",children:"Large"}),e.jsx("option",{value:"full",children:"Full"})]})]})]});case"richtext":return e.jsx(N,{rows:6,placeholder:"Markdown content...",value:t.content??"",onChange:a=>l("content",a.target.value)});case"image":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Image URL",value:t.url??"",onChange:a=>l("url",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Alt text",value:t.alt??"",onChange:a=>l("alt",a.target.value)}),e.jsx(o,{placeholder:"Caption",value:t.caption??"",onChange:a=>l("caption",a.target.value)})]})]});case"video":return e.jsx(o,{placeholder:"Video URL (YouTube / Bilibili)",value:t.url??"",onChange:a=>l("url",a.target.value)});case"cta":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Title",value:t.title??"",onChange:a=>l("title",a.target.value)}),e.jsx(o,{placeholder:"Description",value:t.description??"",onChange:a=>l("description",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Button Text",value:t.button_text??"",onChange:a=>l("button_text",a.target.value)}),e.jsx(o,{placeholder:"Button URL",value:t.button_url??"",onChange:a=>l("button_url",a.target.value)})]})]});case"code":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{rows:6,placeholder:"Code...",value:t.code??"",onChange:a=>l("code",a.target.value)}),e.jsx(o,{placeholder:"Language (js, rust, ...)",value:t.language??"",onChange:a=>l("language",a.target.value)})]});case"quote":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(N,{rows:3,placeholder:"Quote...",value:t.content??"",onChange:a=>l("content",a.target.value)}),e.jsx(o,{placeholder:"Author",value:t.author??"",onChange:a=>l("author",a.target.value)})]});case"html":return e.jsx(N,{rows:6,placeholder:"
...
",value:t.content??"",onChange:a=>l("content",a.target.value)});case"divider":return e.jsxs("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:t.style??"solid",onChange:a=>l("style",a.target.value),children:[e.jsx("option",{value:"solid",children:"Solid"}),e.jsx("option",{value:"dashed",children:"Dashed"}),e.jsx("option",{value:"dotted",children:"Dotted"}),e.jsx("option",{value:"space",children:"Space"})]});case"spacer":return e.jsxs("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:t.height??"md",onChange:a=>l("height",a.target.value),children:[e.jsx("option",{value:"sm",children:"Small"}),e.jsx("option",{value:"md",children:"Medium"}),e.jsx("option",{value:"lg",children:"Large"}),e.jsx("option",{value:"xl",children:"Extra Large"})]});case"reusable":return e.jsx(o,{placeholder:"Reusable Block ID",value:t.ref_id??"",onChange:a=>l("ref_id",a.target.value)});case"map":return e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{placeholder:"Address",value:t.address??"",onChange:a=>l("address",a.target.value)}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Latitude",value:t.lat??"",onChange:a=>l("lat",a.target.value)}),e.jsx(o,{placeholder:"Longitude",value:t.lng??"",onChange:a=>l("lng",a.target.value)})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Zoom (1-20)",type:"number",min:1,max:20,value:t.zoom??14,onChange:a=>l("zoom",parseInt(a.target.value)||14)}),e.jsx(o,{placeholder:"Title",value:t.title??"",onChange:a=>l("title",a.target.value)})]})]});case"contact_form":return e.jsx(I,{block:t,onChange:n});case"columns":return e.jsx(M,{block:t,onChange:n});case"stats":return e.jsx(y,{block:t,field:"items",itemLabel:"Stat",fields:["label","value","suffix"],onChange:n});case"faq":return e.jsx(y,{block:t,field:"items",itemLabel:"FAQ",fields:["question","answer"],onChange:n});case"testimonial":return e.jsx(y,{block:t,field:"items",itemLabel:"Testimonial",fields:["quote","author","company"],onChange:n});case"timeline":return e.jsx(y,{block:t,field:"items",itemLabel:"Event",fields:["date","title","description"],onChange:n});case"team":return e.jsx(y,{block:t,field:"members",itemLabel:"Member",fields:["name","role","avatar"],onChange:n});case"pricing":return e.jsx(y,{block:t,field:"plans",itemLabel:"Plan",fields:["name","price","period"],onChange:n});case"gallery":return e.jsx(y,{block:t,field:"images",itemLabel:"Image",fields:["url","alt","caption"],onChange:n});default:return e.jsx(N,{rows:4,value:JSON.stringify(t,null,2),onChange:a=>{try{n(JSON.parse(a.target.value))}catch{}}})}}function y({block:t,field:n,itemLabel:u,fields:l,onChange:a}){const g=t[n]??[];function r(c,m,h){const i=[...g];i[c]={...i[c],[m]:h},a({...t,[n]:i})}function d(){const c=[...g,Object.fromEntries(l.map(m=>[m,""]))];a({...t,[n]:c})}function s(c){a({...t,[n]:g.filter((m,h)=>h!==c)})}return e.jsxs("div",{className:"space-y-2",children:[g.map((c,m)=>e.jsxs("div",{className:"flex items-start gap-2 p-2 rounded border",children:[e.jsx("div",{className:"flex-1 grid grid-cols-2 gap-2",children:l.map(h=>e.jsx(o,{placeholder:h,value:c[h]??"",onChange:i=>r(m,h,i.target.value)},h))}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>s(m),children:e.jsx(_,{className:"size-3"})})]},m)),e.jsxs(v,{variant:"outline",size:"sm",onClick:d,children:[e.jsx(b,{className:"size-3 me-1"}),u]})]})}const A=["text","email","textarea","tel","number","url","select"];function I({block:t,onChange:n}){const u=t.fields??[];function l(r,d,s){const c=[...u];c[r]={...c[r],[d]:s},n({...t,fields:c})}function a(){n({...t,fields:[...u,{name:"",label:"",field_type:"text",required:!1}]})}function g(r){n({...t,fields:u.filter((d,s)=>s!==r)})}return e.jsxs("div",{className:"space-y-3",children:[u.map((r,d)=>e.jsxs("div",{className:"flex items-start gap-2 p-2 rounded border",children:[e.jsxs("div",{className:"flex-1 grid grid-cols-2 gap-2",children:[e.jsx(o,{placeholder:"Field name",value:r.name,onChange:s=>l(d,"name",s.target.value)}),e.jsx(o,{placeholder:"Label",value:r.label,onChange:s=>l(d,"label",s.target.value)}),e.jsx("select",{className:"flex h-9 rounded-md border border-input bg-background px-3 py-1 text-sm",value:r.field_type,onChange:s=>l(d,"field_type",s.target.value),children:A.map(s=>e.jsx("option",{value:s,children:s},s))}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("label",{className:"flex items-center gap-1.5 text-sm",children:[e.jsx("input",{type:"checkbox",checked:r.required??!1,onChange:s=>l(d,"required",s.target.checked)}),"Required"]})}),r.field_type==="select"&&e.jsx(o,{className:"col-span-2",placeholder:"Options (comma separated)",value:r.options??"",onChange:s=>l(d,"options",s.target.value)})]}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>g(d),children:e.jsx(_,{className:"size-3"})})]},d)),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(v,{variant:"outline",size:"sm",onClick:a,children:[e.jsx(b,{className:"size-3 me-1"}),"Field"]}),e.jsx(o,{placeholder:"Submit button text",value:t.submit_text??"",onChange:r=>n({...t,submit_text:r.target.value}),className:"max-w-xs"})]})]})}function M({block:t,onChange:n}){const u=t.columns??[{blocks:[]},{blocks:[]}];function l(r,d){const s=[...u];s[r]={...s[r],blocks:d},n({...t,columns:s})}function a(){n({...t,columns:[...u,{blocks:[]}]})}function g(r){u.length<=1||n({...t,columns:u.filter((d,s)=>s!==r)})}return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsxs(w,{className:"text-xs text-muted-foreground",children:[u.length," columns"]}),e.jsxs(v,{variant:"outline",size:"sm",onClick:a,disabled:u.length>=6,children:[e.jsx(b,{className:"size-3 me-1"}),"Column"]})]}),e.jsx("div",{className:"grid gap-2",style:{gridTemplateColumns:`repeat(${u.length}, 1fr)`},children:u.map((r,d)=>e.jsxs("div",{className:"rounded border p-2 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-xs font-medium text-muted-foreground",children:["Col ",d+1]}),e.jsx(v,{variant:"ghost",size:"icon-sm",onClick:()=>g(d),disabled:u.length<=1,children:e.jsx(_,{className:"size-3"})})]}),e.jsx(P,{blocks:r.blocks,onChange:s=>l(d,s)})]},d))})]})}function P({blocks:t,onChange:n}){const[u,l]=f.useState(!1);function a(s){const c={richtext:{type:"richtext",content:""},image:{type:"image",url:"",alt:""},video:{type:"video",url:""},code:{type:"code",code:"",language:""},html:{type:"html",content:""},quote:{type:"quote",content:""}};n([...t,c[s]??{type:s,content:""}]),l(!1)}function g(s){n(t.filter((c,m)=>m!==s))}function r(s,c){const m=s+c;if(m<0||m>=t.length)return;const h=[...t];[h[s],h[m]]=[h[m],h[s]],n(h)}const d=[{type:"richtext",label:"Text",icon:"📝"},{type:"image",label:"Image",icon:"📷"},{type:"video",label:"Video",icon:"🎬"},{type:"code",label:"Code",icon:"📋"},{type:"html",label:"HTML",icon:"🌐"},{type:"quote",label:"Quote",icon:"💬"}];return e.jsxs("div",{className:"space-y-1",children:[t.map((s,c)=>{const m=s;return e.jsxs("div",{className:"flex items-center gap-1 text-xs bg-muted/50 rounded px-1.5 py-1",children:[e.jsxs("span",{className:"flex-1 truncate",children:[String(m.type),": ",String(m.content??m.url??"").slice(0,20)]}),e.jsx("button",{type:"button",className:"hover:text-primary",onClick:()=>r(c,-1),children:"↑"}),e.jsx("button",{type:"button",className:"hover:text-primary",onClick:()=>r(c,1),children:"↓"}),e.jsx("button",{type:"button",className:"hover:text-destructive",onClick:()=>g(c),children:"✕"})]},c)}),u?e.jsx("div",{className:"grid grid-cols-3 gap-1",children:d.map(s=>e.jsxs("button",{type:"button",onClick:()=>a(s.type),className:"text-xs rounded border px-1.5 py-1 hover:bg-muted",children:[s.icon," ",s.label]},s.type))}):e.jsx("button",{type:"button",onClick:()=>l(!0),className:"text-xs text-muted-foreground hover:text-primary w-full text-center py-1 border border-dashed rounded",children:"+ Add"})]})}export{J as B}; diff --git a/adminui/assets/index-C-uFVPpg.js b/adminui/assets/index-C-uFVPpg.js new file mode 100644 index 00000000..838fb41d --- /dev/null +++ b/adminui/assets/index-C-uFVPpg.js @@ -0,0 +1,493 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/login-B4LlQZSH.js","assets/vendor-react-j_G0Dyx0.js","assets/zod-YGny3e4W.js","assets/card-BBIqLCR8.js","assets/input-Bp1SimRr.js","assets/useControlled-C_2SAunx.js","assets/useRegisterFieldControl-BUFSeOf3.js","assets/useLabelableId-qP3If8Bd.js","assets/label-DiZ0cGhf.js","assets/sms-login-form-DhFaA5TX.js","assets/separator-VXjQ1TI2.js","assets/vendor-xyflow-C2hOf6Vp.js","assets/vendor-xyflow-BZV40eAE.css","assets/admin-login-H-w89DWS.js","assets/theme-toggle-zICv51PL.js","assets/circle-alert-nC4JTWNi.js","assets/setup-qB-ZcSCu.js","assets/tabs-DbCrogTH.js","assets/eye-off-B4aIdVJp.js","assets/eye-BjIZjYLa.js","assets/register-BJXo-7l5.js","assets/dashboard-C0Qo_lZ1.js","assets/vendor-charts-KgA3E3bV.js","assets/table-BoLxzYJ7.js","assets/dollar-sign-T34glauG.js","assets/trending-up-BP8P_gCl.js","assets/posts-DjIWo5qw.js","assets/use-url-state-BBO3na5E.js","assets/useMutation-BlIm5cor.js","assets/badge-Dhxp0jil.js","assets/checkbox-CP5mLBLk.js","assets/check-BrJnpLnE.js","assets/FormContext-CMyWQz7b.js","assets/useAriaLabelledBy-BpS7IJWF.js","assets/types-C-xO67t8.js","assets/alert-dialog-C8VouOFc.js","assets/pagination-bar-BuL5EI1J.js","assets/chevron-left-C_tZtLI6.js","assets/table-skeleton-fqjGRt14.js","assets/empty-state-CCcgx4uH.js","assets/list-filter-BT2bcL5X.js","assets/select-DJZwiot8.js","assets/chevron-up-hicU2AmB.js","assets/send-CR0YI54n.js","assets/archive-jZZoXCGk.js","assets/trash-2-BZ2bkzqQ.js","assets/plus-FYsVFl-s.js","assets/ellipsis-vertical-B-dHvJs4.js","assets/pencil-xelQXmMG.js","assets/categories-GpkyeRPK.js","assets/textarea-BhaIg3vS.js","assets/category-tree-select-BQ9oz5Sd.js","assets/folder-open-CRex8He5.js","assets/file-DTh4jxeH.js","assets/tree-DGdzL6oK.js","assets/vendor-md-editor-vOqM56Ks.js","assets/vendor-md-editor-5RsN_0Ue.css","assets/tags-J4OwPYS7.js","assets/dialog-if7Fez9x.js","assets/comments-CDaESYiI.js","assets/circle-check-big-WjXNJO8D.js","assets/circle-x-D4bMzyXK.js","assets/media-C8mP8oN4.js","assets/media-utils-8fvT1GGl.js","assets/type-oTYNOCGK.js","assets/upload-BbRPA2Fp.js","assets/copy-DRI8cFnN.js","assets/download-DAp88Hv9.js","assets/layout-grid-BdBqHXKm.js","assets/list-DB26GY3p.js","assets/pages-EgbhwC99.js","assets/page-Cg7y7Kkq.js","assets/content-types-CgI1zXD1.js","assets/api-config-sheet--dx-VZNy.js","assets/switch-DoovYEIg.js","assets/shield-D-KuMU6n.js","assets/save-Bhy1j3dM.js","assets/content-types-builder-CL72qfiG.js","assets/save-status-BJ1Wf1eC.js","assets/link-C3iEk-_n.js","assets/lock-CoJ0G9o5.js","assets/calendar-CO7BPWOR.js","assets/braces-DzImKT76.js","assets/content-types-list-BxsFZVzf.js","assets/field-renderer-RFQvRwv7.js","assets/multi-media-upload-JNDODXRR.js","assets/list-checks--lQS7OzB.js","assets/grip-vertical-BFYOA9qd.js","assets/shuffle-ubxqp0_q.js","assets/arrow-right-C66mthM0.js","assets/users-DBLDYjBO.js","assets/user-detail-BdZP_yx3.js","assets/plugins-6kc5g4Yx.js","assets/power-BpWucA9X.js","assets/refresh-cw-6xbzwvFF.js","assets/plugin-detail-C5OLDTay.js","assets/apps-BS0zrsMR.js","assets/shared-ZGOdmt3p.js","assets/app-install-DCTzw9Ws.js","assets/app-detail-CNxzT-fG.js","assets/rbac-CJe_j3ce.js","assets/use-resources-C1WLNyDu.js","assets/crons-kbM9vP_Z.js","assets/jobs-BmWHJuIh.js","assets/eraser-BrWrxyL9.js","assets/rotate-ccw-B1uc2XfE.js","assets/cron-form-CZqavXng.js","assets/code-editor-DjTus6iJ.js","assets/cron-detail-Beisq5yZ.js","assets/tenants-B1QuAbqS.js","assets/webhooks-QSrKMgBS.js","assets/chevrons-up-down-D2U8cLa1.js","assets/tokens-CYhHR40_.js","assets/calendar-eg-EvdVA.js","assets/workflows-DEmRNCQO.js","assets/play-eK32ao3n.js","assets/workflow-instances-DWkFWDNz.js","assets/audit-VczS4FwP.js","assets/date-range-picker-CGynAr_4.js","assets/options-gJEptUCW.js","assets/reusable-blocks-B4iQCovp.js","assets/products-DWDaE2xd.js","assets/product-categories-Bw-_CgFA.js","assets/orders-DR0TZjMv.js","assets/ban-D3I2e03r.js","assets/orders-detail-B7rTg3_o.js","assets/payments-DKXF0WFU.js","assets/payment-orders-BEqMRPhl.js","assets/payment-transactions-Dw72SmYj.js","assets/currencies-jD2_rWcM.js","assets/redemption-codes-OT03R8w-.js","assets/confirm-delete-dialog-4HgrRwRm.js","assets/user-picker-BxEouyi4.js","assets/wallets-B57sUmFo.js","assets/wallet-transactions-B6gZJlNU.js","assets/product-comments-DwXWKHCa.js","assets/coupons-BjX-Du0I.js","assets/shipping-templates-CRVvV3vR.js","assets/plans-DsKnqKJW.js","assets/channels-CqH_2QfQ.js","assets/channel-form-DT4ddSPj.js","assets/receipts-DM9UK-TS.js","assets/receipt-detail-BmJHOSiA.js","assets/api-clients-DLQk1tBd.js","assets/flows-BkPWResu.js","assets/use-workflow-events-8T1a_Ah8.js","assets/step-logs-BLt19Swa.js","assets/await-resume-panel-X1rwNg9S.js","assets/square-mdalbJDD.js","assets/flows-editor-B19Qa7XC.js","assets/zoom-out-CizcPOe1.js","assets/model-select-CfIsbs0T.js","assets/database-BWHgXN31.js","assets/hourglass-B0dHJz58.js","assets/instances-C3PiokYi.js","assets/apis-Cgr_khWE.js","assets/api-logs-Bdd-hSQR.js","assets/triggers-j9cD105I.js","assets/agents-BFqOyVx3.js","assets/brain-Dg6Cf5le.js","assets/channels-BXujz4N7.js","assets/models-0hYZqr9F.js","assets/logs-CcDJH0L3.js","assets/tokens-y9i6-pBk.js","assets/playground-DxLFyk-r.js","assets/bubble-86jLxXoi.js","assets/brain-circuit-D-nya_Iw.js","assets/kbs-CeO0Xzhn.js","assets/docs-Cy4sieSw.js","assets/chunks-C_53xzyV.js","assets/images-CjPrpsFb.js","assets/reader-CB6f3Czg.js","assets/chunker-preview-CLCr-h2g.js","assets/ask-playground-DvK63DT7.js","assets/wiki-DlZPswgP.js","assets/wiki-detail-BNy4Ei8Y.js","assets/faqs-CCMFtwu5.js","assets/gaps-CLumIROa.js","assets/diagnostics-CkEVl_O4.js","assets/search-test-Dr64VOSK.js","assets/engines-BgDeXEmX.js","assets/tokens-BSw8mmxr.js","assets/convert-C9hr-qBt.js","assets/recognize-C48Y6klC.js","assets/usage-CYDWwcOq.js","assets/agents-form-DgaR2FtU.js","assets/ai-tool-catalog-B8AGHhOB.js","assets/agents-usage-BEdf7HGj.js","assets/agents-memories-eXA5RphD.js","assets/skills-BRNsXRnl.js","assets/tools-CsXl2KMt.js","assets/sessions-2-u2IziX.js","assets/message-row-DqYhUcol.js","assets/debates-0wJDZ15Y.js","assets/playground-1jmHyu1V.js","assets/posts-new-BbDIW33u.js","assets/tag-input-DwdUOEGB.js","assets/posts-edit-mbIgHcpX.js","assets/pages-new-Dhju0Z8y.js","assets/index-BNHfsfmZ.js","assets/pages-edit-BgJkx370.js","assets/content-types-new-CgPM-paM.js","assets/content-types-edit-Cu-qOSWt.js","assets/workflow-editor-CPbyp8L4.js","assets/products-new-CyxlEwtO.js","assets/products-edit-C458gnKq.js","assets/product-categories-new-7fWq_zks.js","assets/product-categories-edit-Dd4nUqzD.js","assets/profile-m1PoAMjQ.js"])))=>i.map(i=>d[i]); +var Rg=Object.defineProperty;var Hl=t=>{throw TypeError(t)};var Ig=(t,e,o)=>e in t?Rg(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var Ue=(t,e,o)=>Ig(t,typeof e!="symbol"?e+"":e,o),Xs=(t,e,o)=>e.has(t)||Hl("Cannot "+o);var P=(t,e,o)=>(Xs(t,e,"read from private field"),o?o.call(t):e.get(t)),Te=(t,e,o)=>e.has(t)?Hl("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,o),ue=(t,e,o,n)=>(Xs(t,e,"write to private field"),n?n.call(t,o):e.set(t,o),o),Ne=(t,e,o)=>(Xs(t,e,"access private method"),o);var ja=(t,e,o,n)=>({set _(a){ue(t,e,a,o)},get _(){return P(t,e,n)}});import{f as c,j as l,R as oe,b as Od,a as Ts,r as Vt,i as Fg,l as Mg,u as Og,L as Ng,N as Ir,O as jg,e as Lg,d as K,c as _g,B as Ug}from"./vendor-react-j_G0Dyx0.js";import{r as zg,w as Bg}from"./vendor-xyflow-C2hOf6Vp.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function o(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=o(a);fetch(a.href,s)}})();const Vg="modulepreload",Hg=function(t){return"/admin/"+t},ql={},Z=function(e,o,n){let a=Promise.resolve();if(o&&o.length>0){let r=function(d){return Promise.all(d.map(p=>Promise.resolve(p).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};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"));a=r(o.map(d=>{if(d=Hg(d),d in ql)return;ql[d]=!0;const p=d.endsWith(".css"),u=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${u}`))return;const g=document.createElement("link");if(g.rel=p?"stylesheet":Vg,p||(g.as="script"),g.crossOrigin="",g.href=d,m&&g.setAttribute("nonce",m),document.head.appendChild(g),p)return new Promise((k,h)=>{g.addEventListener("load",k),g.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${d}`)))})}))}function s(r){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=r,window.dispatchEvent(i),!i.defaultPrevented)throw r}return a.then(r=>{for(const i of r||[])i.status==="rejected"&&s(i.reason);return e().catch(s)})};var Ta=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(){}},Yo,vo,Fn,Sd,qg=(Sd=class extends Ta{constructor(){super();Te(this,Yo);Te(this,vo);Te(this,Fn);ue(this,Fn,e=>{if(typeof window<"u"&&window.addEventListener){const o=()=>e();return window.addEventListener("visibilitychange",o,!1),()=>{window.removeEventListener("visibilitychange",o)}}})}onSubscribe(){P(this,vo)||this.setEventListener(P(this,Fn))}onUnsubscribe(){var e;this.hasListeners()||((e=P(this,vo))==null||e.call(this),ue(this,vo,void 0))}setEventListener(e){var o;ue(this,Fn,e),(o=P(this,vo))==null||o.call(this),ue(this,vo,e(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()}))}setFocused(e){P(this,Yo)!==e&&(ue(this,Yo,e),this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(o=>{o(e)})}isFocused(){var e;return typeof P(this,Yo)=="boolean"?P(this,Yo):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},Yo=new WeakMap,vo=new WeakMap,Fn=new WeakMap,Sd),hi=new qg,Wg={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t),setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)},Co,fi,Dd,Kg=(Dd=class{constructor(){Te(this,Co,Wg);Te(this,fi,!1)}setTimeoutProvider(t){ue(this,Co,t)}setTimeout(t,e){return P(this,Co).setTimeout(t,e)}clearTimeout(t){P(this,Co).clearTimeout(t)}setInterval(t,e){return P(this,Co).setInterval(t,e)}clearInterval(t){P(this,Co).clearInterval(t)}},Co=new WeakMap,fi=new WeakMap,Dd),$o=new Kg;function $g(t){setTimeout(t,0)}var Gg=typeof window>"u"||"Deno"in globalThis;function wt(){}function Jg(t,e){return typeof t=="function"?t(e):t}function Fr(t){return typeof t=="number"&&t>=0&&t!==1/0}function Nd(t,e){return Math.max(t+(e||0)-Date.now(),0)}function Ro(t,e){return typeof t=="function"?t(e):t}function It(t,e){return typeof t=="function"?t(e):t}function Wl(t,e){const{type:o="all",exact:n,fetchStatus:a,predicate:s,queryKey:r,stale:i}=t;if(r){if(n){if(e.queryHash!==bi(r,e.options))return!1}else if(!da(e.queryKey,r))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||a&&a!==e.state.fetchStatus||s&&!s(e))}function Kl(t,e){const{exact:o,status:n,predicate:a,mutationKey:s}=t;if(s){if(!e.options.mutationKey)return!1;if(o){if(ca(e.options.mutationKey)!==ca(s))return!1}else if(!da(e.options.mutationKey,s))return!1}return!(n&&e.state.status!==n||a&&!a(e))}function bi(t,e){return((e==null?void 0:e.queryKeyHashFn)||ca)(t)}function ca(t){return JSON.stringify(t,(e,o)=>Or(o)?Object.keys(o).sort().reduce((n,a)=>(n[a]=o[a],n),{}):o)}function da(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(e).every(o=>da(t[o],e[o])):!1}var Qg=Object.prototype.hasOwnProperty;function jd(t,e,o=0){if(t===e)return t;if(o>500)return e;const n=$l(t)&&$l(e);if(!n&&!(Or(t)&&Or(e)))return e;const s=(n?t:Object.keys(t)).length,r=n?e:Object.keys(e),i=r.length,m=n?new Array(i):{};let d=0;for(let p=0;p{$o.setTimeout(e,t)})}function Nr(t,e,o){return typeof o.structuralSharing=="function"?o.structuralSharing(t,e):o.structuralSharing!==!1?jd(t,e):e}function Zg(t,e,o=0){const n=[...t,e];return o&&n.length>o?n.slice(1):n}function Xg(t,e,o=0){const n=[e,...t];return o&&n.length>o?n.slice(0,-1):n}var yi=Symbol();function Ld(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 _d(t,e){return typeof t=="function"?t(...e):!!t}function ef(t,e,o){let n=!1,a;return Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(a??(a=e()),n||(n=!0,a.aborted?o():a.addEventListener("abort",o,{once:!0})),a)}),t}var ua=(()=>{let t=()=>Gg;return{isServer(){return t()},setIsServer(e){t=e}}})();function jr(){let t,e;const o=new Promise((a,s)=>{t=a,e=s});o.status="pending",o.catch(()=>{});function n(a){Object.assign(o,a),delete o.resolve,delete o.reject}return o.resolve=a=>{n({status:"fulfilled",value:a}),t(a)},o.reject=a=>{n({status:"rejected",reason:a}),e(a)},o}var tf=$g;function of(){let t=[],e=0,o=i=>{i()},n=i=>{i()},a=tf;const s=i=>{e?t.push(i):a(()=>{o(i)})},r=()=>{const i=t;t=[],i.length&&a(()=>{n(()=>{i.forEach(m=>{o(m)})})})};return{batch:i=>{let m;e++;try{m=i()}finally{e--,e||r()}return m},batchCalls:i=>(...m)=>{s(()=>{i(...m)})},schedule:s,setNotifyFunction:i=>{o=i},setBatchNotifyFunction:i=>{n=i},setScheduler:i=>{a=i}}}var lt=of(),Mn,To,On,Ad,nf=(Ad=class extends Ta{constructor(){super();Te(this,Mn,!0);Te(this,To);Te(this,On);ue(this,On,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(){P(this,To)||this.setEventListener(P(this,On))}onUnsubscribe(){var e;this.hasListeners()||((e=P(this,To))==null||e.call(this),ue(this,To,void 0))}setEventListener(e){var o;ue(this,On,e),(o=P(this,To))==null||o.call(this),ue(this,To,e(this.setOnline.bind(this)))}setOnline(e){P(this,Mn)!==e&&(ue(this,Mn,e),this.listeners.forEach(n=>{n(e)}))}isOnline(){return P(this,Mn)}},Mn=new WeakMap,To=new WeakMap,On=new WeakMap,Ad),is=new nf;function af(t){return Math.min(1e3*2**t,3e4)}function Ud(t){return(t??"online")==="online"?is.isOnline():!0}var Lr=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function zd(t){let e=!1,o=0,n;const a=jr(),s=()=>a.status!=="pending",r=y=>{var b;if(!s()){const w=new Lr(y);g(w),(b=t.onCancel)==null||b.call(t,w)}},i=()=>{e=!0},m=()=>{e=!1},d=()=>hi.isFocused()&&(t.networkMode==="always"||is.isOnline())&&t.canRun(),p=()=>Ud(t.networkMode)&&t.canRun(),u=y=>{s()||(n==null||n(),a.resolve(y))},g=y=>{s()||(n==null||n(),a.reject(y))},k=()=>new Promise(y=>{var b;n=w=>{(s()||d())&&y(w)},(b=t.onPause)==null||b.call(t)}).then(()=>{var y;n=void 0,s()||(y=t.onContinue)==null||y.call(t)}),h=()=>{if(s())return;let y;const b=o===0?t.initialPromise:void 0;try{y=b??t.fn()}catch(w){y=Promise.reject(w)}Promise.resolve(y).then(u).catch(w=>{var f;if(s())return;const C=t.retry??(ua.isServer()?0:3),v=t.retryDelay??af,T=typeof v=="function"?v(o,w):v,S=C===!0||typeof C=="number"&&od()?void 0:k()).then(()=>{e?g(w):h()})})};return{promise:a,status:()=>a.status,cancel:r,continue:()=>(n==null||n(),a),cancelRetry:i,continueRetry:m,canStart:p,start:()=>(p()?h():k().then(h),a)}}var Zo,xd,Bd=(xd=class{constructor(){Te(this,Zo)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Fr(this.gcTime)&&ue(this,Zo,$o.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(ua.isServer()?1/0:300*1e3))}clearGcTimeout(){P(this,Zo)!==void 0&&($o.clearTimeout(P(this,Zo)),ue(this,Zo,void 0))}},Zo=new WeakMap,xd);function sf(t){return{onFetch:(e,o)=>{var p,u,g,k,h;const n=e.options,a=(g=(u=(p=e.fetchOptions)==null?void 0:p.meta)==null?void 0:u.fetchMore)==null?void 0:g.direction,s=((k=e.state.data)==null?void 0:k.pages)||[],r=((h=e.state.data)==null?void 0:h.pageParams)||[];let i={pages:[],pageParams:[]},m=0;const d=async()=>{let y=!1;const b=v=>{ef(v,()=>e.signal,()=>y=!0)},w=Ld(e.options,e.fetchOptions),C=async(v,T,S)=>{if(y)return Promise.reject(e.signal.reason);if(T==null&&v.pages.length)return Promise.resolve(v);const A=(()=>{const B={client:e.client,queryKey:e.queryKey,pageParam:T,direction:S?"backward":"forward",meta:e.options.meta};return b(B),B})(),D=await w(A),{maxPages:F}=e.options,E=S?Xg:Zg;return{pages:E(v.pages,D,F),pageParams:E(v.pageParams,T,F)}};if(a&&s.length){const v=a==="backward",T=v?rf:Jl,S={pages:s,pageParams:r},f=T(n,S);i=await C(S,f,v)}else{const v=t??s.length;do{const T=m===0?r[0]??n.initialPageParam:Jl(n,i);if(m>0&&T==null)break;i=await C(i,T),m++}while(m{var y,b;return(b=(y=e.options).persister)==null?void 0:b.call(y,d,{client:e.client,queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},o)}:e.fetchFn=d}}}function Jl(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 rf(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 Nn,Xo,jn,Lt,en,rt,ya,tn,Rt,Vd,ro,Pd,lf=(Pd=class extends Bd{constructor(e){super();Te(this,Rt);Te(this,Nn);Te(this,Xo);Te(this,jn);Te(this,Lt);Te(this,en);Te(this,rt);Te(this,ya);Te(this,tn);ue(this,tn,!1),ue(this,ya,e.defaultOptions),this.setOptions(e.options),this.observers=[],ue(this,en,e.client),ue(this,Lt,P(this,en).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,ue(this,Xo,Yl(this.options)),this.state=e.state??P(this,Xo),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return P(this,Nn)}get promise(){var e;return(e=P(this,rt))==null?void 0:e.promise}setOptions(e){if(this.options={...P(this,ya),...e},e!=null&&e._type&&ue(this,Nn,e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const o=Yl(this.options);o.data!==void 0&&(this.setState(Ql(o.data,o.dataUpdatedAt)),ue(this,Xo,o))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&P(this,Lt).remove(this)}setData(e,o){const n=Nr(this.state.data,e,this.options);return Ne(this,Rt,ro).call(this,{data:n,type:"success",dataUpdatedAt:o==null?void 0:o.updatedAt,manual:o==null?void 0:o.manual}),n}setState(e){Ne(this,Rt,ro).call(this,{type:"setState",state:e})}cancel(e){var n,a;const o=(n=P(this,rt))==null?void 0:n.promise;return(a=P(this,rt))==null||a.cancel(e),o?o.then(wt).catch(wt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return P(this,Xo)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>It(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=>Ro(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:!Nd(this.state.dataUpdatedAt,e)}onFocus(){var o;const e=this.observers.find(n=>n.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(o=P(this,rt))==null||o.continue()}onOnline(){var o;const e=this.observers.find(n=>n.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(o=P(this,rt))==null||o.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),P(this,Lt).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(o=>o!==e),this.observers.length||(P(this,rt)&&(P(this,tn)||Ne(this,Rt,Vd).call(this)?P(this,rt).cancel({revert:!0}):P(this,rt).cancelRetry()),this.scheduleGc()),P(this,Lt).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Ne(this,Rt,ro).call(this,{type:"invalidate"})}async fetch(e,o){var d,p,u,g,k,h,y,b,w,C,v;if(this.state.fetchStatus!=="idle"&&((d=P(this,rt))==null?void 0:d.status())!=="rejected"){if(this.state.data!==void 0&&(o!=null&&o.cancelRefetch))this.cancel({silent:!0});else if(P(this,rt))return P(this,rt).continueRetry(),P(this,rt).promise}if(e&&this.setOptions(e),!this.options.queryFn){const T=this.observers.find(S=>S.options.queryFn);T&&this.setOptions(T.options)}const n=new AbortController,a=T=>{Object.defineProperty(T,"signal",{enumerable:!0,get:()=>(ue(this,tn,!0),n.signal)})},s=()=>{const T=Ld(this.options,o),f=(()=>{const A={client:P(this,en),queryKey:this.queryKey,meta:this.meta};return a(A),A})();return ue(this,tn,!1),this.options.persister?this.options.persister(T,f,this):T(f)},i=(()=>{const T={fetchOptions:o,options:this.options,queryKey:this.queryKey,client:P(this,en),state:this.state,fetchFn:s};return a(T),T})(),m=P(this,Nn)==="infinite"?sf(this.options.pages):this.options.behavior;m==null||m.onFetch(i,this),ue(this,jn,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((p=i.fetchOptions)==null?void 0:p.meta))&&Ne(this,Rt,ro).call(this,{type:"fetch",meta:(u=i.fetchOptions)==null?void 0:u.meta}),ue(this,rt,zd({initialPromise:o==null?void 0:o.initialPromise,fn:i.fetchFn,onCancel:T=>{T instanceof Lr&&T.revert&&this.setState({...P(this,jn),fetchStatus:"idle"}),n.abort()},onFail:(T,S)=>{Ne(this,Rt,ro).call(this,{type:"failed",failureCount:T,error:S})},onPause:()=>{Ne(this,Rt,ro).call(this,{type:"pause"})},onContinue:()=>{Ne(this,Rt,ro).call(this,{type:"continue"})},retry:i.options.retry,retryDelay:i.options.retryDelay,networkMode:i.options.networkMode,canRun:()=>!0}));try{const T=await P(this,rt).start();if(T===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(T),(k=(g=P(this,Lt).config).onSuccess)==null||k.call(g,T,this),(y=(h=P(this,Lt).config).onSettled)==null||y.call(h,T,this.state.error,this),T}catch(T){if(T instanceof Lr){if(T.silent)return P(this,rt).promise;if(T.revert){if(this.state.data===void 0)throw T;return this.state.data}}throw Ne(this,Rt,ro).call(this,{type:"error",error:T}),(w=(b=P(this,Lt).config).onError)==null||w.call(b,T,this),(v=(C=P(this,Lt).config).onSettled)==null||v.call(C,this.state.data,T,this),T}finally{this.scheduleGc()}}},Nn=new WeakMap,Xo=new WeakMap,jn=new WeakMap,Lt=new WeakMap,en=new WeakMap,rt=new WeakMap,ya=new WeakMap,tn=new WeakMap,Rt=new WeakSet,Vd=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},ro=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,...Hd(n.data,this.options),fetchMeta:e.meta??null};case"success":const a={...n,...Ql(e.data,e.dataUpdatedAt),dataUpdateCount:n.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return ue(this,jn,e.manual?a:void 0),a;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()}),P(this,Lt).notify({query:this,type:"updated",action:e})})},Pd);function Hd(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Ud(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function Ql(t,e){return{data:t,dataUpdatedAt:e??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Yl(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 yt,je,ka,gt,on,Ln,lo,So,wa,_n,Un,nn,an,Do,zn,Ve,aa,_r,Ur,zr,Br,Vr,Hr,qr,qd,Ed,cf=(Ed=class extends Ta{constructor(e,o){super();Te(this,Ve);Te(this,yt);Te(this,je);Te(this,ka);Te(this,gt);Te(this,on);Te(this,Ln);Te(this,lo);Te(this,So);Te(this,wa);Te(this,_n);Te(this,Un);Te(this,nn);Te(this,an);Te(this,Do);Te(this,zn,new Set);this.options=o,ue(this,yt,e),ue(this,So,null),ue(this,lo,jr()),this.bindMethods(),this.setOptions(o)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(P(this,je).addObserver(this),Zl(P(this,je),this.options)?Ne(this,Ve,aa).call(this):this.updateResult(),Ne(this,Ve,Br).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Wr(P(this,je),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Wr(P(this,je),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Ne(this,Ve,Vr).call(this),Ne(this,Ve,Hr).call(this),P(this,je).removeObserver(this)}setOptions(e){const o=this.options,n=P(this,je);if(this.options=P(this,yt).defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof It(this.options.enabled,P(this,je))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Ne(this,Ve,qr).call(this),P(this,je).setOptions(this.options),o._defaulted&&!Mr(this.options,o)&&P(this,yt).getQueryCache().notify({type:"observerOptionsUpdated",query:P(this,je),observer:this});const a=this.hasListeners();a&&Xl(P(this,je),n,this.options,o)&&Ne(this,Ve,aa).call(this),this.updateResult(),a&&(P(this,je)!==n||It(this.options.enabled,P(this,je))!==It(o.enabled,P(this,je))||Ro(this.options.staleTime,P(this,je))!==Ro(o.staleTime,P(this,je)))&&Ne(this,Ve,_r).call(this);const s=Ne(this,Ve,Ur).call(this);a&&(P(this,je)!==n||It(this.options.enabled,P(this,je))!==It(o.enabled,P(this,je))||s!==P(this,Do))&&Ne(this,Ve,zr).call(this,s)}getOptimisticResult(e){const o=P(this,yt).getQueryCache().build(P(this,yt),e),n=this.createResult(o,e);return uf(this,n)&&(ue(this,gt,n),ue(this,Ln,this.options),ue(this,on,P(this,je).state)),n}getCurrentResult(){return P(this,gt)}trackResult(e,o){return new Proxy(e,{get:(n,a)=>(this.trackProp(a),o==null||o(a),a==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&P(this,lo).status==="pending"&&P(this,lo).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(n,a))})}trackProp(e){P(this,zn).add(e)}getCurrentQuery(){return P(this,je)}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const o=P(this,yt).defaultQueryOptions(e),n=P(this,yt).getQueryCache().build(P(this,yt),o);return n.fetch().then(()=>this.createResult(n,o))}fetch(e){return Ne(this,Ve,aa).call(this,{...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),P(this,gt)))}createResult(e,o){var F;const n=P(this,je),a=this.options,s=P(this,gt),r=P(this,on),i=P(this,Ln),d=e!==n?e.state:P(this,ka),{state:p}=e;let u={...p},g=!1,k;if(o._optimisticResults){const E=this.hasListeners(),B=!E&&Zl(e,o),N=E&&Xl(e,n,o,a);(B||N)&&(u={...u,...Hd(p.data,e.options)}),o._optimisticResults==="isRestoring"&&(u.fetchStatus="idle")}let{error:h,errorUpdatedAt:y,status:b}=u;k=u.data;let w=!1;if(o.placeholderData!==void 0&&k===void 0&&b==="pending"){let E;s!=null&&s.isPlaceholderData&&o.placeholderData===(i==null?void 0:i.placeholderData)?(E=s.data,w=!0):E=typeof o.placeholderData=="function"?o.placeholderData((F=P(this,Un))==null?void 0:F.state.data,P(this,Un)):o.placeholderData,E!==void 0&&(b="success",k=Nr(s==null?void 0:s.data,E,o),g=!0)}if(o.select&&k!==void 0&&!w)if(s&&k===(r==null?void 0:r.data)&&o.select===P(this,wa))k=P(this,_n);else try{ue(this,wa,o.select),k=o.select(k),k=Nr(s==null?void 0:s.data,k,o),ue(this,_n,k),ue(this,So,null)}catch(E){ue(this,So,E)}P(this,So)&&(h=P(this,So),k=P(this,_n),y=Date.now(),b="error");const C=u.fetchStatus==="fetching",v=b==="pending",T=b==="error",S=v&&C,f=k!==void 0,D={status:b,fetchStatus:u.fetchStatus,isPending:v,isSuccess:b==="success",isError:T,isInitialLoading:S,isLoading:S,data:k,dataUpdatedAt:u.dataUpdatedAt,error:h,errorUpdatedAt:y,failureCount:u.fetchFailureCount,failureReason:u.fetchFailureReason,errorUpdateCount:u.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:u.dataUpdateCount>d.dataUpdateCount||u.errorUpdateCount>d.errorUpdateCount,isFetching:C,isRefetching:C&&!v,isLoadingError:T&&!f,isPaused:u.fetchStatus==="paused",isPlaceholderData:g,isRefetchError:T&&f,isStale:ki(e,o),refetch:this.refetch,promise:P(this,lo),isEnabled:It(o.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const E=D.data!==void 0,B=D.status==="error"&&!E,N=M=>{B?M.reject(D.error):E&&M.resolve(D.data)},x=()=>{const M=ue(this,lo,D.promise=jr());N(M)},q=P(this,lo);switch(q.status){case"pending":e.queryHash===n.queryHash&&N(q);break;case"fulfilled":(B||D.data!==q.value)&&x();break;case"rejected":(!B||D.error!==q.reason)&&x();break}}return D}updateResult(){const e=P(this,gt),o=this.createResult(P(this,je),this.options);if(ue(this,on,P(this,je).state),ue(this,Ln,this.options),P(this,on).data!==void 0&&ue(this,Un,P(this,je)),Mr(o,e))return;ue(this,gt,o);const n=()=>{if(!e)return!0;const{notifyOnChangeProps:a}=this.options,s=typeof a=="function"?a():a;if(s==="all"||!s&&!P(this,zn).size)return!0;const r=new Set(s??P(this,zn));return this.options.throwOnError&&r.add("error"),Object.keys(P(this,gt)).some(i=>{const m=i;return P(this,gt)[m]!==e[m]&&r.has(m)})};Ne(this,Ve,qd).call(this,{listeners:n()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Ne(this,Ve,Br).call(this)}},yt=new WeakMap,je=new WeakMap,ka=new WeakMap,gt=new WeakMap,on=new WeakMap,Ln=new WeakMap,lo=new WeakMap,So=new WeakMap,wa=new WeakMap,_n=new WeakMap,Un=new WeakMap,nn=new WeakMap,an=new WeakMap,Do=new WeakMap,zn=new WeakMap,Ve=new WeakSet,aa=function(e){Ne(this,Ve,qr).call(this);let o=P(this,je).fetch(this.options,e);return e!=null&&e.throwOnError||(o=o.catch(wt)),o},_r=function(){Ne(this,Ve,Vr).call(this);const e=Ro(this.options.staleTime,P(this,je));if(ua.isServer()||P(this,gt).isStale||!Fr(e))return;const n=Nd(P(this,gt).dataUpdatedAt,e)+1;ue(this,nn,$o.setTimeout(()=>{P(this,gt).isStale||this.updateResult()},n))},Ur=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(P(this,je)):this.options.refetchInterval)??!1},zr=function(e){Ne(this,Ve,Hr).call(this),ue(this,Do,e),!(ua.isServer()||It(this.options.enabled,P(this,je))===!1||!Fr(P(this,Do))||P(this,Do)===0)&&ue(this,an,$o.setInterval(()=>{(this.options.refetchIntervalInBackground||hi.isFocused())&&Ne(this,Ve,aa).call(this)},P(this,Do)))},Br=function(){Ne(this,Ve,_r).call(this),Ne(this,Ve,zr).call(this,Ne(this,Ve,Ur).call(this))},Vr=function(){P(this,nn)!==void 0&&($o.clearTimeout(P(this,nn)),ue(this,nn,void 0))},Hr=function(){P(this,an)!==void 0&&($o.clearInterval(P(this,an)),ue(this,an,void 0))},qr=function(){const e=P(this,yt).getQueryCache().build(P(this,yt),this.options);if(e===P(this,je))return;const o=P(this,je);ue(this,je,e),ue(this,ka,e.state),this.hasListeners()&&(o==null||o.removeObserver(this),e.addObserver(this))},qd=function(e){lt.batch(()=>{e.listeners&&this.listeners.forEach(o=>{o(P(this,gt))}),P(this,yt).getQueryCache().notify({query:P(this,je),type:"observerResultsUpdated"})})},Ed);function df(t,e){return It(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&It(e.retryOnMount,t)===!1)}function Zl(t,e){return df(t,e)||t.state.data!==void 0&&Wr(t,e,e.refetchOnMount)}function Wr(t,e,o){if(It(e.enabled,t)!==!1&&Ro(e.staleTime,t)!=="static"){const n=typeof o=="function"?o(t):o;return n==="always"||n!==!1&&ki(t,e)}return!1}function Xl(t,e,o,n){return(t!==e||It(n.enabled,t)===!1)&&(!o.suspense||t.state.status!=="error")&&ki(t,o)}function ki(t,e){return It(e.enabled,t)!==!1&&t.isStaleByTime(Ro(e.staleTime,t))}function uf(t,e){return!Mr(t.getCurrentResult(),e)}var va,Jt,dt,sn,Qt,ko,Rd,pf=(Rd=class extends Bd{constructor(e){super();Te(this,Qt);Te(this,va);Te(this,Jt);Te(this,dt);Te(this,sn);ue(this,va,e.client),this.mutationId=e.mutationId,ue(this,dt,e.mutationCache),ue(this,Jt,[]),this.state=e.state||mf(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){P(this,Jt).includes(e)||(P(this,Jt).push(e),this.clearGcTimeout(),P(this,dt).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){ue(this,Jt,P(this,Jt).filter(o=>o!==e)),this.scheduleGc(),P(this,dt).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){P(this,Jt).length||(this.state.status==="pending"?this.scheduleGc():P(this,dt).remove(this))}continue(){var e;return((e=P(this,sn))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var r,i,m,d,p,u,g,k,h,y,b,w,C,v,T,S,f,A;const o=()=>{Ne(this,Qt,ko).call(this,{type:"continue"})},n={client:P(this,va),meta:this.options.meta,mutationKey:this.options.mutationKey};ue(this,sn,zd({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(new Error("No mutationFn found")),onFail:(D,F)=>{Ne(this,Qt,ko).call(this,{type:"failed",failureCount:D,error:F})},onPause:()=>{Ne(this,Qt,ko).call(this,{type:"pause"})},onContinue:o,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>P(this,dt).canRun(this)}));const a=this.state.status==="pending",s=!P(this,sn).canStart();try{if(a)o();else{Ne(this,Qt,ko).call(this,{type:"pending",variables:e,isPaused:s}),P(this,dt).config.onMutate&&await P(this,dt).config.onMutate(e,this,n);const F=await((i=(r=this.options).onMutate)==null?void 0:i.call(r,e,n));F!==this.state.context&&Ne(this,Qt,ko).call(this,{type:"pending",context:F,variables:e,isPaused:s})}const D=await P(this,sn).start();return await((d=(m=P(this,dt).config).onSuccess)==null?void 0:d.call(m,D,e,this.state.context,this,n)),await((u=(p=this.options).onSuccess)==null?void 0:u.call(p,D,e,this.state.context,n)),await((k=(g=P(this,dt).config).onSettled)==null?void 0:k.call(g,D,null,this.state.variables,this.state.context,this,n)),await((y=(h=this.options).onSettled)==null?void 0:y.call(h,D,null,e,this.state.context,n)),Ne(this,Qt,ko).call(this,{type:"success",data:D}),D}catch(D){try{await((w=(b=P(this,dt).config).onError)==null?void 0:w.call(b,D,e,this.state.context,this,n))}catch(F){Promise.reject(F)}try{await((v=(C=this.options).onError)==null?void 0:v.call(C,D,e,this.state.context,n))}catch(F){Promise.reject(F)}try{await((S=(T=P(this,dt).config).onSettled)==null?void 0:S.call(T,void 0,D,this.state.variables,this.state.context,this,n))}catch(F){Promise.reject(F)}try{await((A=(f=this.options).onSettled)==null?void 0:A.call(f,void 0,D,e,this.state.context,n))}catch(F){Promise.reject(F)}throw Ne(this,Qt,ko).call(this,{type:"error",error:D}),D}finally{P(this,dt).runNext(this)}}},va=new WeakMap,Jt=new WeakMap,dt=new WeakMap,sn=new WeakMap,Qt=new WeakSet,ko=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(()=>{P(this,Jt).forEach(n=>{n.onMutationUpdate(e)}),P(this,dt).notify({mutation:this,type:"updated",action:e})})},Rd);function mf(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var co,Bt,Ca,Id,gf=(Id=class extends Ta{constructor(e={}){super();Te(this,co);Te(this,Bt);Te(this,Ca);this.config=e,ue(this,co,new Set),ue(this,Bt,new Map),ue(this,Ca,0)}build(e,o,n){const a=new pf({client:e,mutationCache:this,mutationId:++ja(this,Ca)._,options:e.defaultMutationOptions(o),state:n});return this.add(a),a}add(e){P(this,co).add(e);const o=La(e);if(typeof o=="string"){const n=P(this,Bt).get(o);n?n.push(e):P(this,Bt).set(o,[e])}this.notify({type:"added",mutation:e})}remove(e){if(P(this,co).delete(e)){const o=La(e);if(typeof o=="string"){const n=P(this,Bt).get(o);if(n)if(n.length>1){const a=n.indexOf(e);a!==-1&&n.splice(a,1)}else n[0]===e&&P(this,Bt).delete(o)}}this.notify({type:"removed",mutation:e})}canRun(e){const o=La(e);if(typeof o=="string"){const n=P(this,Bt).get(o),a=n==null?void 0:n.find(s=>s.state.status==="pending");return!a||a===e}else return!0}runNext(e){var n;const o=La(e);if(typeof o=="string"){const a=(n=P(this,Bt).get(o))==null?void 0:n.find(s=>s!==e&&s.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){lt.batch(()=>{P(this,co).forEach(e=>{this.notify({type:"removed",mutation:e})}),P(this,co).clear(),P(this,Bt).clear()})}getAll(){return Array.from(P(this,co))}find(e){const o={exact:!0,...e};return this.getAll().find(n=>Kl(o,n))}findAll(e={}){return this.getAll().filter(o=>Kl(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))))}},co=new WeakMap,Bt=new WeakMap,Ca=new WeakMap,Id);function La(t){var e;return(e=t.options.scope)==null?void 0:e.id}var Yt,Fd,ff=(Fd=class extends Ta{constructor(e={}){super();Te(this,Yt);this.config=e,ue(this,Yt,new Map)}build(e,o,n){const a=o.queryKey,s=o.queryHash??bi(a,o);let r=this.get(s);return r||(r=new lf({client:e,queryKey:a,queryHash:s,options:e.defaultQueryOptions(o),state:n,defaultOptions:e.getQueryDefaults(a)}),this.add(r)),r}add(e){P(this,Yt).has(e.queryHash)||(P(this,Yt).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const o=P(this,Yt).get(e.queryHash);o&&(e.destroy(),o===e&&P(this,Yt).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){lt.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return P(this,Yt).get(e)}getAll(){return[...P(this,Yt).values()]}find(e){const o={exact:!0,...e};return this.getAll().find(n=>Wl(o,n))}findAll(e={}){const o=this.getAll();return Object.keys(e).length>0?o.filter(n=>Wl(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()})})}},Yt=new WeakMap,Fd),Ze,Ao,xo,Bn,Vn,Po,Hn,qn,Md,hf=(Md=class{constructor(t={}){Te(this,Ze);Te(this,Ao);Te(this,xo);Te(this,Bn);Te(this,Vn);Te(this,Po);Te(this,Hn);Te(this,qn);ue(this,Ze,t.queryCache||new ff),ue(this,Ao,t.mutationCache||new gf),ue(this,xo,t.defaultOptions||{}),ue(this,Bn,new Map),ue(this,Vn,new Map),ue(this,Po,0)}mount(){ja(this,Po)._++,P(this,Po)===1&&(ue(this,Hn,hi.subscribe(async t=>{t&&(await this.resumePausedMutations(),P(this,Ze).onFocus())})),ue(this,qn,is.subscribe(async t=>{t&&(await this.resumePausedMutations(),P(this,Ze).onOnline())})))}unmount(){var t,e;ja(this,Po)._--,P(this,Po)===0&&((t=P(this,Hn))==null||t.call(this),ue(this,Hn,void 0),(e=P(this,qn))==null||e.call(this),ue(this,qn,void 0))}isFetching(t){return P(this,Ze).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return P(this,Ao).findAll({...t,status:"pending"}).length}getQueryData(t){var o;const e=this.defaultQueryOptions({queryKey:t});return(o=P(this,Ze).get(e.queryHash))==null?void 0:o.state.data}ensureQueryData(t){const e=this.defaultQueryOptions(t),o=P(this,Ze).build(this,e),n=o.state.data;return n===void 0?this.fetchQuery(t):(t.revalidateIfStale&&o.isStaleByTime(Ro(e.staleTime,o))&&this.prefetchQuery(e),Promise.resolve(n))}getQueriesData(t){return P(this,Ze).findAll(t).map(({queryKey:e,state:o})=>{const n=o.data;return[e,n]})}setQueryData(t,e,o){const n=this.defaultQueryOptions({queryKey:t}),a=P(this,Ze).get(n.queryHash),s=a==null?void 0:a.state.data,r=Jg(e,s);if(r!==void 0)return P(this,Ze).build(this,n).setData(r,{...o,manual:!0})}setQueriesData(t,e,o){return lt.batch(()=>P(this,Ze).findAll(t).map(({queryKey:n})=>[n,this.setQueryData(n,e,o)]))}getQueryState(t){var o;const e=this.defaultQueryOptions({queryKey:t});return(o=P(this,Ze).get(e.queryHash))==null?void 0:o.state}removeQueries(t){const e=P(this,Ze);lt.batch(()=>{e.findAll(t).forEach(o=>{e.remove(o)})})}resetQueries(t,e){const o=P(this,Ze);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(()=>P(this,Ze).findAll(t).map(a=>a.cancel(o)));return Promise.all(n).then(wt).catch(wt)}invalidateQueries(t,e={}){return lt.batch(()=>(P(this,Ze).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(()=>P(this,Ze).findAll(t).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let s=a.fetch(void 0,o);return o.throwOnError||(s=s.catch(wt)),a.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=P(this,Ze).build(this,e);return o.isStaleByTime(Ro(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 is.isOnline()?P(this,Ao).resumePausedMutations():Promise.resolve()}getQueryCache(){return P(this,Ze)}getMutationCache(){return P(this,Ao)}getDefaultOptions(){return P(this,xo)}setDefaultOptions(t){ue(this,xo,t)}setQueryDefaults(t,e){P(this,Bn).set(ca(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...P(this,Bn).values()],o={};return e.forEach(n=>{da(t,n.queryKey)&&Object.assign(o,n.defaultOptions)}),o}setMutationDefaults(t,e){P(this,Vn).set(ca(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...P(this,Vn).values()],o={};return e.forEach(n=>{da(t,n.mutationKey)&&Object.assign(o,n.defaultOptions)}),o}defaultQueryOptions(t){if(t._defaulted)return t;const e={...P(this,xo).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:{...P(this,xo).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){P(this,Ze).clear(),P(this,Ao).clear()}},Ze=new WeakMap,Ao=new WeakMap,xo=new WeakMap,Bn=new WeakMap,Vn=new WeakMap,Po=new WeakMap,Hn=new WeakMap,qn=new WeakMap,Md),Wd=c.createContext(void 0),Kd=t=>{const e=c.useContext(Wd);if(!e)throw new Error("No QueryClient set, use QueryClientProvider to set one");return e},bf=({client:t,children:e})=>(c.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),l.jsx(Wd.Provider,{value:t,children:e})),$d=c.createContext(!1),yf=()=>c.useContext($d);$d.Provider;function kf(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var wf=c.createContext(kf()),vf=()=>c.useContext(wf),Cf=(t,e,o)=>{const n=o!=null&&o.state.error&&typeof t.throwOnError=="function"?_d(t.throwOnError,[o.state.error,o]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||n)&&(e.isReset()||(t.retryOnMount=!1))},Tf=t=>{c.useEffect(()=>{t.clearReset()},[t])},Sf=({result:t,errorResetBoundary:e,throwOnError:o,query:n,suspense:a})=>t.isError&&!e.isReset()&&!t.isFetching&&n&&(a&&t.data===void 0||_d(o,[t.error,n])),Df=t=>{if(t.suspense){const o=a=>a==="static"?a:Math.max(a??1e3,1e3),n=t.staleTime;t.staleTime=typeof n=="function"?(...a)=>o(n(...a)):o(n),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},Af=(t,e)=>t.isLoading&&t.isFetching&&!e,xf=(t,e)=>(t==null?void 0:t.suspense)&&e.isPending,ec=(t,e,o)=>e.fetchOptimistic(t).catch(()=>{o.clearReset()});function Pf(t,e,o){var k,h,y,b;const n=yf(),a=vf(),s=Kd(),r=s.defaultQueryOptions(t);(h=(k=s.getDefaultOptions().queries)==null?void 0:k._experimental_beforeQuery)==null||h.call(k,r);const i=s.getQueryCache().get(r.queryHash),m=t.subscribed!==!1;r._optimisticResults=n?"isRestoring":m?"optimistic":void 0,Df(r),Cf(r,a,i),Tf(a);const d=!s.getQueryCache().get(r.queryHash),[p]=c.useState(()=>new e(s,r)),u=p.getOptimisticResult(r),g=!n&&m;if(c.useSyncExternalStore(c.useCallback(w=>{const C=g?p.subscribe(lt.batchCalls(w)):wt;return p.updateResult(),C},[p,g]),()=>p.getCurrentResult(),()=>p.getCurrentResult()),c.useEffect(()=>{p.setOptions(r)},[r,p]),xf(r,u))throw ec(r,p,a);if(Sf({result:u,errorResetBoundary:a,throwOnError:r.throwOnError,query:i,suspense:r.suspense}))throw u.error;if((b=(y=s.getDefaultOptions().queries)==null?void 0:y._experimental_afterQuery)==null||b.call(y,r,u),r.experimental_prefetchInRender&&!ua.isServer()&&Af(u,n)){const w=d?ec(r,p,a):i==null?void 0:i.promise;w==null||w.catch(wt).finally(()=>{p.updateResult()})}return r.notifyOnChangeProps?u:p.trackResult(u)}function sa(t,e){return Pf(t,cf)}var Ef=(t,e,o,n,a,s,r,i)=>{let m=document.documentElement,d=["light","dark"];function p(k){(Array.isArray(t)?t:[t]).forEach(h=>{let y=h==="class",b=y&&s?a.map(w=>s[w]||w):a;y?(m.classList.remove(...b),m.classList.add(s&&s[k]?s[k]:k)):m.setAttribute(h,k)}),u(k)}function u(k){i&&d.includes(k)&&(m.style.colorScheme=k)}function g(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(n)p(n);else try{let k=localStorage.getItem(e)||o,h=r&&k==="system"?g():k;p(h)}catch{}},tc=["light","dark"],Gd="(prefers-color-scheme: dark)",Rf=typeof window>"u",wi=c.createContext(void 0),If={setTheme:t=>{},themes:[]},vi=()=>{var t;return(t=c.useContext(wi))!=null?t:If},Ff=t=>c.useContext(wi)?c.createElement(c.Fragment,null,t.children):c.createElement(Of,{...t}),Mf=["light","dark"],Of=({forcedTheme:t,disableTransitionOnChange:e=!1,enableSystem:o=!0,enableColorScheme:n=!0,storageKey:a="theme",themes:s=Mf,defaultTheme:r=o?"system":"light",attribute:i="data-theme",value:m,children:d,nonce:p,scriptProps:u})=>{let[g,k]=c.useState(()=>jf(a,r)),[h,y]=c.useState(()=>g==="system"?er():g),b=m?Object.values(m):s,w=c.useCallback(S=>{let f=S;if(!f)return;S==="system"&&o&&(f=er());let A=m?m[f]:f,D=e?Lf(p):null,F=document.documentElement,E=B=>{B==="class"?(F.classList.remove(...b),A&&F.classList.add(A)):B.startsWith("data-")&&(A?F.setAttribute(B,A):F.removeAttribute(B))};if(Array.isArray(i)?i.forEach(E):E(i),n){let B=tc.includes(r)?r:null,N=tc.includes(f)?f:B;F.style.colorScheme=N}D==null||D()},[p]),C=c.useCallback(S=>{let f=typeof S=="function"?S(g):S;k(f);try{localStorage.setItem(a,f)}catch{}},[g]),v=c.useCallback(S=>{let f=er(S);y(f),g==="system"&&o&&!t&&w("system")},[g,t]);c.useEffect(()=>{let S=window.matchMedia(Gd);return S.addListener(v),v(S),()=>S.removeListener(v)},[v]),c.useEffect(()=>{let S=f=>{f.key===a&&(f.newValue?k(f.newValue):C(r))};return window.addEventListener("storage",S),()=>window.removeEventListener("storage",S)},[C]),c.useEffect(()=>{w(t??g)},[t,g]);let T=c.useMemo(()=>({theme:g,setTheme:C,forcedTheme:t,resolvedTheme:g==="system"?h:g,themes:o?[...s,"system"]:s,systemTheme:o?h:void 0}),[g,C,t,h,o,s]);return c.createElement(wi.Provider,{value:T},c.createElement(Nf,{forcedTheme:t,storageKey:a,attribute:i,enableSystem:o,enableColorScheme:n,defaultTheme:r,value:m,themes:s,nonce:p,scriptProps:u}),d)},Nf=c.memo(({forcedTheme:t,storageKey:e,attribute:o,enableSystem:n,enableColorScheme:a,defaultTheme:s,value:r,themes:i,nonce:m,scriptProps:d})=>{let p=JSON.stringify([o,e,s,t,i,r,n,a]).slice(1,-1);return c.createElement("script",{...d,suppressHydrationWarning:!0,nonce:typeof window>"u"?m:"",dangerouslySetInnerHTML:{__html:`(${Ef.toString()})(${p})`}})}),jf=(t,e)=>{if(Rf)return;let o;try{o=localStorage.getItem(t)||void 0}catch{}return o||e},Lf=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)}},er=t=>(t||(t=window.matchMedia(Gd)),t.matches?"dark":"light");function _f(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 Uf=t=>{switch(t){case"success":return Vf;case"info":return qf;case"warning":return Hf;case"error":return Wf;default:return null}},zf=Array(12).fill(0),Bf=({visible:t,className:e})=>oe.createElement("div",{className:["sonner-loading-wrapper",e].filter(Boolean).join(" "),"data-visible":t},oe.createElement("div",{className:"sonner-spinner"},zf.map((o,n)=>oe.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),Vf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},oe.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"})),Hf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},oe.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"})),qf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},oe.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"})),Wf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},oe.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"})),Kf=oe.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"},oe.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),oe.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),$f=()=>{const[t,e]=oe.useState(document.hidden);return oe.useEffect(()=>{const o=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",o),()=>window.removeEventListener("visibilitychange",o)},[]),t};let Kr=1;class Gf{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,...a}=e,s=typeof(e==null?void 0:e.id)=="number"||((o=e.id)==null?void 0:o.length)>0?e.id:Kr++,r=this.toasts.find(m=>m.id===s),i=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(s)&&this.dismissedToasts.delete(s),r?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,...a,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 a=Promise.resolve(e instanceof Function?e():e);let s=n!==void 0,r;const i=a.then(async d=>{if(r=["resolve",d],oe.isValidElement(d))s=!1,this.create({id:n,type:"default",message:d});else if(Qf(d)&&!d.ok){s=!1;const u=typeof o.error=="function"?await o.error(`HTTP error! status: ${d.status}`):o.error,g=typeof o.description=="function"?await o.description(`HTTP error! status: ${d.status}`):o.description,h=typeof u=="object"&&!oe.isValidElement(u)?u:{message:u};this.create({id:n,type:"error",description:g,...h})}else if(d instanceof Error){s=!1;const u=typeof o.error=="function"?await o.error(d):o.error,g=typeof o.description=="function"?await o.description(d):o.description,h=typeof u=="object"&&!oe.isValidElement(u)?u:{message:u};this.create({id:n,type:"error",description:g,...h})}else if(o.success!==void 0){s=!1;const u=typeof o.success=="function"?await o.success(d):o.success,g=typeof o.description=="function"?await o.description(d):o.description,h=typeof u=="object"&&!oe.isValidElement(u)?u:{message:u};this.create({id:n,type:"success",description:g,...h})}}).catch(async d=>{if(r=["reject",d],o.error!==void 0){s=!1;const p=typeof o.error=="function"?await o.error(d):o.error,u=typeof o.description=="function"?await o.description(d):o.description,k=typeof p=="object"&&!oe.isValidElement(p)?p:{message:p};this.create({id:n,type:"error",description:u,...k})}}).finally(()=>{s&&(this.dismiss(n),n=void 0),o.finally==null||o.finally.call(o)}),m=()=>new Promise((d,p)=>i.then(()=>r[0]==="reject"?p(r[1]):d(r[1])).catch(p));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)||Kr++;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 kt=new Gf,Jf=(t,e)=>{const o=(e==null?void 0:e.id)||Kr++;return kt.addToast({title:t,...e,id:o}),o},Qf=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",Yf=Jf,Zf=()=>kt.toasts,Xf=()=>kt.getActiveToasts(),mR=Object.assign(Yf,{success:kt.success,info:kt.info,warning:kt.warning,error:kt.error,custom:kt.custom,message:kt.message,promise:kt.promise,dismiss:kt.dismiss,loading:kt.loading},{getHistory:Zf,getToasts:Xf});_f("[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 _a(t){return t.label!==void 0}const eh=3,th="24px",oh="16px",oc=4e3,nh=356,ah=14,sh=45,rh=200;function $t(...t){return t.filter(Boolean).join(" ")}function ih(t){const[e,o]=t.split("-"),n=[];return e&&n.push(e),o&&n.push(o),n}const lh=t=>{var e,o,n,a,s,r,i,m,d;const{invert:p,toast:u,unstyled:g,interacting:k,setHeights:h,visibleToasts:y,heights:b,index:w,toasts:C,expanded:v,removeToast:T,defaultRichColors:S,closeButton:f,style:A,cancelButtonStyle:D,actionButtonStyle:F,className:E="",descriptionClassName:B="",duration:N,position:x,gap:q,expandByDefault:M,classNames:j,icons:O,closeButtonAriaLabel:V="Close toast"}=t,[$,I]=oe.useState(null),[se,_]=oe.useState(null),[U,W]=oe.useState(!1),[z,H]=oe.useState(!1),[L,R]=oe.useState(!1),[Y,be]=oe.useState(!1),[De,G]=oe.useState(!1),[de,ce]=oe.useState(0),[we,te]=oe.useState(0),fe=oe.useRef(u.duration||N||oc),ne=oe.useRef(null),ee=oe.useRef(null),Ee=w===0,Ce=w+1<=y,ye=u.type,Pe=u.dismissible!==!1,pe=u.className||"",Q=u.descriptionClassName||"",ae=oe.useMemo(()=>b.findIndex(ve=>ve.toastId===u.id)||0,[b,u.id]),re=oe.useMemo(()=>{var ve;return(ve=u.closeButton)!=null?ve:f},[u.closeButton,f]),X=oe.useMemo(()=>u.duration||N||oc,[u.duration,N]),ke=oe.useRef(0),xe=oe.useRef(0),Ge=oe.useRef(0),Be=oe.useRef(null),[Qe,it]=x.split("-"),Nt=oe.useMemo(()=>b.reduce((ve,qe,We)=>We>=ae?ve:ve+qe.height,0),[b,ae]),qt=$f(),Wt=u.invert||p,ho=ye==="loading";xe.current=oe.useMemo(()=>ae*q+Nt,[ae,Nt]),oe.useEffect(()=>{fe.current=X},[X]),oe.useEffect(()=>{W(!0)},[]),oe.useEffect(()=>{const ve=ee.current;if(ve){const qe=ve.getBoundingClientRect().height;return te(qe),h(We=>[{toastId:u.id,height:qe,position:u.position},...We]),()=>h(We=>We.filter(et=>et.toastId!==u.id))}},[h,u.id]),oe.useLayoutEffect(()=>{if(!U)return;const ve=ee.current,qe=ve.style.height;ve.style.height="auto";const We=ve.getBoundingClientRect().height;ve.style.height=qe,te(We),h(et=>et.find($e=>$e.toastId===u.id)?et.map($e=>$e.toastId===u.id?{...$e,height:We}:$e):[{toastId:u.id,height:We,position:u.position},...et])},[U,u.title,u.description,h,u.id,u.jsx,u.action,u.cancel]);const xt=oe.useCallback(()=>{H(!0),ce(xe.current),h(ve=>ve.filter(qe=>qe.toastId!==u.id)),setTimeout(()=>{T(u)},rh)},[u,T,h,xe]);oe.useEffect(()=>{if(u.promise&&ye==="loading"||u.duration===1/0||u.type==="loading")return;let ve;return v||k||qt?(()=>{if(Ge.current{fe.current!==1/0&&(ke.current=new Date().getTime(),ve=setTimeout(()=>{u.onAutoClose==null||u.onAutoClose.call(u,u),xt()},fe.current))})(),()=>clearTimeout(ve)},[v,k,u,ye,qt,xt]),oe.useEffect(()=>{u.delete&&(xt(),u.onDismiss==null||u.onDismiss.call(u,u))},[xt,u.delete]);function kn(){var ve;if(O!=null&&O.loading){var qe;return oe.createElement("div",{className:$t(j==null?void 0:j.loader,u==null||(qe=u.classNames)==null?void 0:qe.loader,"sonner-loader"),"data-visible":ye==="loading"},O.loading)}return oe.createElement(Bf,{className:$t(j==null?void 0:j.loader,u==null||(ve=u.classNames)==null?void 0:ve.loader),visible:ye==="loading"})}const _e=u.icon||(O==null?void 0:O[ye])||Uf(ye);var ot,Pt;return oe.createElement("li",{tabIndex:0,ref:ee,className:$t(E,pe,j==null?void 0:j.toast,u==null||(e=u.classNames)==null?void 0:e.toast,j==null?void 0:j.default,j==null?void 0:j[ye],u==null||(o=u.classNames)==null?void 0:o[ye]),"data-sonner-toast":"","data-rich-colors":(ot=u.richColors)!=null?ot:S,"data-styled":!(u.jsx||u.unstyled||g),"data-mounted":U,"data-promise":!!u.promise,"data-swiped":De,"data-removed":z,"data-visible":Ce,"data-y-position":Qe,"data-x-position":it,"data-index":w,"data-front":Ee,"data-swiping":L,"data-dismissible":Pe,"data-type":ye,"data-invert":Wt,"data-swipe-out":Y,"data-swipe-direction":se,"data-expanded":!!(v||M&&U),"data-testid":u.testId,style:{"--index":w,"--toasts-before":w,"--z-index":C.length-w,"--offset":`${z?de:xe.current}px`,"--initial-height":M?"auto":`${we}px`,...A,...u.style},onDragEnd:()=>{R(!1),I(null),Be.current=null},onPointerDown:ve=>{ve.button!==2&&(ho||!Pe||(ne.current=new Date,ce(xe.current),ve.target.setPointerCapture(ve.pointerId),ve.target.tagName!=="BUTTON"&&(R(!0),Be.current={x:ve.clientX,y:ve.clientY})))},onPointerUp:()=>{var ve,qe,We;if(Y||!Pe)return;Be.current=null;const et=Number(((ve=ee.current)==null?void 0:ve.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),zt=Number(((qe=ee.current)==null?void 0:qe.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),$e=new Date().getTime()-((We=ne.current)==null?void 0:We.getTime()),ct=$==="x"?et:zt,bo=Math.abs(ct)/$e;if(Math.abs(ct)>=sh||bo>.11){ce(xe.current),u.onDismiss==null||u.onDismiss.call(u,u),_($==="x"?et>0?"right":"left":zt>0?"down":"up"),xt(),be(!0);return}else{var mt,Et;(mt=ee.current)==null||mt.style.setProperty("--swipe-amount-x","0px"),(Et=ee.current)==null||Et.style.setProperty("--swipe-amount-y","0px")}G(!1),R(!1),I(null)},onPointerMove:ve=>{var qe,We,et;if(!Be.current||!Pe||((qe=window.getSelection())==null?void 0:qe.toString().length)>0)return;const $e=ve.clientY-Be.current.y,ct=ve.clientX-Be.current.x;var bo;const mt=(bo=t.swipeDirections)!=null?bo:ih(x);!$&&(Math.abs(ct)>1||Math.abs($e)>1)&&I(Math.abs(ct)>Math.abs($e)?"x":"y");let Et={x:0,y:0};const wn=Kt=>1/(1.5+Math.abs(Kt)/20);if($==="y"){if(mt.includes("top")||mt.includes("bottom"))if(mt.includes("top")&&$e<0||mt.includes("bottom")&&$e>0)Et.y=$e;else{const Kt=$e*wn($e);Et.y=Math.abs(Kt)0)Et.x=ct;else{const Kt=ct*wn(ct);Et.x=Math.abs(Kt)0||Math.abs(Et.y)>0)&&G(!0),(We=ee.current)==null||We.style.setProperty("--swipe-amount-x",`${Et.x}px`),(et=ee.current)==null||et.style.setProperty("--swipe-amount-y",`${Et.y}px`)}},re&&!u.jsx&&ye!=="loading"?oe.createElement("button",{"aria-label":V,"data-disabled":ho,"data-close-button":!0,onClick:ho||!Pe?()=>{}:()=>{xt(),u.onDismiss==null||u.onDismiss.call(u,u)},className:$t(j==null?void 0:j.closeButton,u==null||(n=u.classNames)==null?void 0:n.closeButton)},(Pt=O==null?void 0:O.close)!=null?Pt:Kf):null,(ye||u.icon||u.promise)&&u.icon!==null&&((O==null?void 0:O[ye])!==null||u.icon)?oe.createElement("div",{"data-icon":"",className:$t(j==null?void 0:j.icon,u==null||(a=u.classNames)==null?void 0:a.icon)},u.promise||u.type==="loading"&&!u.icon?u.icon||kn():null,u.type!=="loading"?_e:null):null,oe.createElement("div",{"data-content":"",className:$t(j==null?void 0:j.content,u==null||(s=u.classNames)==null?void 0:s.content)},oe.createElement("div",{"data-title":"",className:$t(j==null?void 0:j.title,u==null||(r=u.classNames)==null?void 0:r.title)},u.jsx?u.jsx:typeof u.title=="function"?u.title():u.title),u.description?oe.createElement("div",{"data-description":"",className:$t(B,Q,j==null?void 0:j.description,u==null||(i=u.classNames)==null?void 0:i.description)},typeof u.description=="function"?u.description():u.description):null),oe.isValidElement(u.cancel)?u.cancel:u.cancel&&_a(u.cancel)?oe.createElement("button",{"data-button":!0,"data-cancel":!0,style:u.cancelButtonStyle||D,onClick:ve=>{_a(u.cancel)&&Pe&&(u.cancel.onClick==null||u.cancel.onClick.call(u.cancel,ve),xt())},className:$t(j==null?void 0:j.cancelButton,u==null||(m=u.classNames)==null?void 0:m.cancelButton)},u.cancel.label):null,oe.isValidElement(u.action)?u.action:u.action&&_a(u.action)?oe.createElement("button",{"data-button":!0,"data-action":!0,style:u.actionButtonStyle||F,onClick:ve=>{_a(u.action)&&(u.action.onClick==null||u.action.onClick.call(u.action,ve),!ve.defaultPrevented&&xt())},className:$t(j==null?void 0:j.actionButton,u==null||(d=u.classNames)==null?void 0:d.actionButton)},u.action.label):null)};function nc(){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 ch(t,e){const o={};return[t,e].forEach((n,a)=>{const s=a===1,r=s?"--mobile-offset":"--offset",i=s?oh:th;function m(d){["top","right","bottom","left"].forEach(p=>{o[`${r}-${p}`]=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[`${r}-${d}`]=i:o[`${r}-${d}`]=typeof n[d]=="number"?`${n[d]}px`:n[d]}):m(i)}),o}const dh=oe.forwardRef(function(e,o){const{id:n,invert:a,position:s="bottom-right",hotkey:r=["altKey","KeyT"],expand:i,closeButton:m,className:d,offset:p,mobileOffset:u,theme:g="light",richColors:k,duration:h,style:y,visibleToasts:b=eh,toastOptions:w,dir:C=nc(),gap:v=ah,icons:T,containerAriaLabel:S="Notifications"}=e,[f,A]=oe.useState([]),D=oe.useMemo(()=>n?f.filter(U=>U.toasterId===n):f.filter(U=>!U.toasterId),[f,n]),F=oe.useMemo(()=>Array.from(new Set([s].concat(D.filter(U=>U.position).map(U=>U.position)))),[D,s]),[E,B]=oe.useState([]),[N,x]=oe.useState(!1),[q,M]=oe.useState(!1),[j,O]=oe.useState(g!=="system"?g:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),V=oe.useRef(null),$=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),I=oe.useRef(null),se=oe.useRef(!1),_=oe.useCallback(U=>{A(W=>{var z;return(z=W.find(H=>H.id===U.id))!=null&&z.delete||kt.dismiss(U.id),W.filter(({id:H})=>H!==U.id)})},[]);return oe.useEffect(()=>kt.subscribe(U=>{if(U.dismiss){requestAnimationFrame(()=>{A(W=>W.map(z=>z.id===U.id?{...z,delete:!0}:z))});return}setTimeout(()=>{Od.flushSync(()=>{A(W=>{const z=W.findIndex(H=>H.id===U.id);return z!==-1?[...W.slice(0,z),{...W[z],...U},...W.slice(z+1)]:[U,...W]})})})}),[f]),oe.useEffect(()=>{if(g!=="system"){O(g);return}if(g==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?O("dark"):O("light")),typeof window>"u")return;const U=window.matchMedia("(prefers-color-scheme: dark)");try{U.addEventListener("change",({matches:W})=>{O(W?"dark":"light")})}catch{U.addListener(({matches:z})=>{try{O(z?"dark":"light")}catch(H){console.error(H)}})}},[g]),oe.useEffect(()=>{f.length<=1&&x(!1)},[f]),oe.useEffect(()=>{const U=W=>{var z;if(r.every(R=>W[R]||W.code===R)){var L;x(!0),(L=V.current)==null||L.focus()}W.code==="Escape"&&(document.activeElement===V.current||(z=V.current)!=null&&z.contains(document.activeElement))&&x(!1)};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[r]),oe.useEffect(()=>{if(V.current)return()=>{I.current&&(I.current.focus({preventScroll:!0}),I.current=null,se.current=!1)}},[V.current]),oe.createElement("section",{ref:o,"aria-label":`${S} ${$}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},F.map((U,W)=>{var z;const[H,L]=U.split("-");return D.length?oe.createElement("ol",{key:U,dir:C==="auto"?nc():C,tabIndex:-1,ref:V,className:d,"data-sonner-toaster":!0,"data-sonner-theme":j,"data-y-position":H,"data-x-position":L,style:{"--front-toast-height":`${((z=E[0])==null?void 0:z.height)||0}px`,"--width":`${nh}px`,"--gap":`${v}px`,...y,...ch(p,u)},onBlur:R=>{se.current&&!R.currentTarget.contains(R.relatedTarget)&&(se.current=!1,I.current&&(I.current.focus({preventScroll:!0}),I.current=null))},onFocus:R=>{R.target instanceof HTMLElement&&R.target.dataset.dismissible==="false"||se.current||(se.current=!0,I.current=R.relatedTarget)},onMouseEnter:()=>x(!0),onMouseMove:()=>x(!0),onMouseLeave:()=>{q||x(!1)},onDragEnd:()=>x(!1),onPointerDown:R=>{R.target instanceof HTMLElement&&R.target.dataset.dismissible==="false"||M(!0)},onPointerUp:()=>M(!1)},D.filter(R=>!R.position&&W===0||R.position===U).map((R,Y)=>{var be,De;return oe.createElement(lh,{key:R.id,icons:T,index:Y,toast:R,defaultRichColors:k,duration:(be=w==null?void 0:w.duration)!=null?be:h,className:w==null?void 0:w.className,descriptionClassName:w==null?void 0:w.descriptionClassName,invert:a,visibleToasts:b,closeButton:(De=w==null?void 0:w.closeButton)!=null?De:m,interacting:q,position:U,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:_,toasts:D.filter(G=>G.position==R.position),heights:E.filter(G=>G.position==R.position),setHeights:B,expandByDefault:i,gap:v,expanded:N,swipeDirections:e.swipeDirections})})):null}))});/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jd=(...t)=>t.filter((e,o,n)=>!!e&&e.trim()!==""&&n.indexOf(e)===o).join(" ").trim();/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uh=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ph=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,o,n)=>n?n.toUpperCase():o.toLowerCase());/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ac=t=>{const e=ph(t);return e.charAt(0).toUpperCase()+e.slice(1)};/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var tr={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mh=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1},gh=c.createContext({}),fh=()=>c.useContext(gh),hh=c.forwardRef(({color:t,size:e,strokeWidth:o,absoluteStrokeWidth:n,className:a="",children:s,iconNode:r,...i},m)=>{const{size:d=24,strokeWidth:p=2,absoluteStrokeWidth:u=!1,color:g="currentColor",className:k=""}=fh()??{},h=n??u?Number(o??p)*24/Number(e??d):o??p;return c.createElement("svg",{ref:m,...tr,width:e??d??tr.width,height:e??d??tr.height,stroke:t??g,strokeWidth:h,className:Jd("lucide",k,a),...!s&&!mh(i)&&{"aria-hidden":"true"},...i},[...r.map(([y,b])=>c.createElement(y,b)),...Array.isArray(s)?s:[s]])});/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ie=(t,e)=>{const o=c.forwardRef(({className:n,...a},s)=>c.createElement(hh,{ref:s,iconNode:e,className:Jd(`lucide-${uh(ac(t))}`,`lucide-${t}`,n),...a}));return o.displayName=ac(t),o};/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bh=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],yh=ie("activity",bh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kh=[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]],sc=ie("arrow-left-right",kh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wh=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],vh=ie("arrow-left",wh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ch=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],rc=ie("bell",Ch);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Th=[["path",{d:"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2",key:"1ah6g2"}],["rect",{x:"14",y:"2",width:"8",height:"8",rx:"1",key:"88lufb"}]],Ci=ie("blocks",Th);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sh=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M16 12h2",key:"7q9ll5"}],["path",{d:"M16 8h2",key:"msurwy"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}],["path",{d:"M6 12h2",key:"32wvfc"}],["path",{d:"M6 8h2",key:"30oboj"}]],Dh=ie("book-open-text",Sh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ah=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],Qd=ie("book-open",Ah);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xh=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],Yd=ie("bot",xh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ph=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],Ti=ie("boxes",Ph);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Eh=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],Zd=ie("building-2",Eh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rh=[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z",key:"trhst0"}],["path",{d:"M17 21v-2",key:"ds4u3f"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10",key:"1mo9zo"}],["path",{d:"M21 21v-2",key:"eo0ou"}],["path",{d:"M3 5V3",key:"1k5hjh"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z",key:"1dd30t"}],["path",{d:"M7 5V3",key:"1t1388"}]],Ih=ie("cable",Rh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fh=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Mh=ie("chevron-down",Fh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Oh=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Xd=ie("chevron-right",Oh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nh=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],jh=ie("circle-check",Nh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lh=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],_h=ie("circle-question-mark",Lh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uh=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]],eu=ie("clipboard-list",Uh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zh=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],tu=ie("clock",zh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bh=[["path",{d:"M13.744 17.736a6 6 0 1 1-7.48-7.48",key:"bq4yh3"}],["path",{d:"M15 6h1v4",key:"11y1tn"}],["path",{d:"m6.134 14.768.866-.5 2 3.464",key:"17snzx"}],["circle",{cx:"16",cy:"8",r:"6",key:"14bfc9"}]],Vh=ie("coins",Bh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hh=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],ou=ie("cpu",Hh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qh=[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]],Wh=ie("credit-card",qh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kh=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],$h=ie("external-link",Kh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gh=[["path",{d:"M20 10V8a2.4 2.4 0 0 0-.706-1.704l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.35",key:"1cdjst"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M16 14a2 2 0 0 0-2 2",key:"ceaadl"}],["path",{d:"M16 22a2 2 0 0 1-2-2",key:"1wqh5n"}],["path",{d:"M20 14a2 2 0 0 1 2 2",key:"1ny6zw"}],["path",{d:"M20 22a2 2 0 0 0 2-2",key:"1l9q4k"}]],Jh=ie("file-scan",Gh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qh=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],Ss=ie("file-text",Qh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yh=[["path",{d:"M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8",key:"14sh0y"}],["path",{d:"M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z",key:"1970lx"}],["path",{d:"M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1",key:"l4dndm"}]],Zh=ie("files",Yh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xh=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]],eb=ie("flask-conical",Xh);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tb=[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]],ob=ie("folder-tree",tb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nb=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],nu=ie("folder",nb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ab=[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]],sb=ie("git-branch",ab);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rb=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],au=ie("globe",rb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ib=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],lb=ie("history",ib);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cb=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],Si=ie("image",cb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const db=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],ub=ie("info",db);/** + * @license lucide-react v1.17.0 - ISC + * + * 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:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],Ds=ie("key-round",pb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mb=[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]],gb=ie("languages",mb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fb=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],su=ie("layers",fb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hb=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],ru=ie("layout-dashboard",hb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bb=[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]],iu=ie("layout-template",bb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yb=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["rect",{x:"3",y:"4",width:"6",height:"6",rx:"1",key:"cif1o7"}]],lu=ie("list-todo",yb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kb=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],cu=ie("loader-circle",kb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wb=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],vb=ie("log-out",wb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cb=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],Tb=ie("menu",Cb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sb=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Db=ie("message-circle-question-mark",Sb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ab=[["path",{d:"M12.7 3H4a2 2 0 0 0-2 2v16.286a.71.71 0 0 0 1.212.502l2.202-2.202A2 2 0 0 1 6.828 19H20a2 2 0 0 0 2-2v-4.7",key:"wjb7ig"}],["circle",{cx:"19",cy:"6",r:"3",key:"108a5v"}]],du=ie("message-square-dot",Ab);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xb=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],uu=ie("message-square",xb);/** + * @license lucide-react v1.17.0 - ISC + * + * 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:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]],Eb=ie("messages-square",Pb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rb=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],pu=ie("moon",Rb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ib=[["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",key:"2d38gg"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Fb=ie("octagon-x",Ib);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mb=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],Ob=ie("package",Mb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nb=[["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m18 3-4 4h6l-4 4",key:"16psg9"}]],jb=ie("plug-zap",Nb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lb=[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]],Di=ie("puzzle",Lb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _b=[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],Ub=ie("radio",_b);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zb=[["path",{d:"M12 17V7",key:"pyj7ub"}],["path",{d:"M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8",key:"1elt7d"}],["path",{d:"M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z",key:"ycz6yz"}]],Bb=ie("receipt",zb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vb=[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"m19 8 3 8a5 5 0 0 1-6 0zV7",key:"zcdpyk"}],["path",{d:"M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1",key:"1yorad"}],["path",{d:"m5 8 3 8a5 5 0 0 1-6 0zV7",key:"eua70x"}],["path",{d:"M7 21h10",key:"1b0cd5"}]],Hb=ie("scale",Vb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qb=[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]],Wb=ie("scan-search",qb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kb=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],$b=ie("scissors",Kb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gb=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],Ai=ie("scroll-text",Gb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jb=[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["path",{d:"m8.5 8.5 5 5",key:"a8mexj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]],Qb=ie("search-x",Jb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yb=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],mu=ie("search",Yb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zb=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],xi=ie("settings",Zb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xb=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],gu=ie("shield-check",Xb);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ey=[["path",{d:"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z",key:"1wgbhj"}]],ic=ie("shirt",ey);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ty=[["circle",{cx:"8",cy:"21",r:"1",key:"jimo8o"}],["circle",{cx:"19",cy:"21",r:"1",key:"13723u"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",key:"9zh506"}]],fu=ie("shopping-cart",ty);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oy=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],ny=ie("sparkles",oy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ay=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],sy=ie("star",ay);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ry=[["path",{d:"M11 2v2",key:"1539x4"}],["path",{d:"M5 2v2",key:"1yf1q8"}],["path",{d:"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1",key:"rb5t3r"}],["path",{d:"M8 15a6 6 0 0 0 12 0v-3",key:"x18d4x"}],["circle",{cx:"20",cy:"10",r:"2",key:"ts1r5v"}]],iy=ie("stethoscope",ry);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ly=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],hu=ie("sun",ly);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cy=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],Pi=ie("tag",cy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dy=[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"M13 5v2",key:"dyzc3o"}],["path",{d:"M13 17v2",key:"1ont0d"}],["path",{d:"M13 11v2",key:"1wjjxi"}]],uy=ie("ticket",dy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const py=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],my=ie("triangle-alert",py);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gy=[["path",{d:"M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2",key:"wrbu53"}],["path",{d:"M15 18H9",key:"1lyqi6"}],["path",{d:"M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",key:"lysw3i"}],["circle",{cx:"17",cy:"18",r:"2",key:"332jqn"}],["circle",{cx:"7",cy:"18",r:"2",key:"19iecd"}]],fy=ie("truck",gy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hy=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],by=ie("user",hy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yy=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],bu=ie("users",yy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ky=[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]],yu=ie("wallet",ky);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wy=[["path",{d:"m10.586 5.414-5.172 5.172",key:"4mc350"}],["path",{d:"m18.586 13.414-5.172 5.172",key:"8c96vv"}],["path",{d:"M6 12h12",key:"8npq4p"}],["circle",{cx:"12",cy:"20",r:"2",key:"144qzu"}],["circle",{cx:"12",cy:"4",r:"2",key:"muu5ef"}],["circle",{cx:"20",cy:"12",r:"2",key:"1xzzfp"}],["circle",{cx:"4",cy:"12",r:"2",key:"1hvhnz"}]],vy=ie("waypoints",wy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cy=[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]],ku=ie("webhook",Cy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ty=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],Ei=ie("workflow",Ty);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sy=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Dy=ie("wrench",Sy);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ay=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],wu=ie("x",Ay);/** + * @license lucide-react v1.17.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xy=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Py=ie("zap",xy),Ey=({...t})=>{const{theme:e="system"}=vi();return l.jsx(dh,{theme:e,richColors:!0,className:"toaster group",icons:{success:l.jsx(jh,{className:"size-4"}),info:l.jsx(ub,{className:"size-4"}),warning:l.jsx(my,{className:"size-4"}),error:l.jsx(Fb,{className:"size-4"}),loading:l.jsx(cu,{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})},lc={};function Ot(t,e){const o=c.useRef(lc);return o.current===lc&&(o.current=t(e)),o}const $r=[];let Gr;function Ry(){return Gr}function Iy(t){$r.push(t)}function Ri(t){const e=(o,n)=>{const a=Ot(Fy).current;let s;try{Gr=a;for(const r of $r)r.before(a);s=t(o,n);for(const r of $r)r.after(a);a.didInitialize=!0}finally{Gr=void 0}return s};return e.displayName=t.displayName||t.name,e}function vu(t){return c.forwardRef(Ri(t))}function Fy(){return{didInitialize:!1}}function As(t){const e=c.useRef(!0);e.current&&(e.current=!1,t())}const My=()=>{},he=typeof document<"u"?c.useLayoutEffect:My;function Oy(t,e){return function(n,...a){const s=new URL(t);return s.searchParams.set("code",n.toString()),a.forEach(r=>s.searchParams.append("args[]",r)),`${e} error #${n}; visit ${s} for the full message.`}}const st=Oy("https://base-ui.com/production-error","Base UI"),Cu=c.createContext(void 0);function Sa(t){const e=c.useContext(Cu);if(e===void 0&&!t)throw new Error(st(72));return e}const Ny=[];function Ii(t){c.useEffect(t,Ny)}const Xn=0;class Ut{constructor(){Ue(this,"currentId",Xn);Ue(this,"clear",()=>{this.currentId!==Xn&&(clearTimeout(this.currentId),this.currentId=Xn)});Ue(this,"disposeEffect",()=>this.clear)}static create(){return new Ut}start(e,o){this.clear(),this.currentId=setTimeout(()=>{this.currentId=Xn,o()},e)}isStarted(){return this.currentId!==Xn}}function bt(){const t=Ot(Ut.create).current;return Ii(t.disposeEffect),t}const Jn=typeof navigator<"u",or=jy(),Tu=_y(),Su=Ly(),Du=typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter:none"),Au=or.platform==="MacIntel"&&or.maxTouchPoints>1?!0:/iP(hone|ad|od)|iOS/.test(or.platform),xu=Jn&&/apple/i.test(navigator.vendor),Jr=Jn&&/android/i.test(Tu)||/android/i.test(Su),Pu=Jn&&Tu.toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints,Eu=Su.includes("jsdom/");function jy(){if(!Jn)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 Ly(){if(!Jn)return"";const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?t.brands.map(({brand:e,version:o})=>`${e}/${o}`).join(" "):navigator.userAgent}function _y(){if(!Jn)return"";const t=navigator.userAgentData;return t!=null&&t.platform?t.platform:navigator.platform??""}function Ft(t){t.preventDefault(),t.stopPropagation()}function Uy(t){return"nativeEvent"in t}function Ru(t){return t.pointerType===""&&t.isTrusted?!0:Jr&&t.pointerType?t.type==="click"&&t.buttons===1:t.detail===0&&!t.pointerType}function Iu(t){return Eu?!1:!Jr&&t.width===0&&t.height===0||Jr&&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 rn(t,e){const o=["mouse","pen"];return e||o.push("",void 0),o.includes(t)}function zy(t){const e=t.type;return e==="click"||e==="mousedown"||e==="keydown"||e==="keyup"}function xs(){return typeof window<"u"}function ut(t){return Fi(t)?(t.nodeName||"").toLowerCase():"#document"}function Xe(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function ao(t){var e;return(e=(Fi(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Fi(t){return xs()?t instanceof Node||t instanceof Xe(t).Node:!1}function Ie(t){return xs()?t instanceof Element||t instanceof Xe(t).Element:!1}function He(t){return xs()?t instanceof HTMLElement||t instanceof Xe(t).HTMLElement:!1}function Wn(t){return!xs()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Xe(t).ShadowRoot}function Uo(t){const{overflow:e,overflowX:o,overflowY:n,display:a}=At(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+o)&&a!=="inline"&&a!=="contents"}function By(t){return/^(table|td|th)$/.test(ut(t))}function Ps(t){try{if(t.matches(":popover-open"))return!0}catch{}try{return t.matches(":modal")}catch{return!1}}const Vy=/transform|translate|scale|rotate|perspective|filter/,Hy=/paint|layout|strict|content/,Wo=t=>!!t&&t!=="none";let nr;function Mi(t){const e=Ie(t)?At(t):t;return Wo(e.transform)||Wo(e.translate)||Wo(e.scale)||Wo(e.rotate)||Wo(e.perspective)||!Es()&&(Wo(e.backdropFilter)||Wo(e.filter))||Vy.test(e.willChange||"")||Hy.test(e.contain||"")}function qy(t){let e=no(t);for(;He(e)&&!eo(e);){if(Mi(e))return e;if(Ps(e))return null;e=no(e)}return null}function Es(){return nr==null&&(nr=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),nr}function eo(t){return/^(html|body|#document)$/.test(ut(t))}function At(t){return Xe(t).getComputedStyle(t)}function Rs(t){return Ie(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function no(t){if(ut(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Wn(t)&&t.host||ao(t);return Wn(e)?e.host:e}function Fu(t){const e=no(t);return eo(e)?t.ownerDocument?t.ownerDocument.body:t.body:He(e)&&Uo(e)?e:Fu(e)}function pa(t,e,o){var n;e===void 0&&(e=[]),o===void 0&&(o=!0);const a=Fu(t),s=a===((n=t.ownerDocument)==null?void 0:n.body),r=Xe(a);if(s){const i=Qr(r);return e.concat(r,r.visualViewport||[],Uo(a)?a:[],i&&o?pa(i):[])}else return e.concat(a,pa(a,[],o))}function Qr(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}const Yr="data-base-ui-focusable",Mu="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",Io="ArrowLeft",Fo="ArrowRight",Oi="ArrowUp",Da="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 Se(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&&Wn(o)){let a=e;for(;a;){if(t===a)return!0;a=a.parentNode||a.host}}return!1}function ht(t){return"composedPath"in t?t.composedPath()[0]:t.target}function ls(t,e){if(!Ie(t))return!1;const o=t;if(e.hasElement(o))return!o.hasAttribute("data-trigger-disabled");for(const[,n]of e.entries())if(Se(n,o))return!n.hasAttribute("data-trigger-disabled");return!1}function ar(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 Wy(t){return t.matches("html,body")}function Is(t){return He(t)&&t.matches(Mu)}function Ky(t){return(t==null?void 0:t.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${Mu}`))!=null}function Zr(t){return t?t.getAttribute("role")==="combobox"&&Is(t):!1}function $y(t){if(!t||Eu)return!0;try{return t.matches(":focus-visible")}catch{return!0}}function Xr(t){return t?t.hasAttribute(Yr)?t:t.querySelector(`[${Yr}]`)||t:null}function Gy(t,e){return e!=null&&!rn(e)?0:typeof t=="function"?t():t}function cs(t,e,o){const n=Gy(t,o);return typeof n=="number"?n:n==null?void 0:n[e]}function cc(t){return typeof t=="function"?t():t}function Ou(t,e){return e||t==="click"||t==="mousedown"}function Jy(t){return(t==null?void 0:t.includes("mouse"))&&t!=="mousedown"}function Ni(){}const ei=Object.freeze([]),Je=Object.freeze({}),Nu="none",po="trigger-press",Ye="trigger-hover",xn="trigger-focus",ji="outside-press",ju="item-press",Lu="close-press",ln="focus-out",Aa="escape-key",ti="list-navigation",Qy="cancel-open",ra="sibling-open",Yy="disabled",gR="missing",fR="initial",Fs="imperative-action",hR="window-resize";function Oe(t,e,o,n){let a=!1,s=!1;const r=n??Je;return{reason:t,event:e??new Event("base-ui"),cancel(){a=!0},allowPropagation(){s=!0},get isCanceled(){return a},get isPropagationAllowed(){return s},trigger:o,...r}}const _u=c.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new Ut,currentIdRef:{current:null},currentContextRef:{current:null}});function Zy(t){const{children:e,delay:o,timeoutMs:n=0}=t,a=c.useRef(o),s=c.useRef(o),r=c.useRef(null),i=c.useRef(null),m=bt();return l.jsx(_u.Provider,{value:c.useMemo(()=>({hasProvider:!0,delayRef:a,initialDelayRef:s,currentIdRef:r,timeoutMs:n,currentContextRef:i,timeout:m}),[n,m]),children:e})}function Xy(t,e={open:!1}){const{open:o}=e,n="rootStore"in t?t.rootStore:t,a=n.useState("floatingId"),s=c.useContext(_u),{currentIdRef:r,delayRef:i,timeoutMs:m,initialDelayRef:d,currentContextRef:p,hasProvider:u,timeout:g}=s,[k,h]=c.useState(!1);return he(()=>{function y(){var b;h(!1),(b=p.current)==null||b.setIsInstantPhase(!1),r.current=null,p.current=null,i.current=d.current}if(r.current&&!o&&r.current===a){if(h(!1),m){const b=a;return g.start(m,()=>{n.select("open")||r.current&&r.current!==b||y()}),()=>{g.clear()}}y()}},[o,a,r,i,m,d,p,g,n]),he(()=>{if(!o)return;const y=p.current,b=r.current;g.clear(),p.current={onOpenChange:n.setOpen,setIsInstantPhase:h},r.current=a,i.current={open:0,close:cs(d.current,"close")},b!==null&&b!==a?(h(!0),y==null||y.setIsInstantPhase(!0),y==null||y.onOpenChange(!1,Oe(Nu))):(h(!1),y==null||y.setIsInstantPhase(!1))},[o,a,n,r,i,d,p,g]),he(()=>()=>{p.current=null},[p]),c.useMemo(()=>({hasProvider:u,delayRef:i,isInstantPhase:k}),[u,i,k])}function Me(t,e,o,n){return t.addEventListener(e,o,n),()=>{t.removeEventListener(e,o,n)}}function to(...t){return()=>{for(let e=0;eo!==e[n])}function zu(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 a=0;a{for(let a=0;a{e.current=e.next}};return e}const Li={...Ts},sr=Li.useInsertionEffect,ak=sr&&sr!==Li.useLayoutEffect?sr:t=>t();function Ae(t){const e=Ot(sk).current;return e.next=t,ak(e.effect),e.trampoline}function sk(){const t={next:void 0,callback:rk,trampoline:(...e)=>{var o;return(o=t.callback)==null?void 0:o.call(t,...e)},effect:()=>{t.callback=t.next}};return t}function rk(){}const Ua=null;class ik{constructor(){Ue(this,"callbacks",[]);Ue(this,"callbacksCount",0);Ue(this,"nextId",1);Ue(this,"startId",1);Ue(this,"isScheduled",!1);Ue(this,"tick",e=>{var a;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 za=new ik;class Zt{constructor(){Ue(this,"currentId",Ua);Ue(this,"cancel",()=>{this.currentId!==Ua&&(za.cancel(this.currentId),this.currentId=Ua)});Ue(this,"disposeEffect",()=>this.cancel)}static create(){return new Zt}static request(e){return za.request(e)}static cancel(e){return za.cancel(e)}request(e){this.cancel(),this.currentId=za.request(()=>{this.currentId=Ua,e()})}}function ma(){const t=Ot(Zt.create).current;return Ii(t.disposeEffect),t}function Le(t){return(t==null?void 0:t.ownerDocument)||document}const Bu={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},lk={...Bu,position:"fixed",top:0,left:0},bR={...Bu,position:"absolute"},Oo=c.forwardRef(function(e,o){const[n,a]=c.useState();he(()=>{xu&&a("button")},[]);const s={tabIndex:0,role:n};return l.jsx("span",{...e,ref:o,style:lk,"aria-hidden":n?void 0:!0,...s,"data-base-ui-focus-guard":""})}),ck=["top","right","bottom","left"],$n=Math.min,Mt=Math.max,ds=Math.round,Go=Math.floor,oo=t=>({x:t,y:t}),dk={left:"right",right:"left",bottom:"top",top:"bottom"};function oi(t,e,o){return Mt(t,$n(e,o))}function mo(t,e){return typeof t=="function"?t(e):t}function Tt(t){return t.split("-")[0]}function zo(t){return t.split("-")[1]}function _i(t){return t==="x"?"y":"x"}function Ui(t){return t==="y"?"height":"width"}function _t(t){const e=t[0];return e==="t"||e==="b"?"y":"x"}function zi(t){return _i(_t(t))}function uk(t,e,o){o===void 0&&(o=!1);const n=zo(t),a=zi(t),s=Ui(a);let r=a==="x"?n===(o?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=us(r)),[r,us(r)]}function pk(t){const e=us(t);return[ni(t),e,ni(e)]}function ni(t){return t.includes("start")?t.replace("start","end"):t.replace("end","start")}const dc=["left","right"],uc=["right","left"],mk=["top","bottom"],gk=["bottom","top"];function fk(t,e,o){switch(t){case"top":case"bottom":return o?e?uc:dc:e?dc:uc;case"left":case"right":return e?mk:gk;default:return[]}}function hk(t,e,o,n){const a=zo(t);let s=fk(Tt(t),o==="start",n);return a&&(s=s.map(r=>r+"-"+a),e&&(s=s.concat(s.map(ni)))),s}function us(t){const e=Tt(t);return dk[e]+t.slice(e.length)}function bk(t){return{top:0,right:0,bottom:0,left:0,...t}}function Vu(t){return typeof t!="number"?bk(t):{top:t,right:t,bottom:t,left:t}}function ps(t){const{x:e,y:o,width:n,height:a}=t;return{width:n,height:a,top:o,left:e,right:e+n,bottom:o+a,x:e,y:o}}function Ba(t,e,o){return Math.floor(t/e)!==o}function ms(t,e){return e<0||e>=t.length}function rr(t,e){return ft(t.current,{disabledIndices:e})}function pc(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:a=1}={}){let s=e;do s+=o?-a:a;while(s>=0&&s<=t.length-1&&Pn(t,s,n));return s}function yk(t,{event:e,orientation:o,loopFocus:n,onLoop:a,rtl:s,cols:r,disabledIndices:i,minIndex:m,maxIndex:d,prevIndex:p,stopEvent:u=!1}){let g=p,k;if(e.key===Oi?k="up":e.key===Da&&(k="down"),k){const h=[],y=[];let b=!1,w=0;{let F=null,E=-1;t.forEach((B,N)=>{if(B==null)return;w+=1;const x=B.closest('[role="row"]');x&&(b=!0),(x!==F||E===-1)&&(F=x,E+=1,h[E]=[]),h[E].push(N),y[N]=E})}let C=!1,v=0;if(b)for(const F of h){const E=F.length;E>v&&(v=E),E!==r&&(C=!0)}const T=C&&w{if(!C||p===-1)return;const E=y[p];if(E==null)return;const B=h[E].indexOf(p),N=F==="up"?-1:1;for(let x=E+N,q=0;q=h.length){if(!n||T)return;if(x=x<0?h.length-1:0,a){const j=Math.min(B,h[x].length-1),O=h[x][j]??h[x][0],V=a(e,p,O);x=y[V]??x}}const M=h[x];for(let j=Math.min(B,M.length-1);j>=0;j-=1){const O=M[j];if(!Pn(t,O,i))return O}}},A=F=>{if(!T||p===-1)return;const E=p%S,B=F==="up"?-S:S,N=d-d%S,x=Go(d/S)+1;for(let q=p-E+B,M=0;Md){if(!n)return;q=q<0?N:0}const j=Math.min(q+S-1,d);for(let O=Math.min(q+E,j);O>=q;O-=1)if(!Pn(t,O,i))return O}};u&&Ft(e);const D=f(k)??A(k);if(D!==void 0)g=D;else if(p===-1)g=k==="up"?d:m;else if(g=ft(t,{startingIndex:p,amount:S,decrement:k==="up",disabledIndices:i}),n){if(k==="up"&&(p-SF?B:B-S,a&&(g=a(e,p,g))}k==="down"&&p+S>d&&(g=ft(t,{startingIndex:p%S-S,amount:S,disabledIndices:i}),a&&(g=a(e,p,g)))}ms(t,g)&&(g=p)}if(o==="both"){const h=Go(p/r);e.key===(s?Io:Fo)&&(u&&Ft(e),p%r!==r-1?(g=ft(t,{startingIndex:p,disabledIndices:i}),n&&Ba(g,r,h)&&(g=ft(t,{startingIndex:p-p%r-1,disabledIndices:i}),a&&(g=a(e,p,g)))):n&&(g=ft(t,{startingIndex:p-p%r-1,disabledIndices:i}),a&&(g=a(e,p,g))),Ba(g,r,h)&&(g=p)),e.key===(s?Fo:Io)&&(u&&Ft(e),p%r!==0?(g=ft(t,{startingIndex:p,decrement:!0,disabledIndices:i}),n&&Ba(g,r,h)&&(g=ft(t,{startingIndex:p+(r-p%r),decrement:!0,disabledIndices:i}),a&&(g=a(e,p,g)))):n&&(g=ft(t,{startingIndex:p+(r-p%r),decrement:!0,disabledIndices:i}),a&&(g=a(e,p,g))),Ba(g,r,h)&&(g=p));const y=Go(d/r)===h;ms(t,g)&&(n&&y?(g=e.key===(s?Fo:Io)?d:ft(t,{startingIndex:p-p%r-1,disabledIndices:i}),a&&(g=a(e,p,g))):g=p)}return g}function kk(t,e,o){const n=[];let a=0;return t.forEach(({width:s,height:r},i)=>{let m=!1;for(o&&(a=0);!m;){const d=[];for(let p=0;pn[p]==null)?(d.forEach(p=>{n[p]=i}),m=!0):a+=1}}),[...n]}function wk(t,e,o,n,a){if(t===-1)return-1;const s=o.indexOf(t),r=e[t];switch(a){case"tl":return s;case"tr":return r?s+r.width-1:s;case"bl":return r?s+(r.height-1)*n:s;case"br":return o.lastIndexOf(t);default:return-1}}function vk(t,e){return e.flatMap((o,n)=>t.includes(o)?[n]:[])}function Pn(t,e,o){if(typeof o=="function"?o(e):(o==null?void 0:o.includes(e))??!1)return!0;const a=t[e];return a?Ms(a)?!o&&(a.hasAttribute("disabled")||a.getAttribute("aria-disabled")==="true"):!0:!1}function Ck(t){return t.visibility==="hidden"||t.visibility==="collapse"}function Ms(t,e=t?At(t):null){return!t||!t.isConnected||!e||Ck(e)?!1:typeof t.checkVisibility=="function"?t.checkVisibility():e.display!=="none"&&e.display!=="contents"}const Tk='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';function Sk(t){const e=t.assignedSlot;if(e)return e;if(t.parentElement)return t.parentElement;const o=t.getRootNode();return Wn(o)?o.host:null}function ai(t){for(const e of Array.from(t.children))if(ut(e)==="summary")return e;return null}function Dk(t,e){const o=ai(e);return!!o&&(t===o||Se(o,t))}function Hu(t){const e=t?ut(t):"";return t!=null&&t.matches(Tk)&&(e!=="summary"||t.parentElement!=null&&ut(t.parentElement)==="details"&&ai(t.parentElement)===t)&&(e!=="details"||ai(t)==null)&&(e!=="input"||t.type!=="hidden")}function qu(t){if(!Hu(t)||!t.isConnected||t.matches(":disabled"))return!1;for(let e=t;e;e=Sk(e)){const o=e!==t,n=ut(e)==="slot";if(e.hasAttribute("inert")||o&&ut(e)==="details"&&!e.open&&!Dk(t,e)||e.hasAttribute("hidden")||!n&&!Ak(e,o))return!1}return!0}function Ak(t,e){const o=At(t);return e?o.display!=="none":Ms(t,o)}function Wu(t){const e=t.tabIndex;if(e<0){const o=ut(t);if(o==="details"||o==="audio"||o==="video"||He(t)&&t.isContentEditable)return 0}return e}function ir(t){if(ut(t)!=="input")return null;const e=t;return e.type==="radio"&&e.name!==""?e:null}function xk(t,e){const o=ir(t);if(!o)return!0;const n=e.find(a=>{const s=ir(a);return(s==null?void 0:s.name)===o.name&&s.form===o.form&&s.checked});return n?n===o:e.find(a=>{const s=ir(a);return(s==null?void 0:s.name)===o.name&&s.form===o.form})===o}function Ku(t){if(He(t)&&ut(t)==="slot"){const e=t.assignedElements({flatten:!0});if(e.length>0)return e}return He(t)&&t.shadowRoot?Array.from(t.shadowRoot.children):Array.from(t.children)}function $u(t,e){Ku(t).forEach(o=>{Hu(o)&&e.push(o),$u(o,e)})}function Gu(t,e,o){Ku(t).forEach(n=>{He(n)&&n.matches(e)&&o.push(n),Gu(n,e,o)})}function Bi(t){return qu(t)&&Wu(t)>=0}function Ju(t){const e=[];return $u(t,e),e.filter(qu)}function xa(t){const e=Ju(t);return e.filter(o=>Wu(o)>=0&&xk(o,e))}function Qu(t,e){const o=xa(t),n=o.length;if(n===0)return;const a=vt(Le(t)),s=o.indexOf(a),r=s===-1?e===1?0:n-1:s+e;return o[r]}function Vi(t){return Qu(Le(t).body,1)||t}function Yu(t){return Qu(Le(t).body,-1)||t}function Zu(t,e){if(!t)return null;const o=xa(Le(t).body),n=o.length;if(n===0)return null;const a=o.indexOf(t);if(a===-1)return null;const s=(a+e+n)%n;return o[s]}function Pk(t){return Zu(t,1)}function Ek(t){return Zu(t,-1)}function En(t,e){const o=e||t.currentTarget,n=t.relatedTarget;return!n||!Se(o,n)}function Rk(t){xa(t).forEach(o=>{o.dataset.tabindex=o.getAttribute("tabindex")||"",o.setAttribute("tabindex","-1")})}function mc(t){const e=[];Gu(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 No(t,e,o=!0){return t.filter(a=>a.parentId===e).flatMap(a=>{var s;return[...!o||(s=a.context)!=null&&s.open?[a]:[],...No(t,a.id,o)]})}function gc(t,e){var a;let o=[],n=(a=t.find(s=>s.id===e))==null?void 0:a.parentId;for(;n;){const s=t.find(r=>r.id===n);n=s==null?void 0:s.parentId,s&&(o=o.concat(s))}return o}function ga(t){return`data-base-ui-${t}`}let Va=0;function os(t,e={}){const{preventScroll:o=!1,sync:n=!1,shouldFocus:a}=e;cancelAnimationFrame(Va);function s(){a&&!a()||t==null||t.focus({preventScroll:o})}if(n)return s(),Ni;const r=requestAnimationFrame(s);return Va=r,()=>{Va===r&&(cancelAnimationFrame(r),Va=0)}}const lr={inert:new WeakMap,"aria-hidden":new WeakMap},fc="data-base-ui-inert",si={inert:new WeakSet,"aria-hidden":new WeakSet};let ea=new WeakMap,cr=0;function Ik(t){return si[t]}function Xu(t){return t?Wn(t)?t.host:Xu(t.parentNode):null}const dr=(t,e)=>e.map(o=>{if(t.contains(o))return o;const n=Xu(o);return t.contains(n)?n:null}).filter(o=>o!=null),hc=t=>{const e=new Set;return t.forEach(o=>{let n=o;for(;n&&!e.has(n);)e.add(n),n=n.parentNode}),e},bc=(t,e,o)=>{const n=[],a=s=>{!s||o.has(s)||Array.from(s.children).forEach(r=>{ut(r)!=="script"&&(e.has(r)?a(r):n.push(r))})};return a(t),n};function Fk(t,e,o,n,{mark:a=!0,markerIgnoreElements:s=[]}){const r=n?"inert":o?"aria-hidden":null;let i=null,m=null;const d=dr(e,t),p=a?dr(e,s):[],u=new Set(p),g=a?bc(e,hc(d),new Set(d)).filter(y=>!u.has(y)):[],k=[],h=[];if(r){const y=lr[r],b=Ik(r);m=b,i=y;const w=dr(e,Array.from(e.querySelectorAll("[aria-live]"))),C=d.concat(w);bc(e,hc(C),new Set(C)).forEach(T=>{const S=T.getAttribute(r),f=S!==null&&S!=="false",A=(y.get(T)||0)+1;y.set(T,A),k.push(T),A===1&&f&&b.add(T),f||T.setAttribute(r,r==="inert"?"":"true")})}return a&&g.forEach(y=>{const b=(ea.get(y)||0)+1;ea.set(y,b),h.push(y),b===1&&y.setAttribute(fc,"")}),cr+=1,()=>{i&&k.forEach(y=>{const w=(i.get(y)||0)-1;i.set(y,w),w||(!(m!=null&&m.has(y))&&r&&y.removeAttribute(r),m==null||m.delete(y))}),a&&h.forEach(y=>{const b=(ea.get(y)||0)-1;ea.set(y,b),b||y.removeAttribute(fc)}),cr-=1,cr||(lr.inert=new WeakMap,lr["aria-hidden"]=new WeakMap,si.inert=new WeakSet,si["aria-hidden"]=new WeakSet,ea=new WeakMap)}}function yc(t,e={}){const{ariaHidden:o=!1,inert:n=!1,mark:a=!0,markerIgnoreElements:s=[]}=e,r=Le(t[0]).body;return Fk(t,r,o,n,{mark:a,markerIgnoreElements:s})}let kc=0;function Mk(t,e="mui"){const[o,n]=c.useState(t),a=t||o;return c.useEffect(()=>{o==null&&(kc+=1,n(`${e}-${kc}`))},[o,e]),a}const wc=Li.useId;function cn(t,e){if(wc!==void 0){const o=wc();return t??(e?`${e}-${o}`:o)}return Mk(t,e)}const Ok=parseInt(c.version,10);function Hi(t){return Ok>=t}function vc(t){if(!c.isValidElement(t))return null;const e=t,o=e.props;return(Hi(19)?o==null?void 0:o.ref:e.ref)??null}function ri(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Nk(t,e){const o={};for(const n in t){const a=t[n];if(e!=null&&e.hasOwnProperty(n)){const s=e[n](a);s!=null&&Object.assign(o,s);continue}a===!0?o[`data-${n.toLowerCase()}`]="":a&&(o[`data-${n.toLowerCase()}`]=a.toString())}return o}function jk(t,e){return typeof t=="function"?t(e):t}function Lk(t,e){return typeof t=="function"?t(e):t}const qi={};function St(t,e,o,n,a){if(!o&&!n&&!a&&!t)return gs(e);let s=gs(t);return e&&(s=ia(s,e)),o&&(s=ia(s,o)),n&&(s=ia(s,n)),a&&(s=ia(s,a)),s}function _k(t){if(t.length===0)return qi;if(t.length===1)return gs(t[0]);let e=gs(t[0]);for(let o=1;o=65&&a<=90&&(typeof e=="function"||typeof e>"u")}function Wi(t){return typeof t=="function"}function tp(t,e){return Wi(t)?t(e):t??qi}function Bk(t,e){return e?t?(...o)=>{const n=o[0];if(ap(n)){const s=n;fs(s);const r=e(...o);return s.baseUIHandlerPrevented||t==null||t(...o),r}const a=e(...o);return t==null||t(...o),a}:op(e):t}function op(t){return t&&((...e)=>{const o=e[0];return ap(o)&&fs(o),t(...e)})}function fs(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function np(t,e){return e?t?e+" "+t:e:t}function ap(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}function tt(t,e,o={}){const n=e.render,a=Vk(e,o);if(o.enabled===!1)return null;const s=o.state??Je;return Wk(t,n,a,s)}function Vk(t,e={}){const{className:o,style:n,render:a}=t,{state:s=Je,ref:r,props:i,stateAttributesMapping:m,enabled:d=!0}=e,p=d?jk(o,s):void 0,u=d?Lk(n,s):void 0,g=d?Nk(s,m):Je,k=d&&i?Hk(i):void 0,h=d?ri(g,k)??{}:Je;return typeof document<"u"&&(d?Array.isArray(r)?h.ref=ek([h.ref,vc(a),...r]):h.ref=Kn(h.ref,vc(a),r):Kn(null,null)),d?(p!==void 0&&(h.className=np(h.className,p)),u!==void 0&&(h.style=ri(h.style,u)),h):Je}function Hk(t){return Array.isArray(t)?_k(t):St(void 0,t)}const qk=Symbol.for("react.lazy");function Wk(t,e,o,n){if(e){if(typeof e=="function")return e(o,n);const a=St(o,e.props);a.ref=o.ref;let s=e;return(s==null?void 0:s.$$typeof)===qk&&(s=c.Children.toArray(e)[0]),c.cloneElement(s,a)}if(t&&typeof t=="string")return Kk(t,o);throw new Error(st(8))}function Kk(t,e){return t==="button"?c.createElement("button",{type:"button",...e,key:e.key}):t==="img"?c.createElement("img",{alt:"",...e,key:e.key}):c.createElement(t,e)}const $k=500,sp=500,Gk={style:{transition:"none"}},rp="data-base-ui-click-trigger",Jk={fallbackAxisSide:"none"},Ki={fallbackAxisSide:"end"},Qk={clipPath:"inset(50%)",position:"fixed",top:0,left:0},ip=c.createContext(null),lp=()=>c.useContext(ip),Yk=ga("portal");function cp(t={}){const{ref:e,container:o,componentProps:n=Je,elementProps:a}=t,s=cn(),r=lp(),i=r==null?void 0:r.portalNode,[m,d]=c.useState(null),[p,u]=c.useState(null),g=Ae(b=>{b!==null&&u(b)}),k=c.useRef(null);he(()=>{if(o===null){k.current&&(k.current=null,u(null),d(null));return}if(s==null)return;const b=(o&&(Fi(o)?o:o.current))??i??document.body;if(b==null){k.current&&(k.current=null,u(null),d(null));return}k.current!==b&&(k.current=b,u(null),d(b))},[o,i,s]);const h=tt("div",n,{ref:[e,g],props:[{id:s,[Yk]:""},a]});return{portalNode:p,portalSubtree:m&&h?Vt.createPortal(h,m):null}}const $i=c.forwardRef(function(e,o){const{render:n,className:a,style:s,children:r,container:i,renderGuards:m,...d}=e,{portalNode:p,portalSubtree:u}=cp({container:i,ref:o,componentProps:e,elementProps:d}),g=c.useRef(null),k=c.useRef(null),h=c.useRef(null),y=c.useRef(null),[b,w]=c.useState(null),C=c.useRef(!1),v=b==null?void 0:b.modal,T=b==null?void 0:b.open,S=typeof m=="boolean"?m:!!b&&!b.modal&&b.open&&!!p;c.useEffect(()=>{if(!p||v)return;function A(D){p&&D.relatedTarget&&En(D)&&(D.type==="focusin"?C.current&&(mc(p),C.current=!1):(Rk(p),C.current=!0))}return to(Me(p,"focusin",A,!0),Me(p,"focusout",A,!0))},[p,v]),c.useEffect(()=>{!p||T!==!1||(mc(p),C.current=!1)},[T,p]);const f=c.useMemo(()=>({beforeOutsideRef:g,afterOutsideRef:k,beforeInsideRef:h,afterInsideRef:y,portalNode:p,setFocusManagerState:w}),[p]);return l.jsxs(c.Fragment,{children:[u,l.jsxs(ip.Provider,{value:f,children:[S&&p&&l.jsx(Oo,{"data-type":"outside",ref:g,onFocus:A=>{var D;if(En(A,p))(D=h.current)==null||D.focus();else{const F=b?b.domReference:null,E=Yu(F);E==null||E.focus()}}}),S&&p&&l.jsx("span",{"aria-owns":p.id,style:Qk}),p&&Vt.createPortal(r,p),S&&p&&l.jsx(Oo,{"data-type":"outside",ref:k,onFocus:A=>{var D;if(En(A,p))(D=y.current)==null||D.focus();else{const F=b?b.domReference:null,E=Vi(F);E==null||E.focus(),b!=null&&b.closeOnFocusOut&&(b==null||b.onOpenChange(!1,Oe(ln,A.nativeEvent)))}}})]})]})});function dp(){const t=new Map;return{emit(e,o){var n;(n=t.get(e))==null||n.forEach(a=>a(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 Gi{constructor(){Ue(this,"nodesRef",{current:[]});Ue(this,"events",dp())}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 up=c.createContext(null),pp=c.createContext(null),go=()=>{var t;return((t=c.useContext(up))==null?void 0:t.id)||null},Bo=t=>{const e=c.useContext(pp);return t??e};function Ji(t){const e=cn(),o=Bo(t),n=go();return he(()=>{if(!e)return;const a={id:e,parentId:n};return o==null||o.addNode(a),()=>{o==null||o.removeNode(a)}},[o,e,n]),e}function mp(t){const{children:e,id:o}=t,n=go();return l.jsx(up.Provider,{value:c.useMemo(()=>({id:o,parentId:n}),[o,n]),children:e})}function gp(t){const{children:e,externalTree:o}=t,n=Ot(()=>o??new Gi).current;return l.jsx(pp.Provider,{value:n,children:e})}function io(t){return t==null?t:"current"in t?t.current:t}function Zk(t,e){const o=Xe(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 Cc=20;let Eo=[];function Qi(){Eo=Eo.filter(t=>{var e;return(e=t.deref())==null?void 0:e.isConnected})}function Xk(t){Qi(),t&&ut(t)!=="body"&&(Eo.push(new WeakRef(t)),Eo.length>Cc&&(Eo=Eo.slice(-Cc)))}function ur(){var t;return Qi(),(t=Eo[Eo.length-1])==null?void 0:t.deref()}function ew(t){return t?Bi(t)?t:xa(t)[0]||t:null}function Tc(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=Ju(t).filter(r=>{const i=r.getAttribute("data-tabindex")||"";return Bi(r)||r.hasAttribute("data-tabindex")&&!i.startsWith("-")}),a=t.getAttribute("tabindex");e.current.includes("floating")||n.length===0?a!=="0"&&t.setAttribute("tabindex","0"):(a!=="-1"||t.hasAttribute("data-tabindex")&&t.getAttribute("data-tabindex")!=="-1")&&(t.setAttribute("tabindex","-1"),t.setAttribute("data-tabindex","-1"))}function Yi(t){const{context:e,children:o,disabled:n=!1,initialFocus:a=!0,returnFocus:s=!0,restoreFocus:r=!1,modal:i=!0,closeOnFocusOut:m=!0,openInteractionType:d="",nextFocusableElement:p,previousFocusableElement:u,beforeContentFocusGuardRef:g,externalTree:k,getInsideElements:h}=t,y="rootStore"in e?e.rootStore:e,b=y.useState("open"),w=y.useState("domReferenceElement"),C=y.useState("floatingElement"),{events:v,dataRef:T}=y.context,S=Ae(()=>{var G;return(G=T.current.floatingContext)==null?void 0:G.nodeId}),f=a===!1,A=Zr(w)&&f,D=c.useRef(["content"]),F=at(a),E=at(s),B=at(d),N=Bo(k),x=lp(),q=c.useRef(!1),M=c.useRef(!1),j=c.useRef(!1),O=c.useRef(null),V=c.useRef(""),$=c.useRef(""),I=c.useRef(null),se=c.useRef(null),_=Kn(I,g,x==null?void 0:x.beforeInsideRef),U=Kn(se,x==null?void 0:x.afterInsideRef),W=bt(),z=bt(),H=ma(),L=x!=null,R=Xr(C),Y=Ae((G=R)=>G?xa(G):[]),be=Ae(()=>(h==null?void 0:h().filter(G=>G!=null))??[]);c.useEffect(()=>{if(n||!i)return;function G(ce){ce.key==="Tab"&&Se(R,vt(Le(R)))&&Y().length===0&&!A&&Ft(ce)}const de=Le(R);return Me(de,"keydown",G)},[n,R,i,A,Y]),c.useEffect(()=>{if(n||!b)return;const G=Le(R);function de(){j.current=!1}function ce(te){const fe=ht(te),ne=be(),ee=Se(C,fe)||Se(w,fe)||Se(x==null?void 0:x.portalNode,fe)||ne.some(Ee=>Ee===fe||Se(Ee,fe));j.current=!ee,$.current=te.pointerType||"keyboard",fe!=null&&fe.closest(`[${rp}]`)&&(M.current=!0)}function we(){$.current="keyboard"}return to(Me(G,"pointerdown",ce,!0),Me(G,"pointerup",de,!0),Me(G,"pointercancel",de,!0),Me(G,"keydown",we,!0))},[n,C,w,R,b,x,be]),c.useEffect(()=>{if(n||!m)return;const G=Le(R);function de(){M.current=!0,z.start(0,()=>{M.current=!1})}function ce(ne){const ee=ht(ne);Bi(ee)&&(O.current=ee)}function we(ne){const ee=ne.relatedTarget,Ee=ne.currentTarget,Ce=ht(ne);queueMicrotask(()=>{const ye=S(),Pe=y.context.triggerElements,pe=be(),Q=(ee==null?void 0:ee.hasAttribute(ga("focus-guard")))&&[I.current,se.current,x==null?void 0:x.beforeInsideRef.current,x==null?void 0:x.afterInsideRef.current,x==null?void 0:x.beforeOutsideRef.current,x==null?void 0:x.afterOutsideRef.current,io(u),io(p)].includes(ee),ae=!(Se(w,ee)||Se(C,ee)||Se(ee,C)||Se(x==null?void 0:x.portalNode,ee)||pe.some(re=>re===ee||Se(re,ee))||ee!=null&&Pe.hasElement(ee)||Pe.hasMatchingElement(re=>Se(re,ee))||Q||N&&(No(N.nodesRef.current,ye).find(re=>{var X,ke;return Se((X=re.context)==null?void 0:X.elements.floating,ee)||Se((ke=re.context)==null?void 0:ke.elements.domReference,ee)})||gc(N.nodesRef.current,ye).find(re=>{var X,ke,xe;return[(X=re.context)==null?void 0:X.elements.floating,Xr((ke=re.context)==null?void 0:ke.elements.floating)].includes(ee)||((xe=re.context)==null?void 0:xe.elements.domReference)===ee})));if(Ee===w&&R&&Tc(R,D),r&&Ee!==w&&!Ms(Ce)&&vt(G)===G.body){if(He(R)&&(R.focus(),r==="popup")){H.request(()=>{R.focus()});return}const re=Y(),X=O.current,ke=(X&&re.includes(X)?X:null)||re[re.length-1]||R;He(ke)&&ke.focus()}if(T.current.insideReactTree){T.current.insideReactTree=!1;return}(A||!i)&&ee&&ae&&!M.current&&(A||ee!==ur())&&(q.current=!0,y.setOpen(!1,Oe(ln,ne)))})}function te(){j.current||(T.current.insideReactTree=!0,W.start(0,()=>{T.current.insideReactTree=!1}))}const fe=He(w)?w:null;if(!(!C&&!fe))return to(fe&&Me(fe,"focusout",we),fe&&Me(fe,"pointerdown",de),C&&Me(C,"focusin",ce),C&&Me(C,"focusout",we),C&&x&&Me(C,"focusout",te,!0))},[n,w,C,R,i,N,x,y,m,r,Y,A,S,D,T,W,z,H,p,u,be]),c.useEffect(()=>{var Ee,Ce,ye;if(n||!C||!b)return;const G=Array.from(((Ee=x==null?void 0:x.portalNode)==null?void 0:Ee.querySelectorAll(`[${ga("portal")}]`))||[]),ce=(ye=(Ce=(N?gc(N.nodesRef.current,S()):[]).find(Pe=>{var pe;return Zr(((pe=Pe.context)==null?void 0:pe.elements.domReference)||null)}))==null?void 0:Ce.context)==null?void 0:ye.elements.domReference,te=[...[C,...G,I.current,se.current,x==null?void 0:x.beforeOutsideRef.current,x==null?void 0:x.afterOutsideRef.current,...be()],ce,io(u),io(p),A?w:null].filter(Pe=>Pe!=null),fe=yc(te,{ariaHidden:i||A,mark:!1}),ne=[C,...G].filter(Pe=>Pe!=null),ee=yc(ne);return()=>{ee(),fe()}},[b,n,w,C,i,x,A,N,S,p,u,be]),he(()=>{if(!b||n||!He(R))return;const G=Le(R),de=vt(G);queueMicrotask(()=>{const ce=F.current,we=typeof ce=="function"?ce(B.current||""):ce;if(we===void 0||we===!1||Se(R,de))return;let fe=null;const ne=()=>(fe==null&&(fe=Y(R)),fe[0]||R);let ee;we===!0||we===null?ee=ne():ee=io(we),ee=ee||ne();const Ee=Se(R,vt(G));os(ee,{preventScroll:ee===R,shouldFocus(){if(Ee)return!0;const Ce=vt(G);return!(Ce!==ee&&Se(R,Ce))}})})},[n,b,R,Y,F,B]),he(()=>{if(n||!R)return;const G=Le(R),de=vt(G);Xk(de);function ce(te){if(te.open||(V.current=Zk(te.nativeEvent,$.current)),te.reason===Ye&&te.nativeEvent.type==="mouseleave"&&(q.current=!0),te.reason===ji)if(te.nested)q.current=!1;else if(Ru(te.nativeEvent)||Iu(te.nativeEvent))q.current=!1;else{let fe=!1;Le(R).createElement("div").focus({get preventScroll(){return fe=!0,!1}}),fe?q.current=!1:q.current=!0}}v.on("openchange",ce);function we(){const te=E.current;let fe=typeof te=="function"?te(V.current):te;if(fe===void 0||fe===!1)return null;if(fe===null&&(fe=!0),typeof fe=="boolean")return w!=null&&w.isConnected?w:ur()||null;const ne=w!=null&&w.isConnected?w:ur();return io(fe)||ne||null}return()=>{v.off("openchange",ce);const te=vt(G),fe=be(),ne=Se(C,te)||fe.some(Ce=>Ce===te||Se(Ce,te))||N&&No(N.nodesRef.current,S(),!1).some(Ce=>{var ye;return Se((ye=Ce.context)==null?void 0:ye.elements.floating,te)}),ee=E.current,Ee=we();queueMicrotask(()=>{const Ce=ew(Ee),ye=typeof ee!="boolean";ee&&!q.current&&He(Ce)&&(!(!ye&&Ce!==te&&te!==G.body)||ne)&&Ce.focus({preventScroll:!0}),q.current=!1})}},[n,C,R,E,v,N,w,S,be]),he(()=>{if(!Du||b||!C)return;const G=vt(Le(C));!He(G)||!Is(G)||Se(C,G)&&G.blur()},[b,C]),he(()=>{if(!(n||!x))return x.setFocusManagerState({modal:i,closeOnFocusOut:m,open:b,onOpenChange:y.setOpen,domReference:w}),()=>{x.setFocusManagerState(null)}},[n,x,i,b,y,m,w]),he(()=>{if(!(n||!R))return Tc(R,D),()=>{queueMicrotask(Qi)}},[n,R,D]);const De=!n&&(i?!A:!0)&&(L||i);return l.jsxs(c.Fragment,{children:[De&&l.jsx(Oo,{"data-type":"inside",ref:_,onFocus:G=>{var de;if(i){const ce=Y();os(ce[ce.length-1])}else if(x!=null&&x.portalNode)if(q.current=!1,En(G,x.portalNode)){const ce=Vi(w);ce==null||ce.focus()}else(de=io(u??x.beforeOutsideRef))==null||de.focus()}}),o,De&&l.jsx(Oo,{"data-type":"inside",ref:U,onFocus:G=>{var de;if(i)os(Y()[0]);else if(x!=null&&x.portalNode)if(m&&(q.current=!0),En(G,x.portalNode)){const ce=Yu(w);ce==null||ce.focus()}else(de=io(p??x.afterOutsideRef))==null||de.focus()}})]})}function Zi(t,e={}){const{enabled:o=!0,event:n="click",toggle:a=!0,ignoreMouse:s=!1,stickIfOpen:r=!0,touchOpenDelay:i=0,reason:m=po}=e,d="rootStore"in t?t.rootStore:t,p=d.context.dataRef,u=c.useRef(void 0),g=ma(),k=bt(),h=c.useMemo(()=>{function y(w,C,v,T){const S=Oe(m,C,v);w&&T==="touch"&&i>0?k.start(i,()=>{d.setOpen(!0,S)}):d.setOpen(w,S)}function b(w,C,v){const T=p.current.openEvent,S=d.select("domReferenceElement")!==C;return w&&S||!w||!a?!0:T&&r?!v(T.type):!1}return{onPointerDown(w){u.current=w.pointerType},onMouseDown(w){const C=u.current,v=w.nativeEvent,T=d.select("open");if(w.button!==0||n==="click"||rn(C,!0)&&s)return;const S=b(T,w.currentTarget,D=>D==="click"||D==="mousedown"),f=ht(v);if(Is(f)){y(S,v,f,C);return}const A=w.currentTarget;g.request(()=>{y(S,v,A,C)})},onClick(w){if(n==="mousedown-only")return;const C=u.current;if(n==="mousedown"&&C){u.current=void 0;return}if(rn(C,!0)&&s)return;const v=d.select("open"),T=b(v,w.currentTarget,S=>S==="click"||S==="mousedown"||S==="keydown"||S==="keyup");y(T,w.nativeEvent,w.currentTarget,C)},onKeyDown(){u.current=void 0}}},[p,n,s,m,d,r,a,g,k,i]);return c.useMemo(()=>o?{reference:h}:Je,[o,h])}function tw(t,e){let o=null,n=null,a=!1;return{contextElement:t||void 0,getBoundingClientRect(){var k;const s=(t==null?void 0:t.getBoundingClientRect())||{width:0,height:0,x:0,y:0},r=e.axis==="x"||e.axis==="both",i=e.axis==="y"||e.axis==="both",m=["mouseenter","mousemove"].includes(((k=e.dataRef.current.openEvent)==null?void 0:k.type)||"")&&e.pointerType!=="touch";let d=s.width,p=s.height,u=s.x,g=s.y;return o==null&&e.x&&r&&(o=s.x-e.x),n==null&&e.y&&i&&(n=s.y-e.y),u-=o||0,g-=n||0,d=0,p=0,!a||m?(d=e.axis==="y"?s.width:0,p=e.axis==="x"?s.height:0,u=r&&e.x!=null?e.x:u,g=i&&e.y!=null?e.y:g):a&&!m&&(p=e.axis==="x"?s.height:p,d=e.axis==="y"?s.width:d),a=!0,{width:d,height:p,x:u,y:g,top:g,right:u+d,bottom:g+p,left:u}}}}function Sc(t){return t!=null&&t.clientX!=null}function ow(t,e={}){const{enabled:o=!0,axis:n="both"}=e,a="rootStore"in t?t.rootStore:t,s=a.useState("open"),r=a.useState("floatingElement"),i=a.useState("domReferenceElement"),m=a.context.dataRef,d=c.useRef(!1),p=c.useRef(null),[u,g]=c.useState(),[k,h]=c.useState([]),y=Ae(T=>{a.set("positionReference",T)}),b=Ae((T,S,f)=>{d.current||m.current.openEvent&&!Sc(m.current.openEvent)||a.set("positionReference",tw(f??i,{x:T,y:S,axis:n,dataRef:m,pointerType:u}))}),w=Ae(T=>{s?p.current||(b(T.clientX,T.clientY,T.currentTarget),h([])):b(T.clientX,T.clientY,T.currentTarget)}),C=rn(u)?r:s;c.useEffect(()=>{if(!o){y(i);return}if(!C)return;function T(){var A;(A=p.current)==null||A.call(p),p.current=null}const S=Xe(r);function f(A){const D=ht(A);Se(r,D)?T():b(A.clientX,A.clientY)}return!m.current.openEvent||Sc(m.current.openEvent)?p.current=Me(S,"mousemove",f):y(i),T},[C,o,r,m,i,a,b,y,k]),c.useEffect(()=>()=>{a.set("positionReference",null)},[a]),c.useEffect(()=>{o&&!r&&(d.current=!1)},[o,r]),c.useEffect(()=>{!o&&s&&(d.current=!0)},[o,s]);const v=c.useMemo(()=>{function T(S){g(S.pointerType)}return{onPointerDown:T,onPointerEnter:T,onMouseMove:w,onMouseEnter:w}},[w]);return c.useMemo(()=>o?{reference:v,trigger:v}:{},[o,v])}const nw={intentional:"onClick",sloppy:"onPointerDown"};function aw(){return!1}function sw(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 Os(t,e={}){const{enabled:o=!0,escapeKey:n=!0,outsidePress:a=!0,outsidePressEvent:s="sloppy",referencePress:r=aw,referencePressEvent:i="sloppy",bubbles:m,externalTree:d}=e,p="rootStore"in t?t.rootStore:t,u=p.useState("open"),g=p.useState("floatingElement"),{dataRef:k}=p.context,h=Bo(d),y=Ae(typeof a=="function"?a:()=>!1),b=typeof a=="function"?y:a,w=b!==!1,C=Ae(()=>s),{escapeKey:v,outsidePress:T}=sw(m),S=c.useRef(!1),f=c.useRef(!1),A=c.useRef(!1),D=c.useRef(!1),F=c.useRef(""),E=c.useRef(null),B=bt(),N=bt(),x=Ae(()=>{N.clear(),k.current.insideReactTree=!1}),q=Ae(U=>{var H;const W=(H=k.current.floatingContext)==null?void 0:H.nodeId;return(h?No(h.nodesRef.current,W):[]).some(L=>{var R;return((R=L.context)==null?void 0:R.open)&&!L.context.dataRef.current[U]})}),M=Ae(U=>ar(U,p.select("floatingElement"))||ar(U,p.select("domReferenceElement"))),j=Ae(U=>{r()&&p.setOpen(!1,Oe(po,U.nativeEvent))}),O=Ae(U=>{if(!u||!o||!n||U.key!=="Escape"||D.current||!v&&q("__escapeKeyBubbles"))return;const W=Uy(U)?U.nativeEvent:U,z=Oe(Aa,W);p.setOpen(!1,z),z.isCanceled||U.preventDefault(),!v&&!z.isPropagationAllowed&&U.stopPropagation()}),V=Ae(()=>{k.current.insideReactTree=!0,N.start(0,x)}),$=Ae(U=>{if(!u||!o||U.button!==0)return;const W=ht(U.nativeEvent);Se(p.select("floatingElement"),W)&&(S.current||(S.current=!0,f.current=!1))}),I=Ae(U=>{!u||!o||(U.defaultPrevented||U.nativeEvent.defaultPrevented)&&S.current&&(f.current=!0)});c.useEffect(()=>{if(!u||!o)return;k.current.__escapeKeyBubbles=v,k.current.__outsidePressBubbles=T;const U=new Ut,W=new Ut;function z(){U.clear(),D.current=!0}function H(){U.start(Es()?5:0,()=>{D.current=!1})}function L(){A.current=!0,W.start(0,()=>{A.current=!1})}function R(){S.current=!1,f.current=!1}function Y(){const Q=F.current,ae=Q==="pen"||!Q?"mouse":Q,re=C(),X=typeof re=="function"?re():re;return typeof X=="string"?X:X[ae]}function be(Q){const ae=Y();return ae==="intentional"&&Q.type!=="click"||ae==="sloppy"&&Q.type==="click"}function De(Q){var X;const ae=(X=k.current.floatingContext)==null?void 0:X.nodeId,re=h&&No(h.nodesRef.current,ae).some(ke=>{var xe;return ar(Q,(xe=ke.context)==null?void 0:xe.elements.floating)});return M(Q)||re}function G(Q){if(be(Q)){Q.type!=="click"&&!M(Q)&&(W.clear(),A.current=!1),x();return}if(k.current.insideReactTree){x();return}const ae=ht(Q),re=`[${ga("inert")}]`,X=Ie(ae)?ae.getRootNode():null,ke=Array.from((Wn(X)?X:Le(p.select("floatingElement"))).querySelectorAll(re)),xe=p.context.triggerElements;if(ae&&(xe.hasElement(ae)||xe.hasMatchingElement(Be=>Se(Be,ae))))return;let Ge=Ie(ae)?ae:null;for(;Ge&&!eo(Ge);){const Be=no(Ge);if(eo(Be)||!Ie(Be))break;Ge=Be}if(!(ke.length&&Ie(ae)&&!Wy(ae)&&!Se(ae,p.select("floatingElement"))&&ke.every(Be=>!Se(Ge,Be)))){if(He(ae)&&!("touches"in Q)){const Be=eo(ae),Qe=At(ae),it=/auto|scroll/,Nt=Be||it.test(Qe.overflowX),qt=Be||it.test(Qe.overflowY),Wt=Nt&&ae.clientWidth>0&&ae.scrollWidth>ae.clientWidth,ho=qt&&ae.clientHeight>0&&ae.scrollHeight>ae.clientHeight,xt=Qe.direction==="rtl",kn=ho&&(xt?Q.offsetX<=ae.offsetWidth-ae.clientWidth:Q.offsetX>ae.clientWidth),_e=Wt&&Q.offsetY>ae.clientHeight;if(kn||_e)return}if(!De(Q)){if(Y()==="intentional"&&A.current){W.clear(),A.current=!1;return}typeof b=="function"&&!b(Q)||q("__outsidePressBubbles")||(p.setOpen(!1,Oe(ji,Q)),x())}}}function de(Q){Y()!=="sloppy"||Q.pointerType==="touch"||!p.select("open")||!o||M(Q)||G(Q)}function ce(Q){if(Y()!=="sloppy"||!p.select("open")||!o||M(Q))return;const ae=Q.touches[0];ae&&(E.current={startTime:Date.now(),startX:ae.clientX,startY:ae.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},B.start(1e3,()=>{E.current&&(E.current.dismissOnTouchEnd=!1,E.current.dismissOnMouseDown=!1)}))}function we(Q,ae){const re=ht(Q);if(!re)return;const X=Me(re,Q.type,()=>{ae(Q),X()})}function te(Q){F.current="touch",we(Q,ce)}function fe(Q){B.clear(),Q.type==="pointerdown"&&(F.current=Q.pointerType),!(Q.type==="mousedown"&&E.current&&!E.current.dismissOnMouseDown)&&we(Q,ae=>{ae.type==="pointerdown"?de(ae):G(ae)})}function ne(Q){if(!S.current)return;const ae=f.current;if(R(),Y()==="intentional"){if(Q.type==="pointercancel"){ae&&L();return}if(!De(Q)){if(ae){L();return}typeof b=="function"&&!b(Q)||(W.clear(),A.current=!0,x())}}}function ee(Q){if(Y()!=="sloppy"||!E.current||M(Q))return;const ae=Q.touches[0];if(!ae)return;const re=Math.abs(ae.clientX-E.current.startX),X=Math.abs(ae.clientY-E.current.startY),ke=Math.sqrt(re*re+X*X);ke>5&&(E.current.dismissOnTouchEnd=!0),ke>10&&(G(Q),B.clear(),E.current=null)}function Ee(Q){we(Q,ee)}function Ce(Q){Y()!=="sloppy"||!E.current||M(Q)||(E.current.dismissOnTouchEnd&&G(Q),B.clear(),E.current=null)}function ye(Q){we(Q,Ce)}const Pe=Le(g),pe=to(n&&to(Me(Pe,"keydown",O),Me(Pe,"compositionstart",z),Me(Pe,"compositionend",H)),w&&to(Me(Pe,"click",fe,!0),Me(Pe,"pointerdown",fe,!0),Me(Pe,"pointerup",ne,!0),Me(Pe,"pointercancel",ne,!0),Me(Pe,"mousedown",fe,!0),Me(Pe,"mouseup",ne,!0),Me(Pe,"touchstart",te,!0),Me(Pe,"touchmove",Ee,!0),Me(Pe,"touchend",ye,!0)));return()=>{pe(),U.clear(),W.clear(),R(),A.current=!1}},[k,g,n,w,b,u,o,v,T,O,x,C,q,M,h,p,B]),c.useEffect(x,[b,x]);const se=c.useMemo(()=>({onKeyDown:O,[nw[i]]:j,...i!=="intentional"&&{onClick:j}}),[O,j,i]),_=c.useMemo(()=>({onKeyDown:O,onPointerDown:I,onMouseDown:I,onClickCapture:V,onMouseDownCapture(U){V(),$(U)},onPointerDownCapture(U){V(),$(U)},onMouseUpCapture:V,onTouchEndCapture:V,onTouchMoveCapture:V}),[O,V,$,I]);return c.useMemo(()=>o?{reference:se,floating:_,trigger:se}:{},[o,se,_])}function Dc(t,e,o){let{reference:n,floating:a}=t;const s=_t(e),r=zi(e),i=Ui(r),m=Tt(e),d=s==="y",p=n.x+n.width/2-a.width/2,u=n.y+n.height/2-a.height/2,g=n[i]/2-a[i]/2;let k;switch(m){case"top":k={x:p,y:n.y-a.height};break;case"bottom":k={x:p,y:n.y+n.height};break;case"right":k={x:n.x+n.width,y:u};break;case"left":k={x:n.x-a.width,y:u};break;default:k={x:n.x,y:n.y}}switch(zo(e)){case"start":k[r]-=g*(o&&d?-1:1);break;case"end":k[r]+=g*(o&&d?-1:1);break}return k}async function rw(t,e){var o;e===void 0&&(e={});const{x:n,y:a,platform:s,rects:r,elements:i,strategy:m}=t,{boundary:d="clippingAncestors",rootBoundary:p="viewport",elementContext:u="floating",altBoundary:g=!1,padding:k=0}=mo(e,t),h=Vu(k),b=i[g?u==="floating"?"reference":"floating":u],w=ps(await s.getClippingRect({element:(o=await(s.isElement==null?void 0:s.isElement(b)))==null||o?b:b.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(i.floating)),boundary:d,rootBoundary:p,strategy:m})),C=u==="floating"?{x:n,y:a,width:r.floating.width,height:r.floating.height}:r.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(i.floating)),T=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=ps(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:i,rect:C,offsetParent:v,strategy:m}):C);return{top:(w.top-S.top+h.top)/T.y,bottom:(S.bottom-w.bottom+h.bottom)/T.y,left:(w.left-S.left+h.left)/T.x,right:(S.right-w.right+h.right)/T.x}}const iw=50,lw=async(t,e,o)=>{const{placement:n="bottom",strategy:a="absolute",middleware:s=[],platform:r}=o,i=r.detectOverflow?r:{...r,detectOverflow:rw},m=await(r.isRTL==null?void 0:r.isRTL(e));let d=await r.getElementRects({reference:t,floating:e,strategy:a}),{x:p,y:u}=Dc(d,n,m),g=n,k=0;const h={};for(let y=0;yq<=0)){var B,N;const q=(((B=s.flip)==null?void 0:B.index)||0)+1,M=A[q];if(M&&(!(u==="alignment"?C!==_t(M):!1)||E.every(V=>_t(V.placement)===C?V.overflows[0]>0:!0)))return{data:{index:q,overflows:E},reset:{placement:M}};let j=(N=E.filter(O=>O.overflows[0]<=0).sort((O,V)=>O.overflows[1]-V.overflows[1])[0])==null?void 0:N.placement;if(!j)switch(k){case"bestFit":{var x;const O=(x=E.filter(V=>{if(f){const $=_t(V.placement);return $===C||$==="y"}return!0}).map(V=>[V.placement,V.overflows.filter($=>$>0).reduce(($,I)=>$+I,0)]).sort((V,$)=>V[1]-$[1])[0])==null?void 0:x[0];O&&(j=O);break}case"initialPlacement":j=i;break}if(a!==j)return{reset:{placement:j}}}return{}}}};function Ac(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function xc(t){return ck.some(e=>t[e]>=0)}const dw=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:o,platform:n}=e,{strategy:a="referenceHidden",...s}=mo(t,e);switch(a){case"referenceHidden":{const r=await n.detectOverflow(e,{...s,elementContext:"reference"}),i=Ac(r,o.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:xc(i)}}}case"escaped":{const r=await n.detectOverflow(e,{...s,altBoundary:!0}),i=Ac(r,o.floating);return{data:{escapedOffsets:i,escaped:xc(i)}}}default:return{}}}}},fp=new Set(["left","top"]);async function uw(t,e){const{placement:o,platform:n,elements:a}=t,s=await(n.isRTL==null?void 0:n.isRTL(a.floating)),r=Tt(o),i=zo(o),m=_t(o)==="y",d=fp.has(r)?-1:1,p=s&&m?-1:1,u=mo(e,t);let{mainAxis:g,crossAxis:k,alignmentAxis:h}=typeof u=="number"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return i&&typeof h=="number"&&(k=i==="end"?h*-1:h),m?{x:k*p,y:g*d}:{x:g*d,y:k*p}}const pw=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var o,n;const{x:a,y:s,placement:r,middlewareData:i}=e,m=await uw(e,t);return r===((o=i.offset)==null?void 0:o.placement)&&(n=i.arrow)!=null&&n.alignmentOffset?{}:{x:a+m.x,y:s+m.y,data:{...m,placement:r}}}}},mw=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:o,y:n,placement:a,platform:s}=e,{mainAxis:r=!0,crossAxis:i=!1,limiter:m={fn:w=>{let{x:C,y:v}=w;return{x:C,y:v}}},...d}=mo(t,e),p={x:o,y:n},u=await s.detectOverflow(e,d),g=_t(Tt(a)),k=_i(g);let h=p[k],y=p[g];if(r){const w=k==="y"?"top":"left",C=k==="y"?"bottom":"right",v=h+u[w],T=h-u[C];h=oi(v,h,T)}if(i){const w=g==="y"?"top":"left",C=g==="y"?"bottom":"right",v=y+u[w],T=y-u[C];y=oi(v,y,T)}const b=m.fn({...e,[k]:h,[g]:y});return{...b,data:{x:b.x-o,y:b.y-n,enabled:{[k]:r,[g]:i}}}}}},gw=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:o,y:n,placement:a,rects:s,middlewareData:r}=e,{offset:i=0,mainAxis:m=!0,crossAxis:d=!0}=mo(t,e),p={x:o,y:n},u=_t(a),g=_i(u);let k=p[g],h=p[u];const y=mo(i,e),b=typeof y=="number"?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(m){const v=g==="y"?"height":"width",T=s.reference[g]-s.floating[v]+b.mainAxis,S=s.reference[g]+s.reference[v]-b.mainAxis;kS&&(k=S)}if(d){var w,C;const v=g==="y"?"width":"height",T=fp.has(Tt(a)),S=s.reference[u]-s.floating[v]+(T&&((w=r.offset)==null?void 0:w[u])||0)+(T?0:b.crossAxis),f=s.reference[u]+s.reference[v]+(T?0:((C=r.offset)==null?void 0:C[u])||0)-(T?b.crossAxis:0);hf&&(h=f)}return{[g]:k,[u]:h}}}},fw=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var o,n;const{placement:a,rects:s,platform:r,elements:i}=e,{apply:m=()=>{},...d}=mo(t,e),p=await r.detectOverflow(e,d),u=Tt(a),g=zo(a),k=_t(a)==="y",{width:h,height:y}=s.floating;let b,w;u==="top"||u==="bottom"?(b=u,w=g===(await(r.isRTL==null?void 0:r.isRTL(i.floating))?"start":"end")?"left":"right"):(w=u,b=g==="end"?"top":"bottom");const C=y-p.top-p.bottom,v=h-p.left-p.right,T=$n(y-p[b],C),S=$n(h-p[w],v),f=!e.middlewareData.shift;let A=T,D=S;if((o=e.middlewareData.shift)!=null&&o.enabled.x&&(D=v),(n=e.middlewareData.shift)!=null&&n.enabled.y&&(A=C),f&&!g){const E=Mt(p.left,0),B=Mt(p.right,0),N=Mt(p.top,0),x=Mt(p.bottom,0);k?D=h-2*(E!==0||B!==0?E+B:Mt(p.left,p.right)):A=y-2*(N!==0||x!==0?N+x:Mt(p.top,p.bottom))}await m({...e,availableWidth:D,availableHeight:A});const F=await r.getDimensions(i.floating);return h!==F.width||y!==F.height?{reset:{rects:!0}}:{}}}};function hp(t){const e=At(t);let o=parseFloat(e.width)||0,n=parseFloat(e.height)||0;const a=He(t),s=a?t.offsetWidth:o,r=a?t.offsetHeight:n,i=ds(o)!==s||ds(n)!==r;return i&&(o=s,n=r),{width:o,height:n,$:i}}function Xi(t){return Ie(t)?t:t.contextElement}function Rn(t){const e=Xi(t);if(!He(e))return oo(1);const o=e.getBoundingClientRect(),{width:n,height:a,$:s}=hp(e);let r=(s?ds(o.width):o.width)/n,i=(s?ds(o.height):o.height)/a;return(!r||!Number.isFinite(r))&&(r=1),(!i||!Number.isFinite(i))&&(i=1),{x:r,y:i}}const hw=oo(0);function bp(t){const e=Xe(t);return!Es()||!e.visualViewport?hw:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function bw(t,e,o){return e===void 0&&(e=!1),!o||e&&o!==Xe(t)?!1:e}function dn(t,e,o,n){e===void 0&&(e=!1),o===void 0&&(o=!1);const a=t.getBoundingClientRect(),s=Xi(t);let r=oo(1);e&&(n?Ie(n)&&(r=Rn(n)):r=Rn(t));const i=bw(s,o,n)?bp(s):oo(0);let m=(a.left+i.x)/r.x,d=(a.top+i.y)/r.y,p=a.width/r.x,u=a.height/r.y;if(s){const g=Xe(s),k=n&&Ie(n)?Xe(n):n;let h=g,y=Qr(h);for(;y&&n&&k!==h;){const b=Rn(y),w=y.getBoundingClientRect(),C=At(y),v=w.left+(y.clientLeft+parseFloat(C.paddingLeft))*b.x,T=w.top+(y.clientTop+parseFloat(C.paddingTop))*b.y;m*=b.x,d*=b.y,p*=b.x,u*=b.y,m+=v,d+=T,h=Xe(y),y=Qr(h)}}return ps({width:p,height:u,x:m,y:d})}function Ns(t,e){const o=Rs(t).scrollLeft;return e?e.left+o:dn(ao(t)).left+o}function yp(t,e){const o=t.getBoundingClientRect(),n=o.left+e.scrollLeft-Ns(t,o),a=o.top+e.scrollTop;return{x:n,y:a}}function yw(t){let{elements:e,rect:o,offsetParent:n,strategy:a}=t;const s=a==="fixed",r=ao(n),i=e?Ps(e.floating):!1;if(n===r||i&&s)return o;let m={scrollLeft:0,scrollTop:0},d=oo(1);const p=oo(0),u=He(n);if((u||!u&&!s)&&((ut(n)!=="body"||Uo(r))&&(m=Rs(n)),u)){const k=dn(n);d=Rn(n),p.x=k.x+n.clientLeft,p.y=k.y+n.clientTop}const g=r&&!u&&!s?yp(r,m):oo(0);return{width:o.width*d.x,height:o.height*d.y,x:o.x*d.x-m.scrollLeft*d.x+p.x+g.x,y:o.y*d.y-m.scrollTop*d.y+p.y+g.y}}function kw(t){return Array.from(t.getClientRects())}function ww(t){const e=ao(t),o=Rs(t),n=t.ownerDocument.body,a=Mt(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),s=Mt(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let r=-o.scrollLeft+Ns(t);const i=-o.scrollTop;return At(n).direction==="rtl"&&(r+=Mt(e.clientWidth,n.clientWidth)-a),{width:a,height:s,x:r,y:i}}const Pc=25;function vw(t,e){const o=Xe(t),n=ao(t),a=o.visualViewport;let s=n.clientWidth,r=n.clientHeight,i=0,m=0;if(a){s=a.width,r=a.height;const p=Es();(!p||p&&e==="fixed")&&(i=a.offsetLeft,m=a.offsetTop)}const d=Ns(n);if(d<=0){const p=n.ownerDocument,u=p.body,g=getComputedStyle(u),k=p.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,h=Math.abs(n.clientWidth-u.clientWidth-k);h<=Pc&&(s-=h)}else d<=Pc&&(s+=d);return{width:s,height:r,x:i,y:m}}function Cw(t,e){const o=dn(t,!0,e==="fixed"),n=o.top+t.clientTop,a=o.left+t.clientLeft,s=He(t)?Rn(t):oo(1),r=t.clientWidth*s.x,i=t.clientHeight*s.y,m=a*s.x,d=n*s.y;return{width:r,height:i,x:m,y:d}}function Ec(t,e,o){let n;if(e==="viewport")n=vw(t,o);else if(e==="document")n=ww(ao(t));else if(Ie(e))n=Cw(e,o);else{const a=bp(t);n={x:e.x-a.x,y:e.y-a.y,width:e.width,height:e.height}}return ps(n)}function kp(t,e){const o=no(t);return o===e||!Ie(o)||eo(o)?!1:At(o).position==="fixed"||kp(o,e)}function Tw(t,e){const o=e.get(t);if(o)return o;let n=pa(t,[],!1).filter(i=>Ie(i)&&ut(i)!=="body"),a=null;const s=At(t).position==="fixed";let r=s?no(t):t;for(;Ie(r)&&!eo(r);){const i=At(r),m=Mi(r);!m&&i.position==="fixed"&&(a=null),(s?!m&&!a:!m&&i.position==="static"&&!!a&&(a.position==="absolute"||a.position==="fixed")||Uo(r)&&!m&&kp(t,r))?n=n.filter(p=>p!==r):a=i,r=no(r)}return e.set(t,n),n}function Sw(t){let{element:e,boundary:o,rootBoundary:n,strategy:a}=t;const r=[...o==="clippingAncestors"?Ps(e)?[]:Tw(e,this._c):[].concat(o),n],i=Ec(e,r[0],a);let m=i.top,d=i.right,p=i.bottom,u=i.left;for(let g=1;g{r(!1,1e-7)},1e3)}A===1&&!vp(d,t.getBoundingClientRect())&&r(),T=!1}try{o=new IntersectionObserver(S,{...v,root:a.ownerDocument})}catch{o=new IntersectionObserver(S,v)}o.observe(t)}return r(!0),s}function Ic(t,e,o,n){n===void 0&&(n={});const{ancestorScroll:a=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:m=!1}=n,d=Xi(t),p=a||s?[...d?pa(d):[],...e?pa(e):[]]:[];p.forEach(w=>{a&&w.addEventListener("scroll",o,{passive:!0}),s&&w.addEventListener("resize",o)});const u=d&&i?Rw(d,o):null;let g=-1,k=null;r&&(k=new ResizeObserver(w=>{let[C]=w;C&&C.target===d&&k&&e&&(k.unobserve(e),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var v;(v=k)==null||v.observe(e)})),o()}),d&&!m&&k.observe(d),e&&k.observe(e));let h,y=m?dn(t):null;m&&b();function b(){const w=dn(t);y&&!vp(y,w)&&o(),y=w,h=requestAnimationFrame(b)}return o(),()=>{var w;p.forEach(C=>{a&&C.removeEventListener("scroll",o),s&&C.removeEventListener("resize",o)}),u==null||u(),(w=k)==null||w.disconnect(),k=null,m&&cancelAnimationFrame(h)}}const Iw=pw,Fw=mw,Mw=cw,Ow=fw,Nw=dw,jw=gw,Lw=(t,e,o)=>{const n=new Map,a={platform:Ew,...o},s={...a.platform,_c:n};return lw(t,e,{...a,platform:s})};var _w=typeof document<"u",Uw=function(){},ns=_w?c.useLayoutEffect:Uw;function hs(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,a;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(!hs(t[n],e[n]))return!1;return!0}if(a=Object.keys(t),o=a.length,o!==Object.keys(e).length)return!1;for(n=o;n--!==0;)if(!{}.hasOwnProperty.call(e,a[n]))return!1;for(n=o;n--!==0;){const s=a[n];if(!(s==="_owner"&&t.$$typeof)&&!hs(t[s],e[s]))return!1}return!0}return t!==t&&e!==e}function Cp(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function Fc(t,e){const o=Cp(t);return Math.round(e*o)/o}function mr(t){const e=c.useRef(t);return ns(()=>{e.current=t}),e}function zw(t){t===void 0&&(t={});const{placement:e="bottom",strategy:o="absolute",middleware:n=[],platform:a,elements:{reference:s,floating:r}={},transform:i=!0,whileElementsMounted:m,open:d}=t,[p,u]=c.useState({x:0,y:0,strategy:o,placement:e,middlewareData:{},isPositioned:!1}),[g,k]=c.useState(n);hs(g,n)||k(n);const[h,y]=c.useState(null),[b,w]=c.useState(null),C=c.useCallback(V=>{V!==f.current&&(f.current=V,y(V))},[]),v=c.useCallback(V=>{V!==A.current&&(A.current=V,w(V))},[]),T=s||h,S=r||b,f=c.useRef(null),A=c.useRef(null),D=c.useRef(p),F=m!=null,E=mr(m),B=mr(a),N=mr(d),x=c.useCallback(()=>{if(!f.current||!A.current)return;const V={placement:e,strategy:o,middleware:g};B.current&&(V.platform=B.current),Lw(f.current,A.current,V).then($=>{const I={...$,isPositioned:N.current!==!1};q.current&&!hs(D.current,I)&&(D.current=I,Vt.flushSync(()=>{u(I)}))})},[g,e,o,B,N]);ns(()=>{d===!1&&D.current.isPositioned&&(D.current.isPositioned=!1,u(V=>({...V,isPositioned:!1})))},[d]);const q=c.useRef(!1);ns(()=>(q.current=!0,()=>{q.current=!1}),[]),ns(()=>{if(T&&(f.current=T),S&&(A.current=S),T&&S){if(E.current)return E.current(T,S,x);x()}},[T,S,x,E,F]);const M=c.useMemo(()=>({reference:f,floating:A,setReference:C,setFloating:v}),[C,v]),j=c.useMemo(()=>({reference:T,floating:S}),[T,S]),O=c.useMemo(()=>{const V={position:o,left:0,top:0};if(!j.floating)return V;const $=Fc(j.floating,p.x),I=Fc(j.floating,p.y);return i?{...V,transform:"translate("+$+"px, "+I+"px)",...Cp(j.floating)>=1.5&&{willChange:"transform"}}:{position:o,left:$,top:I}},[o,i,j.floating,p.x,p.y]);return c.useMemo(()=>({...p,update:x,refs:M,elements:j,floatingStyles:O}),[p,x,M,j,O])}const Bw=(t,e)=>{const o=Iw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Vw=(t,e)=>{const o=Fw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Hw=(t,e)=>({fn:jw(t).fn,options:[t,e]}),qw=(t,e)=>{const o=Mw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Ww=(t,e)=>{const o=Ow(t);return{name:o.name,fn:o.fn,options:[t,e]}},Kw=(t,e)=>{const o=Nw(t);return{name:o.name,fn:o.fn,options:[t,e]}},le=(t,e,o,n,a,s,...r)=>{if(r.length>0)throw new Error(st(1));let i;if(t)i=t;else throw new Error("Missing arguments");return i};var Tp=zg();const $w=Hi(19),Gw=$w?Qw:Yw;function Sp(t,e,o,n,a){return Gw(t,e,o,n,a)}function Jw(t,e,o,n,a){const s=c.useCallback(()=>e(t.getSnapshot(),o,n,a),[t,e,o,n,a]);return Tp.useSyncExternalStore(t.subscribe,s,s)}Iy({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 a of t.syncHooks)o.add(a.store);const n=[];for(const a of o)n.push(a.subscribe(e));return()=>{for(const a of n)a()}}),Tp.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot))}});function Qw(t,e,o,n,a){const s=Ry();if(!s)return Jw(t,e,o,n,a);const r=s.syncIndex;s.syncIndex+=1;let i;return s.didInitialize?(i=s.syncHooks[r],(i.store!==t||i.selector!==e||!Object.is(i.a1,o)||!Object.is(i.a2,n)||!Object.is(i.a3,a))&&(i.store!==t&&(s.didChangeStore=!0),i.store=t,i.selector=e,i.a1=o,i.a2=n,i.a3=a,i.didChange=!0)):(i={store:t,selector:e,a1:o,a2:n,a3:a,value:e(t.getSnapshot(),o,n,a),didChange:!1},s.syncHooks.push(i)),i.value}function Yw(t,e,o,n,a){return Bg.useSyncExternalStoreWithSelector(t.subscribe,t.getSnapshot,t.getSnapshot,s=>e(s,o,n,a))}class Zw{constructor(e){Ue(this,"subscribe",e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}));Ue(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,a){return Sp(this,e,o,n,a)}}class Pa extends Zw{constructor(e,o={},n){super(e),this.context=o,this.selectors=n}useSyncedValue(e,o){c.useDebugValue(e);const n=this;he(()=>{n.state[e]!==o&&n.set(e,o)},[n,e,o])}useSyncedValueWithCleanup(e,o){const n=this;he(()=>(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);he(()=>{o.update(e)},[o,...n])}useControlledProp(e,o){c.useDebugValue(e);const n=this,a=o!==void 0;he(()=>{a&&!Object.is(n.state[e],o)&&n.setState({...n.state,[e]:o})},[n,e,o,a])}select(e,o,n,a){const s=this.selectors[e];return s(this.state,o,n,a)}useState(e,o,n,a){return c.useDebugValue(e),Sp(this,this.selectors[e],o,n,a)}useContextCallback(e,o){c.useDebugValue(e);const n=Ae(o??Ni);this.context[e]=n}useStateSetter(e){const o=c.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 a=n(this.state);return o(a,a,this),this.subscribe(s=>{const r=n(s);if(!Object.is(a,r)){const i=a;a=r,o(r,i,this)}})}}const Xw={open:le(t=>t.open),transitionStatus:le(t=>t.transitionStatus),domReferenceElement:le(t=>t.domReferenceElement),referenceElement:le(t=>t.positionReference??t.referenceElement),floatingElement:le(t=>t.floatingElement),floatingId:le(t=>t.floatingId)};class js extends Pa{constructor(o){const{syncOnly:n,nested:a,onOpenChange:s,triggerElements:r,...i}=o;super({...i,positionReference:i.referenceElement,domReferenceElement:i.referenceElement},{onOpenChange:s,dataRef:{current:{}},events:dp(),nested:a,triggerElements:r},Xw);Ue(this,"syncOpenEvent",(o,n)=>{(!o||!this.state.open||n!=null&&zy(n))&&(this.context.dataRef.current.openEvent=o?n:void 0)});Ue(this,"dispatchOpenChange",(o,n)=>{this.syncOpenEvent(o,n.event);const a={open:o,reason:n.reason,nativeEvent:n.event,nested:this.context.nested,triggerElement:n.trigger};this.context.events.emit("openchange",a)});Ue(this,"setOpen",(o,n)=>{var a,s,r,i;if(this.syncOnly){(s=(a=this.context).onOpenChange)==null||s.call(a,o,n);return}this.dispatchOpenChange(o,n),(i=(r=this.context).onOpenChange)==null||i.call(r,o,n)});this.syncOnly=n}}function Dp(t){const{popupStore:e,treatPopupAsFloatingElement:o=!1,floatingRootContext:n,floatingId:a,nested:s,onOpenChange:r}=t,i=e.useState("open"),m=e.useState("activeTriggerElement"),d=e.useState(o?"popupElement":"positionerElement"),p=e.context.triggerElements,u=r,g=c.useRef(null);n===void 0&&g.current===null&&(g.current=new js({open:i,transitionStatus:void 0,referenceElement:m,floatingElement:d,triggerElements:p,onOpenChange:u,floatingId:a,syncOnly:!0,nested:s}));const k=n??g.current;return e.useSyncedValue("floatingId",a),he(()=>{const h={open:i,floatingId:a,referenceElement:m,floatingElement:d};Ie(m)&&(h.domReferenceElement=m),k.state.positionReference===k.state.referenceElement&&(h.positionReference=m),k.update(h)},[i,a,m,d,k]),k.context.onOpenChange=u,k.context.nested=s,k}function ev(t,e=!1,o=!1){const[n,a]=c.useState(t&&e?"idle":void 0),[s,r]=c.useState(t);return t&&!s&&(r(!0),a("starting")),!t&&s&&n!=="ending"&&!o&&a("ending"),!t&&!s&&n==="ending"&&a(void 0),he(()=>{if(!t&&s&&n!=="ending"&&o){const i=Zt.request(()=>{a("ending")});return()=>{Zt.cancel(i)}}},[t,s,n,o]),he(()=>{if(!t||e)return;const i=Zt.request(()=>{a(void 0)});return()=>{Zt.cancel(i)}},[e,t]),he(()=>{if(!t||!e)return;t&&s&&n!=="idle"&&a("starting");const i=Zt.request(()=>{a("idle")});return()=>{Zt.cancel(i)}},[e,t,s,n]),{mounted:s,setMounted:r,transitionStatus:n}}let fa=(function(t){return t.startingStyle="data-starting-style",t.endingStyle="data-ending-style",t})({});const tv={[fa.startingStyle]:""},ov={[fa.endingStyle]:""},Ea={transitionStatus(t){return t==="starting"?tv:t==="ending"?ov:null}};function el(t,e=!1,o=!0){const n=ma();return Ae((a,s=null)=>{n.cancel();const r=io(t);if(r==null)return;const i=r,m=()=>{Vt.flushSync(a)};if(typeof i.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){a();return}function d(){Promise.all(i.getAnimations().map(p=>p.finished)).then(()=>{s!=null&&s.aborted||m()}).catch(()=>{if(o){s!=null&&s.aborted||m();return}const p=i.getAnimations();!(s!=null&&s.aborted)&&p.length>0&&p.some(u=>u.pending||u.playState!=="finished")&&d()})}if(e){const p=fa.startingStyle;if(!i.hasAttribute(p)){n.request(d);return}const u=new MutationObserver(()=>{i.hasAttribute(p)||(u.disconnect(),d())});u.observe(i,{attributes:!0,attributeFilter:[p]}),s==null||s.addEventListener("abort",()=>u.disconnect(),{once:!0});return}n.request(d)})}function Ra(t){const{enabled:e=!0,open:o,ref:n,onComplete:a}=t,s=Ae(a),r=el(n,o,!1);c.useEffect(()=>{if(!e)return;const i=new AbortController;return r(s,i.signal),()=>{i.abort()}},[e,o,s,r])}const Qn={tabIndex:-1,[Yr]:""};function tl(t,e,o=!1){const n=cn(),a=go()!=null,s=c.useRef(null);t===void 0&&s.current===null&&(s.current=e(n,a));const r=t??s.current;return Dp({popupStore:r,treatPopupAsFloatingElement:o,floatingRootContext:r.state.floatingRootContext,floatingId:n,nested:a,onOpenChange:r.setOpen}),{store:r,internalStore:s.current}}function Ap(t,e){const o=c.useRef(null),n=c.useRef(null);return c.useCallback(a=>{if(t===void 0)return;let s=!1;if(o.current!==null){const r=o.current,i=n.current,m=e.context.triggerElements.getById(r);i&&m===i&&(e.context.triggerElements.delete(r),s=!0),o.current=null,n.current=null}if(a!==null&&(o.current=t,n.current=a,e.context.triggerElements.add(t,a),s=!0),s){const r=e.context.triggerElements.size;e.select("open")&&e.state.triggerCount!==r&&e.set("triggerCount",r)}},[e,t])}function ol(t,e,o){const n=(o==null?void 0:o.id)??null;(n||e)&&(t.activeTriggerId=n,t.activeTriggerElement=o??null)}function nl(t,e,o,n){const a=o.useState("isMountedByTrigger",t),s=Ap(t,o),r=Ae(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 he(()=>{a&&o.update({activeTriggerElement:e.current,...n})},[a,o,e,...Object.values(n)]),{registerTrigger:r,isMountedByThisTrigger:a}}function Ls(t){const e=t.useState("open"),o=t.useState("triggerCount");he(()=>{if(!e){t.state.triggerCount!==0&&t.set("triggerCount",0);return}const n=t.context.triggerElements.size,a={};if(t.state.triggerCount!==n&&(a.triggerCount=n),!t.select("activeTriggerId")&&n===1){const s=t.context.triggerElements.entries().next();if(!s.done){const[r,i]=s.value;a.activeTriggerId=r,a.activeTriggerElement=i}}(a.triggerCount!==void 0||a.activeTriggerId!==void 0)&&t.update(a)},[e,t,o])}function _s(t,e,o){const{mounted:n,setMounted:a,transitionStatus:s}=ev(t);e.useSyncedValues({mounted:n,transitionStatus:s});const r=Ae(()=>{var m,d;a(!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 Ra({enabled:n&&!t&&!i,open:t,ref:e.context.popupRef,onComplete(){t||r()}}),{forceUnmount:r,transitionStatus:s}}function Us(t,e){t.useSyncedValues(e),he(()=>()=>{t.update({activeTriggerProps:Je,inactiveTriggerProps:Je,popupProps:Je})},[t])}function xp(t,e){he(()=>{!e&&t.state.openMethod!==null&&t.set("openMethod",null)},[e,t]),he(()=>()=>{t.state.openMethod!==null&&t.set("openMethod",null)},[t])}class Yn{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 nv(){return new js({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:new Yn,floatingId:void 0,syncOnly:!1,nested:!1,onOpenChange:void 0})}function zs(){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:nv(),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 al(t,e,o=!1){return new js({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:t,floatingId:e,syncOnly:!0,nested:o,onOpenChange:void 0})}const la=le(t=>t.triggerIdProp??t.activeTriggerId),sl=le(t=>t.openProp??t.open),Mc=le(t=>{var o;return(((o=t.popupElement)==null?void 0:o.id)??t.floatingId)||void 0});function Pp(t,e){return e!==void 0&&sl(t)&&la(t)===e}function av(t,e){return Pp(t,e)?!0:e!==void 0&&sl(t)&&la(t)==null&&t.triggerCount===1}const Bs={open:sl,mounted:le(t=>t.mounted),transitionStatus:le(t=>t.transitionStatus),floatingRootContext:le(t=>t.floatingRootContext),triggerCount:le(t=>t.triggerCount),preventUnmountingOnClose:le(t=>t.preventUnmountingOnClose),payload:le(t=>t.payload),activeTriggerId:la,activeTriggerElement:le(t=>t.mounted?t.activeTriggerElement:null),popupId:Mc,isTriggerActive:le((t,e)=>e!==void 0&&la(t)===e),isOpenedByTrigger:le((t,e)=>Pp(t,e)),isMountedByTrigger:le((t,e)=>e!==void 0&&la(t)===e&&t.mounted),triggerProps:le((t,e)=>e?t.activeTriggerProps:t.inactiveTriggerProps),triggerPopupId:le((t,e)=>av(t,e)?Mc(t):void 0),popupProps:le(t=>t.popupProps),popupElement:le(t=>t.popupElement),positionerElement:le(t=>t.positionerElement)};function sv(t){const{open:e=!1,onOpenChange:o,elements:n={}}=t,a=cn(),s=go()!=null,r=Ot(()=>new js({open:e,transitionStatus:void 0,onOpenChange:o,referenceElement:n.reference??null,floatingElement:n.floating??null,triggerElements:new Yn,floatingId:a,syncOnly:!1,nested:s})).current;return he(()=>{const i={open:e,floatingId:a};n.reference!==void 0&&(i.referenceElement=n.reference,i.domReferenceElement=Ie(n.reference)?n.reference:null),n.floating!==void 0&&(i.floatingElement=n.floating),r.update(i)},[e,a,n.reference,n.floating,r]),r.context.onOpenChange=o,r.context.nested=s,r}function rv(t={}){const{nodeId:e,externalTree:o}=t,n=sv(t),a=t.rootContext||n,s=a.useState("referenceElement"),r=a.useState("floatingElement"),i=a.useState("domReferenceElement"),m=a.useState("open"),d=a.useState("floatingId"),[p,u]=c.useState(null),[g,k]=c.useState(void 0),[h,y]=c.useState(void 0),b=c.useRef(null),w=Bo(o),C=c.useMemo(()=>({reference:s,floating:r,domReference:i}),[s,r,i]),v=zw({...t,elements:{...C,...p&&{reference:p}}}),T=Ie(g)?g:null,S=h===void 0?a.state.floatingElement:h;a.useSyncedValue("referenceElement",g??null),a.useSyncedValue("domReferenceElement",g===void 0?i:T),a.useSyncedValue("floatingElement",S);const f=c.useCallback(N=>{const x=Ie(N)?{getBoundingClientRect:()=>N.getBoundingClientRect(),getClientRects:()=>N.getClientRects(),contextElement:N}:N;u(x),v.refs.setReference(x)},[v.refs]),A=c.useCallback(N=>{(Ie(N)||N===null)&&(b.current=N,k(N)),(Ie(v.refs.reference.current)||v.refs.reference.current===null||N!==null&&!Ie(N))&&v.refs.setReference(N)},[v.refs,k]),D=c.useCallback(N=>{y(N),v.refs.setFloating(N)},[v.refs]),F=c.useMemo(()=>({...v.refs,setReference:A,setFloating:D,setPositionReference:f,domReference:b}),[v.refs,A,D,f]),E=c.useMemo(()=>({...v.elements,domReference:i}),[v.elements,i]),B=c.useMemo(()=>({...v,dataRef:a.context.dataRef,open:m,onOpenChange:a.setOpen,events:a.context.events,floatingId:d,refs:F,elements:E,nodeId:e,rootStore:a}),[v,F,E,e,a,m,d]);return he(()=>{i&&(b.current=i)},[i]),he(()=>{a.context.dataRef.current.floatingContext=B;const N=w==null?void 0:w.nodesRef.current.find(x=>x.id===e);N&&(N.context=B)}),c.useMemo(()=>({...v,context:B,refs:F,elements:E,rootStore:a}),[v,F,E,B,a])}const gr=Pu&&xu;function Ep(t,e={}){const{enabled:o=!0,delay:n}=e,a="rootStore"in t?t.rootStore:t,{events:s,dataRef:r}=a.context,i=c.useRef(!1),m=c.useRef(null),d=c.useRef(!0),p=bt();c.useEffect(()=>{const g=a.select("domReferenceElement");if(!o)return;const k=Xe(g);function h(){const w=a.select("domReferenceElement");!a.select("open")&&He(w)&&w===vt(Le(w))&&(i.current=!0)}function y(){d.current=!0}function b(){d.current=!1}return to(Me(k,"blur",h),gr&&Me(k,"keydown",y,!0),gr&&Me(k,"pointerdown",b,!0))},[a,o]),c.useEffect(()=>{if(!o)return;function g(k){if(k.reason===po||k.reason===Aa){const h=a.select("domReferenceElement");Ie(h)&&(m.current=h,i.current=!0)}}return s.on("openchange",g),()=>{s.off("openchange",g)}},[s,o,a]);const u=c.useMemo(()=>{function g(){i.current=!1,m.current=null}return{onMouseLeave(){g()},onFocus(k){const h=k.currentTarget;if(i.current){if(m.current===h)return;g()}const y=ht(k.nativeEvent);if(Ie(y)){if(gr&&!k.relatedTarget){if(!d.current&&!Is(y))return}else if(!$y(y))return}const b=ls(k.relatedTarget,a.context.triggerElements),{nativeEvent:w,currentTarget:C}=k,v=typeof n=="function"?n():n;if(a.select("open")&&b||v===0||v===void 0){a.setOpen(!0,Oe(xn,w,C));return}p.start(v,()=>{i.current||a.setOpen(!0,Oe(xn,w,C))})},onBlur(k){g();const h=k.relatedTarget,y=k.nativeEvent,b=Ie(h)&&h.hasAttribute(ga("focus-guard"))&&h.getAttribute("data-type")==="outside";p.start(0,()=>{var T;const w=a.select("domReferenceElement"),C=vt(Le(w));!h&&C===w||Se((T=r.current.floatingContext)==null?void 0:T.refs.floating.current,C)||Se(w,C)||b||ls(h??C,a.context.triggerElements)||a.setOpen(!1,Oe(xn,y))})}}},[r,n,a,p]);return c.useMemo(()=>o?{reference:u,trigger:u}:{},[o,u])}class rl{constructor(){Ue(this,"dispose",()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()});Ue(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 Ut,this.restTimeout=new Ut,this.handleCloseOptions=void 0}static create(){return new rl}}const bs=new WeakMap;function ys(t){var o,n,a;if(!t.performedPointerEventsMutation)return;const e=t.pointerEventsScopeElement;e&&bs.get(e)===t&&((o=t.pointerEventsScopeElement)==null||o.style.removeProperty("pointer-events"),(n=t.pointerEventsReferenceElement)==null||n.style.removeProperty("pointer-events"),(a=t.pointerEventsFloatingElement)==null||a.style.removeProperty("pointer-events"),bs.delete(e)),t.performedPointerEventsMutation=!1,t.pointerEventsScopeElement=null,t.pointerEventsReferenceElement=null,t.pointerEventsFloatingElement=null}function Rp(t,e){const{scopeElement:o,referenceElement:n,floatingElement:a}=e,s=bs.get(o);s&&s!==t&&ys(s),ys(t),t.performedPointerEventsMutation=!0,t.pointerEventsScopeElement=o,t.pointerEventsReferenceElement=n,t.pointerEventsFloatingElement=a,bs.set(o,t),o.style.pointerEvents="none",n.style.pointerEvents="auto",a.style.pointerEvents="auto"}function il(t){const e=t.context.dataRef.current,o=Ot(()=>e.hoverInteractionState??rl.create()).current;return e.hoverInteractionState||(e.hoverInteractionState=o),Ii(e.hoverInteractionState.disposeEffect),e.hoverInteractionState}function ll(t,e={}){const{enabled:o=!0,closeDelay:n=0,nodeId:a}=e,s="rootStore"in t?t.rootStore:t,r=s.useState("open"),i=s.useState("floatingElement"),m=s.useState("domReferenceElement"),{dataRef:d}=s.context,p=Bo(),u=go(),g=il(s),k=bt(),h=Ae(()=>{var w;return Ou((w=d.current.openEvent)==null?void 0:w.type,g.interactedInside)}),y=Ae(()=>{var w;return Jy((w=d.current.openEvent)==null?void 0:w.type)}),b=Ae(()=>{ys(g)});he(()=>{r||(g.pointerType=void 0,g.restTimeoutPending=!1,g.interactedInside=!1,b())},[r,g,b]),c.useEffect(()=>b,[b]),he(()=>{var w,C,v,T,S;if(o&&r&&(w=g.handleCloseOptions)!=null&&w.blockPointerEvents&&y()&&Ie(m)&&i){const f=m,A=i,D=Le(i),F=(v=(C=p==null?void 0:p.nodesRef.current.find(x=>x.id===u))==null?void 0:C.context)==null?void 0:v.elements.floating;F&&(F.style.pointerEvents="");const E=g.pointerEventsScopeElement!==A?g.pointerEventsScopeElement:null,B=F!==A?F:null,N=((S=(T=g.handleCloseOptions)==null?void 0:T.getScope)==null?void 0:S.call(T))??E??B??f.closest("[data-rootownerid]")??D.body;return Rp(g,{scopeElement:N,referenceElement:f,floatingElement:A}),()=>{b()}}},[o,r,m,i,g,y,p,u,b]),c.useEffect(()=>{if(!o)return;function w(){return!!(p&&u&&No(p.nodesRef.current,u).length>0)}function C(D){const F=cs(n,"close",g.pointerType),E=()=>{s.setOpen(!1,Oe(Ye,D)),p==null||p.events.emit("floating.closed",D)};F?g.openChangeTimeout.start(F,E):(g.openChangeTimeout.clear(),E())}function v(D){const F=ht(D);if(!Ky(F)){g.interactedInside=!1;return}g.interactedInside=(F==null?void 0:F.closest("[aria-haspopup]"))!=null}function T(){g.openChangeTimeout.clear(),k.clear(),p==null||p.events.off("floating.closed",f),b()}function S(D){var N;if(w()&&p){p.events.on("floating.closed",f);return}if(ls(D.relatedTarget,s.context.triggerElements))return;const F=((N=d.current.floatingContext)==null?void 0:N.nodeId)??a,E=D.relatedTarget;if(!(p&&F&&Ie(E)&&No(p.nodesRef.current,F,!1).some(x=>{var q;return Se((q=x.context)==null?void 0:q.elements.floating,E)}))){if(g.handler){g.handler(D);return}b(),h()||C(D)}}function f(D){!p||!u||w()||k.start(0,()=>{p.events.off("floating.closed",f),s.setOpen(!1,Oe(Ye,D)),p.events.emit("floating.closed",D)})}const A=i;return to(A&&Me(A,"mouseenter",T),A&&Me(A,"mouseleave",S),A&&Me(A,"pointerdown",v,!0),()=>{p==null||p.events.off("floating.closed",f)})},[o,i,s,d,n,a,h,b,g,p,u,k])}const iv={current:null};function Vs(t,e={}){var M;const{enabled:o=!0,delay:n=0,handleClose:a=null,mouseOnly:s=!1,restMs:r=0,move:i=!0,triggerElementRef:m=iv,externalTree:d,isActiveTrigger:p=!0,getHandleCloseContext:u,isClosing:g,shouldOpen:k}=e,h="rootStore"in t?t.rootStore:t,{dataRef:y,events:b}=h.context,w=Bo(d),C=il(h),v=c.useRef(!1),T=at(a),S=at(n),f=at(r),A=at(o),D=at(k),F=at(g),E=Ae(()=>{var j;return Ou((j=y.current.openEvent)==null?void 0:j.type,C.interactedInside)}),B=Ae(()=>{var j;return((j=D.current)==null?void 0:j.call(D))!==!1}),N=Ae((j,O,V)=>{const $=h.context.triggerElements;if($.hasElement(O))return!j||!Se(j,O);if(!Ie(V))return!1;const I=V;return $.hasMatchingElement(se=>Se(se,I))&&(!j||!Se(j,I))}),x=Ae(()=>{if(!C.handler)return;Le(h.select("domReferenceElement")).removeEventListener("mousemove",C.handler),C.handler=void 0}),q=Ae(()=>{ys(C)});return p&&(C.handleCloseOptions=(M=T.current)==null?void 0:M.__options),c.useEffect(()=>x,[x]),c.useEffect(()=>{if(!o)return;function j(O){O.open?v.current=!1:(v.current=O.reason===Ye,x(),C.openChangeTimeout.clear(),C.restTimeout.clear(),C.blockMouseMove=!0,C.restTimeoutPending=!1)}return b.on("openchange",j),()=>{b.off("openchange",j)}},[o,b,C,x]),c.useEffect(()=>{if(!o)return;function j(I,se=!0){const _=cs(S.current,"close",C.pointerType);_?C.openChangeTimeout.start(_,()=>{h.setOpen(!1,Oe(Ye,I)),w==null||w.events.emit("floating.closed",I)}):se&&(C.openChangeTimeout.clear(),h.setOpen(!1,Oe(Ye,I)),w==null||w.events.emit("floating.closed",I))}const O=m.current??(p?h.select("domReferenceElement"):null);if(!Ie(O))return;function V(I){var we;if(C.openChangeTimeout.clear(),C.blockMouseMove=!1,s&&!rn(C.pointerType))return;const se=cc(f.current),_=cs(S.current,"open",C.pointerType),U=ht(I),W=I.currentTarget??null,z=h.select("domReferenceElement");let H=W;if(Ie(U)&&!h.context.triggerElements.hasElement(U)){for(const te of h.context.triggerElements.elements())if(Se(te,U)){H=te;break}}Ie(W)&&Ie(z)&&!h.context.triggerElements.hasElement(W)&&Se(W,z)&&(H=z);const L=H==null?!1:N(z,H,U),R=h.select("open"),Y=((we=F.current)==null?void 0:we.call(F))??h.select("transitionStatus")==="ending",be=!R&&Y&&v.current,De=!L&&Ie(H)&&Ie(z)&&Se(z,H)&&be,G=se>0&&!_,de=L&&(R||be)||De,ce=!R||L;if(de){B()&&h.setOpen(!0,Oe(Ye,I,H));return}G||(_?C.openChangeTimeout.start(_,()=>{ce&&B()&&h.setOpen(!0,Oe(Ye,I,H))}):ce&&B()&&h.setOpen(!0,Oe(Ye,I,H)))}function $(I){if(E()){q();return}x();const se=h.select("domReferenceElement"),_=Le(se);C.restTimeout.clear(),C.restTimeoutPending=!1;const U=y.current.floatingContext??(u==null?void 0:u());if(ls(I.relatedTarget,h.context.triggerElements))return;if(T.current&&U){h.select("open")||C.openChangeTimeout.clear();const z=m.current;C.handler=T.current({...U,tree:w,x:I.clientX,y:I.clientY,onClose(){q(),x(),A.current&&!E()&&z===h.select("domReferenceElement")&&j(I,!0)}}),_.addEventListener("mousemove",C.handler),C.handler(I);return}(C.pointerType==="touch"?!Se(h.select("floatingElement"),I.relatedTarget):!0)&&j(I)}return i?to(Me(O,"mousemove",V,{once:!0}),Me(O,"mouseenter",V),Me(O,"mouseleave",$)):to(Me(O,"mouseenter",V),Me(O,"mouseleave",$))},[x,q,y,S,h,o,T,C,p,N,E,s,i,f,m,w,A,u,F,B]),c.useMemo(()=>{if(!o)return;function j(O){C.pointerType=O.pointerType}return{onPointerDown:j,onPointerEnter:j,onMouseMove(O){var z,H,L;const{nativeEvent:V}=O,$=O.currentTarget,I=h.select("domReferenceElement"),se=h.select("open"),_=N(I,$,O.target);if(s&&!rn(C.pointerType))return;if(se&&_&&((z=C.handleCloseOptions)!=null&&z.blockPointerEvents)){const R=h.select("floatingElement");if(R){const Y=((L=(H=C.handleCloseOptions)==null?void 0:H.getScope)==null?void 0:L.call(H))??$.ownerDocument.body;Rp(C,{scopeElement:Y,referenceElement:$,floatingElement:R})}}const U=cc(f.current);if(se&&!_||U===0||!_&&C.restTimeoutPending&&O.movementX**2+O.movementY**2<2)return;C.restTimeout.clear();function W(){if(C.restTimeoutPending=!1,E())return;const R=h.select("open");!C.blockMouseMove&&(!R||_)&&B()&&h.setOpen(!0,Oe(Ye,V,$))}C.pointerType==="touch"?Vt.flushSync(()=>{W()}):_&&se?W():(C.restTimeoutPending=!0,C.restTimeout.start(U,W))}}},[o,C,E,N,s,h,f,B])}const lv="Escape";function Hs(t,e,o){switch(t){case"vertical":return e;case"horizontal":return o;default:return e||o}}function Ha(t,e){return Hs(e,t===Oi||t===Da,t===Io||t===Fo)}function fr(t,e,o){return Hs(e,t===Da,o?t===Io:t===Fo)||t==="Enter"||t===" "||t===""}function cv(t,e,o){return Hs(e,o?t===Io:t===Fo,t===Da)}function dv(t,e,o,n){const a=o?t===Fo:t===Io,s=t===Oi;return e==="both"||e==="horizontal"&&n&&n>1?t===lv:Hs(e,a,s)}function uv(t,e){const{listRef:o,activeIndex:n,onNavigate:a=()=>{},enabled:s=!0,selectedIndex:r=null,allowEscape:i=!1,loopFocus:m=!1,nested:d=!1,rtl:p=!1,virtual:u=!1,focusItemOnOpen:g="auto",focusItemOnHover:k=!0,openOnArrowKeyDown:h=!0,disabledIndices:y=void 0,orientation:b="vertical",parentOrientation:w,cols:C=1,id:v,resetOnPointerLeave:T=!0,externalTree:S}=e,f="rootStore"in t?t.rootStore:t,A=f.useState("open"),D=f.useState("floatingElement"),F=f.useState("domReferenceElement"),E=f.context.dataRef,B=Xr(D),N=Zr(F),x=at(B),q=go(),M=Bo(S),j=c.useRef(g),O=c.useRef(r??-1),V=c.useRef(null),$=c.useRef(!0),I=Ae(pe=>{a(O.current===-1?null:O.current,pe)}),se=c.useRef(I),_=c.useRef(!!D),U=c.useRef(A),W=c.useRef(!1),z=c.useRef(!1),H=c.useRef(null),L=at(y),R=at(A),Y=at(r),be=at(T),De=ma(),G=ma(),de=Ae(()=>{function pe(X){u?M==null||M.events.emit("virtualfocus",X):H.current=os(X,{sync:W.current,preventScroll:!0})}const Q=o.current[O.current],ae=z.current;Q&&pe(Q),(W.current?X=>X():X=>De.request(X))(()=>{var xe;const X=o.current[O.current]||Q;if(!X)return;Q||pe(X),ee&&(ae||!$.current)&&((xe=X.scrollIntoView)==null||xe.call(X,{block:"nearest",inline:"nearest"}))})});he(()=>{E.current.orientation=b},[E,b]),he(()=>{s&&(A&&D?(O.current=r??-1,j.current&&r!=null&&(z.current=!0,I())):_.current&&(O.current=-1,se.current()))},[s,A,D,r,I]),he(()=>{if(s){if(!A){W.current=!1;return}if(D)if(n==null){if(W.current=!1,Y.current!=null)return;if(_.current&&(O.current=-1,de()),(!U.current||!_.current)&&j.current&&(V.current!=null||j.current===!0&&V.current==null)){let pe=0;const Q=()=>{o.current[0]==null?(pe<2&&(pe?re=>G.request(re):queueMicrotask)(Q),pe+=1):(O.current=V.current==null||fr(V.current,b,p)||d?rr(o):pc(o),V.current=null,I())};Q()}}else ms(o.current,n)||(O.current=n,de(),z.current=!1)}},[s,A,D,n,Y,d,o,b,p,I,de,G]),he(()=>{var X,ke;if(!s||D||!M||u||!_.current)return;const pe=M.nodesRef.current,Q=(ke=(X=pe.find(xe=>xe.id===q))==null?void 0:X.context)==null?void 0:ke.elements.floating,ae=vt(Le(D)),re=pe.some(xe=>xe.context&&Se(xe.context.elements.floating,ae));Q&&!re&&$.current&&Q.focus({preventScroll:!0})},[s,D,M,q,u]),he(()=>{se.current=I,U.current=A,_.current=!!D}),he(()=>{A||(V.current=null,j.current=g)},[A,g]);const ce=n!=null,we=Ae(pe=>{if(!R.current)return;const Q=o.current.indexOf(pe.currentTarget);Q!==-1&&(O.current!==Q||n!==Q)&&(O.current=Q,I(pe))}),te=Ae(()=>{var pe,Q,ae;return w??((ae=(Q=(pe=M==null?void 0:M.nodesRef.current.find(re=>re.id===q))==null?void 0:pe.context)==null?void 0:Q.dataRef)==null?void 0:ae.current.orientation)}),fe=Ae(()=>rr(o,L.current)),ne=Ae(pe=>{if($.current=!1,W.current=!0,pe.which===229||!R.current&&pe.currentTarget===x.current)return;if(d&&dv(pe.key,b,p,C)){Ha(pe.key,te())||Ft(pe),f.setOpen(!1,Oe(ti,pe.nativeEvent)),He(F)&&(u?M==null||M.events.emit("virtualfocus",F):F.focus());return}const Q=O.current,ae=rr(o,y),re=pc(o,y);if(N||(pe.key==="Home"&&(Ft(pe),O.current=ae,I(pe)),pe.key==="End"&&(Ft(pe),O.current=re,I(pe))),C>1){const X=Array.from({length:o.current.length},()=>({width:1,height:1})),ke=kk(X,C,!1),xe=ke.findIndex(Qe=>Qe!=null&&!Pn(o.current,Qe,y)),Ge=ke.reduce((Qe,it,Nt)=>it!=null&&!Pn(o.current,it,y)?Nt:Qe,-1),Be=ke[yk(ke.map(Qe=>Qe!=null?o.current[Qe]:null),{event:pe,orientation:b,loopFocus:m,rtl:p,cols:C,disabledIndices:vk([...(typeof y!="function"?y:null)||o.current.map((Qe,it)=>Pn(o.current,it,y)?it:void 0),void 0],ke),minIndex:xe,maxIndex:Ge,prevIndex:wk(O.current>re?ae:O.current,X,ke,C,pe.key===Da?"bl":pe.key===(p?Io:Fo)?"tr":"tl"),stopEvent:!0})];if(Be!=null&&(O.current=Be,I(pe)),b==="both")return}if(Ha(pe.key,b)){if(Ft(pe),A&&!u&&vt(pe.currentTarget.ownerDocument)===pe.currentTarget){O.current=fr(pe.key,b,p)?ae:re,I(pe);return}fr(pe.key,b,p)?m?Q>=re?i&&Q!==o.current.length?O.current=-1:(W.current=!1,O.current=ae):O.current=ft(o.current,{startingIndex:Q,disabledIndices:y}):O.current=Math.min(re,ft(o.current,{startingIndex:Q,disabledIndices:y})):m?Q<=ae?i&&Q!==-1?O.current=o.current.length:(W.current=!1,O.current=re):O.current=ft(o.current,{startingIndex:Q,decrement:!0,disabledIndices:y}):O.current=Math.max(ae,ft(o.current,{startingIndex:Q,decrement:!0,disabledIndices:y})),ms(o.current,O.current)&&(O.current=-1),I(pe)}}),ee=c.useMemo(()=>({onFocus(Q){W.current=!0,we(Q)},onClick:({currentTarget:Q})=>Q.focus({preventScroll:!0}),onMouseMove(Q){W.current=!0,z.current=!1,k&&we(Q)},onPointerLeave(Q){var re;if(!R.current||!$.current||Q.pointerType==="touch")return;W.current=!0;const ae=Q.relatedTarget;if(!(!k||o.current.includes(ae))&&be.current&&((re=H.current)==null||re.call(H),H.current=null,O.current=-1,I(Q),!u)){const X=x.current,ke=vt(Le(X));X&&Se(X,ke)&&X.focus({preventScroll:!0})}}}),[we,R,x,k,o,I,be,u]),Ee=c.useMemo(()=>u&&A&&ce&&{"aria-activedescendant":`${v}-${n}`},[u,A,ce,v,n]),Ce=c.useMemo(()=>({"aria-orientation":b==="both"?void 0:b,...N?{}:Ee,onKeyDown(pe){if(pe.key==="Tab"&&pe.shiftKey&&A&&!u){const Q=ht(pe.nativeEvent);if(Q&&!Se(x.current,Q))return;Ft(pe),f.setOpen(!1,Oe(ln,pe.nativeEvent)),He(F)&&F.focus();return}ne(pe)},onPointerMove(){$.current=!0}}),[Ee,ne,x,b,N,f,A,u,F]),ye=c.useMemo(()=>{function pe(re){f.setOpen(!0,Oe(ti,re.nativeEvent,re.currentTarget))}function Q(re){g==="auto"&&Ru(re.nativeEvent)&&(j.current=!u)}function ae(re){j.current=g,g==="auto"&&Iu(re.nativeEvent)&&(j.current=!0)}return{onKeyDown(re){const X=f.select("open");$.current=!1;const ke=re.key.startsWith("Arrow"),xe=cv(re.key,te(),p),Ge=Ha(re.key,b),Be=(d?xe:Ge)||re.key==="Enter"||re.key.trim()==="";if(u&&X)return ne(re);if(!(!X&&!h&&ke)){if(Be){const Qe=Ha(re.key,te());V.current=d&&Qe?null:re.key}if(d){xe&&(Ft(re),X?(O.current=fe(),I(re)):pe(re));return}Ge&&(Y.current!=null&&(O.current=Y.current),Ft(re),!X&&h?pe(re):ne(re),X&&I(re))}},onFocus(re){f.select("open")&&!u&&(O.current=-1,I(re))},onPointerDown:ae,onPointerEnter:ae,onMouseDown:Q,onClick:Q}},[ne,g,fe,d,I,f,h,b,te,p,Y,u]),Pe=c.useMemo(()=>({...Ee,...ye}),[Ee,ye]);return c.useMemo(()=>s?{reference:Pe,floating:Ce,item:ee,trigger:ye}:{},[s,Pe,Ce,ye,ee])}function pv(t,e){const{listRef:o,elementsRef:n,activeIndex:a,onMatch:s,onTyping:r,enabled:i=!0,resetMs:m=750,selectedIndex:d=null}=e,p="rootStore"in t?t.rootStore:t,u=p.useState("open"),g=bt(),k=c.useRef(""),h=c.useRef(d??a??-1),y=c.useRef(null),b=Ae(v=>{function T(N){const x=n==null?void 0:n.current[N];return!x||Ms(x)}function S(N,x,q=0){if(N.length===0)return-1;const M=(q%N.length+N.length)%N.length,j=x.toLocaleLowerCase();for(let O=0;O0&&v.key===" "&&(Ft(v),r==null||r(!0)),k.current.length>0&&k.current[0]!==" "&&S(f,k.current)===-1&&v.key!==" "&&(r==null||r(!1)),f==null||v.key.length!==1||v.ctrlKey||v.metaKey||v.altKey)return;u&&v.key!==" "&&(Ft(v),r==null||r(!0));const A=k.current==="";A&&(h.current=d??a??-1),f.every(N=>{var x,q;return N?((x=N[0])==null?void 0:x.toLocaleLowerCase())!==((q=N[1])==null?void 0:q.toLocaleLowerCase()):!0})&&k.current===v.key&&(k.current="",h.current=y.current),k.current+=v.key,g.start(m,()=>{k.current="",h.current=y.current,r==null||r(!1)});const E=((A?d??a??-1:h.current)??0)+1,B=S(f,k.current,E);B!==-1?(s==null||s(B),y.current=B):v.key!==" "&&(k.current="",r==null||r(!1))}),w=Ae(v=>{const T=v.relatedTarget,S=p.select("domReferenceElement"),f=p.select("floatingElement");Se(S,T)||Se(f,T)||(g.clear(),k.current="",h.current=y.current,r==null||r(!1))});he(()=>{!u&&d!==null||(g.clear(),y.current=null,k.current!==""&&(k.current=""))},[u,d,g]),he(()=>{u&&k.current===""&&(h.current=d??a??-1)},[u,d,a]);const C=c.useMemo(()=>({onKeyDown:b,onBlur:w}),[b,w]);return c.useMemo(()=>i?{reference:C,floating:C}:{},[i,C])}const Oc=.1,mv=Oc*Oc,Ke=.5;function qa(t,e,o,n,a,s){return n>=e!=s>=e&&t<=(a-o)*(e-n)/(s-n)+o}function Wa(t,e,o,n,a,s,r,i,m,d){let p=!1;return qa(t,e,o,n,a,s)&&(p=!p),qa(t,e,a,s,r,i)&&(p=!p),qa(t,e,r,i,m,d)&&(p=!p),qa(t,e,m,d,o,n)&&(p=!p),p}function gv(t,e,o){return t>=o.x&&t<=o.x+o.width&&e>=o.y&&e<=o.y+o.height}function Ka(t,e,o,n,a,s){const r=Math.min(o,a),i=Math.max(o,a),m=Math.min(n,s),d=Math.max(n,s);return t>=r&&t<=i&&e>=m&&e<=d}function qs(t={}){const{blockPointerEvents:e=!1}=t,o=new Ut,n=({x:a,y:s,placement:r,elements:i,onClose:m,nodeId:d,tree:p})=>{const u=r==null?void 0:r.split("-")[0];let g=!1,k=null,h=null,y=typeof performance<"u"?performance.now():0;function b(C,v){const T=performance.now(),S=T-y;if(k===null||h===null||S===0)return k=C,h=v,y=T,!1;const f=C-k,A=v-h,D=f*f+A*A,F=S*S*mv;return k=C,h=v,y=T,D0)}function x(){N()||w()}if(N())return;const q=T.getBoundingClientRect(),M=S.getBoundingClientRect(),j=a>M.right-M.width/2,O=s>M.bottom-M.height/2,V=M.width>q.width,$=M.height>q.height,I=(V?q:M).left,se=(V?q:M).right,_=($?q:M).top,U=($?q:M).bottom;if(u==="top"&&s>=q.bottom-1||u==="bottom"&&s<=q.top+1||u==="left"&&a>=q.right-1||u==="right"&&a<=q.left+1){x();return}let W=!1;switch(u){case"top":W=Ka(f,A,I,q.top+1,se,M.bottom-1);break;case"bottom":W=Ka(f,A,I,M.top+1,se,q.bottom-1);break;case"left":W=Ka(f,A,M.right-1,U,q.left+1,_);break;case"right":W=Ka(f,A,q.right-1,U,M.left+1,_);break}if(W)return;if(g&&!gv(f,A,q)){x();return}if(!F&&b(f,A)){x();return}let z=!1;switch(u){case"top":{const H=V?Ke/2:Ke*4,L=V||j?a+H:a-H,R=V?a-H:j?a+H:a-H,Y=s+Ke+1,be=j||V?M.bottom-Ke:M.top,De=j?V?M.bottom-Ke:M.top:M.bottom-Ke;z=Wa(f,A,L,Y,R,Y,M.left,be,M.right,De);break}case"bottom":{const H=V?Ke/2:Ke*4,L=V||j?a+H:a-H,R=V?a-H:j?a+H:a-H,Y=s-Ke,be=j||V?M.top+Ke:M.bottom,De=j?V?M.top+Ke:M.bottom:M.top+Ke;z=Wa(f,A,L,Y,R,Y,M.left,be,M.right,De);break}case"left":{const H=$?Ke/2:Ke*4,L=$||O?s+H:s-H,R=$?s-H:O?s+H:s-H,Y=a+Ke+1,be=O||$?M.right-Ke:M.left,De=O?$?M.right-Ke:M.left:M.right-Ke;z=Wa(f,A,be,M.top,De,M.bottom,Y,L,Y,R);break}case"right":{const H=$?Ke/2:Ke*4,L=$||O?s+H:s-H,R=$?s-H:O?s+H:s-H,Y=a-Ke,be=O||$?M.left+Ke:M.right,De=O?$?M.left+Ke:M.right:M.left+Ke;z=Wa(f,A,Y,L,Y,R,be,M.top,De,M.bottom);break}}z?g||o.start(40,x):x()}};return n.__options={...t,blockPointerEvents:e},n}const fv={...Bs,disabled:le(t=>t.disabled),instantType:le(t=>t.instantType),isInstantPhase:le(t=>t.isInstantPhase),trackCursorAxis:le(t=>t.trackCursorAxis),disableHoverablePopup:le(t=>t.disableHoverablePopup),lastOpenChangeReason:le(t=>t.openChangeReason),closeOnClick:le(t=>t.closeOnClick),closeDelay:le(t=>t.closeDelay),hasViewport:le(t=>t.hasViewport)};class cl extends Pa{constructor(o,n,a=!1){const s=new Yn,r={...hv(),...o};r.floatingRootContext=al(s,n,a);super(r,{popupRef:c.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:s},fv);Ue(this,"setOpen",(o,n)=>{var d,p;const a=n.reason,s=a===Ye,r=o&&a===xn,i=!o&&(a===po||a===Aa);if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},(p=(d=this.context).onOpenChange)==null||p.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const u={open:o,openChangeReason:a};r?u.instantType="focus":i?u.instantType="dismiss":a===Ye&&(u.instantType=void 0),ol(u,o,n.trigger),this.update(u)};s?Vt.flushSync(m):m()})}cancelPendingOpen(o){this.state.floatingRootContext.dispatchOpenChange(!1,Oe(po,o))}static useStore(o,n){return tl(o,(s,r)=>new cl(n,s,r)).store}}function hv(){return{...zs(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,hasViewport:!1}}const bv=Ri(function(e){const{disabled:o=!1,defaultOpen:n=!1,open:a,disableHoverablePopup:s=!1,trackCursorAxis:r="none",actionsRef:i,onOpenChange:m,onOpenChangeComplete:d,handle:p,triggerId:u,defaultTriggerId:g=null,children:k}=e,h=cl.useStore(p==null?void 0:p.store,{open:n,openProp:a,activeTriggerId:g,triggerIdProp:u});As(()=>{a===void 0&&h.state.open===!1&&n===!0&&h.update({open:!0,activeTriggerId:g})}),h.useControlledProp("openProp",a),h.useControlledProp("triggerIdProp",u),h.useContextCallback("onOpenChange",m),h.useContextCallback("onOpenChangeComplete",d);const y=h.useState("open"),b=!o&&y,w=h.useState("activeTriggerId"),C=h.useState("mounted"),v=h.useState("payload");h.useSyncedValues({trackCursorAxis:r,disableHoverablePopup:s}),h.useSyncedValue("disabled",o),Ls(h);const{forceUnmount:T,transitionStatus:S}=_s(b,h),f=h.useState("isInstantPhase"),A=h.useState("instantType"),D=h.useState("lastOpenChangeReason"),F=c.useRef(null);he(()=>{y&&o&&h.setOpen(!1,Oe(Yy))},[y,o,h]),he(()=>{S==="ending"&&D===Nu||S!=="ending"&&f?(A!=="delay"&&(F.current=A),h.set("instantType","delay")):F.current!==null&&(h.set("instantType",F.current),F.current=null)},[S,f,D,A,h]),he(()=>{b&&w==null&&h.set("payload",void 0)},[h,w,b]);const E=c.useCallback(()=>{h.setOpen(!1,Oe(Fs))},[h]);c.useImperativeHandle(i,()=>({unmount:T,close:E}),[T,E]);const B=b||C||!o&&r!=="none";return l.jsxs(Cu.Provider,{value:h,children:[B&&l.jsx(yv,{store:h,disabled:o,trackCursorAxis:r}),typeof k=="function"?k({payload:v}):k]})});function yv({store:t,disabled:e,trackCursorAxis:o}){const n=t.useState("floatingRootContext"),a=Os(n,{enabled:!e,referencePress:()=>t.select("closeOnClick")}),s=ow(n,{enabled:!e&&o!=="none",axis:o==="none"?void 0:o}),r=c.useMemo(()=>St(s.reference,a.reference),[s.reference,a.reference]),i=c.useMemo(()=>St(s.trigger,a.trigger),[s.trigger,a.trigger]),m=c.useMemo(()=>St(Qn,s.floating,a.floating),[s.floating,a.floating]);return Us(t,{activeTriggerProps:r,inactiveTriggerProps:i,popupProps:m}),null}let Jo=(function(t){return t.open="data-open",t.closed="data-closed",t[t.startingStyle=fa.startingStyle]="startingStyle",t[t.endingStyle=fa.endingStyle]="endingStyle",t.anchorHidden="data-anchor-hidden",t.side="data-side",t.align="data-align",t})({}),ks=(function(t){return t.popupOpen="data-popup-open",t.pressed="data-pressed",t})({});const kv={[ks.popupOpen]:""},wv={[ks.popupOpen]:"",[ks.pressed]:""},vv={[Jo.open]:""},Cv={[Jo.closed]:""},Tv={[Jo.anchorHidden]:""},dl={open(t){return t?kv:null}},ii={open(t){return t?wv:null}},gn={open(t){return t?vv:Cv},anchorHidden(t){return t?Tv:null}};function fn(t){return cn(t,"base-ui")}const Ip=c.createContext(void 0);function Sv(){return c.useContext(Ip)}let Dv=(function(t){return t[t.popupOpen=ks.popupOpen]="popupOpen",t.triggerDisabled="data-trigger-disabled",t})({});const Av=600,Fp="data-base-ui-tooltip-trigger";function Nc(t){if("composedPath"in t){const o=t.composedPath();for(let n=0;ny.select("transitionStatus")==="ending",shouldOpen(){return!$.current}}),H=Ep(v,{enabled:!M}).reference,L=G=>{const de=$.current,ce=Nc(G),we=W(ce),te=T.current,fe=te&&ce&&Se(te,ce);if(we&&y.select("open")&&y.select("lastOpenChangeReason")===Ye){y.setOpen(!1,Oe(Ye,G));return}if(de&&!we&&fe&&!j.current&&!y.select("open")&&te&&rn(se.current)){const ne=()=>{!$.current&&!j.current&&!y.select("open")&&y.setOpen(!0,Oe(Ye,G,te))},ee=_();ee===0?(I.clear(),ne()):I.start(ee,ne)}},R=y.useState("triggerProps",D);return tt("button",e,{state:{open:C},ref:[o,A,T],props:[z,H,D||O!=="none"?R:void 0,{onMouseOver(G){L(G.nativeEvent)},onFocus(G){U(Nc(G.nativeEvent))&&G.preventBaseUIHandler()},onMouseLeave(){$.current=!1,I.clear(),se.current=void 0},onPointerEnter(G){se.current=G.pointerType},onPointerDown(G){se.current=G.pointerType,y.set("closeOnClick",p),p&&!y.select("open")&&y.cancelPendingOpen(G.nativeEvent)},onClick(G){p&&!y.select("open")&&y.cancelPendingOpen(G.nativeEvent)},id:b,[Dv.triggerDisabled]:M?"":void 0,[Fp]:M?void 0:""},k],stateAttributesMapping:dl})}),Mp=c.createContext(void 0);function Ev(){const t=c.useContext(Mp);if(t===void 0)throw new Error(st(70));return t}const Rv=c.forwardRef(function(e,o){const{children:n,container:a,className:s,render:r,style:i,...m}=e,{portalNode:d,portalSubtree:p}=cp({container:a,ref:o,componentProps:e,elementProps:m});return!p&&!d?null:l.jsxs(c.Fragment,{children:[p,d&&Vt.createPortal(n,d)]})}),Iv=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e;return Sa().useState("mounted")||n?l.jsx(Mp.Provider,{value:n,children:l.jsx(Rv,{ref:o,...a})}):null}),Op=c.createContext(void 0);function Np(){const t=c.useContext(Op);if(t===void 0)throw new Error(st(71));return t}const Fv=c.createContext(void 0);function jp(){const t=c.useContext(Fv);return(t==null?void 0:t.direction)??"ltr"}const Mv=t=>({name:"arrow",options:t,async fn(e){var $,I;const{x:o,y:n,placement:a,rects:s,platform:r,elements:i,middlewareData:m}=e,{element:d,padding:p=0,offsetParent:u="real"}=mo(t,e)||{};if(d==null)return{};const g=Vu(p),k={x:o,y:n},h=zi(a),y=Ui(h),b=await r.getDimensions(d),w=h==="y",C=w?"top":"left",v=w?"bottom":"right",T=w?"clientHeight":"clientWidth",S=s.reference[y]+s.reference[h]-k[h]-s.floating[y],f=k[h]-s.reference[h],A=u==="real"?await(($=r.getOffsetParent)==null?void 0:$.call(r,d)):i.floating;let D=i.floating[T]||s.floating[y];(!D||!await((I=r.isElement)==null?void 0:I.call(r,A)))&&(D=i.floating[T]||s.floating[y]);const F=S/2-f/2,E=D/2-b[y]/2-1,B=Math.min(g[C],E),N=Math.min(g[v],E),x=B,q=D-b[y]-N,M=D/2-b[y]/2+F,j=oi(x,M,q),O=!m.arrow&&zo(a)!=null&&M!==j&&s.reference[y]/2-(M({...Mv(t),options:[t,e]}),Nv={name:"hide",async fn(t){var i;const{width:e,height:o,x:n,y:a}=t.rects.reference,s=e===0&&o===0&&n===0&&a===0;return{data:{referenceHidden:((i=(await Kw().fn(t)).data)==null?void 0:i.referenceHidden)||s}}}},as={sideX:"left",sideY:"top"},ul={name:"adaptiveOrigin",async fn(t){var C,v;const{x:e,y:o,rects:{floating:n},elements:{floating:a},platform:s,strategy:r,placement:i}=t,m=Xe(a),d=m.getComputedStyle(a);if(!(d.transitionDuration!=="0s"&&d.transitionDuration!==""))return{x:e,y:o,data:as};const u=await((C=s.getOffsetParent)==null?void 0:C.call(s,a));let g={width:0,height:0};if(r==="fixed"&&(m!=null&&m.visualViewport))g={width:m.visualViewport.width,height:m.visualViewport.height};else if(u===m){const T=Le(a);g={width:T.documentElement.clientWidth,height:T.documentElement.clientHeight}}else await((v=s.isElement)==null?void 0:v.call(s,u))&&(g=await s.getDimensions(u));const k=Tt(i);let h=e,y=o;k==="left"&&(h=g.width-(e+n.width)),k==="top"&&(y=g.height-(o+n.height));const b=k==="left"?"right":as.sideX,w=k==="top"?"bottom":as.sideY;return{x:h,y,data:{sideX:b,sideY:w}}}};function Lp(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 jc(t,e,o){const{rects:n,placement:a}=t;return{side:Lp(e,Tt(a),o),align:zo(a)||"center",anchor:{width:n.reference.width,height:n.reference.height},positioner:{width:n.floating.width,height:n.floating.height}}}function pl(t){var xt,kn;const{anchor:e,positionMethod:o="absolute",side:n="bottom",sideOffset:a=0,align:s="center",alignOffset:r=0,collisionBoundary:i,collisionPadding:m=5,sticky:d=!1,arrowPadding:p=5,disableAnchorTracking:u=!1,inline:g,keepMounted:k=!1,floatingRootContext:h,mounted:y,collisionAvoidance:b,shiftCrossAxis:w=!1,nodeId:C,adaptiveOrigin:v,lazyFlip:T=!1,externalTree:S}=t,[f,A]=c.useState(null);!y&&f!==null&&A(null);const D=b.side||"flip",F=b.align||"flip",E=b.fallbackAxisSide||"end",B=typeof e=="function"?e:void 0,N=Ae(B),x=B?N:e,q=at(e),M=at(y),O=jp()==="rtl",V=f||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":O?"left":"right","inline-start":O?"right":"left"}[n],$=s==="center"?V:`${V}-${s}`;let I=m;const se=1,_=n==="bottom"?se:0,U=n==="top"?se:0,W=n==="right"?se:0,z=n==="left"?se:0;typeof I=="number"?I={top:I+_,right:I+z,bottom:I+U,left:I+W}:I&&(I={top:(I.top||0)+_,right:(I.right||0)+z,bottom:(I.bottom||0)+U,left:(I.left||0)+W});const H={boundary:i==="clipping-ancestors"?"clippingAncestors":i,padding:I},L=c.useRef(null),R=at(a),Y=at(r),be=typeof a!="function"?a:0,De=typeof r!="function"?r:0,G=[];g&&G.push(g),G.push(Bw(_e=>{const ot=jc(_e,n,O),Pt=typeof R.current=="function"?R.current(ot):R.current,ve=typeof Y.current=="function"?Y.current(ot):Y.current;return{mainAxis:Pt,crossAxis:ve,alignmentAxis:ve}},[be,De,O,n]));const de=F==="none"&&D!=="shift",ce=!de&&(d||w||D==="shift"),we=D==="none"?null:qw({...H,padding:{top:I.top+se,right:I.right+se,bottom:I.bottom+se,left:I.left+se},mainAxis:!w&&D==="flip",crossAxis:F==="flip"?"alignment":!1,fallbackAxisSideDirection:E}),te=de?null:Vw(_e=>{const ot=Le(_e.elements.floating).documentElement;return{...H,rootBoundary:w?{x:0,y:0,width:ot.clientWidth,height:ot.clientHeight}:void 0,mainAxis:F!=="none",crossAxis:ce,limiter:d||w?void 0:Hw(Pt=>{if(!L.current)return{};const{width:ve,height:qe}=L.current.getBoundingClientRect(),We=_t(Tt(Pt.placement)),et=We==="y"?ve:qe,zt=We==="y"?I.left+I.right:I.top+I.bottom;return{offset:et/2+zt/2}})}},[H,d,w,I,F]);D==="shift"||F==="shift"||s==="center"?G.push(te,we):G.push(we,te),G.push(Ww({...H,apply({elements:{floating:_e},availableWidth:ot,availableHeight:Pt,rects:ve}){if(!M.current)return;const qe=_e.style;qe.setProperty("--available-width",`${ot}px`),qe.setProperty("--available-height",`${Pt}px`);const We=Xe(_e).devicePixelRatio||1,{x:et,y:zt,width:$e,height:ct}=ve.reference,bo=(Math.round((et+$e)*We)-Math.round(et*We))/We,mt=(Math.round((zt+ct)*We)-Math.round(zt*We))/We;qe.setProperty("--anchor-width",`${bo}px`),qe.setProperty("--anchor-height",`${mt}px`)}}),Ov(_e=>({element:L.current||Le(_e.elements.floating).createElement("div"),padding:p,offsetParent:"floating"}),[p]),{name:"transformOrigin",fn(_e){var zl,Bl,Vl;const{elements:ot,middlewareData:Pt,placement:ve,rects:qe,y:We}=_e,et=Tt(ve),zt=_t(et),$e=L.current,ct=((zl=Pt.arrow)==null?void 0:zl.x)||0,bo=((Bl=Pt.arrow)==null?void 0:Bl.y)||0,mt=($e==null?void 0:$e.clientWidth)||0,Et=($e==null?void 0:$e.clientHeight)||0,wn=ct+mt/2,Kt=bo+Et/2,Ul=Math.abs(((Vl=Pt.shift)==null?void 0:Vl.y)||0),Ag=qe.reference.height/2,Zn=typeof a=="function"?a(jc(_e,n,O)):a,xg=Ul>Zn,Pg={top:`${wn}px calc(100% + ${Zn}px)`,bottom:`${wn}px ${-Zn}px`,left:`calc(100% + ${Zn}px) ${Kt}px`,right:`${-Zn}px ${Kt}px`}[et],Eg=`${wn}px ${qe.reference.y+Ag-We}px`;return ot.floating.style.setProperty("--transform-origin",ce&&zt==="y"&&xg?Eg:Pg),{}}},Nv,v),he(()=>{!y&&h&&h.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[y,h]);const fe=c.useMemo(()=>({elementResize:!u&&typeof ResizeObserver<"u",layoutShift:!u&&typeof IntersectionObserver<"u"}),[u]),{refs:ne,elements:ee,x:Ee,y:Ce,middlewareData:ye,update:Pe,placement:pe,context:Q,isPositioned:ae,floatingStyles:re}=rv({rootContext:h,open:k?y:void 0,placement:$,middleware:G,strategy:o,whileElementsMounted:k?void 0:(..._e)=>Ic(..._e,fe),nodeId:C,externalTree:S}),{sideX:X,sideY:ke}=ye.adaptiveOrigin||as,xe=ae?o:"fixed",Ge=c.useMemo(()=>{const _e=v?{position:xe,[X]:Ee,[ke]:Ce}:{position:xe,...re};return ae||(_e.opacity=0),_e},[v,xe,X,Ee,ke,Ce,re,ae]),Be=c.useRef(null);he(()=>{if(!y)return;const _e=q.current,ot=typeof _e=="function"?_e():_e,ve=(Lc(ot)?ot.current:ot)||null||null;ve!==Be.current&&(ne.setPositionReference(ve),Be.current=ve)},[y,ne,x,q]),c.useEffect(()=>{if(!y)return;const _e=q.current;typeof _e!="function"&&Lc(_e)&&_e.current!==Be.current&&(ne.setPositionReference(_e.current),Be.current=_e.current)},[y,ne,x,q]),c.useEffect(()=>{if(k&&y&&ee.domReference&&ee.floating)return Ic(ee.domReference,ee.floating,Pe,fe)},[k,y,ee,Pe,fe]);const Qe=Tt(pe),it=Lp(n,Qe,O),Nt=zo(pe)||"center",qt=!!((xt=ye.hide)!=null&&xt.referenceHidden);he(()=>{T&&y&&ae&&A(Qe)},[T,y,ae,Qe]);const Wt=c.useMemo(()=>{var _e,ot;return{position:"absolute",top:(_e=ye.arrow)==null?void 0:_e.y,left:(ot=ye.arrow)==null?void 0:ot.x}},[ye.arrow]),ho=((kn=ye.arrow)==null?void 0:kn.centerOffset)!==0;return c.useMemo(()=>({positionerStyles:Ge,arrowStyles:Wt,arrowRef:L,arrowUncentered:ho,side:it,align:Nt,physicalSide:Qe,anchorHidden:qt,refs:ne,context:Q,isPositioned:ae,update:Pe}),[Ge,Wt,L,ho,it,Nt,Qe,qt,ne,Q,ae,Pe])}function Lc(t){return t!=null&&"current"in t}function Ws(t){return t==="starting"?Gk:Je}function ml(t,e,{styles:o,transitionStatus:n,props:a,refs:s,hidden:r,inert:i=!1}){const m={...o};return i&&(m.pointerEvents="none"),tt("div",t,{state:e,ref:s,props:[{role:"presentation",hidden:r,style:m},Ws(n),a],stateAttributesMapping:gn})}const jv=c.forwardRef(function(e,o){const{render:n,className:a,anchor:s,positionMethod:r="absolute",side:i="top",align:m="center",sideOffset:d=0,alignOffset:p=0,collisionBoundary:u="clipping-ancestors",collisionPadding:g=5,arrowPadding:k=5,sticky:h=!1,disableAnchorTracking:y=!1,collisionAvoidance:b=Ki,style:w,...C}=e,v=Sa(),T=Ev(),S=v.useState("open"),f=v.useState("mounted"),A=v.useState("trackCursorAxis"),D=v.useState("disableHoverablePopup"),F=v.useState("floatingRootContext"),E=v.useState("instantType"),B=v.useState("transitionStatus"),N=v.useState("hasViewport"),x=pl({anchor:s,positionMethod:r,floatingRootContext:F,mounted:f,side:i,sideOffset:d,align:m,alignOffset:p,collisionBoundary:u,collisionPadding:g,sticky:h,arrowPadding:k,disableAnchorTracking:y,keepMounted:T,collisionAvoidance:b,adaptiveOrigin:N?ul:void 0}),q=c.useMemo(()=>({open:S,side:x.side,align:x.align,anchorHidden:x.anchorHidden,instant:A!=="none"?"tracking-cursor":E}),[S,x.side,x.align,x.anchorHidden,A,E]),M=ml(e,q,{styles:x.positionerStyles,transitionStatus:B,props:C,refs:[o,v.useStateSetter("positionerElement")],hidden:!f,inert:!S||A==="both"||D});return l.jsx(Op.Provider,{value:x,children:M})}),Lv={...gn,...Ea},_v=c.forwardRef(function(e,o){const{render:n,className:a,style:s,...r}=e,i=Sa(),{side:m,align:d}=Np(),p=i.useState("open"),u=i.useState("instantType"),g=i.useState("transitionStatus"),k=i.useState("popupProps"),h=i.useState("floatingRootContext"),y=i.useState("disabled"),b=i.useState("closeDelay");Ra({open:p,ref:i.context.popupRef,onComplete(){var T,S;p&&((S=(T=i.context).onOpenChangeComplete)==null||S.call(T,!0))}}),ll(h,{enabled:!y,closeDelay:b});const w=i.useStateSetter("popupElement");return tt("div",e,{state:{open:p,side:m,align:d,instant:u,transitionStatus:g},ref:[o,i.context.popupRef,w],props:[k,Ws(g),r],stateAttributesMapping:Lv})}),Uv=c.forwardRef(function(e,o){const{render:n,className:a,style:s,...r}=e,i=Sa(),{arrowRef:m,side:d,align:p,arrowUncentered:u,arrowStyles:g}=Np(),k=i.useState("open"),h=i.useState("instantType");return tt("div",e,{state:{open:k,side:d,align:p,uncentered:u,instant:h},ref:[o,m],props:[{style:g,"aria-hidden":!0},r],stateAttributesMapping:gn})}),zv=function(e){const{delay:o,closeDelay:n,timeout:a=400}=e,s=c.useMemo(()=>({delay:o,closeDelay:n}),[o,n]),r=c.useMemo(()=>({open:o,close:n}),[o,n]);return l.jsx(Ip.Provider,{value:s,children:l.jsx(Zy,{delay:r,timeoutMs:a,children:e.children})})};function gl(t){return Hi(19)?t:t?"true":void 0}function _p(t){var e,o,n="";if(typeof t=="string"||typeof t=="number")n+=t;else if(typeof t=="object")if(Array.isArray(t)){var a=t.length;for(e=0;e{const o=new Array(t.length+e.length);for(let n=0;n({classGroupId:t,validator:e}),zp=(t=new Map,e=null,o)=>({nextPart:t,validators:e,classGroupId:o}),ws="-",_c=[],Hv="arbitrary..",qv=t=>{const e=Kv(t),{conflictingClassGroups:o,conflictingClassGroupModifiers:n}=t;return{getClassGroupId:r=>{if(r.startsWith("[")&&r.endsWith("]"))return Wv(r);const i=r.split(ws),m=i[0]===""&&i.length>1?1:0;return Bp(i,m,e)},getConflictingClassGroupIds:(r,i)=>{if(i){const m=n[r],d=o[r];return m?d?Bv(d,m):m:d||_c}return o[r]||_c}}},Bp=(t,e,o)=>{if(t.length-e===0)return o.classGroupId;const a=t[e],s=o.nextPart.get(a);if(s){const d=Bp(t,e+1,s);if(d)return d}const r=o.validators;if(r===null)return;const i=e===0?t.join(ws):t.slice(e).join(ws),m=r.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?Hv+n:void 0})(),Kv=t=>{const{theme:e,classGroups:o}=t;return $v(o,e)},$v=(t,e)=>{const o=zp();for(const n in t){const a=t[n];fl(a,o,n,e)}return o},fl=(t,e,o,n)=>{const a=t.length;for(let s=0;s{if(typeof t=="string"){Jv(t,e,o);return}if(typeof t=="function"){Qv(t,e,o,n);return}Yv(t,e,o,n)},Jv=(t,e,o)=>{const n=t===""?e:Vp(e,t);n.classGroupId=o},Qv=(t,e,o,n)=>{if(Zv(t)){fl(t(n),e,o,n);return}e.validators===null&&(e.validators=[]),e.validators.push(Vv(o,t))},Yv=(t,e,o,n)=>{const a=Object.entries(t),s=a.length;for(let r=0;r{let o=t;const n=e.split(ws),a=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 a=(s,r)=>{o[s]=r,e++,e>t&&(e=0,n=o,o=Object.create(null))};return{get(s){let r=o[s];if(r!==void 0)return r;if((r=n[s])!==void 0)return a(s,r),r},set(s,r){s in o?o[s]=r:a(s,r)}}},li="!",Uc=":",eC=[],zc=(t,e,o,n,a)=>({modifiers:t,hasImportantModifier:e,baseClassName:o,maybePostfixModifierPosition:n,isExternal:a}),tC=t=>{const{prefix:e,experimentalParseClassName:o}=t;let n=a=>{const s=[];let r=0,i=0,m=0,d;const p=a.length;for(let y=0;ym?d-m:void 0;return zc(s,k,g,h)};if(e){const a=e+Uc,s=n;n=r=>r.startsWith(a)?s(r.slice(a.length)):zc(eC,!1,r,void 0,!0)}if(o){const a=n;n=s=>o({className:s,parseClassName:a})}return n},oC=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((o,n)=>{e.set(o,1e6+n)}),o=>{const n=[];let a=[];for(let s=0;s0&&(a.sort(),n.push(...a),a=[]),n.push(r)):a.push(r)}return a.length>0&&(a.sort(),n.push(...a)),n}},nC=t=>({cache:Xv(t.cacheSize),parseClassName:tC(t),sortModifiers:oC(t),postfixLookupClassGroupIds:aC(t),...qv(t)}),aC=t=>{const e=Object.create(null),o=t.postfixLookupClassGroups;if(o)for(let n=0;n{const{parseClassName:o,getClassGroupId:n,getConflictingClassGroupIds:a,sortModifiers:s,postfixLookupClassGroupIds:r}=e,i=[],m=t.trim().split(sC);let d="";for(let p=m.length-1;p>=0;p-=1){const u=m[p],{isExternal:g,modifiers:k,hasImportantModifier:h,baseClassName:y,maybePostfixModifierPosition:b}=o(u);if(g){d=u+(d.length>0?" "+d:d);continue}let w=!!b,C;if(w){const A=y.substring(0,b);C=n(A);const D=C&&r[C]?n(y):void 0;D&&D!==C&&(C=D,w=!1)}else C=n(y);if(!C){if(!w){d=u+(d.length>0?" "+d:d);continue}if(C=n(y),!C){d=u+(d.length>0?" "+d:d);continue}w=!1}const v=k.length===0?"":k.length===1?k[0]:s(k).join(":"),T=h?v+li:v,S=T+C;if(i.indexOf(S)>-1)continue;i.push(S);const f=a(C,w);for(let A=0;A0?" "+d:d)}return d},iC=(...t)=>{let e=0,o,n,a="";for(;e{if(typeof t=="string")return t;let e,o="";for(let n=0;n{let o,n,a,s;const r=m=>{const d=e.reduce((p,u)=>u(p),t());return o=nC(d),n=o.cache.get,a=o.cache.set,s=i,i(m)},i=m=>{const d=n(m);if(d)return d;const p=rC(m,o);return a(m,p),p};return s=r,(...m)=>s(iC(...m))},cC=[],nt=t=>{const e=o=>o[t]||cC;return e.isThemeGetter=!0,e},qp=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Wp=/^\((?:(\w[\w-]*):)?(.+)\)$/i,dC=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,uC=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,pC=/\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$/,mC=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,gC=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,fC=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,yo=t=>dC.test(t),Re=t=>!!t&&!Number.isNaN(Number(t)),Gt=t=>!!t&&Number.isInteger(Number(t)),hr=t=>t.endsWith("%")&&Re(t.slice(0,-1)),so=t=>uC.test(t),Kp=()=>!0,hC=t=>pC.test(t)&&!mC.test(t),hl=()=>!1,bC=t=>gC.test(t),yC=t=>fC.test(t),kC=t=>!me(t)&&!ge(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=>Vo(t,Jp,hl),me=t=>qp.test(t),Ko=t=>Vo(t,Qp,hC),Bc=t=>Vo(t,EC,Re),CC=t=>Vo(t,Zp,Kp),TC=t=>Vo(t,Yp,hl),Vc=t=>Vo(t,$p,hl),SC=t=>Vo(t,Gp,yC),$a=t=>Vo(t,Xp,bC),ge=t=>Wp.test(t),ta=t=>hn(t,Qp),DC=t=>hn(t,Yp),Hc=t=>hn(t,$p),AC=t=>hn(t,Jp),xC=t=>hn(t,Gp),Ga=t=>hn(t,Xp,!0),PC=t=>hn(t,Zp,!0),Vo=(t,e,o)=>{const n=qp.exec(t);return n?n[1]?e(n[1]):o(n[2]):!1},hn=(t,e,o=!1)=>{const n=Wp.exec(t);return n?n[1]?e(n[1]):o:!1},$p=t=>t==="position"||t==="percentage",Gp=t=>t==="image"||t==="url",Jp=t=>t==="length"||t==="size"||t==="bg-size",Qp=t=>t==="length",EC=t=>t==="number",Yp=t=>t==="family-name",Zp=t=>t==="number"||t==="weight",Xp=t=>t==="shadow",RC=()=>{const t=nt("color"),e=nt("font"),o=nt("text"),n=nt("font-weight"),a=nt("tracking"),s=nt("leading"),r=nt("breakpoint"),i=nt("container"),m=nt("spacing"),d=nt("radius"),p=nt("shadow"),u=nt("inset-shadow"),g=nt("text-shadow"),k=nt("drop-shadow"),h=nt("blur"),y=nt("perspective"),b=nt("aspect"),w=nt("ease"),C=nt("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],S=()=>[...T(),ge,me],f=()=>["auto","hidden","clip","visible","scroll"],A=()=>["auto","contain","none"],D=()=>[ge,me,m],F=()=>[yo,"full","auto",...D()],E=()=>[Gt,"none","subgrid",ge,me],B=()=>["auto",{span:["full",Gt,ge,me]},Gt,ge,me],N=()=>[Gt,"auto",ge,me],x=()=>["auto","min","max","fr",ge,me],q=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],M=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...D()],O=()=>[yo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...D()],V=()=>[yo,"screen","full","dvw","lvw","svw","min","max","fit",...D()],$=()=>[yo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...D()],I=()=>[t,ge,me],se=()=>[...T(),Hc,Vc,{position:[ge,me]}],_=()=>["no-repeat",{repeat:["","x","y","space","round"]}],U=()=>["auto","cover","contain",AC,vC,{size:[ge,me]}],W=()=>[hr,ta,Ko],z=()=>["","none","full",d,ge,me],H=()=>["",Re,ta,Ko],L=()=>["solid","dashed","dotted","double"],R=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>[Re,hr,Hc,Vc],be=()=>["","none",h,ge,me],De=()=>["none",Re,ge,me],G=()=>["none",Re,ge,me],de=()=>[Re,ge,me],ce=()=>[yo,"full",...D()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[so],breakpoint:[so],color:[Kp],container:[so],"drop-shadow":[so],ease:["in","out","in-out"],font:[kC],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[so],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[so],shadow:[so],spacing:["px",Re],text:[so],"text-shadow":[so],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",yo,me,ge,b]}],container:["container"],"container-type":[{"@container":["","normal","size",ge,me]}],"container-named":[wC],columns:[{columns:[Re,me,ge,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:f()}],"overflow-x":[{"overflow-x":f()}],"overflow-y":[{"overflow-y":f()}],overscroll:[{overscroll:A()}],"overscroll-x":[{"overscroll-x":A()}],"overscroll-y":[{"overscroll-y":A()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:F()}],"inset-x":[{"inset-x":F()}],"inset-y":[{"inset-y":F()}],start:[{"inset-s":F(),start:F()}],end:[{"inset-e":F(),end:F()}],"inset-bs":[{"inset-bs":F()}],"inset-be":[{"inset-be":F()}],top:[{top:F()}],right:[{right:F()}],bottom:[{bottom:F()}],left:[{left:F()}],visibility:["visible","invisible","collapse"],z:[{z:[Gt,"auto",ge,me]}],basis:[{basis:[yo,"full","auto",i,...D()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Re,yo,"auto","initial","none",me]}],grow:[{grow:["",Re,ge,me]}],shrink:[{shrink:["",Re,ge,me]}],order:[{order:[Gt,"first","last","none",ge,me]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:B()}],"col-start":[{"col-start":N()}],"col-end":[{"col-end":N()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:B()}],"row-start":[{"row-start":N()}],"row-end":[{"row-end":N()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":x()}],"auto-rows":[{"auto-rows":x()}],gap:[{gap:D()}],"gap-x":[{"gap-x":D()}],"gap-y":[{"gap-y":D()}],"justify-content":[{justify:[...q(),"normal"]}],"justify-items":[{"justify-items":[...M(),"normal"]}],"justify-self":[{"justify-self":["auto",...M()]}],"align-content":[{content:["normal",...q()]}],"align-items":[{items:[...M(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...M(),{baseline:["","last"]}]}],"place-content":[{"place-content":q()}],"place-items":[{"place-items":[...M(),"baseline"]}],"place-self":[{"place-self":["auto",...M()]}],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:O()}],"inline-size":[{inline:["auto",...V()]}],"min-inline-size":[{"min-inline":["auto",...V()]}],"max-inline-size":[{"max-inline":["none",...V()]}],"block-size":[{block:["auto",...$()]}],"min-block-size":[{"min-block":["auto",...$()]}],"max-block-size":[{"max-block":["none",...$()]}],w:[{w:[i,"screen",...O()]}],"min-w":[{"min-w":[i,"screen","none",...O()]}],"max-w":[{"max-w":[i,"screen","none","prose",{screen:[r]},...O()]}],h:[{h:["screen","lh",...O()]}],"min-h":[{"min-h":["screen","lh","none",...O()]}],"max-h":[{"max-h":["screen","lh",...O()]}],"font-size":[{text:["base",o,ta,Ko]}],"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",hr,me]}],"font-family":[{font:[DC,TC,e]}],"font-features":[{"font-features":[me]}],"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:[a,ge,me]}],"line-clamp":[{"line-clamp":[Re,"none",ge,Bc]}],leading:[{leading:[s,...D()]}],"list-image":[{"list-image":["none",ge,me]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ge,me]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:I()}],"text-color":[{text:I()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...L(),"wavy"]}],"text-decoration-thickness":[{decoration:[Re,"from-font","auto",ge,Ko]}],"text-decoration-color":[{decoration:I()}],"underline-offset":[{"underline-offset":[Re,"auto",ge,me]}],"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:[Gt,ge,me]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ge,me]}],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",ge,me]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:se()}],"bg-repeat":[{bg:_()}],"bg-size":[{bg:U()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Gt,ge,me],radial:["",ge,me],conic:[Gt,ge,me]},xC,SC]}],"bg-color":[{bg:I()}],"gradient-from-pos":[{from:W()}],"gradient-via-pos":[{via:W()}],"gradient-to-pos":[{to:W()}],"gradient-from":[{from:I()}],"gradient-via":[{via:I()}],"gradient-to":[{to:I()}],rounded:[{rounded:z()}],"rounded-s":[{"rounded-s":z()}],"rounded-e":[{"rounded-e":z()}],"rounded-t":[{"rounded-t":z()}],"rounded-r":[{"rounded-r":z()}],"rounded-b":[{"rounded-b":z()}],"rounded-l":[{"rounded-l":z()}],"rounded-ss":[{"rounded-ss":z()}],"rounded-se":[{"rounded-se":z()}],"rounded-ee":[{"rounded-ee":z()}],"rounded-es":[{"rounded-es":z()}],"rounded-tl":[{"rounded-tl":z()}],"rounded-tr":[{"rounded-tr":z()}],"rounded-br":[{"rounded-br":z()}],"rounded-bl":[{"rounded-bl":z()}],"border-w":[{border:H()}],"border-w-x":[{"border-x":H()}],"border-w-y":[{"border-y":H()}],"border-w-s":[{"border-s":H()}],"border-w-e":[{"border-e":H()}],"border-w-bs":[{"border-bs":H()}],"border-w-be":[{"border-be":H()}],"border-w-t":[{"border-t":H()}],"border-w-r":[{"border-r":H()}],"border-w-b":[{"border-b":H()}],"border-w-l":[{"border-l":H()}],"divide-x":[{"divide-x":H()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":H()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...L(),"hidden","none"]}],"divide-style":[{divide:[...L(),"hidden","none"]}],"border-color":[{border:I()}],"border-color-x":[{"border-x":I()}],"border-color-y":[{"border-y":I()}],"border-color-s":[{"border-s":I()}],"border-color-e":[{"border-e":I()}],"border-color-bs":[{"border-bs":I()}],"border-color-be":[{"border-be":I()}],"border-color-t":[{"border-t":I()}],"border-color-r":[{"border-r":I()}],"border-color-b":[{"border-b":I()}],"border-color-l":[{"border-l":I()}],"divide-color":[{divide:I()}],"outline-style":[{outline:[...L(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Re,ge,me]}],"outline-w":[{outline:["",Re,ta,Ko]}],"outline-color":[{outline:I()}],shadow:[{shadow:["","none",p,Ga,$a]}],"shadow-color":[{shadow:I()}],"inset-shadow":[{"inset-shadow":["none",u,Ga,$a]}],"inset-shadow-color":[{"inset-shadow":I()}],"ring-w":[{ring:H()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:I()}],"ring-offset-w":[{"ring-offset":[Re,Ko]}],"ring-offset-color":[{"ring-offset":I()}],"inset-ring-w":[{"inset-ring":H()}],"inset-ring-color":[{"inset-ring":I()}],"text-shadow":[{"text-shadow":["none",g,Ga,$a]}],"text-shadow-color":[{"text-shadow":I()}],opacity:[{opacity:[Re,ge,me]}],"mix-blend":[{"mix-blend":[...R(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":R()}],"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":[Re]}],"mask-image-linear-from-pos":[{"mask-linear-from":Y()}],"mask-image-linear-to-pos":[{"mask-linear-to":Y()}],"mask-image-linear-from-color":[{"mask-linear-from":I()}],"mask-image-linear-to-color":[{"mask-linear-to":I()}],"mask-image-t-from-pos":[{"mask-t-from":Y()}],"mask-image-t-to-pos":[{"mask-t-to":Y()}],"mask-image-t-from-color":[{"mask-t-from":I()}],"mask-image-t-to-color":[{"mask-t-to":I()}],"mask-image-r-from-pos":[{"mask-r-from":Y()}],"mask-image-r-to-pos":[{"mask-r-to":Y()}],"mask-image-r-from-color":[{"mask-r-from":I()}],"mask-image-r-to-color":[{"mask-r-to":I()}],"mask-image-b-from-pos":[{"mask-b-from":Y()}],"mask-image-b-to-pos":[{"mask-b-to":Y()}],"mask-image-b-from-color":[{"mask-b-from":I()}],"mask-image-b-to-color":[{"mask-b-to":I()}],"mask-image-l-from-pos":[{"mask-l-from":Y()}],"mask-image-l-to-pos":[{"mask-l-to":Y()}],"mask-image-l-from-color":[{"mask-l-from":I()}],"mask-image-l-to-color":[{"mask-l-to":I()}],"mask-image-x-from-pos":[{"mask-x-from":Y()}],"mask-image-x-to-pos":[{"mask-x-to":Y()}],"mask-image-x-from-color":[{"mask-x-from":I()}],"mask-image-x-to-color":[{"mask-x-to":I()}],"mask-image-y-from-pos":[{"mask-y-from":Y()}],"mask-image-y-to-pos":[{"mask-y-to":Y()}],"mask-image-y-from-color":[{"mask-y-from":I()}],"mask-image-y-to-color":[{"mask-y-to":I()}],"mask-image-radial":[{"mask-radial":[ge,me]}],"mask-image-radial-from-pos":[{"mask-radial-from":Y()}],"mask-image-radial-to-pos":[{"mask-radial-to":Y()}],"mask-image-radial-from-color":[{"mask-radial-from":I()}],"mask-image-radial-to-color":[{"mask-radial-to":I()}],"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":T()}],"mask-image-conic-pos":[{"mask-conic":[Re]}],"mask-image-conic-from-pos":[{"mask-conic-from":Y()}],"mask-image-conic-to-pos":[{"mask-conic-to":Y()}],"mask-image-conic-from-color":[{"mask-conic-from":I()}],"mask-image-conic-to-color":[{"mask-conic-to":I()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:se()}],"mask-repeat":[{mask:_()}],"mask-size":[{mask:U()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ge,me]}],filter:[{filter:["","none",ge,me]}],blur:[{blur:be()}],brightness:[{brightness:[Re,ge,me]}],contrast:[{contrast:[Re,ge,me]}],"drop-shadow":[{"drop-shadow":["","none",k,Ga,$a]}],"drop-shadow-color":[{"drop-shadow":I()}],grayscale:[{grayscale:["",Re,ge,me]}],"hue-rotate":[{"hue-rotate":[Re,ge,me]}],invert:[{invert:["",Re,ge,me]}],saturate:[{saturate:[Re,ge,me]}],sepia:[{sepia:["",Re,ge,me]}],"backdrop-filter":[{"backdrop-filter":["","none",ge,me]}],"backdrop-blur":[{"backdrop-blur":be()}],"backdrop-brightness":[{"backdrop-brightness":[Re,ge,me]}],"backdrop-contrast":[{"backdrop-contrast":[Re,ge,me]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Re,ge,me]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Re,ge,me]}],"backdrop-invert":[{"backdrop-invert":["",Re,ge,me]}],"backdrop-opacity":[{"backdrop-opacity":[Re,ge,me]}],"backdrop-saturate":[{"backdrop-saturate":[Re,ge,me]}],"backdrop-sepia":[{"backdrop-sepia":["",Re,ge,me]}],"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",ge,me]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Re,"initial",ge,me]}],ease:[{ease:["linear","initial",w,ge,me]}],delay:[{delay:[Re,ge,me]}],animate:[{animate:["none",C,ge,me]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[y,ge,me]}],"perspective-origin":[{"perspective-origin":S()}],rotate:[{rotate:De()}],"rotate-x":[{"rotate-x":De()}],"rotate-y":[{"rotate-y":De()}],"rotate-z":[{"rotate-z":De()}],scale:[{scale:G()}],"scale-x":[{"scale-x":G()}],"scale-y":[{"scale-y":G()}],"scale-z":[{"scale-z":G()}],"scale-3d":["scale-3d"],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[ge,me,"","none","gpu","cpu"]}],"transform-origin":[{origin:S()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:ce()}],"translate-x":[{"translate-x":ce()}],"translate-y":[{"translate-y":ce()}],"translate-z":[{"translate-z":ce()}],"translate-none":["translate-none"],zoom:[{zoom:[Gt,ge,me]}],accent:[{accent:I()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:I()}],"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",ge,me]}],"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":I()}],"scrollbar-track-color":[{"scrollbar-track":I()}],"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",ge,me]}],fill:[{fill:["none",...I()]}],"stroke-w":[{stroke:[Re,ta,Ko,Bc]}],stroke:[{stroke:["none",...I()]}],"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"]}},IC=lC(RC);function Fe(...t){return IC(Up(t))}function em({delay:t=0,...e}){return l.jsx(zv,{"data-slot":"tooltip-provider",delay:t,...e})}function tm({...t}){return l.jsx(bv,{"data-slot":"tooltip",...t})}function om({...t}){return l.jsx(Pv,{"data-slot":"tooltip-trigger",...t})}function nm({className:t,side:e="top",sideOffset:o=4,align:n="center",alignOffset:a=0,children:s,...r}){return l.jsx(Iv,{children:l.jsx(jv,{align:n,alignOffset:a,side:e,sideOffset:o,className:"isolate z-50",children:l.jsxs(_v,{"data-slot":"tooltip-content",className:Fe("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),...r,children:[s,l.jsx(Uv,{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 am(){const t=Fg();return{push:e=>t(e),replace:e=>t(e,{replace:!0}),back:()=>t(-1),forward:()=>t(1),refresh:()=>t(0)}}function sm(){return Og().pathname}function yR(){return Mg()[0]}const qc=t=>{let e;const o=new Set,n=(d,p)=>{const u=typeof d=="function"?d(e):d;if(!Object.is(u,e)){const g=e;e=p??(typeof u!="object"||u===null)?u:Object.assign({},e,u),o.forEach(k=>k(e,g))}},a=()=>e,i={setState:n,getState:a,getInitialState:()=>m,subscribe:d=>(o.add(d),()=>o.delete(d))},m=e=t(n,a,i);return i},FC=(t=>t?qc(t):qc),MC=t=>t;function OC(t,e=MC){const o=oe.useSyncExternalStore(t.subscribe,oe.useCallback(()=>e(t.getState()),[t,e]),oe.useCallback(()=>e(t.getInitialState()),[t,e]));return oe.useDebugValue(o),o}const NC=t=>{const e=FC(t),o=n=>OC(e,n);return Object.assign(o,e),o},bl=(t=>NC);function jC(t,e){let o;try{o=t()}catch{return}return{getItem:a=>{var s;const r=m=>m===null?null:JSON.parse(m,void 0),i=(s=o.getItem(a))!=null?s:null;return i instanceof Promise?i.then(r):r(i)},setItem:(a,s)=>o.setItem(a,JSON.stringify(s,void 0)),removeItem:a=>o.removeItem(a)}}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)}}}},LC=(t,e)=>(o,n,a)=>{let s={storage:jC(()=>window.localStorage),partialize:b=>b,version:0,merge:(b,w)=>({...w,...b}),...e},r=!1,i=0;const m=new Set,d=new Set;let p=s.storage;if(!p)return t((...b)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),o(...b)},n,a);const u=()=>{const b=s.partialize({...n()});return p.setItem(s.name,{state:b,version:s.version})},g=a.setState;a.setState=(b,w)=>(g(b,w),u());const k=t((...b)=>(o(...b),u()),n,a);a.getInitialState=()=>k;let h;const y=()=>{var b,w;if(!p)return;const C=++i;r=!1,m.forEach(T=>{var S;return T((S=n())!=null?S:k)});const v=((w=s.onRehydrateStorage)==null?void 0:w.call(s,(b=n())!=null?b:k))||void 0;return ci(p.getItem.bind(p))(s.name).then(T=>{if(T)if(typeof T.version=="number"&&T.version!==s.version){if(s.migrate){const S=s.migrate(T.state,T.version);return S instanceof Promise?S.then(f=>[!0,f]):[!0,S]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,T.state];return[!1,void 0]}).then(T=>{var S;if(C!==i)return;const[f,A]=T;if(h=s.merge(A,(S=n())!=null?S:k),o(h,!0),f)return u()}).then(()=>{C===i&&(v==null||v(n(),void 0),h=n(),r=!0,d.forEach(T=>T(h)))}).catch(T=>{C===i&&(v==null||v(void 0,T))})};return a.persist={setOptions:b=>{s={...s,...b},b.storage&&(p=b.storage)},clearStorage:()=>{p==null||p.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>y(),hasHydrated:()=>r,onHydrate:b=>(m.add(b),()=>{m.delete(b)}),onFinishHydration:b=>(d.add(b),()=>{d.delete(b)})},s.skipHydration||y(),h||k},yl=LC,_C={"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.apps":"Apps","layout.rolesPermissions":"Roles & Permissions","layout.cron":"Cron","layout.jobs":"Job Queue","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"API Tokens","layout.workflows":"Workflows","layout.flows":"Flows","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.true":"Yes","common.false":"No","common.save":"Save","common.cancel":"Cancel","common.ok":"OK","common.create":"Create","common.creating":"Creating...","common.saving":"Saving...","common.deleting":"Deleting...","common.confirmDeleteNameDesc":'This action cannot be undone. Type "{name}" to confirm deletion:',"common.confirmDeleteNameLabel":"Name","common.delete":"Delete","common.confirmDeleteTitle":"Confirm Delete","common.edit":"Edit","common.content":"Content","common.listView":"List view","common.cardView":"Card view","common.view":"View","common.remove":"Remove","common.enable":"Enable","common.disable":"Disable","common.uninstall":"Uninstall","common.viewDetails":"View details","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.refresh":"Refresh","common.all":"All","common.draft":"Draft","common.published":"Published","common.active":"Active","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","flows.title":"Flows","flows.newFlow":"New Flow","flows.createFlow":"Create Flow","flows.editFlow":"Edit","flows.deleteFlow":"Delete","flows.deleteConfirm":'Delete flow "{name}"? All of its versions and run instances will be removed.',"flows.instances":"Instances","flows.instances.noBody":"This step produced no input/output payload.","flows.instances.noSteps":"No node execution records for this instance.","flows.instances.triggerAll":"All triggers","flows.instances.trigger.api":"Manual (api)","flows.instances.trigger.api_public":"Public API","flows.instances.trigger.job":"Job","flows.instances.trigger.event":"Event","flows.instances.trigger.cron":"Cron","flows.instances.empty":"No instances yet. Run a flow to get started.","flows.instances.logs":"Node logs","flows.instances.node":"Node","flows.instances.type":"Type","flows.instances.flowName":"Flow","flows.instances.allStatus":"All statuses","flows.instances.latency":"Latency","flows.flowDeleted":"Flow deleted","flows.failedToDelete":"Failed to delete flow","flows.noFlows":"No flows found. Create one to get started.","flows.noFlowsDesc":"Build visual automations with the flow engine canvas.","flows.name":"Name","flows.description":"Description","flows.version":"v{version}","flows.versionColumn":"Version","flows.enabled":"Enabled","flows.disabled":"Disabled","flows.triggers.title":"Internal triggers","flows.triggers.all":"All kinds","flows.triggers.flowName":"Flow name","flows.triggers.kind":"Kind","flows.triggers.kindEvent":"Event (eventbus)","flows.triggers.kindCron":"Cron","flows.triggers.config":"Config","flows.triggers.newTrigger":"New trigger","flows.triggers.empty":"No internal triggers yet. Events/cron matched here auto-run the referenced flow.","flows.triggers.newDesc":"A trigger points at a flow; the flow never needs to know about it.","flows.triggers.triggerName":"Trigger name","flows.triggers.eventType":"Event type (event_type)","flows.triggers.cronExpr":"Cron expression","flows.triggers.filter":"Filter (JSON)","flows.triggers.inputsMap":"Inputs map (JSON)","flows.triggers.saved":"Saved","flows.triggers.deleted":"Trigger deleted","flows.triggers.created":"Trigger created","flows.triggers.deleteHint":'Delete trigger "{name}"?',"flows.draft":"draft","flows.api.title":"Publish as API","flows.api.token":"API token","flows.api.endpoint":"Endpoint","flows.api.curl":"Example request","flows.api.curlHint":"Dev backend is plain http on :9898; in production use your https domain.","flows.api.enable":"Enable API","flows.api.disable":"Disable","flows.api.regenerate":"Regenerate token","flows.api.enabled":"API enabled","flows.api.disabled":"API disabled","flows.api.disabledDesc":"This flow is not exposed yet. Enabling generates a token third parties use to call its latest published version.","flows.api.hint":"Runs the latest published version (drafts are ignored). Inputs are passed to the start node as JSON.","flows.api.copy":"Copy","flows.api.copied":"Copied","flows.api.failed":"Action failed","flows.api.requireAuth":"Require Bearer token (off = open to internal network)","flows.apis.title":"Public APIs","flows.apis.logsPage":"API Call Logs","flows.apis.allLogs":"All public-API calls","flows.apis.listDesc":'Manage the flows published as public APIs. Click "API Call Logs" to review external invocations.',"flows.apis.apiTab":"APIs","flows.apis.logsTab":"Call logs","flows.apis.empty":"No published APIs yet. Enable one from a flow's More menu.","flows.apis.noLogs":"No external API calls yet.","flows.apis.time":"Time","flows.apis.flow":"Flow","flows.apis.inputs":"Inputs","flows.apis.detail":"Edit flow","flows.apis.logs":"Call logs","flows.apis.viewSteps":"View step logs","flows.apis.restore":"Restore","flows.apis.saved":"Updated","flows.apis.apiSettings":"API settings","flows.apis.regenerate":"Regenerate token","flows.apis.rotated":"Token rotated","flows.apis.enableFirst":"Enable the API first, then change its auth requirement.","flows.apis.slug":"Slug (public path id)","flows.apis.slugHint":"Identifies this endpoint. Changing it makes the old URL invalid immediately.","flows.apis.regenerateSlug":"Regenerate slug","flows.apis.slugRotated":"Slug updated","flows.apis.usageTitle":"Usage","flows.apis.copyCurl":"Copy curl","flows.apis.usageSteps":"POST the latest published version of this flow; body inputs go to the start node. Returns status / outputs / instance_id; if it parks on approval it returns status=waiting.","flows.apis.auth":"Auth","flows.apis.open":"Open","flows.apis.authBearer":"Bearer","flows.apis.deleted":"API deleted","flows.apis.deleteApi":"Delete API","flows.apis.deleteHint":'Delete the public API of "{name}"? Its token becomes invalid permanently (pausing keeps the token, deleting does not).',"flows.updated":"Updated","flows.run":"Run","flows.runFlow":"Run Flow","flows.runConfirm":'Run flow "{name}"? Inputs are passed to the start node.',"flows.runStarted":"Flow run started","flows.failedToRun":"Failed to run flow","flows.inputsJson":"Inputs (JSON)","flows.instance.title":"Flow Instance","flows.instance.status":"Status","flows.instance.error":"Error","flows.instance.outputs":"Outputs","flows.instance.payload":"Resume payload (JSON)","flows.instance.resume":"Resume","flows.instance.stop":"Stop","flows.instance.stopped":"Instance stopped","flows.instance.resumed":"Instance resumed","flows.instance.failed":"Action failed","flows.instance.noOutputs":"No outputs yet","flows.instance.outputsEmptyHint":'This flow has no End-node outputs mapped, so the instance output is empty. Edit the flow and add an `outputs` mapping on the End node (e.g. { "name": "result", "value": { "ref": ["script_1", "output"] } }).',"flows.editor.endOutputsHint":"The instance output only contains fields mapped in the End node's `outputs`. Add mappings to surface results.","flows.editor.autoMap":"Auto-map from upstream nodes","flows.editor.branchHint":"Branch nodes split by configured rules. Connect each outgoing edge from the matching port (rule.handle); connect the `else` port for fallback when no rule matches.","flows.editor.edgeTitle":"Edge selected","flows.editor.edgeHint":"Click a palette node above to insert it between the two ends, or drag either endpoint to reconnect.","flows.editor.title":"Flow Editor","flows.editor.saveAndRun":"Save & Run","flows.editor.saveDraft":"Save draft","flows.editor.draftSaved":"Draft saved","flows.editor.publish":"Publish","flows.editor.published":"Published as a new version","flows.editor.failedToPublish":"Failed to publish","flows.editor.saving":"Saving...","flows.editor.test":"Test (run current canvas, unpublished)","flows.editor.unsaved":"Unsaved changes","flows.editor.draftUnpublished":"Draft · unpublished","flows.editor.saveFirst":"Save the flow first, then test it.","flows.editor.save":"Save","flows.editor.nodeTypes":"Node types","flows.editor.palette":"Nodes","flows.editor.canvas":"Canvas","flows.editor.config":"Node Config","flows.editor.selectNode":"Select a node to configure it.","flows.editor.configJson":"Config (JSON)","flows.editor.invalidJson":"Config must be valid JSON","flows.editor.deleteNode":"Delete node","flows.editor.requiredStart":"The graph needs exactly one start node.","flows.editor.requiredEnd":"The graph needs at least one end node.","flows.editor.titleLabel":"Title","flows.editor.typeLabel":"Type","flows.editor.node.start":"Start","flows.editor.node.end":"End","flows.editor.node.script":"Script","flows.editor.node.egress":"Egress","flows.editor.node.branch":"Branch","flows.editor.node.await":"Await","flows.editor.node.llm":"LLM","flows.editor.fModel":"Model","flows.editor.fMessages":"Messages ({{#ns.var#}} refs supported)","flows.editor.fSystemPrompt":"System prompt (fixed first message)","flows.editor.fTemperature":"Temperature","flows.editor.fMaxTokens":"Max tokens","flows.editor.fStop":"Stop sequences (comma-separated, max 4)","flows.editor.fJsonSchema":"Structured output (JSON Schema)","flows.editor.fTimeoutMs":"Timeout (ms)","flows.editor.addMessage":"Add message","flows.editor.modifiers":"Modifiers","flows.editor.fRetry":"Retry attempts","flows.editor.fOnError":"Error strategy","flows.editor.fDefaultOutputs":"Default outputs","flows.editor.errorOutHint":"Publish validation requires at least one edge from this node's error port","flows.editor.code":"Code (JS)","flows.editor.hint":"Draw the flow by adding nodes and connecting them, then Save & Run.","flows.editor.created":"Flow created","flows.editor.saved":"Flow saved","flows.editor.failedToSave":"Failed to save flow","flows.editor.schemaInvalid":"The graph is invalid: {message}","flows.editor.autoLayout":"Auto layout","flows.editor.layoutLR":"Layout left → right","flows.editor.jsonView":"JSON","flows.editor.copyJson":"Copy","flows.editor.fClientKey":"Client key","flows.editor.fOp":"Operation","flows.editor.fResponse":"Response field","flows.editor.fInputMap":"Input (ValueExpr map)","flows.editor.fAwaitKind":"Await kind","flows.editor.fTimeout":"Timeout (seconds)","flows.editor.fAwaitApprovers":"Approver user_ids (soft routing, comma-separated)","flows.editor.fAwaitEvents":"Event rules","flows.editor.fAwaitFormContent":"Display text (form_content)","flows.editor.awaitFormContentHint":"Text shown to the actor; {{#start.xxx#}} refs runtime variables","flows.editor.fAwaitFormFields":"Form fields (inputs)","flows.editor.awaitAddField":"Add field","flows.editor.awaitFieldVar":"Variable name","flows.editor.awaitFieldLabel":"Label","flows.editor.awaitFieldRequired":"Required","flows.editor.awaitFormFieldName":"Field variable names must be non-empty and unique","flows.editor.awaitSelectOptions":"type=select requires non-empty options","flows.editor.awaitSelectOptionsPh":"Options (comma-separated)","flows.editor.fAwaitActions":"Action buttons (actions)","flows.editor.awaitAddAction":"Add action","flows.editor.awaitActionTitle":"Button text","flows.editor.awaitApprovalPreset":"Approval preset","flows.editor.awaitPresetApprove":"Approve","flows.editor.awaitPresetReject":"Reject","flows.editor.awaitPresetHint":"Generates Approve/Reject actions (edit freely afterwards)","flows.editor.awaitActionsHint":"Each action is an output port — wire each; button text is free-form.","flows.editor.awaitActionIdInvalid":"Action ids: letter/underscore start, ≤20 chars, unique","flows.editor.awaitAddEvent":"Add event","flows.editor.awaitAddCorr":"Add correlation key","flows.editor.awaitCorrField":"Event field","flows.editor.awaitCorrHint":"Correlation keys address the wake to THIS instance: the event field must equal the flow variable (e.g. start.order_id) or the event is ignored.","flows.editor.unitDays":"Days","flows.editor.unitHours":"Hours","flows.editor.unitMinutes":"Min","flows.editor.unitSeconds":"Sec","flows.editor.awaitPortsHint":"approval exposes approve / reject ports — wire each; the reject destination is whatever you connect it to.","flows.editor.awaitTimeoutPortHint":"A timeout adds a timeout output port; unwired, expiry fails the instance.","flows.editor.awaitTimeoutInvalid":"Timeout must be an integer ≥ 1","flows.editor.node.transform":"Transform","flows.editor.fTransformAssignments":"Assignments","flows.editor.transformAddRow":"Add field","flows.editor.transformKey":"Field key","flows.editor.transformKeyInvalid":"Keys: letter/underscore start, ≤20 chars, unique","flows.editor.fTransformHintLabel":"Notes","flows.editor.fTransformHint":"Each key becomes a field downstream references; values support constant/variable/expression (trim, replace, concat, default… with {{#node.field#}} refs).","flows.editor.node.docparse":"Doc Parse","flows.editor.fDocParseInput":"Input file (input)","flows.editor.fDocParseEngine":"Parser engine (engine)","flows.editor.fDocParseEnginePh":"Blank = global default; e.g. mineru / paddleocr_vl","flows.editor.fDocParseExtractImages":"Extract embedded images","flows.editor.docParseHint":"Input must resolve to a file reference string: a storage key or an https URL. Outputs markdown/images/engine/pages/warnings for downstream refs.","flows.editor.toExpr":"Switch to expression","flows.editor.exprPh":"e.g. trim({{#start.name#}})","flows.editor.awaitEventRequired":"kind=event requires at least one event name","flows.instance.waitingKind":"Waiting kind","flows.instance.resumeUntil":"Expires at","flows.instance.approve":"Approve","flows.instance.reject":"Reject","flows.instance.rejectReason":"Rejection reason (optional, carried in the resume)","flows.instance.submitData":"Submit data","flows.instance.resumeUrlHint":"Callback URL: hand it to whoever should resume this flow (POST, body is {action, data})","flows.instance.resumeUrlCopied":"Callback URL copied","flows.instance.awaitApproversHint":"Assigned approvers: {list}","flows.instance.formFieldRequired":"Field {field} is required","flows.editor.fLabel":"Label","flows.editor.fElseHandle":"Else handle (fallback port)","flows.editor.addBranch":"Add branch rule","flows.editor.addNode":"Add node","flows.editor.exportTitle":"Export canvas","flows.editor.namePlaceholder":"Untitled flow","flows.editor.descPlaceholder":"Add description...","flows.editor.insertVariable":"Insert variable","flows.editor.noUpstream":"No upstream nodes","flows.editor.undeclared":"No declared output fields","flows.editor.wholeOutput":"Whole output object","flows.editor.fOutputSchema":"Output declaration (field + type, runtime-checked)","flows.editor.addField":"Add output field","flows.editor.titleConflict":"Title conflicts with another node; it will be auto-numbered on blur","flows.editor.titleDedup":"Title auto-renamed to {title}","flows.editor.fStartParams":"Input variables (start namespace, referenceable downstream)","flows.editor.fVariable":"Variable name","flows.editor.fRequired":"Required","flows.editor.addParam":"Add variable","flows.editor.dupVariable":"Duplicate variable: {v}","flows.editor.fRefNode":"Node","flows.editor.fRefField":"Field","flows.editor.fRefPath":"Child path","flows.editor.fInputKey":"Input key (used in code)","flows.editor.addInput":"Add input mapping","flows.editor.fEndOutputs":"Flow outputs (final result keys)","flows.editor.fOutputKey":"Result key","flows.editor.addOutput":"Add output","flows.editor.toLiteral":"Switch to literal","flows.editor.toRef":"Switch to reference","flows.editor.fParamType":"Field type","flows.editor.fMaxLength":"Max length","flows.editor.fDefaultValue":"Default value","flows.editor.fOptions":"Options","flows.editor.editParam":"Edit variable","flows.editor.invalidMaxLength":"Max length must be an integer ≥ 1","flows.editor.fAccept":"File categories (multi-select)","flows.editor.accept.document":"Document","flows.editor.accept.document.desc":"PDF, Word, Excel, PPT, TXT, Markdown","flows.editor.accept.image":"Image","flows.editor.accept.image.desc":"PNG, JPG, JPEG, WEBP, GIF, SVG","flows.editor.accept.audio":"Audio","flows.editor.accept.audio.desc":"MP3, WAV, OGG, M4A, FLAC","flows.editor.accept.video":"Video","flows.editor.accept.video.desc":"MP4, MOV, WEBM, AVI, MKV","flows.editor.accept.other":"Other","flows.editor.accept.other.desc":"ZIP, CSV, JSON and other formats","flows.editor.fMaxCount":"Max count (multi-file)","flows.editor.invalidMaxCount":"Max count must be an integer ≥ 1","flows.editor.noDefault":"Not set","flows.editor.addOption":"Add option","flows.editor.node.http":"HTTP Request","flows.editor.fUrl":"URL","flows.editor.fHeaders":"Headers","flows.editor.fQuery":"Query params","flows.editor.fBody":"Body (JSON template)","flows.editor.httpUrlScheme":"URL must start with http:// or https://","flows.editor.node.ct":"Data","flows.editor.fContentType":"Content type (plural)","flows.editor.fRecordId":"Record ID (template)","flows.editor.fFilters":"Filters","flows.editor.fValues":"Fields to write","flows.editor.fSort":"Sort (-field desc)","flows.editor.node.iteration":"Iteration","flows.editor.fIterItems":"Items (array)","flows.editor.fIterConcurrency":"Concurrency (1=serial)","flows.editor.fIterOnError":"On item error","flows.editor.fIterMax":"Max items","flows.editor.fIterBody":"Body (subgraph JSON)","flows.editor.fIterBodyHint":"Body must have exactly one start + one end; {{#item.value/index/total#}} and outer upstream vars available; await is not supported inside a body","flows.editor.dupHandle":"Duplicate branch handle '{v}'","flows.editor.pickVariable":"Select variable","flows.editor.condValueHint":"Type auto-detected; quote ('021') to force string comparison","flows.editor.nodeDescPlaceholder":"Add node description...","flows.editor.enlargeCode":"Enlarge editor","flows.editor.cancel":"Cancel","flows.editor.fullscreen":"Toggle fullscreen","flows.editor.exportFailed":"Export failed","flows.editor.fHostPerms":"Host permissions (JSON)","flows.editor.zoomIn":"Zoom in","flows.editor.zoomOut":"Zoom out","flows.editor.zoomFit":"Fit view","flows.editor.collapsePanel":"Collapse panel","flows.editor.expandPanel":"Expand panel","flows.editor.autoMapInput":"Map upstream outputs as inputs","flows.editor.jsonCopied":"JSON copied","flows.editor.failedToCopy":"Failed to copy","flows.editor.layoutTB":"Layout top → bottom","flows.editor.versions":"Version history","flows.editor.rollback":"Restore","flows.editor.restored":"Restored — saved as a new version","flows.editor.failedToRollback":"Failed to restore version","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.redemptionCodes":"Activation codes","layout.wallets":"Wallets","layout.walletTransactions":"Wallet transactions","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.createdAt":"Created","wallets.updatedAt":"Updated","wallets.details":"Details","wallets.allUsers":"All users","redemption.generate":"Generate codes","redemption.generateTitle":"Generate redemption codes","redemption.generateFailed":"Failed to generate codes","redemption.targetUser":"Target user","redemption.publicHint":"Public code (any user)","redemption.publicHintDesc":"Leave empty for a public code — whoever redeems it gets the credit; pick a user to bind it.","redemption.count":"Count (1-100)","redemption.generatedTitle":"Codes generated","redemption.generatedOnce":"Copy and store these now — plaintext is shown only once.","redemption.redeemedBy":"Redeemed by","redemption.redeemedAt":"Activated at","redemption.copy":"Copy code","redemption.activate":"Activate","redemption.activateTitle":"Activate to account","redemption.activateDesc":"Credit {amount} {currency} to the selected user and mark this code activated.","redemption.activateUserLabel":"Credit to user","redemption.activateSuccess":"Code activated — owner wallet credited","redemption.activateFailed":"Failed to activate code","redemption.disable":"Disable","redemption.enable":"Enable","redemption.delete":"Delete","redemption.deleteTitle":"Delete this code?","redemption.deleteDesc":"Type the code exactly to confirm. Redeemed codes cannot be deleted.","redemption.code":"Code","redemption.public":"Public code","redemption.expiresAt":"Expires at","redemption.expiresHint":"Optional — expired codes can no longer be redeemed.","redemption.statusPending":"pending","redemption.statusRedeemed":"redeemed","redemption.statusDisabled":"disabled","redemption.noCodes":"No redemption codes","redemption.noCodesDesc":"Generate codes to hand out wallet credit.","redemption.disableSuccess":"Code disabled","redemption.disableFailed":"Failed to disable code","redemption.enableSuccess":"Code enabled","redemption.enableFailed":"Failed to enable code","redemption.deleteSuccess":"Code deleted","redemption.deleteFailed":"Failed to delete code","wallets.all":"All","wallets.llmUsage":"LLM usage","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","llm.modelUnpriced":"unpriced","llm.unpricedHint":"Unpriced models are disabled: {models} — price them in Model Directory first (relay rejects unpriced models).","llm.modelPickerAll":"All models (no restriction)","llm.modelPickerSearch":"Search models...","llm.modelPickerEmpty":"No models found","llm.tokenCreateDesc":"Create an sk- key to call the OpenAI-compatible /v1 endpoint.","llm.newToken":"New API Key","llm.noTokens":"No API keys yet","llm.noTokensDesc":"Create an sk- key to call the OpenAI-compatible /v1 endpoint.","llm.tokenUpdated":"API key updated","llm.tokenDeleted":"API key deleted","llm.confirmDeleteToken":'Delete key "{name}"? Clients using it will get 401 immediately.',"llm.failedToCreate":"Failed to create","llm.copyFailed":"Copy failed","llm.fRemainQuota":"Quota limit","llm.quotaHint":"Amounts are USD ($1 = 1,000,000 quota)","llm.fAllowedModels":"Model allowlist","llm.allowedModelsHint":"Empty = all models; options come from enabled channels","llm.fGroup":"Billing group","llm.groupHint":'Paid = price × group ratio; configure under "Group ratios"',"llm.manageGroups":"Group ratios","llm.groupsDesc":'Sell-price multiplier per group: 1.5 = +50% markup, 0.8 = 20% off. "default" is the fallback group.',"llm.addGroup":"Add group","llm.groupsSaved":"Group ratios saved","llm.fAllowedIps":"IP allowlist","llm.allowedIpsHint":"CIDR or exact IPs, comma/newline separated; empty = any","llm.fTokenEnabled":"Enabled","llm.fUnlimited":"Unlimited quota","llm.unlimitedAdminOnly":"(admin only)","llm.colRemain":"Remaining","llm.colUsed":"Used","llm.colExpiry":"Expires","llm.colUser":"User","llm.colCreatedAt":"Created","llm.colUpdatedAt":"Updated","llm.colQuotaTotal":"Quota","llm.fOwnerUser":"Owner","llm.filterUser":"Search users…","llm.userPickerSearch":"Search users…","llm.userPickerEmpty":"No users found","llm.allModels":"all models","llm.keyOnceTitle":"API key created","llm.keyOnceDesc":"Copy it now — you can also copy it anytime from the list below.","llmPlayground.token":"API Key","llmPlayground.selectToken":"Select an API key","llmPlayground.noKey":"no key","llmPlayground.tokenNotUsable":"This key is currently {status} and cannot be used for chat","llmPlayground.model":"Model","llmPlayground.selectModel":"Select a model","llmPlayground.noTokens":'Create an sk- key on the "API Keys" page first',"llmPlayground.noModels":"No models available — configure a channel first","llmPlayground.emptyConversation":"Pick a key and a model, then send the first message","llmPlayground.thinking":"Thinking","llmPlayground.waiting":"Waiting for response…","llmPlayground.busy":"Generating…","llmPlayground.inputPlaceholder":"Type a message, Enter to send…","llmPlayground.stop":"Stop","llmPlayground.clear":"Clear","llmPlayground.turnFailed":"Request failed","layout.llm":"LLM","layout.llmChannels":"Channels","layout.llmModels":"Model Directory","layout.llmLogs":"Usage Logs","layout.llmTokens":"API Keys","layout.llmPlayground":"Chat Test","llm.newChannel":"New Channel","llm.noChannels":"No LLM channels","llm.noChannelsDesc":"Add an upstream provider with its API keys to start routing LLM traffic.","llm.channelCreated":"Channel created","llm.channelUpdated":"Channel updated","llm.channelDeleted":"Channel deleted","llm.confirmDeleteChannel":'Delete channel "{name}"? Its key pool and routing entry are removed.',"llm.failedToSave":"Failed to save","llm.failedToDelete":"Failed to delete","llm.fName":"Name","llm.fProvider":"Provider","llm.fBaseUrl":"Base URL","llm.fModels":"Models (comma separated)","llm.fTestModel":"Test model","llm.testModelHint":"Used by the health probe and channel test. If empty, the first model in the list is probed.","llm.testModelNoDirHint":"Used by the health probe and channel test. Register models in the Model Directory first.","llm.noDirectoryTitle":"Model Directory is empty","llm.noDirectoryHint":"This channel won't route any traffic until its models are registered and priced in the Model Directory. You can create it now and add models afterwards.","llm.goToModels":"Go to Model Directory →","llm.fPriority":"Priority","llm.fKeyMode":"Key mode","llm.keyModePolling":"Polling","llm.keyModeRandom":"Random","llm.fAutoBan":"Auto ban","llm.fCostMode":"Cost mode","llm.costModeUsage":"Usage (discount)","llm.costModeFixed":"Subscription (monthly)","llm.fCostDiscount":"Cost discount","llm.costDiscountHint":"Actual cost = list price × discount (0.8 = 20% off)","llm.fMonthlyCost":"Monthly cost (USD/account)","llm.monthlyCostHint":"Fixed subscription cost; per-request cost logs 0, settled monthly","llm.fInitialKeys":"Initial keys","llm.fMaxConcurrency":"Max concurrency","llm.addKey":"Add key","llm.keysWriteOnlyHint":"API keys are managed via the key pool (row menu → Manage keys) and cannot be edited here.","llm.colChannel":"Channel","llm.colPriority":"Priority","llm.colKeys":"Keys","llm.colMaskedKey":"Key","llm.colMaxConcurrency":"Concurrency","llm.keysSummary":"{active} active of {total} keys","llm.manageKeys":"Manage keys","llm.testChannel":"Test connectivity","llm.disableChannel":"Disable","llm.enableChannel":"Enable","llm.testOk":"{model} responded in {ms}ms","llm.testFailed":"Test failed: {detail}","llm.disableKey":"Disable","llm.enableKey":"Enable","llm.replacePool":"Replace the whole key pool","llm.replacePoolHint":"Replaces ALL keys at once. Existing statuses (disabled keys, concurrency caps) are lost.","llm.replacePoolSubmit":"Replace pool","llm.keysReplaced":"Key pool replaced","llm.newModel":"New Model","llm.noModels":"No model-directory rows","llm.noModelsDesc":"Register models with pricing. Unregistered models are rejected by the relay.","llm.modelCreated":"Model created","llm.modelUpdated":"Model updated","llm.modelDeleted":"Model deleted","llm.confirmDeleteModel":'Delete model "{name}" from the directory? The relay will reject it afterwards.',"llm.defaultsTitle":"Default models","llm.defaultsDesc":"Used by agents, flows and knowledge bases when no model is specified. Must be registered in this directory.","llm.defaultChatModel":"Default chat model","llm.defaultEmbeddingModel":"Default embedding model","llm.defaultEmbeddingHint":"Embedding models need a dimension (set it in the model's params).","llm.defaultNone":"Not set","llm.defaultsSaved":"Default models saved","llm.fModelName":"Model name","llm.fModelType":"Type","llm.fPriceMode":"Price mode","llm.priceModeToken":"Per token","llm.priceModePerCall":"Per call","llm.fInputPrice":"Input price ($/1M tokens)","llm.inputPriceHint":"Upstream list price (empty = $0); users pay price × group ratio","llm.fOutputPrice":"Output price ($/1M tokens)","llm.outputPriceHint":"Upstream list price","llm.fCacheReadPrice":"Cache-read price ($/1M)","llm.cachePriceHint":"Empty = same as input price","llm.fCacheWritePrice":"Cache-write price ($/1M)","llm.cacheWritePriceHint":"Empty = same as input price (Anthropic typically 1.25× input)","llm.fParams":"Model params","llm.fContextWindow":"Context window (tokens)","llm.fMaxOutputTokens":"Max output tokens","llm.fDimension":"Embedding dimension","llm.fCapabilities":"Capabilities","llm.paramsHint":"Read by agent context truncation and kb vector building; empty = unset. Capability tags drive frontend selector filtering.","llm.fCompletionRatio":"Completion ratio","llm.fCacheRatio":"Cache read ratio","llm.fCacheWriteRatio":"Cache write ratio","llm.fCallPrice":"Price per call (USD)","llm.callPriceHint":"Charged in full upfront ($1 = 1,000,000 quota).","llm.statusActive":"Active","llm.statusDisabled":"Disabled","llm.colPricing":"Pricing","llm.filterModel":"Filter by model","llm.filterToken":"Filter by token id","llm.filterChannelAll":"All channels","llm.applyFilter":"Apply","llm.colTime":"Time","llm.colSource":"Source","llm.colTokens":"P/C tokens","llm.colQuota":"Charged","llm.colCost":"Cost","llm.colProfit":"Profit","llm.colRequests":"Requests","llm.colOutputTokens":"Output tokens","llm.colPromptTokens":"Input tokens","llm.colCompletionTokens":"Output tokens","llm.statsTitle":"Usage & profit","llm.groupByDay":"By day","llm.groupByModel":"By model","llm.groupByUser":"By user","llm.groupByChannel":"By channel","llm.chartMoney":"Charge / Cost / Profit","llm.chartTokens":"Token usage","llm.noUsageData":"No usage in this period","llm.colStream":"Stream","llm.colStatus":"Status","llm.colElapsed":"Elapsed","llm.noLogs":"No usage logs","llm.noLogsDesc":"Relay and internal LLM calls will appear here.","layout.ai":"AI","layout.aiAgents":"Agents","layout.aiPlayground":"Playground","aiAgents.newAgent":"New Agent","aiAgents.noAgents":"No agents yet","aiAgents.emptyHint":"Create an agent, configure its model and system prompt, then start chatting.","aiAgents.name":"Name","aiAgents.namePlaceholder":"e.g. Content Assistant","aiAgents.nameImmutable":"The name cannot be changed after creation","aiAgents.provider":"Provider","aiAgents.providerHint":"OpenAI-compatible endpoint (DeepSeek/OpenRouter/Ollama) or Anthropic","aiAgents.model":"Model","aiAgents.modelPlaceholder":"Select a model","modelSelect.placeholder":"Select a model","modelSelect.selectedCount":"{count} selected","modelSelect.useDefault":"Use default model","modelSelect.selectAll":"Select all","modelSelect.clearAll":"Clear","modelSelect.type":"Type","modelSelect.channel":"Channel","modelSelect.model":"Model","aiAgents.channelPin":"Pinned channel","aiAgents.channelPinAuto":"Automatic routing (no pin)","aiAgents.channelPinHint":"Pin this agent to one upstream channel for predictable cost. Pinned channels must serve the model and belong to this tenant; no cross-channel failover.","aiAgents.systemPrompt":"System Prompt","aiAgents.systemPromptPlaceholder":"You are a helpful assistant...","aiAgents.tools":"Tool Allowlist","aiAgents.allowAll":"Allow all","aiAgents.allowAllHint":"This agent may call every domain tool registered on the server.","aiAgents.memoryToolsHint":"Memory tools (memory_store/recall/forget) are always available and need no allowlist entry.","aiAgents.customToolPlaceholder":"Add custom tool name (e.g. MCP tools)…","aiAgents.addTool":"Add","aiAgents.toolGroup.content":"Content","aiAgents.toolGroup.system":"System","aiAgents.toolGroup.skills":"Skills","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Files","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Knowledge","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Other","aiAgents.kbBinding":"Knowledge Bases","aiAgents.kbEmpty":"No active knowledge bases.","aiAgents.kbBindingHint":"Select each knowledge base to mount individually; with none selected the knowledge_search tool is not mounted. With the tool enabled, the agent searches the selected knowledge bases during conversations and cites sources; kb_ids passed in a call can only narrow this scope.","aiAgents.memory":"Long-term Memory","aiAgents.memoryHint":"When enabled, the agent's core memories are injected each turn (isolated per user).","aiAgents.temperature":"Temperature","aiAgents.temperaturePlaceholder":"Empty = provider default","aiAgents.maxIterations":"Max Iterations","aiAgents.maxIterationsHint":"Maximum engine iterations (tool-call rounds) per turn.","aiAgents.params":"Extra Params (JSON)","aiAgents.paramsInvalid":"Invalid JSON","aiAgents.paramsHint":"skill_bundles is managed by the Enabled Skills control above; hand-written values here are overwritten.","aiAgents.allTools":"All","aiAgents.noTools":"None","aiAgents.updatedAt":"Updated","aiAgents.usage":"Usage","aiAgents.playground":"Playground","aiAgents.created":"Agent created","aiAgents.createFailed":"Failed to create agent","aiAgents.updated":"Agent updated","aiAgents.updateFailed":"Failed to update agent","aiAgents.deleted":"Agent deleted","aiAgents.deleteFailed":"Failed to delete agent","aiAgents.confirmDelete":"Delete {name}? Its sessions, messages and memories will be removed permanently.","aiUsage.totalTurns":"Total Turns","aiUsage.inputTokens":"Input Tokens","aiUsage.outputTokens":"Output Tokens","aiUsage.cacheReadTokens":"Cache Read Tokens","aiUsage.toolCalls":"Tool Calls","aiUsage.dailyTitle":"Daily Usage","aiUsage.noData":"No usage in this period","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"Select an agent","aiPlayground.sessions":"Sessions","aiPlayground.sessionDeleted":"Session deleted","aiPlayground.sessionDeleteFailed":"Failed to delete session","aiPlayground.deleteSessionDesc":"The session and all its messages will be deleted. This cannot be undone.","aiPlayground.newSession":"New session","aiPlayground.noSessions":"No sessions yet — sending a message creates one.","aiPlayground.noAgents":"Create an agent first","aiPlayground.emptySession":"Select or create a session to start chatting","aiPlayground.thinking":"Thinking","aiPlayground.busy":"Turn in progress…","aiPlayground.inputPlaceholder":"Type a message and press Enter…","aiPlayground.stop":"Stop","aiPlayground.sessionFailed":"Failed to create session","aiPlayground.turnFailed":"Turn failed","aiMemory.title":"Memories","aiMemory.searchPlaceholder":"Search key or content…","aiMemory.allCategories":"All categories","aiMemory.add":"Add Memory","aiMemory.addTitle":"Add Memory","aiMemory.editTitle":"Edit Memory","aiMemory.dialogHint":"Deduplicated by key: an existing (agent, user, key) row gets its content updated.","aiMemory.key":"Key","aiMemory.keyImmutable":"The key is the memory's unique identity and cannot change after creation","aiMemory.content":"Content","aiMemory.category":"Category","aiMemory.categoryHint":"core is injected and budget-managed; daily is log-only, never injected","aiMemory.importance":"Importance","aiMemory.user":"User","aiMemory.userOptional":"Owner user (optional)","aiMemory.userPlaceholder":"Empty = platform-level row","aiMemory.pinned":"Pinned (exempt from budget eviction)","aiMemory.noMemories":"No memories","aiMemory.emptyHint":"Memories accumulate from agent conversations, or add one manually.","aiMemory.saved":"Memory saved","aiMemory.saveFailed":"Failed to save memory","aiMemory.deleted":"Memory deleted","aiMemory.deleteFailed":"Failed to delete memory","aiMemory.confirmDelete":"Delete memory {key}? This cannot be undone.","layout.aiSkills":"Skills","layout.aiTools":"AI Tools","aiTools.title":"AI Tool Catalog","aiTools.tabBuiltin":"Built-in Tools","aiTools.category":"Category","aiTools.nameDesc":"Name / Description","aiTools.usedByCol":"Used by agent","aiTools.desc":"Backend-registered domain tools (name/description/category are backend-defined), grouped by category.","aiTools.usedBy":"used by {count} agents","aiTools.empty":"No tools","aiTools.emptyDesc":"No domain tools are registered by the backend.","aiSkills.new":"New Skill","aiSkills.newTitle":"New Skill","aiSkills.editTitle":"Edit Skill","aiSkills.dialogHint":"Skills are stored as SKILL.md (frontmatter + body); agents reference them via their enable list.","aiSkills.name":"Name","aiSkills.nameHint":"Directory name: letters/digits/-/_, max 64 chars","aiSkills.layer":"Layer","aiSkills.layerHint":"tenant = current tenant only; platform = all tenants (platform wins on name clash)","aiSkills.description":"Description","aiSkills.descriptionPlaceholder":"When this skill should be used (for model discovery)","aiSkills.instructions":"Instructions (Markdown)","aiSkills.tools":"Composed tools","aiSkills.toolsPlaceholder":"Type a tool name and press Enter, e.g. list_posts","aiSkills.disallowedTools":"Disallowed tools","aiSkills.always":"Always inline","aiSkills.alwaysHint":"Inline full instructions even in Compact mode (default: metadata + on-demand read_skill)","aiSkills.noSkills":"No skills yet","aiSkills.emptyHint":"A skill is a SKILL.md directory with instructions, injected into the agent's system prompt when enabled.","aiSkills.saved":"Skill saved","aiSkills.saveFailed":"Failed to save skill","aiSkills.deleted":"Skill deleted","aiSkills.deleteFailed":"Failed to delete skill","aiSkills.confirmDelete":"Delete skill {name}? The whole skill directory (including scripts/assets) is removed.","aiSkills.bundles":"Enabled Skills","aiSkills.bundlesAllHint":"Enable every skill in scope for this agent.","aiSkills.bundlesEmpty":"No skills available yet — create one on the Skills page first.","aiSkills.bundlesHint":"Pick the skills injected into this agent's system prompt; directories are rescanned every turn.","layout.aiSessions":"Conversations","layout.aiDebates":"Debates","aiAgents.reviewerBadge":"Reviewer","aiSessions.title":"Title","aiSessions.agent":"Agent","aiSessions.user":"User","aiSessions.messages":"Messages","aiSessions.lastActive":"Last Active","aiSessions.allAgents":"All agents","aiSessions.allStatuses":"All statuses","aiSessions.noSessions":"No conversations","aiSessions.emptyHint":"Conversations appear here once users start turns in agent sessions.","aiSessions.untitled":"(untitled)","aiSessions.view":"View messages","aiSessions.noMessages":"No messages in this session","aiSessions.deleted":"Conversation deleted","aiSessions.deleteFailed":"Failed to delete conversation","aiSessions.confirmDelete":'Delete conversation "{title}"? All its messages are removed (agent memories are kept); this cannot be undone.',"aiDebates.title":"Requirement Review Debates","aiDebates.subtitle":"Proposer A and reviewer B debate a requirement over a dispute ledger; deadlocks escalate to human judgment.","aiDebates.new":"New Debate","aiDebates.proposer":"Proposer (agent A)","aiDebates.reviewer":"Reviewer (agent B)","aiDebates.requirement":"Requirement","aiDebates.requirementPlaceholder":"Describe the requirement to be debated…","aiDebates.maxRounds":"Max rounds","aiDebates.start":"Start debate","aiDebates.started":"Debate started","aiDebates.startFailed":"Failed to start debate","aiDebates.status":"Status","aiDebates.rounds":"Rounds","aiDebates.disputes":"Disputes","aiDebates.created":"Created","aiDebates.actions":"Actions","aiDebates.view":"View","aiDebates.cancel":"Cancel debate","aiDebates.cancelled":"Debate cancelled","aiDebates.cancelFailed":"Failed to cancel","aiDebates.report":"Escalation report","aiDebates.ledger":"Dispute ledger","aiDebates.noDebates":"No debates yet","aiDebates.emptyHint":"Start one from a requirement — A drafts, B challenges, deadlocks reach you.","aiDebates.verdicts":"Verdicts","aiDebates.verdictHint":"Rule on each escalated dispute; when all are ruled, A produces the final requirement.","aiDebates.sideA":"Side A","aiDebates.sideB":"Side B","aiDebates.custom":"Custom","aiDebates.resolution":"Custom resolution","aiDebates.note":"Note (optional)","aiDebates.submitVerdicts":"Submit verdicts","aiDebates.verdictsSubmitted":"Verdicts recorded","aiDebates.verdictsFailed":"Failed to record verdicts","aiDebates.noReport":"No report — debate did not escalate.","aiDebates.consensus":"Consensus reached — no human judgment needed.","layout.kb":"Knowledge Base","layout.kbDocs":"Documents","layout.kbChunks":"Chunks","layout.kbImages":"Images","layout.kbChunker":"Chunker Preview","layout.kbPlayground":"QA Playground","layout.kbWiki":"Wiki Pages","layout.kbFaqs":"FAQs","layout.kbGaps":"Knowledge Gaps","layout.kbDiagnostics":"Diagnostics","kb.new":"New Knowledge Base","kb.noKb":"No knowledge bases yet","kb.noKbDesc":"Create one to start uploading documents.","kb.deleteKb":"Delete knowledge base","kb.confirmDeleteKb":'Delete knowledge base "{name}"? All of its documents, chunks, FAQs, wiki pages, vector/full-text indexes and original files will be permanently removed.',"kb.kbDeleted":"Knowledge base deleted (incl. contents and indexes)","kb.viewChunks":"View chunks","kb.reparseAction":"Reprocess","kb.thinking":"Thinking…","kb.viewFullRef":"View full content","kb.distillWiki":"Generate Wiki","kb.distillWikiHint":"Background LLM task: distills draft wiki pages from the selected documents; review and publish them in the list afterwards.","kb.noReadyDocs":"No ready documents in this knowledge base","kb.distillQueued":"Wiki generation task queued ({count} documents)","kb.distillSubmit":"Generate Wiki ({count})","kb.editChunk":"Edit chunk","kb.editChunkHint":"Saving re-embeds and re-indexes the chunk automatically.","kb.confirmDeleteChunk":"Delete this chunk? Its vector/full-text indexes will be removed; deleting a parent chunk cascades to its children.","kb.chunkUpdated":"Chunk updated (re-indexed)","kb.chunkDeleted":"Chunk deleted (incl. indexes)","kb.updatedAt":"Updated","kb.jobHistory":"Processing history","kb.jobAttempts":"Attempts","kb.noJobs":"No processing records","kb.updated":"Knowledge base updated","kb.created":"Knowledge base created","kb.vectorBackend":"Vector backend","kb.enabledOn":"Enabled","kb.enabledOff":"Disabled","kb.slug":"Slug","kb.kindDoc":"Document KB (may include wiki)","kb.kindFaq":"FAQ KB","kb.selectKb":"Select a knowledge base","kb.selectKbDesc":"Pick one above, or create it on the Knowledge Bases page.","kb.selectPlaceholder":"Select knowledge base","kb.allKbs":"All knowledge bases","kb.allDocs":"All documents","kb.progress":"Progress","kb.partialParsed":"Partial parse","kb.pagesCol":"Pages","kb.imagesCol":"Images","kb.pageCol":"Page","kb.parseEngine":"Parse engine","kb.parseEngineBuiltin":"Built-in (zero-dep fallback)","kb.parseEngineDocreader":"docreader service (high-fidelity PDF images/scans)","kb.parseEngineMineru":"MinerU (PDF layout/formula/tables)","kb.parseEngineHint":"PDF images, scans and layout fidelity need the docreader service; falls back to built-in automatically when the service URL is unset","kb.noImages":"No images","kb.noImagesDesc":"Images extracted from documents appear here once recognition is enabled.","kb.recognition":"Recognition","kb.imagePreview":"Preview","kb.imageCaption":"Caption","kb.imageOcr":"OCR text","kb.imageStatus.pending":"Pending","kb.imageStatus.done":"Recognized","kb.imageStatus.failed":"Failed","kb.imageStatus.skipped":"Skipped","kb.createdAtCol":"Created","kb.imagePreviewUnavailable":"Preview unavailable (external link dead or bytes missing)","kb.imageThumb":"Thumb","kb.imageContent":"Content","kb.zoomIn":"Zoom in","kb.zoomOut":"Zoom out","kb.zoomReset":"Reset","kb.reader":"Reader view","kb.readerEmpty":"No parsed blocks to display","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Page unknown","kb.upload":"Upload document","kb.uploadOk":"Uploaded; parsing queued","kb.uploadFailed":"Upload failed","kb.online":"Online entry","kb.onlineOk":"Submitted; processing","kb.onlineFailed":"Submit failed","kb.noDocs":"No documents","kb.noDocsDesc":"Upload files or write Markdown online.","kb.source":"Source","common.search":"Search","layout.kbSearchTest":"Search Test","kb.searchTest.vectorTab":"Vector recall","kb.searchTest.bm25Tab":"Keyword recall","kb.searchTest.selectKb":"Select knowledge base","kb.searchTest.queryPlaceholder":"Enter a query…","kb.searchTest.queryFirst":"Enter a query and search to verify each retrieval path","kb.searchTest.selectKbFirst":"Select a knowledge base first","kb.searchTest.empty":"No hits","kb.searchTest.score":"Score","kb.searchTest.kind":"Kind","kb.searchTest.doc":"Document","kb.searchTest.preview":"Content","kb.searchTest.grams":"Query tokens","kb.searchTest.keywords":"Chunk keywords","kb.searchTest.ghostHint":"Some hits are ghosts (chunks no longer in SQL)","kb.parserEngineCol":"Parser","kb.parserDefault":"Default","kb.imageRecogCol":"Image recognition","kb.imageRecogOn":"On","kb.imageRecogOff":"Off","layout.docparse":"Docparse","layout.docparseEngines":"Engines","layout.docparseTokens":"API Tokens","layout.docparseConvert":"Convert","layout.docparseRecognize":"Recognize","layout.docparseUsage":"Usage","docparse.engineName":"Engine","docparse.category":"Category","docparse.categoryDocument":"Document","docparse.categoryOcr":"Image OCR","docparse.enabled":"Enabled","docparse.pricePerPage":"Price/page","docparse.pricePerCall":"Price/call","docparse.costPerPage":"Cost/page","docparse.registered":"Registered","docparse.notRegistered":"Not registered","docparse.updatedAt":"Updated at","docparse.editEngine":"Edit engine","docparse.editEngineDesc":'Update pricing for "{name}". Amounts are in cents.',"docparse.engineUpdated":"Engine updated","docparse.noEngines":"No engines","docparse.failedToSave":"Failed to save","docparse.newToken":"New token","docparse.owner":"Owner","docparse.ownerPlaceholder":"Leave empty = me","docparse.ownerHint":"User who owns this token; defaults to the current admin.","docparse.tokenCreated":"Token created","docparse.tokenName":"Token name","docparse.tokenPrefix":"Prefix","docparse.quota":"Quota","docparse.quotaHint":"Daily page quota; 0 = unlimited","docparse.tokenCreateDesc":"API token for third parties to call the document-parsing endpoints.","docparse.noTokens":"No tokens","docparse.noTokensDesc":"Create a token to let third parties call the parsing API.","docparse.confirmDeleteToken":'Delete token "{name}"? Third parties using it will immediately lose access. This cannot be undone.',"docparse.tokenDeleted":"Token deleted","docparse.createdAt":"Created at","docparse.failedToCreate":"Failed to create","docparse.convertHint":"Upload a document, optionally pick an engine, and get markdown output.","docparse.file":"File","docparse.engineAuto":"Default engine","docparse.extractImages":"Extract images","docparse.parse":"Parse","docparse.jobSubmitted":"Job submitted","docparse.jobRunning":"Running…","docparse.jobFailed":"Job failed","docparse.newJob":"New job","docparse.pages":"Pages","docparse.images":"Images","docparse.failedToSubmit":"Failed to submit","docparse.recognizeHint":"Upload an image to get a caption and OCR text via the default vision model.","docparse.image":"Image","docparse.prompt":"Prompt","docparse.promptPlaceholder":"Optional custom prompt","docparse.recognize":"Recognize","docparse.caption":"Caption","docparse.noUsage":"No usage data","docparse.kind":"Kind","docparse.chars":"Chars","docparse.durationMs":"Duration(ms)","kb.noChunks":"No chunks","kb.noChunksDesc":"Parent/child chunks — click a row for full content","kb.breadcrumb":"Chunk","kb.embedded":"Embedded","kb.notEmbedded":"Not embedded","kb.bytes":"bytes","kb.vectorCol":"Vector","kb.backToDocs":"Back to documents","kb.chunkCount":"Chunks","kb.reparse":"Reprocessed","kb.reparseFailed":"Reprocess failed","kb.confirmDelete":'Delete document "{title}"? Its chunks, vector/full-text indexes and the original file will be permanently removed.',"kb.deleted":"Deleted (incl. indexes)","kb.mdTitle":"Title","kb.mdContent":"Content (Markdown; # headings drive chunking)","kb.status.pending":"Pending","kb.status.parsing":"Parsing","kb.status.chunking":"Chunking","kb.status.indexing":"Indexing","kb.status.embedding":"Embedding","kb.status.ready":"Ready","kb.status.failed":"Failed","kb.status.stale":"Stale","kb.sample":"Sample Markdown (≤64KB, read-only, nothing is stored)","kb.runPreview":"Run preview","kb.running":"Chunking…","kb.parent":"Parent","kb.child":"Child","kb.parents":"Parents","kb.children":"Children","kb.total":"Total","kb.chars":"chars","kb.askLabel":"Question (single-turn; empty scope = all enabled KBs)","kb.stream":"Streaming (SSE)","kb.ask":"Ask","kb.stop":"Stop","kb.references":"References","kb.wikiNoPages":"No wiki pages","kb.wikiNoPagesDesc":"Distill ready documents; drafts appear here for review.","kb.publish":"Publish (index for retrieval)","kb.approveOk":"Published and indexed","kb.reject":"Reject and archive","kb.rejected":"Archived","kb.saveOk":"Saved (published pages re-index automatically)","kb.noVersions":"No revisions yet.","kb.diffCurrent":"Diff vs current","kb.rollback":"Rollback","kb.rollbackOk":"Rolled back (previous content saved as a new revision)","kb.diffTitle":"Line diff (red=removed, green=added)","kb.newFaq":"New FAQ","kb.faqCreated":"Created and indexed","kb.stdQuestion":"Standard question","kb.similarCount":"Similar","kb.hits":"Hits","kb.toggleOk":"Toggled (indexes updated)","kb.similarLabel":"Similar questions (one per line, optional)","kb.answersLabel":"Answers (one per line, multiple allowed)","kb.noFaqs":"No FAQs","kb.noFaqsDesc":"Create manually, or draft from the Knowledge Gaps page.","kb.gapsIntro":"Aggregated uncovered (or negatively rated) questions — drafts go to FAQs for human review.","kb.diag.allKinds":"All kinds","kb.diag.allStatuses":"All statuses","kb.diag.docFilter":"Filter by document ID","kb.diag.total":"{n} runs","kb.diag.noRuns":"No runs yet","kb.diag.noRunsDesc":"Every KB pipeline execution (ingest / ask / search…) is recorded here.","kb.traceToggle":"Trace","kb.tracePanel":"Pipeline trace","kb.logId":"Log ID","kb.diag.runs":"Runs","kb.diag.checkup":"Checkup","kb.diag.health":"Health","kb.diag.checkupIntro":"On-demand consistency scan (10s cache).","kb.diag.healthIntro":"Component health; default probe is zero-cost.","kb.diag.embedProbe":"Embed smoke probe","kb.diag.r1":"Lost events (pending without jobs)","kb.diag.r2":"Stuck intermediate docs","kb.diag.r3":"Failed docs","kb.diag.r4":"Incomplete (missing embeddings)","kb.diag.r5":"Vector drift","kb.diag.r6":"Dead KB jobs","kb.diag.r7":"Stuck runs","kb.diag.kind":"Kind","kb.diag.status":"Status","kb.diag.trigger":"Trigger","kb.diag.attempt":"Attempt","kb.diag.latency":"Latency","kb.diag.error":"Error","kb.diag.created":"Time","kb.diag.prev":"Prev","kb.diag.next":"Next","kb.diag.detail":"Run detail","kb.diag.agent":"Agent","kb.diag.session":"Session","kb.diag.configSnapshot":"Config snapshot","kb.diag.stages":"Stages","kb.diag.noStages":"No stages recorded","kb.noGaps":"No knowledge gaps","kb.noGapsDesc":"All questions are covered by the KB.","kb.freq":"Count","kb.draftFaq":"Draft FAQ","kb.drafted":"FAQ drafted (disabled) — review it on the FAQs page","kb.docsPage":"Documents","kb.title":"Title","kb.versions":"Versions","kb.edit":"Edit","kb.operations":"Actions","kb.state":"Status","kb.allStatus":"All statuses","kb.type":"Type","kb.embeddingModel":"Embedding model","kb.embeddingDim":"Vector dimension","kb.modelHint":"Immutable after creation (defaults from global config if empty)","kb.modelCol":"Model","kb.modelRequired":"Required: fill in, or configure global defaults (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Rerank model","kb.rerankModelOptional":"Optional: global default if empty (rerank off when unconfigured)","kb.rerankWindow":"Rerank window","kb.rerankThreshold":"Rerank threshold","kb.rerankInherit":"Inherit global default","kb.rerankHint":"Empty window/threshold inherit the global defaults (RAISFAST_KB_RERANK_*); clearing the model falls back to the global default — with no model configured S5 passes through","kb.rerankInvalid":"Window must be a positive integer; threshold must be within 0–1","kb.chatModel":"Generation model","kb.chatModelOptional":"Optional: global default (RAISFAST_KB_CHAT_MODEL) → tenant default","kb.chatModelHint":"Model used for S9 answer generation; clearing falls back to the global default","kb.distillModel":"Distill model","kb.distillModelOptional":"Optional: global default (RAISFAST_KB_DISTILL_MODEL) → tenant default","kb.distillModelHint":"Model used for wiki distillation (topic extraction + drafting); clearing falls back to the global default","kb.imageRecognition":"Image recognition","kb.imageModel":"Recognition model","kb.imageModelOptional":"Pick a vision-capable model; global default if empty (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Caption language","kb.imageLanguagePlaceholder":"e.g. zh / en; empty follows the document language","kb.imageInstructions":"Custom instructions","kb.imageInstructionsPlaceholder":"Extra guidance for image interpretation (optional)","kb.imageHint":"When enabled, document images get VLM captions + OCR text that becomes searchable","kb.descPlaceholder":"What this KB is for (optional)","jobs.attempts":"Attempts","jobs.runAfter":"Scheduled","jobs.updatedAt":"Updated","jobs.error":"Error","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"No jobs","jobs.noJobsDesc":"The background job queue is empty.","jobs.cleanup":"Cleanup","jobs.cleanupDesc":"Delete completed/dead jobs older than 7 days. This cannot be undone.","jobs.cleanupDone":"Cleaned up {n} jobs","jobs.confirmDelete":"Delete job {type}? The record will be removed from the queue.","jobs.retried":"Job requeued","jobs.deleted":"Job deleted","jobs.cancelTask":"Cancel","jobs.confirmCancel":"Cancel job {type}? A running job will be stopped.","jobs.cancelled":"Job cancelled","jobs.actionFailed":"Action failed","apps.app":"App","apps.appId":"App ID","apps.version":"Version","apps.source":"Source","apps.tenantScope":"Tenant scope","apps.installedAt":"Installed at","apps.updatedAt":"Updated at","apps.steps":"steps","apps.listHint":"Install and manage application bundles (.rafapp).","apps.noApps":"No apps installed","apps.installFirst":"Install your first application bundle.","apps.installApp":"Install app","apps.backToApps":"Back to apps","apps.general":"General","apps.installOptions":"Install options","apps.installOptionsHint":"Choices recorded when the app was installed.","apps.lastError":"Last error","apps.default":"Default","apps.statusInstalling":"Installing","apps.statusInstalled":"Installed","apps.statusEnabled":"Enabled","apps.statusDisabled":"Disabled","apps.statusUninstalling":"Uninstalling","apps.statusRolledBack":"Rolled back","apps.appEnabled":"App enabled","apps.appDisabled":"App disabled","apps.appUninstalled":"App uninstalled","apps.failedToEnable":"Failed to enable app","apps.failedToDisable":"Failed to disable app","apps.failedToUninstall":"Failed to uninstall app","apps.uninstallTitle":"Uninstall app","apps.uninstallConfirm":'Uninstall "{appId}" and roll back everything it created?',"apps.keepData":"Keep data","apps.keepDataHint":"Keep the app's tables and data so it can be re-attached on reinstall.","apps.notFoundMsg":"App not found.","apps.installTitle":"Install application","apps.installHint":"Upload an application bundle (.rafapp), run the precheck, then confirm installation.","apps.packageFile":"Package file","apps.packageHint":"A .rafapp bundle produced by `raisfast app pack`.","apps.checking":"Checking…","apps.runPrecheck":"Run precheck","apps.confirmInstall":"Confirm install","apps.installing":"Installing…","apps.precheckFailed":"Precheck failed","apps.precheckReport":"Precheck report","apps.precheckPassed":"No blocking conflicts — ready to install.","apps.precheckBlocked":"Blocking conflicts found — installation is not allowed.","apps.noConflicts":"No conflicts detected.","apps.blockingConflicts":"Blocking conflicts","apps.warnings":"Warnings","apps.reattachTables":"Re-attached tables","apps.reattachHint":"Residual tables from a previous keep-data uninstall will be taken over.","apps.installOk":"App installed","apps.installFailed":"Install failed and was rolled back","apps.pendingCredentials":"Pending credentials","apps.pendingCredentialsHint":"Configure these credentials before the app can run.","apps.noPendingCredentials":"None","apps.viewApp":"View app","apps.installAnother":"Install another","apps.installLog":"Install log","apps.installLogHint":"Compensation log of every materialization step.","apps.noInstallLog":"No install steps recorded."},UC={"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.apps":"应用","layout.rolesPermissions":"角色与权限","layout.cron":"定时任务","layout.jobs":"任务队列","layout.tenants":"租户","layout.webhooks":"Webhooks","layout.apiTokens":"API 令牌","layout.workflows":"工作流","layout.flows":"流程引擎","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.true":"是","common.false":"否","common.save":"保存","common.cancel":"取消","common.ok":"确定","common.create":"创建","common.creating":"创建中...","common.saving":"保存中...","common.deleting":"删除中...","common.confirmDeleteNameDesc":"此操作不可撤销。输入「{name}」以确认删除:","common.confirmDeleteNameLabel":"名称","common.delete":"删除","common.confirmDeleteTitle":"确认删除","common.edit":"编辑","common.content":"内容","common.remove":"移除","common.enable":"启用","common.disable":"禁用","common.uninstall":"卸载","common.viewDetails":"查看详情","common.download":"下载","common.listView":"列表视图","common.cardView":"卡片视图","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.refresh":"刷新","common.all":"全部","common.draft":"草稿","common.published":"已发布","common.active":"启用","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":"保存工作流失败","flows.title":"流程引擎","flows.newFlow":"新建流程","flows.createFlow":"创建流程","flows.editFlow":"编辑","flows.deleteFlow":"删除","flows.deleteConfirm":"删除流程「{name}」?其所有版本与运行实例都会被一并删除。","flows.instances":"实例","flows.instances.noBody":"该步骤没有输入/输出内容。","flows.instances.noSteps":"该实例暂无节点执行记录。","flows.instances.triggerAll":"全部触发方式","flows.instances.trigger.api":"手动 (api)","flows.instances.trigger.api_public":"公开 API","flows.instances.trigger.job":"任务 (job)","flows.instances.trigger.event":"事件","flows.instances.trigger.cron":"定时","flows.instances.empty":"暂无实例。运行流程后即可查看。","flows.instances.logs":"节点日志","flows.instances.node":"节点","flows.instances.type":"类型","flows.instances.flowName":"所属流程","flows.instances.allStatus":"全部状态","flows.instances.latency":"耗时","flows.flowDeleted":"流程已删除","flows.failedToDelete":"删除流程失败","flows.noFlows":"暂无流程,点击创建开始。","flows.noFlowsDesc":"使用可视化画布编排自动化流程。","flows.name":"名称","flows.description":"描述","flows.version":"v{version}","flows.versionColumn":"版本","flows.enabled":"已启用","flows.disabled":"已停用","flows.triggers.title":"内部触发器","flows.triggers.all":"全部类型","flows.triggers.flowName":"流程名称","flows.triggers.kind":"类型","flows.triggers.kindEvent":"事件触发 (eventbus)","flows.triggers.kindCron":"定时触发 (cron)","flows.triggers.config":"配置","flows.triggers.newTrigger":"新建触发器","flows.triggers.empty":"暂无内部触发器。匹配的事件/定时会自动运行其指向的流程。","flows.triggers.newDesc":"触发器独立指向一个流程;流程无需感知是谁触发它。","flows.triggers.triggerName":"触发器名称","flows.triggers.eventType":"事件类型 (event_type)","flows.triggers.cronExpr":"Cron 表达式","flows.triggers.filter":"过滤 (JSON)","flows.triggers.inputsMap":"入参映射 (JSON)","flows.triggers.saved":"已保存","flows.triggers.deleted":"触发器已删除","flows.triggers.created":"触发器已创建","flows.triggers.deleteHint":"删除触发器「{name}」?","flows.draft":"草稿","flows.api.title":"发布为 API","flows.api.token":"API Token","flows.api.endpoint":"调用端点","flows.api.curl":"请求示例","flows.api.curlHint":"开发环境为 http://127.0.0.1:9898;生产环境请换成你的 https 域名。","flows.api.enable":"启用 API","flows.api.disable":"停用","flows.api.regenerate":"重新生成 Token","flows.api.enabled":"API 已启用","flows.api.disabled":"API 已停用","flows.api.disabledDesc":"该流程尚未对外开放。启用后会生成一个 Token,第三方用它调用该流程最新已发布版本。","flows.api.hint":"执行最新已发布版本(草稿不生效),请求中的 inputs 会作为 JSON 传给 start 节点。","flows.api.copy":"复制","flows.api.copied":"已复制","flows.api.failed":"操作失败","flows.api.requireAuth":"需要 Bearer Token(关闭 = 内网免认证调用)","flows.apis.title":"公开 API","flows.apis.logsPage":"API 调用日志","flows.apis.allLogs":"全部外部 API 调用","flows.apis.listDesc":"管理已发布为公开 API 的流程。查看外部调用请进入「API 调用日志」。","flows.apis.apiTab":"接口","flows.apis.logsTab":"调用日志","flows.apis.empty":"暂无已发布的 API。可在流程的「更多 → 发布为 API」中启用。","flows.apis.noLogs":"暂无外部 API 调用记录。","flows.apis.time":"时间","flows.apis.flow":"流程","flows.apis.inputs":"输入参数","flows.apis.detail":"编辑流程","flows.apis.logs":"日志","flows.apis.viewSteps":"查看步骤日志","flows.apis.restore":"恢复","flows.apis.saved":"已更新","flows.apis.apiSettings":"API 设置","flows.apis.regenerate":"重新生成 Token","flows.apis.rotated":"Token 已重新生成","flows.apis.enableFirst":"请先启用 API,再修改认证要求。","flows.apis.slug":"Slug(公开路径标识)","flows.apis.slugHint":"用于定位该端点;重新生成后旧地址立即失效。","flows.apis.regenerateSlug":"重新生成 Slug","flows.apis.slugRotated":"Slug 已更新","flows.apis.usageTitle":"使用说明","flows.apis.copyCurl":"复制 curl","flows.apis.usageSteps":"POST 调用该流程的最新已发布版本,body 的 inputs 会传给 start 节点。返回 status / outputs / instance_id;如需人工等待则返回 status=waiting。","flows.apis.auth":"认证","flows.apis.open":"免认证","flows.apis.authBearer":"Bearer","flows.apis.deleted":"API 已删除","flows.apis.deleteApi":"删除 API","flows.apis.deleteHint":"删除「{name}」的公开 API?其 Token 将永久失效(停用会保留 Token,删除则不会)。","flows.updated":"更新时间","flows.run":"运行","flows.runFlow":"运行流程","flows.runConfirm":"运行流程「{name}」?输入将传给 start 节点。","flows.runStarted":"流程已启动","flows.failedToRun":"运行流程失败","flows.inputsJson":"输入 (JSON)","flows.instance.title":"流程实例","flows.instance.status":"状态","flows.instance.error":"错误","flows.instance.outputs":"输出","flows.instance.payload":"Resume payload (JSON)","flows.instance.resume":"恢复","flows.instance.stop":"停止","flows.instance.stopped":"实例已停止","flows.instance.resumed":"实例已恢复","flows.instance.failed":"操作失败","flows.instance.noOutputs":"暂无输出","flows.instance.outputsEmptyHint":'该流程的 End 节点未配置 outputs 映射,因此实例输出为空。可编辑流程,在 End 节点中添加 outputs 映射(例如 { "name": "result", "value": { "ref": ["script_1", "output"] } })。',"flows.editor.endOutputsHint":"实例输出只包含 End 节点 outputs 中映射的字段,请添加映射以返回结果。","flows.editor.autoMap":"自动映射上游节点输出","flows.editor.branchHint":"分支节点按规则分流:从对应端口(rule.handle)拉线到后续节点;无规则命中时走 else 端口。","flows.editor.edgeTitle":"已选中连线","flows.editor.edgeHint":"点击上方调色板节点即可插入到两端之间;也可拖动任一端点重新连接。","flows.editor.title":"流程编辑器","flows.editor.saveAndRun":"保存并运行","flows.editor.saveDraft":"保存草稿","flows.editor.draftSaved":"草稿已保存","flows.editor.publish":"发布","flows.editor.published":"已发布为新版本","flows.editor.failedToPublish":"发布失败","flows.editor.saving":"保存中...","flows.editor.test":"测试(用当前画布试运行,不发布)","flows.editor.unsaved":"有未保存的改动","flows.editor.draftUnpublished":"草稿 · 未发布","flows.editor.saveFirst":"请先保存流程,再执行测试。","flows.editor.save":"保存","flows.editor.nodeTypes":"节点类型","flows.editor.palette":"节点","flows.editor.canvas":"画布","flows.editor.config":"节点配置","flows.editor.selectNode":"选择节点以编辑配置。","flows.editor.configJson":"配置 (JSON)","flows.editor.invalidJson":"配置必须是合法的 JSON","flows.editor.deleteNode":"删除节点","flows.editor.requiredStart":"图中必须恰好有一个 start 节点。","flows.editor.requiredEnd":"图中至少需要一个 end 节点。","flows.editor.titleLabel":"标题","flows.editor.typeLabel":"类型","flows.editor.node.start":"开始","flows.editor.node.end":"结束","flows.editor.node.script":"脚本","flows.editor.node.egress":"外部调用","flows.editor.node.branch":"分支","flows.editor.node.await":"等待审批","flows.editor.node.llm":"LLM 节点","flows.editor.fModel":"模型 (model)","flows.editor.fMessages":"消息列表(支持 {{#ns.var#}} 引用)","flows.editor.fSystemPrompt":"System 提示词(固定首条,不可删)","flows.editor.fTemperature":"温度 (temperature)","flows.editor.fMaxTokens":"最大 tokens","flows.editor.fStop":"停止词(逗号分隔,≤4)","flows.editor.fJsonSchema":"结构化输出 (JSON Schema)","flows.editor.fTimeoutMs":"超时(毫秒)","flows.editor.addMessage":"添加消息","flows.editor.modifiers":"修饰器 (modifiers)","flows.editor.fRetry":"重试次数","flows.editor.fOnError":"错误策略","flows.editor.fDefaultOutputs":"兜底输出 (default_outputs)","flows.editor.errorOutHint":"发布校验要求从本节点的 error 端口连出至少一条边","flows.editor.code":"代码 (JS)","flows.editor.hint":"添加并连接节点后点击「保存并运行」。","flows.editor.created":"流程已创建","flows.editor.saved":"流程已保存","flows.editor.failedToSave":"保存流程失败","flows.editor.schemaInvalid":"图结构无效:{message}","flows.editor.autoLayout":"自动排列","flows.editor.layoutLR":"从左到右排列","flows.editor.jsonView":"JSON","flows.editor.copyJson":"复制","flows.editor.fClientKey":"客户端标识 (client_key)","flows.editor.fOp":"操作 (op)","flows.editor.fResponse":"响应字段","flows.editor.fInputMap":"输入映射 (ValueExpr)","flows.editor.fAwaitKind":"等待类型 (kind)","flows.editor.fTimeout":"超时(秒)","flows.editor.fAwaitApprovers":"审批人 user_id(软路由,逗号分隔)","flows.editor.fAwaitEvents":"事件规则","flows.editor.fAwaitFormContent":"展示文本 (form_content)","flows.editor.awaitFormContentHint":"审批时展示给操作者的文本,可用 {{#start.xxx#}} 引用运行时变量","flows.editor.fAwaitFormFields":"表单字段 (inputs)","flows.editor.awaitAddField":"添加字段","flows.editor.awaitFieldVar":"变量名","flows.editor.awaitFieldLabel":"标签","flows.editor.awaitFieldRequired":"必填","flows.editor.awaitFormFieldName":"字段变量名不能为空或重复","flows.editor.awaitSelectOptions":"type=select 须配置非空选项","flows.editor.awaitSelectOptionsPh":"选项(逗号分隔)","flows.editor.fAwaitActions":"操作按钮 (actions)","flows.editor.awaitAddAction":"添加操作","flows.editor.awaitActionTitle":"按钮文案","flows.editor.awaitApprovalPreset":"审批预设","flows.editor.awaitPresetApprove":"通过","flows.editor.awaitPresetReject":"驳回","flows.editor.awaitPresetHint":"生成 通过/驳回 两个操作(可再自由修改)","flows.editor.awaitActionsHint":"每个操作是一个输出端口,请分别连线;按钮文案任意。","flows.editor.awaitActionIdInvalid":"操作 id 需字母/下划线开头、≤20 字符且不重复","flows.editor.awaitAddEvent":"添加事件","flows.editor.awaitAddCorr":"添加关联键","flows.editor.awaitCorrField":"事件字段","flows.editor.awaitCorrHint":"关联键把事件寻址到本实例:事件字段的值须等于流程变量(如 start.order_id),否则不唤醒。","flows.editor.unitDays":"天","flows.editor.unitHours":"小时","flows.editor.unitMinutes":"分","flows.editor.unitSeconds":"秒","flows.editor.awaitPortsHint":"approval 有 approve / reject 输出端口,请分别连线;拒绝去向由连线决定。","flows.editor.awaitTimeoutPortHint":"配置超时后会多出一个 timeout 输出端口;未连线时到期实例将失败。","flows.editor.awaitTimeoutInvalid":"超时须为 ≥1 的整数","flows.editor.node.transform":"转换","flows.editor.fTransformAssignments":"字段赋值 (assignments)","flows.editor.transformAddRow":"添加字段","flows.editor.transformKey":"字段名 (key)","flows.editor.transformKeyInvalid":"字段名需字母/下划线开头、≤20 字符且不重复","flows.editor.fTransformHintLabel":"说明","flows.editor.fTransformHint":"每个 key 成为下游可引用的字段;值支持 常量/变量/表达式(trim、replace、concat、default 等清洗函数,{{#节点.字段#}} 引用上游)。","flows.editor.node.docparse":"文档解析","flows.editor.fDocParseInput":"输入文件 (input)","flows.editor.fDocParseEngine":"解析引擎 (engine)","flows.editor.fDocParseEnginePh":"留空使用全局默认;如 mineru / paddleocr_vl","flows.editor.fDocParseExtractImages":"提取内嵌图片","flows.editor.docParseHint":"输入须解析为文件引用字符串:对象存储 key 或 https URL;输出 markdown/images/engine/pages/warnings 供下游引用。","flows.editor.toExpr":"切换为表达式","flows.editor.exprPh":"如 trim({{#start.name#}})","flows.editor.awaitEventRequired":"kind=event 需要至少一个事件名","flows.instance.waitingKind":"等待类型","flows.instance.resumeUntil":"超时时间","flows.instance.approve":"通过","flows.instance.reject":"拒绝","flows.instance.rejectReason":"拒绝原因(可选,随 resume 传递)","flows.instance.submitData":"提交数据","flows.instance.resumeUrlHint":"回调地址:交给需要恢复此流程的系统(POST,body 为 {action, data})","flows.instance.resumeUrlCopied":"回调地址已复制","flows.instance.awaitApproversHint":"指定审批人:{list}","flows.instance.formFieldRequired":"字段 {field} 必填","flows.editor.fLabel":"标签","flows.editor.fElseHandle":"兜底端口 (else handle)","flows.editor.addBranch":"添加分支规则","flows.editor.addNode":"添加节点","flows.editor.exportTitle":"导出画布","flows.editor.namePlaceholder":"未命名流程","flows.editor.descPlaceholder":"添加描述...","flows.editor.insertVariable":"插入变量","flows.editor.noUpstream":"无上游节点","flows.editor.undeclared":"未声明输出字段","flows.editor.wholeOutput":"整个输出对象","flows.editor.fOutputSchema":"输出声明(字段+类型,运行时校验)","flows.editor.addField":"添加输出字段","flows.editor.titleConflict":"标题与其他节点重复,失焦后自动编号","flows.editor.titleDedup":"标题已自动改为 {title}","flows.editor.fStartParams":"入参定义(写入 start 命名空间,下游可引用)","flows.editor.fVariable":"变量名 (variable)","flows.editor.fRequired":"必填","flows.editor.addParam":"添加入参","flows.editor.dupVariable":"变量名重复: {v}","flows.editor.fRefNode":"节点","flows.editor.fRefField":"字段","flows.editor.fRefPath":"子路径","flows.editor.fInputKey":"输入键名(脚本内访问)","flows.editor.addInput":"添加输入映射","flows.editor.fEndOutputs":"流程输出(最终结果键)","flows.editor.fOutputKey":"结果键","flows.editor.addOutput":"添加输出","flows.editor.toLiteral":"切换为固定值","flows.editor.toRef":"切换为引用","flows.editor.fParamType":"字段类型","flows.editor.fMaxLength":"最大长度","flows.editor.fDefaultValue":"默认值","flows.editor.fOptions":"选项","flows.editor.editParam":"编辑入参","flows.editor.invalidMaxLength":"最大长度须为 ≥1 的整数","flows.editor.fAccept":"文件类别(可多选)","flows.editor.accept.document":"文档","flows.editor.accept.document.desc":"PDF、Word、Excel、PPT、TXT、Markdown","flows.editor.accept.image":"图片","flows.editor.accept.image.desc":"PNG、JPG、JPEG、WEBP、GIF、SVG","flows.editor.accept.audio":"音频","flows.editor.accept.audio.desc":"MP3、WAV、OGG、M4A、FLAC","flows.editor.accept.video":"视频","flows.editor.accept.video.desc":"MP4、MOV、WEBM、AVI、MKV","flows.editor.accept.other":"其他","flows.editor.accept.other.desc":"ZIP、CSV、JSON 等其他格式","flows.editor.fMaxCount":"最大数量(多文件)","flows.editor.invalidMaxCount":"最大数量须为 ≥1 的整数","flows.editor.noDefault":"不设置","flows.editor.addOption":"添加选项","flows.editor.node.http":"HTTP 请求","flows.editor.fUrl":"URL","flows.editor.fHeaders":"Headers","flows.editor.fQuery":"Query 参数","flows.editor.fBody":"请求体(JSON 模板)","flows.editor.httpUrlScheme":"URL 须以 http:// 或 https:// 开头","flows.editor.node.ct":"数据查询","flows.editor.fContentType":"内容类型 (plural)","flows.editor.fRecordId":"记录 ID(模板)","flows.editor.fFilters":"过滤条件","flows.editor.fValues":"写入字段","flows.editor.fSort":"排序(-field 倒序)","flows.editor.node.iteration":"迭代","flows.editor.fIterItems":"迭代数组(items)","flows.editor.fIterConcurrency":"并发数(1=串行)","flows.editor.fIterOnError":"单项失败","flows.editor.fIterMax":"最大项数","flows.editor.fIterBody":"循环体(body 子图 JSON)","flows.editor.fIterBodyHint":"体约束:恰好一个 start + 一个 end;可用 {{#item.value/index/total#}} 与外层上游变量;体内不支持 await","flows.editor.dupHandle":"分支端口 '{v}' 重复","flows.editor.pickVariable":"选择变量","flows.editor.condValueHint":"自动识别类型;加引号('021')强制按字符串比较","flows.editor.nodeDescPlaceholder":"添加节点描述...","flows.editor.enlargeCode":"放大编辑","flows.editor.cancel":"取消","flows.editor.fullscreen":"全屏 / 退出全屏","flows.editor.exportFailed":"导出失败","flows.editor.fHostPerms":"宿主权限 (JSON)","flows.editor.zoomIn":"放大","flows.editor.zoomOut":"缩小","flows.editor.zoomFit":"适应视图","flows.editor.collapsePanel":"收起属性栏","flows.editor.expandPanel":"展开属性栏","flows.editor.autoMapInput":"自动映射上游输出为输入","flows.editor.jsonCopied":"JSON 已复制","flows.editor.failedToCopy":"复制失败","flows.editor.layoutTB":"从上到下排列","flows.editor.versions":"版本历史","flows.editor.rollback":"恢复此版本","flows.editor.restored":"已恢复(保存为新版本)","flows.editor.failedToRollback":"恢复版本失败","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.redemptionCodes":"激活码","layout.wallets":"钱包","layout.walletTransactions":"钱包流水","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.createdAt":"创建时间","wallets.updatedAt":"更新时间","wallets.details":"明细","wallets.allUsers":"全部用户","redemption.generate":"生成激活码","redemption.generateTitle":"生成激活码","redemption.generateFailed":"生成失败","redemption.targetUser":"指定用户","redemption.publicHint":"公共码(任意用户)","redemption.publicHintDesc":"留空生成公共码——谁兑换谁到账;选择用户则生成定向码,仅该用户可兑。","redemption.count":"张数(1-100)","redemption.generatedTitle":"激活码已生成","redemption.generatedOnce":"请立即复制保存——明文只显示这一次。","redemption.redeemedBy":"激活人","redemption.redeemedAt":"激活时间","redemption.copy":"复制激活码","redemption.activate":"激活","redemption.activateTitle":"激活到账","redemption.activateDesc":"将 {amount} {currency} 充入所选用户钱包,并将该码标记为已激活。","redemption.activateUserLabel":"到账用户","redemption.activateSuccess":"已激活,钱包已到账","redemption.activateFailed":"激活失败","redemption.disable":"禁用","redemption.enable":"启用","redemption.delete":"删除","redemption.deleteTitle":"确认删除该激活码?","redemption.deleteDesc":"输入完整激活码以确认。已激活的码不可删除。","redemption.code":"激活码","redemption.public":"公共码","redemption.expiresAt":"过期时间","redemption.expiresHint":"可选——过期后兑换码无法使用。","redemption.statusPending":"未激活","redemption.statusRedeemed":"已激活","redemption.statusDisabled":"已禁用","redemption.noCodes":"暂无激活码","redemption.noCodesDesc":"生成激活码给用户发放钱包余额。","redemption.disableSuccess":"已禁用","redemption.disableFailed":"禁用失败","redemption.enableSuccess":"已启用","redemption.enableFailed":"启用失败","redemption.deleteSuccess":"已删除","redemption.deleteFailed":"删除失败","wallets.all":"全部","wallets.llmUsage":"LLM 用量","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 长驻","llm.modelUnpriced":"未定价","llm.unpricedHint":"以下模型未定价,暂不可选:{models} —— 请先在「模型目录」配置定价(未定价模型中转也会拒绝)。","llm.modelPickerAll":"全部模型(不选即不限)","llm.modelPickerSearch":"搜索模型…","llm.modelPickerEmpty":"未找到模型","llm.tokenCreateDesc":"创建 sk- key,用于调用 OpenAI 兼容的 /v1 接口。","llm.newToken":"新建 API Key","llm.noTokens":"暂无 API Key","llm.noTokensDesc":"创建 sk- key 即可调用 OpenAI 兼容的 /v1 接口。","llm.tokenUpdated":"API Key 已更新","llm.tokenDeleted":"API Key 已删除","llm.confirmDeleteToken":"确定删除「{name}」?使用它的客户端将立即收到 401。","llm.failedToCreate":"创建失败","llm.copyFailed":"复制失败","llm.fRemainQuota":"额度上限","llm.quotaHint":"额度以美元计($1 = 1,000,000 quota)","llm.fAllowedModels":"模型白名单","llm.allowedModelsHint":"留空 = 全部模型;选项来自已启用渠道","llm.fGroup":"计费分组","llm.groupHint":"实付 = 价格 × 分组系数;在「分组倍率」里配置","llm.manageGroups":"分组倍率","llm.groupsDesc":"分组的售价系数:1.5 = 加价 50% 卖,0.8 = 八折。default 为默认分组。","llm.addGroup":"添加分组","llm.groupsSaved":"分组倍率已保存","llm.fAllowedIps":"IP 白名单","llm.allowedIpsHint":"支持 CIDR 或精确 IP,逗号/换行分隔;留空 = 不限","llm.fTokenEnabled":"启用","llm.fUnlimited":"不限额度","llm.unlimitedAdminOnly":"(仅管理员)","llm.colRemain":"剩余","llm.colUsed":"已用","llm.colExpiry":"过期","llm.colUser":"用户","llm.colCreatedAt":"创建时间","llm.colUpdatedAt":"修改时间","llm.colQuotaTotal":"额度","llm.fOwnerUser":"所属用户","llm.filterUser":"搜索用户…","llm.userPickerSearch":"搜索用户…","llm.userPickerEmpty":"未找到用户","llm.allModels":"全部模型","llm.keyOnceTitle":"API Key 已创建","llm.keyOnceDesc":"现在即可复制——之后也可以随时在下方列表中复制。","llmPlayground.token":"API Key","llmPlayground.selectToken":"选择 API Key","llmPlayground.noKey":"无 key","llmPlayground.tokenNotUsable":"该 key 当前状态为 {status},不可用于对话","llmPlayground.model":"模型","llmPlayground.selectModel":"选择模型","llmPlayground.noTokens":"请先在「API Keys」页创建一个 sk- key","llmPlayground.noModels":"暂无可用模型,请先在渠道中配置","llmPlayground.emptyConversation":"选择 key 与模型,发送第一条消息开始测试","llmPlayground.thinking":"思考过程","llmPlayground.waiting":"等待响应…","llmPlayground.busy":"回复生成中…","llmPlayground.inputPlaceholder":"输入消息,Enter 发送…","llmPlayground.stop":"停止","llmPlayground.clear":"清空对话","llmPlayground.turnFailed":"请求失败","layout.llm":"LLM","layout.llmChannels":"渠道管理","layout.llmModels":"模型目录","layout.llmLogs":"用量日志","layout.llmTokens":"API Keys","layout.llmPlayground":"对话测试","llm.newChannel":"新建渠道","llm.noChannels":"暂无 LLM 渠道","llm.noChannelsDesc":"添加上游服务商及其 API key,开始路由 LLM 流量。","llm.channelCreated":"渠道已创建","llm.channelUpdated":"渠道已更新","llm.channelDeleted":"渠道已删除","llm.confirmDeleteChannel":"确定删除渠道「{name}」?其 key 池与路由条目将一并移除。","llm.failedToSave":"保存失败","llm.failedToDelete":"删除失败","llm.fName":"名称","llm.fProvider":"服务商","llm.fBaseUrl":"Base URL","llm.fModels":"模型列表(逗号分隔)","llm.fTestModel":"测试模型","llm.testModelHint":"用于健康探活与渠道测试;留空则探测模型列表中的第一个模型。","llm.testModelNoDirHint":"用于健康探活与渠道测试;请先到模型目录注册模型。","llm.noDirectoryTitle":"模型目录为空","llm.noDirectoryHint":"在模型目录中注册并定价模型之前,该渠道不会转发任何流量。可以现在先建渠道,之后再补模型。","llm.goToModels":"前往模型目录 →","llm.fPriority":"优先级","llm.fKeyMode":"Key 轮转","llm.keyModePolling":"轮询","llm.keyModeRandom":"随机","llm.fAutoBan":"自动封禁","llm.fCostMode":"成本模式","llm.costModeUsage":"按量(折扣)","llm.costModeFixed":"订阅(月费)","llm.fCostDiscount":"成本折扣","llm.costDiscountHint":"实际进货价 = 目录价 × 折扣(0.8 = 八折拿货)","llm.fMonthlyCost":"月费(USD/账号)","llm.monthlyCostHint":"订阅上游固定成本,逐笔成本记 0,月底从固定池扣","llm.fInitialKeys":"初始 Key 池","llm.fMaxConcurrency":"并发上限","llm.addKey":"添加 Key","llm.keysWriteOnlyHint":"API key 通过 key 池管理(行菜单 → 管理 Key),此处不可编辑。","llm.colChannel":"渠道","llm.colPriority":"优先级","llm.colKeys":"Key 池","llm.colMaskedKey":"Key","llm.colMaxConcurrency":"并发","llm.keysSummary":"{total} 把 key 中 {active} 把可用","llm.manageKeys":"管理 Key","llm.testChannel":"连通性测试","llm.disableChannel":"停用","llm.enableChannel":"启用","llm.testOk":"{model} 响应 {ms}ms","llm.testFailed":"测试失败:{detail}","llm.disableKey":"禁用","llm.enableKey":"启用","llm.replacePool":"整体替换 Key 池","llm.replacePoolHint":"一次性替换全部 key。既有状态(禁用 key、并发上限)会丢失。","llm.replacePoolSubmit":"替换 Key 池","llm.keysReplaced":"Key 池已替换","llm.newModel":"新建模型","llm.noModels":"暂无模型目录","llm.noModelsDesc":"注册模型并配置定价。未注册的模型会被中转拒绝。","llm.modelCreated":"模型已创建","llm.modelUpdated":"模型已更新","llm.modelDeleted":"模型已删除","llm.confirmDeleteModel":"从目录删除模型「{name}」?之后中转将拒绝该模型。","llm.defaultsTitle":"默认模型","llm.defaultsDesc":"agent、flows、知识库未显式指定模型时使用,必须先在下方目录中注册。","llm.defaultChatModel":"默认对话模型","llm.defaultEmbeddingModel":"默认向量模型","llm.defaultEmbeddingHint":"向量模型必须设置维度(在模型参数的 dimension 中填写)。","llm.defaultNone":"未设置","llm.defaultsSaved":"默认模型已保存","llm.fModelName":"模型名","llm.fModelType":"类型","llm.fPriceMode":"计价模式","llm.priceModeToken":"按 token","llm.priceModePerCall":"按次","llm.fInputPrice":"输入价格($/1M tokens)","llm.inputPriceHint":"上游原价,留空按 0 计;用户实付 = 价格 × 分组系数","llm.fOutputPrice":"输出价格($/1M tokens)","llm.outputPriceHint":"上游原价","llm.fCacheReadPrice":"缓存读价格($/1M)","llm.cachePriceHint":"留空 = 同输入价","llm.fCacheWritePrice":"缓存写价格($/1M)","llm.cacheWritePriceHint":"留空 = 同输入价(Anthropic 通常 1.25× 输入)","llm.fParams":"模型参数","llm.fContextWindow":"上下文窗口 (tokens)","llm.fMaxOutputTokens":"单次输出上限","llm.fDimension":"Embedding 维度","llm.fCapabilities":"能力标签","llm.paramsHint":"供 agent 上下文截断与 kb 向量库构建读取;留空 = 不设。能力标签用于前端选择器过滤。","llm.fCompletionRatio":"补全倍率","llm.fCacheRatio":"缓存读倍率","llm.fCacheWriteRatio":"缓存写倍率","llm.fCallPrice":"单次价格(USD)","llm.callPriceHint":"按次全额预扣($1 = 1,000,000 quota)。","llm.statusActive":"启用","llm.statusDisabled":"停用","llm.colPricing":"定价","llm.filterModel":"按模型过滤","llm.filterToken":"按 token id 过滤","llm.filterChannelAll":"全部渠道","llm.applyFilter":"应用","llm.colTime":"时间","llm.colSource":"来源","llm.colTokens":"输入/输出","llm.colQuota":"收费","llm.colCost":"成本","llm.colProfit":"利润","llm.colRequests":"请求数","llm.colOutputTokens":"输出 token","llm.colPromptTokens":"输入 token","llm.colCompletionTokens":"输出 token","llm.statsTitle":"用量与利润统计","llm.groupByDay":"按日","llm.groupByModel":"按模型","llm.groupByUser":"按用户","llm.groupByChannel":"按渠道","llm.chartMoney":"收费 / 成本 / 利润","llm.chartTokens":"Token 用量","llm.noUsageData":"该时间段内暂无用量","llm.colStream":"流式","llm.colStatus":"状态","llm.colElapsed":"耗时","llm.noLogs":"暂无用量日志","llm.noLogsDesc":"中转与内部 LLM 调用会记录在这里。","layout.ai":"AI","layout.aiAgents":"Agent 管理","layout.aiPlayground":"对话调试","aiAgents.newAgent":"新建 Agent","aiAgents.noAgents":"还没有 Agent","aiAgents.emptyHint":"创建一个 Agent,配置模型与系统提示词后即可对话。","aiAgents.name":"名称","aiAgents.namePlaceholder":"例如:内容助手","aiAgents.nameImmutable":"名称创建后不可修改","aiAgents.provider":"Provider","aiAgents.providerHint":"OpenAI 兼容端点(含 DeepSeek/OpenRouter/Ollama)或 Anthropic","aiAgents.model":"模型","aiAgents.modelPlaceholder":"选择模型","modelSelect.placeholder":"选择模型","modelSelect.selectedCount":"已选 {count} 个","modelSelect.useDefault":"使用默认模型","modelSelect.selectAll":"全选","modelSelect.clearAll":"取消全选","modelSelect.type":"分类","modelSelect.channel":"渠道","modelSelect.model":"模型","aiAgents.channelPin":"钉死渠道","aiAgents.channelPinAuto":"自动路由(不钉死)","aiAgents.channelPinHint":"把该 agent 钉在一条上游渠道,便于成本可控。被钉渠道必须属于本租户且服务该模型;不做跨渠道 failover。","aiAgents.systemPrompt":"系统提示词","aiAgents.systemPromptPlaceholder":"你是一个乐于助人的助手……","aiAgents.tools":"工具白名单","aiAgents.allowAll":"全部允许","aiAgents.allowAllHint":"该 Agent 可调用服务端注册的所有域工具。","aiAgents.memoryToolsHint":"记忆工具(memory_store/recall/forget)始终可用,无需列入白名单。","aiAgents.customToolPlaceholder":"添加自定义工具名(如 MCP 工具)…","aiAgents.addTool":"添加","aiAgents.toolGroup.content":"内容","aiAgents.toolGroup.system":"系统","aiAgents.toolGroup.skills":"技能","aiAgents.toolGroup.script":"脚本","aiAgents.toolGroup.files":"文件","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"知识库","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"其它","aiAgents.kbBinding":"知识库绑定","aiAgents.kbEmpty":"暂无启用的知识库。","aiAgents.kbBindingHint":"必须逐一勾选要挂载的知识库;未勾选任何库时 knowledge_search 工具不会挂载。勾选 knowledge_search 工具后,agent 对话时可检索所勾选的知识库并引用来源;调用中传入的 kb_ids 只能在该范围内收窄。","aiAgents.memory":"长期记忆","aiAgents.memoryHint":"开启后每回合注入该 Agent 的核心记忆(按用户隔离)。","aiAgents.temperature":"温度","aiAgents.temperaturePlaceholder":"留空使用 provider 默认值","aiAgents.maxIterations":"回合上限","aiAgents.maxIterationsHint":"单次回合内引擎最大迭代次数(工具调用轮数)。","aiAgents.params":"扩展参数(JSON)","aiAgents.paramsInvalid":"JSON 格式无效","aiAgents.paramsHint":"skill_bundles 由上方「启用 Skills」控件管理,此处手写会被覆盖。","aiAgents.allTools":"全部","aiAgents.noTools":"无","aiAgents.updatedAt":"更新时间","aiAgents.usage":"用量","aiAgents.playground":"对话调试","aiAgents.created":"Agent 已创建","aiAgents.createFailed":"创建 Agent 失败","aiAgents.updated":"Agent 已更新","aiAgents.updateFailed":"更新 Agent 失败","aiAgents.deleted":"Agent 已删除","aiAgents.deleteFailed":"删除 Agent 失败","aiAgents.confirmDelete":"确定删除 {name}?其会话、消息与记忆将一并删除,且不可恢复。","aiUsage.totalTurns":"总回合数","aiUsage.inputTokens":"输入 Token","aiUsage.outputTokens":"输出 Token","aiUsage.cacheReadTokens":"缓存命中 Token","aiUsage.toolCalls":"工具调用","aiUsage.dailyTitle":"每日用量","aiUsage.noData":"该时间段内暂无用量","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"选择 Agent","aiPlayground.sessions":"会话","aiPlayground.sessionDeleted":"会话已删除","aiPlayground.sessionDeleteFailed":"删除会话失败","aiPlayground.deleteSessionDesc":"将删除该会话及其全部消息,此操作不可撤销。","aiPlayground.newSession":"新建会话","aiPlayground.noSessions":"暂无会话,发送第一条消息将自动创建。","aiPlayground.noAgents":"请先创建一个 Agent","aiPlayground.emptySession":"选择或新建一个会话开始对话","aiPlayground.thinking":"思考过程","aiPlayground.busy":"回合进行中…","aiPlayground.inputPlaceholder":"输入消息,Enter 发送…","aiPlayground.stop":"停止","aiPlayground.sessionFailed":"创建会话失败","aiPlayground.turnFailed":"回合执行失败","aiMemory.title":"记忆管理","aiMemory.searchPlaceholder":"搜索 key 或内容…","aiMemory.allCategories":"全部分类","aiMemory.add":"新增记忆","aiMemory.addTitle":"新增记忆","aiMemory.editTitle":"编辑记忆","aiMemory.dialogHint":"按 key 去重:同 (Agent, 用户, key) 已存在时将更新内容。","aiMemory.key":"键","aiMemory.keyImmutable":"key 是记忆的唯一标识,创建后不可修改","aiMemory.content":"内容","aiMemory.category":"分类","aiMemory.categoryHint":"core 参与注入与预算;daily 仅为日志,不注入","aiMemory.importance":"重要度","aiMemory.user":"用户","aiMemory.userOptional":"所属用户(可选)","aiMemory.userPlaceholder":"留空 = 平台级(对全部用户生效范围见记忆注入规则)","aiMemory.pinned":"固定(不被预算驱逐)","aiMemory.noMemories":"暂无记忆","aiMemory.emptyHint":"记忆由 agent 对话自动沉淀,也可在此手动添加。","aiMemory.saved":"记忆已保存","aiMemory.saveFailed":"保存记忆失败","aiMemory.deleted":"记忆已删除","aiMemory.deleteFailed":"删除记忆失败","aiMemory.confirmDelete":"确定删除记忆 {key}?该操作不可恢复。","layout.aiSkills":"Skills","layout.aiTools":"AI 工具","aiTools.title":"AI 工具目录","aiTools.tabBuiltin":"内置工具","aiTools.category":"分类","aiTools.nameDesc":"名称 / 描述","aiTools.usedByCol":"使用 agent 数","aiTools.desc":"后端注册的域工具目录(名称/描述/分类由后端定义),按分类分组。","aiTools.usedBy":"{count} 个 agent 在用","aiTools.empty":"暂无工具","aiTools.emptyDesc":"后端未注册任何域工具。","aiSkills.new":"新建 Skill","aiSkills.newTitle":"新建 Skill","aiSkills.editTitle":"编辑 Skill","aiSkills.dialogHint":"技能以 SKILL.md 存储(frontmatter + 正文),agent 通过启用清单引用。","aiSkills.name":"名称","aiSkills.nameHint":"目录名:字母/数字/-/_,最长 64 字符","aiSkills.layer":"层级","aiSkills.layerHint":"tenant = 仅当前租户可用;platform = 所有租户可用(同名时 platform 优先)","aiSkills.description":"描述","aiSkills.descriptionPlaceholder":"什么场景下应使用此技能(供模型发现)","aiSkills.instructions":"操作手册(Markdown)","aiSkills.tools":"组合工具","aiSkills.toolsPlaceholder":"输入工具名回车添加,如 list_posts","aiSkills.disallowedTools":"禁用工具","aiSkills.always":"始终内联全文","aiSkills.alwaysHint":"Compact 模式下也注入完整指令(默认仅元数据 + read_skill 按需加载)","aiSkills.noSkills":"还没有 Skill","aiSkills.emptyHint":"技能是带操作手册的 SKILL.md 目录,agent 启用后注入 system 提示。","aiSkills.saved":"Skill 已保存","aiSkills.saveFailed":"保存 Skill 失败","aiSkills.deleted":"Skill 已删除","aiSkills.deleteFailed":"删除 Skill 失败","aiSkills.confirmDelete":"确定删除 Skill {name}?整个技能目录(含 scripts/资源)都会被删除。","aiSkills.bundles":"启用 Skills","aiSkills.bundlesAllHint":"该 Agent 启用作用域内全部技能。","aiSkills.bundlesEmpty":"暂无可用技能,请先到 Skills 页创建。","aiSkills.bundlesHint":"勾选注入该 Agent system 提示的技能;每回合重扫目录,改动下回合生效。","layout.aiSessions":"对话","layout.aiDebates":"需求评审辩论","aiAgents.reviewerBadge":"评审组件","aiSessions.title":"标题","aiSessions.agent":"Agent","aiSessions.user":"用户","aiSessions.messages":"消息数","aiSessions.lastActive":"最近活跃","aiSessions.allAgents":"全部 Agent","aiSessions.allStatuses":"全部状态","aiSessions.noSessions":"暂无对话","aiSessions.emptyHint":"用户在 agent 会话中发起回合后,会话会出现在这里。","aiSessions.untitled":"(未命名)","aiSessions.view":"查看消息","aiSessions.noMessages":"该会话暂无消息","aiSessions.deleted":"会话已删除","aiSessions.deleteFailed":"删除会话失败","aiSessions.confirmDelete":"确定删除对话「{title}」?其全部消息将一并删除(记忆按 agent 保留),不可恢复。","aiDebates.title":"需求评审辩论","aiDebates.subtitle":"提案方 A 与评审员 B 围绕分歧台账对需求进行辩论;僵局升级人工判决。","aiDebates.new":"发起辩论","aiDebates.proposer":"提案方(agent A)","aiDebates.reviewer":"评审员(agent B)","aiDebates.requirement":"需求","aiDebates.requirementPlaceholder":"描述需要评审的需求……","aiDebates.maxRounds":"最大轮数","aiDebates.start":"开始辩论","aiDebates.started":"辩论已启动","aiDebates.startFailed":"启动失败","aiDebates.status":"状态","aiDebates.rounds":"轮数","aiDebates.disputes":"分歧","aiDebates.created":"创建时间","aiDebates.actions":"操作","aiDebates.view":"查看","aiDebates.cancel":"取消辩论","aiDebates.cancelled":"辩论已取消","aiDebates.cancelFailed":"取消失败","aiDebates.report":"升级报告","aiDebates.ledger":"分歧台账","aiDebates.noDebates":"还没有辩论","aiDebates.emptyHint":"提交一份需求即可开始——A 起草、B 质询、僵局交由你判决。","aiDebates.verdicts":"人工判决","aiDebates.verdictHint":"对每条待判分歧作出裁决;全部判完后 A 产出终版需求。","aiDebates.sideA":"支持 A","aiDebates.sideB":"支持 B","aiDebates.custom":"自定义","aiDebates.resolution":"自定义裁决内容","aiDebates.note":"备注(可选)","aiDebates.submitVerdicts":"提交判决","aiDebates.verdictsSubmitted":"判决已记录","aiDebates.verdictsFailed":"判决提交失败","aiDebates.noReport":"无报告——辩论未升级。","aiDebates.consensus":"已达成共识——无需人工判决。","layout.kb":"知识库","layout.kbDocs":"文档","layout.kbChunks":"分块","layout.kbImages":"图片","layout.kbChunker":"切块预览","layout.kbPlayground":"问答测试","layout.kbWiki":"知识页","layout.kbFaqs":"FAQ","layout.kbGaps":"知识缺口","layout.kbDiagnostics":"诊断","kb.new":"新建知识库","kb.noKb":"还没有知识库","kb.noKbDesc":"创建第一个知识库后即可上传文档。","kb.deleteKb":"删除知识库","kb.confirmDeleteKb":"删除知识库「{name}」?其中所有文档、切块、FAQ、Wiki 页面、向量/全文索引和原始文件都会被永久删除,不可恢复。","kb.kbDeleted":"知识库已删除(含全部内容与索引)","kb.viewChunks":"查看分块","kb.reparseAction":"重新处理","kb.thinking":"思考中…","kb.viewFullRef":"查看全文","kb.distillWiki":"生成 Wiki","kb.distillWikiHint":"后台 LLM 任务:从所选文档蒸馏知识页草稿,完成后出现在列表中等待人工审核发布。","kb.noReadyDocs":"该知识库没有就绪状态的文档","kb.distillQueued":"Wiki 生成任务已加入队列({count} 个文档)","kb.distillSubmit":"生成 Wiki({count})","kb.editChunk":"编辑分块","kb.editChunkHint":"保存后自动重新向量化和重建索引。","kb.confirmDeleteChunk":"删除该分块?其向量/全文索引将一并移除;删除父块会级联删除其子块,不可恢复。","kb.chunkUpdated":"分块已更新(已重建索引)","kb.chunkDeleted":"分块已删除(含索引)","kb.updatedAt":"更新时间","kb.jobHistory":"处理记录","kb.jobAttempts":"尝试次数","kb.noJobs":"暂无处理记录","kb.updated":"知识库已更新","kb.created":"知识库已创建","kb.vectorBackend":"向量后端","kb.enabledOn":"已启用","kb.enabledOff":"未启用","kb.slug":"Slug","kb.kindDoc":"文档库(可含 Wiki)","kb.kindFaq":"FAQ 库","kb.selectKb":"请选择知识库","kb.selectKbDesc":"从上方选择或先到「知识库」页创建。","kb.selectPlaceholder":"选择知识库","kb.allKbs":"全部知识库","kb.allDocs":"全部文档","kb.progress":"进度","kb.partialParsed":"部分解析","kb.pagesCol":"页数","kb.imagesCol":"图片","kb.pageCol":"页","kb.parseEngine":"解析引擎","kb.parseEngineBuiltin":"内置(零依赖保底)","kb.parseEngineDocreader":"docreader 解析服务(PDF 图片/扫描件高保真)","kb.parseEngineMineru":"MinerU(PDF 版面/公式/表格)","kb.parseEngineHint":"PDF 图片、扫描件、版面保真需要 docreader 服务;未配置服务端地址时选了也会自动回落内置","kb.noImages":"暂无图片","kb.noImagesDesc":"上传带图文档并启用识别后,这里会列出抽取的图片。","kb.recognition":"识别内容","kb.imagePreview":"预览","kb.imageCaption":"图片描述","kb.imageOcr":"OCR 文本","kb.imageStatus.pending":"待识别","kb.imageStatus.done":"已识别","kb.imageStatus.failed":"失败","kb.imageStatus.skipped":"跳过","kb.createdAtCol":"添加时间","kb.imagePreviewUnavailable":"图片暂不可用(外链失效或字节缺失)","kb.imageThumb":"缩略图","kb.imageContent":"内容","kb.zoomIn":"放大","kb.zoomOut":"缩小","kb.zoomReset":"重置","kb.reader":"阅读视图","kb.readerEmpty":"该文档没有可展示的解析块","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"页码未知","kb.upload":"上传文档","kb.uploadOk":"已上传,解析排队中","kb.uploadFailed":"上传失败","kb.online":"在线录入","kb.onlineOk":"已录入,处理中","kb.onlineFailed":"录入失败","kb.noDocs":"暂无文档","kb.noDocsDesc":"上传文件或在线录入 Markdown。","kb.source":"来源","common.search":"搜索","layout.kbSearchTest":"检索测试","kb.searchTest.vectorTab":"向量召回","kb.searchTest.bm25Tab":"关键字召回","kb.searchTest.selectKb":"选择知识库","kb.searchTest.queryPlaceholder":"输入查询内容…","kb.searchTest.queryFirst":"输入查询并点击搜索,验证两条检索链路各自的召回结果","kb.searchTest.selectKbFirst":"先选择一个知识库","kb.searchTest.empty":"没有命中","kb.searchTest.score":"分数","kb.searchTest.kind":"类型","kb.searchTest.doc":"文档","kb.searchTest.preview":"内容","kb.searchTest.grams":"查询词元","kb.searchTest.keywords":"块关键字","kb.searchTest.ghostHint":"存在 SQL 中已不存在的幽灵命中(索引未清理)","kb.parserEngineCol":"解析引擎","kb.parserDefault":"默认","kb.imageRecogCol":"图片识别","kb.imageRecogOn":"已开启","kb.imageRecogOff":"未开启","layout.docparse":"文档解析","layout.docparseEngines":"引擎管理","layout.docparseTokens":"API 令牌","layout.docparseConvert":"转换测试","layout.docparseRecognize":"识别测试","layout.docparseUsage":"用量报表","docparse.engineName":"引擎","docparse.category":"分类","docparse.categoryDocument":"文档解析","docparse.categoryOcr":"图像 OCR","docparse.enabled":"启用","docparse.pricePerPage":"每页价格","docparse.pricePerCall":"每次价格","docparse.costPerPage":"每页成本","docparse.registered":"已注册","docparse.notRegistered":"未注册","docparse.updatedAt":"更新时间","docparse.editEngine":"编辑引擎","docparse.editEngineDesc":"更新「{name}」的定价,金额单位为分。","docparse.engineUpdated":"引擎已更新","docparse.noEngines":"暂无引擎","docparse.failedToSave":"保存失败","docparse.newToken":"新建令牌","docparse.owner":"所有者","docparse.ownerPlaceholder":"留空 = 当前管理员","docparse.ownerHint":"令牌归属的用户;留空默认为当前管理员。","docparse.tokenCreated":"令牌已创建","docparse.tokenName":"令牌名称","docparse.tokenPrefix":"前缀","docparse.quota":"配额","docparse.quotaHint":"每日页数配额,0 表示不限制","docparse.tokenCreateDesc":"供第三方调用文档解析服务的 API 令牌。","docparse.noTokens":"暂无令牌","docparse.noTokensDesc":"创建令牌后,第三方即可调用解析 API。","docparse.confirmDeleteToken":"删除令牌「{name}」?使用它的第三方将立即失去访问权限,且不可恢复。","docparse.tokenDeleted":"令牌已删除","docparse.createdAt":"创建时间","docparse.failedToCreate":"创建失败","docparse.convertHint":"上传文档文件,可选择解析引擎,获取 markdown 输出。","docparse.file":"文件","docparse.engineAuto":"默认引擎","docparse.extractImages":"提取图片","docparse.parse":"解析","docparse.jobSubmitted":"任务已提交","docparse.jobRunning":"运行中…","docparse.jobFailed":"任务失败","docparse.newJob":"新建任务","docparse.pages":"页数","docparse.images":"图片","docparse.failedToSubmit":"提交失败","docparse.recognizeHint":"上传图片,经默认视觉模型识别,获取 caption 和 OCR 文本。","docparse.image":"图片","docparse.prompt":"提示词","docparse.promptPlaceholder":"可选自定义提示词","docparse.recognize":"识别","docparse.caption":"描述","docparse.noUsage":"暂无用量数据","docparse.kind":"类型","docparse.chars":"字符数","docparse.durationMs":"耗时(ms)","kb.noChunks":"暂无分块","kb.noChunksDesc":"父块/子块结构,点击行查看完整内容","kb.breadcrumb":"分块","kb.embedded":"已向量化","kb.notEmbedded":"未向量化","kb.bytes":"字节","kb.vectorCol":"向量","kb.backToDocs":"返回文档列表","kb.chunkCount":"切块数","kb.reparse":"已重新处理","kb.reparseFailed":"重处理失败","kb.confirmDelete":"删除文档「{title}」?将永久删除其切块、向量/全文索引和原始文件,不可恢复。","kb.deleted":"已删除(含索引)","kb.mdTitle":"标题","kb.mdContent":"内容(Markdown,# 标题用于切块)","kb.status.pending":"等待中","kb.status.parsing":"解析中","kb.status.chunking":"切块中","kb.status.indexing":"建索引中","kb.status.embedding":"嵌入中","kb.status.ready":"就绪","kb.status.failed":"失败","kb.status.stale":"已过期","kb.sample":"样例 Markdown(≤64KB,只读预览,不落库)","kb.runPreview":"运行预览","kb.running":"切块中…","kb.parent":"父块","kb.child":"子块","kb.parents":"父块","kb.children":"子块","kb.total":"共","kb.chars":"字符","kb.askLabel":"问题(单轮;空范围 = 全部启用库)","kb.stream":"流式(SSE)","kb.ask":"提问","kb.stop":"停止","kb.references":"引用","kb.wikiNoPages":"暂无知识页","kb.wikiNoPagesDesc":"对 ready 文档发起蒸馏后,草稿页会出现在这里待审。","kb.publish":"发布(入池检索)","kb.approveOk":"已发布并入池","kb.reject":"拒绝并归档","kb.rejected":"已归档","kb.saveOk":"已保存(已发布页自动重建索引)","kb.noVersions":"暂无历史版本(首发未覆盖旧内容)。","kb.diffCurrent":"对比当前","kb.rollback":"回滚","kb.rollbackOk":"已回滚(回滚前内容已存为新版本)","kb.diffTitle":"行级对比(红=删除,绿=新增)","kb.newFaq":"新建 FAQ","kb.faqCreated":"已创建并入池","kb.stdQuestion":"标准问题","kb.similarCount":"相似问","kb.hits":"命中","kb.toggleOk":"已切换(联动索引)","kb.similarLabel":"相似问(每行一个,可选)","kb.answersLabel":"答案(每行一条,可多条)","kb.noFaqs":"暂无 FAQ","kb.noFaqsDesc":"手动创建,或到「知识缺口」页一键起草。","kb.gapsIntro":"未覆盖(或负反馈)问题的聚合清单——起草后进入 FAQ 页人工审核启用。","kb.diag.allKinds":"全部类型","kb.diag.allStatuses":"全部状态","kb.diag.docFilter":"按文档 ID 筛选","kb.diag.total":"共 {n} 条","kb.diag.noRuns":"暂无运行记录","kb.diag.noRunsDesc":"知识库链路每次执行(处理/问答/检索等)都会在此留下记录。","kb.traceToggle":"诊断","kb.tracePanel":"管线追踪","kb.logId":"日志 ID","kb.diag.runs":"运行记录","kb.diag.checkup":"体检","kb.diag.health":"健康","kb.diag.checkupIntro":"按需扫描一致性规则(10 秒缓存)。","kb.diag.healthIntro":"组件健康;默认探测零成本。","kb.diag.embedProbe":"Embed 冒烟探测","kb.diag.r1":"事件丢失(pending 无任务)","kb.diag.r2":"中间态僵死","kb.diag.r3":"失败文档","kb.diag.r4":"半成品(缺嵌入)","kb.diag.r5":"向量漂移","kb.diag.r6":"KB 死信任务","kb.diag.r7":"僵死运行记录","kb.diag.kind":"类型","kb.diag.status":"状态","kb.diag.trigger":"来源","kb.diag.attempt":"尝试","kb.diag.latency":"耗时","kb.diag.error":"错误","kb.diag.created":"时间","kb.diag.prev":"上一页","kb.diag.next":"下一页","kb.diag.detail":"运行详情","kb.diag.agent":"Agent","kb.diag.session":"会话","kb.diag.configSnapshot":"配置快照","kb.diag.stages":"阶段记录","kb.diag.noStages":"无阶段记录","kb.noGaps":"没有知识缺口","kb.noGapsDesc":"所有提问都被知识库覆盖。","kb.freq":"频次","kb.draftFaq":"起草 FAQ","kb.drafted":"已起草 FAQ(未启用)——到「FAQ」页人审启用","kb.docsPage":"文档","kb.title":"标题","kb.versions":"版本","kb.edit":"编辑","kb.operations":"操作","kb.state":"状态","kb.allStatus":"全部状态","kb.type":"类型","kb.embeddingModel":"嵌入模型","kb.embeddingDim":"向量维度","kb.modelHint":"创建后不可修改(缺省用全局默认)","kb.modelCol":"模型","kb.modelRequired":"必填:请输入或配置全局默认(RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"重排模型","kb.rerankModelOptional":"可选:缺省用全局默认(未配置则关闭重排)","kb.rerankWindow":"重排窗口","kb.rerankThreshold":"重排阈值","kb.rerankInherit":"继承全局默认","kb.rerankHint":"窗口/阈值留空继承全局默认(RAISFAST_KB_RERANK_*);清空模型即回落全局默认,模型未配置时 S5 直通","kb.rerankInvalid":"窗口须为正整数,阈值须在 0–1 之间","kb.chatModel":"生成模型","kb.chatModelOptional":"可选:缺省用全局默认(RAISFAST_KB_CHAT_MODEL)→ 租户默认","kb.chatModelHint":"S9 答案生成所用模型;清空即回落全局默认","kb.distillModel":"蒸馏模型","kb.distillModelOptional":"可选:缺省用全局默认(RAISFAST_KB_DISTILL_MODEL)→ 租户默认","kb.distillModelHint":"wiki 蒸馏(主题抽取+起草)所用模型;清空即回落全局默认","kb.imageRecognition":"图片识别","kb.imageModel":"识别模型","kb.imageModelOptional":"选带 vision 能力的模型;缺省用全局默认(RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"描述语言","kb.imageLanguagePlaceholder":"如 zh / en,留空跟随文档语言","kb.imageInstructions":"自定义指令","kb.imageInstructionsPlaceholder":"对图片解读的额外要求(可选)","kb.imageHint":"开启后文档图片经 VLM 生成描述与文字提取,识别结果可被检索","kb.descPlaceholder":"描述这个知识库的用途(可选)","jobs.attempts":"尝试次数","jobs.runAfter":"计划执行","jobs.updatedAt":"更新时间","jobs.error":"错误","jobs.id":"ID","jobs.payload":"载荷","jobs.noJobs":"暂无任务","jobs.noJobsDesc":"后台任务队列当前没有记录。","jobs.cleanup":"清理旧任务","jobs.cleanupDesc":"删除 7 天前已完成或已死亡(completed/dead)的任务记录,此操作不可撤销。","jobs.cleanupDone":"已清理 {n} 条任务记录","jobs.confirmDelete":"删除任务 {type}?该记录将从队列中移除。","jobs.retried":"任务已重新入队","jobs.deleted":"任务已删除","jobs.cancelTask":"取消","jobs.confirmCancel":"取消任务 {type}?正在运行的任务会被终止。","jobs.cancelled":"任务已取消","jobs.actionFailed":"操作失败","apps.app":"应用","apps.appId":"应用 ID","apps.version":"版本","apps.source":"来源","apps.tenantScope":"租户范围","apps.installedAt":"安装时间","apps.updatedAt":"更新时间","apps.steps":"步骤","apps.listHint":"安装并管理应用包(.rafapp)。","apps.noApps":"暂无已安装应用","apps.installFirst":"安装你的第一个应用包。","apps.installApp":"安装应用","apps.backToApps":"返回应用列表","apps.general":"基本信息","apps.installOptions":"安装选项","apps.installOptionsHint":"安装应用时记录的选择项。","apps.lastError":"最近错误","apps.default":"默认","apps.statusInstalling":"安装中","apps.statusInstalled":"已安装","apps.statusEnabled":"已启用","apps.statusDisabled":"已禁用","apps.statusUninstalling":"卸载中","apps.statusRolledBack":"已回滚","apps.appEnabled":"应用已启用","apps.appDisabled":"应用已禁用","apps.appUninstalled":"应用已卸载","apps.failedToEnable":"启用应用失败","apps.failedToDisable":"禁用应用失败","apps.failedToUninstall":"卸载应用失败","apps.uninstallTitle":"卸载应用","apps.uninstallConfirm":'卸载 "{appId}" 并回滚它创建的所有内容?',"apps.keepData":"保留数据","apps.keepDataHint":"保留应用的数据表和数据,重装时可重新接管。","apps.notFoundMsg":"未找到该应用。","apps.installTitle":"安装应用","apps.installHint":"上传应用包(.rafapp),运行预检,然后确认安装。","apps.packageFile":"应用包文件","apps.packageHint":"由 `raisfast app pack` 生成的 .rafapp 包。","apps.checking":"检查中…","apps.runPrecheck":"运行预检","apps.confirmInstall":"确认安装","apps.installing":"安装中…","apps.precheckFailed":"预检失败","apps.precheckReport":"预检报告","apps.precheckPassed":"没有阻塞性冲突 —— 可以安装。","apps.precheckBlocked":"存在阻塞性冲突 —— 不允许安装。","apps.noConflicts":"未检测到冲突。","apps.blockingConflicts":"阻塞性冲突","apps.warnings":"警告","apps.reattachTables":"重新接管的数据表","apps.reattachHint":"上次卸载保留数据的残留表将被本应用重新接管。","apps.installOk":"应用已安装","apps.installFailed":"安装失败并已回滚","apps.pendingCredentials":"待配置凭据","apps.pendingCredentialsHint":"需要先配置这些凭据,应用才能运行。","apps.noPendingCredentials":"无","apps.viewApp":"查看应用","apps.installAnother":"继续安装","apps.installLog":"安装日志","apps.installLogHint":"每个物化步骤的补偿日志。","apps.noInstallLog":"暂无安装步骤记录。"},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.jobs":"ジョブキュー","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.listView":"リスト表示","common.cardView":"カード表示","common.view":"表示","common.back":"戻る","common.actions":"操作","common.status":"ステータス","common.retry":"再試行","common.previous":"前へ","common.next":"次へ","common.pageOf":"{total}ページ中{page}ページ目","common.noData":"データがありません","common.refresh":"更新","common.all":"すべて","common.draft":"下書き","common.published":"公開済み","common.active":"アクティブ","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 対応","layout.ai":"AI","layout.aiAgents":"エージェント管理","layout.aiPlayground":"チャットデバッグ","aiAgents.newAgent":"新規エージェント","aiAgents.noAgents":"エージェントがありません","aiAgents.emptyHint":"エージェントを作成し、モデルとシステムプロンプトを設定すると会話できます。","aiAgents.name":"名前","aiAgents.namePlaceholder":"例:コンテンツアシスタント","aiAgents.nameImmutable":"名前は作成後に変更できません","aiAgents.provider":"プロバイダー","aiAgents.providerHint":"OpenAI 互換エンドポイント(DeepSeek/OpenRouter/Ollama)または Anthropic","aiAgents.model":"モデル","aiAgents.systemPrompt":"システムプロンプト","aiAgents.systemPromptPlaceholder":"あなたは親切なアシスタントです…","aiAgents.tools":"ツール許可リスト","aiAgents.allowAll":"すべて許可","aiAgents.allowAllHint":"サーバーに登録されたすべてのドメインツールを呼び出せます。","aiAgents.memoryToolsHint":"メモリツール(memory_store/recall/forget)は常に利用可能で、許可リストへの記載は不要です。","aiAgents.customToolPlaceholder":"カスタムツール名を追加(MCP ツールなど)…","aiAgents.addTool":"追加","aiAgents.toolGroup.content":"コンテンツ","aiAgents.toolGroup.system":"システム","aiAgents.toolGroup.skills":"スキル","aiAgents.toolGroup.script":"スクリプト","aiAgents.toolGroup.files":"ファイル","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"ナレッジ","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"その他","aiAgents.kbBinding":"ナレッジベース連携","aiAgents.kbEmpty":"有効なナレッジベースがありません。","aiAgents.kbBindingHint":"マウントするナレッジベースを個別に選択する必要があります。何も選択しない場合、knowledge_search ツールはマウントされません。ツールを有効にすると、エージェントは選択したナレッジベースを会話中に検索し、出典を引用します。呼び出し時の kb_ids はこの範囲を絞り込むのみです。","aiAgents.memory":"長期メモリ","aiAgents.memoryHint":"有効にすると、毎ターンこのエージェントのコアメモリを注入します(ユーザー単位で隔離)。","aiAgents.temperature":"温度","aiAgents.temperaturePlaceholder":"空欄でプロバイダーの既定値","aiAgents.maxIterations":"最大イテレーション","aiAgents.maxIterationsHint":"1 ターンあたりのエンジンの最大反復数(ツール呼び出しラウンド)。","aiAgents.params":"拡張パラメータ(JSON)","aiAgents.paramsInvalid":"JSON が不正です","aiAgents.paramsHint":"skill_bundles は上の「有効な Skills」コントロールで管理され、ここに手入力しても上書きされます。","aiAgents.allTools":"すべて","aiAgents.noTools":"なし","aiAgents.updatedAt":"更新日時","aiAgents.usage":"使用量","aiAgents.playground":"チャットデバッグ","aiAgents.created":"エージェントを作成しました","aiAgents.createFailed":"エージェントの作成に失敗しました","aiAgents.updated":"エージェントを更新しました","aiAgents.updateFailed":"エージェントの更新に失敗しました","aiAgents.deleted":"エージェントを削除しました","aiAgents.deleteFailed":"エージェントの削除に失敗しました","aiAgents.confirmDelete":"{name} を削除しますか?セッション・メッセージ・メモリも完全に削除されます。","aiUsage.totalTurns":"総ターン数","aiUsage.inputTokens":"入力トークン","aiUsage.outputTokens":"出力トークン","aiUsage.cacheReadTokens":"キャッシュヒットトークン","aiUsage.toolCalls":"ツール呼び出し","aiUsage.dailyTitle":"日別使用量","aiUsage.noData":"この期間の使用量はありません","aiPlayground.agent":"エージェント","aiPlayground.selectAgent":"エージェントを選択","aiPlayground.sessions":"セッション","aiPlayground.sessionDeleted":"セッションを削除しました","aiPlayground.sessionDeleteFailed":"セッションの削除に失敗しました","aiPlayground.deleteSessionDesc":"セッションとそのメッセージがすべて削除されます。この操作は元に戻せません。","aiPlayground.newSession":"新規セッション","aiPlayground.noSessions":"セッションがありません。メッセージを送信すると自動作成されます。","aiPlayground.noAgents":"先にエージェントを作成してください","aiPlayground.emptySession":"セッションを選択または作成して会話を開始","aiPlayground.thinking":"思考プロセス","aiPlayground.busy":"ターン実行中…","aiPlayground.inputPlaceholder":"メッセージを入力して Enter…","aiPlayground.stop":"停止","aiPlayground.sessionFailed":"セッションの作成に失敗しました","aiPlayground.turnFailed":"ターンの実行に失敗しました","aiMemory.title":"メモリ管理","aiMemory.searchPlaceholder":"キーまたは内容を検索…","aiMemory.allCategories":"すべてのカテゴリ","aiMemory.add":"メモリを追加","aiMemory.addTitle":"メモリを追加","aiMemory.editTitle":"メモリを編集","aiMemory.dialogHint":"キーで重複排除:同 (エージェント, ユーザー, キー) の既存行は内容が更新されます。","aiMemory.key":"キー","aiMemory.keyImmutable":"キーはメモリの一意な識別子で、作成後は変更できません","aiMemory.content":"内容","aiMemory.category":"カテゴリ","aiMemory.categoryHint":"core は注入と予算管理の対象、daily はログのみで注入されません","aiMemory.importance":"重要度","aiMemory.user":"ユーザー","aiMemory.userOptional":"所有ユーザー(任意)","aiMemory.userPlaceholder":"空欄 = プラットフォームレベル","aiMemory.pinned":"ピン留め(予算による削除から保護)","aiMemory.noMemories":"メモリがありません","aiMemory.emptyHint":"メモリはエージェントの会話から蓄積されます。手動追加も可能です。","aiMemory.saved":"メモリを保存しました","aiMemory.saveFailed":"メモリの保存に失敗しました","aiMemory.deleted":"メモリを削除しました","aiMemory.deleteFailed":"メモリの削除に失敗しました","aiMemory.confirmDelete":"メモリ {key} を削除しますか?元に戻せません。","layout.aiSkills":"Skills","layout.aiTools":"AI ツール","aiTools.title":"AI ツールカタログ","aiTools.tabBuiltin":"内蔵ツール","aiTools.category":"カテゴリ","aiTools.nameDesc":"名前 / 説明","aiTools.usedByCol":"使用エージェント数","aiTools.desc":"バックエンド登録のドメインツールカタログ(名前/説明/カテゴリはバックエンド定義)、カテゴリ別にグループ化。","aiTools.usedBy":"{count} 個のエージェントが使用中","aiTools.empty":"ツールなし","aiTools.emptyDesc":"バックエンドにドメインツールが登録されていません。","aiSkills.new":"新規 Skill","aiSkills.newTitle":"新規 Skill","aiSkills.editTitle":"Skill を編集","aiSkills.dialogHint":"スキルは SKILL.md(frontmatter + 本文)として保存され、エージェントの有効化リストから参照されます。","aiSkills.name":"名前","aiSkills.nameHint":"ディレクトリ名:英数字/-/_、最大 64 文字","aiSkills.layer":"レイヤー","aiSkills.layerHint":"tenant = 現在のテナントのみ、platform = 全テナント(同名時は platform 優先)","aiSkills.description":"説明","aiSkills.descriptionPlaceholder":"このスキルをいつ使うか(モデルの発見用)","aiSkills.instructions":"手順書(Markdown)","aiSkills.tools":"合成ツール","aiSkills.toolsPlaceholder":"ツール名を入力して Enter、例: list_posts","aiSkills.disallowedTools":"無効化ツール","aiSkills.always":"常時全文インライン","aiSkills.alwaysHint":"Compact モードでも全文を注入(既定はメタデータ + read_skill のオンデマンド読込)","aiSkills.noSkills":"スキルがありません","aiSkills.emptyHint":"スキルは手順書付きの SKILL.md ディレクトリで、有効化時に system プロンプトへ注入されます。","aiSkills.saved":"スキルを保存しました","aiSkills.saveFailed":"スキルの保存に失敗しました","aiSkills.deleted":"スキルを削除しました","aiSkills.deleteFailed":"スキルの削除に失敗しました","aiSkills.confirmDelete":"スキル {name} を削除しますか?ディレクトリ全体(scripts/アセット含む)が削除されます。","aiSkills.bundles":"有効な Skills","aiSkills.bundlesAllHint":"このエージェントはスコープ内の全スキルを有効化します。","aiSkills.bundlesEmpty":"利用可能なスキルがありません。先に Skills ページで作成してください。","aiSkills.bundlesHint":"このエージェントの system プロンプトに注入するスキルを選択。ディレクトリは毎ターン再スキャンされます。","layout.aiSessions":"会話","aiSessions.title":"タイトル","aiSessions.agent":"エージェント","aiSessions.user":"ユーザー","aiSessions.messages":"メッセージ数","aiSessions.lastActive":"最終アクティブ","aiSessions.allAgents":"すべてのエージェント","aiSessions.allStatuses":"すべてのステータス","aiSessions.noSessions":"会話がありません","aiSessions.emptyHint":"ユーザーがエージェントセッションでターンを開始すると、ここに表示されます。","aiSessions.untitled":"(無題)","aiSessions.view":"メッセージを表示","aiSessions.noMessages":"このセッションにメッセージはありません","aiSessions.deleted":"会話を削除しました","aiSessions.deleteFailed":"会話の削除に失敗しました","aiSessions.confirmDelete":"会話「{title}」を削除しますか?全メッセージが削除され(メモリはエージェント単位で保持)、元に戻せません。","layout.kb":"ナレッジベース","layout.kbDocs":"ドキュメント","layout.kbChunks":"チャンク","layout.kbImages":"画像","layout.kbChunker":"チャンクプレビュー","layout.kbPlayground":"Q&Aテスト","layout.kbWiki":"ナレッジページ","layout.kbFaqs":"FAQ","layout.kbGaps":"ナレッジギャップ","layout.kbDiagnostics":"診断","kb.new":"新規ナレッジベース","kb.noKb":"ナレッジベースがありません","kb.noKbDesc":"作成するとドキュメントをアップロードできます。","kb.deleteKb":"ナレッジベースを削除","kb.confirmDeleteKb":"ナレッジベース「{name}」を削除しますか?すべてのドキュメント、チャンク、FAQ、Wiki ページ、ベクトル/全文索引、元ファイルが完全に削除されます。","kb.kbDeleted":"ナレッジベースを削除しました(内容と索引を含む)","kb.viewChunks":"チャンクを表示","kb.reparseAction":"再処理","kb.thinking":"思考中…","kb.viewFullRef":"全文を見る","kb.distillWiki":"Wiki を生成","kb.distillWikiHint":"バックグラウンド LLM タスク:選択したドキュメントから Wiki ページのドラフトを蒸留します。完了後、リストでレビューして公開してください。","kb.noReadyDocs":"このナレッジベースに準備完了のドキュメントはありません","kb.distillQueued":"Wiki 生成タスクをキューに入れました({count} 件)","kb.distillSubmit":"Wiki を生成({count})","kb.editChunk":"チャンクを編集","kb.editChunkHint":"保存すると自動的に再ベクトル化・再索引されます。","kb.confirmDeleteChunk":"このチャンクを削除しますか?ベクトル/全文索引も削除されます。親チャンクの場合は子チャンクも削除されます。","kb.chunkUpdated":"チャンクを更新しました(索引再構築)","kb.chunkDeleted":"チャンクを削除しました(索引含む)","kb.updatedAt":"更新日時","kb.jobHistory":"処理履歴","kb.jobAttempts":"試行回数","kb.noJobs":"処理履歴はありません","kb.updated":"ナレッジベースを更新しました","kb.created":"ナレッジベースを作成しました","kb.vectorBackend":"ベクトルバックエンド","kb.enabledOn":"有効","kb.enabledOff":"無効","kb.slug":"スラッグ","kb.kindDoc":"ドキュメント(Wiki 含む)","kb.kindFaq":"FAQ","kb.selectKb":"ナレッジベースを選択","kb.selectKbDesc":"上で選択、またはナレッジベースページで作成してください。","kb.selectPlaceholder":"ナレッジベースを選択","kb.allKbs":"すべてのナレッジベース","kb.allDocs":"すべてのドキュメント","kb.progress":"進捗","kb.partialParsed":"部分解析","kb.pagesCol":"ページ","kb.imagesCol":"画像","kb.pageCol":"頁","kb.parseEngine":"解析エンジン","kb.parseEngineBuiltin":"内蔵(ゼロ依存)","kb.parseEngineDocreader":"docreader サービス(PDF 画像/スキャン高精細)","kb.parseEngineHint":"PDF の画像・スキャン・レイアウト再現には docreader サービスが必要。未設定の場合は内蔵へ自動フォールバック","kb.noImages":"画像なし","kb.noImagesDesc":"認識を有効にすると、ドキュメントから抽出した画像がここに表示されます。","kb.recognition":"認識内容","kb.imagePreview":"プレビュー","kb.imageCaption":"キャプション","kb.imageOcr":"OCR テキスト","kb.imageStatus.pending":"待機中","kb.imageStatus.done":"認識済み","kb.imageStatus.failed":"失敗","kb.imageStatus.skipped":"スキップ","kb.createdAtCol":"作成日時","kb.imagePreviewUnavailable":"プレビューできません","kb.imageThumb":"サムネイル","kb.imageContent":"内容","kb.zoomIn":"拡大","kb.zoomOut":"縮小","kb.zoomReset":"リセット","kb.reader":"読み取りビュー","kb.readerEmpty":"表示できる解析ブロックがありません","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"ページ不明","kb.upload":"ドキュメントをアップロード","kb.uploadOk":"アップロード完了、解析待ち","kb.uploadFailed":"アップロード失敗","kb.online":"オンライン入力","kb.onlineOk":"送信完了、処理中","kb.onlineFailed":"送信失敗","kb.noDocs":"ドキュメントがありません","kb.noDocsDesc":"ファイルをアップロードまたは Markdown を入力。","kb.source":"ソース","kb.noChunks":"チャンクはありません","kb.noChunksDesc":"親/子チャンク — クリックで全文表示","kb.breadcrumb":"チャンク","kb.embedded":"ベクトル化済み","kb.notEmbedded":"未ベクトル化","kb.bytes":"バイト","kb.vectorCol":"ベクトル","kb.backToDocs":"ドキュメント一覧へ戻る","kb.chunkCount":"チャンク数","kb.reparse":"再処理しました","kb.reparseFailed":"再処理失敗","kb.confirmDelete":"ドキュメント「{title}」を削除しますか?チャンク、ベクトル/全文索引、元ファイルが完全に削除されます。","kb.deleted":"削除完了(索引含む)","kb.mdTitle":"タイトル","kb.mdContent":"内容(Markdown、# 見出しで分割)","kb.status.pending":"待機中","kb.status.parsing":"解析中","kb.status.chunking":"チャンク中","kb.status.indexing":"索引中","kb.status.embedding":"埋め込み中","kb.status.ready":"準備完了","kb.status.failed":"失敗","kb.status.stale":"期限切れ","kb.sample":"サンプル Markdown(≤64KB、読み取り専用)","kb.runPreview":"プレビュー実行","kb.running":"分割中…","kb.parent":"親チャンク","kb.child":"子チャンク","kb.parents":"親","kb.children":"子","kb.total":"合計","kb.chars":"文字","kb.askLabel":"質問(単発、未指定なら全ライブラリ)","kb.stream":"ストリーミング(SSE)","kb.ask":"質問","kb.stop":"停止","kb.references":"引用","kb.wikiNoPages":"ナレッジページがありません","kb.wikiNoPagesDesc":"ready ドキュメントを蒸留すると草稿がここに表示されます。","kb.publish":"公開(検索に反映)","kb.approveOk":"公開しインデックスしました","kb.reject":"却下してアーカイブ","kb.rejected":"アーカイブしました","kb.saveOk":"保存しました(公開済みは自動再インデックス)","kb.noVersions":"バージョンはまだありません。","kb.diffCurrent":"現在と比較","kb.rollback":"ロールバック","kb.rollbackOk":"ロールバックしました(旧内容は新バージョンとして保存)","kb.diffTitle":"行比較(赤=削除、緑=追加)","kb.newFaq":"新規 FAQ","kb.faqCreated":"作成しインデックスしました","kb.stdQuestion":"標準質問","kb.similarCount":"類似質問","kb.hits":"ヒット","kb.toggleOk":"切り替えました(索引連動)","kb.similarLabel":"類似質問(1 行 1 つ、任意)","kb.answersLabel":"回答(1 行 1 つ、複数可)","kb.noFaqs":"FAQ がありません","kb.noFaqsDesc":"手動作成、またはナレッジギャップから起草。","kb.gapsIntro":"未カバー質問の集計 — 起草後 FAQ ページで人間審査。","kb.diag.allKinds":"全種類","kb.diag.allStatuses":"全ステータス","kb.diag.docFilter":"ドキュメントIDで絞り込み","kb.diag.total":"{n} 件","kb.diag.noRuns":"実行記録はまだありません","kb.diag.noRunsDesc":"KBパイプラインの各実行(取り込み・質問・検索など)はここに記録されます。","kb.traceToggle":"診断","kb.tracePanel":"パイプライン追跡","kb.logId":"ログ ID","kb.diag.runs":"実行記録","kb.diag.checkup":"健診","kb.diag.health":"健康状態","kb.diag.checkupIntro":"オンデマンド整合性スキャン(10 秒キャッシュ)。","kb.diag.healthIntro":"コンポーネント健全性。既定プローブは無コスト。","kb.diag.embedProbe":"Embed スモークプローブ","kb.diag.r1":"イベント消失(ジョブなし pending)","kb.diag.r2":"中間状態の停滞","kb.diag.r3":"失敗ドキュメント","kb.diag.r4":"不完全(埋め込み欠落)","kb.diag.r5":"ベクトル乖離","kb.diag.r6":"KB デッドジョブ","kb.diag.r7":"停滞実行","kb.diag.kind":"種類","kb.diag.status":"ステータス","kb.diag.trigger":"起源","kb.diag.attempt":"試行","kb.diag.latency":"レイテンシ","kb.diag.error":"エラー","kb.diag.created":"時刻","kb.diag.prev":"前へ","kb.diag.next":"次へ","kb.diag.detail":"実行詳細","kb.diag.agent":"エージェント","kb.diag.session":"セッション","kb.diag.configSnapshot":"設定スナップショット","kb.diag.stages":"ステージ記録","kb.diag.noStages":"ステージ記録なし","kb.noGaps":"ギャップはありません","kb.noGapsDesc":"すべての質問はカバーされています。","kb.freq":"回数","kb.draftFaq":"FAQ を起草","kb.drafted":"FAQ を起草しました(無効)— FAQ ページで審査","kb.docsPage":"ドキュメント","kb.title":"タイトル","kb.versions":"バージョン","kb.edit":"編集","kb.operations":"操作","kb.state":"状態","kb.allStatus":"すべて","kb.type":"タイプ","kb.embeddingModel":"埋め込みモデル","kb.embeddingDim":"ベクトル次元","kb.modelHint":"作成後は変更不可(空欄ならグローバル既定)","kb.modelCol":"モデル","kb.modelRequired":"必須:入力するかグローバル既定(RAISFAST_AI_EMBEDDING_MODEL/_DIM)を設定してください","kb.rerankModel":"リランキングモデル","kb.rerankModelOptional":"任意:空欄ならグローバル既定(未設定ならリランキング無効)","kb.rerankWindow":"リランキングウィンドウ","kb.rerankThreshold":"リランキングしきい値","kb.rerankInherit":"グローバル既定を継承","kb.rerankHint":"ウィンドウ/しきい値の空欄はグローバル既定(RAISFAST_KB_RERANK_*)を継承;モデル未設定時は S5 パススルー","kb.rerankInvalid":"ウィンドウは正の整数、しきい値は 0–1 の範囲で指定してください","kb.chatModel":"生成モデル","kb.chatModelOptional":"任意:グローバル既定(RAISFAST_KB_CHAT_MODEL)→ テナント既定","kb.chatModelHint":"S9 の回答生成に使うモデル。空欄でグローバル既定に戻る","kb.distillModel":"蒸留モデル","kb.distillModelOptional":"任意:グローバル既定(RAISFAST_KB_DISTILL_MODEL)→ テナント既定","kb.distillModelHint":"wiki 蒸留(トピック抽出と起草)に使うモデル。空欄でグローバル既定に戻る","kb.imageRecognition":"画像認識","kb.imageModel":"認識モデル","kb.imageModelOptional":"vision 対応モデルを選択。空欄ならグローバル既定(RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"説明言語","kb.imageLanguagePlaceholder":"例: zh / ja。空欄は文書の言語に従う","kb.imageInstructions":"カスタム指示","kb.imageInstructionsPlaceholder":"画像解釈への追加指示(任意)","kb.imageHint":"有効化すると文档画像に VLM のキャプション + OCR を生成し、検索可能になります","kb.descPlaceholder":"このナレッジベースの用途(任意)","jobs.attempts":"試行回数","jobs.runAfter":"実行予定","jobs.updatedAt":"更新日時","jobs.error":"エラー","jobs.id":"ID","jobs.payload":"ペイロード","jobs.noJobs":"ジョブなし","jobs.noJobsDesc":"バックグラウンドジョブキューにレコードがありません。","jobs.cleanup":"クリーンアップ","jobs.cleanupDesc":"7 日より前の完了/失敗済み(completed/dead)ジョブを削除します。この操作は元に戻せません。","jobs.cleanupDone":"{n} 件のジョブを削除しました","jobs.confirmDelete":"ジョブ {type} を削除しますか?キューから削除されます。","jobs.retried":"ジョブを再登録しました","jobs.deleted":"ジョブを削除しました","jobs.actionFailed":"操作に失敗しました"},BC={"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.jobs":"작업 큐","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.listView":"목록 보기","common.cardView":"카드 보기","common.view":"보기","common.back":"뒤로","common.actions":"작업","common.status":"상태","common.retry":"재시도","common.previous":"이전","common.next":"다음","common.pageOf":"{total}페이지 중 {page}페이지","common.noData":"데이터 없음","common.refresh":"새로 고침","common.all":"전체","common.draft":"임시저장","common.published":"게시됨","common.active":"활성","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 지원","layout.ai":"AI","layout.aiAgents":"에이전트 관리","layout.aiPlayground":"채팅 디버그","aiAgents.newAgent":"새 에이전트","aiAgents.noAgents":"에이전트가 없습니다","aiAgents.emptyHint":"에이전트를 만들고 모델과 시스템 프롬프트를 구성하면 대화할 수 있습니다.","aiAgents.name":"이름","aiAgents.namePlaceholder":"예: 콘텐츠 어시스턴트","aiAgents.nameImmutable":"이름은 생성 후 변경할 수 없습니다","aiAgents.provider":"공급자","aiAgents.providerHint":"OpenAI 호환 엔드포인트(DeepSeek/OpenRouter/Ollama) 또는 Anthropic","aiAgents.model":"모델","aiAgents.systemPrompt":"시스템 프롬프트","aiAgents.systemPromptPlaceholder":"당신은 도움이 되는 어시스턴트입니다…","aiAgents.tools":"도구 허용 목록","aiAgents.allowAll":"모두 허용","aiAgents.allowAllHint":"서버에 등록된 모든 도메인 도구를 호출할 수 있습니다.","aiAgents.memoryToolsHint":"메모리 도구(memory_store/recall/forget)는 항상 사용 가능하며 허용 목록에 넣을 필요가 없습니다.","aiAgents.customToolPlaceholder":"커스텀 도구 이름 추가(MCP 도구 등)…","aiAgents.addTool":"추가","aiAgents.toolGroup.content":"콘텐츠","aiAgents.toolGroup.system":"시스템","aiAgents.toolGroup.skills":"스킬","aiAgents.toolGroup.script":"스크립트","aiAgents.toolGroup.files":"파일","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"지식","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"기타","aiAgents.kbBinding":"지식 베이스 연결","aiAgents.kbEmpty":"활성화된 지식 베이스가 없습니다.","aiAgents.kbBindingHint":"마운트할 지식 베이스를 하나씩 개별 선택해야 합니다. 아무것도 선택하지 않으면 knowledge_search 도구가 마운트되지 않습니다. 도구를 활성화하면 에이전트가 선택한 지식 베이스를 대화 중 검색하고 출처를 인용합니다. 호출 시의 kb_ids는 이 범위 내에서만 좁힐 수 있습니다.","aiAgents.memory":"장기 기억","aiAgents.memoryHint":"활성화하면 매 턴 이 에이전트의 핵심 기억을 주입합니다(사용자별 격리).","aiAgents.temperature":"온도","aiAgents.temperaturePlaceholder":"비우면 공급자 기본값","aiAgents.maxIterations":"최대 반복","aiAgents.maxIterationsHint":"턴당 엔진 최대 반복 횟수(도구 호출 라운드).","aiAgents.params":"확장 매개변수(JSON)","aiAgents.paramsInvalid":"JSON 형식이 잘못되었습니다","aiAgents.paramsHint":"skill_bundles는 위의 «활성화된 Skills» 컨트롤에서 관리되며 여기 직접 입력한 값은 덮어써집니다.","aiAgents.allTools":"전체","aiAgents.noTools":"없음","aiAgents.updatedAt":"수정 시간","aiAgents.usage":"사용량","aiAgents.playground":"채팅 디버그","aiAgents.created":"에이전트가 생성되었습니다","aiAgents.createFailed":"에이전트 생성 실패","aiAgents.updated":"에이전트가 업데이트되었습니다","aiAgents.updateFailed":"에이전트 업데이트 실패","aiAgents.deleted":"에이전트가 삭제되었습니다","aiAgents.deleteFailed":"에이전트 삭제 실패","aiAgents.confirmDelete":"{name}을(를) 삭제하시겠습니까? 세션·메시지·기억도 영구 삭제됩니다.","aiUsage.totalTurns":"총 턴 수","aiUsage.inputTokens":"입력 토큰","aiUsage.outputTokens":"출력 토큰","aiUsage.cacheReadTokens":"캐시 적중 토큰","aiUsage.toolCalls":"도구 호출","aiUsage.dailyTitle":"일별 사용량","aiUsage.noData":"해당 기간 사용량 없음","aiPlayground.agent":"에이전트","aiPlayground.selectAgent":"에이전트 선택","aiPlayground.sessions":"세션","aiPlayground.sessionDeleted":"세션이 삭제되었습니다","aiPlayground.sessionDeleteFailed":"세션 삭제 실패","aiPlayground.deleteSessionDesc":"세션과 모든 메시지가 삭제됩니다. 되돌릴 수 없습니다.","aiPlayground.newSession":"새 세션","aiPlayground.noSessions":"세션이 없습니다. 메시지를 보내면 자동 생성됩니다.","aiPlayground.noAgents":"먼저 에이전트를 만드세요","aiPlayground.emptySession":"세션을 선택하거나 만들어 대화를 시작하세요","aiPlayground.thinking":"사고 과정","aiPlayground.busy":"턴 진행 중…","aiPlayground.inputPlaceholder":"메시지를 입력하고 Enter…","aiPlayground.stop":"중지","aiPlayground.sessionFailed":"세션 생성 실패","aiPlayground.turnFailed":"턴 실행 실패","aiMemory.title":"메모리 관리","aiMemory.searchPlaceholder":"키 또는 내용 검색…","aiMemory.allCategories":"전체 카테고리","aiMemory.add":"메모리 추가","aiMemory.addTitle":"메모리 추가","aiMemory.editTitle":"메모리 편집","aiMemory.dialogHint":"키로 중복 제거: 동일한 (에이전트, 사용자, 키) 행이 있으면 내용이 업데이트됩니다.","aiMemory.key":"키","aiMemory.keyImmutable":"키는 메모리의 고유 식별자이며 생성 후 변경할 수 없습니다","aiMemory.content":"내용","aiMemory.category":"카테고리","aiMemory.categoryHint":"core는 주입 및 예산 관리 대상, daily는 로그 전용으로 주입되지 않습니다","aiMemory.importance":"중요도","aiMemory.user":"사용자","aiMemory.userOptional":"소유 사용자(선택)","aiMemory.userPlaceholder":"비우면 플랫폼 수준","aiMemory.pinned":"고정(예산 제거에서 제외)","aiMemory.noMemories":"메모리가 없습니다","aiMemory.emptyHint":"메모리는 에이전트 대화에서 축적되며 직접 추가할 수도 있습니다.","aiMemory.saved":"메모리가 저장되었습니다","aiMemory.saveFailed":"메모리 저장 실패","aiMemory.deleted":"메모리가 삭제되었습니다","aiMemory.deleteFailed":"메모리 삭제 실패","aiMemory.confirmDelete":"메모리 {key}을(를) 삭제하시겠습니까? 되돌릴 수 없습니다.","layout.aiSkills":"Skills","layout.aiTools":"AI 도구","aiTools.title":"AI 도구 카탈로그","aiTools.tabBuiltin":"내장 도구","aiTools.category":"분류","aiTools.nameDesc":"이름 / 설명","aiTools.usedByCol":"사용 에이전트 수","aiTools.desc":"백엔드 등록 도메인 도구 카탈로그(이름/설명/카테고리는 백엔드 정의), 카테고리별 그룹화.","aiTools.usedBy":"{count}개 에이전트 사용 중","aiTools.empty":"도구 없음","aiTools.emptyDesc":"백엔드에 등록된 도메인 도구가 없습니다.","aiSkills.new":"새 Skill","aiSkills.newTitle":"새 Skill","aiSkills.editTitle":"Skill 편집","aiSkills.dialogHint":"스킬은 SKILL.md(frontmatter + 본문)로 저장되며 에이전트의 활성화 목록에서 참조됩니다.","aiSkills.name":"이름","aiSkills.nameHint":"디렉터리 이름: 영숫자/-/_, 최대 64자","aiSkills.layer":"레이어","aiSkills.layerHint":"tenant = 현재 테넌트 전용, platform = 모든 테넌트(동명 시 platform 우선)","aiSkills.description":"설명","aiSkills.descriptionPlaceholder":"이 스킬을 언제 사용할지(모델 발견용)","aiSkills.instructions":"지침서(Markdown)","aiSkills.tools":"구성 도구","aiSkills.toolsPlaceholder":"도구 이름 입력 후 Enter, 예: list_posts","aiSkills.disallowedTools":"비활성 도구","aiSkills.always":"항상 전체 인라인","aiSkills.alwaysHint":"Compact 모드에서도 전체 지침을 주입(기본값은 메타데이터 + read_skill 주문 로딩)","aiSkills.noSkills":"스킬이 없습니다","aiSkills.emptyHint":"스킬은 지침서가 포함된 SKILL.md 디렉터리이며, 활성화되면 system 프롬프트에 주입됩니다.","aiSkills.saved":"스킬이 저장되었습니다","aiSkills.saveFailed":"스킬 저장 실패","aiSkills.deleted":"스킬이 삭제되었습니다","aiSkills.deleteFailed":"스킬 삭제 실패","aiSkills.confirmDelete":"스킬 {name}을(를) 삭제하시겠습니까? 디렉터리 전체(scripts/에셋 포함)가 삭제됩니다.","aiSkills.bundles":"활성화된 Skills","aiSkills.bundlesAllHint":"이 에이전트는 범위 내 모든 스킬을 활성화합니다.","aiSkills.bundlesEmpty":"사용 가능한 스킬이 없습니다. 먼저 Skills 페이지에서 만드세요.","aiSkills.bundlesHint":"이 에이전트의 system 프롬프트에 주입할 스킬을 선택하세요. 디렉터리는 매 턴 다시 스캔됩니다.","layout.aiSessions":"대화","aiSessions.title":"제목","aiSessions.agent":"에이전트","aiSessions.user":"사용자","aiSessions.messages":"메시지 수","aiSessions.lastActive":"최근 활동","aiSessions.allAgents":"전체 에이전트","aiSessions.allStatuses":"전체 상태","aiSessions.noSessions":"대화가 없습니다","aiSessions.emptyHint":"사용자가 에이전트 세션에서 턴을 시작하면 여기에 표시됩니다.","aiSessions.untitled":"(제목 없음)","aiSessions.view":"메시지 보기","aiSessions.noMessages":"이 세션에 메시지가 없습니다","aiSessions.deleted":"대화가 삭제되었습니다","aiSessions.deleteFailed":"대화 삭제 실패","aiSessions.confirmDelete":'대화 "{title}"을(를) 삭제하시겠습니까? 모든 메시지가 삭제되고(메모리는 에이전트 단위로 유지) 되돌릴 수 없습니다.',"layout.kb":"지식 베이스","layout.kbDocs":"문서","layout.kbChunks":"청크","layout.kbImages":"이미지","layout.kbChunker":"청크 미리보기","layout.kbPlayground":"질의 응답 테스트","layout.kbWiki":"지식 페이지","layout.kbFaqs":"FAQ","layout.kbGaps":"지식 격차","layout.kbDiagnostics":"진단","kb.new":"새 지식 베이스","kb.noKb":"지식 베이스가 없습니다","kb.noKbDesc":"생성 후 문서를 업로드할 수 있습니다.","kb.deleteKb":"지식 베이스 삭제","kb.confirmDeleteKb":'지식 베이스 "{name}"을(를) 삭제할까요? 모든 문서, 청크, FAQ, 위키 페이지, 벡터/전문 색인, 원본 파일이 영구 삭제됩니다.',"kb.kbDeleted":"지식 베이스 삭제됨(콘텐츠 및 색인 포함)","kb.viewChunks":"청크 보기","kb.reparseAction":"재처리","kb.thinking":"생각 중…","kb.viewFullRef":"전문 보기","kb.distillWiki":"Wiki 생성","kb.distillWikiHint":"백그라운드 LLM 작업: 선택한 문서에서 Wiki 페이지 초안을 증류합니다. 완료 후 목록에서 검토하고 게시하세요.","kb.noReadyDocs":"이 지식 베이스에 준비 완료 상태의 문서가 없습니다","kb.distillQueued":"Wiki 생성 작업이 대기열에 추가되었습니다({count}개)","kb.distillSubmit":"Wiki 생성({count})","kb.editChunk":"청크 편집","kb.editChunkHint":"저장하면 자동으로 재벡터화 및 재색인됩니다.","kb.confirmDeleteChunk":"이 청크를 삭제할까요? 벡터/전문 색인도 함께 제거되며, 부모 청크 삭제 시 하위 청크도 삭제됩니다.","kb.chunkUpdated":"청크 업데이트됨(재색인)","kb.chunkDeleted":"청크 삭제됨(색인 포함)","kb.updatedAt":"갱신 시간","kb.jobHistory":"처리 기록","kb.jobAttempts":"시도 횟수","kb.noJobs":"처리 기록 없음","kb.updated":"지식 베이스가 업데이트되었습니다","kb.created":"지식 베이스가 생성되었습니다","kb.vectorBackend":"벡터 백엔드","kb.enabledOn":"활성화","kb.enabledOff":"비활성화","kb.slug":"슬러그","kb.kindDoc":"문서(위키 포함)","kb.kindFaq":"FAQ","kb.selectKb":"지식 베이스 선택","kb.selectKbDesc":"위에서 선택하거나 지식 베이스 페이지에서 생성하세요.","kb.selectPlaceholder":"지식 베이스 선택","kb.allKbs":"전체 지식 베이스","kb.allDocs":"전체 문서","kb.progress":"진행 상황","kb.partialParsed":"부분 파싱","kb.pagesCol":"페이지","kb.imagesCol":"이미지","kb.pageCol":"쪽","kb.parseEngine":"파싱 엔진","kb.parseEngineBuiltin":"내장(제로 의존성)","kb.parseEngineDocreader":"docreader 서비스(PDF 이미지/스캔 고정밀)","kb.parseEngineHint":"PDF 이미지·스캔·레이아웃 충실도는 docreader 서비스가 필요. URL 미설정 시 내장으로 자동 폴백","kb.noImages":"이미지 없음","kb.noImagesDesc":"인식을 활성화하면 문서에서 추출한 이미지가 여기에 표시됩니다.","kb.recognition":"인식 내용","kb.imagePreview":"미리보기","kb.imageCaption":"캡션","kb.imageOcr":"OCR 텍스트","kb.imageStatus.pending":"대기 중","kb.imageStatus.done":"인식됨","kb.imageStatus.failed":"실패","kb.imageStatus.skipped":"건너뜀","kb.createdAtCol":"생성","kb.imagePreviewUnavailable":"미리보기를 사용할 수 없습니다","kb.imageThumb":"썸네일","kb.imageContent":"내용","kb.zoomIn":"확대","kb.zoomOut":"축소","kb.zoomReset":"재설정","kb.reader":"읽기 보기","kb.readerEmpty":"표시할 파싱 블록이 없습니다","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"페이지 알 수 없음","kb.upload":"문서 업로드","kb.uploadOk":"업로드됨, 파싱 대기 중","kb.uploadFailed":"업로드 실크드","kb.online":"온라인 입력","kb.onlineOk":"제출됨, 처리 중","kb.onlineFailed":"제출 실패","kb.noDocs":"문서가 없습니다","kb.noDocsDesc":"파일 업로드 또는 Markdown 입력.","kb.source":"출처","kb.noChunks":"청크 없음","kb.noChunksDesc":"부모/자식 청크 — 클릭하면 전체 내용 표시","kb.breadcrumb":"청크","kb.embedded":"벡터화됨","kb.notEmbedded":"미벡터화","kb.bytes":"바이트","kb.vectorCol":"벡터","kb.backToDocs":"문서 목록으로 돌아가기","kb.chunkCount":"청크 수","kb.reparse":"재처리됨","kb.reparseFailed":"재처리 실패","kb.confirmDelete":'문서 "{title}"을(를) 삭제할까요? 청크, 벡터/전문 색인, 원본 파일이 영구 삭제됩니다.',"kb.deleted":"삭제됨(인덱스 포함)","kb.mdTitle":"제목","kb.mdContent":"내용(Markdown, # 제목 기준 분할)","kb.status.pending":"대기 중","kb.status.parsing":"파싱 중","kb.status.chunking":"청크 중","kb.status.indexing":"인덱싱 중","kb.status.embedding":"임베딩 중","kb.status.ready":"준비됨","kb.status.failed":"실패","kb.status.stale":"오래됨","kb.sample":"샘플 Markdown(≤64KB, 읽기 전용)","kb.runPreview":"미리보기 실행","kb.running":"청크 중…","kb.parent":"부모 청크","kb.child":"자식 청크","kb.parents":"부모","kb.children":"자식","kb.total":"총","kb.chars":"자","kb.askLabel":"질문(단일 턴, 미지정 시 전체)","kb.stream":"스트리밍(SSE)","kb.ask":"질문","kb.stop":"정지","kb.references":"참조","kb.wikiNoPages":"지식 페이지가 없습니다","kb.wikiNoPagesDesc":"ready 문서를 증류하면 초안이 여기 표시됩니다.","kb.publish":"게시(검색 반영)","kb.approveOk":"게시되고 인덱싱됨","kb.reject":"거절하고 보관","kb.rejected":"보관됨","kb.saveOk":"저장됨(게시됨 페이지 자동 재인덱싱)","kb.noVersions":"버전이 없습니다.","kb.diffCurrent":"현재와 비교","kb.rollback":"롤백","kb.rollbackOk":"롤백됨(이전 내용은 새 버전으로 저장)","kb.diffTitle":"행 비교(빨강=삭제, 초록=추가)","kb.newFaq":"새 FAQ","kb.faqCreated":"생성되고 인덱싱됨","kb.stdQuestion":"표준 질문","kb.similarCount":"유사 질문","kb.hits":"히트","kb.toggleOk":"전환됨(인덱스 연동)","kb.similarLabel":"유사 질문(한 줄에 하나, 선택)","kb.answersLabel":"답변(한 줄에 하나, 여러 개 가능)","kb.noFaqs":"FAQ가 없습니다","kb.noFaqsDesc":"수동 생성 또는 지식 격차에서 초안.","kb.gapsIntro":"커버되지 않은 질문 집계 — 초안은 FAQ 검토 후 활성화.","kb.diag.allKinds":"전체 유형","kb.diag.allStatuses":"전체 상태","kb.diag.docFilter":"문서 ID로 필터","kb.diag.total":"{n}건","kb.diag.noRuns":"실행 기록이 없습니다","kb.diag.noRunsDesc":"KB 파이프라인의 모든 실행(수집/질의/검색 등)이 여기 기록됩니다.","kb.traceToggle":"진단","kb.tracePanel":"파이프라인 추적","kb.logId":"로그 ID","kb.diag.runs":"실행 기록","kb.diag.checkup":"점검","kb.diag.health":"상태","kb.diag.checkupIntro":"온디맨드 일관성 스캔(10초 캐시).","kb.diag.healthIntro":"구성 요소 상태. 기본 프로브는 무비용.","kb.diag.embedProbe":"Embed 스모크 프로브","kb.diag.r1":"이벤트 유실(작업 없는 pending)","kb.diag.r2":"중간 상태 정체","kb.diag.r3":"실패 문서","kb.diag.r4":"불완전(임베딩 누락)","kb.diag.r5":"벡터 불일치","kb.diag.r6":"KB 데드 작업","kb.diag.r7":"정체 실행","kb.diag.kind":"유형","kb.diag.status":"상태","kb.diag.trigger":"출처","kb.diag.attempt":"시도","kb.diag.latency":"지연","kb.diag.error":"오류","kb.diag.created":"시각","kb.diag.prev":"이전","kb.diag.next":"다음","kb.diag.detail":"실행 상세","kb.diag.agent":"에이전트","kb.diag.session":"세션","kb.diag.configSnapshot":"구성 스냅샷","kb.diag.stages":"단계 기록","kb.diag.noStages":"단계 기록 없음","kb.noGaps":"격차가 없습니다","kb.noGapsDesc":"모든 질문이 커버됩니다.","kb.freq":"빈도","kb.draftFaq":"FAQ 초안","kb.drafted":"FAQ 초안 작성됨(비활성) — FAQ 페이지에서 검토","kb.docsPage":"문서","kb.title":"제목","kb.versions":"버전","kb.edit":"편집","kb.operations":"작업","kb.state":"상태","kb.allStatus":"전체","kb.type":"유형","kb.embeddingModel":"임베딩 모델","kb.embeddingDim":"벡터 차원","kb.modelHint":"생성 후 변경 불가(비우면 전역 기본값)","kb.modelCol":"모델","kb.modelRequired":"필수: 입력하거나 전역 기본값(RAISFAST_AI_EMBEDDING_MODEL/_DIM)을 설정하세요","kb.rerankModel":"리랭크 모델","kb.rerankModelOptional":"선택: 비워 두면 전역 기본값 사용(미설정 시 리랭크 비활성)","kb.rerankWindow":"리랭크 윈도우","kb.rerankThreshold":"리랭크 임계값","kb.rerankInherit":"전역 기본값 상속","kb.rerankHint":"윈도우/임계값을 비우면 전역 기본값(RAISFAST_KB_RERANK_*)을 상속; 모델 미설정 시 S5 통과","kb.rerankInvalid":"윈도우는 양의 정수, 임계값은 0–1 사이여야 합니다","kb.chatModel":"생성 모델","kb.chatModelOptional":"선택: 전역 기본값(RAISFAST_KB_CHAT_MODEL) → 테넌트 기본값","kb.chatModelHint":"S9 답변 생성에 사용하는 모델. 비우면 전역 기본값으로 돌아감","kb.distillModel":"증류 모델","kb.distillModelOptional":"선택: 전역 기본값(RAISFAST_KB_DISTILL_MODEL) → 테넌트 기본값","kb.distillModelHint":"wiki 증류(주제 추출+초안)에 사용하는 모델. 비우면 전역 기본값으로 돌아감","kb.imageRecognition":"이미지 인식","kb.imageModel":"인식 모델","kb.imageModelOptional":"vision 지원 모델 선택. 비워 두면 전역 기본값(RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"설명 언어","kb.imageLanguagePlaceholder":"예: zh / ko. 비우면 문서 언어","kb.imageInstructions":"사용자 지정 지침","kb.imageInstructionsPlaceholder":" 이미지 해석에 대한 추가 지침(선택)","kb.imageHint":"활성화하면 문서 이미지에 VLM 캡션 + OCR이 생성되어 검색 가능","kb.descPlaceholder":"이 지식 베이스의 용도(선택)","jobs.attempts":"시도 횟수","jobs.runAfter":"예약 실행","jobs.updatedAt":"업데이트","jobs.error":"오류","jobs.id":"ID","jobs.payload":"페이로드","jobs.noJobs":"작업 없음","jobs.noJobsDesc":"백그라운드 작업 큐가 비어 있습니다.","jobs.cleanup":"정리","jobs.cleanupDesc":"7일 이전의 완료/실패(completed/dead) 작업을 삭제합니다. 되돌릴 수 없습니다.","jobs.cleanupDone":"{n}개의 작업을 정리했습니다","jobs.confirmDelete":"작업 {type}을(를) 삭제하시겠습니까? 큐에서 제거됩니다.","jobs.retried":"작업이 다시 대기열에 등록되었습니다","jobs.deleted":"작업이 삭제되었습니다","jobs.actionFailed":"작업 실패"},VC={"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.jobs":"Cola de tareas","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.listView":"Vista de lista","common.cardView":"Vista de tarjetas","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.refresh":"Actualizar","common.all":"Todos","common.draft":"Borrador","common.published":"Publicado","common.active":"Activo","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","layout.ai":"IA","layout.aiAgents":"Agentes","layout.aiPlayground":"Depuración de chat","aiAgents.newAgent":"Nuevo agente","aiAgents.noAgents":"Aún no hay agentes","aiAgents.emptyHint":"Crea un agente, configura su modelo y prompt del sistema, y comienza a chatear.","aiAgents.name":"Nombre","aiAgents.namePlaceholder":"p. ej. Asistente de contenido","aiAgents.nameImmutable":"El nombre no se puede cambiar tras crearlo","aiAgents.provider":"Proveedor","aiAgents.providerHint":"Endpoint compatible con OpenAI (DeepSeek/OpenRouter/Ollama) o Anthropic","aiAgents.model":"Modelo","aiAgents.systemPrompt":"Prompt del sistema","aiAgents.systemPromptPlaceholder":"Eres un asistente útil…","aiAgents.tools":"Lista de herramientas permitidas","aiAgents.allowAll":"Permitir todas","aiAgents.allowAllHint":"Este agente puede llamar a todas las herramientas de dominio registradas en el servidor.","aiAgents.memoryToolsHint":"Las herramientas de memoria (memory_store/recall/forget) siempre están disponibles y no requieren estar en la lista.","aiAgents.customToolPlaceholder":"Añadir herramienta personalizada (p. ej. MCP)…","aiAgents.addTool":"Añadir","aiAgents.toolGroup.content":"Contenido","aiAgents.toolGroup.system":"Sistema","aiAgents.toolGroup.skills":"Habilidades","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Archivos","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Conocimiento","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Otros","aiAgents.kbBinding":"Bases de conocimiento","aiAgents.kbEmpty":"No hay bases de conocimiento activas.","aiAgents.kbBindingHint":"Seleccione individualmente cada base de conocimiento a montar; sin ninguna seleccionada, la herramienta knowledge_search no se monta. Con la herramienta habilitada, el agente busca en las bases seleccionadas y cita fuentes; los kb_ids en llamadas solo pueden acotar este ámbito.","aiAgents.memory":"Memoria a largo plazo","aiAgents.memoryHint":"Si está activado, las memorias principales del agente se inyectan en cada turno (aisladas por usuario).","aiAgents.temperature":"Temperatura","aiAgents.temperaturePlaceholder":"Vacío = valor por defecto del proveedor","aiAgents.maxIterations":"Iteraciones máx.","aiAgents.maxIterationsHint":"Iteraciones máximas del motor por turno (rondas de llamadas a herramientas).","aiAgents.params":"Parámetros extra (JSON)","aiAgents.paramsInvalid":"JSON no válido","aiAgents.paramsHint":"skill_bundles se gestiona con el control Skills activas de arriba; lo escrito aquí se sobrescribe.","aiAgents.allTools":"Todas","aiAgents.noTools":"Ninguna","aiAgents.updatedAt":"Actualizado","aiAgents.usage":"Uso","aiAgents.playground":"Depuración","aiAgents.created":"Agente creado","aiAgents.createFailed":"Error al crear el agente","aiAgents.updated":"Agente actualizado","aiAgents.updateFailed":"Error al actualizar el agente","aiAgents.deleted":"Agente eliminado","aiAgents.deleteFailed":"Error al eliminar el agente","aiAgents.confirmDelete":"¿Eliminar {name}? Sus sesiones, mensajes y memorias se eliminarán permanentemente.","aiUsage.totalTurns":"Turnos totales","aiUsage.inputTokens":"Tokens de entrada","aiUsage.outputTokens":"Tokens de salida","aiUsage.cacheReadTokens":"Tokens de caché","aiUsage.toolCalls":"Llamadas a herramientas","aiUsage.dailyTitle":"Uso diario","aiUsage.noData":"Sin uso en este período","aiPlayground.agent":"Agente","aiPlayground.selectAgent":"Selecciona un agente","aiPlayground.sessions":"Sesiones","aiPlayground.sessionDeleted":"Sesión eliminada","aiPlayground.sessionDeleteFailed":"Error al eliminar la sesión","aiPlayground.deleteSessionDesc":"Se eliminarán la sesión y todos sus mensajes. Esta acción no se puede deshacer.","aiPlayground.newSession":"Nueva sesión","aiPlayground.noSessions":"Sin sesiones; enviar un mensaje crea una.","aiPlayground.noAgents":"Crea primero un agente","aiPlayground.emptySession":"Selecciona o crea una sesión para empezar","aiPlayground.thinking":"Proceso de razonamiento","aiPlayground.busy":"Turno en curso…","aiPlayground.inputPlaceholder":"Escribe un mensaje y pulsa Enter…","aiPlayground.stop":"Detener","aiPlayground.sessionFailed":"Error al crear la sesión","aiPlayground.turnFailed":"El turno falló","aiMemory.title":"Gestión de memoria","aiMemory.searchPlaceholder":"Buscar por clave o contenido…","aiMemory.allCategories":"Todas las categorías","aiMemory.add":"Añadir memoria","aiMemory.addTitle":"Añadir memoria","aiMemory.editTitle":"Editar memoria","aiMemory.dialogHint":"Deduplicación por clave: si ya existe (agente, usuario, clave), se actualiza el contenido.","aiMemory.key":"Clave","aiMemory.keyImmutable":"La clave es la identidad única de la memoria y no puede cambiar tras crearse","aiMemory.content":"Contenido","aiMemory.category":"Categoría","aiMemory.categoryHint":"core se inyecta y se gestiona por presupuesto; daily es solo registro, nunca se inyecta","aiMemory.importance":"Importancia","aiMemory.user":"Usuario","aiMemory.userOptional":"Usuario propietario (opcional)","aiMemory.userPlaceholder":"Vacío = nivel de plataforma","aiMemory.pinned":"Fijada (exenta de expulsión por presupuesto)","aiMemory.noMemories":"Sin memorias","aiMemory.emptyHint":"Las memorias se acumulan en las conversaciones del agente, o añade una manualmente.","aiMemory.saved":"Memoria guardada","aiMemory.saveFailed":"Error al guardar la memoria","aiMemory.deleted":"Memoria eliminada","aiMemory.deleteFailed":"Error al eliminar la memoria","aiMemory.confirmDelete":"¿Eliminar la memoria {key}? No se puede deshacer.","layout.aiSkills":"Skills","layout.aiTools":"Herramientas IA","aiTools.title":"Catálogo de herramientas IA","aiTools.tabBuiltin":"Herramientas integradas","aiTools.category":"Categoría","aiTools.nameDesc":"Nombre / Descripción","aiTools.usedByCol":"Agentes que lo usan","aiTools.desc":"Herramientas de dominio registradas por el backend (nombre/descripción/categoría definidos por el backend), agrupadas por categoría.","aiTools.usedBy":"usado por {count} agentes","aiTools.empty":"Sin herramientas","aiTools.emptyDesc":"El backend no tiene herramientas de dominio registradas.","aiSkills.new":"Nueva skill","aiSkills.newTitle":"Nueva skill","aiSkills.editTitle":"Editar skill","aiSkills.dialogHint":"Las skills se guardan como SKILL.md (frontmatter + cuerpo); los agentes las referencian vía su lista de activación.","aiSkills.name":"Nombre","aiSkills.nameHint":"Nombre del directorio: letras/dígitos/-/_, máx. 64 caracteres","aiSkills.layer":"Capa","aiSkills.layerHint":"tenant = solo el tenant actual; platform = todos los tenants (platform gana en colisión de nombres)","aiSkills.description":"Descripción","aiSkills.descriptionPlaceholder":"Cuándo usar esta skill (para el descubrimiento del modelo)","aiSkills.instructions":"Instrucciones (Markdown)","aiSkills.tools":"Herramientas compuestas","aiSkills.toolsPlaceholder":"Escribe un nombre de herramienta y pulsa Enter, ej. list_posts","aiSkills.disallowedTools":"Herramientas excluidas","aiSkills.always":"Siempre inline","aiSkills.alwaysHint":"Incluir las instrucciones completas incluso en modo Compact (por defecto: metadatos + read_skill bajo demanda)","aiSkills.noSkills":"Aún no hay skills","aiSkills.emptyHint":"Una skill es un directorio SKILL.md con instrucciones, inyectado en el system prompt del agente al activarse.","aiSkills.saved":"Skill guardada","aiSkills.saveFailed":"Error al guardar la skill","aiSkills.deleted":"Skill eliminada","aiSkills.deleteFailed":"Error al eliminar la skill","aiSkills.confirmDelete":"¿Eliminar la skill {name}? Se elimina todo el directorio (incluidos scripts/recursos).","aiSkills.bundles":"Skills activas","aiSkills.bundlesAllHint":"Este agente activa todas las skills en su ámbito.","aiSkills.bundlesEmpty":"No hay skills disponibles todavía; crea una en la página Skills.","aiSkills.bundlesHint":"Elige las skills inyectadas en el system prompt del agente; los directorios se re-escanean cada turno.","layout.aiSessions":"Conversaciones","aiSessions.title":"Título","aiSessions.agent":"Agente","aiSessions.user":"Usuario","aiSessions.messages":"Mensajes","aiSessions.lastActive":"Última actividad","aiSessions.allAgents":"Todos los agentes","aiSessions.allStatuses":"Todos los estados","aiSessions.noSessions":"Sin conversaciones","aiSessions.emptyHint":"Las conversaciones aparecen aquí cuando los usuarios inician turnos en sesiones de agente.","aiSessions.untitled":"(sin título)","aiSessions.view":"Ver mensajes","aiSessions.noMessages":"Sin mensajes en esta sesión","aiSessions.deleted":"Conversación eliminada","aiSessions.deleteFailed":"Error al eliminar la conversación","aiSessions.confirmDelete":'¿Eliminar la conversación "{title}"? Se borran todos sus mensajes (las memorias del agente se conservan); no se puede deshacer.',"layout.kb":"Base de conocimiento","layout.kbDocs":"Documentos","layout.kbChunks":"Fragmentos","layout.kbImages":"Imágenes","layout.kbChunker":"Vista previa de fragmentación","layout.kbPlayground":"Pruebas de preguntas","layout.kbWiki":"Páginas Wiki","layout.kbFaqs":"FAQ","layout.kbGaps":"Brechas de conocimiento","layout.kbDiagnostics":"Diagnóstico","kb.new":"Nueva base de conocimiento","kb.noKb":"Sin bases aún","kb.noKbDesc":"Cree una para subir documentos.","kb.deleteKb":"Eliminar base","kb.confirmDeleteKb":"¿Eliminar la base «{name}»? Se eliminarán permanentemente todos sus documentos, fragmentos, FAQs, páginas wiki, índices vectorial/de texto completo y archivos originales.","kb.kbDeleted":"Base eliminada (contenidos e índices incl.)","kb.viewChunks":"Ver fragmentos","kb.reparseAction":"Reprocesar","kb.thinking":"Pensando…","kb.viewFullRef":"Ver texto completo","kb.distillWiki":"Generar Wiki","kb.distillWikiHint":"Tarea LLM en segundo plano: destila borradores de páginas wiki de los documentos seleccionados; revísalas y publícalas en la lista.","kb.noReadyDocs":"No hay documentos listos en esta base","kb.distillQueued":"Tarea de generación de Wiki en cola ({count} documentos)","kb.distillSubmit":"Generar Wiki ({count})","kb.editChunk":"Editar fragmento","kb.editChunkHint":"Al guardar se re-vectoriza y re-indexa automáticamente.","kb.confirmDeleteChunk":"¿Eliminar este fragmento? Se quitarán sus índices vectorial/de texto completo; eliminar un padre elimina también sus hijos.","kb.chunkUpdated":"Fragmento actualizado (re-indexado)","kb.chunkDeleted":"Fragmento eliminado (índices incl.)","kb.updatedAt":"Actualizado","kb.jobHistory":"Historial de procesamiento","kb.jobAttempts":"Intentos","kb.noJobs":"Sin registros de procesamiento","kb.updated":"Base de conocimiento actualizada","kb.created":"Base creada","kb.vectorBackend":"Backend de vectores","kb.enabledOn":"Activado","kb.enabledOff":"Desactivado","kb.slug":"Slug","kb.kindDoc":"Base de documentos (wiki incluido)","kb.kindFaq":"Base de FAQ","kb.selectKb":"Seleccione una base","kb.selectKbDesc":"Elija arriba o cree una.","kb.selectPlaceholder":"Seleccionar","kb.allKbs":"Todas las bases de conocimiento","kb.allDocs":"Todos los documentos","kb.progress":"Progreso","kb.partialParsed":"Análisis parcial","kb.pagesCol":"Págs.","kb.imagesCol":"Imágenes","kb.pageCol":"Pág.","kb.parseEngine":"Motor de análisis","kb.parseEngineBuiltin":"Integrado (sin dependencias)","kb.parseEngineDocreader":"Servicio docreader (PDF imágenes/escaneos de alta fidelidad)","kb.parseEngineHint":"Imágenes PDF, escaneos y fidelidad de diseño requieren el servicio docreader; vuelve al integrado si no hay URL configurada","kb.noImages":"Sin imágenes","kb.noImagesDesc":"Las imágenes extraídas de los documentos aparecen aquí cuando activas el reconocimiento.","kb.recognition":"Reconocimiento","kb.imagePreview":"Vista previa","kb.imageCaption":"Descripción","kb.imageOcr":"Texto OCR","kb.imageStatus.pending":"Pendiente","kb.imageStatus.done":"Reconocida","kb.imageStatus.failed":"Fallida","kb.imageStatus.skipped":"Omitida","kb.createdAtCol":"Creado","kb.imagePreviewUnavailable":"Vista previa no disponible","kb.imageThumb":"Mini","kb.imageContent":"Contenido","kb.zoomIn":"Acercar","kb.zoomOut":"Alejar","kb.zoomReset":"Restablecer","kb.reader":"Vista de lectura","kb.readerEmpty":"Sin bloques que mostrar","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Página desconocida","kb.upload":"Subir documento","kb.uploadOk":"Subido, análisis en cola","kb.uploadFailed":"Fallo al subir","kb.online":"Entrada en línea","kb.onlineOk":"Enviado, procesando","kb.onlineFailed":"Fallo al enviar","kb.noDocs":"Sin documentos","kb.noDocsDesc":"Suba archivos o escriba Markdown.","kb.source":"Origen","kb.noChunks":"Sin fragmentos","kb.noChunksDesc":"Bloques padre/hijo — haz clic para ver el contenido completo","kb.breadcrumb":"Fragments","kb.embedded":"Vectorizado","kb.notEmbedded":"Sin vectorizar","kb.bytes":"bytes","kb.vectorCol":"Vector","kb.backToDocs":"Volver a los documentos","kb.chunkCount":"Fragmentos","kb.reparse":"Reprocesado","kb.reparseFailed":"Fallo","kb.confirmDelete":"¿Eliminar el documento «{title}»? Se eliminarán permanentemente sus fragmentos, índices vectorial/de texto completo y el archivo original.","kb.deleted":"Eliminado (índices incl.)","kb.mdTitle":"Título","kb.mdContent":"Contenido (Markdown; # fragmenta)","kb.status.pending":"Pendiente","kb.status.parsing":"Analizando","kb.status.chunking":"Fragmentando","kb.status.indexing":"Indexando","kb.status.embedding":"Embebiendo","kb.status.ready":"Listo","kb.status.failed":"Fallido","kb.status.stale":"Obsoleto","kb.sample":"Markdown de muestra (≤64KB, vista previa)","kb.runPreview":"Ejecutar vista previa","kb.running":"Fragmentando…","kb.parent":"Padre","kb.child":"Hijo","kb.parents":"Padres","kb.children":"Hijos","kb.total":"Total","kb.chars":"caracteres","kb.askLabel":"Pregunta (un turno; vacío = todo)","kb.stream":"Streaming (SSE)","kb.ask":"Preguntar","kb.stop":"Detener","kb.references":"Referencias","kb.wikiNoPages":"Sin páginas","kb.wikiNoPagesDesc":"Las páginas destiladas aparecen aquí para revisión.","kb.publish":"Publicar (indexado)","kb.approveOk":"Publicado e indexado","kb.reject":"Rechazar y archivar","kb.rejected":"Archivado","kb.saveOk":"Guardado (reindexado automático)","kb.noVersions":"Sin versiones aún.","kb.diffCurrent":"Diff con actual","kb.rollback":"Revertir","kb.rollbackOk":"Revertido (contenido guardado)","kb.diffTitle":"Diff de líneas (rojo=eliminado, verde=añadido)","kb.newFaq":"Nueva FAQ","kb.faqCreated":"Creada e indexada","kb.stdQuestion":"Pregunta estándar","kb.similarCount":"Similares","kb.hits":"Aciertos","kb.toggleOk":"Alternado (índices actualizados)","kb.similarLabel":"Preguntas similares (una por línea)","kb.answersLabel":"Respuestas (una por línea)","kb.noFaqs":"Sin FAQs","kb.noFaqsDesc":"Cree manualmente o desde las brechas.","kb.gapsIntro":"Preguntas sin cobertura — borradores a revisar.","kb.diag.allKinds":"Todos los tipos","kb.diag.allStatuses":"Todos los estados","kb.diag.docFilter":"Filtrar por ID de documento","kb.diag.total":"{n} ejecuciones","kb.diag.noRuns":"Aún no hay ejecuciones","kb.diag.noRunsDesc":"Cada ejecución del pipeline de KB (ingesta/pregunta/búsqueda…) se registra aquí.","kb.traceToggle":"Traza","kb.tracePanel":"Traza del pipeline","kb.logId":"ID de registro","kb.diag.runs":"Ejecuciones","kb.diag.checkup":"Chequeo","kb.diag.health":"Salud","kb.diag.checkupIntro":"Escaneo de consistencia bajo demanda (caché 10 s).","kb.diag.healthIntro":"Salud de componentes; la sonda por defecto no cuesta.","kb.diag.embedProbe":"Sonda de embed","kb.diag.r1":"Eventos perdidos (pending sin job)","kb.diag.r2":"Docs atascados","kb.diag.r3":"Docs fallidos","kb.diag.r4":"Incompletos (embeddings faltantes)","kb.diag.r5":"Deriva de vectores","kb.diag.r6":"Jobs KB muertos","kb.diag.r7":"Ejecuciones atascadas","kb.diag.kind":"Tipo","kb.diag.status":"Estado","kb.diag.trigger":"Origen","kb.diag.attempt":"Intento","kb.diag.latency":"Latencia","kb.diag.error":"Error","kb.diag.created":"Hora","kb.diag.prev":"Anterior","kb.diag.next":"Siguiente","kb.diag.detail":"Detalle de ejecución","kb.diag.agent":"Agente","kb.diag.session":"Sesión","kb.diag.configSnapshot":"Instantánea de config","kb.diag.stages":"Etapas","kb.diag.noStages":"Sin etapas registradas","kb.noGaps":"Sin brechas","kb.noGapsDesc":"Todas las preguntas están cubiertas.","kb.freq":"Frecuencia","kb.draftFaq":"Borrador FAQ","kb.drafted":"Borrador creado (inactivo) — revisar","kb.docsPage":"Documentos","kb.title":"Título","kb.versions":"Versiones","kb.edit":"Editar","kb.operations":"Acciones","kb.state":"Estado","kb.allStatus":"Todos","kb.type":"Tipo","kb.embeddingModel":"Modelo de embedding","kb.embeddingDim":"Dimensión del vector","kb.modelHint":"Inmutable tras crear (vacío = valor global)","kb.modelCol":"Modelo","kb.modelRequired":"Obligatorio: rellenar o configurar los valores globales (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Modelo de rerank","kb.rerankModelOptional":"Opcional: valor global si está vacío (rerank desactivado sin configurar)","kb.rerankWindow":"Ventana de rerank","kb.rerankThreshold":"Umbral de rerank","kb.rerankInherit":"Heredar valor global","kb.rerankHint":"Ventana/umbral vacíos heredan los valores globales (RAISFAST_KB_RERANK_*); sin modelo configurado, S5 pasa directamente","kb.rerankInvalid":"La ventana debe ser un entero positivo; el umbral entre 0–1","kb.chatModel":"Modelo de generación","kb.chatModelOptional":"Opcional: valor global (RAISFAST_KB_CHAT_MODEL) → valor del tenant","kb.chatModelHint":"Modelo usado para la generación de respuestas S9; vaciar vuelve al valor global","kb.distillModel":"Modelo de destilación","kb.distillModelOptional":"Opcional: valor global (RAISFAST_KB_DISTILL_MODEL) → valor del tenant","kb.distillModelHint":"Modelo usado para la destilación wiki (extracción + borrador); vaciar vuelve al valor global","kb.imageRecognition":"Reconocimiento de imágenes","kb.imageModel":"Modelo de reconocimiento","kb.imageModelOptional":"Elige un modelo con visión; valor global si está vacío (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Idioma de descripción","kb.imageLanguagePlaceholder":"p. ej. zh / es; vacío sigue el idioma del documento","kb.imageInstructions":"Instrucciones personalizadas","kb.imageInstructionsPlaceholder":"Guía adicional para interpretar imágenes (opcional)","kb.imageHint":"Al activarlo, las imágenes reciben caption + OCR por VLM y pasan a ser buscables","kb.descPlaceholder":"Para qué sirve esta base (opcional)","jobs.attempts":"Intentos","jobs.runAfter":"Programado","jobs.updatedAt":"Actualizado","jobs.error":"Error","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Sin tareas","jobs.noJobsDesc":"La cola de tareas en segundo plano está vacía.","jobs.cleanup":"Limpiar","jobs.cleanupDesc":"Elimina tareas completadas/muertas de más de 7 días. No se puede deshacer.","jobs.cleanupDone":"Se limpiaron {n} tareas","jobs.confirmDelete":"¿Eliminar la tarea {type}? El registro se quitará de la cola.","jobs.retried":"Tarea reencolada","jobs.deleted":"Tarea eliminada","jobs.actionFailed":"La acción falló"},HC={"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.jobs":"Fila de tarefas","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.listView":"Vista em lista","common.cardView":"Vista em cartões","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.refresh":"Atualizar","common.all":"Todos","common.draft":"Rascunho","common.published":"Publicado","common.active":"Ativo","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","layout.ai":"IA","layout.aiAgents":"Agentes","layout.aiPlayground":"Depuração de chat","aiAgents.newAgent":"Novo agente","aiAgents.noAgents":"Ainda não há agentes","aiAgents.emptyHint":"Crie um agente, configure o modelo e o prompt de sistema e comece a conversar.","aiAgents.name":"Nome","aiAgents.namePlaceholder":"ex.: Assistente de conteúdo","aiAgents.nameImmutable":"O nome não pode ser alterado após a criação","aiAgents.provider":"Provedor","aiAgents.providerHint":"Endpoint compatível com OpenAI (DeepSeek/OpenRouter/Ollama) ou Anthropic","aiAgents.model":"Modelo","aiAgents.systemPrompt":"Prompt de sistema","aiAgents.systemPromptPlaceholder":"Você é um assistente prestativo…","aiAgents.tools":"Lista de ferramentas permitidas","aiAgents.allowAll":"Permitir todas","aiAgents.allowAllHint":"Este agente pode chamar todas as ferramentas de domínio registradas no servidor.","aiAgents.memoryToolsHint":"As ferramentas de memória (memory_store/recall/forget) estão sempre disponíveis e não precisam da lista.","aiAgents.customToolPlaceholder":"Adicionar ferramenta personalizada (ex.: MCP)…","aiAgents.addTool":"Adicionar","aiAgents.toolGroup.content":"Conteúdo","aiAgents.toolGroup.system":"Sistema","aiAgents.toolGroup.skills":"Habilidades","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Arquivos","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Conhecimento","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Outros","aiAgents.kbBinding":"Bases de conhecimento","aiAgents.kbEmpty":"Nenhuma base de conhecimento ativa.","aiAgents.kbBindingHint":"Selecione individualmente cada base de conhecimento a montar; sem nenhuma selecionada, a ferramenta knowledge_search não é montada. Com a ferramenta ativada, o agente pesquisa as bases selecionadas e cita fontes; os kb_ids em chamadas só podem restringir este escopo.","aiAgents.memory":"Memória de longo prazo","aiAgents.memoryHint":"Quando ativado, as memórias principais do agente são injetadas a cada turno (isoladas por usuário).","aiAgents.temperature":"Temperatura","aiAgents.temperaturePlaceholder":"Vazio = padrão do provedor","aiAgents.maxIterations":"Iterações máx.","aiAgents.maxIterationsHint":"Iterações máximas do motor por turno (rodadas de chamadas de ferramentas).","aiAgents.params":"Parâmetros extras (JSON)","aiAgents.paramsInvalid":"JSON inválido","aiAgents.paramsHint":"skill_bundles é gerenciado pelo controle Skills ativadas acima; valores escritos aqui são sobrescritos.","aiAgents.allTools":"Todas","aiAgents.noTools":"Nenhuma","aiAgents.updatedAt":"Atualizado","aiAgents.usage":"Uso","aiAgents.playground":"Depuração","aiAgents.created":"Agente criado","aiAgents.createFailed":"Falha ao criar o agente","aiAgents.updated":"Agente atualizado","aiAgents.updateFailed":"Falha ao atualizar o agente","aiAgents.deleted":"Agente excluído","aiAgents.deleteFailed":"Falha ao excluir o agente","aiAgents.confirmDelete":"Excluir {name}? Suas sessões, mensagens e memórias serão removidas permanentemente.","aiUsage.totalTurns":"Total de turnos","aiUsage.inputTokens":"Tokens de entrada","aiUsage.outputTokens":"Tokens de saída","aiUsage.cacheReadTokens":"Tokens de cache","aiUsage.toolCalls":"Chamadas de ferramentas","aiUsage.dailyTitle":"Uso diário","aiUsage.noData":"Sem uso neste período","aiPlayground.agent":"Agente","aiPlayground.selectAgent":"Selecione um agente","aiPlayground.sessions":"Sessões","aiPlayground.sessionDeleted":"Sessão excluída","aiPlayground.sessionDeleteFailed":"Falha ao excluir a sessão","aiPlayground.deleteSessionDesc":"A sessão e todas as suas mensagens serão excluídas. Não pode ser desfeito.","aiPlayground.newSession":"Nova sessão","aiPlayground.noSessions":"Sem sessões — enviar uma mensagem cria uma.","aiPlayground.noAgents":"Crie um agente primeiro","aiPlayground.emptySession":"Selecione ou crie uma sessão para começar","aiPlayground.thinking":"Processo de raciocínio","aiPlayground.busy":"Turno em andamento…","aiPlayground.inputPlaceholder":"Digite uma mensagem e pressione Enter…","aiPlayground.stop":"Parar","aiPlayground.sessionFailed":"Falha ao criar a sessão","aiPlayground.turnFailed":"O turno falhou","aiMemory.title":"Gerenciamento de memória","aiMemory.searchPlaceholder":"Buscar por chave ou conteúdo…","aiMemory.allCategories":"Todas as categorias","aiMemory.add":"Adicionar memória","aiMemory.addTitle":"Adicionar memória","aiMemory.editTitle":"Editar memória","aiMemory.dialogHint":"Deduplicação por chave: se (agente, usuário, chave) já existe, o conteúdo é atualizado.","aiMemory.key":"Chave","aiMemory.keyImmutable":"A chave é a identidade única da memória e não pode ser alterada após a criação","aiMemory.content":"Conteúdo","aiMemory.category":"Categoria","aiMemory.categoryHint":"core é injetada e gerenciada por orçamento; daily é apenas registro, nunca injetada","aiMemory.importance":"Importância","aiMemory.user":"Usuário","aiMemory.userOptional":"Usuário proprietário (opcional)","aiMemory.userPlaceholder":"Vazio = nível de plataforma","aiMemory.pinned":"Fixada (isenta da remoção por orçamento)","aiMemory.noMemories":"Sem memórias","aiMemory.emptyHint":"As memórias se acumulam nas conversas do agente, ou adicione uma manualmente.","aiMemory.saved":"Memória salva","aiMemory.saveFailed":"Falha ao salvar a memória","aiMemory.deleted":"Memória excluída","aiMemory.deleteFailed":"Falha ao excluir a memória","aiMemory.confirmDelete":"Excluir a memória {key}? Isso não pode ser desfeito.","layout.aiSkills":"Skills","layout.aiTools":"Ferramentas IA","aiTools.title":"Catálogo de ferramentas IA","aiTools.tabBuiltin":"Ferramentas integradas","aiTools.category":"Categoria","aiTools.nameDesc":"Nome / Descrição","aiTools.usedByCol":"Agentes que usam","aiTools.desc":"Ferramentas de domínio registradas pelo backend (nome/descrição/categoria definidos pelo backend), agrupadas por categoria.","aiTools.usedBy":"usado por {count} agentes","aiTools.empty":"Sem ferramentas","aiTools.emptyDesc":"Nenhuma ferramenta de domínio registrada pelo backend.","aiSkills.new":"Nova skill","aiSkills.newTitle":"Nova skill","aiSkills.editTitle":"Editar skill","aiSkills.dialogHint":"Skills são armazenadas como SKILL.md (frontmatter + corpo); agentes as referenciam pela lista de ativação.","aiSkills.name":"Nome","aiSkills.nameHint":"Nome do diretório: letras/dígitos/-/_, máx. 64 caracteres","aiSkills.layer":"Camada","aiSkills.layerHint":"tenant = apenas o tenant atual; platform = todos os tenants (platform vence em conflito de nome)","aiSkills.description":"Descrição","aiSkills.descriptionPlaceholder":"Quando usar esta skill (para descoberta pelo modelo)","aiSkills.instructions":"Instruções (Markdown)","aiSkills.tools":"Ferramentas compostas","aiSkills.toolsPlaceholder":"Digite um nome de ferramenta e pressione Enter, ex.: list_posts","aiSkills.disallowedTools":"Ferramentas excluídas","aiSkills.always":"Sempre inline","aiSkills.alwaysHint":"Inclui as instruções completas mesmo no modo Compact (padrão: metadados + read_skill sob demanda)","aiSkills.noSkills":"Ainda não há skills","aiSkills.emptyHint":"Uma skill é um diretório SKILL.md com instruções, injetado no system prompt do agente quando ativada.","aiSkills.saved":"Skill salva","aiSkills.saveFailed":"Falha ao salvar a skill","aiSkills.deleted":"Skill excluída","aiSkills.deleteFailed":"Falha ao excluir a skill","aiSkills.confirmDelete":"Excluir a skill {name}? Todo o diretório (incluindo scripts/ativos) é removido.","aiSkills.bundles":"Skills ativadas","aiSkills.bundlesAllHint":"Este agente ativa todas as skills no escopo.","aiSkills.bundlesEmpty":"Nenhuma skill disponível ainda — crie uma na página Skills.","aiSkills.bundlesHint":"Escolha as skills injetadas no system prompt do agente; os diretórios são re-escaneados a cada turno.","layout.aiSessions":"Conversas","aiSessions.title":"Título","aiSessions.agent":"Agente","aiSessions.user":"Usuário","aiSessions.messages":"Mensagens","aiSessions.lastActive":"Última atividade","aiSessions.allAgents":"Todos os agentes","aiSessions.allStatuses":"Todos os status","aiSessions.noSessions":"Sem conversas","aiSessions.emptyHint":"As conversas aparecem aqui quando os usuários iniciam turnos em sessões de agente.","aiSessions.untitled":"(sem título)","aiSessions.view":"Ver mensagens","aiSessions.noMessages":"Sem mensagens nesta sessão","aiSessions.deleted":"Conversa excluída","aiSessions.deleteFailed":"Falha ao excluir a conversa","aiSessions.confirmDelete":'Excluir a conversa "{title}"? Todas as mensagens são removidas (as memórias do agente são mantidas); não pode ser desfeito.',"layout.kb":"Base de conhecimento","layout.kbDocs":"Documentos","layout.kbChunks":"Fragmentos","layout.kbImages":"Imagens","layout.kbChunker":"Prévia de fragmentação","layout.kbPlayground":"Playground de perguntas","layout.kbWiki":"Páginas Wiki","layout.kbFaqs":"FAQ","layout.kbGaps":"Lacunas de conhecimento","layout.kbDiagnostics":"Diagnóstico","kb.new":"Nova base de conhecimento","kb.noKb":"Sem base ainda","kb.noKbDesc":"Crie uma para enviar documentos.","kb.deleteKb":"Excluir base","kb.confirmDeleteKb":'Excluir a base "{name}"? Todos os seus documentos, fragmentos, FAQs, páginas wiki, índices vetorial/texto completo e arquivos originais serão removidos permanentemente.',"kb.kbDeleted":"Base excluída (conteúdos e índices incl.)","kb.viewChunks":"Ver fragmentos","kb.reparseAction":"Reprocessar","kb.thinking":"Pensando…","kb.viewFullRef":"Ver texto completo","kb.distillWiki":"Gerar Wiki","kb.distillWikiHint":"Tarefa LLM em segundo plano: destila rascunhos de páginas wiki dos documentos selecionados; revise e publique na lista.","kb.noReadyDocs":"Nenhum documento pronto nesta base","kb.distillQueued":"Tarefa de geração de Wiki na fila ({count} documentos)","kb.distillSubmit":"Gerar Wiki ({count})","kb.editChunk":"Editar fragmento","kb.editChunkHint":"Ao salvar, o fragmento é re-vetorizado e re-indexado automaticamente.","kb.confirmDeleteChunk":"Excluir este fragmento? Seus índices vetorial/texto completo serão removidos; excluir um pai também exclui seus filhos.","kb.chunkUpdated":"Fragmento atualizado (re-indexado)","kb.chunkDeleted":"Fragmento excluído (índices incl.)","kb.updatedAt":"Atualizado","kb.jobHistory":"Histórico de processamento","kb.jobAttempts":"Tentativas","kb.noJobs":"Sem registros de processamento","kb.updated":"Base de conhecimento atualizada","kb.created":"Base criada","kb.vectorBackend":"Backend de vetores","kb.enabledOn":"Ativado","kb.enabledOff":"Desativado","kb.slug":"Slug","kb.kindDoc":"Base de documentos (wiki incluído)","kb.kindFaq":"Base de FAQ","kb.selectKb":"Selecione uma base","kb.selectKbDesc":"Selecione acima ou crie uma.","kb.selectPlaceholder":"Selecionar","kb.allKbs":"Todas as bases de conhecimento","kb.allDocs":"Todos os documentos","kb.progress":"Progresso","kb.partialParsed":"Análise parcial","kb.pagesCol":"Págs.","kb.imagesCol":"Imagens","kb.pageCol":"Pág.","kb.parseEngine":"Motor de análise","kb.parseEngineBuiltin":"Integrado (zero dependência)","kb.parseEngineDocreader":"Serviço docreader (imagens/digitalizações PDF de alta fidelidade)","kb.parseEngineHint":"Imagens PDF, digitalizações e fidelidade de layout exigem o serviço docreader; retorna ao integrado se a URL não estiver configurada","kb.noImages":"Sem imagens","kb.noImagesDesc":"Imagens extraídas de documentos aparecem aqui quando o reconhecimento é ativado.","kb.recognition":"Reconhecimento","kb.imagePreview":"Pré-visualizar","kb.imageCaption":"Legenda","kb.imageOcr":"Texto OCR","kb.imageStatus.pending":"Pendente","kb.imageStatus.done":"Reconhecida","kb.imageStatus.failed":"Falhou","kb.imageStatus.skipped":"Ignorada","kb.createdAtCol":"Criada","kb.imagePreviewUnavailable":"Pré-visualização indisponível","kb.imageThumb":"Mini","kb.imageContent":"Conteúdo","kb.zoomIn":"Ampliar","kb.zoomOut":"Reduzir","kb.zoomReset":"Redefinir","kb.reader":"Vista de leitura","kb.readerEmpty":"Nenhum bloco a exibir","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Página desconhecida","kb.upload":"Enviar documento","kb.uploadOk":"Enviado, análise na fila","kb.uploadFailed":"Falha no envio","kb.online":"Entrada online","kb.onlineOk":"Enviado, processando","kb.onlineFailed":"Falha no envio","kb.noDocs":"Sem documentos","kb.noDocsDesc":"Envie arquivos ou escreva Markdown.","kb.source":"Origem","kb.noChunks":"Sem fragmentos","kb.noChunksDesc":"Blocos pai/filho — clique para ver o conteúdo completo","kb.breadcrumb":"Fragments","kb.embedded":"Vetorizado","kb.notEmbedded":"Não vetorizado","kb.bytes":"bytes","kb.vectorCol":"Vetor","kb.backToDocs":"Voltar aos documentos","kb.chunkCount":"Fragmentos","kb.reparse":"Reprocessado","kb.reparseFailed":"Falha","kb.confirmDelete":'Excluir o documento "{title}"? Seus fragmentos, índices vetorial/texto completo e o arquivo original serão removidos permanentemente.',"kb.deleted":"Excluído (índices incl.)","kb.mdTitle":"Título","kb.mdContent":"Conteúdo (Markdown; # fragmenta)","kb.status.pending":"Pendente","kb.status.parsing":"Analisando","kb.status.chunking":"Fragmentando","kb.status.indexing":"Indexando","kb.status.embedding":"Embutindo","kb.status.ready":"Pronto","kb.status.failed":"Falhou","kb.status.stale":"Obsoleto","kb.sample":"Markdown de exemplo (≤64KB, prévia)","kb.runPreview":"Executar prévia","kb.running":"Fragmentando…","kb.parent":"Pai","kb.child":"Filho","kb.parents":"Pais","kb.children":"Filhos","kb.total":"Total","kb.chars":"caracteres","kb.askLabel":"Pergunta (turno único; vazio = tudo)","kb.stream":"Streaming (SSE)","kb.ask":"Perguntar","kb.stop":"Parar","kb.references":"Referências","kb.wikiNoPages":"Sem páginas","kb.wikiNoPagesDesc":"Os rascunhos aparecem aqui para revisão.","kb.publish":"Publicar (indexado)","kb.approveOk":"Publicado e indexado","kb.reject":"Rejeitar e arquivar","kb.rejected":"Arquivado","kb.saveOk":"Salvo (reindexado automático)","kb.noVersions":"Sem versões ainda.","kb.diffCurrent":"Diff com atual","kb.rollback":"Reverter","kb.rollbackOk":"Revertido (conteúdo salvo)","kb.diffTitle":"Diff de linhas (vermelho=removido, verde=adicionado)","kb.newFaq":"Nova FAQ","kb.faqCreated":"Criada e indexada","kb.stdQuestion":"Pergunta padrão","kb.similarCount":"Similares","kb.hits":"Acertos","kb.toggleOk":"Alternado (índices atualizados)","kb.similarLabel":"Perguntas similares (uma por linha)","kb.answersLabel":"Respostas (uma por linha)","kb.noFaqs":"Sem FAQs","kb.noFaqsDesc":"Crie manualmente ou das lacunas.","kb.gapsIntro":"Perguntas sem cobertura — rascunhos a revisar","kb.diag.allKinds":"Todos os tipos","kb.diag.allStatuses":"Todos os status","kb.diag.docFilter":"Filtrar por ID de documento","kb.diag.total":"{n} execuções","kb.diag.noRuns":"Ainda sem execuções","kb.diag.noRunsDesc":"Cada execução do pipeline do KB (ingestão/pergunta/busca…) é registrada aqui.","kb.traceToggle":"Rastro","kb.tracePanel":"Rastro do pipeline","kb.logId":"ID do log","kb.diag.runs":"Execuções","kb.diag.checkup":"Diagnóstico","kb.diag.health":"Saúde","kb.diag.checkupIntro":"Varredura de consistência sob demanda (cache 10 s).","kb.diag.healthIntro":"Saúde dos componentes; sonda padrão sem custo.","kb.diag.embedProbe":"Sonda de embed","kb.diag.r1":"Eventos perdidos (pending sem job)","kb.diag.r2":"Docs presos","kb.diag.r3":"Docs falhos","kb.diag.r4":"Incompletos (embeddings faltando)","kb.diag.r5":"Deriva vetorial","kb.diag.r6":"Jobs KB mortos","kb.diag.r7":"Execuções presas","kb.diag.kind":"Tipo","kb.diag.status":"Status","kb.diag.trigger":"Origem","kb.diag.attempt":"Tentativa","kb.diag.latency":"Latência","kb.diag.error":"Erro","kb.diag.created":"Hora","kb.diag.prev":"Anterior","kb.diag.next":"Próximo","kb.diag.detail":"Detalhe da execução","kb.diag.agent":"Agente","kb.diag.session":"Sessão","kb.diag.configSnapshot":"Snapshot de config","kb.diag.stages":"Etapas","kb.diag.noStages":"Nenhuma etapa registrada","kb.noGaps":"Sem lacunas","kb.noGapsDesc":"Todas as perguntas estão cobertas","kb.freq":"Frequência","kb.draftFaq":"Rascunho FAQ","kb.drafted":"Rascunho criado (inativo) — revisar","kb.docsPage":"Documentos","kb.title":"Título","kb.versions":"Versões","kb.edit":"Editar","kb.operations":"Ações","kb.state":"Estado","kb.allStatus":"Todos","kb.type":"Tipo","kb.embeddingModel":"Modelo de embedding","kb.embeddingDim":"Dimensão do vetor","kb.modelHint":"Imutável após criar (vazio = padrão global)","kb.modelCol":"Modelo","kb.modelRequired":"Obrigatório: preencher ou configurar os padrões globais (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Modelo de rerank","kb.rerankModelOptional":"Opcional: padrão global se vazio (rerank desativado sem configuração)","kb.rerankWindow":"Janela de rerank","kb.rerankThreshold":"Limiar de rerank","kb.rerankInherit":"Herdar padrão global","kb.rerankHint":"Janela/limiar vazios herdam os padrões globais (RAISFAST_KB_RERANK_*); sem modelo configurado, S5 passa direto","kb.rerankInvalid":"Janela deve ser um inteiro positivo; limiar entre 0–1","kb.chatModel":"Modelo de geração","kb.chatModelOptional":"Opcional: padrão global (RAISFAST_KB_CHAT_MODEL) → padrão do tenant","kb.chatModelHint":"Modelo usado na geração de respostas S9; limpar volta ao padrão global","kb.distillModel":"Modelo de destilação","kb.distillModelOptional":"Opcional: padrão global (RAISFAST_KB_DISTILL_MODEL) → padrão do tenant","kb.distillModelHint":"Modelo usado na destilação wiki (extração + rascunho); limpar volta ao padrão global","kb.imageRecognition":"Reconhecimento de imagens","kb.imageModel":"Modelo de reconhecimento","kb.imageModelOptional":"Escolha um modelo com visão; padrão global se vazio (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Idioma da descrição","kb.imageLanguagePlaceholder":"ex. zh / pt; vazio segue o idioma do documento","kb.imageInstructions":"Instruções personalizadas","kb.imageInstructionsPlaceholder":"Orientação extra para interpretar imagens (opcional)","kb.imageHint":"Ativo: imagens ganham caption + OCR por VLM e tornam-se pesquisáveis","kb.descPlaceholder":"Para que serve esta base (opcional)","jobs.attempts":"Tentativas","jobs.runAfter":"Agendado","jobs.updatedAt":"Atualizado","jobs.error":"Erro","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Sem tarefas","jobs.noJobsDesc":"A fila de tarefas em segundo plano está vazia.","jobs.cleanup":"Limpar","jobs.cleanupDesc":"Exclui tarefas concluídas/mortas com mais de 7 dias. Não pode ser desfeito.","jobs.cleanupDone":"{n} tarefas limpas","jobs.confirmDelete":"Excluir a tarefa {type}? O registro será removido da fila.","jobs.retried":"Tarefa reenfileirada","jobs.deleted":"Tarefa excluída","jobs.actionFailed":"A ação falhou"},qC={"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.jobs":"Job-Warteschlange","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.listView":"Listenansicht","common.cardView":"Kartenansicht","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.refresh":"Aktualisieren","common.all":"Alle","common.draft":"Entwurf","common.published":"Veröffentlicht","common.active":"Aktiv","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","layout.ai":"KI","layout.aiAgents":"Agenten","layout.aiPlayground":"Chat-Debugging","aiAgents.newAgent":"Neuer Agent","aiAgents.noAgents":"Noch keine Agenten","aiAgents.emptyHint":"Erstellen Sie einen Agenten, konfigurieren Sie Modell und System-Prompt und starten Sie den Chat.","aiAgents.name":"Name","aiAgents.namePlaceholder":"z. B. Inhalts-Assistent","aiAgents.nameImmutable":"Der Name kann nach dem Erstellen nicht geändert werden","aiAgents.provider":"Anbieter","aiAgents.providerHint":"OpenAI-kompatibler Endpunkt (DeepSeek/OpenRouter/Ollama) oder Anthropic","aiAgents.model":"Modell","aiAgents.systemPrompt":"System-Prompt","aiAgents.systemPromptPlaceholder":"Du bist ein hilfreicher Assistent…","aiAgents.tools":"Tool-Freigabeliste","aiAgents.allowAll":"Alle erlauben","aiAgents.allowAllHint":"Dieser Agent darf alle auf dem Server registrierten Domänen-Tools aufrufen.","aiAgents.memoryToolsHint":"Speicher-Tools (memory_store/recall/forget) sind immer verfügbar und brauchen keinen Listeneintrag.","aiAgents.customToolPlaceholder":"Benutzerdefinierten Tool-Namen hinzufügen (z. B. MCP)…","aiAgents.addTool":"Hinzufügen","aiAgents.toolGroup.content":"Inhalt","aiAgents.toolGroup.system":"System","aiAgents.toolGroup.skills":"Skills","aiAgents.toolGroup.script":"Skript","aiAgents.toolGroup.files":"Dateien","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Wissen","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Sonstige","aiAgents.kbBinding":"Wissensbanken","aiAgents.kbEmpty":"Keine aktiven Wissensbanken.","aiAgents.kbBindingHint":"Wissensbanken müssen einzeln zum Einbinden ausgewählt werden; ohne Auswahl wird das Werkzeug knowledge_search nicht eingebunden. Mit aktiviertem Werkzeug durchsucht der Agent die ausgewählten Wissensbanken und zitiert Quellen; kb_ids in Aufrufen können diesen Bereich nur einschränken.","aiAgents.memory":"Langzeitgedächtnis","aiAgents.memoryHint":"Wenn aktiviert, werden die Kern-Erinnerungen des Agenten jede Runde injiziert (pro Benutzer isoliert).","aiAgents.temperature":"Temperatur","aiAgents.temperaturePlaceholder":"Leer = Anbieter-Standard","aiAgents.maxIterations":"Max. Iterationen","aiAgents.maxIterationsHint":"Maximale Engine-Iterationen pro Runde (Tool-Aufruf-Runden).","aiAgents.params":"Zusätzliche Parameter (JSON)","aiAgents.paramsInvalid":"Ungültiges JSON","aiAgents.paramsHint":"skill_bundles wird über das Steuerfeld Aktivierte Skills verwaltet; hier geschriebene Werte werden überschrieben.","aiAgents.allTools":"Alle","aiAgents.noTools":"Keine","aiAgents.updatedAt":"Aktualisiert","aiAgents.usage":"Verbrauch","aiAgents.playground":"Debugging","aiAgents.created":"Agent erstellt","aiAgents.createFailed":"Agent konnte nicht erstellt werden","aiAgents.updated":"Agent aktualisiert","aiAgents.updateFailed":"Agent konnte nicht aktualisiert werden","aiAgents.deleted":"Agent gelöscht","aiAgents.deleteFailed":"Agent konnte nicht gelöscht werden","aiAgents.confirmDelete":"{name} löschen? Sitzungen, Nachrichten und Erinnerungen werden dauerhaft entfernt.","aiUsage.totalTurns":"Gesamtrunden","aiUsage.inputTokens":"Eingabe-Tokens","aiUsage.outputTokens":"Ausgabe-Tokens","aiUsage.cacheReadTokens":"Cache-Tokens","aiUsage.toolCalls":"Tool-Aufrufe","aiUsage.dailyTitle":"Täglicher Verbrauch","aiUsage.noData":"Kein Verbrauch in diesem Zeitraum","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"Agent auswählen","aiPlayground.sessions":"Sitzungen","aiPlayground.sessionDeleted":"Sitzung gelöscht","aiPlayground.sessionDeleteFailed":"Sitzung konnte nicht gelöscht werden","aiPlayground.deleteSessionDesc":"Die Sitzung und alle ihre Nachrichten werden gelöscht. Dies kann nicht rückgängig gemacht werden.","aiPlayground.newSession":"Neue Sitzung","aiPlayground.noSessions":"Keine Sitzungen — eine Nachricht erstellt eine.","aiPlayground.noAgents":"Erstellen Sie zuerst einen Agenten","aiPlayground.emptySession":"Sitzung auswählen oder erstellen, um zu starten","aiPlayground.thinking":"Denkprozess","aiPlayground.busy":"Runde läuft…","aiPlayground.inputPlaceholder":"Nachricht eingeben und Enter drücken…","aiPlayground.stop":"Stopp","aiPlayground.sessionFailed":"Sitzung konnte nicht erstellt werden","aiPlayground.turnFailed":"Runde fehlgeschlagen","aiMemory.title":"Gedächtnisverwaltung","aiMemory.searchPlaceholder":"Nach Schlüssel oder Inhalt suchen…","aiMemory.allCategories":"Alle Kategorien","aiMemory.add":"Erinnerung hinzufügen","aiMemory.addTitle":"Erinnerung hinzufügen","aiMemory.editTitle":"Erinnerung bearbeiten","aiMemory.dialogHint":"Deduplizierung nach Schlüssel: Existiert (Agent, Benutzer, Schlüssel) bereits, wird der Inhalt aktualisiert.","aiMemory.key":"Schlüssel","aiMemory.keyImmutable":"Der Schlüssel ist die eindeutige Identität der Erinnerung und kann nach dem Erstellen nicht geändert werden","aiMemory.content":"Inhalt","aiMemory.category":"Kategorie","aiMemory.categoryHint":"core wird injiziert und budgetverwaltet; daily ist nur Protokoll, wird nie injiziert","aiMemory.importance":"Wichtigkeit","aiMemory.user":"Benutzer","aiMemory.userOptional":"Besitzer-Benutzer (optional)","aiMemory.userPlaceholder":"Leer = Plattform-Ebene","aiMemory.pinned":"Angeheftet (von Budget-Räumung ausgenommen)","aiMemory.noMemories":"Keine Erinnerungen","aiMemory.emptyHint":"Erinnerungen sammeln sich in Agenten-Gesprächen, oder fügen Sie sie manuell hinzu.","aiMemory.saved":"Erinnerung gespeichert","aiMemory.saveFailed":"Erinnerung konnte nicht gespeichert werden","aiMemory.deleted":"Erinnerung gelöscht","aiMemory.deleteFailed":"Erinnerung konnte nicht gelöscht werden","aiMemory.confirmDelete":"Erinnerung {key} löschen? Dies kann nicht rückgängig gemacht werden.","layout.aiSkills":"Skills","layout.aiTools":"AI-Werkzeuge","aiTools.title":"AI-Werkzeugkatalog","aiTools.tabBuiltin":"Eingebaute Tools","aiTools.category":"Kategorie","aiTools.nameDesc":"Name / Beschreibung","aiTools.usedByCol":"Von Agenten genutzt","aiTools.desc":"Vom Backend registrierte Domänen-Werkzeuge (Name/Beschreibung/Kategorie vom Backend definiert), nach Kategorie gruppiert.","aiTools.usedBy":"von {count} Agents genutzt","aiTools.empty":"Keine Werkzeuge","aiTools.emptyDesc":"Vom Backend sind keine Domänen-Werkzeuge registriert.","aiSkills.new":"Neuer Skill","aiSkills.newTitle":"Neuer Skill","aiSkills.editTitle":"Skill bearbeiten","aiSkills.dialogHint":"Skills werden als SKILL.md (Frontmatter + Hauptteil) gespeichert; Agenten referenzieren sie über ihre Aktivierungsliste.","aiSkills.name":"Name","aiSkills.nameHint":"Verzeichnisname: Buchstaben/Ziffern/-/_, max. 64 Zeichen","aiSkills.layer":"Ebene","aiSkills.layerHint":"tenant = nur aktueller Mandant; platform = alle Mandanten (gewinnt bei Namenskonflikt)","aiSkills.description":"Beschreibung","aiSkills.descriptionPlaceholder":"Wann dieser Skill genutzt werden soll (für die Modell-Entdeckung)","aiSkills.instructions":"Anleitung (Markdown)","aiSkills.tools":"Kombinierte Tools","aiSkills.toolsPlaceholder":"Tool-Namen eingeben und Enter drücken, z. B. list_posts","aiSkills.disallowedTools":"Ausgeschlossene Tools","aiSkills.always":"Immer inline","aiSkills.alwaysHint":"Vollständige Anweisungen auch im Compact-Modus (Standard: Metadaten + read_skill bei Bedarf)","aiSkills.noSkills":"Noch keine Skills","aiSkills.emptyHint":"Ein Skill ist ein SKILL.md-Verzeichnis mit Anleitung, das bei Aktivierung in den System-Prompt injiziert wird.","aiSkills.saved":"Skill gespeichert","aiSkills.saveFailed":"Skill konnte nicht gespeichert werden","aiSkills.deleted":"Skill gelöscht","aiSkills.deleteFailed":"Skill konnte nicht gelöscht werden","aiSkills.confirmDelete":"Skill {name} löschen? Das gesamte Verzeichnis (inkl. Skripte/Assets) wird entfernt.","aiSkills.bundles":"Aktivierte Skills","aiSkills.bundlesAllHint":"Dieser Agent aktiviert alle Skills im Geltungsbereich.","aiSkills.bundlesEmpty":"Noch keine Skills verfügbar — erstellen Sie zuerst eine auf der Skills-Seite.","aiSkills.bundlesHint":"Wählen Sie die in den System-Prompt injizierten Skills; Verzeichnisse werden jede Runde neu gescannt.","layout.aiSessions":"Konversationen","aiSessions.title":"Titel","aiSessions.agent":"Agent","aiSessions.user":"Benutzer","aiSessions.messages":"Nachrichten","aiSessions.lastActive":"Letzte Aktivität","aiSessions.allAgents":"Alle Agenten","aiSessions.allStatuses":"Alle Status","aiSessions.noSessions":"Keine Konversationen","aiSessions.emptyHint":"Konversationen erscheinen hier, sobald Benutzer Runden in Agenten-Sitzungen starten.","aiSessions.untitled":"(unbenannt)","aiSessions.view":"Nachrichten ansehen","aiSessions.noMessages":"Keine Nachrichten in dieser Sitzung","aiSessions.deleted":"Konversation gelöscht","aiSessions.deleteFailed":"Konversation konnte nicht gelöscht werden","aiSessions.confirmDelete":'Konversation "{title}" löschen? Alle Nachrichten werden entfernt (Agenten-Gedächtnis bleibt); dies kann nicht rückgängig gemacht werden.',"layout.kb":"Wissensbasis","layout.kbDocs":"Dokumente","layout.kbChunks":"Chunks","layout.kbImages":"Bilder","layout.kbChunker":"Chunking-Vorschau","layout.kbPlayground":"Fragen-Antwort-Test","layout.kbWiki":"Wiki-Seiten","layout.kbFaqs":"FAQs","layout.kbGaps":"Wissenslücken","layout.kbDiagnostics":"Diagnose","kb.new":"Neue Wissensbasis","kb.noKb":"Noch keine Wissensbasis","kb.noKbDesc":"Erstellen Sie eine, um Dokumente hochzuladen.","kb.deleteKb":"Wissensbasis löschen","kb.confirmDeleteKb":"Wissensbasis „{name}“ löschen? Alle Dokumente, Chunks, FAQs, Wiki-Seiten, Vektor-/Volltextindizes und Originaldateien werden endgültig gelöscht.","kb.kbDeleted":"Wissensbasis gelöscht (inkl. Inhalte und Indizes)","kb.viewChunks":"Chunks anzeigen","kb.reparseAction":"Erneut verarbeiten","kb.thinking":"Denkt nach…","kb.viewFullRef":"Volltext anzeigen","kb.distillWiki":"Wiki generieren","kb.distillWikiHint":"Hintergrund-LLM-Aufgabe: destilliert Wiki-Seiten-Entwürfe aus den gewählten Dokumenten; danach in der Liste prüfen und veröffentlichen.","kb.noReadyDocs":"Keine bereiten Dokumente in dieser Wissensbasis","kb.distillQueued":"Wiki-Generierungsaufgabe in Warteschlange gestellt ({count} Dokumente)","kb.distillSubmit":"Wiki generieren ({count})","kb.editChunk":"Chunk bearbeiten","kb.editChunkHint":"Beim Speichern wird der Chunk automatisch neu eingebettet und neu indiziert.","kb.confirmDeleteChunk":"Diesen Chunk löschen? Seine Vektor-/Volltextindizes werden entfernt; das Löschen eines Parent-Chunks löscht auch seine Child-Chunks.","kb.chunkUpdated":"Chunk aktualisiert (neu indiziert)","kb.chunkDeleted":"Chunk gelöscht (inkl. Index)","kb.updatedAt":"Aktualisiert","kb.jobHistory":"Verarbeitungsprotokoll","kb.jobAttempts":"Versuche","kb.noJobs":"Keine Verarbeitungsprotokolle","kb.updated":"Wissensbasis aktualisiert","kb.created":"Wissensbasis erstellt","kb.vectorBackend":"Vektor-Backend","kb.enabledOn":"Aktiviert","kb.enabledOff":"Deaktiviert","kb.slug":"Slug","kb.kindDoc":"Dokument-Basis (mit Wiki)","kb.kindFaq":"FAQ-Basis","kb.selectKb":"Wissensbasis wählen","kb.selectKbDesc":"Oben wählen oder auf der Übersicht anlegen.","kb.selectPlaceholder":"Wissensbasis wählen","kb.allKbs":"Alle Wissensbasen","kb.allDocs":"Alle Dokumente","kb.progress":"Fortschritt","kb.partialParsed":"Teilweise geparst","kb.pagesCol":"Seiten","kb.imagesCol":"Bilder","kb.pageCol":"S.","kb.parseEngine":"Parse-Engine","kb.parseEngineBuiltin":"Eingebaut (Null-Abhängigkeit)","kb.parseEngineDocreader":"docreader-Dienst (hochwertige PDF-Bilder/Scans)","kb.parseEngineHint":"PDF-Bilder, Scans und Layouttreue brauchen den docreader-Dienst; ohne URL automatischer Fallback auf eingebaut","kb.noImages":"Keine Bilder","kb.noImagesDesc":"Aus Dokumenten extrahierte Bilder erscheinen hier, sobald Erkennung aktiviert ist.","kb.recognition":"Erkennung","kb.imagePreview":"Vorschau","kb.imageCaption":"Beschreibung","kb.imageOcr":"OCR-Text","kb.imageStatus.pending":"Ausstehend","kb.imageStatus.done":"Erkannt","kb.imageStatus.failed":"Fehlgeschlagen","kb.imageStatus.skipped":"Übersprungen","kb.createdAtCol":"Erstellt","kb.imagePreviewUnavailable":"Vorschau nicht verfügbar","kb.imageThumb":"Mini","kb.imageContent":"Inhalt","kb.zoomIn":"Vergrößern","kb.zoomOut":"Verkleinern","kb.zoomReset":"Zurücksetzen","kb.reader":"Leseansicht","kb.readerEmpty":"Keine geparsten Blöcke","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Seite unbekannt","kb.upload":"Dokument hochladen","kb.uploadOk":"Hochgeladen, Analyse wartet","kb.uploadFailed":"Upload fehlgeschlagen","kb.online":"Online erfassen","kb.onlineOk":"Gespeichert, verarbeitet","kb.onlineFailed":"Speichern fehlgeschlagen","kb.noDocs":"Keine Dokumente","kb.noDocsDesc":"Dateien hochladen oder Markdown erfassen.","kb.source":"Quelle","kb.noChunks":"Keine Chunks","kb.noChunksDesc":"Über-/Unter-Chunks anzeigen, klicken für Volltext","kb.breadcrumb":"Chunks","kb.embedded":"Vektorisiert","kb.notEmbedded":"Nicht vektorisiert","kb.bytes":"Bytes","kb.vectorCol":"Vektor","kb.backToDocs":"Zurück zu den Dokumenten","kb.chunkCount":"Chunks","kb.reparse":"Erneut verarbeitet","kb.reparseFailed":"Fehlgeschlagen","kb.confirmDelete":"Dokument „{title}“ löschen? Chunks, Vektor-/Volltextindex und die Originaldatei werden endgültig gelöscht.","kb.deleted":"Gelöscht (inkl. Index)","kb.mdTitle":"Titel","kb.mdContent":"Inhalt (Markdown; # gliedert)","kb.status.pending":"Ausstehend","kb.status.parsing":"Analysiert","kb.status.chunking":"Zerlegt","kb.status.indexing":"Indizierung","kb.status.embedding":"Einbettung","kb.status.ready":"Bereit","kb.status.failed":"Fehlgeschlagen","kb.status.stale":"Veraltet","kb.sample":"Beispiel-Markdown (≤64 KB, nur Vorschau)","kb.runPreview":"Vorschau starten","kb.running":"Zerlege…","kb.parent":"Parent","kb.child":"Child","kb.parents":"Parents","kb.children":"Children","kb.total":"Gesamt","kb.chars":"Zeichen","kb.askLabel":"Frage (einmalig; leer = alle)","kb.stream":"Streaming (SSE)","kb.ask":"Fragen","kb.stop":"Stopp","kb.references":"Referenzen","kb.wikiNoPages":"Keine Wiki-Seiten","kb.wikiNoPagesDesc":"Destillierte Entwürfe erscheinen hier zur Prüfung.","kb.publish":"Veröffentlichen (indiziert)","kb.approveOk":"Veröffentlicht und indiziert","kb.reject":"Ablehnen und archivieren","kb.rejected":"Archiviert","kb.saveOk":"Gespeichert (indiziert automatisch)","kb.noVersions":"Noch keine Versionen.","kb.diffCurrent":"Mit aktuell vergleichen","kb.rollback":"Zurücksetzen","kb.rollbackOk":"Zurückgesetzt (vorheriger Stand gesichert)","kb.diffTitle":"Zeilenvergleich (rot/gelöscht, grün/ neu)","kb.newFaq":"Neue FAQ","kb.faqCreated":"Erstellt und indiziert","kb.stdQuestion":"Standardfrage","kb.similarCount":"Ähnliche","kb.hits":"Treffer","kb.toggleOk":"Umgeschaltet (Index aktualisiert)","kb.similarLabel":"Ähnliche Fragen (eine pro Zeile)","kb.answersLabel":"Antworten (eine pro Zeile)","kb.noFaqs":"Keine FAQs","kb.noFaqsDesc":"Manuell oder aus Wissenslücken.","kb.gapsIntro":"Aggregierte unbeantwortete Fragen — Entwürfe werden geprüft.","kb.diag.allKinds":"Alle Arten","kb.diag.allStatuses":"Alle Status","kb.diag.docFilter":"Nach Dokument-ID filtern","kb.diag.total":"{n} Läufe","kb.diag.noRuns":"Noch keine Läufe","kb.diag.noRunsDesc":"Jede KB-Pipeline-Ausführung (Ingest/Fragen/Suche…) wird hier aufgezeichnet.","kb.traceToggle":"Trace","kb.tracePanel":"Pipeline-Trace","kb.logId":"Log-ID","kb.diag.runs":"Läufe","kb.diag.checkup":"Check-up","kb.diag.health":"Zustand","kb.diag.checkupIntro":"Bedarfs-Consistency-Scan (10s Cache).","kb.diag.healthIntro":"Komponenten-Zustand; Standard-Sonde kostet nichts.","kb.diag.embedProbe":"Embed-Smoke-Test","kb.diag.r1":"Verlorene Events (pending ohne Job)","kb.diag.r2":"Feststeckende Dokumente","kb.diag.r3":"Fehlgeschlagene Docs","kb.diag.r4":"Unvollständig (Embeddings fehlen)","kb.diag.r5":"Vektor-Abweichung","kb.diag.r6":"Tote KB-Jobs","kb.diag.r7":"Feststeckende Läufe","kb.diag.kind":"Art","kb.diag.status":"Status","kb.diag.trigger":"Quelle","kb.diag.attempt":"Versuch","kb.diag.latency":"Latenz","kb.diag.error":"Fehler","kb.diag.created":"Zeit","kb.diag.prev":"Zurück","kb.diag.next":"Weiter","kb.diag.detail":"Laufdetails","kb.diag.agent":"Agent","kb.diag.session":"Sitzung","kb.diag.configSnapshot":"Konfigurations-Snapshot","kb.diag.stages":"Phasen","kb.diag.noStages":"Keine Phasen aufgezeichnet","kb.noGaps":"Keine Wissenslücken","kb.noGapsDesc":"Alle Fragen sind abgedeckt.","kb.freq":"Anzahl","kb.draftFaq":"FAQ-Entwurf","kb.drafted":"Entwurf erstellt (inaktiv) — in FAQs prüfen","kb.docsPage":"Dokumente","kb.title":"Titel","kb.versions":"Versionen","kb.edit":"Bearbeiten","kb.operations":"Aktionen","kb.state":"Status","kb.allStatus":"Alle","kb.type":"Typ","kb.embeddingModel":"Embedding-Modell","kb.embeddingDim":"Vektor-Dimension","kb.modelHint":"Nach Erstellung unveränderlich (leer = globaler Standard)","kb.modelCol":"Modell","kb.modelRequired":"Pflicht: ausfüllen oder globale Defaults setzen (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Rerank-Modell","kb.rerankModelOptional":"Optional: globaler Default wenn leer (Rerank aus, wenn nicht konfiguriert)","kb.rerankWindow":"Rerank-Fenster","kb.rerankThreshold":"Rerank-Schwellenwert","kb.rerankInherit":"Globalen Default erben","kb.rerankHint":"Leere Fenster/Schwelle erben die globalen Defaults (RAISFAST_KB_RERANK_*); ohne konfiguriertes Modell läuft S5 im Passthrough","kb.rerankInvalid":"Fenster muss eine positive Ganzzahl sein; Schwelle zwischen 0–1","kb.chatModel":"Generierungsmodell","kb.chatModelOptional":"Optional: globaler Default (RAISFAST_KB_CHAT_MODEL) → Mandanten-Default","kb.chatModelHint":"Modell der S9-Antwortgenerierung; leeren = globaler Default","kb.distillModel":"Destillationsmodell","kb.distillModelOptional":"Optional: globaler Default (RAISFAST_KB_DISTILL_MODEL) → Mandanten-Default","kb.distillModelHint":"Modell der Wiki-Destillation (Extraktion + Entwurf); leeren = globaler Default","kb.imageRecognition":"Bilderkennung","kb.imageModel":"Erkennungsmodell","kb.imageModelOptional":"Vision-fähiges Modell wählen; sonst globaler Default (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Beschreibungssprache","kb.imageLanguagePlaceholder":"z. B. zh / de; leer = Dokumentsprache","kb.imageInstructions":"Eigene Anweisungen","kb.imageInstructionsPlaceholder":"Zusätzliche Hinweise zur Bildauswertung (optional)","kb.imageHint":"Aktiviert VLM-Caption + OCR für Dokumentbilder; Ergebnisse sind durchsuchbar","kb.descPlaceholder":"Zweck dieser Wissensbasis (optional)","jobs.attempts":"Versuche","jobs.runAfter":"Geplant","jobs.updatedAt":"Aktualisiert","jobs.error":"Fehler","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Keine Jobs","jobs.noJobsDesc":"Die Hintergrund-Job-Warteschlange ist leer.","jobs.cleanup":"Aufräumen","jobs.cleanupDesc":"Löscht abgeschlossene/fehlerhafte (completed/dead) Jobs älter als 7 Tage. Kann nicht rückgängig gemacht werden.","jobs.cleanupDone":"{n} Jobs bereinigt","jobs.confirmDelete":"Job {type} löschen? Der Eintrag wird aus der Warteschlange entfernt.","jobs.retried":"Job erneut eingereiht","jobs.deleted":"Job gelöscht","jobs.actionFailed":"Aktion fehlgeschlagen"},WC={"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.jobs":"File de tâches","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.listView":"Vue liste","common.cardView":"Vue cartes","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.refresh":"Rafraîchir","common.all":"Tout","common.draft":"Brouillon","common.published":"Publié","common.active":"Actif","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","layout.ai":"IA","layout.aiAgents":"Agents","layout.aiPlayground":"Débogage chat","aiAgents.newAgent":"Nouvel agent","aiAgents.noAgents":"Aucun agent pour le moment","aiAgents.emptyHint":"Créez un agent, configurez son modèle et son prompt système, puis démarrez la conversation.","aiAgents.name":"Nom","aiAgents.namePlaceholder":"ex. Assistant de contenu","aiAgents.nameImmutable":"Le nom ne peut pas être modifié après création","aiAgents.provider":"Fournisseur","aiAgents.providerHint":"Endpoint compatible OpenAI (DeepSeek/OpenRouter/Ollama) ou Anthropic","aiAgents.model":"Modèle","aiAgents.systemPrompt":"Prompt système","aiAgents.systemPromptPlaceholder":"Vous êtes un assistant utile…","aiAgents.tools":"Liste d'outils autorisés","aiAgents.allowAll":"Tout autoriser","aiAgents.allowAllHint":"Cet agent peut appeler tous les outils de domaine enregistrés sur le serveur.","aiAgents.memoryToolsHint":"Les outils mémoire (memory_store/recall/forget) sont toujours disponibles et n'ont pas besoin d'être listés.","aiAgents.customToolPlaceholder":"Ajouter un outil personnalisé (ex. MCP)…","aiAgents.addTool":"Ajouter","aiAgents.toolGroup.content":"Contenu","aiAgents.toolGroup.system":"Système","aiAgents.toolGroup.skills":"Compétences","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Fichiers","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Connaissance","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Autres","aiAgents.kbBinding":"Bases de connaissances","aiAgents.kbEmpty":"Aucune base de connaissances active.","aiAgents.kbBindingHint":"Sélectionnez individuellement chaque base de connaissances à monter ; sans sélection, l'outil knowledge_search n'est pas monté. Avec l'outil activé, l'agent interroge les bases sélectionnées et cite ses sources ; les kb_ids passés en appel ne peuvent que restreindre cette portée.","aiAgents.memory":"Mémoire à long terme","aiAgents.memoryHint":"Si activé, les souvenirs principaux de l'agent sont injectés à chaque tour (isolés par utilisateur).","aiAgents.temperature":"Température","aiAgents.temperaturePlaceholder":"Vide = valeur par défaut du fournisseur","aiAgents.maxIterations":"Itérations max.","aiAgents.maxIterationsHint":"Itérations moteur maximales par tour (cycles d'appels d'outils).","aiAgents.params":"Paramètres supplémentaires (JSON)","aiAgents.paramsInvalid":"JSON invalide","aiAgents.paramsHint":"skill_bundles est géré par le contrôle Skills activés ci-dessus ; toute valeur saisie ici est écrasée.","aiAgents.allTools":"Tous","aiAgents.noTools":"Aucun","aiAgents.updatedAt":"Mis à jour","aiAgents.usage":"Usage","aiAgents.playground":"Débogage","aiAgents.created":"Agent créé","aiAgents.createFailed":"Échec de la création de l'agent","aiAgents.updated":"Agent mis à jour","aiAgents.updateFailed":"Échec de la mise à jour de l'agent","aiAgents.deleted":"Agent supprimé","aiAgents.deleteFailed":"Échec de la suppression de l'agent","aiAgents.confirmDelete":"Supprimer {name} ? Ses sessions, messages et souvenirs seront définitivement supprimés.","aiUsage.totalTurns":"Tours totaux","aiUsage.inputTokens":"Tokens d'entrée","aiUsage.outputTokens":"Tokens de sortie","aiUsage.cacheReadTokens":"Tokens en cache","aiUsage.toolCalls":"Appels d'outils","aiUsage.dailyTitle":"Usage quotidien","aiUsage.noData":"Aucun usage sur cette période","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"Sélectionner un agent","aiPlayground.sessions":"Sessions","aiPlayground.sessionDeleted":"Session supprimée","aiPlayground.sessionDeleteFailed":"Échec de la suppression de la session","aiPlayground.deleteSessionDesc":"La session et tous ses messages seront supprimés. Action irréversible.","aiPlayground.newSession":"Nouvelle session","aiPlayground.noSessions":"Aucune session — l'envoi d'un message en crée une.","aiPlayground.noAgents":"Créez d'abord un agent","aiPlayground.emptySession":"Sélectionnez ou créez une session pour commencer","aiPlayground.thinking":"Processus de réflexion","aiPlayground.busy":"Tour en cours…","aiPlayground.inputPlaceholder":"Saisissez un message et appuyez sur Entrée…","aiPlayground.stop":"Arrêter","aiPlayground.sessionFailed":"Échec de la création de la session","aiPlayground.turnFailed":"Le tour a échoué","aiMemory.title":"Gestion de la mémoire","aiMemory.searchPlaceholder":"Rechercher par clé ou contenu…","aiMemory.allCategories":"Toutes les catégories","aiMemory.add":"Ajouter un souvenir","aiMemory.addTitle":"Ajouter un souvenir","aiMemory.editTitle":"Modifier le souvenir","aiMemory.dialogHint":"Déduplication par clé : si (agent, utilisateur, clé) existe déjà, le contenu est mis à jour.","aiMemory.key":"Clé","aiMemory.keyImmutable":"La clé est l'identité unique du souvenir et ne peut pas changer après création","aiMemory.content":"Contenu","aiMemory.category":"Catégorie","aiMemory.categoryHint":"core est injecté et géré par budget ; daily est uniquement un journal, jamais injecté","aiMemory.importance":"Importance","aiMemory.user":"Utilisateur","aiMemory.userOptional":"Utilisateur propriétaire (facultatif)","aiMemory.userPlaceholder":"Vide = niveau plateforme","aiMemory.pinned":"Épinglé (exempté de l'éviction par budget)","aiMemory.noMemories":"Aucun souvenir","aiMemory.emptyHint":"Les souvenirs s'accumulent dans les conversations de l'agent, ou ajoutez-en un manuellement.","aiMemory.saved":"Souvenir enregistré","aiMemory.saveFailed":"Échec de l'enregistrement du souvenir","aiMemory.deleted":"Souvenir supprimé","aiMemory.deleteFailed":"Échec de la suppression du souvenir","aiMemory.confirmDelete":"Supprimer le souvenir {key} ? Cette action est irréversible.","layout.aiSkills":"Skills","layout.aiTools":"Outils IA","aiTools.title":"Catalogue d'outils IA","aiTools.tabBuiltin":"Outils intégrés","aiTools.category":"Catégorie","aiTools.nameDesc":"Nom / Description","aiTools.usedByCol":"Agents utilisateurs","aiTools.desc":"Outils de domaine enregistrés par le backend (nom/description/catégorie définis par le backend), groupés par catégorie.","aiTools.usedBy":"utilisé par {count} agents","aiTools.empty":"Aucun outil","aiTools.emptyDesc":"Aucun outil de domaine enregistré par le backend.","aiSkills.new":"Nouveau skill","aiSkills.newTitle":"Nouveau skill","aiSkills.editTitle":"Modifier le skill","aiSkills.dialogHint":"Les skills sont stockés en SKILL.md (frontmatter + corps) ; les agents les référencent via leur liste d'activation.","aiSkills.name":"Nom","aiSkills.nameHint":"Nom du répertoire : lettres/chiffres/-/_, max 64 caractères","aiSkills.layer":"Niveau","aiSkills.layerHint":"tenant = tenant actuel uniquement ; platform = tous les tenants (platform gagne en cas de conflit de nom)","aiSkills.description":"Description","aiSkills.descriptionPlaceholder":"Quand utiliser ce skill (pour la découverte par le modèle)","aiSkills.instructions":"Instructions (Markdown)","aiSkills.tools":"Outils composés","aiSkills.toolsPlaceholder":"Saisissez un nom d'outil et Entrée, ex. list_posts","aiSkills.disallowedTools":"Outils exclus","aiSkills.always":"Toujours inline","aiSkills.alwaysHint":"Instructions complètes même en mode Compact (défaut : métadonnées + read_skill à la demande)","aiSkills.noSkills":"Aucun skill","aiSkills.emptyHint":"Un skill est un répertoire SKILL.md avec instructions, injecté dans le prompt système de l'agent une fois activé.","aiSkills.saved":"Skill enregistré","aiSkills.saveFailed":"Échec de l'enregistrement du skill","aiSkills.deleted":"Skill supprimé","aiSkills.deleteFailed":"Échec de la suppression du skill","aiSkills.confirmDelete":"Supprimer le skill {name} ? Tout le répertoire (scripts/ressources inclus) est supprimé.","aiSkills.bundles":"Skills activés","aiSkills.bundlesAllHint":"Cet agent active tous les skills à portée.","aiSkills.bundlesEmpty":"Aucun skill disponible — créez-en un sur la page Skills.","aiSkills.bundlesHint":"Choisissez les skills injectés dans le prompt système de l'agent ; les répertoires sont rescannés à chaque tour.","layout.aiSessions":"Conversations","aiSessions.title":"Titre","aiSessions.agent":"Agent","aiSessions.user":"Utilisateur","aiSessions.messages":"Messages","aiSessions.lastActive":"Dernière activité","aiSessions.allAgents":"Tous les agents","aiSessions.allStatuses":"Tous les statuts","aiSessions.noSessions":"Aucune conversation","aiSessions.emptyHint":"Les conversations apparaissent ici dès que des utilisateurs lancent des tours dans les sessions d'agent.","aiSessions.untitled":"(sans titre)","aiSessions.view":"Voir les messages","aiSessions.noMessages":"Aucun message dans cette session","aiSessions.deleted":"Conversation supprimée","aiSessions.deleteFailed":"Échec de la suppression de la conversation","aiSessions.confirmDelete":`Supprimer la conversation "{title}" ? Tous ses messages sont supprimés (les souvenirs de l'agent sont conservés) ; action irréversible.`,"layout.kb":"Base de connaissances","layout.kbDocs":"Documents","layout.kbChunks":"Fragments","layout.kbImages":"Images","layout.kbChunker":"Aperçu du découpage","layout.kbPlayground":"Bac à sable QA","layout.kbWiki":"Pages Wiki","layout.kbFaqs":"FAQ","layout.kbGaps":"Lacunes","layout.kbDiagnostics":"Diagnostics","kb.new":"Nouvelle base","kb.noKb":"Aucune base","kb.noKbDesc":"Créez-en une pour importer des documents.","kb.deleteKb":"Supprimer la base","kb.confirmDeleteKb":"Supprimer la base «{name}» ? Tous ses documents, fragments, FAQ, pages wiki, index vectoriel/plein texte et fichiers originaux seront définitivement supprimés.","kb.kbDeleted":"Base supprimée (contenus et index inclus)","kb.viewChunks":"Voir les fragments","kb.reparseAction":"Retraiter","kb.thinking":"Réflexion…","kb.viewFullRef":"Voir le texte complet","kb.distillWiki":"Générer le Wiki","kb.distillWikiHint":"Tâche LLM en arrière-plan : distille des brouillons de pages wiki depuis les documents sélectionnés ; révisez puis publiez-les dans la liste.","kb.noReadyDocs":"Aucun document prêt dans cette base","kb.distillQueued":"Tâche de génération Wiki mise en file d'attente ({count} documents)","kb.distillSubmit":"Générer le Wiki ({count})","kb.editChunk":"Modifier le fragment","kb.editChunkHint":"L'enregistrement ré-encastre et ré-indexe automatiquement le fragment.","kb.confirmDeleteChunk":"Supprimer ce fragment ? Ses index vectoriel/plein texte seront retirés ; supprimer un parent supprime aussi ses enfants.","kb.chunkUpdated":"Fragment mis à jour (ré-indexé)","kb.chunkDeleted":"Fragment supprimé (index inclus)","kb.updatedAt":"Mis à jour","kb.jobHistory":"Historique de traitement","kb.jobAttempts":"Tentatives","kb.noJobs":"Aucun enregistrement de traitement","kb.updated":"Base de connaissances mise à jour","kb.created":"Base créée","kb.vectorBackend":"Backend vectoriel","kb.enabledOn":"Activé","kb.enabledOff":"Désactivé","kb.slug":"Slug","kb.kindDoc":"Base documents (wiki inclus)","kb.kindFaq":"Base FAQ","kb.selectKb":"Sélectionner une base","kb.selectKbDesc":"Choisissez ci-dessus ou créez-la.","kb.selectPlaceholder":"Sélectionner","kb.allKbs":"Toutes les bases de connaissances","kb.allDocs":"Tous les documents","kb.progress":"Progression","kb.partialParsed":"Analyse partielle","kb.pagesCol":"Pages","kb.imagesCol":"Images","kb.pageCol":"p.","kb.parseEngine":"Moteur d'analyse","kb.parseEngineBuiltin":"Intégré (zéro dépendance)","kb.parseEngineDocreader":"Service docreader (images/scan PDF haute fidélité)","kb.parseEngineHint":"Images PDF, scans et fidélité de mise en page nécessitent le service docreader ; retombe sur l'intégré si l'URL n'est pas configurée","kb.noImages":"Aucune image","kb.noImagesDesc":"Les images extraites des documents apparaissent ici une fois la reconnaissance activée.","kb.recognition":"Reconnaissance","kb.imagePreview":"Aperçu","kb.imageCaption":"Légende","kb.imageOcr":"Texte OCR","kb.imageStatus.pending":"En attente","kb.imageStatus.done":"Reconnue","kb.imageStatus.failed":"Échec","kb.imageStatus.skipped":"Ignorée","kb.createdAtCol":"Créée","kb.imagePreviewUnavailable":"Aperçu indisponible","kb.imageThumb":"Vignette","kb.imageContent":"Contenu","kb.zoomIn":"Agrandir","kb.zoomOut":"Réduire","kb.zoomReset":"Réinitialiser","kb.reader":"Vue lecture","kb.readerEmpty":"Aucun bloc à afficher","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Page inconnue","kb.upload":"Importer un document","kb.uploadOk":"Importé, analyse en file","kb.uploadFailed":"Échec de l'import","kb.online":"Saisie en ligne","kb.onlineOk":"Soumis, en traitement","kb.onlineFailed":"Échec de l'envoi","kb.noDocs":"Aucun document","kb.noDocsDesc":"Importer ou rédiger en Markdown.","kb.source":"Source","kb.noChunks":"Aucun fragment","kb.noChunksDesc":"Blocs parent/enfant — cliquez pour voir le contenu complet","kb.breadcrumb":"Fragments","kb.embedded":"Vectorisé","kb.notEmbedded":"Non vectorisé","kb.bytes":"octets","kb.vectorCol":"Vecteur","kb.backToDocs":"Retour aux documents","kb.chunkCount":"Chunks","kb.reparse":"Retraité","kb.reparseFailed":"Échec","kb.confirmDelete":"Supprimer le document «{title}» ? Ses fragments, index vectoriel/plein texte et le fichier original seront définitivement supprimés.","kb.deleted":"Supprimé (index inclus)","kb.mdTitle":"Titre","kb.mdContent":"Contenu (Markdown; # segmente)","kb.status.pending":"En attente","kb.status.parsing":"Analyse","kb.status.chunking":"Découpage","kb.status.indexing":"Indexation","kb.status.embedding":"Embedding","kb.status.ready":"Prêt","kb.status.failed":"Échoué","kb.status.stale":"Obsolète","kb.sample":"Exemple Markdown (≤64 Ko, aperçu)","kb.runPreview":"Lancer l'aperçu","kb.running":"Découpage…","kb.parent":"Parent","kb.child":"Enfant","kb.parents":"Parents","kb.children":"Enfants","kb.total":"Total","kb.chars":"car.","kb.askLabel":"Question (tour unique; vide = tout)","kb.stream":"Streaming (SSE)","kb.ask":"Demander","kb.stop":"Arrêter","kb.references":"Références","kb.wikiNoPages":"Aucune page","kb.wikiNoPagesDesc":"Les brouillons distillés apparaissent ici.","kb.publish":"Publier (indexé)","kb.approveOk":"Publié et indexé","kb.reject":"Rejeter et archiver","kb.rejected":"Archivé","kb.saveOk":"Enregistré (réindexé auto)","kb.noVersions":"Aucune version.","kb.diffCurrent":"Diff avec l'actuel","kb.rollback":"Restaurer","kb.rollbackOk":"Restauré (contenu sauvegardé)","kb.diffTitle":"Diff ligne (rouge=supprimé, vert=ajouté)","kb.newFaq":"Nouvelle FAQ","kb.faqCreated":"Créée et indexée","kb.stdQuestion":"Question standard","kb.similarCount":"Similaires","kb.hits":"Hits","kb.toggleOk":"Basculé (index mis à jour)","kb.similarLabel":"Questions similaires (une par ligne)","kb.answersLabel":"Réponses (une par ligne)","kb.noFaqs":"Aucune FAQ","kb.noFaqsDesc":"Créer manuellement ou depuis les lacunes.","kb.gapsIntro":"Questions non couvertes — brouillons à valider.","kb.diag.allKinds":"Tous les types","kb.diag.allStatuses":"Tous les statuts","kb.diag.docFilter":"Filtrer par ID de document","kb.diag.total":"{n} exécutions","kb.diag.noRuns":"Aucune exécution","kb.diag.noRunsDesc":"Chaque exécution du pipeline KB (ingestion/question/recherche…) est enregistrée ici.","kb.traceToggle":"Trace","kb.tracePanel":"Trace du pipeline","kb.logId":"ID de log","kb.diag.runs":"Exécutions","kb.diag.checkup":"Bilan","kb.diag.health":"Santé","kb.diag.checkupIntro":"Scan de cohérence à la demande (cache 10 s).","kb.diag.healthIntro":"Santé des composants ; sonde par défaut gratuite.","kb.diag.embedProbe":"Sonde embed","kb.diag.r1":"Événements perdus (pending sans job)","kb.diag.r2":"Documents bloqués","kb.diag.r3":"Docs en échec","kb.diag.r4":"Incomplets (embeddings manquants)","kb.diag.r5":"Dérive vectorielle","kb.diag.r6":"Jobs KB morts","kb.diag.r7":"Exécutions bloquées","kb.diag.kind":"Type","kb.diag.status":"Statut","kb.diag.trigger":"Source","kb.diag.attempt":"Tentative","kb.diag.latency":"Latence","kb.diag.error":"Erreur","kb.diag.created":"Heure","kb.diag.prev":"Préc.","kb.diag.next":"Suiv.","kb.diag.detail":"Détail de l'exécution","kb.diag.agent":"Agent","kb.diag.session":"Session","kb.diag.configSnapshot":"Instantané de config","kb.diag.stages":"Étapes","kb.diag.noStages":"Aucune étape enregistrée","kb.noGaps":"Aucune lacune","kb.noGapsDesc":"Toutes les questions sont couvertes.","kb.freq":"Occurrences","kb.draftFaq":"Brouillon FAQ","kb.drafted":"Brouillon créé (désactivé) — à valider","kb.docsPage":"Documents","kb.title":"Titre","kb.versions":"Versions","kb.edit":"Modifier","kb.operations":"Actions","kb.state":"Statut","kb.allStatus":"Toutes","kb.type":"Type","kb.embeddingModel":"Modèle d'embedding","kb.embeddingDim":"Dimension des vecteurs","kb.modelHint":"Immuable après création (vide = défaut global)","kb.modelCol":"Modèle","kb.modelRequired":"Requis : saisir ou configurer les défauts globaux (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Modèle de rerank","kb.rerankModelOptional":"Optionnel : global par défaut si vide (rerank désactivé sinon)","kb.rerankWindow":"Fenêtre de rerank","kb.rerankThreshold":"Seuil de rerank","kb.rerankInherit":"Hériter du global","kb.rerankHint":"Fenêtre/seuil vides héritent des défauts globaux (RAISFAST_KB_RERANK_*) ; sans modèle configuré, S5 passe directement","kb.rerankInvalid":"Fenêtre : entier positif ; seuil entre 0–1","kb.chatModel":"Modèle de génération","kb.chatModelOptional":"Optionnel : défaut global (RAISFAST_KB_CHAT_MODEL) → défaut du tenant","kb.chatModelHint":"Modèle utilisé pour la génération S9 ; vider revient au défaut global","kb.distillModel":"Modèle de distillation","kb.distillModelOptional":"Optionnel : défaut global (RAISFAST_KB_DISTILL_MODEL) → défaut du tenant","kb.distillModelHint":"Modèle utilisé pour la distillation wiki (extraction + rédaction) ; vider revient au défaut global","kb.imageRecognition":"Reconnaissance d'images","kb.imageModel":"Modèle de reconnaissance","kb.imageModelOptional":"Choisissez un modèle vision ; défaut global si vide (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Langue des descriptions","kb.imageLanguagePlaceholder":"ex. zh / fr ; vide suit la langue du document","kb.imageInstructions":"Instructions personnalisées","kb.imageInstructionsPlaceholder":"Consignes supplémentaires d'interprétation (facultatif)","kb.imageHint":"Activé : légendes VLM + OCR sur les images, consultables par la recherche","kb.descPlaceholder":"Usage de cette base (facultatif)","jobs.attempts":"Tentatives","jobs.runAfter":"Planifié","jobs.updatedAt":"Mis à jour","jobs.error":"Erreur","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Aucune tâche","jobs.noJobsDesc":"La file de tâches d'arrière-plan est vide.","jobs.cleanup":"Nettoyer","jobs.cleanupDesc":"Supprime les tâches terminées/mortes de plus de 7 jours. Irréversible.","jobs.cleanupDone":"{n} tâches nettoyées","jobs.confirmDelete":"Supprimer la tâche {type} ? L'enregistrement sera retiré de la file.","jobs.retried":"Tâche remise en file","jobs.deleted":"Tâche supprimée","jobs.actionFailed":"Échec de l'action"},KC={"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.jobs":"قائمة المهام","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.listView":"عرض القائمة","common.cardView":"عرض البطاقات","common.view":"عرض","common.back":"رجوع","common.actions":"الإجراءات","common.status":"الحالة","common.retry":"إعادة المحاولة","common.previous":"السابق","common.next":"التالي","common.pageOf":"صفحة {page} من {total}","common.noData":"لا توجد بيانات","common.refresh":"تحديث","common.all":"الكل","common.draft":"مسودة","common.published":"منشور","common.active":"نشط","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","layout.ai":"الذكاء الاصطناعي","layout.aiAgents":"إدارة الوكلاء","layout.aiPlayground":"تجربة المحادثة","aiAgents.newAgent":"وكيل جديد","aiAgents.noAgents":"لا يوجد وكلاء بعد","aiAgents.emptyHint":"أنشئ وكيلًا، واضبط النموذج وموجه النظام، ثم ابدأ المحادثة.","aiAgents.name":"الاسم","aiAgents.namePlaceholder":"مثال: مساعد المحتوى","aiAgents.nameImmutable":"لا يمكن تغيير الاسم بعد الإنشاء","aiAgents.provider":"المزوّد","aiAgents.providerHint":"نقطة نهاية متوافقة مع OpenAI (DeepSeek/OpenRouter/Ollama) أو Anthropic","aiAgents.model":"النموذج","aiAgents.systemPrompt":"موجه النظام","aiAgents.systemPromptPlaceholder":"أنت مساعد مفيد…","aiAgents.tools":"قائمة الأدوات المسموح بها","aiAgents.allowAll":"السماح بالكل","aiAgents.allowAllHint":"يمكن لهذا الوكيل استدعاء جميع أدوات النطاق المسجلة على الخادم.","aiAgents.memoryToolsHint":"أدوات الذاكرة (memory_store/recall/forget) متاحة دائمًا ولا تحتاج إلى إضافتها للقائمة.","aiAgents.customToolPlaceholder":"إضافة اسم أداة مخصصة (مثل أدوات MCP)…","aiAgents.addTool":"إضافة","aiAgents.toolGroup.content":"المحتوى","aiAgents.toolGroup.system":"النظام","aiAgents.toolGroup.skills":"المهارات","aiAgents.toolGroup.script":"البرمجة النصية","aiAgents.toolGroup.files":"الملفات","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"المعرفة","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"أخرى","aiAgents.kbBinding":"قواعد المعرفة","aiAgents.kbEmpty":"لا توجد قواعد معرفة نشطة.","aiAgents.kbBindingHint":"يجب تحديد كل قاعدة معرفة لتثبيتها على حدة؛ دون أي تحديد، لا تُثبَّت أداة knowledge_search. عند تفعيل الأداة، يبحث الوكيل في القواعد المحددة ويستشهد بالمصادر؛ لا يمكن لـ kb_ids في الاستدعاءات إلا تضييق هذا النطاق.","aiAgents.memory":"الذاكرة طويلة المدى","aiAgents.memoryHint":"عند التفعيل، تُدرج ذكريات الوكيل الأساسية في كل دورة (معزولة لكل مستخدم).","aiAgents.temperature":"درجة الحرارة","aiAgents.temperaturePlaceholder":"فارغ = القيمة الافتراضية للمزوّد","aiAgents.maxIterations":"أقصى تكرارات","aiAgents.maxIterationsHint":"الحد الأقصى لتكرارات المحرك لكل دورة (جولات استدعاء الأدوات).","aiAgents.params":"معلمات إضافية (JSON)","aiAgents.paramsInvalid":"JSON غير صالح","aiAgents.paramsHint":"يُدار skill_bundles عبر عنصر «المهارات المفعلة» أعلاه؛ أي قيمة تُكتب هنا ستُستبدل.","aiAgents.allTools":"الكل","aiAgents.noTools":"لا شيء","aiAgents.updatedAt":"آخر تحديث","aiAgents.usage":"الاستخدام","aiAgents.playground":"التجربة","aiAgents.created":"تم إنشاء الوكيل","aiAgents.createFailed":"فشل إنشاء الوكيل","aiAgents.updated":"تم تحديث الوكيل","aiAgents.updateFailed":"فشل تحديث الوكيل","aiAgents.deleted":"تم حذف الوكيل","aiAgents.deleteFailed":"فشل حذف الوكيل","aiAgents.confirmDelete":"حذف {name}؟ ستُحذف جلساته ورسائله وذكرياته نهائيًا.","aiUsage.totalTurns":"إجمالي الدورات","aiUsage.inputTokens":"رموز الإدخال","aiUsage.outputTokens":"رموز الإخراج","aiUsage.cacheReadTokens":"رموز التخزين المؤقت","aiUsage.toolCalls":"استدعاءات الأدوات","aiUsage.dailyTitle":"الاستخدام اليومي","aiUsage.noData":"لا استخدام في هذه الفترة","aiPlayground.agent":"الوكيل","aiPlayground.selectAgent":"اختر وكيلًا","aiPlayground.sessions":"الجلسات","aiPlayground.sessionDeleted":"تم حذف الجلسة","aiPlayground.sessionDeleteFailed":"فشل حذف الجلسة","aiPlayground.deleteSessionDesc":"سيتم حذف الجلسة وجميع رسائلها. لا يمكن التراجع عن هذا الإجراء.","aiPlayground.newSession":"جلسة جديدة","aiPlayground.noSessions":"لا جلسات — إرسال رسالة ينشئ واحدة.","aiPlayground.noAgents":"أنشئ وكيلًا أولاً","aiPlayground.emptySession":"اختر أو أنشئ جلسة للبدء","aiPlayground.thinking":"عملية التفكير","aiPlayground.busy":"الدورة قيد التنفيذ…","aiPlayground.inputPlaceholder":"اكتب رسالة واضغط Enter…","aiPlayground.stop":"إيقاف","aiPlayground.sessionFailed":"فشل إنشاء الجلسة","aiPlayground.turnFailed":"فشلت الدورة","aiMemory.title":"إدارة الذاكرة","aiMemory.searchPlaceholder":"ابحث بالمفتاح أو المحتوى…","aiMemory.allCategories":"كل الفئات","aiMemory.add":"إضافة ذكرى","aiMemory.addTitle":"إضافة ذكرى","aiMemory.editTitle":"تعديل الذكرى","aiMemory.dialogHint":"إزالة التكرار بالمفتاح: إذا وُجد صف (الوكيل، المستخدم، المفتاح) نفسه، يُحدَّث المحتوى.","aiMemory.key":"المفتاح","aiMemory.keyImmutable":"المفتاح هو الهوية الفريدة للذكرى ولا يمكن تغييره بعد الإنشاء","aiMemory.content":"المحتوى","aiMemory.category":"الفئة","aiMemory.categoryHint":"core تُدرج وتُدار بالميزانية؛ daily سجل فقط ولا تُدرج أبدًا","aiMemory.importance":"الأهمية","aiMemory.user":"المستخدم","aiMemory.userOptional":"المستخدم المالك (اختياري)","aiMemory.userPlaceholder":"فارغ = مستوى المنصة","aiMemory.pinned":"مثبتة (معفاة من الإزالة بالميزانية)","aiMemory.noMemories":"لا ذكريات","aiMemory.emptyHint":"تتراكم الذكريات من محادثات الوكيل، أو أضف واحدة يدويًا.","aiMemory.saved":"تم حفظ الذكرى","aiMemory.saveFailed":"فشل حفظ الذكرى","aiMemory.deleted":"تم حذف الذكرى","aiMemory.deleteFailed":"فشل حذف الذكرى","aiMemory.confirmDelete":"حذف الذكرى {key}؟ لا يمكن التراجع عن هذا الإجراء.","layout.aiSkills":"المهارات","layout.aiTools":"أدوات الذكاء الاصطناعي","aiTools.title":"كتالوج أدوات الذكاء الاصطناعي","aiTools.tabBuiltin":"الأدوات المدمجة","aiTools.category":"الفئة","aiTools.nameDesc":"الاسم / الوصف","aiTools.usedByCol":"عدد الوكلاء المستخدمين","aiTools.desc":"أدوات النطاق المسجلة في الواجهة الخلفية (الاسم/الوصف/الفئة محددة بالخلفية)، مجمعة حسب الفئة.","aiTools.usedBy":"يستخدمه {count} من الوكلاء","aiTools.empty":"لا توجد أدوات","aiTools.emptyDesc":"لم تسجل الواجهة الخلفية أي أدوات نطاق.","aiSkills.new":"مهارة جديدة","aiSkills.newTitle":"مهارة جديدة","aiSkills.editTitle":"تعديل المهارة","aiSkills.dialogHint":"تُخزَّن المهارات كـ SKILL.md (مقدمة + متن)؛ يشير إليها الوكلاء عبر قائمة التفعيل.","aiSkills.name":"الاسم","aiSkills.nameHint":"اسم الدليل: حروف/أرقام/-/_، بحد أقصى 64 حرفًا","aiSkills.layer":"الطبقة","aiSkills.layerHint":"tenant = المستأجر الحالي فقط؛ platform = كل المستأجرين (تتقدم platform عند تعارض الأسماء)","aiSkills.description":"الوصف","aiSkills.descriptionPlaceholder":"متى تُستخدم هذه المهارة (لكي يكتشفها النموذج)","aiSkills.instructions":"التعليمات (Markdown)","aiSkills.tools":"الأدوات المركبة","aiSkills.toolsPlaceholder":"اكتب اسم أداة واضغط Enter، مثل list_posts","aiSkills.disallowedTools":"الأدوات المستبعدة","aiSkills.always":"تضمين دائم","aiSkills.alwaysHint":"تضمين التعليمات كاملة حتى في وضع Compact (الافتراضي: بيانات وصفية + read_skill عند الحاجة)","aiSkills.noSkills":"لا مهارات بعد","aiSkills.emptyHint":"المهارة دليل SKILL.md مع تعليمات، يُدرج في موجه النظام للوكيل عند تفعيله.","aiSkills.saved":"تم حفظ المهارة","aiSkills.saveFailed":"فشل حفظ المهارة","aiSkills.deleted":"تم حذف المهارة","aiSkills.deleteFailed":"فشل حذف المهارة","aiSkills.confirmDelete":"حذف المهارة {name}؟ يُحذف الدليل بأكمله (بما فيه scripts/الأصول).","aiSkills.bundles":"المهارات المفعلة","aiSkills.bundlesAllHint":"يفعّل هذا الوكيل كل المهارات في نطاقه.","aiSkills.bundlesEmpty":"لا مهارات متاحة بعد — أنشئ واحدة في صفحة المهارات أولًا.","aiSkills.bundlesHint":"اختر المهارات المدرجة في موجه النظام للوكيل؛ يُعاد فحص الأدلة كل دورة.","layout.aiSessions":"المحادثات","aiSessions.title":"العنوان","aiSessions.agent":"الوكيل","aiSessions.user":"المستخدم","aiSessions.messages":"الرسائل","aiSessions.lastActive":"آخر نشاط","aiSessions.allAgents":"كل الوكلاء","aiSessions.allStatuses":"كل الحالات","aiSessions.noSessions":"لا محادثات","aiSessions.emptyHint":"تظهر المحادثات هنا عندما يبدأ المستخدمون دورات في جلسات الوكلاء.","aiSessions.untitled":"(بدون عنوان)","aiSessions.view":"عرض الرسائل","aiSessions.noMessages":"لا رسائل في هذه الجلسة","aiSessions.deleted":"تم حذف المحادثة","aiSessions.deleteFailed":"فشل حذف المحادثة","aiSessions.confirmDelete":'حذف المحادثة "{title}"؟ ستُحذف كل رسائلها (تُحفظ ذكريات الوكيل) ولا يمكن التراجع.',"layout.kb":"قاعدة المعرفة","layout.kbDocs":"المستندات","layout.kbChunks":"التقطيعات","layout.kbImages":"الصور","layout.kbChunker":"معاينة التقسيم","layout.kbPlayground":"اختبار الأسئلة","layout.kbWiki":"صفحات المعرفة","layout.kbFaqs":"الأسئلة الشائعة","layout.kbGaps":"الفجوات المعرفية","layout.kbDiagnostics":"التشخيص","kb.new":"قاعدة معرفة جديدة","kb.noKb":"لا توجد قواعد معرفة","kb.noKbDesc":"أنشئ واحدة لبدء رفع المستندات.","kb.deleteKb":"حذف قاعدة المعرفة","kb.confirmDeleteKb":"حذف قاعدة المعرفة «{name}»؟ سيتم حذف جميع المستندات والتقطيعات والأسئلة الشائعة وصفحات الويكي والفهارس والملفات الأصلية نهائيًا.","kb.kbDeleted":"تم حذف قاعدة المعرفة (مع المحتوى والفهارس)","kb.viewChunks":"عرض التقطيعات","kb.reparseAction":"إعادة المعالجة","kb.thinking":"جارٍ التفكير…","kb.viewFullRef":"عرض النص الكامل","kb.distillWiki":"توليد الويكي","kb.distillWikiHint":"مهمة LLM في الخلفية: تستخلص مسودات صفحات ويكي من المستندات المحددة؛ راجعها وانشرها في القائمة بعد ذلك.","kb.noReadyDocs":"لا توجد مستندات جاهزة في هذه القاعدة","kb.distillQueued":"تمت إضافة مهمة توليد الويكي إلى قائمة الانتظار ({count} مستندًا)","kb.distillSubmit":"توليد الويكي ({count})","kb.editChunk":"تحرير التقطيعة","kb.editChunkHint":"الحفظ يعيد التوجيه المتجهي والفهرسة تلقائيًا.","kb.confirmDeleteChunk":"حذف هذه التقطيعة؟ ستُزال فهارسها المتجهية/النصية؛ وحذف تقطيعة أبوية يحذف تقطيعاتها الفرعية أيضًا.","kb.chunkUpdated":"تم تحديث التقطيعة (إعادة فهرسة)","kb.chunkDeleted":"تم حذف التقطيعة (مع الفهارس)","kb.updatedAt":"وقت التحديث","kb.jobHistory":"سجل المعالجة","kb.jobAttempts":"عدد المحاولات","kb.noJobs":"لا يوجد سجل معالجة","kb.updated":"تم تحديث قاعدة المعرفة","kb.created":"تم إنشاء قاعدة المعرفة","kb.vectorBackend":"الواجهة الخلفية للمتجهات","kb.enabledOn":"ممكّن","kb.enabledOff":"غير ممكّن","kb.slug":"المعرّف","kb.kindDoc":"قاعدة مستندات (تشمل الويكي)","kb.kindFaq":"قاعدة الأسئلة الشائعة","kb.selectKb":"اختر قاعدة معرفة","kb.selectKbDesc":"اختر أعلاه أو أنشئها في صفحة قواعد المعرفة.","kb.selectPlaceholder":"اختر قاعدة","kb.allKbs":"كل قواعد المعرفة","kb.allDocs":"كل المستندات","kb.progress":"التقدم","kb.partialParsed":"تحليل جزئي","kb.pagesCol":"الصفحات","kb.imagesCol":"الصور","kb.pageCol":"ص","kb.parseEngine":"محرك التحليل","kb.parseEngineBuiltin":"مدمج (بدون تبعيات)","kb.parseEngineDocreader":"خدمة docreader (دقة عالية لصور/فحوص PDF)","kb.parseEngineHint":"صور PDF والفحوصات ودقة التنسيق تتطلب خدمة docreader؛ تعود للمدمج تلقائيًا إذا لم يُضبط العنوان","kb.noImages":"لا صور","kb.noImagesDesc":"تظهر الصور المستخرجة من المستندات هنا بعد تفعيل التعرف.","kb.recognition":"المحتوى المُتعرف","kb.imagePreview":"معاينة","kb.imageCaption":"الوصف","kb.imageOcr":"نص OCR","kb.imageStatus.pending":"قيد الانتظار","kb.imageStatus.done":"مُتعرف عليها","kb.imageStatus.failed":"فشل","kb.imageStatus.skipped":"تم تخطيها","kb.createdAtCol":"أنشئت","kb.imagePreviewUnavailable":"المعاينة غير متاحة","kb.imageThumb":"مصغّرة","kb.imageContent":"المحتوى","kb.zoomIn":"تكبير","kb.zoomOut":"تصغير","kb.zoomReset":"إعادة تعيين","kb.reader":"عرض القراءة","kb.readerEmpty":"لا توجد كتل لعرضها","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"صفحة غير معروفة","kb.upload":"رفع مستند","kb.uploadOk":"تم الرفع، التحليل في الانتظار","kb.uploadFailed":"فشل الرفع","kb.online":"إدخال مباشر","kb.onlineOk":"تم الإرسال، قيد المعالجة","kb.onlineFailed":"فشل الإرسال","kb.noDocs":"لا مستندات","kb.noDocsDesc":"ارفع ملفات أو أدخل ماركداون.","kb.source":"المصدر","kb.noChunks":"لا توجد كتل","kb.noChunksDesc":"عرض الكتلة الأصلية/الفرعية، انقر لرؤية المحتوى الكامل","kb.breadcrumb":"كتلة","kb.embedded":"مضمن","kb.notEmbedded":"غير مضمن","kb.bytes":"بايت","kb.vectorCol":"متجه","kb.backToDocs":"عودة إلى المستندات","kb.chunkCount":"عدد الأجزاء","kb.reparse":"أعيدت المعالجة","kb.reparseFailed":"فشلت إعادة المعالجة","kb.confirmDelete":"حذف المستند «{title}»؟ سيتم حذف التقطيعات والفهارس والملف الأصلي نهائيًا ولا يمكن التراجع.","kb.deleted":"تم الحذف (مع الفهارس)","kb.mdTitle":"العنوان","kb.mdContent":"المحتوى (ماركداون؛ # للعناوين)","kb.status.pending":"قيد الانتظار","kb.status.parsing":"تحليل","kb.status.chunking":"تقسيم","kb.status.indexing":"فهرسة","kb.status.embedding":"تضمين","kb.status.ready":"جاهز","kb.status.failed":"فشل","kb.status.stale":"قديم","kb.sample":"نموذج ماركداون (≤64KB، معاينة فقط)","kb.runPreview":"تشغيل المعاينة","kb.running":"جارٍ التقسيم…","kb.parent":"أصل","kb.child":"فرع","kb.parents":"أصلية","kb.children":"فرعية","kb.total":"الإجمالي","kb.chars":"حرف","kb.askLabel":"سؤال (جولة واحدة؛ الفارغ = الكل)","kb.stream":"بث (SSE)","kb.ask":"اسأل","kb.stop":"إيقاف","kb.references":"مراجع","kb.wikiNoPages":"لا صفحات معرفة","kb.wikiNoPagesDesc":"تظهر المسودات هنا للمراجعة.","kb.publish":"نشر (فهرسته)","kb.approveOk":"تم النشر والفهرسة","kb.reject":"رفض وأرشفة","kb.rejected":"تمت الأرشفة","kb.saveOk":"تم الحفظ (إعادة فهرسة تلقائية)","kb.noVersions":"لا إصدارات بعد.","kb.diffCurrent":"مقارنة بالحالي","kb.rollback":"تراجع","kb.rollbackOk":"تم التراجع (حُفظ المحتوى السابق)","kb.diffTitle":"مقارنة سطرية (أحمر=محذوف، أخضر=مضاف)","kb.newFaq":"سؤال شائع جديد","kb.faqCreated":"تم الإنشاء والفهرسة","kb.stdQuestion":"السؤال المعياري","kb.similarCount":"أسئلة مشابهة","kb.hits":"إصابات","kb.toggleOk":"تم التبديل (تحديث الفهارس)","kb.similarLabel":"أسئلة مشابهة (واحد لكل سطر)","kb.answersLabel":"إجابات (واحدة لكل سطر)","kb.noFaqs":"لا أسئلة شائعة","kb.noFaqsDesc":"أنشئ يدويًا أو من الفجوات.","kb.gapsIntro":"الأسئلة غير المغطاة — المسودات تُراجع يدويًا.","kb.diag.allKinds":"كل الأنواع","kb.diag.allStatuses":"كل الحالات","kb.diag.docFilter":"تصفية حسب معرّف المستند","kb.diag.total":"{n} تشغيل","kb.diag.noRuns":"لا توجد عمليات بعد","kb.diag.noRunsDesc":"تُسجَّل هنا كل عملية لخط KB (الاستيعاب/السؤال/البحث…).","kb.traceToggle":"التتبع","kb.tracePanel":"تتبع الخط","kb.logId":"معرّف السجل","kb.diag.runs":"العمليات","kb.diag.checkup":"الفحص","kb.diag.health":"الصحة","kb.diag.checkupIntro":"فحص اتساق عند الطلب (ذاكرة 10 ثوانٍ).","kb.diag.healthIntro":"صحة المكونات؛ الفحص الافتراضي بلا تكلفة.","kb.diag.embedProbe":"فحص Embed","kb.diag.r1":"أحداث مفقودة (pending بدون مهمة)","kb.diag.r2":"مستندات عالقة","kb.diag.r3":"مستندات فاشلة","kb.diag.r4":"غير مكتمل (embeddings ناقصة)","kb.diag.r5":"انحراف المتجهات","kb.diag.r6":"مهام KB ميتة","kb.diag.r7":"عمليات عالقة","kb.diag.kind":"النوع","kb.diag.status":"الحالة","kb.diag.trigger":"المصدر","kb.diag.attempt":"المحاولة","kb.diag.latency":"الزمن","kb.diag.error":"خطأ","kb.diag.created":"الوقت","kb.diag.prev":"السابق","kb.diag.next":"التالي","kb.diag.detail":"تفاصيل التشغيل","kb.diag.agent":"الوكيل","kb.diag.session":"الجلسة","kb.diag.configSnapshot":"لقطة الإعداد","kb.diag.stages":"المراحل","kb.diag.noStages":"لا مراحل مسجلة","kb.noGaps":"لا فجوات معرفية","kb.noGapsDesc":"جميع الأسئلة مغطاة.","kb.freq":"التكرار","kb.draftFaq":"صياغة سؤال","kb.drafted":"تمت الصياغة (معطلة) — راجعها في صفحة الأسئلة","kb.docsPage":"المستندات","kb.title":"العنوان","kb.versions":"الإصدارات","kb.edit":"تحرير","kb.operations":"إجراءات","kb.state":"الحالة","kb.allStatus":"الكل","kb.type":"النوع","kb.embeddingModel":"نموذج التضمين","kb.embeddingDim":"أبعاد المتجه","kb.modelHint":"غير قابل للتغيير بعد الإنشاء (الفارغ = الافتراضي العام)","kb.modelCol":"النموذج","kb.modelRequired":"مطلوب: أدخل القيمة أو اضبط الافتراضي العام (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"نموذج إعادة الترتيب","kb.rerankModelOptional":"اختياري: الافتراضي العام إذا تُرك فارغًا (إعادة الترتيب معطلة بدون إعداد)","kb.rerankWindow":"نافذة إعادة الترتيب","kb.rerankThreshold":"عتبة إعادة الترتيب","kb.rerankInherit":"وراثة الافتراضي العام","kb.rerankHint":"النافذة/العتبة الفارغة ترث الافتراضيات العامة (RAISFAST_KB_RERANK_*)؛ بدون نموذج مُعد يمر S5 مباشرة","kb.rerankInvalid":"النافذة يجب أن تكون عددًا صحيحًا موجبًا؛ العتبة بين 0–1","kb.chatModel":"نموذج التوليد","kb.chatModelOptional":"اختياري: الافتراضي العام (RAISFAST_KB_CHAT_MODEL) ← افتراضي المستأجر","kb.chatModelHint":"النموذج المستخدم لتوليد إجابات S9؛ تفريغه يعيد الافتراضي العام","kb.distillModel":"نموذج التقطير","kb.distillModelOptional":"اختياري: الافتراضي العام (RAISFAST_KB_DISTILL_MODEL) ← افتراضي المستأجر","kb.distillModelHint":"النموذج المستخدم لتقطير الويكي (استخراج المواضيع + الصياغة)؛ تفريغه يعيد الافتراضي العام","kb.imageRecognition":"التعرف على الصور","kb.imageModel":"نموذج التعرف","kb.imageModelOptional":"اختر نموذجًا يدعم الرؤية؛ الافتراضي العام إذا تُرك فارغًا (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"لغة الوصف","kb.imageLanguagePlaceholder":"مثل zh / ar؛ الفارغ يتبع لغة المستند","kb.imageInstructions":"تعليمات مخصصة","kb.imageInstructionsPlaceholder":"إرشادات إضافية لتفسير الصور (اختياري)","kb.imageHint":"عند التفعيل تحصل صور المستند على وصف + OCR عبر VLM وتصبح قابلة للبحث","kb.descPlaceholder":"الغرض من هذه القاعدة (اختياري)","jobs.attempts":"المحاولات","jobs.runAfter":"مجدول","jobs.updatedAt":"محدّث","jobs.error":"خطأ","jobs.id":"المعرّف","jobs.payload":"الحمولة","jobs.noJobs":"لا توجد مهام","jobs.noJobsDesc":"قائمة المهام في الخلفية فارغة.","jobs.cleanup":"تنظيف","jobs.cleanupDesc":"حذف المهام المكتملة/الميتة الأقدم من 7 أيام. لا يمكن التراجع عن هذا الإجراء.","jobs.cleanupDone":"تم تنظيف {n} مهمة","jobs.confirmDelete":"حذف المهمة {type}؟ سيتم إزالة السجل من القائمة.","jobs.retried":"أُعيدت المهمة إلى القائمة","jobs.deleted":"حُذفت المهمة","jobs.actionFailed":"فشل الإجراء"},Wc={en:_C,zh:UC,ja:zC,ko:BC,es:VC,pt:HC,de:qC,fr:WC,ar:KC},$C=["ar"];function GC(t){return $C.includes(t)}const un=bl()(yl(t=>({locale:"en",setLocale:e=>t({locale:e})}),{name:"i18n-locale"}));function pt(){const t=un(n=>n.locale),e=Wc[t];function o(n,a){let s=e[n]??Wc.en[n]??n;if(a)for(const[r,i]of Object.entries(a))s=s.replace(`{${r}}`,String(i));return s}return{t:o,locale:t}}function rm(){const t=un(e=>e.locale);return GC(t)?"rtl":"ltr"}var Kc=1,JC=.9,QC=.8,YC=.17,br=.1,yr=.999,ZC=.9999,XC=.99,eT=/[\\\/_+.#"@\[\(\{&]/,tT=/[\\\/_+.#"@\[\(\{&]/g,oT=/[\s-]/,im=/[\s-]/g;function di(t,e,o,n,a,s,r){if(s===e.length)return a===t.length?Kc:XC;var i=`${a},${s}`;if(r[i]!==void 0)return r[i];for(var m=n.charAt(s),d=o.indexOf(m,a),p=0,u,g,k,h;d>=0;)u=di(t,e,o,n,d+1,s+1,r),u>p&&(d===a?u*=Kc:eT.test(t.charAt(d-1))?(u*=QC,k=t.slice(a,d-1).match(tT),k&&a>0&&(u*=Math.pow(yr,k.length))):oT.test(t.charAt(d-1))?(u*=JC,h=t.slice(a,d-1).match(im),h&&a>0&&(u*=Math.pow(yr,h.length))):(u*=YC,a>0&&(u*=Math.pow(yr,d-a))),t.charAt(d)!==e.charAt(s)&&(u*=ZC)),(uu&&(u=g*br)),u>p&&(p=u),d=o.indexOf(m,d+1);return r[i]=p,p}function $c(t){return t.toLowerCase().replace(im," ")}function nT(t,e,o){return t=o&&o.length>0?`${t+" "+o.join(" ")}`:t,di(t,e,$c(t),$c(e),0,0,{})}function Mo(t,e,{checkForDefaultPrevented:o=!0}={}){return function(a){if(t==null||t(a),o===!1||!a.defaultPrevented)return e==null?void 0:e(a)}}function Gc(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function jo(...t){return e=>{let o=!1;const n=t.map(a=>{const s=Gc(a,e);return!o&&typeof s=="function"&&(o=!0),s});if(o)return()=>{for(let a=0;a{const{children:r,...i}=s,m=c.useMemo(()=>i,Object.values(i));return l.jsx(o.Provider,{value:m,children:r})};n.displayName=t+"Provider";function a(s){const r=c.useContext(o);if(r)return r;if(e!==void 0)return e;throw new Error(`\`${s}\` must be used within \`${t}\``)}return[n,a]}function sT(t,e=[]){let o=[];function n(s,r){const i=c.createContext(r),m=o.length;o=[...o,r];const d=u=>{var w;const{scope:g,children:k,...h}=u,y=((w=g==null?void 0:g[t])==null?void 0:w[m])||i,b=c.useMemo(()=>h,Object.values(h));return l.jsx(y.Provider,{value:b,children:k})};d.displayName=s+"Provider";function p(u,g){var y;const k=((y=g==null?void 0:g[t])==null?void 0:y[m])||i,h=c.useContext(k);if(h)return h;if(r!==void 0)return r;throw new Error(`\`${u}\` must be used within \`${s}\``)}return[d,p]}const a=()=>{const s=o.map(r=>c.createContext(r));return function(i){const m=(i==null?void 0:i[t])||s;return c.useMemo(()=>({[`__scope${t}`]:{...i,[t]:m}}),[i,m])}};return a.scopeName=t,[n,rT(a,...e)]}function rT(...t){const e=t[0];if(t.length===1)return e;const o=()=>{const n=t.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(s){const r=n.reduce((i,{useScope:m,scopeName:d})=>{const u=m(s)[`__scope${d}`];return{...i,...u}},{});return c.useMemo(()=>({[`__scope${e.scopeName}`]:r}),[r])}};return o.scopeName=e.scopeName,o}var ha=globalThis!=null&&globalThis.document?c.useLayoutEffect:()=>{},iT=Ts[" useId ".trim().toString()]||(()=>{}),lT=0;function uo(t){const[e,o]=c.useState(iT());return ha(()=>{o(n=>n??String(lT++))},[t]),e?`radix-${e}`:""}var cT=Ts[" useInsertionEffect ".trim().toString()]||ha;function dT({prop:t,defaultProp:e,onChange:o=()=>{},caller:n}){const[a,s,r]=uT({defaultProp:e,onChange:o}),i=t!==void 0,m=i?t:a;{const p=c.useRef(t!==void 0);c.useEffect(()=>{const u=p.current;u!==i&&console.warn(`${n} is changing from ${u?"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.`),p.current=i},[i,n])}const d=c.useCallback(p=>{var u;if(i){const g=pT(p)?p(t):p;g!==t&&((u=r.current)==null||u.call(r,g))}else s(p)},[i,t,s,r]);return[m,d]}function uT({defaultProp:t,onChange:e}){const[o,n]=c.useState(t),a=c.useRef(o),s=c.useRef(e);return cT(()=>{s.current=e},[e]),c.useEffect(()=>{var r;a.current!==o&&((r=s.current)==null||r.call(s,o),a.current=o)},[o,a]),[o,n,s]}function pT(t){return typeof t=="function"}function Ia(t){const e=mT(t),o=c.forwardRef((n,a)=>{const{children:s,...r}=n,i=c.Children.toArray(s),m=i.find(fT);if(m){const d=m.props.children,p=i.map(u=>u===m?c.Children.count(d)>1?c.Children.only(null):c.isValidElement(d)?d.props.children:null:u);return l.jsx(e,{...r,ref:a,children:c.isValidElement(d)?c.cloneElement(d,void 0,p):null})}return l.jsx(e,{...r,ref:a,children:s})});return o.displayName=`${t}.Slot`,o}function mT(t){const e=c.forwardRef((o,n)=>{const{children:a,...s}=o;if(c.isValidElement(a)){const r=bT(a),i=hT(s,a.props);return a.type!==c.Fragment&&(i.ref=n?jo(n,r):r),c.cloneElement(a,i)}return c.Children.count(a)>1?c.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var gT=Symbol("radix.slottable");function fT(t){return c.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===gT}function hT(t,e){const o={...e};for(const n in e){const a=t[n],s=e[n];/^on[A-Z]/.test(n)?a&&s?o[n]=(...i)=>{const m=s(...i);return a(...i),m}:a&&(o[n]=a):n==="style"?o[n]={...a,...s}:n==="className"&&(o[n]=[a,s].filter(Boolean).join(" "))}return{...t,...o}}function bT(t){var n,a;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=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var yT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],lm=yT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{});function kT(t,e){t&&Vt.flushSync(()=>t.dispatchEvent(e))}function ba(t){const e=c.useRef(t);return c.useEffect(()=>{e.current=t}),c.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=ba(t);c.useEffect(()=>{const n=a=>{a.key==="Escape"&&o(a)};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",Jc,cm=c.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),dm=c.forwardRef((t,e)=>{const{disableOutsidePointerEvents:o=!1,onEscapeKeyDown:n,onPointerDownOutside:a,onFocusOutside:s,onInteractOutside:r,onDismiss:i,...m}=t,d=c.useContext(cm),[p,u]=c.useState(null),g=(p==null?void 0:p.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,k]=c.useState({}),h=bn(e,A=>u(A)),y=Array.from(d.layers),[b]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),w=y.indexOf(b),C=p?y.indexOf(p):-1,v=d.layersWithOutsidePointerEventsDisabled.size>0,T=C>=w,S=AT(A=>{const D=A.target,F=[...d.branches].some(E=>E.contains(D));!T||F||(a==null||a(A),r==null||r(A),A.defaultPrevented||i==null||i())},g),f=xT(A=>{const D=A.target;[...d.branches].some(E=>E.contains(D))||(s==null||s(A),r==null||r(A),A.defaultPrevented||i==null||i())},g);return wT(A=>{C===d.layers.size-1&&(n==null||n(A),!A.defaultPrevented&&i&&(A.preventDefault(),i()))},g),c.useEffect(()=>{if(p)return o&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Jc=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(p)),d.layers.add(p),Qc(),()=>{o&&d.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=Jc)}},[p,g,o,d]),c.useEffect(()=>()=>{p&&(d.layers.delete(p),d.layersWithOutsidePointerEventsDisabled.delete(p),Qc())},[p,d]),c.useEffect(()=>{const A=()=>k({});return document.addEventListener(ui,A),()=>document.removeEventListener(ui,A)},[]),l.jsx(lm.div,{...m,ref:h,style:{pointerEvents:v?T?"auto":"none":void 0,...t.style},onFocusCapture:Mo(t.onFocusCapture,f.onFocusCapture),onBlurCapture:Mo(t.onBlurCapture,f.onBlurCapture),onPointerDownCapture:Mo(t.onPointerDownCapture,S.onPointerDownCapture)})});dm.displayName=vT;var ST="DismissableLayerBranch",DT=c.forwardRef((t,e)=>{const o=c.useContext(cm),n=c.useRef(null),a=bn(e,n);return c.useEffect(()=>{const s=n.current;if(s)return o.branches.add(s),()=>{o.branches.delete(s)}},[o.branches]),l.jsx(lm.div,{...t,ref:a})});DT.displayName=ST;function AT(t,e=globalThis==null?void 0:globalThis.document){const o=ba(t),n=c.useRef(!1),a=c.useRef(()=>{});return c.useEffect(()=>{const s=i=>{if(i.target&&!n.current){let m=function(){um(CT,o,d,{discrete:!0})};const d={originalEvent:i};i.pointerType==="touch"?(e.removeEventListener("click",a.current),a.current=m,e.addEventListener("click",a.current,{once:!0})):m()}else e.removeEventListener("click",a.current);n.current=!1},r=window.setTimeout(()=>{e.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(r),e.removeEventListener("pointerdown",s),e.removeEventListener("click",a.current)}},[e,o]),{onPointerDownCapture:()=>n.current=!0}}function xT(t,e=globalThis==null?void 0:globalThis.document){const o=ba(t),n=c.useRef(!1);return c.useEffect(()=>{const a=s=>{s.target&&!n.current&&um(TT,o,{originalEvent:s},{discrete:!1})};return e.addEventListener("focusin",a),()=>e.removeEventListener("focusin",a)},[e,o]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function Qc(){const t=new CustomEvent(ui);document.dispatchEvent(t)}function um(t,e,o,{discrete:n}){const a=o.originalEvent.target,s=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:o});e&&a.addEventListener(t,e,{once:!0}),n?kT(a,s):a.dispatchEvent(s)}var PT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],ET=PT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),kr="focusScope.autoFocusOnMount",wr="focusScope.autoFocusOnUnmount",Yc={bubbles:!1,cancelable:!0},RT="FocusScope",pm=c.forwardRef((t,e)=>{const{loop:o=!1,trapped:n=!1,onMountAutoFocus:a,onUnmountAutoFocus:s,...r}=t,[i,m]=c.useState(null),d=ba(a),p=ba(s),u=c.useRef(null),g=bn(e,y=>m(y)),k=c.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;c.useEffect(()=>{if(n){let y=function(v){if(k.paused||!i)return;const T=v.target;i.contains(T)?u.current=T:wo(u.current,{select:!0})},b=function(v){if(k.paused||!i)return;const T=v.relatedTarget;T!==null&&(i.contains(T)||wo(u.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",y),document.addEventListener("focusout",b);const C=new MutationObserver(w);return i&&C.observe(i,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",y),document.removeEventListener("focusout",b),C.disconnect()}}},[n,i,k.paused]),c.useEffect(()=>{if(i){Xc.add(k);const y=document.activeElement;if(!i.contains(y)){const w=new CustomEvent(kr,Yc);i.addEventListener(kr,d),i.dispatchEvent(w),w.defaultPrevented||(IT(jT(mm(i)),{select:!0}),document.activeElement===y&&wo(i))}return()=>{i.removeEventListener(kr,d),setTimeout(()=>{const w=new CustomEvent(wr,Yc);i.addEventListener(wr,p),i.dispatchEvent(w),w.defaultPrevented||wo(y??document.body,{select:!0}),i.removeEventListener(wr,p),Xc.remove(k)},0)}}},[i,d,p,k]);const h=c.useCallback(y=>{if(!o&&!n||k.paused)return;const b=y.key==="Tab"&&!y.altKey&&!y.ctrlKey&&!y.metaKey,w=document.activeElement;if(b&&w){const C=y.currentTarget,[v,T]=FT(C);v&&T?!y.shiftKey&&w===T?(y.preventDefault(),o&&wo(v,{select:!0})):y.shiftKey&&w===v&&(y.preventDefault(),o&&wo(T,{select:!0})):w===C&&y.preventDefault()}},[o,n,k.paused]);return l.jsx(ET.div,{tabIndex:-1,...r,ref:g,onKeyDown:h})});pm.displayName=RT;function IT(t,{select:e=!1}={}){const o=document.activeElement;for(const n of t)if(wo(n,{select:e}),document.activeElement!==o)return}function FT(t){const e=mm(t),o=Zc(e,t),n=Zc(e.reverse(),t);return[o,n]}function mm(t){const e=[],o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const a=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||a?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;o.nextNode();)e.push(o.currentNode);return e}function Zc(t,e){for(const o of t)if(!MT(o,{upTo:e}))return o}function MT(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 Xc=NT();function NT(){let t=[];return{add(e){const o=t[0];e!==o&&(o==null||o.pause()),t=ed(t,e),t.unshift(e)},remove(e){var o;t=ed(t,e),(o=t[0])==null||o.resume()}}}function ed(t,e){const o=[...t],n=o.indexOf(e);return n!==-1&&o.splice(n,1),o}function jT(t){return t.filter(e=>e.tagName!=="A")}var LT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],_T=LT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),UT="Portal",gm=c.forwardRef((t,e)=>{var i;const{container:o,...n}=t,[a,s]=c.useState(!1);ha(()=>s(!0),[]);const r=o||a&&((i=globalThis==null?void 0:globalThis.document)==null?void 0:i.body);return r?Od.createPortal(l.jsx(_T.div,{...n,ref:e}),r):null});gm.displayName=UT;function zT(t,e){return c.useReducer((o,n)=>e[o][n]??o,t)}var Ks=t=>{const{present:e,children:o}=t,n=BT(e),a=typeof o=="function"?o({present:n.isPresent}):c.Children.only(o),s=bn(n.ref,VT(a));return typeof o=="function"||n.isPresent?c.cloneElement(a,{ref:s}):null};Ks.displayName="Presence";function BT(t){const[e,o]=c.useState(),n=c.useRef(null),a=c.useRef(t),s=c.useRef("none"),r=t?"mounted":"unmounted",[i,m]=zT(r,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return c.useEffect(()=>{const d=Ja(n.current);s.current=i==="mounted"?d:"none"},[i]),ha(()=>{const d=n.current,p=a.current;if(p!==t){const g=s.current,k=Ja(d);t?m("MOUNT"):k==="none"||(d==null?void 0:d.display)==="none"?m("UNMOUNT"):m(p&&g!==k?"ANIMATION_OUT":"UNMOUNT"),a.current=t}},[t,m]),ha(()=>{if(e){let d;const p=e.ownerDocument.defaultView??window,u=k=>{const y=Ja(n.current).includes(CSS.escape(k.animationName));if(k.target===e&&y&&(m("ANIMATION_END"),!a.current)){const b=e.style.animationFillMode;e.style.animationFillMode="forwards",d=p.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=b)})}},g=k=>{k.target===e&&(s.current=Ja(n.current))};return e.addEventListener("animationstart",g),e.addEventListener("animationcancel",u),e.addEventListener("animationend",u),()=>{p.clearTimeout(d),e.removeEventListener("animationstart",g),e.removeEventListener("animationcancel",u),e.removeEventListener("animationend",u)}}else m("ANIMATION_END")},[e,m]),{isPresent:["mounted","unmountSuspended"].includes(i),ref:c.useCallback(d=>{n.current=d?getComputedStyle(d):null,o(d)},[])}}function Ja(t){return(t==null?void 0:t.animationName)||"none"}function VT(t){var n,a;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=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var HT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Fa=HT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),vr=0;function qT(){c.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??td()),document.body.insertAdjacentElement("beforeend",t[1]??td()),vr++,()=>{vr===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),vr--}},[])}function td(){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 Xt=function(){return Xt=Object.assign||function(e){for(var o,n=1,a=arguments.length;n"u")return iS;var e=lS(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])}},dS=ym(),In="data-scroll-locked",uS=function(t,e,o,n){var a=t.left,s=t.top,r=t.right,i=t.gap;return o===void 0&&(o="margin"),` + .`.concat(KT,` { + overflow: hidden `).concat(n,`; + padding-right: `).concat(i,"px ").concat(n,`; + } + body[`).concat(In,`] { + overflow: hidden `).concat(n,`; + overscroll-behavior: contain; + `).concat([e&&"position: relative ".concat(n,";"),o==="margin"&&` + padding-left: `.concat(a,`px; + padding-top: `).concat(s,`px; + padding-right: `).concat(r,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(i,"px ").concat(n,`; + `),o==="padding"&&"padding-right: ".concat(i,"px ").concat(n,";")].filter(Boolean).join(""),` + } + + .`).concat(ss,` { + right: `).concat(i,"px ").concat(n,`; + } + + .`).concat(rs,` { + margin-right: `).concat(i,"px ").concat(n,`; + } + + .`).concat(ss," .").concat(ss,` { + right: 0 `).concat(n,`; + } + + .`).concat(rs," .").concat(rs,` { + margin-right: 0 `).concat(n,`; + } + + body[`).concat(In,`] { + `).concat($T,": ").concat(i,`px; + } +`)},nd=function(){var t=parseInt(document.body.getAttribute(In)||"0",10);return isFinite(t)?t:0},pS=function(){c.useEffect(function(){return document.body.setAttribute(In,(nd()+1).toString()),function(){var t=nd()-1;t<=0?document.body.removeAttribute(In):document.body.setAttribute(In,t.toString())}},[])},mS=function(t){var e=t.noRelative,o=t.noImportant,n=t.gapMode,a=n===void 0?"margin":n;pS();var s=c.useMemo(function(){return cS(a)},[a]);return c.createElement(dS,{styles:uS(s,!e,a,o?"":"!important")})},pi=!1;if(typeof window<"u")try{var Qa=Object.defineProperty({},"passive",{get:function(){return pi=!0,!0}});window.addEventListener("test",Qa,Qa),window.removeEventListener("test",Qa,Qa)}catch{pi=!1}var vn=pi?{passive:!1}:!1,gS=function(t){return t.tagName==="TEXTAREA"},km=function(t,e){if(!(t instanceof Element))return!1;var o=window.getComputedStyle(t);return o[e]!=="hidden"&&!(o.overflowY===o.overflowX&&!gS(t)&&o[e]==="visible")},fS=function(t){return km(t,"overflowY")},hS=function(t){return km(t,"overflowX")},ad=function(t,e){var o=e.ownerDocument,n=e;do{typeof ShadowRoot<"u"&&n instanceof ShadowRoot&&(n=n.host);var a=wm(t,n);if(a){var s=vm(t,n),r=s[1],i=s[2];if(r>i)return!0}n=n.parentNode}while(n&&n!==o.body);return!1},bS=function(t){var e=t.scrollTop,o=t.scrollHeight,n=t.clientHeight;return[e,o,n]},yS=function(t){var e=t.scrollLeft,o=t.scrollWidth,n=t.clientWidth;return[e,o,n]},wm=function(t,e){return t==="v"?fS(e):hS(e)},vm=function(t,e){return t==="v"?bS(e):yS(e)},kS=function(t,e){return t==="h"&&e==="rtl"?-1:1},wS=function(t,e,o,n,a){var s=kS(t,window.getComputedStyle(e).direction),r=s*n,i=o.target,m=e.contains(i),d=!1,p=r>0,u=0,g=0;do{if(!i)break;var k=vm(t,i),h=k[0],y=k[1],b=k[2],w=y-b-s*h;(h||w)&&wm(t,i)&&(u+=w,g+=h);var C=i.parentNode;i=C&&C.nodeType===Node.DOCUMENT_FRAGMENT_NODE?C.host:C}while(!m&&i!==document.body||m&&(e.contains(i)||e===i));return(p&&Math.abs(u)<1||!p&&Math.abs(g)<1)&&(d=!0),d},Ya=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},sd=function(t){return[t.deltaX,t.deltaY]},rd=function(t){return t&&"current"in t?t.current:t},vS=function(t,e){return t[0]===e[0]&&t[1]===e[1]},CS=function(t){return` + .block-interactivity-`.concat(t,` {pointer-events: none;} + .allow-interactivity-`).concat(t,` {pointer-events: all;} +`)},TS=0,Cn=[];function SS(t){var e=c.useRef([]),o=c.useRef([0,0]),n=c.useRef(),a=c.useState(TS++)[0],s=c.useState(ym)[0],r=c.useRef(t);c.useEffect(function(){r.current=t},[t]),c.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(a));var y=WT([t.lockRef.current],(t.shards||[]).map(rd),!0).filter(Boolean);return y.forEach(function(b){return b.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),y.forEach(function(b){return b.classList.remove("allow-interactivity-".concat(a))})}}},[t.inert,t.lockRef.current,t.shards]);var i=c.useCallback(function(y,b){if("touches"in y&&y.touches.length===2||y.type==="wheel"&&y.ctrlKey)return!r.current.allowPinchZoom;var w=Ya(y),C=o.current,v="deltaX"in y?y.deltaX:C[0]-w[0],T="deltaY"in y?y.deltaY:C[1]-w[1],S,f=y.target,A=Math.abs(v)>Math.abs(T)?"h":"v";if("touches"in y&&A==="h"&&f.type==="range")return!1;var D=window.getSelection(),F=D&&D.anchorNode,E=F?F===f||F.contains(f):!1;if(E)return!1;var B=ad(A,f);if(!B)return!0;if(B?S=A:(S=A==="v"?"h":"v",B=ad(A,f)),!B)return!1;if(!n.current&&"changedTouches"in y&&(v||T)&&(n.current=S),!S)return!0;var N=n.current||S;return wS(N,b,y,N==="h"?v:T)},[]),m=c.useCallback(function(y){var b=y;if(!(!Cn.length||Cn[Cn.length-1]!==s)){var w="deltaY"in b?sd(b):Ya(b),C=e.current.filter(function(S){return S.name===b.type&&(S.target===b.target||b.target===S.shadowParent)&&vS(S.delta,w)})[0];if(C&&C.should){b.cancelable&&b.preventDefault();return}if(!C){var v=(r.current.shards||[]).map(rd).filter(Boolean).filter(function(S){return S.contains(b.target)}),T=v.length>0?i(b,v[0]):!r.current.noIsolation;T&&b.cancelable&&b.preventDefault()}}},[]),d=c.useCallback(function(y,b,w,C){var v={name:y,delta:b,target:w,should:C,shadowParent:DS(w)};e.current.push(v),setTimeout(function(){e.current=e.current.filter(function(T){return T!==v})},1)},[]),p=c.useCallback(function(y){o.current=Ya(y),n.current=void 0},[]),u=c.useCallback(function(y){d(y.type,sd(y),y.target,i(y,t.lockRef.current))},[]),g=c.useCallback(function(y){d(y.type,Ya(y),y.target,i(y,t.lockRef.current))},[]);c.useEffect(function(){return Cn.push(s),t.setCallbacks({onScrollCapture:u,onWheelCapture:u,onTouchMoveCapture:g}),document.addEventListener("wheel",m,vn),document.addEventListener("touchmove",m,vn),document.addEventListener("touchstart",p,vn),function(){Cn=Cn.filter(function(y){return y!==s}),document.removeEventListener("wheel",m,vn),document.removeEventListener("touchmove",m,vn),document.removeEventListener("touchstart",p,vn)}},[]);var k=t.removeScrollBar,h=t.inert;return c.createElement(c.Fragment,null,h?c.createElement(s,{styles:CS(a)}):null,k?c.createElement(mS,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function DS(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const AS=eS(bm,SS);var Cm=c.forwardRef(function(t,e){return c.createElement($s,Xt({},t,{ref:e,sideCar:AS}))});Cm.classNames=$s.classNames;var xS=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},Tn=new WeakMap,Za=new WeakMap,Xa={},Dr=0,Tm=function(t){return t&&(t.host||Tm(t.parentNode))},PS=function(t,e){return e.map(function(o){if(t.contains(o))return o;var n=Tm(o);return n&&t.contains(n)?n:(console.error("aria-hidden",o,"in not contained inside",t,". Doing nothing"),null)}).filter(function(o){return!!o})},ES=function(t,e,o,n){var a=PS(e,Array.isArray(t)?t:[t]);Xa[o]||(Xa[o]=new WeakMap);var s=Xa[o],r=[],i=new Set,m=new Set(a),d=function(u){!u||i.has(u)||(i.add(u),d(u.parentNode))};a.forEach(d);var p=function(u){!u||m.has(u)||Array.prototype.forEach.call(u.children,function(g){if(i.has(g))p(g);else try{var k=g.getAttribute(n),h=k!==null&&k!=="false",y=(Tn.get(g)||0)+1,b=(s.get(g)||0)+1;Tn.set(g,y),s.set(g,b),r.push(g),y===1&&h&&Za.set(g,!0),b===1&&g.setAttribute(o,"true"),h||g.setAttribute(n,"true")}catch(w){console.error("aria-hidden: cannot operate on ",g,w)}})};return p(e),i.clear(),Dr++,function(){r.forEach(function(u){var g=Tn.get(u)-1,k=s.get(u)-1;Tn.set(u,g),s.set(u,k),g||(Za.has(u)||u.removeAttribute(n),Za.delete(u)),k||u.removeAttribute(o)}),Dr--,Dr||(Tn=new WeakMap,Tn=new WeakMap,Za=new WeakMap,Xa={})}},RS=function(t,e,o){o===void 0&&(o="data-aria-hidden");var n=Array.from(Array.isArray(t)?t:[t]),a=xS(t);return a?(n.push.apply(n,Array.from(a.querySelectorAll("[aria-live], script"))),ES(n,a,o,"aria-hidden")):function(){return null}},Gs="Dialog",[Sm]=sT(Gs),[IS,Ht]=Sm(Gs),Dm=t=>{const{__scopeDialog:e,children:o,open:n,defaultOpen:a,onOpenChange:s,modal:r=!0}=t,i=c.useRef(null),m=c.useRef(null),[d,p]=dT({prop:n,defaultProp:a??!1,onChange:s,caller:Gs});return l.jsx(IS,{scope:e,triggerRef:i,contentRef:m,contentId:uo(),titleId:uo(),descriptionId:uo(),open:d,onOpenChange:p,onOpenToggle:c.useCallback(()=>p(u=>!u),[p]),modal:r,children:o})};Dm.displayName=Gs;var Am="DialogTrigger",FS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(Am,o),s=bn(e,a.triggerRef);return l.jsx(Fa.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":vl(a.open),...n,ref:s,onClick:Mo(t.onClick,a.onOpenToggle)})});FS.displayName=Am;var kl="DialogPortal",[MS,xm]=Sm(kl,{forceMount:void 0}),Pm=t=>{const{__scopeDialog:e,forceMount:o,children:n,container:a}=t,s=Ht(kl,e);return l.jsx(MS,{scope:e,forceMount:o,children:c.Children.map(n,r=>l.jsx(Ks,{present:o||s.open,children:l.jsx(gm,{asChild:!0,container:a,children:r})}))})};Pm.displayName=kl;var vs="DialogOverlay",Em=c.forwardRef((t,e)=>{const o=xm(vs,t.__scopeDialog),{forceMount:n=o.forceMount,...a}=t,s=Ht(vs,t.__scopeDialog);return s.modal?l.jsx(Ks,{present:n||s.open,children:l.jsx(NS,{...a,ref:e})}):null});Em.displayName=vs;var OS=Ia("DialogOverlay.RemoveScroll"),NS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(vs,o);return l.jsx(Cm,{as:OS,allowPinchZoom:!0,shards:[a.contentRef],children:l.jsx(Fa.div,{"data-state":vl(a.open),...n,ref:e,style:{pointerEvents:"auto",...n.style}})})}),pn="DialogContent",Rm=c.forwardRef((t,e)=>{const o=xm(pn,t.__scopeDialog),{forceMount:n=o.forceMount,...a}=t,s=Ht(pn,t.__scopeDialog);return l.jsx(Ks,{present:n||s.open,children:s.modal?l.jsx(jS,{...a,ref:e}):l.jsx(LS,{...a,ref:e})})});Rm.displayName=pn;var jS=c.forwardRef((t,e)=>{const o=Ht(pn,t.__scopeDialog),n=c.useRef(null),a=bn(e,o.contentRef,n);return c.useEffect(()=>{const s=n.current;if(s)return RS(s)},[]),l.jsx(Im,{...t,ref:a,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Mo(t.onCloseAutoFocus,s=>{var r;s.preventDefault(),(r=o.triggerRef.current)==null||r.focus()}),onPointerDownOutside:Mo(t.onPointerDownOutside,s=>{const r=s.detail.originalEvent,i=r.button===0&&r.ctrlKey===!0;(r.button===2||i)&&s.preventDefault()}),onFocusOutside:Mo(t.onFocusOutside,s=>s.preventDefault())})}),LS=c.forwardRef((t,e)=>{const o=Ht(pn,t.__scopeDialog),n=c.useRef(!1),a=c.useRef(!1);return l.jsx(Im,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{var r,i;(r=t.onCloseAutoFocus)==null||r.call(t,s),s.defaultPrevented||(n.current||(i=o.triggerRef.current)==null||i.focus(),s.preventDefault()),n.current=!1,a.current=!1},onInteractOutside:s=>{var m,d;(m=t.onInteractOutside)==null||m.call(t,s),s.defaultPrevented||(n.current=!0,s.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const r=s.target;((d=o.triggerRef.current)==null?void 0:d.contains(r))&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&a.current&&s.preventDefault()}})}),Im=c.forwardRef((t,e)=>{const{__scopeDialog:o,trapFocus:n,onOpenAutoFocus:a,onCloseAutoFocus:s,...r}=t,i=Ht(pn,o),m=c.useRef(null),d=bn(e,m);return qT(),l.jsxs(l.Fragment,{children:[l.jsx(pm,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:a,onUnmountAutoFocus:s,children:l.jsx(dm,{role:"dialog",id:i.contentId,"aria-describedby":i.descriptionId,"aria-labelledby":i.titleId,"data-state":vl(i.open),...r,ref:d,onDismiss:()=>i.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(BS,{titleId:i.titleId}),l.jsx(HS,{contentRef:m,descriptionId:i.descriptionId})]})]})}),wl="DialogTitle",_S=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(wl,o);return l.jsx(Fa.h2,{id:a.titleId,...n,ref:e})});_S.displayName=wl;var Fm="DialogDescription",US=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(Fm,o);return l.jsx(Fa.p,{id:a.descriptionId,...n,ref:e})});US.displayName=Fm;var Mm="DialogClose",zS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(Mm,o);return l.jsx(Fa.button,{type:"button",...n,ref:e,onClick:Mo(t.onClick,()=>a.onOpenChange(!1))})});zS.displayName=Mm;function vl(t){return t?"open":"closed"}var Om="DialogTitleWarning",[kR,Nm]=aT(Om,{contentName:pn,titleName:wl,docsSlug:"dialog"}),BS=({titleId:t})=>{const e=Nm(Om),o=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. + +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 c.useEffect(()=>{t&&(document.getElementById(t)||console.error(o))},[o,t]),null},VS="DialogDescriptionWarning",HS=({contentRef:t,descriptionId:e})=>{const n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Nm(VS).contentName}}.`;return c.useEffect(()=>{var s;const a=(s=t.current)==null?void 0:s.getAttribute("aria-describedby");e&&a&&(document.getElementById(e)||console.warn(n))},[n,t,e]),null},qS=Dm,WS=Pm,KS=Em,$S=Rm,GS=Symbol.for("react.lazy"),Cs=Ts[" use ".trim().toString()];function JS(t){return typeof t=="object"&&t!==null&&"then"in t}function jm(t){return t!=null&&typeof t=="object"&&"$$typeof"in t&&t.$$typeof===GS&&"_payload"in t&&JS(t._payload)}function QS(t){const e=YS(t),o=c.forwardRef((n,a)=>{let{children:s,...r}=n;jm(s)&&typeof Cs=="function"&&(s=Cs(s._payload));const i=c.Children.toArray(s),m=i.find(XS);if(m){const d=m.props.children,p=i.map(u=>u===m?c.Children.count(d)>1?c.Children.only(null):c.isValidElement(d)?d.props.children:null:u);return l.jsx(e,{...r,ref:a,children:c.isValidElement(d)?c.cloneElement(d,void 0,p):null})}return l.jsx(e,{...r,ref:a,children:s})});return o.displayName=`${t}.Slot`,o}function YS(t){const e=c.forwardRef((o,n)=>{let{children:a,...s}=o;if(jm(a)&&typeof Cs=="function"&&(a=Cs(a._payload)),c.isValidElement(a)){const r=tD(a),i=eD(s,a.props);return a.type!==c.Fragment&&(i.ref=n?jo(n,r):r),c.cloneElement(a,i)}return c.Children.count(a)>1?c.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var ZS=Symbol("radix.slottable");function XS(t){return c.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===ZS}function eD(t,e){const o={...e};for(const n in e){const a=t[n],s=e[n];/^on[A-Z]/.test(n)?a&&s?o[n]=(...i)=>{const m=s(...i);return a(...i),m}:a&&(o[n]=a):n==="style"?o[n]={...a,...s}:n==="className"&&(o[n]=[a,s].filter(Boolean).join(" "))}return{...t,...o}}function tD(t){var n,a;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=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var oD=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ho=oD.reduce((t,e)=>{const o=QS(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),oa='[cmdk-group=""]',Ar='[cmdk-group-items=""]',nD='[cmdk-group-heading=""]',Lm='[cmdk-item=""]',id=`${Lm}:not([aria-disabled="true"])`,mi="cmdk-item-select",Dn="data-value",aD=(t,e,o)=>nT(t,e,o),_m=c.createContext(void 0),Ma=()=>c.useContext(_m),Um=c.createContext(void 0),Cl=()=>c.useContext(Um),zm=c.createContext(void 0),Bm=c.forwardRef((t,e)=>{let o=An(()=>{var _,U;return{search:"",value:(U=(_=t.value)!=null?_:t.defaultValue)!=null?U:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),n=An(()=>new Set),a=An(()=>new Map),s=An(()=>new Map),r=An(()=>new Set),i=Vm(t),{label:m,children:d,value:p,onValueChange:u,filter:g,shouldFilter:k,loop:h,disablePointerSelection:y=!1,vimBindings:b=!0,...w}=t,C=uo(),v=uo(),T=uo(),S=c.useRef(null),f=fD();mn(()=>{if(p!==void 0){let _=p.trim();o.current.value=_,A.emit()}},[p]),mn(()=>{f(6,x)},[]);let A=c.useMemo(()=>({subscribe:_=>(r.current.add(_),()=>r.current.delete(_)),snapshot:()=>o.current,setState:(_,U,W)=>{var z,H,L,R;if(!Object.is(o.current[_],U)){if(o.current[_]=U,_==="search")N(),E(),f(1,B);else if(_==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let Y=document.getElementById(T);Y?Y.focus():(z=document.getElementById(C))==null||z.focus()}if(f(7,()=>{var Y;o.current.selectedItemId=(Y=q())==null?void 0:Y.id,A.emit()}),W||f(5,x),((H=i.current)==null?void 0:H.value)!==void 0){let Y=U??"";(R=(L=i.current).onValueChange)==null||R.call(L,Y);return}}A.emit()}},emit:()=>{r.current.forEach(_=>_())}}),[]),D=c.useMemo(()=>({value:(_,U,W)=>{var z;U!==((z=s.current.get(_))==null?void 0:z.value)&&(s.current.set(_,{value:U,keywords:W}),o.current.filtered.items.set(_,F(U,W)),f(2,()=>{E(),A.emit()}))},item:(_,U)=>(n.current.add(_),U&&(a.current.has(U)?a.current.get(U).add(_):a.current.set(U,new Set([_]))),f(3,()=>{N(),E(),o.current.value||B(),A.emit()}),()=>{s.current.delete(_),n.current.delete(_),o.current.filtered.items.delete(_);let W=q();f(4,()=>{N(),(W==null?void 0:W.getAttribute("id"))===_&&B(),A.emit()})}),group:_=>(a.current.has(_)||a.current.set(_,new Set),()=>{s.current.delete(_),a.current.delete(_)}),filter:()=>i.current.shouldFilter,label:m||t["aria-label"],getDisablePointerSelection:()=>i.current.disablePointerSelection,listId:C,inputId:T,labelId:v,listInnerRef:S}),[]);function F(_,U){var W,z;let H=(z=(W=i.current)==null?void 0:W.filter)!=null?z:aD;return _?H(_,o.current.search,U):0}function E(){if(!o.current.search||i.current.shouldFilter===!1)return;let _=o.current.filtered.items,U=[];o.current.filtered.groups.forEach(z=>{let H=a.current.get(z),L=0;H.forEach(R=>{let Y=_.get(R);L=Math.max(Y,L)}),U.push([z,L])});let W=S.current;M().sort((z,H)=>{var L,R;let Y=z.getAttribute("id"),be=H.getAttribute("id");return((L=_.get(be))!=null?L:0)-((R=_.get(Y))!=null?R:0)}).forEach(z=>{let H=z.closest(Ar);H?H.appendChild(z.parentElement===H?z:z.closest(`${Ar} > *`)):W.appendChild(z.parentElement===W?z:z.closest(`${Ar} > *`))}),U.sort((z,H)=>H[1]-z[1]).forEach(z=>{var H;let L=(H=S.current)==null?void 0:H.querySelector(`${oa}[${Dn}="${encodeURIComponent(z[0])}"]`);L==null||L.parentElement.appendChild(L)})}function B(){let _=M().find(W=>W.getAttribute("aria-disabled")!=="true"),U=_==null?void 0:_.getAttribute(Dn);A.setState("value",U||void 0)}function N(){var _,U,W,z;if(!o.current.search||i.current.shouldFilter===!1){o.current.filtered.count=n.current.size;return}o.current.filtered.groups=new Set;let H=0;for(let L of n.current){let R=(U=(_=s.current.get(L))==null?void 0:_.value)!=null?U:"",Y=(z=(W=s.current.get(L))==null?void 0:W.keywords)!=null?z:[],be=F(R,Y);o.current.filtered.items.set(L,be),be>0&&H++}for(let[L,R]of a.current)for(let Y of R)if(o.current.filtered.items.get(Y)>0){o.current.filtered.groups.add(L);break}o.current.filtered.count=H}function x(){var _,U,W;let z=q();z&&(((_=z.parentElement)==null?void 0:_.firstChild)===z&&((W=(U=z.closest(oa))==null?void 0:U.querySelector(nD))==null||W.scrollIntoView({block:"nearest"})),z.scrollIntoView({block:"nearest"}))}function q(){var _;return(_=S.current)==null?void 0:_.querySelector(`${Lm}[aria-selected="true"]`)}function M(){var _;return Array.from(((_=S.current)==null?void 0:_.querySelectorAll(id))||[])}function j(_){let U=M()[_];U&&A.setState("value",U.getAttribute(Dn))}function O(_){var U;let W=q(),z=M(),H=z.findIndex(R=>R===W),L=z[H+_];(U=i.current)!=null&&U.loop&&(L=H+_<0?z[z.length-1]:H+_===z.length?z[0]:z[H+_]),L&&A.setState("value",L.getAttribute(Dn))}function V(_){let U=q(),W=U==null?void 0:U.closest(oa),z;for(;W&&!z;)W=_>0?mD(W,oa):gD(W,oa),z=W==null?void 0:W.querySelector(id);z?A.setState("value",z.getAttribute(Dn)):O(_)}let $=()=>j(M().length-1),I=_=>{_.preventDefault(),_.metaKey?$():_.altKey?V(1):O(1)},se=_=>{_.preventDefault(),_.metaKey?j(0):_.altKey?V(-1):O(-1)};return c.createElement(Ho.div,{ref:e,tabIndex:-1,...w,"cmdk-root":"",onKeyDown:_=>{var U;(U=w.onKeyDown)==null||U.call(w,_);let W=_.nativeEvent.isComposing||_.keyCode===229;if(!(_.defaultPrevented||W))switch(_.key){case"n":case"j":{b&&_.ctrlKey&&I(_);break}case"ArrowDown":{I(_);break}case"p":case"k":{b&&_.ctrlKey&&se(_);break}case"ArrowUp":{se(_);break}case"Home":{_.preventDefault(),j(0);break}case"End":{_.preventDefault(),$();break}case"Enter":{_.preventDefault();let z=q();if(z){let H=new Event(mi);z.dispatchEvent(H)}}}}},c.createElement("label",{"cmdk-label":"",htmlFor:D.inputId,id:D.labelId,style:bD},m),Js(t,_=>c.createElement(Um.Provider,{value:A},c.createElement(_m.Provider,{value:D},_))))}),sD=c.forwardRef((t,e)=>{var o,n;let a=uo(),s=c.useRef(null),r=c.useContext(zm),i=Ma(),m=Vm(t),d=(n=(o=m.current)==null?void 0:o.forceMount)!=null?n:r==null?void 0:r.forceMount;mn(()=>{if(!d)return i.item(a,r==null?void 0:r.id)},[d]);let p=Hm(a,s,[t.value,t.children,s],t.keywords),u=Cl(),g=Lo(f=>f.value&&f.value===p.current),k=Lo(f=>d||i.filter()===!1?!0:f.search?f.filtered.items.get(a)>0:!0);c.useEffect(()=>{let f=s.current;if(!(!f||t.disabled))return f.addEventListener(mi,h),()=>f.removeEventListener(mi,h)},[k,t.onSelect,t.disabled]);function h(){var f,A;y(),(A=(f=m.current).onSelect)==null||A.call(f,p.current)}function y(){u.setState("value",p.current,!0)}if(!k)return null;let{disabled:b,value:w,onSelect:C,forceMount:v,keywords:T,...S}=t;return c.createElement(Ho.div,{ref:jo(s,e),...S,id:a,"cmdk-item":"",role:"option","aria-disabled":!!b,"aria-selected":!!g,"data-disabled":!!b,"data-selected":!!g,onPointerMove:b||i.getDisablePointerSelection()?void 0:y,onClick:b?void 0:h},t.children)}),rD=c.forwardRef((t,e)=>{let{heading:o,children:n,forceMount:a,...s}=t,r=uo(),i=c.useRef(null),m=c.useRef(null),d=uo(),p=Ma(),u=Lo(k=>a||p.filter()===!1?!0:k.search?k.filtered.groups.has(r):!0);mn(()=>p.group(r),[]),Hm(r,i,[t.value,t.heading,m]);let g=c.useMemo(()=>({id:r,forceMount:a}),[a]);return c.createElement(Ho.div,{ref:jo(i,e),...s,"cmdk-group":"",role:"presentation",hidden:u?void 0:!0},o&&c.createElement("div",{ref:m,"cmdk-group-heading":"","aria-hidden":!0,id:d},o),Js(t,k=>c.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":o?d:void 0},c.createElement(zm.Provider,{value:g},k))))}),iD=c.forwardRef((t,e)=>{let{alwaysRender:o,...n}=t,a=c.useRef(null),s=Lo(r=>!r.search);return!o&&!s?null:c.createElement(Ho.div,{ref:jo(a,e),...n,"cmdk-separator":"",role:"separator"})}),lD=c.forwardRef((t,e)=>{let{onValueChange:o,...n}=t,a=t.value!=null,s=Cl(),r=Lo(d=>d.search),i=Lo(d=>d.selectedItemId),m=Ma();return c.useEffect(()=>{t.value!=null&&s.setState("search",t.value)},[t.value]),c.createElement(Ho.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:a?t.value:r,onChange:d=>{a||s.setState("search",d.target.value),o==null||o(d.target.value)}})}),cD=c.forwardRef((t,e)=>{let{children:o,label:n="Suggestions",...a}=t,s=c.useRef(null),r=c.useRef(null),i=Lo(d=>d.selectedItemId),m=Ma();return c.useEffect(()=>{if(r.current&&s.current){let d=r.current,p=s.current,u,g=new ResizeObserver(()=>{u=requestAnimationFrame(()=>{let k=d.offsetHeight;p.style.setProperty("--cmdk-list-height",k.toFixed(1)+"px")})});return g.observe(d),()=>{cancelAnimationFrame(u),g.unobserve(d)}}},[]),c.createElement(Ho.div,{ref:jo(s,e),...a,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":i,"aria-label":n,id:m.listId},Js(t,d=>c.createElement("div",{ref:jo(r,m.listInnerRef),"cmdk-list-sizer":""},d)))}),dD=c.forwardRef((t,e)=>{let{open:o,onOpenChange:n,overlayClassName:a,contentClassName:s,container:r,...i}=t;return c.createElement(qS,{open:o,onOpenChange:n},c.createElement(WS,{container:r},c.createElement(KS,{"cmdk-overlay":"",className:a}),c.createElement($S,{"aria-label":t.label,"cmdk-dialog":"",className:s},c.createElement(Bm,{ref:e,...i}))))}),uD=c.forwardRef((t,e)=>Lo(o=>o.filtered.count===0)?c.createElement(Ho.div,{ref:e,...t,"cmdk-empty":"",role:"presentation"}):null),pD=c.forwardRef((t,e)=>{let{progress:o,children:n,label:a="Loading...",...s}=t;return c.createElement(Ho.div,{ref:e,...s,"cmdk-loading":"",role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a},Js(t,r=>c.createElement("div",{"aria-hidden":!0},r)))}),qo=Object.assign(Bm,{List:cD,Item:sD,Input:lD,Group:rD,Separator:iD,Dialog:dD,Empty:uD,Loading:pD});function mD(t,e){let o=t.nextElementSibling;for(;o;){if(o.matches(e))return o;o=o.nextElementSibling}}function gD(t,e){let o=t.previousElementSibling;for(;o;){if(o.matches(e))return o;o=o.previousElementSibling}}function Vm(t){let e=c.useRef(t);return mn(()=>{e.current=t}),e}var mn=typeof window>"u"?c.useEffect:c.useLayoutEffect;function An(t){let e=c.useRef();return e.current===void 0&&(e.current=t()),e}function Lo(t){let e=Cl(),o=()=>t(e.snapshot());return c.useSyncExternalStore(e.subscribe,o,o)}function Hm(t,e,o,n=[]){let a=c.useRef(),s=Ma();return mn(()=>{var r;let i=(()=>{var d;for(let p of o){if(typeof p=="string")return p.trim();if(typeof p=="object"&&"current"in p)return p.current?(d=p.current.textContent)==null?void 0:d.trim():a.current}})(),m=n.map(d=>d.trim());s.value(t,i,m),(r=e.current)==null||r.setAttribute(Dn,i),a.current=i}),a}var fD=()=>{let[t,e]=c.useState(),o=An(()=>new Map);return mn(()=>{o.current.forEach(n=>n()),o.current=new Map},[t]),(n,a)=>{o.current.set(n,a),e({})}};function hD(t){let e=t.type;return typeof e=="function"?e(t.props):"render"in e?e.render(t.props):t}function Js({asChild:t,children:e},o){return t&&c.isValidElement(e)?c.cloneElement(hD(e),{ref:e.ref},o(e.props.children)):o(e)}var bD={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function yD({className:t,...e}){return l.jsx(qo,{className:Fe("flex size-full flex-col overflow-hidden rounded-xl bg-popover text-popover-foreground shadow-lg",t),...e})}function kD({className:t,children:e,onOpenChange:o,...n}){return l.jsxs(qo.Dialog,{className:Fe("fixed inset-0 z-50 flex items-start justify-center pt-[15vh]",t),onOpenChange:o,...n,children:[l.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm",onClick:()=>o==null?void 0:o(!1)}),l.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:l.jsx(yD,{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 wD({className:t,...e}){return l.jsxs("div",{className:"flex items-center border-b px-4","cmdk-input-wrapper":"",children:[l.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:[l.jsx("circle",{cx:"11",cy:"11",r:"8"}),l.jsx("path",{d:"m21 21-4.3-4.3"})]}),l.jsx(qo.Input,{className:Fe("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 vD({className:t,...e}){return l.jsx(qo.List,{className:Fe("max-h-80 overflow-y-auto overscroll-contain p-1",t),...e})}function CD({...t}){return l.jsx(qo.Empty,{className:"py-6 text-center text-sm text-muted-foreground",...t})}function na({className:t,...e}){return l.jsx(qo.Group,{className:Fe("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 TD({className:t,...e}){return l.jsx(qo.Separator,{className:Fe("-mx-1 h-px bg-border",t),...e})}function Sn({className:t,...e}){return l.jsx(qo.Item,{className:Fe("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 SD(){const[t,e]=c.useState(!1);return c.useEffect(()=>{function o(a){a.key==="k"&&(a.metaKey||a.ctrlKey)&&(a.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 DD({open:t,setOpen:e}){const o=am(),{resolvedTheme:n,setTheme:a}=vi(),{t:s}=pt(),r=c.useCallback(u=>{e(!1),o.push(u)},[o]),i=[{label:s("layout.posts"),href:"/posts",icon:Ss,keywords:["blog","article"]},{label:s("layout.categories"),href:"/categories",icon:nu},{label:s("layout.tags"),href:"/tags",icon:Pi},{label:s("layout.comments"),href:"/comments",icon:uu},{label:s("layout.media"),href:"/media",icon:Si,keywords:["upload","image","file"]},{label:s("layout.pages"),href:"/pages",icon:iu},{label:s("layout.reusableBlocks"),href:"/reusable-blocks",icon:Ci}],m=[{label:s("layout.contentTypes"),href:"/content-types",icon:su,keywords:["cms","schema","model"]},{label:s("layout.plugins"),href:"/plugins",icon:Di,keywords:["extension","addon"]}],d=[{label:s("flows.title"),href:"/flows",icon:Ei,keywords:["flow","automation","canvas"]}],p=[{label:s("layout.users"),href:"/users",icon:bu,keywords:["member","account"]},{label:s("layout.rolesPermissions"),href:"/rbac",icon:gu,keywords:["role","permission","rbac","admin"]},{label:s("layout.cron"),href:"/crons",icon:tu,keywords:["schedule","job","task"]},{label:s("layout.jobs"),href:"/jobs",icon:lu,keywords:["queue","worker","job","task"]},{label:s("layout.tenants"),href:"/tenants",icon:Zd,keywords:["tenant","multi"]},{label:s("layout.webhooks"),href:"/webhooks",icon:ku},{label:s("layout.apiTokens"),href:"/tokens",icon:Ds,keywords:["api","token","key"]},{label:s("layout.workflows"),href:"/workflows",icon:sb,keywords:["automation","flow"]},{label:s("layout.auditLog"),href:"/audit",icon:eu,keywords:["log","history"]},{label:s("layout.options"),href:"/options",icon:xi,keywords:["setting","config","preference"]}];return l.jsxs(kD,{open:t,onOpenChange:e,children:[l.jsx(wD,{placeholder:s("command.placeholder")}),l.jsxs(vD,{children:[l.jsx(CD,{children:s("command.noResults")}),l.jsx(na,{heading:s("layout.content"),children:i.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(na,{heading:s("layout.extension"),children:m.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(na,{heading:s("flows.title"),children:d.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(na,{heading:s("layout.system"),children:p.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(TD,{}),l.jsxs(na,{heading:s("command.actions"),children:[l.jsxs(Sn,{onSelect:()=>{e(!1),r("/dashboard")},children:[l.jsx(ru,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:s("layout.dashboard")})]}),l.jsxs(Sn,{onSelect:()=>{e(!1),a(n==="dark"?"light":"dark")},children:[n==="dark"?l.jsx(hu,{className:"size-4 text-muted-foreground"}):l.jsx(pu,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:s(n==="dark"?"command.switchToLight":"command.switchToDark")})]})]})]})]})}function AD(){const{open:t,setOpen:e}=SD();return l.jsx(DD,{open:t,setOpen:e})}function xD({children:t}){const[e]=c.useState(()=>new hf({defaultOptions:{queries:{staleTime:0,gcTime:0,refetchOnMount:"always",retry:1}}})),o=rm();return c.useEffect(()=>{document.documentElement.dir=o,document.documentElement.lang=o==="rtl"?"ar":""},[o]),l.jsx(bf,{client:e,children:l.jsxs(Ff,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:[l.jsx(em,{children:t}),l.jsx(AD,{}),l.jsx(Ey,{})]})})}const PD=c.createContext(void 0);function Tl(t=!1){const e=c.useContext(PD);if(e===void 0&&!t)throw new Error(st(16));return e}function ED(t){const{focusableWhenDisabled:e,disabled:o,composite:n=!1,tabIndex:a=0,isNativeButton:s}=t,r=n&&e!==!1,i=n&&e===!1;return{props:c.useMemo(()=>{const d={onKeyDown(p){o&&e&&p.key!=="Tab"&&p.preventDefault()}};return n||(d.tabIndex=a,!s&&o&&(d.tabIndex=e?a:-1)),(s&&(e||r)||!s&&o)&&(d["aria-disabled"]=o),s&&(!e||i)&&(d.disabled=o),d},[n,o,e,r,i,s,a])}}function Oa(t={}){const{disabled:e=!1,focusableWhenDisabled:o,tabIndex:n=0,native:a=!0,composite:s}=t,r=c.useRef(null),i=Tl(!0),m=s??i!==void 0,{props:d}=ED({focusableWhenDisabled:o,disabled:e,composite:m,tabIndex:n,isNativeButton:a}),p=c.useCallback(()=>{const k=r.current;xr(k)&&m&&e&&d.disabled===void 0&&k.disabled&&(k.disabled=!1)},[e,d.disabled,m]);he(p,[p]);const u=c.useCallback((k={})=>{const{onClick:h,onMouseDown:y,onKeyUp:b,onKeyDown:w,onPointerDown:C,...v}=k;return St({onClick(T){if(e){T.preventDefault();return}h==null||h(T)},onMouseDown(T){e||y==null||y(T)},onKeyDown(T){if(e||(fs(T),w==null||w(T),T.baseUIHandlerPrevented))return;const S=T.target===T.currentTarget,f=T.currentTarget,A=xr(f),D=!a&&RD(f),F=S&&(a?A:!D),E=T.key==="Enter",B=T.key===" ",N=f.getAttribute("role"),x=(N==null?void 0:N.startsWith("menuitem"))||N==="option"||N==="gridcell";if(S&&m&&B){if(T.defaultPrevented&&x)return;T.preventDefault(),D||a&&A?(f.click(),T.preventBaseUIHandler()):F&&(h==null||h(T),T.preventBaseUIHandler());return}F&&(!a&&(B||E)&&T.preventDefault(),!a&&E&&(h==null||h(T)))},onKeyUp(T){if(!e){if(fs(T),b==null||b(T),T.target===T.currentTarget&&a&&m&&xr(T.currentTarget)&&T.key===" "){T.preventDefault();return}T.baseUIHandlerPrevented||T.target===T.currentTarget&&!a&&!m&&T.key===" "&&(h==null||h(T))}},onPointerDown(T){if(e){T.preventDefault();return}C==null||C(T)}},a?{type:"button"}:{role:"button"},d,v)},[e,d,m,a]),g=Ae(k=>{r.current=k,p()});return{getButtonProps:u,buttonRef:g}}function xr(t){return He(t)&&t.tagName==="BUTTON"}function RD(t){return!!((t==null?void 0:t.tagName)==="A"&&(t!=null&&t.href))}const ID=c.forwardRef(function(e,o){const{render:n,className:a,disabled:s=!1,focusableWhenDisabled:r=!1,nativeButton:i=!0,style:m,...d}=e,{getButtonProps:p,buttonRef:u}=Oa({disabled:s,focusableWhenDisabled:r,native:i});return tt("button",e,{state:{disabled:s},ref:[o,u],props:[d,p]})}),ld=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,cd=Up,qm=(t,e)=>o=>{var n;if((e==null?void 0:e.variants)==null)return cd(t,o==null?void 0:o.class,o==null?void 0:o.className);const{variants:a,defaultVariants:s}=e,r=Object.keys(a).map(d=>{const p=o==null?void 0:o[d],u=s==null?void 0:s[d];if(p===null)return null;const g=ld(p)||ld(u);return a[d][g]}),i=o&&Object.entries(o).reduce((d,p)=>{let[u,g]=p;return g===void 0||(d[u]=g),d},{}),m=e==null||(n=e.compoundVariants)===null||n===void 0?void 0:n.reduce((d,p)=>{let{class:u,className:g,...k}=p;return Object.entries(k).every(h=>{let[y,b]=h;return Array.isArray(b)?b.includes({...s,...i}[y]):{...s,...i}[y]===b})?[...d,u,g]:d},[]);return cd(t,r,m,o==null?void 0:o.class,o==null?void 0:o.className)},FD=qm("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 Gn({className:t,variant:e="default",size:o="default",...n}){return l.jsx(ID,{"data-slot":"button",className:Fe(FD({variant:e,size:o,className:t})),...n})}class Wm extends c.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?l.jsx("div",{className:"flex min-h-[50vh] items-center justify-center p-8",children:l.jsxs("div",{className:"text-center space-y-4 max-w-md",children:[l.jsx("div",{className:"text-4xl",children:"💥"}),l.jsx("h2",{className:"text-lg font-semibold",children:"Something went wrong"}),l.jsx("p",{className:"text-sm text-muted-foreground break-all",children:(e=this.state.error)==null?void 0:e.message}),l.jsx(Gn,{onClick:()=>{this.setState({hasError:!1,error:null})},children:"Try Again"})]})}):this.props.children}}function Sl({href:t,to:e,...o}){return l.jsx(Ng,{to:e??t??"/",...o})}function MD(t){return tt(t.defaultTagName??"div",t,t)}const Pr=768;function OD(){const[t,e]=c.useState(void 0);return c.useEffect(()=>{const o=window.matchMedia(`(max-width: ${Pr-1}px)`),n=()=>{e(window.innerWidtho.removeEventListener("change",n)},[]),!!t}const ND=c.forwardRef(function(e,o){const{className:n,render:a,orientation:s="horizontal",style:r,...i}=e;return tt("div",e,{state:{orientation:s},ref:o,props:[{role:"separator","aria-orientation":s},i]})}),Km=c.createContext(!1),$m=c.createContext(void 0);function yn(t){const e=c.useContext($m);if(t===!1&&e===void 0)throw new Error(st(27));return e}const jD={...gn,...Ea},LD=c.forwardRef(function(e,o){const{render:n,className:a,style:s,forceRender:r=!1,...i}=e,{store:m}=yn(),d=m.useState("open"),p=m.useState("nested"),u=m.useState("mounted"),g=m.useState("transitionStatus");return tt("div",e,{state:{open:d,transitionStatus:g},ref:[m.context.backdropRef,o],stateAttributesMapping:jD,props:[{role:"presentation",hidden:!u,style:{userSelect:"none",WebkitUserSelect:"none"}},i],enabled:r||!p})}),_D=c.forwardRef(function(e,o){const{render:n,className:a,style:s,disabled:r=!1,nativeButton:i=!0,...m}=e,{store:d}=yn(),p=d.useState("open"),{getButtonProps:u,buttonRef:g}=Oa({disabled:r,native:i}),k={disabled:r};function h(y){p&&d.setOpen(!1,Oe(Lu,y.nativeEvent))}return tt("button",e,{state:k,ref:[o,g],props:[{onClick:h},m,u]})}),UD=c.forwardRef(function(e,o){const{render:n,className:a,style:s,id:r,...i}=e,{store:m}=yn(),d=fn(r);return m.useSyncedValueWithCleanup("descriptionElementId",d),tt("p",e,{ref:o,props:[{id:d},i]})});let zD=(function(t){return t.nestedDialogs="--nested-dialogs",t})({}),BD=(function(t){return t[t.open=Jo.open]="open",t[t.closed=Jo.closed]="closed",t[t.startingStyle=Jo.startingStyle]="startingStyle",t[t.endingStyle=Jo.endingStyle]="endingStyle",t.nested="data-nested",t.nestedDialogOpen="data-nested-dialog-open",t})({});const Gm=c.createContext(void 0);function VD(){const t=c.useContext(Gm);if(t===void 0)throw new Error(st(26));return t}const Jm="ArrowUp",Qm="ArrowDown",Ym="ArrowLeft",Zm="ArrowRight",Dl="Home",Al="End",HD=new Set([Ym,Zm]),wR=new Set([Ym,Zm,Dl,Al]),qD=new Set([Jm,Qm]),vR=new Set([Jm,Qm,Dl,Al]),WD=new Set([...HD,...qD]),xl=new Set([...WD,Dl,Al]),KD="Shift",$D="Control",GD="Alt",JD="Meta",CR=new Set([KD,$D,GD,JD]);function QD(t){return He(t)&&t.tagName==="INPUT"}function TR(t){return!!(QD(t)&&t.selectionStart!=null||He(t)&&t.tagName==="TEXTAREA")}function SR(t,e,o,n){if(!t||!e||!e.scrollTo)return;let a=t.scrollLeft,s=t.scrollTop;const r=t.clientWidtht.scrollLeft+t.clientWidth-d.scrollPaddingRight?a=m+e.offsetWidth+p.scrollMarginRight-t.clientWidth+d.scrollPaddingRight:m-p.scrollMarginLeftt.scrollLeft+t.clientWidth-d.scrollPaddingRight&&(a=m+e.offsetWidth+p.scrollMarginRight-t.clientWidth+d.scrollPaddingRight))}if(i&&n!=="horizontal"){const m=dd(t,e,"top"),d=es(t),p=es(e);m-p.scrollMarginTopt.scrollTop+t.clientHeight-d.scrollPaddingBottom&&(s=m+e.offsetHeight+p.scrollMarginBottom-t.clientHeight+d.scrollPaddingBottom)}t.scrollTo({left:a,top:s,behavior:"auto"})}function dd(t,e,o){const n=o==="left"?"offsetLeft":"offsetTop";let a=0;for(;e.offsetParent&&(a+=e[n],e.offsetParent!==t);)e=e.offsetParent;return a}function es(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 YD={...gn,...Ea,nestedDialogOpen(t){return t?{[BD.nestedDialogOpen]:""}:null}},ZD=c.forwardRef(function(e,o){const{render:n,className:a,style:s,finalFocus:r,initialFocus:i,...m}=e,{store:d}=yn(),p=d.useState("descriptionElementId"),u=d.useState("disablePointerDismissal"),g=d.useState("floatingRootContext"),k=d.useState("popupProps"),h=d.useState("modal"),y=d.useState("mounted"),b=d.useState("nested"),w=d.useState("nestedOpenDialogCount"),C=d.useState("open"),v=d.useState("openMethod"),T=d.useState("titleElementId"),S=d.useState("transitionStatus"),f=d.useState("role"),A=g.useState("floatingId"),D=m.id??A;VD(),Ra({open:C,ref:d.context.popupRef,onComplete(){var M,j;C&&((j=(M=d.context).onOpenChangeComplete)==null||j.call(M,!0))}});function F(M){return M==="touch"?d.context.popupRef.current:!0}const E=i===void 0?F:i,B=w>0,N=d.useStateSetter("popupElement"),q=tt("div",e,{state:{open:C,nested:b,transitionStatus:S,nestedDialogOpen:B},props:[k,{id:D,"aria-labelledby":T??void 0,"aria-describedby":p??void 0,role:f,...Qn,hidden:!y,onKeyDown(M){xl.has(M.key)&&M.stopPropagation()},style:{[zD.nestedDialogs]:w}},m],ref:[o,d.context.popupRef,N],stateAttributesMapping:YD});return l.jsx(Yi,{context:g,openInteractionType:v,disabled:!y,closeOnFocusOut:!u,initialFocus:E,returnFocus:r,modal:h!==!1,restoreFocus:"popup",children:q})}),Pl=c.forwardRef(function(e,o){const{cutout:n,...a}=e;let s;if(n){const r=n.getBoundingClientRect();s=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${r.left}px ${r.top}px,${r.left}px ${r.bottom}px,${r.right}px ${r.bottom}px,${r.right}px ${r.top}px,${r.left}px ${r.top}px)`}return l.jsx("div",{ref:o,role:"presentation","data-base-ui-inert":"",...a,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:s}})}),XD=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e,{store:s}=yn(),r=s.useState("mounted"),i=s.useState("modal"),m=s.useState("open");return r||n?l.jsx(Gm.Provider,{value:n,children:l.jsxs($i,{ref:o,...a,children:[r&&i===!0&&l.jsx(Pl,{ref:s.context.internalBackdropRef,inert:gl(!m)}),e.children]})}):null});let ud={},pd={},md="";function eA(t){if(typeof document>"u")return!1;const e=Le(t);return Xe(e).innerWidth-e.documentElement.clientWidth>0}function tA(t){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const o=Le(t),n=o.documentElement,a=o.body,s=Uo(n)?n:a,r=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=r,n.style.scrollbarGutter=i,m===d}function oA(t){const e=Le(t),o=e.documentElement,n=e.body,a=Uo(o)?o:n,s={overflowY:a.style.overflowY,overflowX:a.style.overflowX};return Object.assign(a.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(a.style,s)}}function nA(t){var k;const e=Le(t),o=e.documentElement,n=e.body,a=Xe(o);let s=0,r=0,i=!1;const m=Zt.create();if(Du&&(((k=a.visualViewport)==null?void 0:k.scale)??1)!==1)return()=>{};function d(){const h=a.getComputedStyle(o),y=a.getComputedStyle(n),C=(h.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";s=o.scrollTop,r=o.scrollLeft,ud={scrollbarGutter:o.style.scrollbarGutter,overflowY:o.style.overflowY,overflowX:o.style.overflowX},md=o.style.scrollBehavior,pd={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,T=o.scrollWidth>o.clientWidth,S=h.overflowY==="scroll"||y.overflowY==="scroll",f=h.overflowX==="scroll"||y.overflowX==="scroll",A=Math.max(0,a.innerWidth-n.clientWidth),D=Math.max(0,a.innerHeight-n.clientHeight),F=parseFloat(y.marginTop)+parseFloat(y.marginBottom),E=parseFloat(y.marginLeft)+parseFloat(y.marginRight),B=Uo(o)?o:n;if(i=tA(t),i){o.style.scrollbarGutter=C,B.style.overflowY="hidden",B.style.overflowX="hidden";return}Object.assign(o.style,{scrollbarGutter:C,overflowY:"hidden",overflowX:"hidden"}),(v||S)&&(o.style.overflowY="scroll"),(T||f)&&(o.style.overflowX="scroll"),Object.assign(n.style,{position:"relative",height:F||D?`calc(100dvh - ${F+D}px)`:"100dvh",width:E||A?`calc(100vw - ${E+A}px)`:"100vw",boxSizing:"border-box",overflow:"hidden",scrollBehavior:"unset"}),n.scrollTop=s,n.scrollLeft=r,o.setAttribute("data-base-ui-scroll-locked",""),o.style.scrollBehavior="unset"}function p(){Object.assign(o.style,ud),Object.assign(n.style,pd),i||(o.scrollTop=s,o.scrollLeft=r,o.removeAttribute("data-base-ui-scroll-locked"),o.style.scrollBehavior=md)}function u(){p(),m.request(d)}d();const g=Me(a,"resize",u);return()=>{m.cancel(),p(),typeof a.removeEventListener=="function"&&g()}}class aA{constructor(){Ue(this,"lockCount",0);Ue(this,"restore",null);Ue(this,"timeoutLock",Ut.create());Ue(this,"timeoutUnlock",Ut.create());Ue(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});Ue(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,a=Xe(n).getComputedStyle(n).overflowY;if(a==="hidden"||a==="clip"){this.restore=Ni;return}const s=Au||!eA(e);this.restore=s?oA(e):nA(e)}}const sA=new aA;function Xm(t=!0,e=null){he(()=>{if(t)return sA.acquire(e)},[t,e])}function rA(t){const{store:e,parentContext:o,actionsRef:n,isDrawer:a}=t,s=e.useState("open");xp(e,s),Ls(e);const{forceUnmount:r}=_s(s,e),i=c.useCallback(()=>{e.setOpen(!1,Oe(Fs))},[e]);return c.useImperativeHandle(n,()=>({unmount:r,close:i}),[r,i]),{parentContext:o,isDrawer:a}}function iA({store:t,dialogRoot:e}){const{parentContext:o,isDrawer:n}=e,a=t.useState("open"),s=t.useState("disablePointerDismissal"),r=t.useState("modal"),i=t.useState("popupElement"),m=t.useState("floatingRootContext"),[d,p]=c.useState(0),[u,g]=c.useState(0),k=d===0,h=Os(m,{outsidePressEvent(){return t.context.internalBackdropRef.current||t.context.backdropRef.current?"intentional":{mouse:r==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(C){if(!t.context.outsidePressEnabledRef.current||"button"in C&&C.button!==0||"touches"in C&&C.touches.length!==1)return!1;const v=ht(C);if(k&&!s){const T=v;return r&&(t.context.internalBackdropRef.current||t.context.backdropRef.current)?t.context.internalBackdropRef.current===T||t.context.backdropRef.current===T||Se(T,i)&&!(T!=null&&T.hasAttribute("data-base-ui-portal")):!0}return!1},escapeKey:k});Xm(a&&r===!0,i),t.useContextCallback("onNestedDialogOpen",(C,v)=>{p(C),g(v)}),t.useContextCallback("onNestedDialogClose",()=>{p(0),g(0)}),c.useEffect(()=>(o!=null&&o.onNestedDialogOpen&&a&&o.onNestedDialogOpen(d+1,u+(n?1:0)),o!=null&&o.onNestedDialogClose&&!a&&o.onNestedDialogClose(),()=>{o!=null&&o.onNestedDialogClose&&a&&o.onNestedDialogClose()}),[n,a,d,u,o]);const y=h.reference??Je,b=h.trigger??Je,w=c.useMemo(()=>St(Qn,h.floating),[h.floating]);return Us(t,{activeTriggerProps:y,inactiveTriggerProps:b,popupProps:w,nestedOpenDialogCount:d,nestedOpenDrawerCount:u}),null}const lA={...Bs,modal:le(t=>t.modal),nested:le(t=>t.nested),nestedOpenDialogCount:le(t=>t.nestedOpenDialogCount),nestedOpenDrawerCount:le(t=>t.nestedOpenDrawerCount),disablePointerDismissal:le(t=>t.disablePointerDismissal),openMethod:le(t=>t.openMethod),descriptionElementId:le(t=>t.descriptionElementId),titleElementId:le(t=>t.titleElementId),viewportElement:le(t=>t.viewportElement),role:le(t=>t.role)};class El extends Pa{constructor(o,n,a=!1){const s=new Yn,r=cA(o);r.floatingRootContext=al(s,n,a);super(r,{popupRef:c.createRef(),backdropRef:c.createRef(),internalBackdropRef:c.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:s,onOpenChange:void 0,onOpenChangeComplete:void 0},lA);Ue(this,"setOpen",(o,n)=>{var s,r;if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!o&&n.trigger==null&&this.state.activeTriggerId!=null&&(n.trigger=this.state.activeTriggerElement??void 0),(r=(s=this.context).onOpenChange)==null||r.call(s,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const a={open:o};ol(a,o,n.trigger),this.update(a)})}static useStore(o,n){return tl(o,(s,r)=>new El(n,s,r),!0).store}}function cA(t={}){return{...zs(),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 dA(t,e="dialog"){const{children:o,open:n,defaultOpen:a=!1,onOpenChange:s,onOpenChangeComplete:r,disablePointerDismissal:i=!1,modal:m=!0,actionsRef:d,handle:p,triggerId:u,defaultTriggerId:g=null}=t,k=e==="drawer",h=e==="alert-dialog",y=h?!0:m,b=h||i,w=h?"alertdialog":"dialog",C=yn(!0),T={modal:y,disablePointerDismissal:b,nested:!!C,role:w},S=El.useStore(p==null?void 0:p.store,{open:a,openProp:n,activeTriggerId:g,triggerIdProp:u,...T});As(()=>{const N=n===void 0&&S.state.open===!1&&a===!0?{open:!0,activeTriggerId:g}:null;h?S.update(N?{...T,...N}:T):N&&S.update(N)}),S.useControlledProp("openProp",n),S.useControlledProp("triggerIdProp",u),S.useSyncedValues(T),S.useContextCallback("onOpenChange",s),S.useContextCallback("onOpenChangeComplete",r);const f=S.useState("open"),A=S.useState("mounted"),D=S.useState("payload"),F=rA({store:S,actionsRef:d,parentContext:C==null?void 0:C.store.context,isDrawer:k}),E=f||A,B=c.useMemo(()=>({store:S}),[S]);return l.jsx(Km.Provider,{value:!1,children:l.jsxs($m.Provider,{value:B,children:[E&&l.jsx(iA,{store:S,dialogRoot:F}),typeof o=="function"?o({payload:D}):o]})})}function uA(t){const e=c.useContext(Km)?"drawer":"dialog";return dA(t,e)}const pA=c.forwardRef(function(e,o){const{render:n,className:a,style:s,id:r,...i}=e,{store:m}=yn(),d=fn(r);return m.useSyncedValueWithCleanup("titleElementId",d),tt("h2",e,{ref:o,props:[{id:d},i]})});function mA(t){const e=c.useRef(""),o=c.useCallback(a=>{a.defaultPrevented||(e.current=a.pointerType,t(a,a.pointerType))},[t]);return{onClick:c.useCallback(a=>{if(a.detail===0){t(a,"keyboard");return}"pointerType"in a?t(a,a.pointerType):t(a,e.current),e.current=""},[t]),onPointerDown:o}}function gA(t,e){const o=c.useRef(t),n=Ae(e);he(()=>{o.current!==t&&n(o.current)},[t,n]),he(()=>{o.current=t},[t])}function eg(t,e){const o=Ae((s,r)=>{(typeof t=="function"?t():t)||e(r||(Au?"touch":""))}),{onClick:n,onPointerDown:a}=mA(o);return c.useMemo(()=>({onClick:n,onPointerDown:a}),[n,a])}function fA(t){const[e,o]=c.useState(null),n=eg(t,o);return gA(t,a=>{a&&!t&&o(null)}),c.useMemo(()=>({openMethod:e,triggerProps:n}),[e,n])}function hA({...t}){return l.jsx(uA,{"data-slot":"sheet",...t})}function bA({...t}){return l.jsx(XD,{"data-slot":"sheet-portal",...t})}function yA({className:t,...e}){return l.jsx(LD,{"data-slot":"sheet-overlay",className:Fe("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 kA({className:t,children:e,side:o="right",showCloseButton:n=!0,...a}){return l.jsxs(bA,{children:[l.jsx(yA,{}),l.jsxs(ZD,{"data-slot":"sheet-content","data-side":o,className:Fe("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),...a,children:[e,n&&l.jsxs(_D,{"data-slot":"sheet-close",render:l.jsx(Gn,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[l.jsx(wu,{}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function wA({className:t,...e}){return l.jsx("div",{"data-slot":"sheet-header",className:Fe("flex flex-col gap-0.5 p-4",t),...e})}function DR({className:t,...e}){return l.jsx("div",{"data-slot":"sheet-footer",className:Fe("mt-auto flex flex-col gap-2 p-4",t),...e})}function vA({className:t,...e}){return l.jsx(pA,{"data-slot":"sheet-title",className:Fe("font-heading text-base font-medium text-foreground",t),...e})}function CA({className:t,...e}){return l.jsx(UD,{"data-slot":"sheet-description",className:Fe("text-sm text-muted-foreground",t),...e})}function Er({className:t,...e}){return l.jsx("div",{"data-slot":"skeleton",className:Fe("animate-pulse rounded-md bg-muted",t),...e})}const TA="sidebar_state",SA=3600*24*7,DA="16rem",AA="18rem",xA="3rem",PA="b",tg=c.createContext(null);function Rl(){const t=c.useContext(tg);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function EA({defaultOpen:t=!0,open:e,onOpenChange:o,className:n,style:a,children:s,...r}){const i=OD(),[m,d]=c.useState(!1),[p,u]=c.useState(t),g=e??p,k=c.useCallback(w=>{const C=typeof w=="function"?w(g):w;o?o(C):u(C),document.cookie=`${TA}=${C}; path=/; max-age=${SA}`},[o,g]),h=c.useCallback(()=>i?d(w=>!w):k(w=>!w),[i,k,d]);c.useEffect(()=>{const w=C=>{C.key===PA&&(C.metaKey||C.ctrlKey)&&(C.preventDefault(),h())};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[h]);const y=g?"expanded":"collapsed",b=c.useMemo(()=>({state:y,open:g,setOpen:k,isMobile:i,openMobile:m,setOpenMobile:d,toggleSidebar:h}),[y,g,k,i,m,d,h]);return l.jsx(tg.Provider,{value:b,children:l.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":DA,"--sidebar-width-icon":xA,...a},className:Fe("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",n),...r,children:s})})}function RA({side:t="left",variant:e="sidebar",collapsible:o="offcanvas",className:n,children:a,dir:s,...r}){const{isMobile:i,state:m,openMobile:d,setOpenMobile:p}=Rl();return o==="none"?l.jsx("div",{"data-slot":"sidebar",className:Fe("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",n),...r,children:a}):i?l.jsx(hA,{open:d,onOpenChange:p,...r,children:l.jsxs(kA,{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":AA},side:t,children:[l.jsxs(wA,{className:"sr-only",children:[l.jsx(vA,{children:"Sidebar"}),l.jsx(CA,{children:"Displays the mobile sidebar."})]}),l.jsx("div",{className:"flex h-full w-full flex-col",children:a})]})}):l.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:[l.jsx("div",{"data-slot":"sidebar-gap",className:Fe("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)")}),l.jsx("div",{"data-slot":"sidebar-container","data-side":t,className:Fe("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),...r,children:l.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:a})})]})}function IA({className:t,onClick:e,...o}){const{toggleSidebar:n}=Rl();return l.jsxs(Gn,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:Fe(t),onClick:a=>{e==null||e(a),n()},...o,children:[l.jsx(Tb,{}),l.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function FA({className:t,...e}){return l.jsx("main",{"data-slot":"sidebar-inset",className:Fe("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 MA({className:t,...e}){return l.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:Fe("flex flex-col gap-2 p-2",t),...e})}function OA({className:t,...e}){return l.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:Fe("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-y-auto",t),...e})}function og({className:t,...e}){return l.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:Fe("relative flex w-full min-w-0 flex-col p-2",t),...e})}function ng({className:t,...e}){return l.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:Fe("w-full text-sm",t),...e})}function ag({className:t,...e}){return l.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:Fe("flex w-full min-w-0 flex-col gap-0",t),...e})}function sg({className:t,...e}){return l.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:Fe("group/menu-item relative",t),...e})}const NA=qm("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 rg({render:t,isActive:e=!1,variant:o="default",size:n="default",tooltip:a,className:s,...r}){const{isMobile:i,state:m}=Rl(),d=MD({defaultTagName:"button",props:St({className:Fe(NA({variant:o,size:n}),s)},r),render:a?l.jsx(om,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:n,active:e}});return a?(typeof a=="string"&&(a={children:a}),l.jsxs(tm,{children:[d,l.jsx(nm,{side:"right",align:"center",hidden:m!=="collapsed"||i,...a})]})):d}const ig=c.createContext(void 0);function Il(t){const e=c.useContext(ig);if(e===void 0&&!t)throw new Error(st(33));return e}const lg=c.createContext(void 0);function fo(t){const e=c.useContext(lg);if(e===void 0&&!t)throw new Error(st(36));return e}const jA=c.createContext(void 0);function Qs(t=!0){const e=c.useContext(jA);if(e===void 0&&!t)throw new Error(st(25));return e}function LA(t){const{closeOnClick:e,highlighted:o,id:n,nodeId:a,store:s,typingRef:r,itemRef:i,itemMetadata:m}=t,{events:d}=s.useState("floatingTreeRoot"),p=Qs(!0),u=p!==void 0;return c.useMemo(()=>({id:n,role:"menuitem",tabIndex:o?0:-1,onKeyDown(g){g.key===" "&&(r!=null&&r.current)&&g.preventDefault()},onMouseMove(g){a&&d.emit("itemhover",{nodeId:a,target:g.currentTarget})},onClick(g){e&&d.emit("close",{domEvent:g,reason:ju})},onMouseUp(g){if(p){const k=p.initialCursorPointRef.current;if(p.initialCursorPointRef.current=null,u&&k&&Math.abs(g.clientX-k.x)<=1&&Math.abs(g.clientY-k.y)<=1||u&&!Pu&&g.button===2)return}i.current&&s.context.allowMouseUpTriggerRef.current&&(!u||g.button===2)&&(!m||m.type==="regular-item")&&i.current.click()}}),[e,o,n,d,a,s,r,i,p,u,m])}const _A={type:"regular-item"};function cg(t){const{closeOnClick:e,disabled:o=!1,highlighted:n,id:a,store:s,typingRef:r=s.context.typingRef,nativeButton:i,itemMetadata:m,nodeId:d}=t,p=c.useRef(null),{getButtonProps:u,buttonRef:g}=Oa({disabled:o,focusableWhenDisabled:!0,native:i,composite:!0}),k=LA({closeOnClick:e,highlighted:n,id:a,nodeId:d,store:s,typingRef:r,itemRef:p,itemMetadata:m}),h=c.useCallback(b=>St(k,{onMouseEnter(){m.type==="submenu-trigger"&&m.setActive()}},b,u),[k,u,m]),y=Kn(p,g);return c.useMemo(()=>({getItemProps:h,itemRef:y}),[h,y])}const dg=c.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}});function UA(){return c.useContext(dg)}let zA=(function(t){return t[t.None=0]="None",t[t.GuessFromOrder=1]="GuessFromOrder",t})({});function Fl(t={}){const{label:e,metadata:o,textRef:n,indexGuessBehavior:a,index:s}=t,{register:r,unregister:i,subscribeMapChange:m,elementsRef:d,labelsRef:p,nextIndexRef:u}=UA(),g=c.useRef(-1),[k,h]=c.useState(s??(a===zA.GuessFromOrder?()=>{if(g.current===-1){const w=u.current;u.current+=1,g.current=w}return g.current}:-1)),y=c.useRef(null),b=c.useCallback(w=>{var C;if(y.current=w,k!==-1&&w!==null&&(d.current[k]=w,p)){const v=e!==void 0;p.current[k]=v?e:((C=n==null?void 0:n.current)==null?void 0:C.textContent)??w.textContent}},[k,d,p,e,n]);return he(()=>{if(s!=null)return;const w=y.current;if(w)return r(w,o),()=>{i(w)}},[s,r,i,o]),he(()=>{if(s==null)return m(w=>{var v;const C=y.current?(v=w.get(y.current))==null?void 0:v.index:null;C!=null&&h(C)})},[s,m,h]),c.useMemo(()=>({ref:b,index:k}),[k,b])}const BA=c.forwardRef(function(e,o){const{render:n,className:a,id:s,label:r,nativeButton:i=!1,disabled:m=!1,closeOnClick:d=!0,style:p,...u}=e,g=Fl({label:r}),k=Il(!0),h=fn(s),{store:y}=fo(),b=y.useState("isActive",g.index),w=y.useState("itemProps"),{getItemProps:C,itemRef:v}=cg({closeOnClick:d,disabled:m,highlighted:b,id:h,store:y,nativeButton:i,nodeId:k==null?void 0:k.context.nodeId,itemMetadata:_A});return tt("div",e,{state:{disabled:m,highlighted:b},props:[w,u,C],ref:[v,o,g.ref]})}),VA=c.createContext(void 0);function ug(t){return c.useContext(VA)}const HA={...gn,...Ea},qA=c.forwardRef(function(e,o){const{render:n,className:a,style:s,finalFocus:r,...i}=e,{store:m}=fo(),{side:d,align:p}=Il(),u=ug()!=null,g=m.useState("open"),k=m.useState("transitionStatus"),h=m.useState("popupProps"),y=m.useState("mounted"),b=m.useState("instantType"),w=m.useState("activeTriggerElement"),C=m.useState("parent"),v=m.useState("lastOpenChangeReason"),T=m.useState("rootId"),S=m.useState("floatingRootContext"),f=m.useState("floatingTreeRoot"),A=m.useState("closeDelay"),D=m.useState("activeTriggerElement"),F=m.useState("hoverEnabled"),E=m.useState("disabled"),B=C.type==="context-menu";Ra({open:g,ref:m.context.popupRef,onComplete(){var j,O;g&&((O=(j=m.context).onOpenChangeComplete)==null||O.call(j,!0))}}),c.useEffect(()=>{function j(O){m.setOpen(!1,Oe(O.reason,O.domEvent))}return f.events.on("close",j),()=>{f.events.off("close",j)}},[f.events,m]),ll(S,{enabled:F&&!E&&!B&&C.type!=="menubar",closeDelay:A});const N=c.useCallback(j=>{m.set("popupElement",j)},[m]),x={transitionStatus:k,side:d,align:p,open:g,nested:C.type==="menu",instant:b},q=tt("div",e,{state:x,ref:[o,m.context.popupRef,N],stateAttributesMapping:HA,props:[h,{onKeyDown(j){u&&xl.has(j.key)&&j.stopPropagation()}},Ws(k),i,{"data-rootownerid":T}]});let M=C.type===void 0||B;return(w||C.type==="menubar"&&v!==ji)&&(M=!0),l.jsx(Yi,{context:S,modal:B,disabled:!y,returnFocus:r===void 0?M:r,initialFocus:C.type!=="menu",restoreFocus:!0,externalTree:C.type!=="menubar"?f:void 0,previousFocusableElement:D,nextFocusableElement:C.type===void 0?m.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:C.type===void 0?m.context.beforeContentFocusGuardRef:void 0,children:q})}),pg=c.createContext(void 0);function WA(){const t=c.useContext(pg);if(t===void 0)throw new Error(st(32));return t}const KA=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e,{store:s}=fo();return s.useState("mounted")||n?l.jsx(pg.Provider,{value:n,children:l.jsx($i,{ref:o,...a})}):null});function $A(t){const{children:e,elementsRef:o,labelsRef:n,onMapChange:a}=t,s=Ae(a),r=c.useRef(0),i=Ot(JA).current,m=Ot(GA).current,[d,p]=c.useState(0),u=c.useRef(d),g=Ae((w,C)=>{m.set(w,C??null),u.current+=1,p(u.current)}),k=Ae(w=>{m.delete(w),u.current+=1,p(u.current)}),h=c.useMemo(()=>{const w=new Map;return Array.from(m.keys()).filter(v=>v.isConnected).sort(QA).forEach((v,T)=>{const S=m.get(v)??{};w.set(v,{...S,index:T})}),w},[m,d]);he(()=>{if(typeof MutationObserver!="function"||h.size===0)return;const w=new MutationObserver(C=>{const v=new Set,T=S=>v.has(S)?v.delete(S):v.add(S);C.forEach(S=>{S.removedNodes.forEach(T),S.addedNodes.forEach(T)}),v.size===0&&(u.current+=1,p(u.current))});return h.forEach((C,v)=>{v.parentElement&&w.observe(v.parentElement,{childList:!0})}),()=>{w.disconnect()}},[h]),he(()=>{u.current===d&&(o.current.length!==h.size&&(o.current.length=h.size),n&&n.current.length!==h.size&&(n.current.length=h.size),r.current=h.size),s(h)},[s,h,o,n,d]),he(()=>()=>{o.current=[]},[o]),he(()=>()=>{n&&(n.current=[])},[n]);const y=Ae(w=>(i.add(w),()=>{i.delete(w)}));he(()=>{i.forEach(w=>w(h))},[i,h]);const b=c.useMemo(()=>({register:g,unregister:k,subscribeMapChange:y,elementsRef:o,labelsRef:n,nextIndexRef:r}),[g,k,y,o,n,r]);return l.jsx(dg.Provider,{value:b,children:e})}function GA(){return new Map}function JA(){return new Set}function QA(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 YA=20;function mg(t,e,o,n){const[a,s]=c.useState(!1);he(()=>{if(!t||!e||o==null){s(!1);return}const r=Le(o).documentElement.clientWidth,i=o.offsetWidth;s(r>0&&i>0&&i>=r-YA)},[t,e,o]),Xm(t&&(!e||a),n)}const ZA=c.forwardRef(function(e,o){var Ee;const{anchor:n,positionMethod:a="absolute",className:s,render:r,side:i,align:m,sideOffset:d=0,alignOffset:p=0,collisionBoundary:u="clipping-ancestors",collisionPadding:g=5,arrowPadding:k=5,sticky:h=!1,disableAnchorTracking:y=!1,collisionAvoidance:b=Jk,style:w,...C}=e,{store:v}=fo(),T=WA(),S=Qs(!0),f=v.useState("parent"),A=v.useState("floatingRootContext"),D=v.useState("floatingTreeRoot"),F=v.useState("mounted"),E=v.useState("open"),B=v.useState("modal"),N=v.useState("openMethod"),x=v.useState("activeTriggerElement"),q=v.useState("transitionStatus"),M=v.useState("positionerElement"),j=v.useState("instantType"),O=v.useState("hasViewport"),V=v.useState("lastOpenChangeReason"),$=v.useState("floatingNodeId"),I=v.useState("floatingParentNodeId"),se=A.useState("domReferenceElement"),_=c.useRef(null),U=el(M,!1,!1);let W=n,z=d,H=p,L=m,R=b;f.type==="context-menu"&&(W=n??((Ee=f.context)==null?void 0:Ee.anchor),L=L??"start",!i&&L!=="center"&&(H=e.alignOffset??2,z=e.sideOffset??-5));let Y=i,be=L;f.type==="menu"?(Y=Y??"inline-end",be=be??"start",R=e.collisionAvoidance??Ki):f.type==="menubar"&&(Y=Y??"bottom",be=be??"start");const De=f.type==="context-menu",G=pl({anchor:W,floatingRootContext:A,positionMethod:S?"fixed":a,mounted:F,side:Y,sideOffset:z,align:be,alignOffset:H,arrowPadding:De?0:k,collisionBoundary:u,collisionPadding:g,sticky:h,nodeId:$,keepMounted:T,disableAnchorTracking:y,collisionAvoidance:R,shiftCrossAxis:De&&!("side"in R&&R.side==="flip"),externalTree:D,adaptiveOrigin:O?ul:void 0});c.useEffect(()=>{function Ce(ye){ye.open&&(ye.parentNodeId===$&&v.set("hoverEnabled",!1),ye.nodeId!==$&&ye.parentNodeId===v.select("floatingParentNodeId")&&v.setOpen(!1,Oe(ra)))}return D.events.on("menuopenchange",Ce),()=>{D.events.off("menuopenchange",Ce)}},[v,D.events,$]),c.useEffect(()=>{if(v.select("floatingParentNodeId")==null)return;function Ce(ye){if(ye.open||ye.nodeId!==v.select("floatingParentNodeId"))return;const Pe=ye.reason??ra;v.setOpen(!1,Oe(Pe))}return D.events.on("menuopenchange",Ce),()=>{D.events.off("menuopenchange",Ce)}},[D.events,v]);const de=bt();c.useEffect(()=>{E||de.clear()},[E,de]),c.useEffect(()=>{function Ce(ye){if(!(!E||ye.nodeId!==v.select("floatingParentNodeId")))if(ye.target&&x&&x!==ye.target){const Pe=v.select("closeDelay");Pe>0?de.isStarted()||de.start(Pe,()=>{v.setOpen(!1,Oe(ra))}):v.setOpen(!1,Oe(ra))}else de.clear()}return D.events.on("itemhover",Ce),()=>{D.events.off("itemhover",Ce)}},[D.events,E,x,v,de]),c.useEffect(()=>{const Ce={open:E,nodeId:$,parentNodeId:I,reason:v.select("lastOpenChangeReason")};D.events.emit("menuopenchange",Ce)},[D.events,E,v,$,I]),he(()=>{const Ce=se,ye=_.current;if(Ce&&(_.current=Ce),ye&&Ce&&Ce!==ye){v.set("instantType",void 0);const Pe=new AbortController;return U(()=>{v.set("instantType","trigger-change")},Pe.signal),()=>{Pe.abort()}}},[se,U,v]);const ce={open:E,side:G.side,align:G.align,anchorHidden:G.anchorHidden,nested:f.type==="menu",instant:j},we=f.type==="menubar"&&f.context.modal;mg(E&&(we||B&&V!==Ye),N==="touch",M,x);const fe=ml(e,ce,{styles:G.positionerStyles,transitionStatus:q,props:C,refs:[o,v.useStateSetter("positionerElement")],hidden:!F,inert:!E}),ne=F&&f.type!=="menu"&&(f.type!=="menubar"&&B&&V!==Ye||f.type==="menubar"&&f.context.modal);let ee=null;return f.type==="menubar"?ee=f.context.contentElement:f.type===void 0&&(ee=x),l.jsxs(ig.Provider,{value:G,children:[ne&&l.jsx(Pl,{ref:f.type==="context-menu"||f.type==="nested-context-menu"?f.context.internalBackdropRef:null,inert:gl(!E),cutout:ee}),l.jsx(mp,{id:$,children:l.jsx($A,{elementsRef:v.context.itemDomElements,labelsRef:v.context.itemLabels,children:fe})})]})}),XA=c.createContext(null);function gg(t){return c.useContext(XA)}const ex={...Bs,disabled:le(t=>t.parent.type==="menubar"&&t.parent.context.disabled||t.disabled),modal:le(t=>(t.parent.type===void 0||t.parent.type==="context-menu")&&(t.modal??!0)),openMethod:le(t=>t.openMethod),allowMouseEnter:le(t=>t.allowMouseEnter),stickIfOpen:le(t=>t.stickIfOpen),parent:le(t=>t.parent),rootId:le(t=>t.parent.type==="menu"?t.parent.store.select("rootId"):t.parent.type!==void 0?t.parent.context.rootId:t.rootId),activeIndex:le(t=>t.activeIndex),isActive:le((t,e)=>t.activeIndex===e),hoverEnabled:le(t=>t.hoverEnabled),instantType:le(t=>t.instantType),lastOpenChangeReason:le(t=>t.openChangeReason),floatingTreeRoot:le(t=>t.parent.type==="menu"?t.parent.store.select("floatingTreeRoot"):t.floatingTreeRoot),floatingNodeId:le(t=>t.floatingNodeId),floatingParentNodeId:le(t=>t.floatingParentNodeId),itemProps:le(t=>t.itemProps),closeDelay:le(t=>t.closeDelay),hasViewport:le(t=>t.hasViewport),keyboardEventRelay:le(t=>{if(t.keyboardEventRelay)return t.keyboardEventRelay;if(t.parent.type==="menu")return t.parent.store.select("keyboardEventRelay")})};class Ml extends Pa{constructor(o){super({...tx(),...o},{positionerRef:c.createRef(),popupRef:c.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:c.createRef(),beforeContentFocusGuardRef:c.createRef(),onOpenChangeComplete:void 0,triggerElements:new Yn},ex);Ue(this,"unsubscribeParentListener",null);this.unsubscribeParentListener=this.observe("parent",n=>{var a;if((a=this.unsubscribeParentListener)==null||a.call(this),n.type==="menu"){let s=n.store.select("rootId"),r=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"),p=n.store.select("keyboardEventRelay");s===m&&r===d&&i===p||(s=m,r=d,i=p,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 a=Ot(()=>new Ml(n)).current;return o??a}}function tx(){return{...zs(),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 Gi,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:Je,keyboardEventRelay:void 0,closeDelay:0,hasViewport:!1}}const fg=c.createContext(void 0);function hg(){return c.useContext(fg)}const bg=Ri(function(e){const{children:o,open:n,onOpenChange:a,onOpenChangeComplete:s,defaultOpen:r=!1,disabled:i=!1,modal:m,loopFocus:d=!0,orientation:p="vertical",actionsRef:u,closeParentOnEsc:g=!1,handle:k,triggerId:h,defaultTriggerId:y=null,highlightItemOnHover:b=!0}=e,w=Qs(!0),C=fo(!0),v=gg(!0),T=hg(),S=c.useMemo(()=>T&&C?{type:"menu",store:C.store}:v?{type:"menubar",context:v}:w&&!C?{type:"context-menu",context:w}:{type:void 0},[w,C,v,T]),f=Ml.useStore(k==null?void 0:k.store,{open:r,openProp:n,activeTriggerId:y,triggerIdProp:h,parent:S});As(()=>{n===void 0&&f.state.open===!1&&r===!0&&f.update({open:!0,activeTriggerId:y})}),f.useControlledProp("openProp",n),f.useControlledProp("triggerIdProp",h),f.useContextCallback("onOpenChangeComplete",s);const A=cn(),D=cn(),F=f.useState("floatingTreeRoot"),E=Ji(F),B=go(),N=f.useState("open"),x=f.useState("activeTriggerElement"),q=f.useState("positionerElement"),M=f.useState("hoverEnabled"),j=f.useState("disabled"),O=f.useState("lastOpenChangeReason"),V=f.useState("parent"),$=f.useState("activeIndex"),I=f.useState("payload"),se=f.useState("floatingParentNodeId"),_=c.useRef(null),U=c.useRef(V.type!=="context-menu"),W=bt(),z=c.useRef(!0),H=bt(),L=se!=null,{openMethod:R,triggerProps:Y}=fA(N);f.useSyncedValues({disabled:i,modal:V.type===void 0?m:void 0,openMethod:R,rootId:A}),Ls(f);const{forceUnmount:be}=_s(N,f,()=>{f.update({allowMouseEnter:!1,stickIfOpen:!0})});he(()=>{w&&!C?f.update({parent:{type:"context-menu",context:w},floatingNodeId:E,floatingParentNodeId:B}):C&&f.update({floatingNodeId:E,floatingParentNodeId:B})},[w,C,E,B,f]),c.useEffect(()=>{if(N||(_.current=null),V.type==="context-menu"){if(!N){W.clear(),U.current=!1;return}W.start(500,()=>{U.current=!0})}},[W,N,V.type]),he(()=>{!N&&!M&&f.set("hoverEnabled",!0)},[N,M,f]);const De=Ae((X,ke)=>{var qt;const xe=ke.reason;if(N===X&&ke.trigger===x&&O===xe||(ke.preventUnmountOnClose=()=>{f.set("preventUnmountingOnClose",!0)},!X&&ke.trigger==null&&(ke.trigger=x??void 0),a==null||a(X,ke),ke.isCanceled))return;f.state.floatingRootContext.dispatchOpenChange(X,ke);const Ge=ke.event;if(X===!1&&(Ge==null?void 0:Ge.type)==="click"&&Ge.pointerType==="touch"&&!z.current)return;if(!X&&$!==null){const Wt=f.context.itemDomElements.current[$];queueMicrotask(()=>{Wt==null||Wt.setAttribute("tabindex","-1")})}X&&xe===xn?(z.current=!1,H.start(300,()=>{z.current=!0})):(z.current=!0,H.clear());const Be=(xe===po||xe===ju)&&Ge.detail===0&&(Ge==null?void 0:Ge.isTrusted),Qe=!X&&(xe===Aa||xe==null),it={open:X,openChangeReason:xe};_.current=ke.event??null;const Nt=((qt=ke.trigger)==null?void 0:qt.id)??null;(Nt||X)&&(it.activeTriggerId=Nt,it.activeTriggerElement=ke.trigger??null),f.update(it),V.type==="menubar"&&(xe===xn||xe===ln||xe===Ye||xe===ti||xe===ra)?f.set("instantType","group"):Be||Qe?f.set("instantType",Be?"click":"dismiss"):f.set("instantType",void 0)}),G=Dp({popupStore:f,floatingId:D,nested:B!=null,onOpenChange:De}),de=G.context.events;c.useEffect(()=>{const X=({open:ke,eventDetails:xe})=>De(ke,xe);return de.on("setOpen",X),()=>{de==null||de.off("setOpen",X)}},[de,De]);const ce=c.useCallback(()=>{f.setOpen(!1,Oe(Fs))},[f]);c.useImperativeHandle(u,()=>({unmount:be,close:ce}),[be,ce]);let we;V.type==="context-menu"&&(we=V.context),c.useImperativeHandle(we==null?void 0:we.positionerRef,()=>q,[q]),c.useImperativeHandle(we==null?void 0:we.actionsRef,()=>({setOpen:De}),[De]);const te=Os(G,{enabled:!j,bubbles:{escapeKey:g&&V.type==="menu"},outsidePress(){var X;return V.type!=="context-menu"||((X=_.current)==null?void 0:X.type)==="contextmenu"?!0:U.current},externalTree:L?F:void 0}),fe=jp(),ne=c.useCallback(X=>{f.select("activeIndex")!==X&&f.set("activeIndex",X)},[f]),ee=uv(G,{enabled:!j,listRef:f.context.itemDomElements,activeIndex:$,nested:V.type!==void 0,loopFocus:d,orientation:p,parentOrientation:V.type==="menubar"?V.context.orientation:void 0,rtl:fe==="rtl",disabledIndices:ei,onNavigate:ne,openOnArrowKeyDown:V.type!=="context-menu",externalTree:L?F:void 0,focusItemOnHover:b}),Ee=c.useCallback(X=>{f.context.typingRef.current=X},[f]),Ce=pv(G,{listRef:f.context.itemLabels,elementsRef:f.context.itemDomElements,activeIndex:$,resetMs:$k,onMatch:X=>{N&&X!==$&&f.set("activeIndex",X)},onTyping:Ee}),ye=c.useMemo(()=>{const X=St(Ce.reference,ee.reference,te.reference,{onMouseMove(){f.set("allowMouseEnter",!0)}},Y);return X["aria-haspopup"]="menu",X["aria-expanded"]=N,X},[f,Ce.reference,ee.reference,te.reference,Y,N]),Pe=c.useMemo(()=>{const X=St(ee.trigger,te.trigger,Y);return X["aria-haspopup"]="menu",X["aria-expanded"]=!1,X},[ee.trigger,te.trigger,Y]),pe=c.useMemo(()=>St(Qn,{id:D,role:"menu","aria-labelledby":x==null?void 0:x.id,onMouseMove(){f.set("allowMouseEnter",!0),V.type==="menu"&&f.set("hoverEnabled",!1)},onClick(){f.select("hoverEnabled")&&f.set("hoverEnabled",!1)},onKeyDown(X){const ke=f.select("keyboardEventRelay");ke&&!X.isPropagationStopped()&&ke(X)}},Ce.floating,ee.floating,te.floating),[x,D,V.type,f,Ce.floating,ee.floating,te.floating]),Q=ee.item??Je;Us(f,{floatingRootContext:G,activeTriggerProps:ye,inactiveTriggerProps:Pe,popupProps:pe,itemProps:Q});const ae=c.useMemo(()=>({store:f,parent:S}),[f,S]),re=l.jsx(lg.Provider,{value:ae,children:typeof o=="function"?o({payload:I}):o});return V.type===void 0||V.type==="context-menu"?l.jsx(gp,{externalTree:F,children:re}):re});function ox(t){const e=fo().store,o=c.useMemo(()=>({parentMenu:e}),[e]);return l.jsx(fg.Provider,{value:o,children:l.jsx(bg,{...t})})}function nx(t){const e=t.getBoundingClientRect(),o=Xe(t),n=o.getComputedStyle(t,"::before"),a=o.getComputedStyle(t,"::after");if(!(n.content!=="none"||a.content!=="none"))return e;const r=parseFloat(n.width)||0,i=parseFloat(n.height)||0,m=parseFloat(a.width)||0,d=parseFloat(a.height)||0,p=Math.max(e.width,r,m),u=Math.max(e.height,i,d),g=p-e.width,k=u-e.height;return{left:e.left-g/2,right:e.right+g/2,top:e.top-k/2,bottom:e.bottom+k/2}}function ax(t={}){const{highlightItemOnHover:e,highlightedIndex:o,onHighlightedIndexChange:n}=Tl(),{ref:a,index:s}=Fl(t),r=o===s,i=c.useRef(null),m=Kn(a,i);return{compositeProps:c.useMemo(()=>({tabIndex:r?0:-1,onFocus(){n(s)},onMouseMove(){const p=i.current;if(!e||!p)return;const u=p.hasAttribute("disabled")||p.ariaDisabled==="true";!r&&!u&&p.focus()}}),[r,n,s,e]),compositeRef:m,index:s}}function sx(t){const{render:e,className:o,style:n,state:a=Je,props:s=ei,refs:r=ei,metadata:i,stateAttributesMapping:m,tag:d="div",...p}=t,{compositeProps:u,compositeRef:g}=ax({metadata:i});return tt(d,t,{state:a,ref:[...r,g],props:[u,...s,p],stateAttributesMapping:m})}function yg(t){if(He(t)&&t.hasAttribute("data-rootownerid"))return t.getAttribute("data-rootownerid")??void 0;if(!eo(t))return yg(no(t))}function kg(t,e){const o=c.useRef(null);function n(s){Vt.flushSync(()=>{t.setOpen(!1,Oe(ln,s.nativeEvent,s.currentTarget))});const r=Ek(o.current);r==null||r.focus()}function a(s){var i;const r=t.select("positionerElement");if(r&&En(s,r))(i=t.context.beforeContentFocusGuardRef.current)==null||i.focus();else{Vt.flushSync(()=>{t.setOpen(!1,Oe(ln,s.nativeEvent,s.currentTarget))});let m=Pk(t.context.triggerFocusTargetRef.current||e.current);for(;m!==null&&Se(r,m);){const d=m;if(m=Vi(m),m===d)break}m==null||m.focus()}}return{preFocusGuardRef:o,handlePreFocusGuardFocus:n,handleFocusTargetFocus:a}}function rx(t){const{enabled:e=!0,mouseDownAction:o,open:n}=t,a=c.useRef(!1);return c.useMemo(()=>e?{onMouseDown:s=>{(o==="open"&&!n||o==="close"&&n)&&(a.current=!0,Le(s.currentTarget).addEventListener("click",()=>{a.current=!1},{once:!0}))},onClick:s=>{a.current&&(a.current=!1,s.preventBaseUIHandler())}}:Je,[e,o,n])}const ts=2,ix=vu(function(e,o){const{render:n,className:a,style:s,disabled:r=!1,nativeButton:i=!0,id:m,openOnHover:d,delay:p=100,closeDelay:u=0,handle:g,payload:k,...h}=e,y=fo(!0),b=(g==null?void 0:g.store)??(y==null?void 0:y.store);if(!b)throw new Error(st(85));const w=fn(m),C=b.useState("isTriggerActive",w),v=b.useState("floatingRootContext"),T=b.useState("isOpenedByTrigger",w),S=b.useState("triggerPopupId",w),f=c.useRef(null),A=cx(),D=Tl(!0),F=Bo(),E=c.useMemo(()=>F??new Gi,[F]),B=Ji(E),N=go(),{registerTrigger:x,isMountedByThisTrigger:q}=nl(w,f,b,{payload:k,closeDelay:u,parent:A,floatingTreeRoot:E,floatingNodeId:B,floatingParentNodeId:N,keyboardEventRelay:D==null?void 0:D.relayKeyboardEvent}),M=A.type==="menubar",j=b.useState("disabled"),O=r||j||M&&A.context.disabled,{getButtonProps:V,buttonRef:$}=Oa({disabled:O,native:i});c.useEffect(()=>{!T&&A.type===void 0&&(b.context.allowMouseUpTriggerRef.current=!1)},[b,T,A.type]);const I=c.useRef(null),se=bt(),_=Ae(ee=>{if(!I.current)return;se.clear(),b.context.allowMouseUpTriggerRef.current=!1;const Ee=ee.target;if(Se(I.current,Ee)||Se(b.select("positionerElement"),Ee)||Ee===I.current||Ee!=null&&yg(Ee)===b.select("rootId"))return;const Ce=nx(I.current);ee.clientX>=Ce.left-ts&&ee.clientX<=Ce.right+ts&&ee.clientY>=Ce.top-ts&&ee.clientY<=Ce.bottom+ts||E.events.emit("close",{domEvent:ee,reason:Qy})});c.useEffect(()=>{T&&b.select("lastOpenChangeReason")===Ye&&Le(I.current).addEventListener("mouseup",_,{once:!0})},[T,_,b]);const U=M&&A.context.hasSubmenuOpen,z=Vs(v,{enabled:(d??U)&&!O&&A.type!=="context-menu"&&(!M||U&&!q),handleClose:qs({blockPointerEvents:!M}),mouseOnly:!0,move:!1,restMs:A.type===void 0?p:void 0,delay:{close:u},triggerElementRef:f,externalTree:E,isActiveTrigger:C,isClosing:()=>b.select("transitionStatus")==="ending"}),H=lx(T,b.select("lastOpenChangeReason")),L=Zi(v,{enabled:!O&&A.type!=="context-menu",event:T&&M?"click":"mousedown",toggle:!0,ignoreMouse:!1,stickIfOpen:A.type===void 0?H:!1}),R=Ep(v,{enabled:!O&&U}),Y=rx({open:T,enabled:M,mouseDownAction:"open"}),be=c.useMemo(()=>St(R.reference,L.reference),[R.reference,L.reference]),De=b.useState("triggerProps",q),{preFocusGuardRef:G,handlePreFocusGuardFocus:de,handleFocusTargetFocus:ce}=kg(b,f),we={disabled:O,open:T},te=[I,o,$,x,f],fe=[be,z??Je,De,{"aria-haspopup":"menu","aria-controls":S,id:w,onMouseDown:ee=>{if(b.select("open"))return;se.start(200,()=>{b.context.allowMouseUpTriggerRef.current=!0}),Le(ee.currentTarget).addEventListener("mouseup",_,{once:!0})}},M?{role:"menuitem"}:{},Y,h,V],ne=tt("button",e,{enabled:!M,stateAttributesMapping:ii,state:we,ref:te,props:fe});return M?l.jsx(sx,{tag:"button",render:n,className:a,style:s,state:we,refs:te,props:fe,stateAttributesMapping:ii}):T?l.jsxs(c.Fragment,{children:[l.jsx(Oo,{ref:G,onFocus:de},`${w}-pre-focus-guard`),l.jsx(c.Fragment,{children:ne},w),l.jsx(Oo,{ref:b.context.triggerFocusTargetRef,onFocus:ce},`${w}-post-focus-guard`)]}):l.jsx(c.Fragment,{children:ne},w)});function lx(t,e){const o=bt(),[n,a]=c.useState(!1);return he(()=>{t&&e==="trigger-hover"?(a(!0),o.start(sp,()=>{a(!1)})):t||(o.clear(),a(!1))},[t,e,o]),n}function cx(){const t=Qs(!0),e=fo(!0),o=gg();return c.useMemo(()=>o?{type:"menubar",context:o}:t&&!e?{type:"context-menu",context:t}:{type:void 0},[t,e,o])}const dx=c.forwardRef(function(e,o){const{render:n,className:a,style:s,label:r,id:i,nativeButton:m=!1,openOnHover:d=!0,delay:p=100,closeDelay:u=0,disabled:g=!1,...k}=e,h=Fl(),y=Il(),{store:b}=fo(),w=fn(i),C=b.useState("open"),v=b.useState("floatingRootContext"),T=b.useState("floatingTreeRoot"),S=b.useState("triggerPopupId",w),f=Ap(w,b),A=c.useCallback(L=>{const R=f(L);return L!==null&&b.select("open")&&b.select("activeTriggerId")==null&&b.update({activeTriggerId:w,activeTriggerElement:L,closeDelay:u}),R},[f,u,b,w]),D=c.useRef(null),F=c.useCallback(L=>{D.current=L,b.set("activeTriggerElement",L)},[b]),E=hg();if(!(E!=null&&E.parentMenu))throw new Error(st(37));b.useSyncedValue("closeDelay",u);const B=E.parentMenu,N=B.useState("itemProps"),x=B.useState("isActive",h.index),q=c.useMemo(()=>({type:"submenu-trigger",setActive(){B.set("activeIndex",h.index)}}),[B,h.index]),M=b.useState("disabled"),j=g||M,{getItemProps:O,itemRef:V}=cg({closeOnClick:!1,disabled:j,highlighted:x,id:w,store:b,typingRef:B.context.typingRef,nativeButton:m,itemMetadata:q,nodeId:y==null?void 0:y.context.nodeId}),$=b.useState("hoverEnabled"),I=B.useState("allowMouseEnter"),se=Vs(v,{enabled:$&&d&&!j,handleClose:qs({blockPointerEvents:!0}),mouseOnly:!0,move:!0,restMs:p,delay:I?{open:p,close:u}:0,triggerElementRef:D,externalTree:T,isClosing:()=>b.select("transitionStatus")==="ending"}),U=Zi(v,{enabled:!j,event:"mousedown",toggle:!d,ignoreMouse:d,stickIfOpen:!1}).reference??Je,W=b.useState("triggerProps",!0);return delete W.id,tt("div",e,{state:{disabled:j,highlighted:x,open:C},stateAttributesMapping:dl,props:[U,se,W,N,{"aria-controls":S,tabIndex:C||x?0:-1,onBlur(){x&&B.set("activeIndex",null)}},k,O],ref:[o,h.ref,V,A,F]})});function Ol({...t}){return l.jsx(bg,{"data-slot":"dropdown-menu",...t})}function Nl({...t}){return l.jsx(ix,{"data-slot":"dropdown-menu-trigger",...t})}function Ys({align:t="start",alignOffset:e=0,side:o="bottom",sideOffset:n=4,className:a,...s}){return l.jsx(KA,{children:l.jsx(ZA,{className:"isolate z-50 outline-none",align:t,alignOffset:e,side:o,sideOffset:n,children:l.jsx(qA,{"data-slot":"dropdown-menu-content",className:Fe("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",a),...s})})})}function gi({className:t,inset:e,variant:o="default",...n}){return l.jsx(BA,{"data-slot":"dropdown-menu-item","data-inset":e,"data-variant":o,className:Fe("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 AR({...t}){return l.jsx(ox,{"data-slot":"dropdown-menu-sub",...t})}function xR({className:t,inset:e,children:o,...n}){return l.jsxs(dx,{"data-slot":"dropdown-menu-sub-trigger","data-inset":e,className:Fe("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,l.jsx(Xd,{className:"ms-auto"})]})}function PR({align:t="start",alignOffset:e=-3,side:o="right",sideOffset:n=0,className:a,...s}){return l.jsx(Ys,{"data-slot":"dropdown-menu-sub-content",className:Fe("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",a),align:t,alignOffset:e,side:o,sideOffset:n,...s})}function ER({className:t,...e}){return l.jsx(ND,{"data-slot":"dropdown-menu-separator",className:Fe("-mx-1 my-1 h-px bg-border",t),...e})}const wg="session";function gd(t){const e=location.protocol==="https:"?"; Secure":"";document.cookie=`${wg}=${t}; path=/; max-age=${3600*24*7}; SameSite=Lax${e}`}function ux(){document.cookie=`${wg}=; path=/; max-age=0`}const Qo=bl()(yl((t,e)=>({user:null,accessToken:null,refreshToken:null,setTokens:(o,n)=>{gd(o),t({accessToken:o,refreshToken:n})},setUser:o=>t({user:o}),login:(o,n,a)=>{gd(n),t({user:o,accessToken:n,refreshToken:a})},logout:()=>{ux(),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"})),_o=bl()(yl(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 Dt extends Error{constructor(e,o,n=400,a="",s={},r=!1,i=null){super(o),this.name="SDKError",this.code=e,this.status=n,this.url=a,this.response=s,this.isAbort=r,this.originalError=i}}function ze(t){if(!t)return;const e={};for(const[o,n]of Object.entries(t))n!=null&&(e[o]=String(n));return e}class px{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:a,query:s,headers:r,signal:i,fetch:m,requestKey:d}=o;let p=`${this.baseUrl}${e}`;if(s){const v=new URLSearchParams(s).toString();v&&(p+=(p.includes("?")?"&":"?")+v)}const u=new Headers;a!=null&&!(a instanceof FormData)&&u.set("Content-Type","application/json");const g=this.authStore.token;if(g&&u.set("Authorization",`Bearer ${g}`),this._tenantId&&u.set("X-Tenant-ID",this._tenantId),this._locale&&u.set("Accept-Language",this._locale),r)for(const[v,T]of Object.entries(r))u.set(v,T);let k=i;if(d){this.cancelRequest(d);const v=new AbortController;this._requestControllers.set(d,v),i&&i.addEventListener("abort",()=>v.abort()),k=v.signal}let h={method:n,headers:u,body:a instanceof FormData?a:a!==void 0?JSON.stringify(a):void 0,signal:k};if(this._beforeSend){const v=await this._beforeSend(p,h);p=v.url,h={...h,...v.options}}const y=m??fetch;let b;try{b=await y(p,h)}catch(v){throw d&&this._requestControllers.delete(d),new Dt(0,v instanceof Error?v.message:"Network request failed",0,p,{},v instanceof DOMException&&v.name==="AbortError",v instanceof Error?v:null)}if(b.status===401&&this.authStore.isAuthenticated){const v=h.headers instanceof Headers?h.headers.get("Authorization"):null;if(!((v==null?void 0:v.startsWith("Bearer rf_"))??!1)){const S=await this._refresh();if(S){const f=new Headers(h.headers);f.set("Authorization",`Bearer ${S}`),h={...h,headers:f},b=await y(p,h)}}}d&&this._requestControllers.delete(d);let w;try{w=await b.json()}catch(v){throw new Dt(0,"Failed to parse response",b.status,p,{},!1,v instanceof Error?v:null)}if(w.code!==0)throw new Dt(w.code??0,w.message??"Unknown error",b.status,p,w);let C=w.data;return this._afterSend&&(C=await this._afterSend(b,C)),C}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 a=n.data;return this.authStore.save(a),a.access_token}catch{return this.authStore.clear(),null}finally{this._refreshPromise=null}})(),this._refreshPromise)}}class vg{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 mx extends vg{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 gx{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 a=await this.http.post("/auth/login",{email:e,password:o},n);return this.store.save(a),a}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 fx{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 hx{constructor(e){this.http=e}async list(e,o){return this.http.get("/posts",{...o,query:ze(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 bx{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 yx{constructor(e){this.http=e}async list(e,o=1,n=25,a){return this.http.get(`/posts/${e}/comments`,{...a,query:{page:String(o),page_size:String(n)}})}async create(e,o,n){var r;const s=((r=this.http.authStore)==null?void 0:r.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 kx{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 wx{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 vx{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 a=this.http.baseUrl.replace("/api/v1",""),s=e[o];if(typeof s!="string")return"";if(s.startsWith("http"))return s;let r=`${a}/uploads/${s}`;return n!=null&&n.thumb&&(r+=`?thumb=${encodeURIComponent(n.thumb)}`),r}}class Cx{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 Tx{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:ze(o)})}async listAllTransactions(e,o){return this.http.get("/wallets/transactions",{...o,query:ze(e)})}}class Sx{constructor(e){this.baseUrl=e}subscribe(e){const o=e?`${this.baseUrl}/events?filter=${encodeURIComponent(e)}`:`${this.baseUrl}/events`;return new EventSource(o)}}class Dx{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 Ax{constructor(e){this.http=e}async listAvailableChannels(e,o){return this.http.get("/payment/channels/available",{...o,query:ze(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 xx{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 Px{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 Ex{constructor(e){this.http=e}async list(e,o=1,n=25,a){return this.http.get(`/products/${e}/comments`,{...a,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 Rx{constructor(e){this.http=e}async list(e,o){return this.http.get(`/products/${e}/variants`,o)}}class Ix{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 Fx{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 Mx{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 Ox{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/ai/agents",{...o,query:ze(e)})}async get(e,o){return this.http.get(`/admin/ai/agents/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/ai/agents"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/ai/agents",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/ai/agents",e),{...o,method:this.http.methodForDelete()})}async usage(e,o,n){return this.http.get(`/admin/ai/agents/${e}/usage`,{...n,query:ze({days:o})})}async listMemories(e,o,n){return this.http.get(`/admin/ai/agents/${e}/memories`,{...n,query:ze(o)})}async upsertMemory(e,o,n){return this.http.post(`/admin/ai/agents/${e}/memories`,o,n)}async updateMemory(e,o,n,a){return this.http.request(this.http.pathForUpdate(`/admin/ai/agents/${e}/memories`,o),{...a,method:this.http.methodForUpdate(),body:n})}async deleteMemory(e,o,n){await this.http.request(this.http.pathForDelete(`/admin/ai/agents/${e}/memories`,o),{...n,method:this.http.methodForDelete()})}}class Nx{constructor(e){this.http=e}async list(e){return this.http.get("/admin/apps",e)}async get(e,o){return this.http.get(`/admin/apps/${encodeURIComponent(e)}`,o)}async installPreview(e,o){const n=new FormData;return n.append("package",e),this.http.post("/admin/apps/install-preview",n,o)}async install(e,o,n){const a=new FormData;return a.append("package",e),o!==void 0&&a.append("options",JSON.stringify(o)),this.http.post("/admin/apps/install",a,n)}async enable(e,o){await this.http.post(`/admin/apps/${encodeURIComponent(e)}/enable`,{},o)}async disable(e,o){await this.http.post(`/admin/apps/${encodeURIComponent(e)}/disable`,{},o)}async uninstall(e,o,n){await this.http.post(`/admin/apps/${encodeURIComponent(e)}/uninstall`,o===void 0?{}:{keep_data:o},n)}}class jx{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 Lx{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 _x{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/comments",{...o,query:ze(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 Ux{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 zx{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 Bx{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:ze(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:ze(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 Vx{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 Hx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/redemption-codes",{...o,query:ze(e)})}async generate(e,o){return this.http.post("/admin/redemption-codes",e,o)}async disable(e,o){return await this.http.post(`/admin/redemption-codes/${e}/disable`,{},o),!0}async activate(e,o,n){return this.http.post(`/admin/redemption-codes/${e}/activate`,{user_id:o??null},n)}async enable(e,o){return await this.http.post(`/admin/redemption-codes/${e}/enable`,{},o),!0}async deleteCode(e,o){return await this.http.request(this.http.pathForDelete("/admin/redemption-codes",e),{...o,method:this.http.methodForDelete()}),!0}}class qx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/jobs",{...o,query:ze(e)})}async stats(e){return this.http.get("/admin/jobs/stats",e)}async types(e){return this.http.get("/admin/jobs/types",e)}async retry(e,o){await this.http.post(`/admin/jobs/${e}/retry`,{},o)}async cancel(e,o){await this.http.post(`/admin/jobs/${e}/cancel`,{},o)}async remove(e,o){await this.http.request(this.http.pathForDelete("/admin/jobs",e),{...o,method:this.http.methodForDelete()})}async cleanup(e){return this.http.post("/admin/jobs/cleanup",{},e)}}class Wx{constructor(e){this.http=e}async listChannels(e,o){return this.http.get("/admin/integration/channels",{...o,query:ze(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:ze(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:ze(e)})}}class Kx{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 $x{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 Gx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/orders",{...o,query:ze(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 Jx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/pages",{...o,query:ze(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 Qx{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:ze(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:ze(e)})}async listRefunds(e,o){return this.http.get("/admin/payment/refunds",{...o,query:ze(e)})}}class Yx{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 Zx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/posts",{...o,query:ze(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 Xx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/products",{...o,query:ze(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 eP{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 tP{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 oP{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 nP{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 aP{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 sP{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 rP{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:ze({table:e,days:o})})}}class iP{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 lP{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 cP{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 dP{constructor(e){this.http=e}async list(e,o){return this.http.get(`/admin/users/${e}/addresses`,o)}}class uP{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 pP{constructor(e){this.http=e}async listWallets(e,o){return this.http.get("/admin/wallets",{...o,query:ze(e)})}async listTransactions(e,o){return this.http.get("/admin/wallets/transactions",{...o,query:ze(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:ze(o)})}async userCurrencyTransactions(e,o,n,a){return this.http.get(`/admin/wallets/${e}/${o}/transactions`,{...a,query:ze(n)})}async reversal(e,o,n){return this.http.post(`/admin/wallets/${e}/reversal`,o,n)}}class mP{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 gP{constructor(e){this.http=e}async list(e){return this.http.get("/admin/flows",e)}async listFlowsPaged(e,o){const n={};return(e==null?void 0:e.page)!=null&&(n.page=String(e.page)),(e==null?void 0:e.page_size)!=null&&(n.page_size=String(e.page_size)),this.http.get("/admin/flows/page",{...o,query:n})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/flows"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/flows/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/flows",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/flows",e),{...o,method:this.http.methodForDelete()})}async testFlow(e,o,n){return this.http.post(`/admin/flows/${e}/test`,o,n)}async run(e,o,n){return this.http.post(`/admin/flows/${e}/run`,o??{},n)}async getInstance(e,o){return this.http.get(`/admin/flows/instances/${e}`,o)}async listInstances(e,o){const n={},a=e??{};return a.page!=null&&(n.page=String(a.page)),a.page_size!=null&&(n.page_size=String(a.page_size)),a.flow_id&&(n.flow_id=a.flow_id),a.status&&(n.status=a.status),a.trigger&&(n.trigger=a.trigger),this.http.get("/admin/flows/instances",{...o,query:n})}async listVersions(e,o){return this.http.get(`/admin/flows/${e}/versions`,o)}async listApis(e,o){const n={};return(e==null?void 0:e.page)!=null&&(n.page=String(e.page)),(e==null?void 0:e.page_size)!=null&&(n.page_size=String(e.page_size)),this.http.get("/admin/flows/apis",{...o,query:n})}async listApiLogs(e,o){const n={};return(e==null?void 0:e.page)!=null&&(n.page=String(e.page)),(e==null?void 0:e.page_size)!=null&&(n.page_size=String(e.page_size)),e!=null&&e.flow_id&&(n.flow_id=e.flow_id),this.http.get("/admin/flows/apis/logs",{...o,query:n})}async deleteApi(e,o){await this.http.post(`/admin/flows/${e}/api/delete`,{},o)}async rotateApi(e,o){return this.http.post(`/admin/flows/${e}/api/rotate`,{},o)}async rotateApiSlug(e,o){return this.http.post(`/admin/flows/${e}/api/slug`,{},o)}async listTriggers(e,o){const n=e?{kind:e}:void 0;return this.http.get("/admin/flows/triggers",{...o,query:n})}async createTrigger(e,o){return this.http.post("/admin/flows/triggers",e,o)}async setTriggerEnabled(e,o,n){await this.http.post(`/admin/flows/triggers/${e}/${o?"enable":"disable"}`,{},n)}async deleteTrigger(e,o){await this.http.request(`/admin/flows/triggers/${e}`,{...o,method:"DELETE"})}async apiStatus(e,o){return this.http.get(`/admin/flows/${e}/api`,o)}async enableApi(e,o,n){return this.http.post(`/admin/flows/${e}/api/enable`,o??{},n)}async disableApi(e,o){return this.http.post(`/admin/flows/${e}/api/disable`,{},o)}async publish(e,o){return this.http.post(`/admin/flows/${e}/publish`,{},o)}async rollback(e,o,n){return this.http.post(`/admin/flows/${e}/versions/${o}/rollback`,{},n)}async nodeRuns(e,o){return this.http.get(`/admin/flows/instances/${e}/node-runs`,o)}async stopInstance(e,o){await this.http.post(`/admin/flows/instances/${e}/stop`,{},o)}async getInstanceWaiting(e,o){return this.http.get(`/admin/flows/instances/${e}/waiting`,o)}async resume(e,o,n){return this.http.post(`/admin/flows/instances/${e}/resume`,o,n)}}class fP{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/ai/sessions",{...o,query:ze(e)})}async listMessages(e,o,n){return this.http.get(`/admin/ai/sessions/${e}/messages`,{...n,query:ze(o)})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/ai/sessions",e),{...o,method:this.http.methodForDelete()})}}class hP{constructor(e){this.http=e}async list(e){return this.http.get("/admin/ai/skills",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/ai/skills"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n="tenant",a){return this.http.request(this.http.pathForUpdate("/admin/ai/skills",e),{...a,method:this.http.methodForUpdate(),query:ze({scope:n}),body:o})}async delete(e,o="tenant",n){await this.http.request(this.http.pathForDelete("/admin/ai/skills",e),{...n,query:ze({scope:o}),method:this.http.methodForDelete()})}}class bP{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 yP{constructor(e){this.http=e,this.users=new uP(e),this.posts=new Zx(e),this.pages=new Jx(e),this.comments=new _x(e),this.categories=new Lx(e),this.tags=new iP(e),this.media=new Kx(e),this.reusableBlocks=new aP(e),this.wallets=new pP(e),this.currencies=new Vx(e),this.redemptionCodes=new Hx(e),this.plugins=new Yx(e),this.apps=new Nx(e),this.contentTypes=new Ux(e),this.tenants=new lP(e),this.rbac=new nP(e),this.options=new $x(e),this.webhooks=new mP(e),this.audit=new jx(e),this.crons=new Bx(e),this.jobs=new qx(e),this.tokens=new cP(e),this.flows=new gP(e),this.workflows=new bP(e),this.stats=new rP(e),this.orders=new Gx(e),this.payment=new Qx(e),this.products=new Xx(e),this.productCategories=new eP(e),this.productVariants=new oP(e),this.productComments=new tP(e),this.coupons=new zx(e),this.shippingTemplates=new sP(e),this.userAddresses=new dP(e),this.integration=new Wx(e),this.aiAgents=new Ox(e),this.aiSkills=new hP(e),this.aiSessions=new fP(e)}async listRoutes(e){return this.http.get("/routes",e)}async listResources(e){return this.http.get("/admin/resources",e)}}function kP(t){let e="message";const o=[];for(const a of t.split(` +`)){if(!a||a.startsWith(":"))continue;const s=a.indexOf(":"),r=s===-1?a:a.slice(0,s);let i=s===-1?"":a.slice(s+1);i.startsWith(" ")&&(i=i.slice(1)),r==="event"?e=i:r==="data"&&o.push(i)}if(o.length===0)return null;let n;try{n=JSON.parse(o.join(` +`))}catch{return null}switch(e){case"chunk":return{event:"chunk",delta:String(n.delta??"")};case"thinking":return{event:"thinking",delta:String(n.delta??"")};case"text":return{event:"text",text:String(n.text??"")};case"tool_call":return{event:"tool_call",name:String(n.name??""),args:n.args};case"tool_result":return{event:"tool_result",name:String(n.name??""),output:String(n.output??""),success:n.success!==!1};case"done":return{event:"done",outcome:n.outcome};case"error":return{event:"error",code:String(n.code??"error"),message:String(n.message??""),fatal:n.fatal===!0};default:return null}}async function wP(t,e,o){if(!t.ok||!t.body){let i=`Request failed (${t.status})`,m=t.status;try{const d=await t.json();d.message&&(i=d.message),d.code!==void 0&&(m=d.code)}catch{}throw new Dt(m,i,t.status,e,{})}const n=t.body.getReader(),a=new TextDecoder;let s="";const r=i=>{const m=kP(i);if(!m)return"continue";if(o(m),m.event==="done")return"done";if(m.event==="error"&&m.fatal)throw new Dt(0,m.message,200,e,{event:"error",data:m});return"continue"};for(;;){const{done:i,value:m}=await n.read();if(i)break;for(s+=a.decode(m,{stream:!0});;){const d=s.indexOf(` + +`);if(d===-1)break;const p=s.slice(0,d);if(s=s.slice(d+2),r(p)==="done")return}}s.trim()&&r(s)}class vP{constructor(e){this.http=e}async createSession(e,o,n){return this.http.post(`/ai/agents/${e}/sessions`,o??{},n)}async listSessions(e,o){return this.http.get(`/ai/agents/${e}/sessions`,o)}async listMessages(e,o,n){return this.http.get(`/ai/sessions/${e}/messages`,{...n,query:Object.fromEntries(Object.entries(o??{}).map(([a,s])=>[a,String(s)]))})}async compactSession(e,o){return this.http.post(`/ai/sessions/${e}/compact`,{},o)}async runTurn(e,o,n){const a=`${this.http.baseUrl}/ai/sessions/${e}/turns`,s={"Content-Type":"application/json",Accept:"text/event-stream"},r=this.http.authStore.token;r&&(s.Authorization=`Bearer ${r}`),this.http.tenantId&&(s["X-Tenant-ID"]=this.http.tenantId),this.http.locale&&(s["Accept-Language"]=this.http.locale);const i=n.fetch??fetch;let m;try{m=await i(a,{method:"POST",headers:s,body:JSON.stringify({content:o}),signal:n.signal})}catch(d){if(d instanceof DOMException&&d.name==="AbortError")return;throw new Dt(0,d instanceof Error?d.message:"Network request failed",0,a,{})}await wP(m,a,n.onEvent)}}class fd{constructor(e,o,n=!1,a){this.http=e,this.name=o,this.apiToken=a,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 a={page:String(e),page_size:String(o)};if(n!=null&&n.sort&&(a.sort=n.sort),n!=null&&n.filter&&(a.filter=n.filter),n!=null&&n.filterCond)for(const[s,r]of Object.entries(n.filterCond))r!=null&&(a[s]=Array.isArray(r)?r.join(","):String(r));return n!=null&&n.search&&(a.search=n.search),n!=null&&n.fields&&(a.fields=n.fields),n!=null&&n.status&&(a.status=n.status),n!=null&&n.expand&&(a.expand=n.expand),this.http.get(this.prefix,{...this.withAuth(n),query:a})}async getFullList(e){const o=[];let n=1;for(;;){const a=await this.getList(n,200,e);if(o.push(...a.items),o.length>=a.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 Dt(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",a){const s=new FormData;return s.append(n,o),this.http.request(`${this.prefix}/${e}`,{...this.withAuth(a),method:"POST",body:s})}async listRevisions(e,o=1,n=25,a){return this.http.get(`/admin/cms/${this.name}/${e}/revisions`,{...this.withAuth(a),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,a){return this.http.get(`/admin/cms/${this.name}/${e}/revisions/${o}/diff/${n}`,this.withAuth(a))}}class CP{constructor(e,o){this.authStore=(o==null?void 0:o.authStore)??new mx,this.http=new px(e,this.authStore),this.auth=new gx(this.http,this.authStore),this.admin=new yP(this.http),this.ai=new vP(this.http),this.users=new fx(this.http),this.media=new vx(this.http),this.health=new Cx(this.http),this.posts=new hx(this.http),this.categories=new kx(this.http),this.tags=new wx(this.http),this.comments=new yx(this.http),this.pages=new bx(this.http),this.wallets=new Tx(this.http),this.events=new Sx(this.http.baseUrl),this.orders=new Dx(this.http),this.payment=new Ax(this.http),this.products=new xx(this.http),this.productCategories=new Px(this.http),this.productVariants=new Rx(this.http),this.productComments=new Ex(this.http),this.userAddresses=new Mx(this.http),this.cart=new Ix(this.http),this.productFavorites=new Fx(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 fd(this.http,e,!1,o)}adminCt(e,o){return new fd(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 a=await this.ct(e).getList(1,1,o);if(a.items.length===0)throw new Dt(404,`No ${e} item found`,404);return a.items[0]}getRssFeedURL(){return`${this.http.baseUrl.replace("/api/v1","")}/feed.xml`}}function jl(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 Ll(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(Ll).join(", "):JSON.stringify(t)}function TP(t){return/[",\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t}function RR(t,e){const o=new Blob([JSON.stringify(t,null,2)],{type:"application/json"});jl(o,e)}function IR(t,e,o,n){const a=e.map(o).join(","),s=t.map(i=>e.map(m=>TP(Ll(i[m]))).join(",")),r=new Blob([`\uFEFF${[a,...s].join(` +`)}`],{type:"text/csv;charset=utf-8"});jl(r,n)}async function FR(t,e,o,n){const{default:a}=await Z(async()=>{const{default:r}=await import("./index-CTXUgEVK.js");return{default:r}},[]),s=[e.map(o),...t.map(r=>e.map(i=>Ll(r[i])))];await a(s).toFile(n)}class SP extends vg{constructor(){if(super(),typeof window<"u"){const e=Qo.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=Qo.getState();if(o.setTokens(e.access_token,e.refresh_token),e.user){const n=e.user,a=Qo.getState().user,s=Array.isArray(n.roles)?n.roles:[];o.setUser({id:String(n.id),email:typeof n.email=="string"?n.email:(a==null?void 0:a.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(),Qo.getState().logout(),typeof window<"u"&&!window.location.pathname.startsWith("/admin/auth/")&&(window.location.href="/admin/auth/login?expired=1")}}const Zs="/api/v1",Ct=new CP(Zs,{authStore:new SP});typeof window<"u"&&(Ct.setTenantId(_o.getState().currentTenantId),Ct.setLocale(un.getState().locale),_o.subscribe(t=>{Ct.setTenantId(t.currentTenantId)}),un.subscribe(t=>{Ct.setLocale(t.locale)}));async function MR(t,e,o){const n=`${Zs}${t}?format=${e}`,a={"Content-Type":"application/octet-stream"},s=Ct.authStore.token;s&&(a.Authorization=`Bearer ${s}`);const r=_o.getState().currentTenantId;r&&(a["X-Tenant-ID"]=r);const i=un.getState().locale;i&&(a["Accept-Language"]=i);let m;try{m=await fetch(n,{method:"POST",headers:a,body:o})}catch(p){throw new Dt(0,p instanceof Error?p.message:"Network request failed",0,n,{})}let d;try{d=await m.json()}catch{throw new Dt(0,"Failed to parse response",m.status,n,{})}if(d.code!==0)throw new Dt(d.code??0,d.message??"Unknown error",m.status,n,d);return d.data}async function OR(t,e,o){const n=`${Zs}${t}?format=${e}`,a={},s=Ct.authStore.token;s&&(a.Authorization=`Bearer ${s}`);const r=_o.getState().currentTenantId;r&&(a["X-Tenant-ID"]=r);const i=un.getState().locale;i&&(a["Accept-Language"]=i);let m;try{m=await fetch(n,{headers:a})}catch(p){throw new Dt(0,p instanceof Error?p.message:"Network request failed",0,n,{})}if(!m.ok){let p=`Export failed (${m.status})`;try{const u=await m.json();u!=null&&u.message&&(p=u.message)}catch{}throw new Dt(m.status,p,m.status,n,{})}const d=await m.blob();return jl(d,o),{size:d.size}}async function NR(t){const e=`${Zs}${t}`,o={},n=Ct.authStore.token;n&&(o.Authorization=`Bearer ${n}`);const a=_o.getState().currentTenantId;a&&(o["X-Tenant-ID"]=a);const s=await fetch(e,{headers:o});if(!s.ok)throw new Dt(0,`preview fetch failed: ${s.status}`,s.status,e,{});const r=await s.blob();return URL.createObjectURL(r)}function DP(){const[t,e]=c.useState(!1),{isAdmin:o}=Qo(),n=c.useRef(localStorage.getItem("notifications_last_seen")),a=Kd(),{data:s,isLoading:r}=sa({queryKey:["notifications"],queryFn:async()=>{try{return await Ct.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(u=>u.created_at>n.current).length:i.length>0?1:0;c.useEffect(()=>{if(t&&i.length>0){const u=i[0].created_at;n.current=u,localStorage.setItem("notifications_last_seen",u),a.invalidateQueries({queryKey:["notifications"]})}},[t,i,a]);function d(u){const g=new Date(u),h=new Date().getTime()-g.getTime(),y=Math.floor(h/6e4);if(y<1)return"just now";if(y<60)return`${y}m ago`;const b=Math.floor(y/60);if(b<24)return`${b}h ago`;const w=Math.floor(b/24);return w<7?`${w}d ago`:g.toLocaleDateString()}function p(u){return u.includes("delete")||u.includes("remove")?"text-red-500":u.includes("create")||u.includes("register")?"text-green-500":u.includes("update")||u.includes("login")?"text-blue-500":"text-muted-foreground"}return l.jsxs(Ol,{open:t,onOpenChange:e,children:[l.jsxs(Nl,{className:"relative inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:[l.jsx(rc,{className:"size-4"}),m>0&&l.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})]}),l.jsxs(Ys,{align:"end",className:"w-80 p-0",children:[l.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[l.jsx("span",{className:"text-sm font-semibold",children:"Notifications"}),m>0&&l.jsxs("span",{className:"text-xs text-muted-foreground",children:[m," new"]})]}),l.jsx("div",{className:"max-h-80 overflow-y-auto overscroll-contain",children:r?l.jsx("div",{className:"space-y-3 p-4",children:Array.from({length:5}).map((u,g)=>l.jsxs("div",{className:"flex gap-3",children:[l.jsx(Er,{className:"size-2 mt-2 rounded-full shrink-0"}),l.jsxs("div",{className:"flex-1 space-y-1.5",children:[l.jsx(Er,{className:"h-3.5 w-3/4"}),l.jsx(Er,{className:"h-3 w-1/3"})]})]},g))}):i.length===0?l.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[l.jsx(rc,{className:"size-8 mb-2 opacity-30"}),l.jsx("p",{className:"text-sm",children:"No notifications"})]}):l.jsx("div",{className:"divide-y",children:i.map(u=>{const g=!n.current||u.created_at>n.current;return l.jsxs("div",{className:`flex gap-3 px-4 py-3 transition-colors hover:bg-muted/50 cursor-default ${g?"bg-muted/30":""}`,children:[l.jsx("div",{className:`mt-1.5 size-2 rounded-full shrink-0 ${g?"bg-primary":"bg-transparent"}`}),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsxs("p",{className:"text-sm leading-snug",children:[l.jsx("span",{className:p(u.action),children:u.action}),l.jsx("span",{className:"text-muted-foreground",children:" on "}),l.jsx("span",{className:"font-medium",children:u.subject})]}),u.detail!=null&&l.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 truncate",children:typeof u.detail=="string"?u.detail:JSON.stringify(u.detail)}),l.jsx("p",{className:"text-[11px] text-muted-foreground/60 mt-1",children:d(u.created_at)})]})]},u.id)})})})]})]})}const AP=[{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 xP(){const{locale:t,setLocale:e}=un();return l.jsxs(Ol,{children:[l.jsx(Nl,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:l.jsx(gb,{className:"size-4"})}),l.jsx(Ys,{align:"end",className:"min-w-28",children:AP.map(o=>l.jsxs(gi,{className:"text-sm gap-2",onClick:()=>e(o.value),children:[l.jsx("span",{className:t===o.value?"size-2 rounded-full bg-primary":"size-2"}),o.label]},o.value))})]})}const Cg=c.createContext(void 0);function Na(t){const e=c.useContext(Cg);if(e===void 0&&!t)throw new Error(st(47));return e}function PP(){return{...zs(),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 EP={...Bs,disabled:le(t=>t.disabled),instantType:le(t=>t.instantType),openMethod:le(t=>t.openMethod),openChangeReason:le(t=>t.openChangeReason),modal:le(t=>t.modal),focusManagerModal:le(t=>t.focusManagerModal),stickIfOpen:le(t=>t.stickIfOpen),titleElementId:le(t=>t.titleElementId),descriptionElementId:le(t=>t.descriptionElementId),openOnHover:le(t=>t.openOnHover),closeDelay:le(t=>t.closeDelay),hasViewport:le(t=>t.hasViewport)};class _l extends Pa{constructor(o,n,a=!1){const s={...PP(),...o},r=new Yn;s.open&&(o==null?void 0:o.mounted)===void 0&&(s.mounted=!0),s.floatingRootContext=al(r,n,a);super(s,{popupRef:c.createRef(),backdropRef:c.createRef(),internalBackdropRef:c.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:c.createRef(),beforeContentFocusGuardRef:c.createRef(),stickIfOpenTimeout:new Ut,triggerElements:r},EP);Ue(this,"setOpen",(o,n)=>{var d,p;const a=n.reason===Ye,s=n.reason===po&&n.event.detail===0,r=!o&&(n.reason===Aa||n.reason==null);n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)};const i=this.select("activeTriggerId");if(!o&&n.reason===Lu&&n.trigger==null&&i!=null&&(n.trigger=this.context.triggerElements.getById(i)??this.select("activeTriggerElement")??void 0),(p=(d=this.context).onOpenChange)==null||p.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const u={open:o,openChangeReason:n.reason};ol(u,o,n.trigger),this.update(u)};a?(this.set("stickIfOpen",!0),this.context.stickIfOpenTimeout.start(sp,()=>{this.set("stickIfOpen",!1)}),Vt.flushSync(m)):m(),s||r?this.set("instantType",s?"click":"dismiss"):n.reason===ln?this.set("instantType","focus"):this.set("instantType",void 0)});Ue(this,"disposeEffect",()=>this.context.stickIfOpenTimeout.disposeEffect())}static useStore(o,n){const{store:a,internalStore:s}=tl(o,(r,i)=>new _l(n,r,i));return c.useEffect(()=>s==null?void 0:s.disposeEffect(),[s]),a}}function hd({props:t}){const{children:e,open:o,defaultOpen:n=!1,onOpenChange:a,onOpenChangeComplete:s,modal:r=!1,handle:i,triggerId:m,defaultTriggerId:d=null}=t,p=_l.useStore(i==null?void 0:i.store,{modal:r,open:n,openProp:o,activeTriggerId:d,triggerIdProp:m});As(()=>{o===void 0&&p.state.open===!1&&n===!0&&p.update({open:!0,activeTriggerId:d})}),p.useControlledProp("openProp",o),p.useControlledProp("triggerIdProp",m);const u=p.useState("open"),g=p.useState("mounted"),k=p.useState("payload"),h=go()!=null;p.useContextCallback("onOpenChange",a),p.useContextCallback("onOpenChangeComplete",s),xp(p,u),Ls(p);const{forceUnmount:y}=_s(u,p,()=>{p.update({stickIfOpen:!0,openChangeReason:null})});p.useSyncedValues({modal:r,nested:h}),c.useEffect(()=>{u||p.context.stickIfOpenTimeout.clear()},[p,u]);const b=c.useCallback(()=>{p.setOpen(!1,Oe(Fs))},[p]);c.useImperativeHandle(t.actionsRef,()=>({unmount:y,close:b}),[y,b]);const w=u||g,C=c.useMemo(()=>({store:p}),[p]);return l.jsxs(Cg.Provider,{value:C,children:[w&&l.jsx(IP,{store:p,modal:r}),typeof e=="function"?e({payload:k}):e]})}function RP(t){return Na(!0)?l.jsx(hd,{props:t}):l.jsx(gp,{children:l.jsx(hd,{props:t})})}function IP({store:t,modal:e}){const o=t.useState("floatingRootContext"),n=Os(o,{outsidePressEvent:{mouse:e==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}}),a=n.reference??Je,s=n.trigger??Je,r=c.useMemo(()=>St(Qn,n.floating),[n.floating]);return Us(t,{activeTriggerProps:a,inactiveTriggerProps:s,popupProps:r}),null}const FP=300,MP=c.forwardRef(function(e,o){const{render:n,className:a,style:s,disabled:r=!1,nativeButton:i=!0,handle:m,payload:d,openOnHover:p=!1,delay:u=FP,closeDelay:g=0,id:k,...h}=e,y=Na(!0),b=(m==null?void 0:m.store)??(y==null?void 0:y.store);if(!b)throw new Error(st(74));const w=fn(k),C=b.useState("isTriggerActive",w),v=b.useState("floatingRootContext"),T=b.useState("isOpenedByTrigger",w),S=b.useState("triggerPopupId",w),f=c.useRef(null),{registerTrigger:A,isMountedByThisTrigger:D}=nl(w,f,b,{payload:d,disabled:r,openOnHover:p,closeDelay:g}),F=b.useState("openChangeReason"),E=b.useState("stickIfOpen"),B=b.useState("openMethod"),N=b.useState("focusManagerModal"),x=Vs(v,{enabled:v!=null&&p&&(B!=="touch"||F!==po),mouseOnly:!0,move:!1,handleClose:qs(),restMs:u,delay:{close:g},triggerElementRef:f,isActiveTrigger:C,isClosing:()=>b.select("transitionStatus")==="ending"}),q=Zi(v,{enabled:v!=null,stickIfOpen:E}),M=eg(()=>b.select("open"),z=>{b.set("openMethod",z)}),j=b.useState("triggerProps",D),{getButtonProps:O,buttonRef:V}=Oa({disabled:r,native:i}),$={open(z){return z&&F===po?ii.open(z):dl.open(z)}},{preFocusGuardRef:I,handlePreFocusGuardFocus:se,handleFocusTargetFocus:_}=kg(b,f),W=tt("button",e,{state:{disabled:r,open:T},ref:[V,o,A,f],props:[q.reference,x,j,M,{[rp]:"",id:w,"aria-haspopup":"dialog","aria-expanded":T,"aria-controls":S},h,O],stateAttributesMapping:$});return D&&!N?l.jsxs(c.Fragment,{children:[l.jsx(Oo,{ref:I,onFocus:se}),l.jsx(c.Fragment,{children:W},w),l.jsx(Oo,{ref:b.context.triggerFocusTargetRef,onFocus:_})]}):l.jsx(c.Fragment,{children:W},w)}),Tg=c.createContext(void 0);function OP(){const t=c.useContext(Tg);if(t===void 0)throw new Error(st(45));return t}const NP=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e,{store:s}=Na();return s.useState("mounted")||n?l.jsx(Tg.Provider,{value:n,children:l.jsx($i,{ref:o,...a})}):null}),Sg=c.createContext(void 0);function jP(){const t=c.useContext(Sg);if(!t)throw new Error(st(46));return t}const LP=c.forwardRef(function(e,o){const{render:n,className:a,style:s,anchor:r,positionMethod:i="absolute",side:m="bottom",align:d="center",sideOffset:p=0,alignOffset:u=0,collisionBoundary:g="clipping-ancestors",collisionPadding:k=5,arrowPadding:h=5,sticky:y=!1,disableAnchorTracking:b=!1,collisionAvoidance:w=Ki,...C}=e,{store:v}=Na(),T=OP(),S=Ji(),f=v.useState("floatingRootContext"),A=v.useState("mounted"),D=v.useState("open"),F=v.useState("openChangeReason"),E=v.useState("activeTriggerElement"),B=v.useState("modal"),N=v.useState("openMethod"),x=v.useState("positionerElement"),q=v.useState("instantType"),M=v.useState("transitionStatus"),j=v.useState("hasViewport"),O=c.useRef(null),V=el(x,!1,!1),$=pl({anchor:r,floatingRootContext:f,positionMethod:i,mounted:A,side:m,sideOffset:p,align:d,alignOffset:u,arrowPadding:h,collisionBoundary:g,collisionPadding:k,sticky:y,disableAnchorTracking:b,keepMounted:T,nodeId:S,collisionAvoidance:w,adaptiveOrigin:j?ul:void 0}),I=f.useState("domReferenceElement");he(()=>{const W=I,z=O.current;if(W&&(O.current=W),z&&W&&W!==z){v.set("instantType",void 0);const H=new AbortController;return V(()=>{v.set("instantType","trigger-change")},H.signal),()=>{H.abort()}}},[I,V,v]),mg(D&&B===!0&&F!==Ye,N==="touch",x,E);const se=c.useCallback(W=>{v.set("positionerElement",W)},[v]),_={open:D,side:$.side,align:$.align,anchorHidden:$.anchorHidden,instant:q},U=ml(e,_,{styles:$.positionerStyles,transitionStatus:M,props:C,refs:[o,se],hidden:!A,inert:!D});return l.jsxs(Sg.Provider,{value:$,children:[A&&B===!0&&F!==Ye&&l.jsx(Pl,{ref:v.context.internalBackdropRef,inert:gl(!D),cutout:E}),l.jsx(mp,{id:S,children:U})]})}),_P=c.createContext(void 0);function UP(){const[t,e]=c.useState(0),o=Ae(()=>(e(a=>a+1),()=>{e(a=>Math.max(0,a-1))}));return{context:c.useMemo(()=>({register:o}),[o]),hasClosePart:t>0}}function zP(t){const{value:e,children:o}=t;return l.jsx(_P.Provider,{value:e,children:o})}const BP={...gn,...Ea},VP=c.forwardRef(function(e,o){const{render:n,className:a,style:s,initialFocus:r,finalFocus:i,...m}=e,{store:d}=Na(),p=jP(),u=ug()!=null,{context:g,hasClosePart:k}=UP(),h=d.useState("open"),y=d.useState("openMethod"),b=d.useState("instantType"),w=d.useState("transitionStatus"),C=d.useState("popupProps"),v=d.useState("titleElementId"),T=d.useState("descriptionElementId"),S=d.useState("modal"),f=d.useState("mounted"),A=d.useState("openChangeReason"),D=d.useState("activeTriggerElement"),F=d.useState("floatingRootContext"),E=F.useState("floatingId"),B=d.useState("disabled"),N=d.useState("openOnHover"),x=d.useState("closeDelay"),q=m.id??E;Ra({open:h,ref:d.context.popupRef,onComplete(){var se,_;h&&((_=(se=d.context).onOpenChangeComplete)==null||_.call(se,!0))}}),ll(F,{enabled:N&&!B,closeDelay:x});function M(se){return se==="touch"?d.context.popupRef.current:!0}const j=r===void 0?M:r,O=S!==!1&&k;d.useSyncedValue("focusManagerModal",O);const V=c.useCallback(se=>{d.set("popupElement",se)},[d]),$={open:h,side:p.side,align:p.align,instant:b,transitionStatus:w},I=tt("div",e,{state:$,ref:[o,d.context.popupRef,V],props:[C,{id:q,role:"dialog",...Qn,"aria-labelledby":v,"aria-describedby":T,onKeyDown(se){u&&xl.has(se.key)&&se.stopPropagation()}},Ws(w),m],stateAttributesMapping:BP});return l.jsx(Yi,{context:F,openInteractionType:y,modal:O,disabled:!f||A===Ye,initialFocus:j,returnFocus:i,restoreFocus:"popup",previousFocusableElement:He(D)?D:void 0,nextFocusableElement:d.context.triggerFocusTargetRef,beforeContentFocusGuardRef:d.context.beforeContentFocusGuardRef,children:l.jsx(zP,{value:g,children:I})})});function HP({...t}){return l.jsx(RP,{"data-slot":"popover",...t})}function qP({...t}){return l.jsx(MP,{"data-slot":"popover-trigger",...t})}function WP({className:t,align:e="center",alignOffset:o=0,side:n="bottom",sideOffset:a=4,...s}){return l.jsx(NP,{children:l.jsx(LP,{align:e,alignOffset:o,side:n,sideOffset:a,className:"isolate z-50",children:l.jsx(VP,{"data-slot":"popover-content",className:Fe("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 KP="https://www.raisfast.com/data/templates.json",Dg="raisfast.templates.cache",$P=0,GP=[{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 JP(){try{const t=localStorage.getItem(Dg);if(!t)return null;const e=JSON.parse(t);return Date.now()-e.at>$P?null:Array.isArray(e.data)?e.data:null}catch{return null}}function QP(t){try{localStorage.setItem(Dg,JSON.stringify({at:Date.now(),data:t}))}catch{}}function YP(){const[t,e]=c.useState(()=>JP()??GP),[o,n]=c.useState(!1);return c.useEffect(()=>{let a=!1;return n(!0),fetch(KP,{cache:"no-cache"}).then(s=>s.ok?s.json():Promise.reject(new Error(String(s.status)))).then(s=>{a||!Array.isArray(s)||s.length===0||(e(s),QP(s))}).catch(()=>{}).finally(()=>{a||n(!1)}),()=>{a=!0}},[]),{templates:t,loading:o}}function ZP({className:t}){return l.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:t,"aria-hidden":"true",children:l.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 XP(t,e){return typeof t.description=="string"?t.description:t.description?e==="zh"?t.description.cn??t.description.en:t.description.en:""}function eE(){const{t,locale:e}=pt(),{templates:o,loading:n}=YP(),[a,s]=c.useState(!1),[r,i]=c.useState(""),[m,d]=c.useState("all"),p=["all",...Array.from(new Set(o.map(g=>g.type)))],u=o.filter(g=>{if(m!=="all"&&g.type!==m)return!1;if(!r)return!0;const k=r.toLowerCase();return g.name.toLowerCase().includes(k)||g.type.toLowerCase().includes(k)||(g.features??[]).some(h=>h.toLowerCase().includes(k))});return l.jsxs(HP,{open:a,onOpenChange:s,children:[l.jsx(em,{delay:300,children:l.jsxs(tm,{children:[l.jsx(om,{render:g=>l.jsxs(qP,{...g,className:"group relative flex size-7 items-center justify-center rounded-md text-primary transition-colors hover:bg-primary/10 hover:text-primary",children:[l.jsx("span",{className:"absolute inset-0 rounded-md animate-ping bg-primary/25 [animation-duration:2.5s] group-hover:[animation:none]"}),l.jsx(ic,{className:"relative size-4 transition-transform duration-300 group-hover:scale-110 group-hover:-rotate-6"}),l.jsx("span",{className:"absolute -end-0.5 -top-0.5 size-1.5 rounded-full bg-primary opacity-100 group-hover:opacity-0"})]})}),l.jsx(nm,{children:t("templates.title")})]})}),l.jsxs(WP,{align:"end",className:"w-[min(1080px,calc(100vw-2rem))] p-0",children:[l.jsxs("div",{className:"flex items-center gap-2 border-b px-3 py-2",children:[l.jsx(mu,{className:"size-3.5 text-muted-foreground"}),l.jsx("input",{value:r,onChange:g=>i(g.target.value),placeholder:t("templates.search"),className:"h-6 w-40 bg-transparent text-sm outline-none placeholder:text-muted-foreground"}),l.jsx("div",{className:"flex-1"}),l.jsx("div",{className:"flex items-center gap-1",children:p.map(g=>l.jsx("button",{type:"button",onClick:()=>d(g),className:`rounded-md px-2 py-1 text-xs transition-colors ${m===g?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,children:g==="all"?t("templates.all"):g},g))}),n&&l.jsx(cu,{className:"size-3.5 animate-spin text-muted-foreground"})]}),l.jsx("div",{className:"grid max-h-[600px] grid-cols-3 gap-4 overflow-y-auto overscroll-contain p-4",children:u.length===0?l.jsx("p",{className:"col-span-3 py-10 text-center text-sm text-muted-foreground",children:t("templates.empty")}):u.map(g=>l.jsxs("div",{className:"group overflow-hidden rounded-lg border bg-card transition-colors hover:border-primary/60",children:[l.jsxs("div",{className:"relative aspect-[16/10] overflow-hidden bg-muted",children:[l.jsx("a",{href:g.demoUrl??void 0,target:"_blank",rel:"noopener noreferrer","aria-label":g.name,className:"block size-full",children:g.image?l.jsx("img",{src:g.image,alt:g.name,loading:"lazy",className:"size-full object-cover transition-transform duration-300 group-hover:scale-105"}):l.jsx("div",{className:"flex size-full items-center justify-center text-muted-foreground",children:l.jsx(ic,{className:"size-8"})})}),l.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:g.type})]}),l.jsxs("div",{className:"space-y-2 p-3",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"truncate text-sm font-medium",children:g.name}),l.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[g.githubUrl&&l.jsx("a",{href:g.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:l.jsx(ZP,{className:"size-3.5"})}),g.demoUrl&&l.jsx("a",{href:g.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:l.jsx($h,{className:"size-3.5"})})]})]}),l.jsx("p",{className:"line-clamp-2 min-h-8 text-xs leading-4 text-muted-foreground",children:XP(g,e)})]})]},g.id))})]})]})}function tE({children:t,className:e}){return l.jsx("nav",{"data-slot":"breadcrumb",className:Fe("flex items-center text-sm text-muted-foreground",e),children:l.jsx("ol",{className:"flex items-center gap-1.5",children:t})})}function oE({children:t,className:e}){return l.jsx("li",{"data-slot":"breadcrumb-item",className:Fe("inline-flex items-center gap-1.5",e),children:t})}function nE({href:t,children:e,className:o}){return l.jsx(Sl,{href:t,className:Fe("hover:text-foreground transition-colors",o),children:e})}function aE({children:t,className:e}){return l.jsx("span",{"data-slot":"breadcrumb-page",className:Fe("font-medium text-foreground",e),children:t})}function sE(){return l.jsx(Xd,{className:"size-3.5 text-muted-foreground/50"})}function rE(){const{t}=pt();return[{label:t("layout.posts"),href:"/posts",icon:Ss},{label:t("layout.categories"),href:"/categories",icon:nu},{label:t("layout.tags"),href:"/tags",icon:Pi},{label:t("layout.comments"),href:"/comments",icon:uu},{label:t("layout.media"),href:"/media",icon:Si},{label:t("layout.pages"),href:"/pages",icon:iu},{label:t("layout.reusableBlocks"),href:"/reusable-blocks",icon:Ci}]}function iE(){const{t}=pt();return[{label:t("layout.contentTypes"),href:"/content-types",icon:su},{label:t("layout.plugins"),href:"/plugins",icon:Di}]}function lE(){const{t}=pt();return[{label:t("layout.apps"),href:"/apps",icon:Ti}]}function cE(){const{t}=pt();return[{label:t("layout.orders"),href:"/orders",icon:fu},{label:t("layout.products"),href:"/products",icon:Ob},{label:t("layout.productCategories"),href:"/product-categories",icon:ob},{label:t("layout.productComments"),href:"/product-comments",icon:sy},{label:t("layout.coupons"),href:"/coupons",icon:Pi},{label:t("layout.shippingTemplates"),href:"/shipping-templates",icon:fy}]}function dE(){const{t}=pt();return[{label:t("layout.paymentOrders"),href:"/payment-orders",icon:Bb},{label:t("layout.paymentTransactions"),href:"/payment-transactions",icon:sc},{label:t("layout.paymentChannels"),href:"/payments",icon:Wh},{label:t("layout.wallets"),href:"/wallets",icon:yu},{label:t("layout.walletTransactions"),href:"/wallet-transactions",icon:sc},{label:t("layout.currencies"),href:"/currencies",icon:Vh},{label:t("layout.redemptionCodes"),href:"/redemption-codes",icon:uy}]}function uE(){const{t}=pt();return[{label:t("layout.channels"),href:"/channels",icon:Ub},{label:t("layout.receipts"),href:"/receipts",icon:Ai},{label:t("layout.apiClients"),href:"/api-clients",icon:jb}]}function pE(){const{t}=pt();return[{label:t("flows.title"),href:"/flows",icon:Ei},{label:t("flows.triggers.title"),href:"/flows/triggers",icon:Py},{label:t("flows.instances"),href:"/flows/instances",icon:lb},{label:t("flows.apis.title"),href:"/flows/apis",icon:au},{label:t("flows.apis.logsPage"),href:"/flows/apis/logs",icon:yh}]}function mE(){const{t}=pt();return[{label:t("layout.llmChannels"),href:"/llm/channels",icon:vy},{label:t("layout.llmModels"),href:"/llm/models",icon:Ti},{label:t("layout.llmLogs"),href:"/llm/logs",icon:Ai},{label:t("layout.llmTokens"),href:"/llm/tokens",icon:Ds},{label:t("layout.llmPlayground"),href:"/llm/playground",icon:du}]}function gE(){const{t}=pt();return[{label:t("layout.aiAgents"),href:"/ai/agents",icon:Yd},{label:t("layout.aiSkills"),href:"/ai/skills",icon:ny},{label:t("layout.aiTools"),href:"/ai/tools",icon:Dy},{label:t("layout.aiSessions"),href:"/ai/sessions",icon:Eb},{label:t("layout.aiDebates"),href:"/ai/debates",icon:Hb},{label:t("layout.aiPlayground"),href:"/ai/playground",icon:du}]}function fE(){const{t}=pt();return[{label:t("layout.kb"),href:"/kb",icon:Qd},{label:t("layout.kbDocs"),href:"/kb/docs",icon:Zh},{label:t("layout.kbChunks"),href:"/kb/chunks",icon:Ci},{label:t("layout.kbImages"),href:"/kb/images",icon:Si},{label:t("layout.kbChunker"),href:"/kb/chunker-preview",icon:$b},{label:t("layout.kbPlayground"),href:"/kb/playground",icon:Db},{label:t("layout.kbWiki"),href:"/kb/wiki",icon:Dh},{label:t("layout.kbFaqs"),href:"/kb/faqs",icon:_h},{label:t("layout.kbGaps"),href:"/kb/gaps",icon:Qb},{label:t("layout.kbDiagnostics"),href:"/kb/diagnostics",icon:iy},{label:t("layout.kbSearchTest"),href:"/kb/search-test",icon:eb}]}function hE(){const{t}=pt();return[{label:t("layout.docparseEngines"),href:"/docparse",icon:ou},{label:t("layout.docparseTokens"),href:"/docparse/tokens",icon:Ds},{label:t("layout.docparseConvert"),href:"/docparse/convert",icon:Ss},{label:t("layout.docparseRecognize"),href:"/docparse/recognize",icon:Wb},{label:t("layout.docparseUsage"),href:"/docparse/usage",icon:Ai}]}function bE(){const{t}=pt(),{builtinTenantable:e}=_o();return[{label:t("layout.users"),href:"/users",icon:bu},{label:t("layout.rolesPermissions"),href:"/rbac",icon:gu},{label:t("layout.cron"),href:"/crons",icon:tu},{label:t("layout.jobs"),href:"/jobs",icon:lu},...e?[{label:t("layout.tenants"),href:"/tenants",icon:Zd}]:[],{label:t("layout.webhooks"),href:"/webhooks",icon:ku},{label:t("layout.apiTokens"),href:"/tokens",icon:Ds},{label:t("layout.auditLog"),href:"/audit",icon:eu},{label:t("layout.options"),href:"/options",icon:xi}]}function yE(){const{t}=pt(),{currentTenantId:e,clearTenant:o,builtinTenantable:n}=_o(),{isAdmin:a}=Qo();return!n||!a()?null:l.jsxs("div",{className:"flex items-center gap-2 px-4 py-2",children:[l.jsx(au,{className:"size-3.5 text-muted-foreground shrink-0"}),l.jsx("span",{className:"text-[11px] text-muted-foreground uppercase tracking-wider font-medium",children:t("layout.tenant")}),l.jsx("div",{className:"flex-1 min-w-0"}),e?l.jsxs("div",{className:"flex items-center gap-1",children:[l.jsx("span",{className:"text-xs font-medium truncate max-w-[80px]",children:e}),l.jsx(Gn,{variant:"ghost",size:"icon-sm",onClick:o,title:t("layout.clearTenant"),children:l.jsx(wu,{className:"size-3"})})]}):l.jsx("span",{className:"text-xs text-muted-foreground/60 italic",children:t("layout.all")})]})}function Rr(t,e){if(t===e)return!0;const o=e.endsWith("/")?e:`${e}/`;return t.startsWith(o)}function jt({label:t,icon:e,items:o}){const n=sm(),[a,s]=c.useState(()=>o.some(i=>Rr(n,i.href))),r=i=>Rr(n,i.href)?!o.some(m=>m.href!==i.href&&m.href.length>i.href.length&&Rr(n,m.href)):!1;return l.jsxs(og,{className:"mt-0 pt-0",children:[l.jsxs("button",{onClick:()=>s(!a),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:[l.jsx(e,{className:"size-3.5 shrink-0"}),l.jsx("span",{className:"truncate flex-1 text-left",children:t}),l.jsx(Mh,{className:`size-3 shrink-0 transition-transform duration-200 ${a?"":"-rotate-90"}`})]}),l.jsx("div",{className:`grid transition-[grid-template-rows] duration-200 ease-in-out ${a?"grid-rows-[1fr]":"grid-rows-[0fr]"} group-data-[collapsible=icon]:grid-rows-[1fr]`,children:l.jsx("div",{className:"overflow-hidden",children:l.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:l.jsx(ng,{children:l.jsx(ag,{children:o.map(i=>{const m=i.icon,d=r(i);return l.jsx(sg,{children:l.jsxs(rg,{render:l.jsx(Sl,{href:i.href}),isActive:d,tooltip:i.label,children:[l.jsx(m,{}),l.jsx("span",{children:i.label})]})},i.href)})})})})})})]})}function kE(){var H;const t=sm(),e=am(),{isLoggedIn:o,isAuthor:n,logout:a,user:s}=Qo(),{resolvedTheme:r,setTheme:i}=vi(),[m,d]=c.useState(!1),p=rE(),u=iE(),g=lE(),k=cE(),h=dE(),y=uE(),b=pE(),w=gE(),C=mE(),v=fE(),T=hE(),S=bE(),{t:f}=pt(),D=rm()==="rtl"?"right":"left",{setBuiltinTenantable:F}=_o(),[E,B]=c.useState(""),N=c.useRef(t),x=t.split("/").filter(Boolean),q=x[0]!=="content-types"||x.length<2||x[1]==="builder"?null:x.length>=3&&x[2]!=="new"?`${x[1]}/${x[2]}`:x[1],M=sa({queryKey:["content-type",q],queryFn:()=>q?Ct.send(`/admin/content-types/${q}`):null,enabled:!!q}),j=(()=>{if(x[0]!=="crons"||x.length<2)return null;const L=x[1];return L==="new"?null:L})(),O=sa({queryKey:["cron-breadcrumb",j],queryFn:()=>j?Ct.send(`/admin/crons/${j}`):null,enabled:!!j}),V=x[0]==="flows"&&x.length>=3&&x[2]==="editor"?x[1]:null,$=sa({queryKey:["flow-breadcrumb",V],queryFn:()=>V?Ct.send(`/admin/flows/${V}`):null,enabled:!!V}),I=(()=>{if(x[0]!=="ai"||x[1]!=="agents")return null;const L=x[2];return!L||L==="new"?null:L})(),se=sa({queryKey:["ai-agent-breadcrumb",I],queryFn:()=>I?Ct.send(`/admin/ai/agents/${I}`):null,enabled:!!I}),_=(()=>{var be,De,G,de,ce,we;const L=t.split("/").filter(Boolean),R=[{label:f("layout.dashboard"),href:"/dashboard"}],Y={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")},apps:{label:f("layout.apps")},users:{label:f("layout.users")},profile:{label:f("layout.profile")},rbac:{label:f("layout.rolesPermissions")},crons:{label:f("layout.cron")},jobs:{label:f("layout.jobs")},tenants:{label:f("layout.tenants")},webhooks:{label:f("layout.webhooks")},tokens:{label:f("layout.apiTokens")},workflows:{label:f("layout.workflows")},flows:{label:f("layout.flows")},llm:{label:f("layout.llm")},ai:{label:f("layout.ai")},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")},"redemption-codes":{label:f("layout.redemptionCodes"),parent:f("layout.finance")},wallets:{label:f("layout.wallets"),parent:f("layout.finance")},"wallet-transactions":{label:f("layout.walletTransactions"),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")},kb:{label:f("layout.kb")},docparse:{label:f("layout.docparse")},receipts:{label:f("layout.receipts"),parent:f("layout.integration")},"api-clients":{label:f("layout.apiClients"),parent:f("layout.integration")}};if(L.length===1&&L[0]==="dashboard")return R;if(L.length>=1){const te=L[0],fe=Y[te];if(!fe)return R;if(L.length===1)R.push({label:fe.label});else{R.push({label:fe.label,href:`/${te}`});const ne=L[1];if(te==="content-types"&&ne!=="builder"){let ee,Ee;L[2]&&L[2]!=="new"&&L[3]!=="edit"&&L[2]!=="new"?(ee=`${L[1]} / ${L[2].replace(/_/g," ")}`,Ee=3):(ee=ne.replace(/_/g," "),Ee=2),R.push({label:ee,description:((be=M.data)==null?void 0:be.description)??void 0}),L[Ee]==="new"?R.push({label:f("common.create")}):L[Ee]&&L[Ee+1]==="edit"&&R.push({label:f("common.edit")})}else if(ne==="new")R.push({label:f("common.create")});else if(te==="content-types"&&ne==="builder")R.push({label:f("contentTypes.builder")});else if(te==="crons"&&ne!=="new"){const ee=((De=O.data)==null?void 0:De.label)??ne;R.push({label:ee}),L[2]==="edit"?R.push({label:f("common.edit")}):R.push({label:f("common.view")})}else te==="flows"&&ne==="editor"?R.push({label:f("flows.editor.title")}):te==="flows"&&ne==="instances"?R.push({label:f("flows.instances")}):te==="flows"&&ne==="triggers"?R.push({label:f("flows.triggers.title")}):te==="flows"&&ne==="apis"?(R.push({label:f("flows.apis.title")}),L[2]==="logs"&&R.push({label:f("flows.apis.logsPage")})):te==="flows"&&L[2]==="editor"?(R.push({label:((G=$.data)==null?void 0:G.name)??ne}),R.push({label:f("flows.editor.title")})):te==="docparse"?ne==="tokens"?R.push({label:f("layout.docparseTokens")}):ne==="convert"?R.push({label:f("layout.docparseConvert")}):ne==="recognize"?R.push({label:f("layout.docparseRecognize")}):ne==="usage"&&R.push({label:f("layout.docparseUsage")}):te==="kb"?ne==="docs"?R.push({label:f("layout.kbDocs"),href:"/kb/docs"}):ne==="chunks"?(R.push({label:f("layout.kbChunks"),href:"/kb/chunks"}),R.push({label:f("layout.kbImages"),href:"/kb/images"})):ne==="chunker-preview"?R.push({label:f("layout.kbChunker"),href:"/kb/chunker-preview"}):ne==="playground"?R.push({label:f("layout.kbPlayground"),href:"/kb/playground"}):ne==="faqs"?R.push({label:f("layout.kbFaqs"),href:"/kb/faqs"}):ne==="gaps"?R.push({label:f("layout.kbGaps"),href:"/kb/gaps"}):ne==="diagnostics"?R.push({label:f("layout.kbDiagnostics"),href:"/kb/diagnostics"}):ne==="search-test"?R.push({label:f("layout.kbSearchTest"),href:"/kb/search-test"}):ne==="wiki"&&(R.push({label:f("layout.kbWiki"),href:"/kb/wiki"}),L[2]&&R.push({label:L[2]})):te==="llm"&&ne==="channels"?R.push({label:f("layout.llmChannels")}):te==="llm"&&ne==="models"?R.push({label:f("layout.llmModels")}):te==="llm"&&ne==="logs"?R.push({label:f("layout.llmLogs")}):te==="llm"&&ne==="tokens"?R.push({label:f("layout.llmTokens")}):te==="llm"&&ne==="playground"?R.push({label:f("layout.llmPlayground")}):te==="ai"&&ne==="agents"?(R.push({label:f("layout.aiAgents"),href:"/ai/agents"}),L[2]==="new"?R.push({label:f("common.create")}):L[2]&&L[3]==="edit"?(R.push({label:((de=se.data)==null?void 0:de.name)??L[2]}),R.push({label:f("common.edit")})):L[2]&&L[3]==="usage"?(R.push({label:((ce=se.data)==null?void 0:ce.name)??L[2]}),R.push({label:f("aiAgents.usage")})):L[2]&&L[3]==="memories"&&(R.push({label:((we=se.data)==null?void 0:we.name)??L[2]}),R.push({label:f("aiMemory.title")}))):te==="ai"&&ne==="skills"?R.push({label:f("layout.aiSkills")}):te==="ai"&&ne==="tools"?R.push({label:f("layout.aiTools")}):te==="ai"&&ne==="sessions"?R.push({label:f("layout.aiSessions")}):te==="ai"&&ne==="playground"?R.push({label:f("layout.aiPlayground")}):te==="apps"&&ne==="install"?R.push({label:f("apps.installApp")}):te==="apps"?R.push({label:ne}):L[2]==="edit"?R.push({label:f("common.edit")}):R.push({label:f("common.view")})}}return R})();if(c.useEffect(()=>{const L={"/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","/apps":"layout.apps","/rbac":"layout.rolesPermissions","/crons":"layout.cron","/jobs":"layout.jobs","/tenants":"layout.tenants","/webhooks":"layout.webhooks","/tokens":"layout.apiTokens","/workflows":"layout.workflows","/flows/apis/logs":"flows.apis.logsPage","/flows/triggers":"flows.triggers.title","/flows/apis":"flows.apis.title","/flows/instances":"flows.instances","/flows/editor":"flows.editor.title","/flows":"layout.flows","/llm/channels":"layout.llmChannels","/llm/models":"layout.llmModels","/llm/logs":"layout.llmLogs","/llm/tokens":"layout.llmTokens","/llm/playground":"layout.llmPlayground","/ai/agents":"layout.aiAgents","/ai/skills":"layout.aiSkills","/ai/tools":"layout.aiTools","/ai/sessions":"layout.aiSessions","/ai/debates":"layout.aiDebates","/ai/playground":"layout.aiPlayground","/kb/diagnostics":"layout.kbDiagnostics","/kb/search-test":"layout.kbSearchTest","/docparse":"layout.docparseEngines","/docparse/tokens":"layout.docparseTokens","/docparse/convert":"layout.docparseConvert","/docparse/recognize":"layout.docparseRecognize","/docparse/usage":"layout.docparseUsage","/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","/redemption-codes":"layout.redemptionCodes","/wallets":"layout.wallets","/wallet-transactions":"layout.walletTransactions","/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 R="";for(const[Y,be]of Object.entries(L))if(t===Y||t.startsWith(Y+"/")){R=f(be);break}document.title=R?`${R} - ${E||"Admin"}`:`${E||"Admin"}`},[t,f,E]),c.useEffect(()=>{if(N.current!==t){N.current=t;const L=document.getElementById("nprogress-bar");if(L){L.style.display="block";const R=setTimeout(()=>{L.style.display="none"},300);return()=>clearTimeout(R)}}},[t]),c.useEffect(()=>{d(!0),Ct.send("/options/public").then(L=>{(L==null?void 0:L.builtin_tenantable)!=null&&F(L.builtin_tenantable)}).catch(()=>{}),Ct.send("/info").then(L=>{L!=null&&L.name&&B(L.name)}).catch(()=>{})},[]),!m)return l.jsx("div",{className:"flex min-h-screen items-center justify-center",children:l.jsx("div",{className:"text-center space-y-4",children:l.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-transparent mx-auto"})})});if(!o()||!n())return l.jsx(Ir,{to:"/auth/login",replace:!0});const U={dark:"#241c1a",light:"#e8e4e0"};function W(L){const R=r,Y=R==="dark"?"light":"dark",De=L.currentTarget.getBoundingClientRect(),G=De.left+De.width/2,de=De.top+De.height/2;i(Y);const ce=Math.hypot(Math.max(G,window.innerWidth-G),Math.max(de,window.innerHeight-de)),we=document.createElement("div");we.style.cssText=` + position: fixed; + left: ${G-ce}px; + top: ${de-ce}px; + width: ${ce*2}px; + height: ${ce*2}px; + border-radius: 50%; + z-index: 99999; + pointer-events: none; + background: ${U[R??"dark"]||"#17171e"}; + transform-origin: center center; + will-change: transform; + `,document.body.appendChild(we);const te=we.animate([{transform:"scale(1)"},{transform:"scale(0)"}],{duration:400,easing:"cubic-bezier(0.4, 0, 0.2, 1)"});te.onfinish=()=>{we.remove()}}function z(L){return t===L||L!=="/dashboard"&&t.startsWith(L)}return l.jsxs(l.Fragment,{children:[l.jsx("div",{id:"nprogress-bar",style:{display:"none"},children:l.jsx("div",{className:"bar"})}),l.jsxs(EA,{children:[l.jsxs(RA,{collapsible:"icon",side:D,children:[l.jsx(MA,{className:"h-12 border-b flex items-center justify-center group-data-[collapsible=icon]:px-0 px-4 overflow-hidden",children:l.jsxs("div",{className:"flex items-center gap-2.5 w-full min-w-0 group-data-[collapsible=icon]:justify-center",children:[l.jsx("img",{src:"/admin/logo.png",alt:"RaisFast",className:"size-8 shrink-0"}),l.jsx("div",{className:"flex flex-col overflow-hidden group-data-[collapsible=icon]:hidden",children:l.jsx("span",{className:"text-lg font-semibold leading-tight whitespace-nowrap text-sidebar-foreground",children:E||f("layout.brand")})})]})}),l.jsx(yE,{}),l.jsxs(OA,{children:[l.jsx(og,{children:l.jsx(ng,{children:l.jsx(ag,{children:l.jsx(sg,{children:l.jsxs(rg,{render:l.jsx(Sl,{href:"/dashboard"}),isActive:z("/dashboard"),tooltip:f("layout.dashboard"),children:[l.jsx(ru,{}),l.jsx("span",{children:f("layout.dashboard")})]})})})})}),l.jsx(jt,{label:f("layout.content"),icon:Ss,items:p}),l.jsx(jt,{label:f("layout.ecommerce"),icon:fu,items:k}),l.jsx(jt,{label:f("layout.extension"),icon:Di,items:u}),l.jsx(jt,{label:f("layout.apps"),icon:Ti,items:g}),l.jsx(jt,{label:f("layout.finance"),icon:yu,items:h}),l.jsx(jt,{label:f("layout.integration"),icon:Ih,items:y}),l.jsx(jt,{label:f("layout.flows"),icon:Ei,items:b}),l.jsx(jt,{label:f("layout.llm"),icon:ou,items:C}),l.jsx(jt,{label:f("layout.ai"),icon:Yd,items:w}),l.jsx(jt,{label:f("layout.docparse"),icon:Jh,items:T}),l.jsx(jt,{label:f("layout.kb"),icon:Qd,items:v}),l.jsx(jt,{label:f("layout.system"),icon:xi,items:S})]})]}),l.jsxs(FA,{className:"h-screen overflow-hidden",children:[l.jsxs("header",{className:"sticky top-0 z-10 flex h-12 items-center gap-2 border-b bg-background px-4",children:[l.jsx(IA,{}),l.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:[l.jsx(mu,{className:"size-3.5"}),l.jsx("span",{className:"flex-1 text-left",children:f("command.search")}),l.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:[l.jsx("span",{className:"text-xs",children:"⌘"}),"K"]})]}),l.jsx("div",{className:"flex-1"}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(eE,{}),l.jsx(Gn,{variant:"ghost",size:"icon-sm",onClick:W,title:f("layout.toggleTheme"),children:m&&r==="dark"?l.jsx(hu,{className:"size-4"}):l.jsx(pu,{className:"size-4"})}),l.jsx(xP,{}),l.jsx(DP,{}),l.jsxs(Ol,{children:[l.jsx(Nl,{className:"flex size-7 items-center justify-center rounded-full bg-muted text-xs font-medium hover:opacity-80",children:((H=s==null?void 0:s.username)==null?void 0:H.charAt(0).toUpperCase())??"U"}),l.jsxs(Ys,{align:"end",className:"min-w-36",children:[l.jsxs(gi,{className:"text-sm gap-2",onClick:()=>e.push("/profile"),children:[l.jsx(by,{className:"size-4"}),f("layout.profile")]}),l.jsxs(gi,{className:"text-sm gap-2",onClick:a,children:[l.jsx(vb,{className:"size-4"}),f("layout.signOut")]})]})]})]})]}),l.jsxs("div",{className:"flex-1 overflow-y-auto overscroll-contain pt-6 px-6 flex flex-col",children:[l.jsxs("div",{className:"mb-4 shrink-0 flex items-center gap-4",children:[l.jsx(tE,{children:_.map((L,R)=>l.jsxs(oE,{children:[R>0&&l.jsx(sE,{}),L.href&&R<_.length-1?l.jsx(nE,{href:L.href,children:L.label}):l.jsxs(aE,{children:[L.label,L.description&&l.jsxs("span",{className:"ms-2 hidden max-w-[28rem] truncate text-xs font-normal text-muted-foreground md:inline",children:["·"," ",L.description]})]})]},R))}),t.split("/").filter(Boolean).length>=2&&l.jsxs(Gn,{variant:"ghost",size:"sm",className:"ml-auto text-xs gap-1",onClick:()=>window.history.back(),children:[l.jsx(vh,{className:"size-3.5"}),f("common.back")]})]}),l.jsx("div",{className:"animate-[page-fade-in_200ms_ease-out] flex-1 min-h-0",children:l.jsx(Wm,{children:l.jsx(jg,{})})},t)]})]})]})]})}const wE=c.lazy(()=>Z(()=>import("./login-B4LlQZSH.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),vE=c.lazy(()=>Z(()=>import("./admin-login-H-w89DWS.js"),__vite__mapDeps([13,1,2,4,5,6,7,8,14,15,11,12]))),CE=c.lazy(()=>Z(()=>import("./setup-qB-ZcSCu.js"),__vite__mapDeps([16,1,2,4,5,6,7,8,3,17,14,18,19,11,12]))),TE=c.lazy(()=>Z(()=>import("./register-BJXo-7l5.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12]))),SE=c.lazy(()=>Z(()=>import("./dashboard-C0Qo_lZ1.js"),__vite__mapDeps([21,1,22,3,23,24,25,11,12]))),DE=c.lazy(()=>Z(()=>import("./posts-DjIWo5qw.js"),__vite__mapDeps([26,1,27,28,29,3,30,31,5,6,32,33,23,34,35,36,37,38,39,40,4,7,41,42,43,44,45,46,47,48,11,12]))),AE=c.lazy(()=>Z(()=>import("./categories-GpkyeRPK.js"),__vite__mapDeps([49,1,28,4,5,6,7,8,50,35,51,52,53,46,54,55,56,48,45,47,11,12]))),xE=c.lazy(()=>Z(()=>import("./tags-J4OwPYS7.js"),__vite__mapDeps([57,1,27,28,2,3,4,5,6,7,8,23,58,35,36,37,38,39,46,47,48,45,11,12]))),PE=c.lazy(()=>Z(()=>import("./comments-CDaESYiI.js"),__vite__mapDeps([59,1,27,28,29,3,30,31,5,6,32,33,23,35,34,36,37,38,39,47,60,61,45,11,12]))),EE=c.lazy(()=>Z(()=>import("./media-C8mP8oN4.js"),__vite__mapDeps([62,1,27,28,36,37,4,5,6,7,41,31,42,32,63,34,44,64,53,65,3,47,66,67,45,23,10,35,68,69,11,12]))),RE=c.lazy(()=>Z(()=>import("./pages-EgbhwC99.js"),__vite__mapDeps([70,1,28,3,29,58,23,71,34,38,39,46,47,48,19,45,11,12]))),IE=c.lazy(()=>Z(()=>import("./content-types-CgI1zXD1.js"),__vite__mapDeps([72,1,28,27,40,4,5,6,7,41,31,42,32,29,3,35,73,74,33,75,76,66,46,52,47,69,48,67,45,11,12]))),FE=c.lazy(()=>Z(()=>import("./content-types-builder-CL72qfiG.js"),__vite__mapDeps([77,1,28,3,4,5,6,7,8,50,41,31,42,32,58,10,35,29,30,33,78,15,34,73,74,75,76,66,63,44,64,53,46,79,80,24,25,81,69,82,45,11,12]))),bd=c.lazy(()=>Z(()=>import("./content-types-list-BxsFZVzf.js"),__vite__mapDeps([83,1,27,28,3,30,31,5,6,32,33,38,23,36,37,35,34,40,4,7,41,42,84,50,8,29,85,55,56,58,63,44,64,53,79,86,69,65,87,88,89,67,39,73,74,75,76,66,45,46,47,48,11,12]))),ME=c.lazy(()=>Z(()=>import("./users-DBLDYjBO.js"),__vite__mapDeps([90,1,28,27,29,3,35,23,58,41,31,42,5,6,7,32,4,8,34,36,37,38,39,75,46,18,19,47,48,45,11,12]))),OE=c.lazy(()=>Z(()=>import("./user-detail-BdZP_yx3.js"),__vite__mapDeps([91,1,29,3,11,12]))),NE=c.lazy(()=>Z(()=>import("./plugins-6kc5g4Yx.js"),__vite__mapDeps([92,1,27,28,29,3,23,35,36,37,38,39,47,93,94,45,11,12]))),jE=c.lazy(()=>Z(()=>import("./plugin-detail-C5OLDTay.js"),__vite__mapDeps([95,1,28,29,3,10,35,93,94,45,75,80,11,12]))),LE=c.lazy(()=>Z(()=>import("./apps-BS0zrsMR.js"),__vite__mapDeps([96,1,28,29,3,30,31,5,6,32,33,23,35,39,38,97,46,47,93,45,94,11,12]))),_E=c.lazy(()=>Z(()=>import("./app-install-DCTzw9Ws.js"),__vite__mapDeps([98,1,28,29,3,4,5,6,7,8,10,74,32,33,61,11,12]))),UE=c.lazy(()=>Z(()=>import("./app-detail-CNxzT-fG.js"),__vite__mapDeps([99,1,28,29,3,30,31,5,6,32,33,10,35,97,93,45,11,12]))),zE=c.lazy(()=>Z(()=>import("./rbac-CJe_j3ce.js"),__vite__mapDeps([100,1,28,2,29,30,31,5,6,32,33,23,58,4,7,8,50,35,38,101,75,46,47,48,45,11,12]))),BE=c.lazy(()=>Z(()=>import("./crons-kbM9vP_Z.js"),__vite__mapDeps([102,1,27,28,36,37,29,3,23,74,5,6,32,33,7,38,39,35,46,47,48,45,11,12]))),VE=c.lazy(()=>Z(()=>import("./jobs-BmWHJuIh.js"),__vite__mapDeps([103,1,28,27,36,37,39,38,23,29,3,41,31,42,5,6,7,32,58,35,104,86,47,19,105,61,45,11,12]))),yd=c.lazy(()=>Z(()=>import("./cron-form-CZqavXng.js"),__vite__mapDeps([106,1,28,3,4,5,6,7,50,8,74,32,33,17,41,31,42,107,55,56,11,12]))),HE=c.lazy(()=>Z(()=>import("./cron-detail-Beisq5yZ.js"),__vite__mapDeps([108,1,28,27,36,37,29,3,10,23,35,48,93,45,61,60,11,12]))),qE=c.lazy(()=>Z(()=>import("./tenants-B1QuAbqS.js"),__vite__mapDeps([109,1,27,28,36,37,2,3,4,5,6,7,8,23,58,29,35,34,38,39,46,76,47,48,45,11,12]))),WE=c.lazy(()=>Z(()=>import("./webhooks-QSrKMgBS.js"),__vite__mapDeps([110,1,27,28,2,3,4,5,6,7,8,50,23,58,29,74,32,33,35,34,30,31,111,36,37,38,39,46,47,48,45,11,12]))),KE=c.lazy(()=>Z(()=>import("./tokens-CYhHR40_.js"),__vite__mapDeps([112,1,28,3,4,5,6,7,50,8,30,31,32,33,113,37,23,58,35,38,39,101,29,46,66,47,19,48,45,11,12]))),$E=c.lazy(()=>Z(()=>import("./workflows-DEmRNCQO.js"),__vite__mapDeps([114,1,28,2,3,4,5,6,7,8,50,23,58,29,35,38,39,19,46,47,48,115,45,11,12]))),GE=c.lazy(()=>Z(()=>import("./workflow-instances-DWkFWDNz.js"),__vite__mapDeps([116,1,27,28,29,3,41,31,42,5,6,7,32,34,36,37,38,23,89,61,11,12]))),JE=c.lazy(()=>Z(()=>import("./audit-VczS4FwP.js"),__vite__mapDeps([117,1,27,3,4,5,6,7,8,29,41,31,42,32,118,113,37,81,23,38,39,36,67,47,19,11,12]))),QE=c.lazy(()=>Z(()=>import("./options-gJEptUCW.js"),__vite__mapDeps([119,1,28,78,31,15,3,4,5,6,7,50,8,30,32,33,41,42,105,76,11,12]))),YE=c.lazy(()=>Z(()=>import("./reusable-blocks-B4iQCovp.js"),__vite__mapDeps([120,1,28,3,58,23,4,5,6,7,8,50,71,39,46,47,48,45,11,12]))),ZE=c.lazy(()=>Z(()=>import("./products-DWDaE2xd.js"),__vite__mapDeps([121,1,27,28,3,30,31,5,6,32,33,23,29,35,36,37,38,39,40,4,7,41,42,51,52,53,19,18,45,46,47,48,11,12]))),XE=c.lazy(()=>Z(()=>import("./product-categories-Bw-_CgFA.js"),__vite__mapDeps([122,1,28,4,5,6,7,8,50,35,51,52,53,46,54,55,56,48,45,47,11,12]))),e0=c.lazy(()=>Z(()=>import("./orders-DR0TZjMv.js"),__vite__mapDeps([123,1,27,28,3,4,5,6,7,8,23,58,29,36,37,38,39,40,41,31,42,32,35,25,24,124,47,19,105,11,12]))),t0=c.lazy(()=>Z(()=>import("./orders-detail-B7rTg3_o.js"),__vite__mapDeps([125,1,28,3,4,5,6,7,8,29,58,35,24,124,105,11,12]))),o0=c.lazy(()=>Z(()=>import("./payments-DKXF0WFU.js"),__vite__mapDeps([126,1,27,28,3,4,5,6,7,8,50,74,32,33,41,31,42,23,58,29,35,36,37,38,39,46,47,48,45,11,12]))),n0=c.lazy(()=>Z(()=>import("./payment-orders-BEqMRPhl.js"),__vite__mapDeps([127,1,27,28,3,4,5,6,7,8,23,58,29,36,37,38,39,105,11,12]))),a0=c.lazy(()=>Z(()=>import("./payment-transactions-Dw72SmYj.js"),__vite__mapDeps([128,1,27,3,23,29,36,37,38,39,11,12]))),s0=c.lazy(()=>Z(()=>import("./currencies-jD2_rWcM.js"),__vite__mapDeps([129,1,3,4,5,6,7,8,74,32,33,23,58,29,38,39,46,47,48,45,11,12]))),r0=c.lazy(()=>Z(()=>import("./redemption-codes-OT03R8w-.js"),__vite__mapDeps([130,1,27,28,3,4,5,6,7,8,23,58,41,31,42,32,29,74,33,131,132,111,36,37,38,39,66,124,45,11,12]))),i0=c.lazy(()=>Z(()=>import("./wallets-B57sUmFo.js"),__vite__mapDeps([133,1,27,28,3,4,5,6,7,8,23,58,41,31,42,32,29,132,111,36,37,38,39,105,11,12]))),l0=c.lazy(()=>Z(()=>import("./wallet-transactions-B6gZJlNU.js"),__vite__mapDeps([134,1,27,3,23,41,31,42,5,6,7,32,29,132,111,118,113,37,81,36,38,39,105,11,12]))),c0=c.lazy(()=>Z(()=>import("./product-comments-DwXWKHCa.js"),__vite__mapDeps([135,1,27,28,29,3,58,35,23,50,36,37,38,39,47,60,61,45,11,12]))),d0=c.lazy(()=>Z(()=>import("./coupons-BjX-Du0I.js"),__vite__mapDeps([136,1,27,28,29,3,4,5,6,7,8,58,35,23,36,37,38,39,46,47,48,45,11,12]))),u0=c.lazy(()=>Z(()=>import("./shipping-templates-CRVvV3vR.js"),__vite__mapDeps([137,1,27,28,29,3,4,5,6,7,8,50,58,35,23,36,37,38,39,46,47,48,45,11,12]))),p0=c.lazy(()=>Z(()=>import("./plans-DsKnqKJW.js"),__vite__mapDeps([138,1,3,4,5,6,7,8,74,32,33,23,58,29,38,39,46,47,48,45,11,12]))),m0=c.lazy(()=>Z(()=>import("./channels-CqH_2QfQ.js"),__vite__mapDeps([139,1,28,35,29,3,58,41,31,42,5,6,7,32,74,33,23,8,50,38,39,46,47,48,45,11,12]))),kd=c.lazy(()=>Z(()=>import("./channel-form-DT4ddSPj.js"),__vite__mapDeps([140,1,28,3,4,5,6,7,8,41,31,42,32,74,33,107,55,56,76,11,12]))),g0=c.lazy(()=>Z(()=>import("./receipts-DM9UK-TS.js"),__vite__mapDeps([141,1,27,29,3,4,5,6,7,41,31,42,32,23,38,39,36,37,19,11,12]))),f0=c.lazy(()=>Z(()=>import("./receipt-detail-BmJHOSiA.js"),__vite__mapDeps([142,1,28,35,29,3,105,61,11,12]))),h0=c.lazy(()=>Z(()=>import("./api-clients-DLQk1tBd.js"),__vite__mapDeps([143,1,28,35,29,3,58,4,5,6,7,8,41,31,42,32,74,33,23,17,50,38,39,46,47,48,43,45,11,12]))),b0=c.lazy(()=>Z(()=>import("./flows-BkPWResu.js"),__vite__mapDeps([144,1,28,74,5,6,32,33,7,3,8,50,23,58,29,35,145,38,146,36,37,94,147,4,41,31,42,105,66,39,46,47,48,115,19,45,148,11,12]))),wd=c.lazy(()=>Z(()=>import("./flows-editor-B19Qa7XC.js"),__vite__mapDeps([149,1,11,12,8,50,29,58,145,4,5,6,7,41,31,42,32,74,33,48,87,46,107,55,56,82,150,151,111,152,153,45,88,68,76,115,64,66,94]))),y0=c.lazy(()=>Z(()=>import("./instances-C3PiokYi.js"),__vite__mapDeps([154,1,27,3,29,41,31,42,5,6,7,32,23,58,145,38,146,36,37,94,147,28,4,8,50,74,33,105,66,39,11,12]))),k0=c.lazy(()=>Z(()=>import("./apis-Cgr_khWE.js"),__vite__mapDeps([155,1,28,74,5,6,32,33,7,58,29,3,23,35,38,39,36,37,48,66,93,45,94,11,12]))),w0=c.lazy(()=>Z(()=>import("./api-logs-Bdd-hSQR.js"),__vite__mapDeps([156,1,27,29,3,41,31,42,5,6,7,32,23,58,146,38,36,37,94,39,11,12]))),v0=c.lazy(()=>Z(()=>import("./triggers-j9cD105I.js"),__vite__mapDeps([157,1,28,27,29,3,4,5,6,7,8,50,41,31,42,32,23,58,35,38,39,46,93,45,11,12]))),C0=c.lazy(()=>Z(()=>import("./agents-BFqOyVx3.js"),__vite__mapDeps([158,1,27,28,29,3,23,36,37,35,38,39,69,68,46,47,48,159,45,11,12]))),T0=c.lazy(()=>Z(()=>import("./channels-BXujz4N7.js"),__vite__mapDeps([160,1,28,29,3,58,4,5,6,7,8,41,31,42,32,74,33,23,38,131,39,46,47,48,45,11,12]))),S0=c.lazy(()=>Z(()=>import("./models-0hYZqr9F.js"),__vite__mapDeps([161,1,28,29,3,58,4,5,6,7,8,41,31,42,32,74,33,23,38,131,39,151,111,46,47,48,45,11,12]))),D0=c.lazy(()=>Z(()=>import("./logs-CcDJH0L3.js"),__vite__mapDeps([162,1,22,29,3,4,5,6,7,17,41,31,42,32,23,38,118,113,37,81,111,39,36,27,11,12]))),A0=c.lazy(()=>Z(()=>import("./tokens-y9i6-pBk.js"),__vite__mapDeps([163,1,28,35,29,3,58,4,5,6,7,8,41,31,42,32,74,33,113,37,23,38,151,111,132,39,46,66,47,48,45,11,12]))),x0=c.lazy(()=>Z(()=>import("./playground-DxLFyk-r.js"),__vite__mapDeps([164,1,55,56,29,3,50,41,31,42,5,6,7,32,165,104,166,148,43,11,12]))),P0=c.lazy(()=>Z(()=>import("./kbs-CeO0Xzhn.js"),__vite__mapDeps([167,1,28,29,3,58,4,5,6,7,50,151,111,31,8,41,42,32,74,33,23,38,39,131,69,68,46,152,47,48,45,11,12]))),E0=c.lazy(()=>Z(()=>import("./docs-Cy4sieSw.js"),__vite__mapDeps([168,1,28,29,3,30,31,5,6,32,33,58,8,50,4,7,41,42,23,38,39,131,36,37,27,47,45,11,12]))),R0=c.lazy(()=>Z(()=>import("./chunks-C_53xzyV.js"),__vite__mapDeps([169,1,28,29,3,58,8,50,41,31,42,5,6,7,32,23,35,38,39,36,37,27,152,47,48,45,11,12]))),I0=c.lazy(()=>Z(()=>import("./images-CjPrpsFb.js"),__vite__mapDeps([170,1,29,3,58,41,31,42,5,6,7,32,23,38,39,36,37,27,47,150,11,12]))),F0=c.lazy(()=>Z(()=>import("./reader-CB6f3Czg.js"),__vite__mapDeps([171,1,29,3,4,5,6,7,55,56,27,37,11,12]))),M0=c.lazy(()=>Z(()=>import("./chunker-preview-CLCr-h2g.js"),__vite__mapDeps([172,1,29,3,8,50,11,12]))),O0=c.lazy(()=>Z(()=>import("./ask-playground-DvK63DT7.js"),__vite__mapDeps([173,1,55,56,29,3,50,8,74,5,6,32,33,7,41,31,42,58,148,43,11,12]))),N0=c.lazy(()=>Z(()=>import("./wiki-DlZPswgP.js"),__vite__mapDeps([174,1,28,27,29,3,30,31,5,6,32,33,58,41,42,7,23,38,39,36,37,11,12]))),j0=c.lazy(()=>Z(()=>import("./wiki-detail-BNy4Ei8Y.js"),__vite__mapDeps([175,1,28,29,3,17,5,50,11,12]))),L0=c.lazy(()=>Z(()=>import("./faqs-CCMFtwu5.js"),__vite__mapDeps([176,1,28,27,58,4,5,6,7,8,41,31,42,32,74,33,50,23,38,39,46,45,11,12]))),_0=c.lazy(()=>Z(()=>import("./gaps-CLumIROa.js"),__vite__mapDeps([177,1,28,29,23,38,39,11,12]))),U0=c.lazy(()=>Z(()=>import("./diagnostics-CkEVl_O4.js"),__vite__mapDeps([178,1,29,17,5,58,4,6,7,41,31,42,32,23,38,39,94,11,12]))),z0=c.lazy(()=>Z(()=>import("./search-test-Dr64VOSK.js"),__vite__mapDeps([179,1,29,3,4,5,6,7,41,31,42,32,23,38,39,11,12]))),B0=c.lazy(()=>Z(()=>import("./engines-BgDeXEmX.js"),__vite__mapDeps([180,1,28,29,3,58,4,5,6,7,8,74,32,33,23,38,39,47,48,11,12]))),V0=c.lazy(()=>Z(()=>import("./tokens-BSw8mmxr.js"),__vite__mapDeps([181,1,28,35,3,58,4,5,6,7,8,74,32,33,23,38,39,132,111,31,46,66,47,45,11,12]))),H0=c.lazy(()=>Z(()=>import("./convert-C9hr-qBt.js"),__vite__mapDeps([182,1,28,29,3,4,5,6,7,8,41,31,42,32,74,33,55,56,11,12]))),q0=c.lazy(()=>Z(()=>import("./recognize-C48Y6klC.js"),__vite__mapDeps([183,1,28,29,3,4,5,6,7,8,11,12]))),W0=c.lazy(()=>Z(()=>import("./usage-CYDWwcOq.js"),__vite__mapDeps([184,1,29,3,41,31,42,5,6,7,32,23,38,39,94,11,12]))),vd=c.lazy(()=>Z(()=>import("./agents-form-DgaR2FtU.js"),__vite__mapDeps([185,1,28,3,4,5,6,7,50,8,74,32,33,29,30,31,41,42,107,55,56,151,111,186,46,11,12]))),K0=c.lazy(()=>Z(()=>import("./agents-usage-BEdf7HGj.js"),__vite__mapDeps([187,1,22,3,17,5,11,12]))),$0=c.lazy(()=>Z(()=>import("./agents-memories-eXA5RphD.js"),__vite__mapDeps([188,1,28,29,3,4,5,6,7,50,8,74,32,33,23,38,39,41,31,42,58,35,46,159,48,45,11,12]))),G0=c.lazy(()=>Z(()=>import("./skills-BRNsXRnl.js"),__vite__mapDeps([189,1,28,29,3,4,5,6,7,50,8,74,32,33,23,38,39,107,55,56,58,35,41,31,42,46,15,48,45,11,12]))),J0=c.lazy(()=>Z(()=>import("./tools-CsXl2KMt.js"),__vite__mapDeps([190,1,29,3,17,5,23,38,39,186,11,12]))),Q0=c.lazy(()=>Z(()=>import("./sessions-2-u2IziX.js"),__vite__mapDeps([191,1,27,28,29,3,23,38,39,36,37,41,31,42,5,6,7,32,58,35,192,165,15,19,45,11,12]))),Y0=c.lazy(()=>Z(()=>import("./debates-0wJDZ15Y.js"),__vite__mapDeps([193,1,29,3,23,38,39,36,37,58,41,31,42,5,6,7,32,4,8,50,46,19,124,11,12]))),Z0=c.lazy(()=>Z(()=>import("./playground-1jmHyu1V.js"),__vite__mapDeps([194,1,28,3,50,35,192,29,165,15,41,31,42,5,6,7,32,46,45,166,148,43,11,12]))),X0=c.lazy(()=>Z(()=>import("./posts-new-BbDIW33u.js"),__vite__mapDeps([195,1,2,28,3,4,5,6,7,8,50,85,55,56,58,63,34,44,64,53,31,79,86,69,37,65,87,51,52,196,46,41,42,32,11,12]))),eR=c.lazy(()=>Z(()=>import("./posts-edit-mbIgHcpX.js"),__vite__mapDeps([197,1,2,28,3,4,5,6,7,8,50,78,31,15,85,55,56,58,63,34,44,64,53,79,86,69,37,65,87,51,52,196,46,41,42,32,11,12]))),tR=c.lazy(()=>Z(()=>import("./pages-new-Dhju0Z8y.js"),__vite__mapDeps([198,1,28,3,4,5,6,7,8,50,71,34,199,87,42,46,45,11,12]))),oR=c.lazy(()=>Z(()=>import("./pages-edit-BgJkx370.js"),__vite__mapDeps([200,1,28,3,4,5,6,7,8,50,71,34,199,87,42,46,45,78,31,15,11,12]))),Cd=c.lazy(()=>Z(()=>import("./content-types-new-CgPM-paM.js"),__vite__mapDeps([201,1,28,3,29,8,41,31,42,5,6,7,32,34,84,4,50,85,55,56,58,63,44,64,53,79,86,69,37,65,87,88,89,67,11,12]))),Td=c.lazy(()=>Z(()=>import("./content-types-edit-Cu-qOSWt.js"),__vite__mapDeps([202,1,28,3,29,8,41,31,42,5,6,7,32,34,84,4,50,85,55,56,58,63,44,64,53,79,86,69,37,65,87,88,89,67,11,12]))),nR=c.lazy(()=>Z(()=>import("./workflow-editor-CPbyp8L4.js"),__vite__mapDeps([203,1,11,12,4,5,6,7,8,50,41,31,42,32,153,48,46,76,45]))),aR=c.lazy(()=>Z(()=>import("./products-new-CyxlEwtO.js"),__vite__mapDeps([204,1,28,3,4,5,6,7,8,50,74,32,33,85,55,56,58,63,34,44,64,53,31,79,86,69,37,65,87,51,52,196,46,78,15,11,12]))),sR=c.lazy(()=>Z(()=>import("./products-edit-C458gnKq.js"),__vite__mapDeps([205,1,28,3,4,5,6,7,8,50,85,55,56,58,63,34,44,64,53,31,79,86,69,37,65,87,51,52,196,46,29,23,35,78,15,48,45,11,12]))),rR=c.lazy(()=>Z(()=>import("./product-categories-new-7fWq_zks.js"),__vite__mapDeps([206,1,28,3,4,5,6,7,8,50,78,31,15,11,12]))),iR=c.lazy(()=>Z(()=>import("./product-categories-edit-Dd4nUqzD.js"),__vite__mapDeps([207,1,28,3,4,5,6,7,8,50,78,31,15,11,12]))),lR=c.lazy(()=>Z(()=>import("./profile-m1PoAMjQ.js"),__vite__mapDeps([208,1,28,3,4,5,6,7,8,50,18,19,11,12]))),J=({children:t})=>l.jsx(c.Suspense,{fallback:l.jsx("div",{className:"flex min-h-[40vh] items-center justify-center",children:l.jsx("div",{className:"size-6 animate-spin rounded-full border-2 border-muted border-t-transparent"})}),children:t});function cR(){return l.jsx(xD,{children:l.jsx(Wm,{children:l.jsxs(Lg,{children:[l.jsx(K,{path:"/auth/login",element:l.jsx(J,{children:l.jsx(vE,{})})}),l.jsx(K,{path:"/auth/user-login",element:l.jsx(J,{children:l.jsx(wE,{})})}),l.jsx(K,{path:"/auth/register",element:l.jsx(J,{children:l.jsx(TE,{})})}),l.jsx(K,{path:"/setup",element:l.jsx(J,{children:l.jsx(CE,{})})}),l.jsxs(K,{element:l.jsx(kE,{}),children:[l.jsx(K,{index:!0,element:l.jsx(Ir,{to:"dashboard",replace:!0})}),l.jsx(K,{path:"dashboard",element:l.jsx(J,{children:l.jsx(SE,{})})}),l.jsx(K,{path:"posts",element:l.jsx(J,{children:l.jsx(DE,{})})}),l.jsx(K,{path:"posts/new",element:l.jsx(J,{children:l.jsx(X0,{})})}),l.jsx(K,{path:"posts/:id/edit",element:l.jsx(J,{children:l.jsx(eR,{})})}),l.jsx(K,{path:"categories",element:l.jsx(J,{children:l.jsx(AE,{})})}),l.jsx(K,{path:"tags",element:l.jsx(J,{children:l.jsx(xE,{})})}),l.jsx(K,{path:"comments",element:l.jsx(J,{children:l.jsx(PE,{})})}),l.jsx(K,{path:"media",element:l.jsx(J,{children:l.jsx(EE,{})})}),l.jsx(K,{path:"pages",element:l.jsx(J,{children:l.jsx(RE,{})})}),l.jsx(K,{path:"pages/new",element:l.jsx(J,{children:l.jsx(tR,{})})}),l.jsx(K,{path:"pages/:id/edit",element:l.jsx(J,{children:l.jsx(oR,{})})}),l.jsx(K,{path:"content-types",element:l.jsx(J,{children:l.jsx(IE,{})})}),l.jsx(K,{path:"content-types/builder",element:l.jsx(J,{children:l.jsx(FE,{})})}),l.jsx(K,{path:"content-types/:ctPath",element:l.jsx(J,{children:l.jsx(bd,{})})}),l.jsx(K,{path:"content-types/:ctPath/new",element:l.jsx(J,{children:l.jsx(Cd,{})})}),l.jsx(K,{path:"content-types/:ctPath/:id/edit",element:l.jsx(J,{children:l.jsx(Td,{})})}),l.jsx(K,{path:"content-types/:group/:singular",element:l.jsx(J,{children:l.jsx(bd,{})})}),l.jsx(K,{path:"content-types/:group/:singular/new",element:l.jsx(J,{children:l.jsx(Cd,{})})}),l.jsx(K,{path:"content-types/:group/:singular/:id/edit",element:l.jsx(J,{children:l.jsx(Td,{})})}),l.jsx(K,{path:"users",element:l.jsx(J,{children:l.jsx(ME,{})})}),l.jsx(K,{path:"users/:id",element:l.jsx(J,{children:l.jsx(OE,{})})}),l.jsx(K,{path:"plugins",element:l.jsx(J,{children:l.jsx(NE,{})})}),l.jsx(K,{path:"plugins/:id",element:l.jsx(J,{children:l.jsx(jE,{})})}),l.jsx(K,{path:"apps",element:l.jsx(J,{children:l.jsx(LE,{})})}),l.jsx(K,{path:"apps/install",element:l.jsx(J,{children:l.jsx(_E,{})})}),l.jsx(K,{path:"apps/:appId",element:l.jsx(J,{children:l.jsx(UE,{})})}),l.jsx(K,{path:"rbac",element:l.jsx(J,{children:l.jsx(zE,{})})}),l.jsx(K,{path:"kb",element:l.jsx(J,{children:l.jsx(P0,{})})}),l.jsx(K,{path:"kb/docs",element:l.jsx(J,{children:l.jsx(E0,{})})}),l.jsx(K,{path:"kb/chunks",element:l.jsx(J,{children:l.jsx(R0,{})})}),l.jsx(K,{path:"kb/images",element:l.jsx(J,{children:l.jsx(I0,{})})}),l.jsx(K,{path:"kb/reader",element:l.jsx(J,{children:l.jsx(F0,{})})}),l.jsx(K,{path:"kb/chunker-preview",element:l.jsx(J,{children:l.jsx(M0,{})})}),l.jsx(K,{path:"kb/playground",element:l.jsx(J,{children:l.jsx(O0,{})})}),l.jsx(K,{path:"kb/wiki",element:l.jsx(J,{children:l.jsx(N0,{})})}),l.jsx(K,{path:"kb/wiki/:id",element:l.jsx(J,{children:l.jsx(j0,{})})}),l.jsx(K,{path:"kb/faqs",element:l.jsx(J,{children:l.jsx(L0,{})})}),l.jsx(K,{path:"kb/gaps",element:l.jsx(J,{children:l.jsx(_0,{})})}),l.jsx(K,{path:"kb/diagnostics",element:l.jsx(J,{children:l.jsx(U0,{})})}),l.jsx(K,{path:"kb/search-test",element:l.jsx(J,{children:l.jsx(z0,{})})}),l.jsx(K,{path:"docparse",element:l.jsx(J,{children:l.jsx(B0,{})})}),l.jsx(K,{path:"docparse/tokens",element:l.jsx(J,{children:l.jsx(V0,{})})}),l.jsx(K,{path:"docparse/convert",element:l.jsx(J,{children:l.jsx(H0,{})})}),l.jsx(K,{path:"docparse/recognize",element:l.jsx(J,{children:l.jsx(q0,{})})}),l.jsx(K,{path:"docparse/usage",element:l.jsx(J,{children:l.jsx(W0,{})})}),l.jsx(K,{path:"crons",element:l.jsx(J,{children:l.jsx(BE,{})})}),l.jsx(K,{path:"crons/new",element:l.jsx(J,{children:l.jsx(yd,{})})}),l.jsx(K,{path:"crons/:id/edit",element:l.jsx(J,{children:l.jsx(yd,{})})}),l.jsx(K,{path:"crons/:id",element:l.jsx(J,{children:l.jsx(HE,{})})}),l.jsx(K,{path:"jobs",element:l.jsx(J,{children:l.jsx(VE,{})})}),l.jsx(K,{path:"tenants",element:l.jsx(J,{children:l.jsx(qE,{})})}),l.jsx(K,{path:"webhooks",element:l.jsx(J,{children:l.jsx(WE,{})})}),l.jsx(K,{path:"tokens",element:l.jsx(J,{children:l.jsx(KE,{})})}),l.jsx(K,{path:"workflows",element:l.jsx(J,{children:l.jsx($E,{})})}),l.jsx(K,{path:"workflows/editor",element:l.jsx(J,{children:l.jsx(nR,{})})}),l.jsx(K,{path:"workflows/instances",element:l.jsx(J,{children:l.jsx(GE,{})})}),l.jsx(K,{path:"audit",element:l.jsx(J,{children:l.jsx(JE,{})})}),l.jsx(K,{path:"options",element:l.jsx(J,{children:l.jsx(QE,{})})}),l.jsx(K,{path:"reusable-blocks",element:l.jsx(J,{children:l.jsx(YE,{})})}),l.jsx(K,{path:"products",element:l.jsx(J,{children:l.jsx(ZE,{})})}),l.jsx(K,{path:"products/new",element:l.jsx(J,{children:l.jsx(aR,{})})}),l.jsx(K,{path:"products/:id/edit",element:l.jsx(J,{children:l.jsx(sR,{})})}),l.jsx(K,{path:"product-categories",element:l.jsx(J,{children:l.jsx(XE,{})})}),l.jsx(K,{path:"product-categories/new",element:l.jsx(J,{children:l.jsx(rR,{})})}),l.jsx(K,{path:"product-categories/:id/edit",element:l.jsx(J,{children:l.jsx(iR,{})})}),l.jsx(K,{path:"orders",element:l.jsx(J,{children:l.jsx(e0,{})})}),l.jsx(K,{path:"orders/:id",element:l.jsx(J,{children:l.jsx(t0,{})})}),l.jsx(K,{path:"payments",element:l.jsx(J,{children:l.jsx(o0,{})})}),l.jsx(K,{path:"payment-orders",element:l.jsx(J,{children:l.jsx(n0,{})})}),l.jsx(K,{path:"payment-transactions",element:l.jsx(J,{children:l.jsx(a0,{})})}),l.jsx(K,{path:"currencies",element:l.jsx(J,{children:l.jsx(s0,{})})}),l.jsx(K,{path:"redemption-codes",element:l.jsx(J,{children:l.jsx(r0,{})})}),l.jsx(K,{path:"wallets",element:l.jsx(J,{children:l.jsx(i0,{})})}),l.jsx(K,{path:"wallet-transactions",element:l.jsx(J,{children:l.jsx(l0,{})})}),l.jsx(K,{path:"product-comments",element:l.jsx(J,{children:l.jsx(c0,{})})}),l.jsx(K,{path:"coupons",element:l.jsx(J,{children:l.jsx(d0,{})})}),l.jsx(K,{path:"shipping-templates",element:l.jsx(J,{children:l.jsx(u0,{})})}),l.jsx(K,{path:"plans",element:l.jsx(J,{children:l.jsx(p0,{})})}),l.jsx(K,{path:"channels",element:l.jsx(J,{children:l.jsx(m0,{})})}),l.jsx(K,{path:"channels/new",element:l.jsx(J,{children:l.jsx(kd,{})})}),l.jsx(K,{path:"channels/:id/edit",element:l.jsx(J,{children:l.jsx(kd,{})})}),l.jsx(K,{path:"receipts",element:l.jsx(J,{children:l.jsx(g0,{})})}),l.jsx(K,{path:"receipts/:id",element:l.jsx(J,{children:l.jsx(f0,{})})}),l.jsx(K,{path:"api-clients",element:l.jsx(J,{children:l.jsx(h0,{})})}),l.jsx(K,{path:"flows",element:l.jsx(J,{children:l.jsx(b0,{})})}),l.jsx(K,{path:"flows/editor",element:l.jsx(J,{children:l.jsx(wd,{})})}),l.jsx(K,{path:"flows/instances",element:l.jsx(J,{children:l.jsx(y0,{})})}),l.jsx(K,{path:"flows/apis",element:l.jsx(J,{children:l.jsx(k0,{})})}),l.jsx(K,{path:"flows/apis/logs",element:l.jsx(J,{children:l.jsx(w0,{})})}),l.jsx(K,{path:"flows/triggers",element:l.jsx(J,{children:l.jsx(v0,{})})}),l.jsx(K,{path:"flows/:id/editor",element:l.jsx(J,{children:l.jsx(wd,{})})}),l.jsx(K,{path:"llm/channels",element:l.jsx(J,{children:l.jsx(T0,{})})}),l.jsx(K,{path:"llm/models",element:l.jsx(J,{children:l.jsx(S0,{})})}),l.jsx(K,{path:"llm/logs",element:l.jsx(J,{children:l.jsx(D0,{})})}),l.jsx(K,{path:"llm/tokens",element:l.jsx(J,{children:l.jsx(A0,{})})}),l.jsx(K,{path:"llm/playground",element:l.jsx(J,{children:l.jsx(x0,{})})}),l.jsx(K,{path:"ai/agents",element:l.jsx(J,{children:l.jsx(C0,{})})}),l.jsx(K,{path:"ai/agents/new",element:l.jsx(J,{children:l.jsx(vd,{})})}),l.jsx(K,{path:"ai/agents/:id/edit",element:l.jsx(J,{children:l.jsx(vd,{})})}),l.jsx(K,{path:"ai/agents/:id/usage",element:l.jsx(J,{children:l.jsx(K0,{})})}),l.jsx(K,{path:"ai/agents/:id/memories",element:l.jsx(J,{children:l.jsx($0,{})})}),l.jsx(K,{path:"ai/skills",element:l.jsx(J,{children:l.jsx(G0,{})})}),l.jsx(K,{path:"ai/tools",element:l.jsx(J,{children:l.jsx(J0,{})})}),l.jsx(K,{path:"ai/sessions",element:l.jsx(J,{children:l.jsx(Q0,{})})}),l.jsx(K,{path:"ai/debates",element:l.jsx(J,{children:l.jsx(Y0,{})})}),l.jsx(K,{path:"ai/playground",element:l.jsx(J,{children:l.jsx(Z0,{})})}),l.jsx(K,{path:"profile",element:l.jsx(J,{children:l.jsx(lR,{})})})]}),l.jsx(K,{path:"*",element:l.jsx(Ir,{to:"/dashboard",replace:!0})})]})})})}_g.createRoot(document.getElementById("root")).render(l.jsx(oe.StrictMode,{children:l.jsx(Ug,{basename:"/admin",children:l.jsx(cR,{})})}));export{ei as $,Zs as A,Ci as B,rp as C,wD as D,Sn as E,vD as F,TD as G,$A as H,PD as I,ou as J,Wh as K,Jk as L,LD as M,_D as N,UD as O,ZD as P,XD as Q,uA as R,pA as S,Ol as T,Ys as U,gi as V,ER as W,AR as X,PR as Y,xR as Z,Nl as _,Qm as a,tm as a$,Je as a0,Al as a1,$h as a2,Qn as a3,Ss as a4,Yi as a5,$i as a6,nu as a7,sb as a8,au as a9,MP as aA,Di as aB,Ub as aC,Bb as aD,Dt as aE,Hb as aF,Wb as aG,$b as aH,Ai as aI,mu as aJ,ND as aK,xi as aL,hA as aM,kA as aN,CA as aO,DR as aP,wA as aQ,vA as aR,gu as aS,fu as aT,Er as aU,ny as aV,Zw as aW,Ta as aX,hu as aY,Pi as aZ,uy as a_,Dl as aa,HD as ab,wR as ac,lb as ad,Si as ae,zA as af,Pl as ag,Ds as ah,xP as ai,su as aj,Sl as ak,cu as al,CR as am,uu as an,Eb as ao,pu as ap,Ni as aq,Ob as ar,jb as as,HP as at,WP as au,VP as av,NP as aw,LP as ax,RP as ay,qP as az,WD as b,lt as b$,nm as b0,em as b1,om as b2,fa as b3,my as b4,fy as b5,bu as b6,qD as b7,vR as b8,yu as b9,ln as bA,st as bB,mf as bC,Ws as bD,Xr as bE,wk as bF,vk as bG,yk as bH,pc as bI,rr as bJ,nx as bK,ht as bL,Xe as bM,ca as bN,gl as bO,fR as bP,Ie as bQ,ms as bR,Pn as bS,TR as bT,Ru as bU,Du as bV,ju as bW,St as bX,gR as bY,Nu as bZ,wt as b_,vy as ba,ku as bb,Ei as bc,Dy as bd,wu as be,Py as bf,Z as bg,vt as bh,Me as bi,FD as bj,Qy as bk,Ct as bl,Fe as bm,Se as bn,Oe as bo,kk as bp,ie as bq,le as br,qm as bs,Yy as bt,OR as bu,IR as bv,FR as bw,RR as bx,NR as by,ft as bz,Ym as c,ji as c0,Le as c1,Ew as c2,gn as c3,ii as c4,ps as c5,SR as c6,Mr as c7,Tp as c8,_d as c9,sa as cA,Kd as cB,Ot as cC,MD as cD,dA as cE,tt as cF,am as cG,yR as cH,Ae as cI,Sp as cJ,pt as cK,bt as cL,ug as cM,ev as cN,nl as cO,pv as cP,at as cQ,gA as cR,lk as cS,bR as cT,hR as cU,vi as cV,mR as ca,Ea as cb,dl as cc,MR as cd,pl as ce,mg as cf,ma as cg,Qo as ch,fn as ci,Oa as cj,Zi as ck,ax as cl,Fl as cm,yn as cn,jp as co,Os as cp,sv as cq,un as cr,he as cs,uv as ct,Kn as cu,As as cv,Ra as cw,fA as cx,eg as cy,ml as cz,Zm as d,Jm as e,yh as f,vh as g,sc as h,Qd as i,Dh as j,Yd as k,Ti as l,Zd as m,Gn as n,xl as o,Ih as p,Mh as q,Xd as r,jh as s,_h as t,eu as u,tu as v,Vh as w,yD as x,CD as y,na as z}; diff --git a/adminui/assets/index-C7qUBUk8.css b/adminui/assets/index-C7qUBUk8.css new file mode 100644 index 00000000..04485c26 --- /dev/null +++ b/adminui/assets/index-C7qUBUk8.css @@ -0,0 +1 @@ +/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){:root,:host{--shimmer-angle:20deg}*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--scroll-fade-t:0px;--scroll-fade-b:0px;--scroll-fade-s:0px;--scroll-fade-e:0px;--scroll-fade-mask:initial;--shimmer-image:initial;--shimmer-text-fill:initial}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-950:oklch(28.6% .066 53.813);--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-900:oklch(39.8% .07 227.392);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-50:oklch(96.2% .018 272.314);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-900:oklch(38% .189 293.745);--color-purple-700:oklch(49.6% .265 301.924);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-pink-700:oklch(52.5% .223 3.958);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:calc(var(--radius) * .8);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-xs:4px;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-geist-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}html{font-family:var(--font-sans);font-size:14px}html.dark{color-scheme:dark}[data-slot=sidebar-inner]{background:#fbf3ef!important}.dark [data-slot=sidebar-inner]{background:#1c0000!important}@keyframes page-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#808080cc;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#808080b3}.dark ::-webkit-scrollbar-thumb{background:#c8c8c84d}.dark ::-webkit-scrollbar-thumb:hover{background:#c8c8c880}@keyframes nprogress-loading{0%{width:0}50%{width:70%}to{width:100%}}#nprogress-bar{z-index:99999;pointer-events:none;width:100%;height:2px;position:fixed;top:0;left:0}#nprogress-bar .bar{background:#cc2a1b;height:100%;animation:.3s ease-out forwards nprogress-loading}.dark #nprogress-bar .bar{background:#f13b29}.metal-perforation{background-color:#eee6e4;background-image:radial-gradient(2px at 5px 4px,#d1c0bc 1.5px,#0000 2px),radial-gradient(3px at 4px 3px,#ffffffb3 1.5px,#0000 3px),radial-gradient(2px at 15px 14px,#d1c0bc 1.5px,#0000 2px),radial-gradient(3px at 14px 13px,#ffffffb3 1.5px,#0000 3px);background-position:0 0,0 0,10px 10px,10px 10px;background-size:20px 20px}.dark .metal-perforation{background-color:#100605;background-image:radial-gradient(2px at 5px 4px,#020000 1.5px,#0000 2px),radial-gradient(3px at 6px 5px,#ffffff1a 1.5px,#0000 3px),radial-gradient(2px at 15px 14px,#020000 1.5px,#0000 2px),radial-gradient(3px at 16px 15px,#ffffff1a 1.5px,#0000 3px)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start-2{inset-inline-start:calc(var(--spacing) * 2)}.start-2\.5{inset-inline-start:calc(var(--spacing) * 2.5)}.-end-0\.5{inset-inline-end:calc(var(--spacing) * -.5)}.end-1{inset-inline-end:calc(var(--spacing) * 1)}.end-2{inset-inline-end:calc(var(--spacing) * 2)}.end-2\.5{inset-inline-end:calc(var(--spacing) * 2.5)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-3\.5{top:calc(var(--spacing) * 3.5)}.top-4{top:calc(var(--spacing) * 4)}.top-14{top:calc(var(--spacing) * 14)}.\!right-\[10px\]{right:10px!important}.\!right-\[336px\]{right:336px!important}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.\!bottom-\[3\.6rem\]{bottom:3.6rem!important}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-0{left:calc(var(--spacing) * 0)}.left-1{left:calc(var(--spacing) * 1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.left-4{left:calc(var(--spacing) * 4)}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.order-first{order:-9999}.order-last{order:9999}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.container\!{width:100%!important}@media(min-width:40rem){.container\!{max-width:40rem!important}}@media(min-width:48rem){.container\!{max-width:48rem!important}}@media(min-width:64rem){.container\!{max-width:64rem!important}}@media(min-width:80rem){.container\!{max-width:80rem!important}}@media(min-width:96rem){.container\!{max-width:96rem!important}}.-m-6{margin:calc(var(--spacing) * -6)}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3\.5{margin-inline:calc(var(--spacing) * 3.5)}.mx-6{margin-inline:calc(var(--spacing) * 6)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.ms-0\.5{margin-inline-start:calc(var(--spacing) * .5)}.ms-1{margin-inline-start:calc(var(--spacing) * 1)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.ms-\[7px\]{margin-inline-start:7px}.ms-auto{margin-inline-start:auto}.me-1{margin-inline-end:calc(var(--spacing) * 1)}.me-2{margin-inline-end:calc(var(--spacing) * 2)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-\[-1px\]{margin-right:-1px}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.field-sizing-content{field-sizing:content}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.size-\(--cell-size\){width:var(--cell-size);height:var(--cell-size)}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-24{width:calc(var(--spacing) * 24);height:calc(var(--spacing) * 24)}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.\!h-2\.5{height:calc(var(--spacing) * 2.5)!important}.h-\(--cell-size\){height:var(--cell-size)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-36{height:calc(var(--spacing) * 36)}.h-40{height:calc(var(--spacing) * 40)}.h-48{height:calc(var(--spacing) * 48)}.h-52{height:calc(var(--spacing) * 52)}.h-64{height:calc(var(--spacing) * 64)}.h-\[85vh\]{height:85vh}.h-\[88px\]{height:88px}.h-\[260px\]{height:260px}.h-\[300px\]{height:300px}.h-\[400px\]{height:400px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(100vh-6rem\)\]{height:calc(100vh - 6rem)}.h-\[calc\(100vh-8rem\)\]{height:calc(100vh - 8rem)}.h-\[calc\(100vh-10rem\)\]{height:calc(100vh - 10rem)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-\(--available-height\){max-height:var(--available-height)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[32rem\]{max-height:32rem}.max-h-\[65vh\]{max-height:65vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[200px\]{max-height:200px}.max-h-\[380px\]{max-height:380px}.max-h-\[400px\]{max-height:400px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[40vh\]{min-height:40vh}.min-h-\[50vh\]{min-height:50vh}.min-h-\[64px\]{min-height:64px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.\!w-2\.5{width:calc(var(--spacing) * 2.5)!important}.w-\(--anchor-width\){width:var(--anchor-width)}.w-\(--cell-size\){width:var(--cell-size)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-1\/3{width:33.3333%}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-2\/3{width:66.6667%}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[4\.5rem\]{width:4.5rem}.w-\[140px\]{width:140px}.w-\[150px\]{width:150px}.w-\[160px\]{width:160px}.w-\[220px\]{width:220px}.w-\[360px\]{width:360px}.w-\[400px\]{width:400px}.w-\[680px\]{width:680px}.w-\[min\(92vw\,1400px\)\]{width:min(92vw,1400px)}.w-\[min\(1080px\,calc\(100vw-2rem\)\)\]{width:min(1080px,100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-60{max-width:calc(var(--spacing) * 60)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-96{max-width:calc(var(--spacing) * 96)}.max-w-\[28rem\]{max-width:28rem}.max-w-\[50\%\]{max-width:50%}.max-w-\[80\%\]{max-width:80%}.max-w-\[80px\]{max-width:80px}.max-w-\[90vw\]{max-width:90vw}.max-w-\[120px\]{max-width:120px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[320px\]{max-width:320px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-\(--cell-size\){min-width:var(--cell-size)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-28{min-width:calc(var(--spacing) * 28)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-72{min-width:calc(var(--spacing) * 72)}.min-w-\[96px\]{min-width:96px}.min-w-\[100px\]{min-width:100px}.min-w-\[140px\]{min-width:140px}.min-w-\[160px\]{min-width:160px}.min-w-\[280px\]{min-width:280px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--transform-origin\){transform-origin:var(--transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-16{--tw-translate-x:calc(var(--spacing) * -16);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-16{--tw-translate-x:calc(var(--spacing) * 16);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-3\/4{--tw-translate-y: -75% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-3\/4{--tw-translate-y: 75% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[calc\(-50\%-2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-none{translate:none}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-3d{scale:var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[page-fade-in_200ms_ease-out\]{animation:.2s ease-out page-fade-in}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.resize\!{resize:both!important}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-block:calc(var(--spacing) * 1)}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[4rem_1fr\]{grid-template-columns:4rem 1fr}.grid-cols-\[7rem_1fr\]{grid-template-columns:7rem 1fr}.grid-cols-\[96px_1fr_2fr\]{grid-template-columns:96px 1fr 2fr}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.grid-rows-\[auto_1fr\]{grid-template-rows:auto 1fr}.grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.grid-rows-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-rows:auto minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.\!gap-0{gap:calc(var(--spacing) * 0)!important}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -2) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-1{row-gap:calc(var(--spacing) * 1)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-\(--cell-radius\){border-radius:var(--cell-radius)}.rounded-4xl{border-radius:calc(var(--radius) * 2.6)}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[calc\(var\(--radius\)-3px\)\]{border-radius:calc(var(--radius) - 3px)}.rounded-\[min\(var\(--radius-md\)\,10px\)\]{border-radius:min(var(--radius-md),10px)}.rounded-\[min\(var\(--radius-md\)\,12px\)\]{border-radius:min(var(--radius-md),12px)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) * .6)}.rounded-xl{border-radius:calc(var(--radius) * 1.4)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-xl{border-top-left-radius:calc(var(--radius) * 1.4);border-top-right-radius:calc(var(--radius) * 1.4)}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-\(--cell-radius\){border-top-left-radius:var(--cell-radius);border-bottom-left-radius:var(--cell-radius)}.rounded-l-lg{border-top-left-radius:var(--radius);border-bottom-left-radius:var(--radius)}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-\(--cell-radius\){border-top-right-radius:var(--cell-radius);border-bottom-right-radius:var(--cell-radius)}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-xl{border-bottom-right-radius:calc(var(--radius) * 1.4);border-bottom-left-radius:calc(var(--radius) * 1.4)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-3{border-style:var(--tw-border-style);border-width:3px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-bs{border-block-start-style:var(--tw-border-style);border-block-start-width:1px}.border-be{border-block-end-style:var(--tw-border-style);border-block-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.\!border-l-4{border-left-style:var(--tw-border-style)!important;border-left-width:4px!important}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500) 40%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-border,.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,var(--border) 60%,transparent)}}.border-destructive\/30{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/30{border-color:color-mix(in oklab,var(--destructive) 30%,transparent)}}.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/40{border-color:color-mix(in oklab,var(--destructive) 40%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-green-200{border-color:var(--color-green-200)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-muted-foreground\/25{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.border-muted-foreground\/25{border-color:color-mix(in oklab,var(--muted-foreground) 25%,transparent)}}.border-orange-200{border-color:var(--color-orange-200)}.border-primary,.border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/40{border-color:color-mix(in oklab,var(--primary) 40%,transparent)}}.border-primary\/50{border-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/50{border-color:color-mix(in oklab,var(--primary) 50%,transparent)}}.border-red-500{border-color:var(--color-red-500)}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-sidebar-border{border-color:var(--sidebar-border)}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/30{border-color:color-mix(in oklab,var(--color-sky-500) 30%,transparent)}}.border-transparent{border-color:#0000}.border-yellow-300{border-color:var(--color-yellow-300)}.border-yellow-500\/50{border-color:#edb20080}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/50{border-color:color-mix(in oklab,var(--color-yellow-500) 50%,transparent)}}.border-t-primary{border-top-color:var(--primary)}.border-t-transparent{border-top-color:#0000}.\!border-l-primary{border-left-color:var(--primary)!important}.\!bg-gray-400{background-color:var(--color-gray-400)!important}.\!bg-rose-500{background-color:var(--color-rose-500)!important}.\!bg-slate-400{background-color:var(--color-slate-400)!important}.\!bg-violet-400{background-color:var(--color-violet-400)!important}.bg-\[oklch\(0\.55_0\.20_30\)\]{background-color:#cc2a1b}.bg-accent{background-color:var(--accent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400\/25{background-color:#fcbb0040}@supports (color:color-mix(in lab,red,red)){.bg-amber-400\/25{background-color:color-mix(in oklab,var(--color-amber-400) 25%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-background,.bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/60{background-color:color-mix(in oklab,var(--background) 60%,transparent)}}.bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--background) 80%,transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,var(--background) 95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-black\/0{background-color:color-mix(in oklab,var(--color-black) 0%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/85{background-color:#000000d9}@supports (color:color-mix(in lab,red,red)){.bg-black\/85{background-color:color-mix(in oklab,var(--color-black) 85%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black) 90%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-400\/25{background-color:#54a2ff40}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/25{background-color:color-mix(in oklab,var(--color-blue-400) 25%,transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\/80{background-color:var(--card)}@supports (color:color-mix(in lab,red,red)){.bg-card\/80{background-color:color-mix(in oklab,var(--card) 80%,transparent)}}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-cyan-400\/25{background-color:#00d2ef40}@supports (color:color-mix(in lab,red,red)){.bg-cyan-400\/25{background-color:color-mix(in oklab,var(--color-cyan-400) 25%,transparent)}}.bg-destructive{background-color:var(--destructive)}.bg-destructive\!{background-color:var(--destructive)!important}.bg-destructive\/5{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/5{background-color:color-mix(in oklab,var(--destructive) 5%,transparent)}}.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-400\/25{background-color:#00d29440}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/25{background-color:color-mix(in oklab,var(--color-emerald-400) 25%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-input{background-color:var(--input)}.bg-muted,.bg-muted\/20{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,var(--muted) 20%,transparent)}}.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted) 30%,transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--muted) 40%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted) 60%,transparent)}}.bg-muted\/70{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/70{background-color:color-mix(in oklab,var(--muted) 70%,transparent)}}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-50\/60{background-color:#fff7ed99}@supports (color:color-mix(in lab,red,red)){.bg-orange-50\/60{background-color:color-mix(in oklab,var(--color-orange-50) 60%,transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/5{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--primary) 5%,transparent)}}.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary) 10%,transparent)}}.bg-primary\/25{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/25{background-color:color-mix(in oklab,var(--primary) 25%,transparent)}}.bg-primary\/30{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/30{background-color:color-mix(in oklab,var(--primary) 30%,transparent)}}.bg-primary\/80{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/80{background-color:color-mix(in oklab,var(--primary) 80%,transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-rose-400\/25{background-color:#ff667f40}@supports (color:color-mix(in lab,red,red)){.bg-rose-400\/25{background-color:color-mix(in oklab,var(--color-rose-400) 25%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/10{background-color:color-mix(in oklab,var(--color-sky-500) 10%,transparent)}}.bg-teal-50{background-color:var(--color-teal-50)}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-violet-400\/25{background-color:#a685ff40}@supports (color:color-mix(in lab,red,red)){.bg-violet-400\/25{background-color:color-mix(in oklab,var(--color-violet-400) 25%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/40{background-color:#fff6}@supports (color:color-mix(in lab,red,red)){.bg-white\/40{background-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-600\/80{--tw-gradient-from:#dd7400cc}@supports (color:color-mix(in lab,red,red)){.from-amber-600\/80{--tw-gradient-from:color-mix(in oklab, var(--color-amber-600) 80%, transparent)}}.from-amber-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-600\/80{--tw-gradient-from:#155dfccc}@supports (color:color-mix(in lab,red,red)){.from-blue-600\/80{--tw-gradient-from:color-mix(in oklab, var(--color-blue-600) 80%, transparent)}}.from-blue-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-600\/80{--tw-gradient-from:#0092b5cc}@supports (color:color-mix(in lab,red,red)){.from-cyan-600\/80{--tw-gradient-from:color-mix(in oklab, var(--color-cyan-600) 80%, transparent)}}.from-cyan-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-600\/80{--tw-gradient-from:#009767cc}@supports (color:color-mix(in lab,red,red)){.from-emerald-600\/80{--tw-gradient-from:color-mix(in oklab, var(--color-emerald-600) 80%, transparent)}}.from-emerald-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-rose-600\/80{--tw-gradient-from:#e70044cc}@supports (color:color-mix(in lab,red,red)){.from-rose-600\/80{--tw-gradient-from:color-mix(in oklab, var(--color-rose-600) 80%, transparent)}}.from-rose-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-violet-600\/80{--tw-gradient-from:#7f22fecc}@supports (color:color-mix(in lab,red,red)){.from-violet-600\/80{--tw-gradient-from:color-mix(in oklab, var(--color-violet-600) 80%, transparent)}}.from-violet-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-700\/80{--tw-gradient-to:#1447e6cc}@supports (color:color-mix(in lab,red,red)){.to-blue-700\/80{--tw-gradient-to:color-mix(in oklab, var(--color-blue-700) 80%, transparent)}}.to-blue-700\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-green-700\/80{--tw-gradient-to:#008138cc}@supports (color:color-mix(in lab,red,red)){.to-green-700\/80{--tw-gradient-to:color-mix(in oklab, var(--color-green-700) 80%, transparent)}}.to-green-700\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-600\/80{--tw-gradient-to:#f05100cc}@supports (color:color-mix(in lab,red,red)){.to-orange-600\/80{--tw-gradient-to:color-mix(in oklab, var(--color-orange-600) 80%, transparent)}}.to-orange-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-pink-700\/80{--tw-gradient-to:#c4005ccc}@supports (color:color-mix(in lab,red,red)){.to-pink-700\/80{--tw-gradient-to:color-mix(in oklab, var(--color-pink-700) 80%, transparent)}}.to-pink-700\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-purple-700\/80{--tw-gradient-to:#8200dacc}@supports (color:color-mix(in lab,red,red)){.to-purple-700\/80{--tw-gradient-to:color-mix(in oklab, var(--color-purple-700) 80%, transparent)}}.to-purple-700\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-teal-600\/80{--tw-gradient-to:#009588cc}@supports (color:color-mix(in lab,red,red)){.to-teal-600\/80{--tw-gradient-to:color-mix(in oklab, var(--color-teal-600) 80%, transparent)}}.to-teal-600\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-padding{background-clip:padding-box}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-\[oklch\(0\.55_0\.20_30\)\]{fill:#cc2a1b}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-\[3px\]{padding:3px}.px-\(--cell-size\){padding-inline:var(--cell-size)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.ps-1\.5{padding-inline-start:calc(var(--spacing) * 1.5)}.ps-2{padding-inline-start:calc(var(--spacing) * 2)}.ps-2\.5{padding-inline-start:calc(var(--spacing) * 2.5)}.ps-6{padding-inline-start:calc(var(--spacing) * 6)}.ps-8{padding-inline-start:calc(var(--spacing) * 8)}.pe-1{padding-inline-end:calc(var(--spacing) * 1)}.pe-2{padding-inline-end:calc(var(--spacing) * 2)}.pe-6{padding-inline-end:calc(var(--spacing) * 6)}.pe-8{padding-inline-end:calc(var(--spacing) * 8)}.pe-9{padding-inline-end:calc(var(--spacing) * 9)}.pe-10{padding-inline-end:calc(var(--spacing) * 10)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-\[15vh\]{padding-top:15vh}.pt-\[30px\]{padding-top:30px}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-1\.5\!{padding-right:calc(var(--spacing) * 1.5)!important}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-1\.5\!{padding-left:calc(var(--spacing) * 1.5)!important}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.font-heading{font-family:var(--font-sans)}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-wrap{text-wrap:wrap}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-50{color:var(--color-amber-50)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-50{color:var(--color-blue-50)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-50{color:var(--color-cyan-50)}.text-cyan-700{color:var(--color-cyan-700)}.text-destructive{color:var(--destructive)}.text-emerald-50{color:var(--color-emerald-50)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground,.text-foreground\/60{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/60{color:color-mix(in oklab,var(--foreground) 60%,transparent)}}.text-foreground\/70{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/70{color:color-mix(in oklab,var(--foreground) 70%,transparent)}}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground) 50%,transparent)}}.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground) 60%,transparent)}}.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground) 70%,transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground) 80%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground,.text-primary-foreground\/70{color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/70{color:color-mix(in oklab,var(--primary-foreground) 70%,transparent)}}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-rose-50{color:var(--color-rose-50)}.text-rose-600{color:var(--color-rose-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground) 70%,transparent)}}.text-sky-600{color:var(--color-sky-600)}.text-slate-500{color:var(--color-slate-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-50{color:var(--color-violet-50)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.text-white\/85{color:#ffffffd9}@supports (color:color-mix(in lab,red,red)){.text-white\/85{color:color-mix(in oklab,var(--color-white) 85%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.bg-blend-color{background-blend-mode:color}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\!ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-3{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-amber-400{--tw-ring-color:var(--color-amber-400)}.ring-background{--tw-ring-color:var(--background)}.ring-card{--tw-ring-color:var(--card)}.ring-emerald-400{--tw-ring-color:var(--color-emerald-400)}.ring-foreground\/10{--tw-ring-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.ring-foreground\/10{--tw-ring-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.ring-orange-400{--tw-ring-color:var(--color-orange-400)}.ring-primary,.ring-primary\/30{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/30{--tw-ring-color:color-mix(in oklab, var(--primary) 30%, transparent)}}.ring-red-500{--tw-ring-color:var(--color-red-500)}.ring-ring{--tw-ring-color:var(--ring)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-250{--tw-duration:.25s;transition-duration:.25s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.\[--cell-radius\:var\(--radius-md\)\]{--cell-radius:var(--radius-md)}.\[--cell-size\:--spacing\(7\)\]{--cell-size:calc(var(--spacing) * 7)}.\[animation-duration\:2\.5s\]{animation-duration:2.5s}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.paused{animation-play-state:paused}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media(hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:-rotate-6:is(:where(.group):hover *){rotate:-6deg}.group-hover\:\[animation\:none\]:is(:where(.group):hover *){animation:none}.group-hover\:bg-black\/10:is(:where(.group):hover *){background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-black\/10:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}.group-hover\:opacity-50:is(:where(.group):hover *){opacity:.5}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/field\:opacity-100:is(:where(.group\/field):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/ses\:opacity-100:is(:where(.group\/ses):hover *){opacity:1}}.group-focus\/dropdown-menu-item\:text-accent-foreground:is(:where(.group\/dropdown-menu-item):focus *){color:var(--accent-foreground)}.group-has-disabled\/field\:opacity-50:is(:where(.group\/field):has(:disabled) *){opacity:.5}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing) * 8)}.group-has-data-\[size\=lg\]\/avatar-group\:size-10:is(:where(.group\/avatar-group):has([data-size=lg]) *){width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.group-has-data-\[size\=sm\]\/avatar-group\:size-6:is(:where(.group\/avatar-group):has([data-size=sm]) *){width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.group-has-\[\>input\]\/input-group\:pt-2:is(:where(.group\/input-group):has(>input) *){padding-top:calc(var(--spacing) * 2)}.group-has-\[\>input\]\/input-group\:pb-2:is(:where(.group\/input-group):has(>input) *){padding-bottom:calc(var(--spacing) * 2)}.group-data-\[align\=end\]\/bubble\:self-end:is(:where(.group\/bubble)[data-align=end] *),.group-data-\[align\=end\]\/message\:self-end:is(:where(.group\/message)[data-align=end] *){align-self:flex-end}.group-data-\[collapsible\=icon\]\:ms-0:is(:where(.group)[data-collapsible=icon] *){margin-inline-start:calc(var(--spacing) * 0)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing) * -8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing) * 8)!important;height:calc(var(--spacing) * 8)!important}.group-data-\[collapsible\=icon\]\:h-0:is(:where(.group)[data-collapsible=icon] *){height:calc(var(--spacing) * 0)}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing) * 4)) + 2px)}.group-data-\[collapsible\=icon\]\:grid-rows-\[1fr\]:is(:where(.group)[data-collapsible=icon] *){grid-template-rows:1fr}.group-data-\[collapsible\=icon\]\:justify-center:is(:where(.group)[data-collapsible=icon] *){justify-content:center}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:overflow-y-auto:is(:where(.group)[data-collapsible=icon] *){overflow-y:auto}.group-data-\[collapsible\=icon\]\:border-transparent:is(:where(.group)[data-collapsible=icon] *){border-color:#0000}.group-data-\[collapsible\=icon\]\:p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 0)}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing) * 2)!important}.group-data-\[collapsible\=icon\]\:px-0:is(:where(.group)[data-collapsible=icon] *){padding-inline:calc(var(--spacing) * 0)}.group-data-\[collapsible\=icon\]\:ps-0:is(:where(.group)[data-collapsible=icon] *){padding-inline-start:calc(var(--spacing) * 0)}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing) * 0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *),.group-data-\[disabled\=true\]\/input-group\:opacity-50:is(:where(.group\/input-group)[data-disabled=true] *){opacity:.5}.group-data-\[focused\=true\]\/day\:relative:is(:where(.group\/day)[data-focused=true] *){position:relative}.group-data-\[focused\=true\]\/day\:z-10:is(:where(.group\/day)[data-focused=true] *){z-index:10}.group-data-\[focused\=true\]\/day\:border-ring:is(:where(.group\/day)[data-focused=true] *){border-color:var(--ring)}.group-data-\[focused\=true\]\/day\:ring-\[3px\]:is(:where(.group\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.group\/day)[data-focused=true] *){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.group\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing) * -4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing) * 0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[size\=default\]\/avatar\:size-2\.5:is(:where(.group\/avatar)[data-size=default] *){width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.group-data-\[size\=lg\]\/avatar\:size-3:is(:where(.group\/avatar)[data-size=lg] *){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.group-data-\[size\=sm\]\/alert-dialog-content\:grid:is(:where(.group\/alert-dialog-content)[data-size=sm] *){display:grid}.group-data-\[size\=sm\]\/alert-dialog-content\:grid-cols-2:is(:where(.group\/alert-dialog-content)[data-size=sm] *){grid-template-columns:repeat(2,minmax(0,1fr))}.group-data-\[size\=sm\]\/avatar\:size-2:is(:where(.group\/avatar)[data-size=sm] *){width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.group-data-\[size\=sm\]\/avatar\:text-xs:is(:where(.group\/avatar)[data-size=sm] *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-data-\[size\=sm\]\/card\:p-3:is(:where(.group\/card)[data-size=sm] *){padding:calc(var(--spacing) * 3)}.group-data-\[size\=sm\]\/card\:px-3:is(:where(.group\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 3)}.group-data-\[size\=sm\]\/card\:text-sm:is(:where(.group\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[variant\=floating\]\:ring-1:is(:where(.group)[data-variant=floating] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[variant\=floating\]\:ring-sidebar-border:is(:where(.group)[data-variant=floating] *){--tw-ring-color:var(--sidebar-border)}.group-data-\[variant\=line\]\/tabs-list\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *){background-color:#0000}.group-data-horizontal\/tabs\:h-8:is(:where(.group\/tabs):where([data-orientation=horizontal]) *){height:calc(var(--spacing) * 8)}.group-data-vertical\/tabs\:h-fit:is(:where(.group\/tabs):where([data-orientation=vertical]) *){height:fit-content}.group-data-vertical\/tabs\:w-full:is(:where(.group\/tabs):where([data-orientation=vertical]) *){width:100%}.group-data-vertical\/tabs\:flex-col:is(:where(.group\/tabs):where([data-orientation=vertical]) *){flex-direction:column}.group-data-vertical\/tabs\:justify-start:is(:where(.group\/tabs):where([data-orientation=vertical]) *){justify-content:flex-start}@media(hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing) * 1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing) * 2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing) * 1)}.peer-data-active\/menu-button\:text-sidebar-accent-foreground:is(:is(:where(.peer\/menu-button):where([data-state=active]),:where(.peer\/menu-button):where([data-active]:not([data-active=false])))~*){color:var(--sidebar-accent-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-1:before{content:var(--tw-content);top:calc(var(--spacing) * 1)}.before\:bottom-1:before{content:var(--tw-content);bottom:calc(var(--spacing) * 1)}.before\:left-0:before{content:var(--tw-content);left:calc(var(--spacing) * 0)}.before\:w-\[3px\]:before{content:var(--tw-content);width:3px}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:bg-transparent:before{content:var(--tw-content);background-color:#0000}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing) * -2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.after\:-inset-x-3:after{content:var(--tw-content);inset-inline:calc(var(--spacing) * -3)}.after\:-inset-y-2:after{content:var(--tw-content);inset-block:calc(var(--spacing) * -2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:start-1\/2:after{content:var(--tw-content);inset-inline-start:50%}.after\:right-0:after{content:var(--tw-content);right:calc(var(--spacing) * 0)}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing) * 0)}.after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing) * 4)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:border:after{content:var(--tw-content);border-style:var(--tw-border-style);border-width:1px}.after\:border-border:after{content:var(--tw-content);border-color:var(--border)}.after\:bg-foreground:after{content:var(--tw-content);background-color:var(--foreground)}.after\:bg-muted:after{content:var(--tw-content);background-color:var(--muted)}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:mix-blend-darken:after{content:var(--tw-content);mix-blend-mode:darken}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.group-data-horizontal\/tabs\:after\:inset-x-0:is(:where(.group\/tabs):where([data-orientation=horizontal]) *):after{content:var(--tw-content);inset-inline:calc(var(--spacing) * 0)}.group-data-horizontal\/tabs\:after\:bottom-\[-5px\]:is(:where(.group\/tabs):where([data-orientation=horizontal]) *):after{content:var(--tw-content);bottom:-5px}.group-data-horizontal\/tabs\:after\:h-0\.5:is(:where(.group\/tabs):where([data-orientation=horizontal]) *):after{content:var(--tw-content);height:calc(var(--spacing) * .5)}.group-data-vertical\/tabs\:after\:inset-y-0:is(:where(.group\/tabs):where([data-orientation=vertical]) *):after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.group-data-vertical\/tabs\:after\:-right-1:is(:where(.group\/tabs):where([data-orientation=vertical]) *):after{content:var(--tw-content);right:calc(var(--spacing) * -1)}.group-data-vertical\/tabs\:after\:w-0\.5:is(:where(.group\/tabs):where([data-orientation=vertical]) *):after{content:var(--tw-content);width:calc(var(--spacing) * .5)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:border-ring:focus-within{border-color:var(--ring)}.focus-within\:bg-muted:focus-within{background-color:var(--muted)}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-ring\/20:focus-within{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-within\:ring-ring\/20:focus-within{--tw-ring-color:color-mix(in oklab, var(--ring) 20%, transparent)}}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-muted-foreground\/50:hover{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:border-muted-foreground\/50:hover{border-color:color-mix(in oklab,var(--muted-foreground) 50%,transparent)}}.hover\:border-primary\/60:hover{border-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/60:hover{border-color:color-mix(in oklab,var(--primary) 60%,transparent)}}.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.hover\:bg-destructive\/20:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-destructive\/90\!:hover{background-color:var(--destructive)!important}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90\!:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)!important}}.hover\:bg-emerald-700:hover{background-color:var(--color-emerald-700)}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/20:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted-foreground\/20:hover{background-color:color-mix(in oklab,var(--muted-foreground) 20%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.hover\:bg-muted\/60:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/60:hover{background-color:color-mix(in oklab,var(--muted) 60%,transparent)}}.hover\:bg-primary\/10:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--primary) 10%,transparent)}}.hover\:bg-primary\/20:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/20:hover{background-color:color-mix(in oklab,var(--primary) 20%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:bg-sidebar-accent:hover,.hover\:bg-sidebar-accent\/15:hover{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sidebar-accent\/15:hover{background-color:color-mix(in oklab,var(--sidebar-accent) 15%,transparent)}}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-primary:hover{--tw-ring-color:var(--primary)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:before\:bg-primary\/40:hover:before{content:var(--tw-content);background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:before\:bg-primary\/40:hover:before{background-color:color-mix(in oklab,var(--primary) 40%,transparent)}}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus,:is(.focus\:\*\*\:text-accent-foreground:focus *),:is(.not-data-\[variant\=destructive\]\:focus\:\*\*\:text-accent-foreground:not([data-variant=destructive]):focus *){color:var(--accent-foreground)}.focus-visible\:border-destructive\/40:focus-visible{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:border-destructive\/40:focus-visible{border-color:color-mix(in oklab,var(--destructive) 40%,transparent)}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-3:focus-visible,.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active,.active\:bg-sidebar-accent\/15:active{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab,red,red)){.active\:bg-sidebar-accent\/15:active{background-color:color-mix(in oklab,var(--sidebar-accent) 15%,transparent)}}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.active\:not-aria-\[haspopup\]\:translate-y-px:active:not([aria-haspopup]){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-input\/50:disabled{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.disabled\:bg-input\/50:disabled{background-color:color-mix(in oklab,var(--input) 50%,transparent)}}.disabled\:bg-transparent:disabled{background-color:#0000}.disabled\:opacity-0:disabled{opacity:0}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}:where([data-slot=button-group]) .in-data-\[slot\=button-group\]\:rounded-lg{border-radius:var(--radius)}:where([data-slot=card-content]) .in-data-\[slot\=card-content\]\:bg-transparent{background-color:#0000}:where([data-slot=combobox-content]) .in-data-\[slot\=combobox-content\]\:focus-within\:border-inherit:focus-within{border-color:inherit}:where([data-slot=combobox-content]) .in-data-\[slot\=combobox-content\]\:focus-within\:ring-0:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:where([data-slot=popover-content]) .in-data-\[slot\=popover-content\]\:bg-transparent{background-color:#0000}.has-disabled\:bg-input\/50:has(:disabled){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.has-disabled\:bg-input\/50:has(:disabled){background-color:color-mix(in oklab,var(--input) 50%,transparent)}}.has-disabled\:opacity-50:has(:disabled){opacity:.5}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.has-data-\[icon\=inline-end\]\:pr-1:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1)}.has-data-\[icon\=inline-end\]\:pr-1\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\[icon\=inline-end\]\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\[icon\=inline-start\]\:pl-1:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1)}.has-data-\[icon\=inline-start\]\:pl-1\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\[icon\=inline-start\]\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\[padless\]\:gap-0:has([data-padless]){gap:calc(var(--spacing) * 0)}.has-data-\[padless\]\:py-0:has([data-padless]){padding-block:calc(var(--spacing) * 0)}.has-data-\[slot\=alert-dialog-media\]\:grid-rows-\[auto_auto_1fr\]:has([data-slot=alert-dialog-media]){grid-template-rows:auto auto 1fr}.has-data-\[slot\=alert-dialog-media\]\:gap-x-4:has([data-slot=alert-dialog-media]){column-gap:calc(var(--spacing) * 4)}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[slot\=card-description\]\:grid-rows-\[auto_auto\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\[slot\=card-footer\]\:pb-0:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}.has-data-\[slot\=kbd\]\:pr-1\.5:has([data-slot=kbd]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:var(--ring)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-3:has([data-slot=input-group-control]:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){border-color:var(--destructive)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-3:has([data-slot][aria-invalid=true]){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.has-\[button\]\:p-0:has(:is(button)){padding:calc(var(--spacing) * 0)}.has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.has-\[\>button\]\:ms-\[-0\.3rem\]:has(>button){margin-inline-start:-.3rem}.has-\[\>button\]\:me-\[-0\.3rem\]:has(>button){margin-inline-end:-.3rem}.has-\[\>img\:first-child\]\:pt-0:has(>img:first-child){padding-top:calc(var(--spacing) * 0)}.has-\[\>kbd\]\:ms-\[-0\.15rem\]:has(>kbd){margin-inline-start:-.15rem}.has-\[\>kbd\]\:me-\[-0\.15rem\]:has(>kbd){margin-inline-end:-.15rem}.has-\[\>svg\]\:p-0:has(>svg){padding:calc(var(--spacing) * 0)}.has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-expanded\:bg-muted[aria-expanded=true]{background-color:var(--muted)}.aria-expanded\:bg-secondary[aria-expanded=true]{background-color:var(--secondary)}.aria-expanded\:text-foreground[aria-expanded=true]{color:var(--foreground)}.aria-expanded\:text-secondary-foreground[aria-expanded=true]{color:var(--secondary-foreground)}.aria-expanded\:opacity-100[aria-expanded=true]{opacity:1}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-0[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.aria-invalid\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.aria-invalid\:aria-checked\:border-primary[aria-invalid=true][aria-checked=true]{border-color:var(--primary)}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.data-ending-style\:opacity-0[data-ending-style]{opacity:0}.data-inset\:pl-7[data-inset]{padding-left:calc(var(--spacing) * 7)}.data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-popup-open\:bg-accent[data-popup-open]{background-color:var(--accent)}.data-popup-open\:text-accent-foreground[data-popup-open]{color:var(--accent-foreground)}.data-starting-style\:opacity-0[data-starting-style]{opacity:0}.data-\[align-trigger\=true\]\:animate-none[data-align-trigger=true]{animation:none}.data-\[align\=end\]\:self-end[data-align=end]{align-self:flex-end}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[range-end\=true\]\:rounded-\(--cell-radius\)[data-range-end=true]{border-radius:var(--cell-radius)}.data-\[range-end\=true\]\:rounded-r-\(--cell-radius\)[data-range-end=true]{border-top-right-radius:var(--cell-radius);border-bottom-right-radius:var(--cell-radius)}.data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:var(--primary)}.data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:var(--primary-foreground)}.data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.data-\[range-middle\=true\]\:bg-muted[data-range-middle=true]{background-color:var(--muted)}.data-\[range-middle\=true\]\:text-foreground[data-range-middle=true]{color:var(--foreground)}.data-\[range-start\=true\]\:rounded-\(--cell-radius\)[data-range-start=true]{border-radius:var(--cell-radius)}.data-\[range-start\=true\]\:rounded-l-\(--cell-radius\)[data-range-start=true]{border-top-left-radius:var(--cell-radius);border-bottom-left-radius:var(--cell-radius)}.data-\[range-start\=true\]\:bg-primary[data-range-start=true]{background-color:var(--primary)}.data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true]{color:var(--primary-foreground)}.data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:var(--primary)}.data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:var(--primary-foreground)}.data-\[selected\=true\]\:rounded-none[data-selected=true]{border-radius:0}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:inset-x-0[data-side=bottom]{inset-inline:calc(var(--spacing) * 0)}.data-\[side\=bottom\]\:top-1[data-side=bottom]{top:calc(var(--spacing) * 1)}.data-\[side\=bottom\]\:bottom-0[data-side=bottom]{bottom:calc(var(--spacing) * 0)}.data-\[side\=bottom\]\:h-auto[data-side=bottom]{height:auto}.data-\[side\=bottom\]\:border-t[data-side=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=bottom\]\:data-ending-style\:translate-y-\[2\.5rem\][data-side=bottom][data-ending-style],.data-\[side\=bottom\]\:data-starting-style\:translate-y-\[2\.5rem\][data-side=bottom][data-starting-style]{--tw-translate-y:2.5rem;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=inline-end\]\:top-1\/2\![data-side=inline-end]{top:50%!important}.data-\[side\=inline-end\]\:-left-1[data-side=inline-end]{left:calc(var(--spacing) * -1)}.data-\[side\=inline-end\]\:-translate-y-1\/2[data-side=inline-end]{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=inline-end\]\:slide-in-from-left-2[data-side=inline-end]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=inline-start\]\:top-1\/2\![data-side=inline-start]{top:50%!important}.data-\[side\=inline-start\]\:-right-1[data-side=inline-start]{right:calc(var(--spacing) * -1)}.data-\[side\=inline-start\]\:-translate-y-1\/2[data-side=inline-start]{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=inline-start\]\:slide-in-from-right-2[data-side=inline-start]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=left\]\:inset-y-0[data-side=left]{inset-block:calc(var(--spacing) * 0)}.data-\[side\=left\]\:top-1\/2\![data-side=left]{top:50%!important}.data-\[side\=left\]\:-right-1[data-side=left]{right:calc(var(--spacing) * -1)}.data-\[side\=left\]\:left-0[data-side=left]{left:calc(var(--spacing) * 0)}.data-\[side\=left\]\:h-full[data-side=left]{height:100%}.data-\[side\=left\]\:w-3\/4[data-side=left]{width:75%}.data-\[side\=left\]\:-translate-y-1\/2[data-side=left]{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:border-r[data-side=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=left\]\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\][data-side=left]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.data-\[side\=left\]\:data-ending-style\:translate-x-\[-2\.5rem\][data-side=left][data-ending-style],.data-\[side\=left\]\:data-starting-style\:translate-x-\[-2\.5rem\][data-side=left][data-starting-style]{--tw-translate-x:-2.5rem;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:inset-y-0[data-side=right]{inset-block:calc(var(--spacing) * 0)}.data-\[side\=right\]\:top-1\/2\![data-side=right]{top:50%!important}.data-\[side\=right\]\:right-0[data-side=right]{right:calc(var(--spacing) * 0)}.data-\[side\=right\]\:-left-1[data-side=right]{left:calc(var(--spacing) * -1)}.data-\[side\=right\]\:h-full[data-side=right]{height:100%}.data-\[side\=right\]\:w-3\/4[data-side=right]{width:75%}.data-\[side\=right\]\:-translate-y-1\/2[data-side=right]{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:border-l[data-side=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=right\]\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\][data-side=right]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.data-\[side\=right\]\:data-ending-style\:translate-x-\[2\.5rem\][data-side=right][data-ending-style],.data-\[side\=right\]\:data-starting-style\:translate-x-\[2\.5rem\][data-side=right][data-starting-style]{--tw-translate-x:2.5rem;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:inset-x-0[data-side=top]{inset-inline:calc(var(--spacing) * 0)}.data-\[side\=top\]\:top-0[data-side=top]{top:calc(var(--spacing) * 0)}.data-\[side\=top\]\:-bottom-2\.5[data-side=top]{bottom:calc(var(--spacing) * -2.5)}.data-\[side\=top\]\:h-auto[data-side=top]{height:auto}.data-\[side\=top\]\:border-b[data-side=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[side\=top\]\:data-ending-style\:translate-y-\[-2\.5rem\][data-side=top][data-ending-style],.data-\[side\=top\]\:data-starting-style\:translate-y-\[-2\.5rem\][data-side=top][data-starting-style]{--tw-translate-y:-2.5rem;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[size\=default\]\:h-8[data-size=default]{height:calc(var(--spacing) * 8)}.data-\[size\=default\]\:max-w-xs[data-size=default]{max-width:var(--container-xs)}.data-\[size\=lg\]\:size-10[data-size=lg]{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.data-\[size\=md\]\:text-sm[data-size=md]{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.data-\[size\=sm\]\:size-6[data-size=sm]{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.data-\[size\=sm\]\:h-7[data-size=sm]{height:calc(var(--spacing) * 7)}.data-\[size\=sm\]\:max-w-xs[data-size=sm]{max-width:var(--container-xs)}.data-\[size\=sm\]\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\[size\=sm\]\:rounded-\[min\(var\(--radius-md\)\,10px\)\][data-size=sm]{border-radius:min(var(--radius-md),10px)}.data-\[size\=sm\]\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\[size\=sm\]\:text-xs[data-size=sm]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.data-\[size\=sm\]\:has-data-\[slot\=card-footer\]\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}:is(.\*\:data-\[slot\=avatar\]\:ring-2>*)[data-slot=avatar]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.\*\:data-\[slot\=avatar\]\:ring-background>*)[data-slot=avatar]{--tw-ring-color:var(--background)}:is(.\*\:data-\[slot\=bubble-content\]\:rounded-none>*)[data-slot=bubble-content]{border-radius:0}:is(.\*\:data-\[slot\=bubble-content\]\:border-border>*)[data-slot=bubble-content]{border-color:var(--border)}:is(.\*\:data-\[slot\=bubble-content\]\:bg-\[oklch\(from_var\(--primary\)_0\.93_calc\(c\*0\.4\)_h\)\]>*)[data-slot=bubble-content]{background-color:oklch(from var(--primary) .93 calc(c*.4) h)}:is(.\*\:data-\[slot\=bubble-content\]\:bg-background>*)[data-slot=bubble-content]{background-color:var(--background)}:is(.\*\:data-\[slot\=bubble-content\]\:bg-destructive\/10>*)[data-slot=bubble-content]{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=bubble-content\]\:bg-destructive\/10>*)[data-slot=bubble-content]{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}:is(.\*\:data-\[slot\=bubble-content\]\:bg-muted>*)[data-slot=bubble-content]{background-color:var(--muted)}:is(.\*\:data-\[slot\=bubble-content\]\:bg-primary>*)[data-slot=bubble-content]{background-color:var(--primary)}:is(.\*\:data-\[slot\=bubble-content\]\:bg-secondary>*)[data-slot=bubble-content]{background-color:var(--secondary)}:is(.\*\:data-\[slot\=bubble-content\]\:bg-transparent>*)[data-slot=bubble-content]{background-color:#0000}:is(.\*\:data-\[slot\=bubble-content\]\:p-0>*)[data-slot=bubble-content]{padding:calc(var(--spacing) * 0)}:is(.\*\:data-\[slot\=bubble-content\]\:text-destructive>*)[data-slot=bubble-content]{color:var(--destructive)}:is(.\*\:data-\[slot\=bubble-content\]\:text-foreground>*)[data-slot=bubble-content]{color:var(--foreground)}:is(.\*\:data-\[slot\=bubble-content\]\:text-primary-foreground>*)[data-slot=bubble-content]{color:var(--primary-foreground)}:is(.\*\:data-\[slot\=bubble-content\]\:text-secondary-foreground>*)[data-slot=bubble-content]{color:var(--secondary-foreground)}:is(.\*\*\:data-\[slot\=kbd\]\:relative *)[data-slot=kbd]{position:relative}:is(.\*\*\:data-\[slot\=kbd\]\:isolate *)[data-slot=kbd]{isolation:isolate}:is(.\*\*\:data-\[slot\=kbd\]\:z-50 *)[data-slot=kbd]{z-index:50}:is(.\*\*\:data-\[slot\=kbd\]\:rounded-sm *)[data-slot=kbd]{border-radius:calc(var(--radius) * .6)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-1\.5>*)[data-slot=select-value]{gap:calc(var(--spacing) * 1.5)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open]{--tw-enter-opacity:0}.data-\[state\=delayed-open\]\:zoom-in-95[data-state=delayed-open]{--tw-enter-scale:.95}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=selected\]\:before\:bg-primary[data-state=selected]:before{content:var(--tw-content);background-color:var(--primary)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=ghost\]\:max-w-full[data-variant=ghost]{max-width:100%}.data-\[variant\=line\]\:rounded-none[data-variant=line]{border-radius:0}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}@media(min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:w-60{width:calc(var(--spacing) * 60)}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-4xl{max-width:var(--container-4xl)}.sm\:max-w-5xl{max-width:var(--container-5xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-none{max-width:none}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:row-span-2:is(:where(.group\/alert-dialog-content)[data-size=default] *){grid-row:span 2/span 2}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:place-items-start:is(:where(.group\/alert-dialog-content)[data-size=default] *){place-items:start}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:text-left:is(:where(.group\/alert-dialog-content)[data-size=default] *){text-align:left}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:group-has-data-\[slot\=alert-dialog-media\]\/alert-dialog-content\:col-start-2:is(:where(.group\/alert-dialog-content)[data-size=default] *):is(:where(.group\/alert-dialog-content):has([data-slot=alert-dialog-media]) *){grid-column-start:2}.sm\:group-data-\[size\=default\]\/alert-dialog-content\:has-data-\[slot\=alert-dialog-media\]\:grid-rows-\[auto_1fr\]:is(:where(.group\/alert-dialog-content)[data-size=default] *):has([data-slot=alert-dialog-media]){grid-template-rows:auto 1fr}.data-\[side\=left\]\:sm\:max-w-sm[data-side=left],.data-\[side\=right\]\:sm\:max-w-sm[data-side=right],.data-\[size\=default\]\:sm\:max-w-sm[data-size=default]{max-width:var(--container-sm)}}@media(min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:inline{display:inline}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-pretty{text-wrap:pretty}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing) * 2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing) * 0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) * 1.4)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing) * 2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:flex{display:flex}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[240px_1fr\]{grid-template-columns:240px 1fr}.lg\:grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.lg\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}}@media(min-width:80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.ltr\:-translate-x-1\/2:where(:dir(ltr),[dir=ltr],[dir=ltr] *),.rtl\:-translate-x-1\/2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.dark\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:border-primary\/20:is(.dark *){border-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.dark\:border-primary\/20:is(.dark *){border-color:color-mix(in oklab,var(--primary) 20%,transparent)}}.dark\:border-yellow-700:is(.dark *){border-color:var(--color-yellow-700)}.dark\:bg-\[oklch\(0\.63_0\.22_30\)\]:is(.dark *){background-color:#f13b29}.dark\:bg-amber-900\/40:is(.dark *){background-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-900) 40%,transparent)}}.dark\:bg-amber-950\/20:is(.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950) 20%,transparent)}}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.dark\:bg-cyan-900\/40:is(.dark *){background-color:#104e6466}@supports (color:color-mix(in lab,red,red)){.dark\:bg-cyan-900\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-cyan-900) 40%,transparent)}}.dark\:bg-destructive\/20:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/20:is(.dark *){background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-transparent:is(.dark *){background-color:#0000}.dark\:bg-violet-900\/40:is(.dark *){background-color:#4d179a66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-violet-900\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-violet-900) 40%,transparent)}}.dark\:bg-yellow-950:is(.dark *){background-color:var(--color-yellow-950)}.dark\:bg-yellow-950\/20:is(.dark *){background-color:#43200433}@supports (color:color-mix(in lab,red,red)){.dark\:bg-yellow-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-yellow-950) 20%,transparent)}}.dark\:fill-\[oklch\(0\.63_0\.22_30\)\]:is(.dark *){fill:#f13b29}.dark\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-300:is(.dark *){color:var(--color-blue-300)}.dark\:text-cyan-300:is(.dark *){color:var(--color-cyan-300)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-green-300:is(.dark *){color:var(--color-green-300)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\:text-violet-300:is(.dark *){color:var(--color-violet-300)}.dark\:text-yellow-200:is(.dark *){color:var(--color-yellow-200)}.dark\:text-yellow-400:is(.dark *){color:var(--color-yellow-400)}.dark\:shadow-\[0_0_60px_-12px_oklch\(0\.63_0\.22_30\)\]:is(.dark *){--tw-shadow:0 0 60px -12px var(--tw-shadow-color,oklch(63% .22 30));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\:after\:mix-blend-lighten:is(.dark *):after{content:var(--tw-content);mix-blend-mode:lighten}@media(hover:hover){.dark\:hover\:bg-destructive\/30:is(.dark *):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-destructive\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--destructive) 30%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input) 50%,transparent)}}.dark\:hover\:bg-muted\/50:is(.dark *):hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-muted\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.dark\:hover\:text-foreground:is(.dark *):hover{color:var(--foreground)}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:disabled\:bg-input\/80:is(.dark *):disabled{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:disabled\:bg-input\/80:is(.dark *):disabled{background-color:color-mix(in oklab,var(--input) 80%,transparent)}}.dark\:disabled\:bg-transparent:is(.dark *):disabled{background-color:#0000}.dark\:has-disabled\:bg-input\/80:is(.dark *):has(:disabled){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:has-disabled\:bg-input\/80:is(.dark *):has(:disabled){background-color:color-mix(in oklab,var(--input) 80%,transparent)}}.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:is(.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:is(.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:aria-invalid\:border-destructive\/50:is(.dark *)[aria-invalid=true]{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:border-destructive\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab,var(--destructive) 50%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}:is(.dark\:\*\:data-\[slot\=bubble-content\]\:bg-\[oklch\(from_var\(--primary\)_0\.3_calc\(c\*0\.4\)_h\)\]:is(.dark *)>*)[data-slot=bubble-content]{background-color:oklch(from var(--primary) .3 calc(c*.4) h)}:is(.dark\:\*\:data-\[slot\=bubble-content\]\:bg-destructive\/20:is(.dark *)>*)[data-slot=bubble-content]{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.dark\:\*\:data-\[slot\=bubble-content\]\:bg-destructive\/20:is(.dark *)>*)[data-slot=bubble-content]{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.data-open\:animate-in:where([data-state=open]),.data-open\:animate-in:where([data-open]:not([data-open=false])){animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-open\:bg-accent:where([data-state=open]),.data-open\:bg-accent:where([data-open]:not([data-open=false])){background-color:var(--accent)}.data-open\:text-accent-foreground:where([data-state=open]),.data-open\:text-accent-foreground:where([data-open]:not([data-open=false])){color:var(--accent-foreground)}.data-open\:fade-in-0:where([data-state=open]),.data-open\:fade-in-0:where([data-open]:not([data-open=false])){--tw-enter-opacity:0}.data-open\:zoom-in-95:where([data-state=open]),.data-open\:zoom-in-95:where([data-open]:not([data-open=false])){--tw-enter-scale:.95}.data-closed\:animate-out:where([data-state=closed]),.data-closed\:animate-out:where([data-closed]:not([data-closed=false])){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-closed\:overflow-hidden:where([data-state=closed]),.data-closed\:overflow-hidden:where([data-closed]:not([data-closed=false])){overflow:hidden}.data-closed\:fade-out-0:where([data-state=closed]),.data-closed\:fade-out-0:where([data-closed]:not([data-closed=false])){--tw-exit-opacity:0}.data-closed\:zoom-out-95:where([data-state=closed]),.data-closed\:zoom-out-95:where([data-closed]:not([data-closed=false])){--tw-exit-scale:.95}.data-checked\:translate-x-4:where([data-state=checked]),.data-checked\:translate-x-4:where([data-checked]:not([data-checked=false])){--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-checked\:border-primary:where([data-state=checked]),.data-checked\:border-primary:where([data-checked]:not([data-checked=false])){border-color:var(--primary)}.data-checked\:bg-primary:where([data-state=checked]),.data-checked\:bg-primary:where([data-checked]:not([data-checked=false])){background-color:var(--primary)}.data-checked\:text-primary-foreground:where([data-state=checked]),.data-checked\:text-primary-foreground:where([data-checked]:not([data-checked=false])){color:var(--primary-foreground)}.dark\:data-checked\:bg-primary:is(.dark *):where([data-state=checked]),.dark\:data-checked\:bg-primary:is(.dark *):where([data-checked]:not([data-checked=false])){background-color:var(--primary)}.data-unchecked\:translate-x-0:where([data-state=unchecked]),.data-unchecked\:translate-x-0:where([data-unchecked]:not([data-unchecked=false])){--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-unchecked\:bg-input:where([data-state=unchecked]),.data-unchecked\:bg-input:where([data-unchecked]:not([data-unchecked=false])){background-color:var(--input)}.data-disabled\:pointer-events-none:where([data-disabled=true]),.data-disabled\:pointer-events-none:where([data-disabled]:not([data-disabled=false])){pointer-events:none}.data-disabled\:opacity-50:where([data-disabled=true]),.data-disabled\:opacity-50:where([data-disabled]:not([data-disabled=false])){opacity:.5}.data-active\:bg-background:where([data-state=active]),.data-active\:bg-background:where([data-active]:not([data-active=false])){background-color:var(--background)}.data-active\:bg-sidebar-accent:where([data-state=active]),.data-active\:bg-sidebar-accent:where([data-active]:not([data-active=false])){background-color:var(--sidebar-accent)}.data-active\:font-medium:where([data-state=active]),.data-active\:font-medium:where([data-active]:not([data-active=false])){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-active\:text-foreground:where([data-state=active]),.data-active\:text-foreground:where([data-active]:not([data-active=false])){color:var(--foreground)}.data-active\:text-sidebar-accent-foreground:where([data-state=active]),.data-active\:text-sidebar-accent-foreground:where([data-active]:not([data-active=false])){color:var(--sidebar-accent-foreground)}.group-data-\[variant\=default\]\/tabs-list\:data-active\:shadow-sm:is(:where(.group\/tabs-list)[data-variant=default] *):where([data-state=active]),.group-data-\[variant\=default\]\/tabs-list\:data-active\:shadow-sm:is(:where(.group\/tabs-list)[data-variant=default] *):where([data-active]:not([data-active=false])){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){background-color:#0000}.group-data-\[variant\=line\]\/tabs-list\:data-active\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.group-data-\[variant\=line\]\/tabs-list\:data-active\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.group-data-\[variant\=line\]\/tabs-list\:data-active\:after\:opacity-100:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.group-data-\[variant\=line\]\/tabs-list\:data-active\:after\:opacity-100:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false]))):after{content:var(--tw-content);opacity:1}@media(hover:hover){:is(.data-active\:hover\:bg-sidebar-accent:where([data-state=active]),.data-active\:hover\:bg-sidebar-accent:where([data-active]:not([data-active=false]))):hover{background-color:var(--sidebar-accent)}:is(.data-active\:hover\:text-sidebar-accent-foreground:where([data-state=active]),.data-active\:hover\:text-sidebar-accent-foreground:where([data-active]:not([data-active=false]))):hover{color:var(--sidebar-accent-foreground)}}.dark\:data-active\:border-input:is(.dark *):where([data-state=active]),.dark\:data-active\:border-input:is(.dark *):where([data-active]:not([data-active=false])){border-color:var(--input)}.dark\:data-active\:bg-input\/30:is(.dark *):where([data-state=active]),.dark\:data-active\:bg-input\/30:is(.dark *):where([data-active]:not([data-active=false])){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-active\:bg-input\/30:is(.dark *):where([data-state=active]),.dark\:data-active\:bg-input\/30:is(.dark *):where([data-active]:not([data-active=false])){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}.dark\:data-active\:text-foreground:is(.dark *):where([data-state=active]),.dark\:data-active\:text-foreground:is(.dark *):where([data-active]:not([data-active=false])){color:var(--foreground)}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:border-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:border-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){border-color:#0000}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){background-color:#0000}.data-horizontal\:h-px:where([data-orientation=horizontal]){height:1px}.data-horizontal\:w-full:where([data-orientation=horizontal]){width:100%}.data-horizontal\:flex-col:where([data-orientation=horizontal]){flex-direction:column}.data-vertical\:w-px:where([data-orientation=vertical]){width:1px}.data-vertical\:self-stretch:where([data-orientation=vertical]){align-self:stretch}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing) * 1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing) * 2)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:size-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing) * 12)}.\[\&_\[cmdk-item\]\]\:px-3 [cmdk-item]{padding-inline:calc(var(--spacing) * 3)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing) * 3)}.\[\&_\[cmdk-item\]_svg\]\:size-5 [cmdk-item] svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-\(--cell-radius\):first-child[data-selected=true] button{border-top-left-radius:var(--cell-radius);border-bottom-left-radius:var(--cell-radius)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing) * 0)}.\[\.border-b\]\:pb-2.border-b{padding-bottom:calc(var(--spacing) * 2)}.\[\.border-b\]\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}.group-data-\[size\=sm\]\/card\:\[\.border-b\]\:pb-3:is(:where(.group\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 3)}.\[\.border-t\]\:pt-2.border-t{padding-top:calc(var(--spacing) * 2)}:is(.rtl\:\*\*\:\[\.rdp-button\\_next\>svg\]\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_next>svg),:is(.rtl\:\*\*\:\[\.rdp-button\\_previous\>svg\]\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_previous>svg){rotate:180deg}:is(.\*\:\[a\]\:underline>*):is(a){text-decoration-line:underline}:is(.\*\:\[a\]\:underline-offset-3>*):is(a){text-underline-offset:3px}@media(hover:hover){.\[a\]\:hover\:bg-destructive\/20:is(a):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.\[a\]\:hover\:bg-destructive\/20:is(a):hover{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.\[a\]\:hover\:bg-muted:is(a):hover{background-color:var(--muted)}.\[a\]\:hover\:bg-primary\/80:is(a):hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.\[a\]\:hover\:bg-primary\/80:is(a):hover{background-color:color-mix(in oklab,var(--primary) 80%,transparent)}}.\[a\]\:hover\:bg-secondary\/80:is(a):hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.\[a\]\:hover\:bg-secondary\/80:is(a):hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.\[a\]\:hover\:text-muted-foreground:is(a):hover{color:var(--muted-foreground)}:is(.\*\:\[a\]\:hover\:text-foreground>*):is(a):hover{color:var(--foreground)}}.\[button\]\:text-left:is(button){text-align:left}.\[button\,a\]\:transition-colors:is(button,a){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[button\,a\]\:outline-none:is(button,a){--tw-outline-style:none;outline-style:none}.\[button\,a\]\:focus-visible\:border-ring:is(button,a):focus-visible{border-color:var(--ring)}.\[button\,a\]\:focus-visible\:ring-3:is(button,a):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[button\,a\]\:focus-visible\:ring-ring\/50:is(button,a):focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.\[button\,a\]\:focus-visible\:ring-ring\/50:is(button,a):focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}:is(.\*\:\[img\:first-child\]\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--radius) * 1.4);border-top-right-radius:calc(var(--radius) * 1.4)}:is(.\*\:\[img\:last-child\]\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--radius) * 1.4);border-bottom-left-radius:calc(var(--radius) * 1.4)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)}:is(.\*\:\[svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6>*):is(svg:not([class*=size-])){width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-\(--cell-radius\):last-child[data-selected=true] button{border-top-right-radius:var(--cell-radius);border-bottom-right-radius:var(--cell-radius)}.\[\&\:nth-child\(2\)\[data-selected\=true\]_button\]\:rounded-l-\(--cell-radius\):nth-child(2)[data-selected=true] button{border-top-left-radius:var(--cell-radius);border-bottom-left-radius:var(--cell-radius)}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-\[color-mix\(in_oklch\,var\(--muted\)\,var\(--foreground\)_5\%\)\]>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-\[color-mix\(in_oklch\,var\(--muted\)\,var\(--foreground\)_5\%\)\]>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklch,var(--muted),var(--foreground) 5%)}}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-\[color-mix\(in_oklch\,var\(--secondary\)\,var\(--foreground\)_5\%\)\]>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-\[color-mix\(in_oklch\,var\(--secondary\)\,var\(--foreground\)_5\%\)\]>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklch,var(--secondary),var(--foreground) 5%)}}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-\[oklch\(from_var\(--primary\)_0\.88_calc\(c\*0\.5\)_h\)\]>[data-slot=bubble-content]:is(button,a):hover{background-color:oklch(from var(--primary) .88 calc(c/2) h)}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-destructive\/20>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-destructive\/20>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-muted>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--muted)}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-primary\/80>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-primary\/80>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab,var(--primary) 80%,transparent)}}.\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:text-foreground>[data-slot=bubble-content]:is(button,a):hover{color:var(--foreground)}.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-\[oklch\(from_var\(--primary\)_0\.35_calc\(c\*0\.5\)_h\)\]:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:oklch(from var(--primary) .35 calc(c/2) h)}.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-destructive\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-destructive\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab,var(--destructive) 30%,transparent)}}.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-input\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-input\/30:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab,var(--input) 30%,transparent)}}.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-muted\/50:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.dark\:\[\&\>\[data-slot\=bubble-content\]\:is\(button\,a\)\:hover\]\:bg-muted\/50:is(.dark *)>[data-slot=bubble-content]:is(button,a):hover{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.\[\&\>button\]\:hidden>button{display:none}.has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3:has(>[data-align=block-end])>input{padding-top:calc(var(--spacing) * 3)}.has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3:has(>[data-align=block-start])>input{padding-bottom:calc(var(--spacing) * 3)}.has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pr-1\.5:has(>[data-align=inline-end])>input{padding-right:calc(var(--spacing) * 1.5)}.has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:pl-1\.5:has(>[data-align=inline-start])>input{padding-left:calc(var(--spacing) * 1.5)}.\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.\[\&\>span\]\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&\>span\]\:opacity-70>span{opacity:.7}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3\!>svg{width:calc(var(--spacing) * 3)!important;height:calc(var(--spacing) * 3)!important}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.group-has-data-\[size\=lg\]\/avatar-group\:\[\&\>svg\]\:size-5:is(:where(.group\/avatar-group):has([data-size=lg]) *)>svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.group-has-data-\[size\=sm\]\/avatar-group\:\[\&\>svg\]\:size-3:is(:where(.group\/avatar-group):has([data-size=sm]) *)>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.group-data-\[size\=default\]\/avatar\:\[\&\>svg\]\:size-2:is(:where(.group\/avatar)[data-size=default] *)>svg,.group-data-\[size\=lg\]\/avatar\:\[\&\>svg\]\:size-2:is(:where(.group\/avatar)[data-size=lg] *)>svg{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.group-data-\[size\=sm\]\/avatar\:\[\&\>svg\]\:hidden:is(:where(.group\/avatar)[data-size=sm] *)>svg{display:none}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5>svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4>svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing) * -2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing) * -2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[open]>.\[\[open\]\>\&\]\:rotate-180{rotate:180deg}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --scroll-fade-t{syntax:"";inherits:false;initial-value:0}@property --scroll-fade-b{syntax:"";inherits:false;initial-value:0}@property --scroll-fade-s{syntax:"";inherits:false;initial-value:0}@property --scroll-fade-e{syntax:"";inherits:false;initial-value:0}@property --scroll-fade-mask{syntax:"*";inherits:false}@property --shimmer-angle{syntax:"";inherits:true;initial-value:20deg}@property --shimmer-image{syntax:"*";inherits:false}@property --shimmer-text-fill{syntax:"*";inherits:false}@media(prefers-reduced-motion:reduce){.shimmer{-webkit-text-fill-color:currentColor;background-image:none;animation:none}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(55% .2 30);--primary-foreground:oklch(98% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(55% .2 30);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--radius:.625rem;--sidebar:oklch(97% .01 50);--sidebar-foreground:oklch(20% .02 30);--sidebar-primary:oklch(55% .2 30);--sidebar-primary-foreground:oklch(98% 0 0);--sidebar-accent:oklch(55% .2 30);--sidebar-accent-foreground:oklch(98% 0 0);--sidebar-border:oklch(90% .01 50);--sidebar-ring:oklch(55% .2 30)}.dark{--background:oklch(16% .02 30);--foreground:oklch(92% .01 50);--card:oklch(19% .02 30);--card-foreground:oklch(92% .01 50);--popover:oklch(19% .02 30);--popover-foreground:oklch(92% .01 50);--primary:oklch(63% .22 30);--primary-foreground:oklch(98% 0 0);--secondary:oklch(25% .02 30);--secondary-foreground:oklch(92% .01 50);--muted:oklch(25% .02 30);--muted-foreground:oklch(65% .02 40);--accent:oklch(25% .02 30);--accent-foreground:oklch(92% .01 50);--destructive:oklch(70.4% .191 22.216);--border:oklch(30% .02 30);--input:oklch(28% .02 30);--ring:oklch(63% .22 30);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--sidebar:oklch(12% .015 40);--sidebar-foreground:oklch(85% .01 50);--sidebar-primary:oklch(63% .22 30);--sidebar-primary-foreground:oklch(98% 0 0);--sidebar-accent:oklch(63% .22 30);--sidebar-accent-foreground:oklch(98% 0 0);--sidebar-border:oklch(24% .015 40);--sidebar-ring:oklch(63% .22 30)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}} diff --git a/adminui/assets/index-DFelzBez.js b/adminui/assets/index-DFelzBez.js deleted file mode 100644 index 30a3ceda..00000000 --- a/adminui/assets/index-DFelzBez.js +++ /dev/null @@ -1,488 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/login-CTvjzWeN.js","assets/vendor-react-j_G0Dyx0.js","assets/zod-YGny3e4W.js","assets/card-D3QxRGt-.js","assets/input-Bx5u8hTS.js","assets/useControlled-C_2SAunx.js","assets/useRegisterFieldControl-D_vrP_l5.js","assets/useLabelableId-D6-89JTk.js","assets/label-DeKRRvpz.js","assets/sms-login-form-CdajB3jU.js","assets/separator-D01NErsM.js","assets/vendor-xyflow-C2hOf6Vp.js","assets/vendor-xyflow-BZV40eAE.css","assets/admin-login-ciit2r_R.js","assets/theme-toggle-ClPnlKp9.js","assets/circle-alert-DGgaAjA1.js","assets/setup-U6SsDH-K.js","assets/tabs-I7xZXZiG.js","assets/eye-off-l8p8btM4.js","assets/eye-CDueZ4cg.js","assets/register-BHfwzeEf.js","assets/dashboard-DsgdvBI1.js","assets/vendor-charts-KgA3E3bV.js","assets/table-gihdE9_j.js","assets/dollar-sign-DoWHiaN9.js","assets/trending-up-DvzR4Zg7.js","assets/posts-CEcKegWC.js","assets/use-url-state-BBO3na5E.js","assets/useMutation-DgRiHz67.js","assets/badge-BvrzcoWP.js","assets/checkbox-ZiPbJKLR.js","assets/check-DUua1sBA.js","assets/FormContext-DtOchBZg.js","assets/useAriaLabelledBy-DZQntSuy.js","assets/types-C-xO67t8.js","assets/alert-dialog-B-lBTnCF.js","assets/pagination-bar-DD_HkQGa.js","assets/chevron-left-CbJIXgY2.js","assets/table-skeleton-BtLTAVzI.js","assets/empty-state-D0NvGCXa.js","assets/list-filter-uozkR8Of.js","assets/select-Dc4_9PNt.js","assets/chevron-up-BHyyZ98X.js","assets/send-CYerJHOr.js","assets/archive-BygiklY2.js","assets/trash-2-DqWZBWAo.js","assets/plus-DK-V8p7I.js","assets/ellipsis-vertical-UHYLUh-c.js","assets/pencil-BgXbFsNu.js","assets/categories-XBjS-cZ6.js","assets/textarea-Daa6n4S-.js","assets/category-tree-select-T_ffRVAe.js","assets/folder-open-DCsNiQiU.js","assets/file-CHesjbVs.js","assets/tree-Da9oQw3-.js","assets/vendor-md-editor-vOqM56Ks.js","assets/vendor-md-editor-5RsN_0Ue.css","assets/tags-ClhbBgMx.js","assets/dialog-Bx55NyOm.js","assets/comments-C6Jdf3VS.js","assets/circle-check-big-DuqRRx-0.js","assets/circle-x-B2QO34ya.js","assets/media-lpyyiSsB.js","assets/media-utils-CAWMicYD.js","assets/type-SsZV2Os-.js","assets/upload-Cqpometq.js","assets/copy-BcCPCJtg.js","assets/download-DA3qByua.js","assets/layout-grid-DF9F3GnA.js","assets/list-D5KGVMom.js","assets/pages-CtLAin1f.js","assets/page-CUz9IA25.js","assets/content-types-Ctc8KdB3.js","assets/api-config-sheet-f4EYqFLf.js","assets/switch-DLTIF0BW.js","assets/shield-DVprApaA.js","assets/save-Dw1cTtUv.js","assets/content-types-builder-DyPH0rjU.js","assets/save-status-phbiF6i3.js","assets/link-B77fN-f1.js","assets/lock-Cc0UXHyt.js","assets/calendar-CQckEvY8.js","assets/braces-CSqrcTDW.js","assets/content-types-list-C_4X3oOo.js","assets/field-renderer-B16JYsaw.js","assets/multi-media-upload-CTj_w8wW.js","assets/list-checks-BObmEj-I.js","assets/grip-vertical-BHYRkqhd.js","assets/shuffle-DaVyXqDN.js","assets/arrow-right-jJ6PUH_T.js","assets/users-9tweeppy.js","assets/user-detail-BPGZN2zG.js","assets/plugins-Cn8bJtYI.js","assets/power-Bw66vTVi.js","assets/refresh-cw-CFztQf6i.js","assets/plugin-detail-oToj-3uE.js","assets/rbac-D7jwUF0q.js","assets/use-resources-x9RHYxGB.js","assets/crons-DCMpOlFW.js","assets/jobs-CD2htzYv.js","assets/eraser-CE8V89hp.js","assets/rotate-ccw-DVe8kGkZ.js","assets/cron-form-6S0gMt66.js","assets/code-editor-DZgggbjW.js","assets/cron-detail-C5XnW_mt.js","assets/tenants-b5M1l3ts.js","assets/webhooks-C4vTzyvV.js","assets/chevrons-up-down-CYWVywcp.js","assets/tokens-9GjWXLkl.js","assets/calendar-CgYg3JyR.js","assets/workflows-YjBVJWP7.js","assets/play-yg6esoXP.js","assets/workflow-instances-C7tBCe0S.js","assets/audit-BDVWTpZ-.js","assets/date-range-picker-C5krwo0v.js","assets/options-B4GWpcal.js","assets/reusable-blocks-D323rzM5.js","assets/products-3CfG77u4.js","assets/product-categories-BTffm4IS.js","assets/orders-D7VRIl02.js","assets/ban-BBupK94g.js","assets/orders-detail-CJ3Lgk89.js","assets/payments-C5r96p-9.js","assets/payment-orders-uX72kAwE.js","assets/payment-transactions-BkShPBZn.js","assets/currencies-Cvd8gjrn.js","assets/redemption-codes-BO-RQvTB.js","assets/confirm-delete-dialog-QxeOrQYk.js","assets/user-picker-DJ1JGguq.js","assets/wallets-_LFknhlz.js","assets/wallet-transactions-zNqQTA73.js","assets/product-comments-B0sn7RVM.js","assets/coupons-D5weDO7O.js","assets/shipping-templates-DiOgbtdp.js","assets/plans-BAbmwqmK.js","assets/channels-B427Ras0.js","assets/channel-form-Bdz676vK.js","assets/receipts-D2Zdrwqj.js","assets/receipt-detail-J5r0aNYX.js","assets/api-clients-BZR4SdcI.js","assets/flows-DL1TuZab.js","assets/use-workflow-events-8T1a_Ah8.js","assets/step-logs-BeP2bpGZ.js","assets/await-resume-panel-ZjDeWsP0.js","assets/square-bbq5PKnt.js","assets/flows-editor-Cepm-OB8.js","assets/zoom-out-qtMkh8Zn.js","assets/model-select-PQ1YHedf.js","assets/database-CAtPG7tU.js","assets/hourglass-B2rv03q9.js","assets/instances-DxsvFlL3.js","assets/apis-CKBjtQ2G.js","assets/api-logs-CbhV8fek.js","assets/triggers--BJ6LAQE.js","assets/agents-BgHZzQOZ.js","assets/brain-Cq0xTcCG.js","assets/channels-CLsZn6Bq.js","assets/models-EUdakrZi.js","assets/logs-CecBOuaz.js","assets/tokens-B_Ec35Hx.js","assets/playground-CzXB5klq.js","assets/bubble-BcyAFuvd.js","assets/brain-circuit-B84LIert.js","assets/kbs-DlTjVkNX.js","assets/docs-BwIG57iY.js","assets/chunks-Dx4M8_6n.js","assets/images-C95CSzy2.js","assets/reader-B9Iyhrux.js","assets/chunker-preview-BgLVUwLI.js","assets/ask-playground-D4sFZjTW.js","assets/wiki-B9hrJ6s-.js","assets/wiki-detail-CqXGx4uO.js","assets/faqs-DVukXtvY.js","assets/gaps-BsaBDijc.js","assets/diagnostics-CwvJdmqM.js","assets/search-test-CBI4aUcK.js","assets/engines-Dkf3iWcQ.js","assets/tokens-WYo8AaJH.js","assets/convert-BA0j83AZ.js","assets/recognize-C31mntR-.js","assets/usage-C8DeBsOL.js","assets/agents-form-CE52mLyQ.js","assets/ai-tool-catalog-B8AGHhOB.js","assets/agents-usage-CgNqFA_B.js","assets/agents-memories-D7gpLj3u.js","assets/skills-BLHesoQS.js","assets/tools-DQxO6M3i.js","assets/sessions-ORpueCGk.js","assets/message-row-DvhLdeEC.js","assets/playground-DyICYlHn.js","assets/posts-new-COd_sbeT.js","assets/tag-input-mF6yFz-p.js","assets/posts-edit-D-9x1lXM.js","assets/pages-new-88PcJUjv.js","assets/index-CqbPRAud.js","assets/pages-edit-BcYQFL2U.js","assets/content-types-new-CP2kBubL.js","assets/content-types-edit-CJhRxbZL.js","assets/workflow-editor-eDPyfyJy.js","assets/products-new-iqMEABw8.js","assets/products-edit-Bd4LaxbH.js","assets/product-categories-new-DXJoM8yC.js","assets/product-categories-edit-BrGO25pc.js","assets/profile-CglcYhrI.js"])))=>i.map(i=>d[i]); -var Eg=Object.defineProperty;var Vl=t=>{throw TypeError(t)};var Rg=(t,e,o)=>e in t?Eg(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var Ue=(t,e,o)=>Rg(t,typeof e!="symbol"?e+"":e,o),Xs=(t,e,o)=>e.has(t)||Vl("Cannot "+o);var P=(t,e,o)=>(Xs(t,e,"read from private field"),o?o.call(t):e.get(t)),Te=(t,e,o)=>e.has(t)?Vl("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,o),ue=(t,e,o,n)=>(Xs(t,e,"write to private field"),n?n.call(t,o):e.set(t,o),o),Ne=(t,e,o)=>(Xs(t,e,"access private method"),o);var ja=(t,e,o,n)=>({set _(a){ue(t,e,a,o)},get _(){return P(t,e,n)}});import{f as c,j as l,R as oe,b as Md,a as Ts,r as Vt,i as Ig,l as Fg,u as Mg,L as Og,N as Ir,O as Ng,e as jg,d as G,c as Lg,B as _g}from"./vendor-react-j_G0Dyx0.js";import{r as Ug,w as zg}from"./vendor-xyflow-C2hOf6Vp.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function o(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=o(a);fetch(a.href,s)}})();const Bg="modulepreload",Vg=function(t){return"/admin/"+t},Hl={},Z=function(e,o,n){let a=Promise.resolve();if(o&&o.length>0){let r=function(d){return Promise.all(d.map(p=>Promise.resolve(p).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};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"));a=r(o.map(d=>{if(d=Vg(d),d in Hl)return;Hl[d]=!0;const p=d.endsWith(".css"),u=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${u}`))return;const g=document.createElement("link");if(g.rel=p?"stylesheet":Bg,p||(g.as="script"),g.crossOrigin="",g.href=d,m&&g.setAttribute("nonce",m),document.head.appendChild(g),p)return new Promise((y,f)=>{g.addEventListener("load",y),g.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${d}`)))})}))}function s(r){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=r,window.dispatchEvent(i),!i.defaultPrevented)throw r}return a.then(r=>{for(const i of r||[])i.status==="rejected"&&s(i.reason);return e().catch(s)})};var Ta=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(){}},Yo,vo,Fn,Td,Hg=(Td=class extends Ta{constructor(){super();Te(this,Yo);Te(this,vo);Te(this,Fn);ue(this,Fn,e=>{if(typeof window<"u"&&window.addEventListener){const o=()=>e();return window.addEventListener("visibilitychange",o,!1),()=>{window.removeEventListener("visibilitychange",o)}}})}onSubscribe(){P(this,vo)||this.setEventListener(P(this,Fn))}onUnsubscribe(){var e;this.hasListeners()||((e=P(this,vo))==null||e.call(this),ue(this,vo,void 0))}setEventListener(e){var o;ue(this,Fn,e),(o=P(this,vo))==null||o.call(this),ue(this,vo,e(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()}))}setFocused(e){P(this,Yo)!==e&&(ue(this,Yo,e),this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(o=>{o(e)})}isFocused(){var e;return typeof P(this,Yo)=="boolean"?P(this,Yo):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},Yo=new WeakMap,vo=new WeakMap,Fn=new WeakMap,Td),hi=new Hg,qg={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t),setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)},Co,fi,Sd,Wg=(Sd=class{constructor(){Te(this,Co,qg);Te(this,fi,!1)}setTimeoutProvider(t){ue(this,Co,t)}setTimeout(t,e){return P(this,Co).setTimeout(t,e)}clearTimeout(t){P(this,Co).clearTimeout(t)}setInterval(t,e){return P(this,Co).setInterval(t,e)}clearInterval(t){P(this,Co).clearInterval(t)}},Co=new WeakMap,fi=new WeakMap,Sd),$o=new Wg;function Kg(t){setTimeout(t,0)}var $g=typeof window>"u"||"Deno"in globalThis;function wt(){}function Gg(t,e){return typeof t=="function"?t(e):t}function Fr(t){return typeof t=="number"&&t>=0&&t!==1/0}function Od(t,e){return Math.max(t+(e||0)-Date.now(),0)}function Ro(t,e){return typeof t=="function"?t(e):t}function It(t,e){return typeof t=="function"?t(e):t}function ql(t,e){const{type:o="all",exact:n,fetchStatus:a,predicate:s,queryKey:r,stale:i}=t;if(r){if(n){if(e.queryHash!==bi(r,e.options))return!1}else if(!da(e.queryKey,r))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||a&&a!==e.state.fetchStatus||s&&!s(e))}function Wl(t,e){const{exact:o,status:n,predicate:a,mutationKey:s}=t;if(s){if(!e.options.mutationKey)return!1;if(o){if(ca(e.options.mutationKey)!==ca(s))return!1}else if(!da(e.options.mutationKey,s))return!1}return!(n&&e.state.status!==n||a&&!a(e))}function bi(t,e){return((e==null?void 0:e.queryKeyHashFn)||ca)(t)}function ca(t){return JSON.stringify(t,(e,o)=>Or(o)?Object.keys(o).sort().reduce((n,a)=>(n[a]=o[a],n),{}):o)}function da(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(e).every(o=>da(t[o],e[o])):!1}var Jg=Object.prototype.hasOwnProperty;function Nd(t,e,o=0){if(t===e)return t;if(o>500)return e;const n=Kl(t)&&Kl(e);if(!n&&!(Or(t)&&Or(e)))return e;const s=(n?t:Object.keys(t)).length,r=n?e:Object.keys(e),i=r.length,m=n?new Array(i):{};let d=0;for(let p=0;p{$o.setTimeout(e,t)})}function Nr(t,e,o){return typeof o.structuralSharing=="function"?o.structuralSharing(t,e):o.structuralSharing!==!1?Nd(t,e):e}function Yg(t,e,o=0){const n=[...t,e];return o&&n.length>o?n.slice(1):n}function Zg(t,e,o=0){const n=[e,...t];return o&&n.length>o?n.slice(0,-1):n}var yi=Symbol();function jd(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 Ld(t,e){return typeof t=="function"?t(...e):!!t}function Xg(t,e,o){let n=!1,a;return Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(a??(a=e()),n||(n=!0,a.aborted?o():a.addEventListener("abort",o,{once:!0})),a)}),t}var ua=(()=>{let t=()=>$g;return{isServer(){return t()},setIsServer(e){t=e}}})();function jr(){let t,e;const o=new Promise((a,s)=>{t=a,e=s});o.status="pending",o.catch(()=>{});function n(a){Object.assign(o,a),delete o.resolve,delete o.reject}return o.resolve=a=>{n({status:"fulfilled",value:a}),t(a)},o.reject=a=>{n({status:"rejected",reason:a}),e(a)},o}var ef=Kg;function tf(){let t=[],e=0,o=i=>{i()},n=i=>{i()},a=ef;const s=i=>{e?t.push(i):a(()=>{o(i)})},r=()=>{const i=t;t=[],i.length&&a(()=>{n(()=>{i.forEach(m=>{o(m)})})})};return{batch:i=>{let m;e++;try{m=i()}finally{e--,e||r()}return m},batchCalls:i=>(...m)=>{s(()=>{i(...m)})},schedule:s,setNotifyFunction:i=>{o=i},setBatchNotifyFunction:i=>{n=i},setScheduler:i=>{a=i}}}var lt=tf(),Mn,To,On,Dd,of=(Dd=class extends Ta{constructor(){super();Te(this,Mn,!0);Te(this,To);Te(this,On);ue(this,On,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(){P(this,To)||this.setEventListener(P(this,On))}onUnsubscribe(){var e;this.hasListeners()||((e=P(this,To))==null||e.call(this),ue(this,To,void 0))}setEventListener(e){var o;ue(this,On,e),(o=P(this,To))==null||o.call(this),ue(this,To,e(this.setOnline.bind(this)))}setOnline(e){P(this,Mn)!==e&&(ue(this,Mn,e),this.listeners.forEach(n=>{n(e)}))}isOnline(){return P(this,Mn)}},Mn=new WeakMap,To=new WeakMap,On=new WeakMap,Dd),is=new of;function nf(t){return Math.min(1e3*2**t,3e4)}function _d(t){return(t??"online")==="online"?is.isOnline():!0}var Lr=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function Ud(t){let e=!1,o=0,n;const a=jr(),s=()=>a.status!=="pending",r=b=>{var h;if(!s()){const w=new Lr(b);g(w),(h=t.onCancel)==null||h.call(t,w)}},i=()=>{e=!0},m=()=>{e=!1},d=()=>hi.isFocused()&&(t.networkMode==="always"||is.isOnline())&&t.canRun(),p=()=>_d(t.networkMode)&&t.canRun(),u=b=>{s()||(n==null||n(),a.resolve(b))},g=b=>{s()||(n==null||n(),a.reject(b))},y=()=>new Promise(b=>{var h;n=w=>{(s()||d())&&b(w)},(h=t.onPause)==null||h.call(t)}).then(()=>{var b;n=void 0,s()||(b=t.onContinue)==null||b.call(t)}),f=()=>{if(s())return;let b;const h=o===0?t.initialPromise:void 0;try{b=h??t.fn()}catch(w){b=Promise.reject(w)}Promise.resolve(b).then(u).catch(w=>{var S;if(s())return;const C=t.retry??(ua.isServer()?0:3),v=t.retryDelay??nf,T=typeof v=="function"?v(o,w):v,k=C===!0||typeof C=="number"&&od()?void 0:y()).then(()=>{e?g(w):f()})})};return{promise:a,status:()=>a.status,cancel:r,continue:()=>(n==null||n(),a),cancelRetry:i,continueRetry:m,canStart:p,start:()=>(p()?f():y().then(f),a)}}var Zo,Ad,zd=(Ad=class{constructor(){Te(this,Zo)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Fr(this.gcTime)&&ue(this,Zo,$o.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(ua.isServer()?1/0:300*1e3))}clearGcTimeout(){P(this,Zo)!==void 0&&($o.clearTimeout(P(this,Zo)),ue(this,Zo,void 0))}},Zo=new WeakMap,Ad);function af(t){return{onFetch:(e,o)=>{var p,u,g,y,f;const n=e.options,a=(g=(u=(p=e.fetchOptions)==null?void 0:p.meta)==null?void 0:u.fetchMore)==null?void 0:g.direction,s=((y=e.state.data)==null?void 0:y.pages)||[],r=((f=e.state.data)==null?void 0:f.pageParams)||[];let i={pages:[],pageParams:[]},m=0;const d=async()=>{let b=!1;const h=v=>{Xg(v,()=>e.signal,()=>b=!0)},w=jd(e.options,e.fetchOptions),C=async(v,T,k)=>{if(b)return Promise.reject(e.signal.reason);if(T==null&&v.pages.length)return Promise.resolve(v);const A=(()=>{const B={client:e.client,queryKey:e.queryKey,pageParam:T,direction:k?"backward":"forward",meta:e.options.meta};return h(B),B})(),D=await w(A),{maxPages:R}=e.options,I=k?Zg:Yg;return{pages:I(v.pages,D,R),pageParams:I(v.pageParams,T,R)}};if(a&&s.length){const v=a==="backward",T=v?sf:Gl,k={pages:s,pageParams:r},S=T(n,k);i=await C(k,S,v)}else{const v=t??s.length;do{const T=m===0?r[0]??n.initialPageParam:Gl(n,i);if(m>0&&T==null)break;i=await C(i,T),m++}while(m{var b,h;return(h=(b=e.options).persister)==null?void 0:h.call(b,d,{client:e.client,queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},o)}:e.fetchFn=d}}}function Gl(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 sf(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 Nn,Xo,jn,jt,en,rt,ya,tn,Rt,Bd,ro,xd,rf=(xd=class extends zd{constructor(e){super();Te(this,Rt);Te(this,Nn);Te(this,Xo);Te(this,jn);Te(this,jt);Te(this,en);Te(this,rt);Te(this,ya);Te(this,tn);ue(this,tn,!1),ue(this,ya,e.defaultOptions),this.setOptions(e.options),this.observers=[],ue(this,en,e.client),ue(this,jt,P(this,en).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,ue(this,Xo,Ql(this.options)),this.state=e.state??P(this,Xo),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return P(this,Nn)}get promise(){var e;return(e=P(this,rt))==null?void 0:e.promise}setOptions(e){if(this.options={...P(this,ya),...e},e!=null&&e._type&&ue(this,Nn,e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const o=Ql(this.options);o.data!==void 0&&(this.setState(Jl(o.data,o.dataUpdatedAt)),ue(this,Xo,o))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&P(this,jt).remove(this)}setData(e,o){const n=Nr(this.state.data,e,this.options);return Ne(this,Rt,ro).call(this,{data:n,type:"success",dataUpdatedAt:o==null?void 0:o.updatedAt,manual:o==null?void 0:o.manual}),n}setState(e){Ne(this,Rt,ro).call(this,{type:"setState",state:e})}cancel(e){var n,a;const o=(n=P(this,rt))==null?void 0:n.promise;return(a=P(this,rt))==null||a.cancel(e),o?o.then(wt).catch(wt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return P(this,Xo)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>It(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=>Ro(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:!Od(this.state.dataUpdatedAt,e)}onFocus(){var o;const e=this.observers.find(n=>n.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(o=P(this,rt))==null||o.continue()}onOnline(){var o;const e=this.observers.find(n=>n.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(o=P(this,rt))==null||o.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),P(this,jt).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(o=>o!==e),this.observers.length||(P(this,rt)&&(P(this,tn)||Ne(this,Rt,Bd).call(this)?P(this,rt).cancel({revert:!0}):P(this,rt).cancelRetry()),this.scheduleGc()),P(this,jt).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Ne(this,Rt,ro).call(this,{type:"invalidate"})}async fetch(e,o){var d,p,u,g,y,f,b,h,w,C,v;if(this.state.fetchStatus!=="idle"&&((d=P(this,rt))==null?void 0:d.status())!=="rejected"){if(this.state.data!==void 0&&(o!=null&&o.cancelRefetch))this.cancel({silent:!0});else if(P(this,rt))return P(this,rt).continueRetry(),P(this,rt).promise}if(e&&this.setOptions(e),!this.options.queryFn){const T=this.observers.find(k=>k.options.queryFn);T&&this.setOptions(T.options)}const n=new AbortController,a=T=>{Object.defineProperty(T,"signal",{enumerable:!0,get:()=>(ue(this,tn,!0),n.signal)})},s=()=>{const T=jd(this.options,o),S=(()=>{const A={client:P(this,en),queryKey:this.queryKey,meta:this.meta};return a(A),A})();return ue(this,tn,!1),this.options.persister?this.options.persister(T,S,this):T(S)},i=(()=>{const T={fetchOptions:o,options:this.options,queryKey:this.queryKey,client:P(this,en),state:this.state,fetchFn:s};return a(T),T})(),m=P(this,Nn)==="infinite"?af(this.options.pages):this.options.behavior;m==null||m.onFetch(i,this),ue(this,jn,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((p=i.fetchOptions)==null?void 0:p.meta))&&Ne(this,Rt,ro).call(this,{type:"fetch",meta:(u=i.fetchOptions)==null?void 0:u.meta}),ue(this,rt,Ud({initialPromise:o==null?void 0:o.initialPromise,fn:i.fetchFn,onCancel:T=>{T instanceof Lr&&T.revert&&this.setState({...P(this,jn),fetchStatus:"idle"}),n.abort()},onFail:(T,k)=>{Ne(this,Rt,ro).call(this,{type:"failed",failureCount:T,error:k})},onPause:()=>{Ne(this,Rt,ro).call(this,{type:"pause"})},onContinue:()=>{Ne(this,Rt,ro).call(this,{type:"continue"})},retry:i.options.retry,retryDelay:i.options.retryDelay,networkMode:i.options.networkMode,canRun:()=>!0}));try{const T=await P(this,rt).start();if(T===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(T),(y=(g=P(this,jt).config).onSuccess)==null||y.call(g,T,this),(b=(f=P(this,jt).config).onSettled)==null||b.call(f,T,this.state.error,this),T}catch(T){if(T instanceof Lr){if(T.silent)return P(this,rt).promise;if(T.revert){if(this.state.data===void 0)throw T;return this.state.data}}throw Ne(this,Rt,ro).call(this,{type:"error",error:T}),(w=(h=P(this,jt).config).onError)==null||w.call(h,T,this),(v=(C=P(this,jt).config).onSettled)==null||v.call(C,this.state.data,T,this),T}finally{this.scheduleGc()}}},Nn=new WeakMap,Xo=new WeakMap,jn=new WeakMap,jt=new WeakMap,en=new WeakMap,rt=new WeakMap,ya=new WeakMap,tn=new WeakMap,Rt=new WeakSet,Bd=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},ro=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,...Vd(n.data,this.options),fetchMeta:e.meta??null};case"success":const a={...n,...Jl(e.data,e.dataUpdatedAt),dataUpdateCount:n.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return ue(this,jn,e.manual?a:void 0),a;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()}),P(this,jt).notify({query:this,type:"updated",action:e})})},xd);function Vd(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:_d(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function Jl(t,e){return{data:t,dataUpdatedAt:e??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Ql(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 yt,je,ka,mt,on,Ln,lo,So,wa,_n,Un,nn,an,Do,zn,Ve,aa,_r,Ur,zr,Br,Vr,Hr,qr,Hd,Pd,lf=(Pd=class extends Ta{constructor(e,o){super();Te(this,Ve);Te(this,yt);Te(this,je);Te(this,ka);Te(this,mt);Te(this,on);Te(this,Ln);Te(this,lo);Te(this,So);Te(this,wa);Te(this,_n);Te(this,Un);Te(this,nn);Te(this,an);Te(this,Do);Te(this,zn,new Set);this.options=o,ue(this,yt,e),ue(this,So,null),ue(this,lo,jr()),this.bindMethods(),this.setOptions(o)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(P(this,je).addObserver(this),Yl(P(this,je),this.options)?Ne(this,Ve,aa).call(this):this.updateResult(),Ne(this,Ve,Br).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Wr(P(this,je),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Wr(P(this,je),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Ne(this,Ve,Vr).call(this),Ne(this,Ve,Hr).call(this),P(this,je).removeObserver(this)}setOptions(e){const o=this.options,n=P(this,je);if(this.options=P(this,yt).defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof It(this.options.enabled,P(this,je))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Ne(this,Ve,qr).call(this),P(this,je).setOptions(this.options),o._defaulted&&!Mr(this.options,o)&&P(this,yt).getQueryCache().notify({type:"observerOptionsUpdated",query:P(this,je),observer:this});const a=this.hasListeners();a&&Zl(P(this,je),n,this.options,o)&&Ne(this,Ve,aa).call(this),this.updateResult(),a&&(P(this,je)!==n||It(this.options.enabled,P(this,je))!==It(o.enabled,P(this,je))||Ro(this.options.staleTime,P(this,je))!==Ro(o.staleTime,P(this,je)))&&Ne(this,Ve,_r).call(this);const s=Ne(this,Ve,Ur).call(this);a&&(P(this,je)!==n||It(this.options.enabled,P(this,je))!==It(o.enabled,P(this,je))||s!==P(this,Do))&&Ne(this,Ve,zr).call(this,s)}getOptimisticResult(e){const o=P(this,yt).getQueryCache().build(P(this,yt),e),n=this.createResult(o,e);return df(this,n)&&(ue(this,mt,n),ue(this,Ln,this.options),ue(this,on,P(this,je).state)),n}getCurrentResult(){return P(this,mt)}trackResult(e,o){return new Proxy(e,{get:(n,a)=>(this.trackProp(a),o==null||o(a),a==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&P(this,lo).status==="pending"&&P(this,lo).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(n,a))})}trackProp(e){P(this,zn).add(e)}getCurrentQuery(){return P(this,je)}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const o=P(this,yt).defaultQueryOptions(e),n=P(this,yt).getQueryCache().build(P(this,yt),o);return n.fetch().then(()=>this.createResult(n,o))}fetch(e){return Ne(this,Ve,aa).call(this,{...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),P(this,mt)))}createResult(e,o){var R;const n=P(this,je),a=this.options,s=P(this,mt),r=P(this,on),i=P(this,Ln),d=e!==n?e.state:P(this,ka),{state:p}=e;let u={...p},g=!1,y;if(o._optimisticResults){const I=this.hasListeners(),B=!I&&Yl(e,o),M=I&&Zl(e,n,o,a);(B||M)&&(u={...u,...Vd(p.data,e.options)}),o._optimisticResults==="isRestoring"&&(u.fetchStatus="idle")}let{error:f,errorUpdatedAt:b,status:h}=u;y=u.data;let w=!1;if(o.placeholderData!==void 0&&y===void 0&&h==="pending"){let I;s!=null&&s.isPlaceholderData&&o.placeholderData===(i==null?void 0:i.placeholderData)?(I=s.data,w=!0):I=typeof o.placeholderData=="function"?o.placeholderData((R=P(this,Un))==null?void 0:R.state.data,P(this,Un)):o.placeholderData,I!==void 0&&(h="success",y=Nr(s==null?void 0:s.data,I,o),g=!0)}if(o.select&&y!==void 0&&!w)if(s&&y===(r==null?void 0:r.data)&&o.select===P(this,wa))y=P(this,_n);else try{ue(this,wa,o.select),y=o.select(y),y=Nr(s==null?void 0:s.data,y,o),ue(this,_n,y),ue(this,So,null)}catch(I){ue(this,So,I)}P(this,So)&&(f=P(this,So),y=P(this,_n),b=Date.now(),h="error");const C=u.fetchStatus==="fetching",v=h==="pending",T=h==="error",k=v&&C,S=y!==void 0,D={status:h,fetchStatus:u.fetchStatus,isPending:v,isSuccess:h==="success",isError:T,isInitialLoading:k,isLoading:k,data:y,dataUpdatedAt:u.dataUpdatedAt,error:f,errorUpdatedAt:b,failureCount:u.fetchFailureCount,failureReason:u.fetchFailureReason,errorUpdateCount:u.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:u.dataUpdateCount>d.dataUpdateCount||u.errorUpdateCount>d.errorUpdateCount,isFetching:C,isRefetching:C&&!v,isLoadingError:T&&!S,isPaused:u.fetchStatus==="paused",isPlaceholderData:g,isRefetchError:T&&S,isStale:ki(e,o),refetch:this.refetch,promise:P(this,lo),isEnabled:It(o.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const I=D.data!==void 0,B=D.status==="error"&&!I,M=O=>{B?O.reject(D.error):I&&O.resolve(D.data)},x=()=>{const O=ue(this,lo,D.promise=jr());M(O)},W=P(this,lo);switch(W.status){case"pending":e.queryHash===n.queryHash&&M(W);break;case"fulfilled":(B||D.data!==W.value)&&x();break;case"rejected":(!B||D.error!==W.reason)&&x();break}}return D}updateResult(){const e=P(this,mt),o=this.createResult(P(this,je),this.options);if(ue(this,on,P(this,je).state),ue(this,Ln,this.options),P(this,on).data!==void 0&&ue(this,Un,P(this,je)),Mr(o,e))return;ue(this,mt,o);const n=()=>{if(!e)return!0;const{notifyOnChangeProps:a}=this.options,s=typeof a=="function"?a():a;if(s==="all"||!s&&!P(this,zn).size)return!0;const r=new Set(s??P(this,zn));return this.options.throwOnError&&r.add("error"),Object.keys(P(this,mt)).some(i=>{const m=i;return P(this,mt)[m]!==e[m]&&r.has(m)})};Ne(this,Ve,Hd).call(this,{listeners:n()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Ne(this,Ve,Br).call(this)}},yt=new WeakMap,je=new WeakMap,ka=new WeakMap,mt=new WeakMap,on=new WeakMap,Ln=new WeakMap,lo=new WeakMap,So=new WeakMap,wa=new WeakMap,_n=new WeakMap,Un=new WeakMap,nn=new WeakMap,an=new WeakMap,Do=new WeakMap,zn=new WeakMap,Ve=new WeakSet,aa=function(e){Ne(this,Ve,qr).call(this);let o=P(this,je).fetch(this.options,e);return e!=null&&e.throwOnError||(o=o.catch(wt)),o},_r=function(){Ne(this,Ve,Vr).call(this);const e=Ro(this.options.staleTime,P(this,je));if(ua.isServer()||P(this,mt).isStale||!Fr(e))return;const n=Od(P(this,mt).dataUpdatedAt,e)+1;ue(this,nn,$o.setTimeout(()=>{P(this,mt).isStale||this.updateResult()},n))},Ur=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(P(this,je)):this.options.refetchInterval)??!1},zr=function(e){Ne(this,Ve,Hr).call(this),ue(this,Do,e),!(ua.isServer()||It(this.options.enabled,P(this,je))===!1||!Fr(P(this,Do))||P(this,Do)===0)&&ue(this,an,$o.setInterval(()=>{(this.options.refetchIntervalInBackground||hi.isFocused())&&Ne(this,Ve,aa).call(this)},P(this,Do)))},Br=function(){Ne(this,Ve,_r).call(this),Ne(this,Ve,zr).call(this,Ne(this,Ve,Ur).call(this))},Vr=function(){P(this,nn)!==void 0&&($o.clearTimeout(P(this,nn)),ue(this,nn,void 0))},Hr=function(){P(this,an)!==void 0&&($o.clearInterval(P(this,an)),ue(this,an,void 0))},qr=function(){const e=P(this,yt).getQueryCache().build(P(this,yt),this.options);if(e===P(this,je))return;const o=P(this,je);ue(this,je,e),ue(this,ka,e.state),this.hasListeners()&&(o==null||o.removeObserver(this),e.addObserver(this))},Hd=function(e){lt.batch(()=>{e.listeners&&this.listeners.forEach(o=>{o(P(this,mt))}),P(this,yt).getQueryCache().notify({query:P(this,je),type:"observerResultsUpdated"})})},Pd);function cf(t,e){return It(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&It(e.retryOnMount,t)===!1)}function Yl(t,e){return cf(t,e)||t.state.data!==void 0&&Wr(t,e,e.refetchOnMount)}function Wr(t,e,o){if(It(e.enabled,t)!==!1&&Ro(e.staleTime,t)!=="static"){const n=typeof o=="function"?o(t):o;return n==="always"||n!==!1&&ki(t,e)}return!1}function Zl(t,e,o,n){return(t!==e||It(n.enabled,t)===!1)&&(!o.suspense||t.state.status!=="error")&&ki(t,o)}function ki(t,e){return It(e.enabled,t)!==!1&&t.isStaleByTime(Ro(e.staleTime,t))}function df(t,e){return!Mr(t.getCurrentResult(),e)}var va,Jt,dt,sn,Qt,ko,Ed,uf=(Ed=class extends zd{constructor(e){super();Te(this,Qt);Te(this,va);Te(this,Jt);Te(this,dt);Te(this,sn);ue(this,va,e.client),this.mutationId=e.mutationId,ue(this,dt,e.mutationCache),ue(this,Jt,[]),this.state=e.state||pf(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){P(this,Jt).includes(e)||(P(this,Jt).push(e),this.clearGcTimeout(),P(this,dt).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){ue(this,Jt,P(this,Jt).filter(o=>o!==e)),this.scheduleGc(),P(this,dt).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){P(this,Jt).length||(this.state.status==="pending"?this.scheduleGc():P(this,dt).remove(this))}continue(){var e;return((e=P(this,sn))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var r,i,m,d,p,u,g,y,f,b,h,w,C,v,T,k,S,A;const o=()=>{Ne(this,Qt,ko).call(this,{type:"continue"})},n={client:P(this,va),meta:this.options.meta,mutationKey:this.options.mutationKey};ue(this,sn,Ud({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(new Error("No mutationFn found")),onFail:(D,R)=>{Ne(this,Qt,ko).call(this,{type:"failed",failureCount:D,error:R})},onPause:()=>{Ne(this,Qt,ko).call(this,{type:"pause"})},onContinue:o,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>P(this,dt).canRun(this)}));const a=this.state.status==="pending",s=!P(this,sn).canStart();try{if(a)o();else{Ne(this,Qt,ko).call(this,{type:"pending",variables:e,isPaused:s}),P(this,dt).config.onMutate&&await P(this,dt).config.onMutate(e,this,n);const R=await((i=(r=this.options).onMutate)==null?void 0:i.call(r,e,n));R!==this.state.context&&Ne(this,Qt,ko).call(this,{type:"pending",context:R,variables:e,isPaused:s})}const D=await P(this,sn).start();return await((d=(m=P(this,dt).config).onSuccess)==null?void 0:d.call(m,D,e,this.state.context,this,n)),await((u=(p=this.options).onSuccess)==null?void 0:u.call(p,D,e,this.state.context,n)),await((y=(g=P(this,dt).config).onSettled)==null?void 0:y.call(g,D,null,this.state.variables,this.state.context,this,n)),await((b=(f=this.options).onSettled)==null?void 0:b.call(f,D,null,e,this.state.context,n)),Ne(this,Qt,ko).call(this,{type:"success",data:D}),D}catch(D){try{await((w=(h=P(this,dt).config).onError)==null?void 0:w.call(h,D,e,this.state.context,this,n))}catch(R){Promise.reject(R)}try{await((v=(C=this.options).onError)==null?void 0:v.call(C,D,e,this.state.context,n))}catch(R){Promise.reject(R)}try{await((k=(T=P(this,dt).config).onSettled)==null?void 0:k.call(T,void 0,D,this.state.variables,this.state.context,this,n))}catch(R){Promise.reject(R)}try{await((A=(S=this.options).onSettled)==null?void 0:A.call(S,void 0,D,e,this.state.context,n))}catch(R){Promise.reject(R)}throw Ne(this,Qt,ko).call(this,{type:"error",error:D}),D}finally{P(this,dt).runNext(this)}}},va=new WeakMap,Jt=new WeakMap,dt=new WeakMap,sn=new WeakMap,Qt=new WeakSet,ko=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(()=>{P(this,Jt).forEach(n=>{n.onMutationUpdate(e)}),P(this,dt).notify({mutation:this,type:"updated",action:e})})},Ed);function pf(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var co,Bt,Ca,Rd,mf=(Rd=class extends Ta{constructor(e={}){super();Te(this,co);Te(this,Bt);Te(this,Ca);this.config=e,ue(this,co,new Set),ue(this,Bt,new Map),ue(this,Ca,0)}build(e,o,n){const a=new uf({client:e,mutationCache:this,mutationId:++ja(this,Ca)._,options:e.defaultMutationOptions(o),state:n});return this.add(a),a}add(e){P(this,co).add(e);const o=La(e);if(typeof o=="string"){const n=P(this,Bt).get(o);n?n.push(e):P(this,Bt).set(o,[e])}this.notify({type:"added",mutation:e})}remove(e){if(P(this,co).delete(e)){const o=La(e);if(typeof o=="string"){const n=P(this,Bt).get(o);if(n)if(n.length>1){const a=n.indexOf(e);a!==-1&&n.splice(a,1)}else n[0]===e&&P(this,Bt).delete(o)}}this.notify({type:"removed",mutation:e})}canRun(e){const o=La(e);if(typeof o=="string"){const n=P(this,Bt).get(o),a=n==null?void 0:n.find(s=>s.state.status==="pending");return!a||a===e}else return!0}runNext(e){var n;const o=La(e);if(typeof o=="string"){const a=(n=P(this,Bt).get(o))==null?void 0:n.find(s=>s!==e&&s.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){lt.batch(()=>{P(this,co).forEach(e=>{this.notify({type:"removed",mutation:e})}),P(this,co).clear(),P(this,Bt).clear()})}getAll(){return Array.from(P(this,co))}find(e){const o={exact:!0,...e};return this.getAll().find(n=>Wl(o,n))}findAll(e={}){return this.getAll().filter(o=>Wl(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))))}},co=new WeakMap,Bt=new WeakMap,Ca=new WeakMap,Rd);function La(t){var e;return(e=t.options.scope)==null?void 0:e.id}var Yt,Id,gf=(Id=class extends Ta{constructor(e={}){super();Te(this,Yt);this.config=e,ue(this,Yt,new Map)}build(e,o,n){const a=o.queryKey,s=o.queryHash??bi(a,o);let r=this.get(s);return r||(r=new rf({client:e,queryKey:a,queryHash:s,options:e.defaultQueryOptions(o),state:n,defaultOptions:e.getQueryDefaults(a)}),this.add(r)),r}add(e){P(this,Yt).has(e.queryHash)||(P(this,Yt).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const o=P(this,Yt).get(e.queryHash);o&&(e.destroy(),o===e&&P(this,Yt).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){lt.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return P(this,Yt).get(e)}getAll(){return[...P(this,Yt).values()]}find(e){const o={exact:!0,...e};return this.getAll().find(n=>ql(o,n))}findAll(e={}){const o=this.getAll();return Object.keys(e).length>0?o.filter(n=>ql(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()})})}},Yt=new WeakMap,Id),Ze,Ao,xo,Bn,Vn,Po,Hn,qn,Fd,ff=(Fd=class{constructor(t={}){Te(this,Ze);Te(this,Ao);Te(this,xo);Te(this,Bn);Te(this,Vn);Te(this,Po);Te(this,Hn);Te(this,qn);ue(this,Ze,t.queryCache||new gf),ue(this,Ao,t.mutationCache||new mf),ue(this,xo,t.defaultOptions||{}),ue(this,Bn,new Map),ue(this,Vn,new Map),ue(this,Po,0)}mount(){ja(this,Po)._++,P(this,Po)===1&&(ue(this,Hn,hi.subscribe(async t=>{t&&(await this.resumePausedMutations(),P(this,Ze).onFocus())})),ue(this,qn,is.subscribe(async t=>{t&&(await this.resumePausedMutations(),P(this,Ze).onOnline())})))}unmount(){var t,e;ja(this,Po)._--,P(this,Po)===0&&((t=P(this,Hn))==null||t.call(this),ue(this,Hn,void 0),(e=P(this,qn))==null||e.call(this),ue(this,qn,void 0))}isFetching(t){return P(this,Ze).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return P(this,Ao).findAll({...t,status:"pending"}).length}getQueryData(t){var o;const e=this.defaultQueryOptions({queryKey:t});return(o=P(this,Ze).get(e.queryHash))==null?void 0:o.state.data}ensureQueryData(t){const e=this.defaultQueryOptions(t),o=P(this,Ze).build(this,e),n=o.state.data;return n===void 0?this.fetchQuery(t):(t.revalidateIfStale&&o.isStaleByTime(Ro(e.staleTime,o))&&this.prefetchQuery(e),Promise.resolve(n))}getQueriesData(t){return P(this,Ze).findAll(t).map(({queryKey:e,state:o})=>{const n=o.data;return[e,n]})}setQueryData(t,e,o){const n=this.defaultQueryOptions({queryKey:t}),a=P(this,Ze).get(n.queryHash),s=a==null?void 0:a.state.data,r=Gg(e,s);if(r!==void 0)return P(this,Ze).build(this,n).setData(r,{...o,manual:!0})}setQueriesData(t,e,o){return lt.batch(()=>P(this,Ze).findAll(t).map(({queryKey:n})=>[n,this.setQueryData(n,e,o)]))}getQueryState(t){var o;const e=this.defaultQueryOptions({queryKey:t});return(o=P(this,Ze).get(e.queryHash))==null?void 0:o.state}removeQueries(t){const e=P(this,Ze);lt.batch(()=>{e.findAll(t).forEach(o=>{e.remove(o)})})}resetQueries(t,e){const o=P(this,Ze);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(()=>P(this,Ze).findAll(t).map(a=>a.cancel(o)));return Promise.all(n).then(wt).catch(wt)}invalidateQueries(t,e={}){return lt.batch(()=>(P(this,Ze).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(()=>P(this,Ze).findAll(t).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let s=a.fetch(void 0,o);return o.throwOnError||(s=s.catch(wt)),a.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=P(this,Ze).build(this,e);return o.isStaleByTime(Ro(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 is.isOnline()?P(this,Ao).resumePausedMutations():Promise.resolve()}getQueryCache(){return P(this,Ze)}getMutationCache(){return P(this,Ao)}getDefaultOptions(){return P(this,xo)}setDefaultOptions(t){ue(this,xo,t)}setQueryDefaults(t,e){P(this,Bn).set(ca(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...P(this,Bn).values()],o={};return e.forEach(n=>{da(t,n.queryKey)&&Object.assign(o,n.defaultOptions)}),o}setMutationDefaults(t,e){P(this,Vn).set(ca(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...P(this,Vn).values()],o={};return e.forEach(n=>{da(t,n.mutationKey)&&Object.assign(o,n.defaultOptions)}),o}defaultQueryOptions(t){if(t._defaulted)return t;const e={...P(this,xo).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:{...P(this,xo).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){P(this,Ze).clear(),P(this,Ao).clear()}},Ze=new WeakMap,Ao=new WeakMap,xo=new WeakMap,Bn=new WeakMap,Vn=new WeakMap,Po=new WeakMap,Hn=new WeakMap,qn=new WeakMap,Fd),qd=c.createContext(void 0),Wd=t=>{const e=c.useContext(qd);if(!e)throw new Error("No QueryClient set, use QueryClientProvider to set one");return e},hf=({client:t,children:e})=>(c.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),l.jsx(qd.Provider,{value:t,children:e})),Kd=c.createContext(!1),bf=()=>c.useContext(Kd);Kd.Provider;function yf(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var kf=c.createContext(yf()),wf=()=>c.useContext(kf),vf=(t,e,o)=>{const n=o!=null&&o.state.error&&typeof t.throwOnError=="function"?Ld(t.throwOnError,[o.state.error,o]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||n)&&(e.isReset()||(t.retryOnMount=!1))},Cf=t=>{c.useEffect(()=>{t.clearReset()},[t])},Tf=({result:t,errorResetBoundary:e,throwOnError:o,query:n,suspense:a})=>t.isError&&!e.isReset()&&!t.isFetching&&n&&(a&&t.data===void 0||Ld(o,[t.error,n])),Sf=t=>{if(t.suspense){const o=a=>a==="static"?a:Math.max(a??1e3,1e3),n=t.staleTime;t.staleTime=typeof n=="function"?(...a)=>o(n(...a)):o(n),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},Df=(t,e)=>t.isLoading&&t.isFetching&&!e,Af=(t,e)=>(t==null?void 0:t.suspense)&&e.isPending,Xl=(t,e,o)=>e.fetchOptimistic(t).catch(()=>{o.clearReset()});function xf(t,e,o){var y,f,b,h;const n=bf(),a=wf(),s=Wd(),r=s.defaultQueryOptions(t);(f=(y=s.getDefaultOptions().queries)==null?void 0:y._experimental_beforeQuery)==null||f.call(y,r);const i=s.getQueryCache().get(r.queryHash),m=t.subscribed!==!1;r._optimisticResults=n?"isRestoring":m?"optimistic":void 0,Sf(r),vf(r,a,i),Cf(a);const d=!s.getQueryCache().get(r.queryHash),[p]=c.useState(()=>new e(s,r)),u=p.getOptimisticResult(r),g=!n&&m;if(c.useSyncExternalStore(c.useCallback(w=>{const C=g?p.subscribe(lt.batchCalls(w)):wt;return p.updateResult(),C},[p,g]),()=>p.getCurrentResult(),()=>p.getCurrentResult()),c.useEffect(()=>{p.setOptions(r)},[r,p]),Af(r,u))throw Xl(r,p,a);if(Tf({result:u,errorResetBoundary:a,throwOnError:r.throwOnError,query:i,suspense:r.suspense}))throw u.error;if((h=(b=s.getDefaultOptions().queries)==null?void 0:b._experimental_afterQuery)==null||h.call(b,r,u),r.experimental_prefetchInRender&&!ua.isServer()&&Df(u,n)){const w=d?Xl(r,p,a):i==null?void 0:i.promise;w==null||w.catch(wt).finally(()=>{p.updateResult()})}return r.notifyOnChangeProps?u:p.trackResult(u)}function sa(t,e){return xf(t,lf)}var Pf=(t,e,o,n,a,s,r,i)=>{let m=document.documentElement,d=["light","dark"];function p(y){(Array.isArray(t)?t:[t]).forEach(f=>{let b=f==="class",h=b&&s?a.map(w=>s[w]||w):a;b?(m.classList.remove(...h),m.classList.add(s&&s[y]?s[y]:y)):m.setAttribute(f,y)}),u(y)}function u(y){i&&d.includes(y)&&(m.style.colorScheme=y)}function g(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(n)p(n);else try{let y=localStorage.getItem(e)||o,f=r&&y==="system"?g():y;p(f)}catch{}},ec=["light","dark"],$d="(prefers-color-scheme: dark)",Ef=typeof window>"u",wi=c.createContext(void 0),Rf={setTheme:t=>{},themes:[]},vi=()=>{var t;return(t=c.useContext(wi))!=null?t:Rf},If=t=>c.useContext(wi)?c.createElement(c.Fragment,null,t.children):c.createElement(Mf,{...t}),Ff=["light","dark"],Mf=({forcedTheme:t,disableTransitionOnChange:e=!1,enableSystem:o=!0,enableColorScheme:n=!0,storageKey:a="theme",themes:s=Ff,defaultTheme:r=o?"system":"light",attribute:i="data-theme",value:m,children:d,nonce:p,scriptProps:u})=>{let[g,y]=c.useState(()=>Nf(a,r)),[f,b]=c.useState(()=>g==="system"?er():g),h=m?Object.values(m):s,w=c.useCallback(k=>{let S=k;if(!S)return;k==="system"&&o&&(S=er());let A=m?m[S]:S,D=e?jf(p):null,R=document.documentElement,I=B=>{B==="class"?(R.classList.remove(...h),A&&R.classList.add(A)):B.startsWith("data-")&&(A?R.setAttribute(B,A):R.removeAttribute(B))};if(Array.isArray(i)?i.forEach(I):I(i),n){let B=ec.includes(r)?r:null,M=ec.includes(S)?S:B;R.style.colorScheme=M}D==null||D()},[p]),C=c.useCallback(k=>{let S=typeof k=="function"?k(g):k;y(S);try{localStorage.setItem(a,S)}catch{}},[g]),v=c.useCallback(k=>{let S=er(k);b(S),g==="system"&&o&&!t&&w("system")},[g,t]);c.useEffect(()=>{let k=window.matchMedia($d);return k.addListener(v),v(k),()=>k.removeListener(v)},[v]),c.useEffect(()=>{let k=S=>{S.key===a&&(S.newValue?y(S.newValue):C(r))};return window.addEventListener("storage",k),()=>window.removeEventListener("storage",k)},[C]),c.useEffect(()=>{w(t??g)},[t,g]);let T=c.useMemo(()=>({theme:g,setTheme:C,forcedTheme:t,resolvedTheme:g==="system"?f:g,themes:o?[...s,"system"]:s,systemTheme:o?f:void 0}),[g,C,t,f,o,s]);return c.createElement(wi.Provider,{value:T},c.createElement(Of,{forcedTheme:t,storageKey:a,attribute:i,enableSystem:o,enableColorScheme:n,defaultTheme:r,value:m,themes:s,nonce:p,scriptProps:u}),d)},Of=c.memo(({forcedTheme:t,storageKey:e,attribute:o,enableSystem:n,enableColorScheme:a,defaultTheme:s,value:r,themes:i,nonce:m,scriptProps:d})=>{let p=JSON.stringify([o,e,s,t,i,r,n,a]).slice(1,-1);return c.createElement("script",{...d,suppressHydrationWarning:!0,nonce:typeof window>"u"?m:"",dangerouslySetInnerHTML:{__html:`(${Pf.toString()})(${p})`}})}),Nf=(t,e)=>{if(Ef)return;let o;try{o=localStorage.getItem(t)||void 0}catch{}return o||e},jf=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)}},er=t=>(t||(t=window.matchMedia($d)),t.matches?"dark":"light");function Lf(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 _f=t=>{switch(t){case"success":return Bf;case"info":return Hf;case"warning":return Vf;case"error":return qf;default:return null}},Uf=Array(12).fill(0),zf=({visible:t,className:e})=>oe.createElement("div",{className:["sonner-loading-wrapper",e].filter(Boolean).join(" "),"data-visible":t},oe.createElement("div",{className:"sonner-spinner"},Uf.map((o,n)=>oe.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),Bf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},oe.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"})),Vf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},oe.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"})),Hf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},oe.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"})),qf=oe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},oe.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"})),Wf=oe.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"},oe.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),oe.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Kf=()=>{const[t,e]=oe.useState(document.hidden);return oe.useEffect(()=>{const o=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",o),()=>window.removeEventListener("visibilitychange",o)},[]),t};let Kr=1;class $f{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,...a}=e,s=typeof(e==null?void 0:e.id)=="number"||((o=e.id)==null?void 0:o.length)>0?e.id:Kr++,r=this.toasts.find(m=>m.id===s),i=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(s)&&this.dismissedToasts.delete(s),r?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,...a,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 a=Promise.resolve(e instanceof Function?e():e);let s=n!==void 0,r;const i=a.then(async d=>{if(r=["resolve",d],oe.isValidElement(d))s=!1,this.create({id:n,type:"default",message:d});else if(Jf(d)&&!d.ok){s=!1;const u=typeof o.error=="function"?await o.error(`HTTP error! status: ${d.status}`):o.error,g=typeof o.description=="function"?await o.description(`HTTP error! status: ${d.status}`):o.description,f=typeof u=="object"&&!oe.isValidElement(u)?u:{message:u};this.create({id:n,type:"error",description:g,...f})}else if(d instanceof Error){s=!1;const u=typeof o.error=="function"?await o.error(d):o.error,g=typeof o.description=="function"?await o.description(d):o.description,f=typeof u=="object"&&!oe.isValidElement(u)?u:{message:u};this.create({id:n,type:"error",description:g,...f})}else if(o.success!==void 0){s=!1;const u=typeof o.success=="function"?await o.success(d):o.success,g=typeof o.description=="function"?await o.description(d):o.description,f=typeof u=="object"&&!oe.isValidElement(u)?u:{message:u};this.create({id:n,type:"success",description:g,...f})}}).catch(async d=>{if(r=["reject",d],o.error!==void 0){s=!1;const p=typeof o.error=="function"?await o.error(d):o.error,u=typeof o.description=="function"?await o.description(d):o.description,y=typeof p=="object"&&!oe.isValidElement(p)?p:{message:p};this.create({id:n,type:"error",description:u,...y})}}).finally(()=>{s&&(this.dismiss(n),n=void 0),o.finally==null||o.finally.call(o)}),m=()=>new Promise((d,p)=>i.then(()=>r[0]==="reject"?p(r[1]):d(r[1])).catch(p));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)||Kr++;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 kt=new $f,Gf=(t,e)=>{const o=(e==null?void 0:e.id)||Kr++;return kt.addToast({title:t,...e,id:o}),o},Jf=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",Qf=Gf,Yf=()=>kt.toasts,Zf=()=>kt.getActiveToasts(),sR=Object.assign(Qf,{success:kt.success,info:kt.info,warning:kt.warning,error:kt.error,custom:kt.custom,message:kt.message,promise:kt.promise,dismiss:kt.dismiss,loading:kt.loading},{getHistory:Yf,getToasts:Zf});Lf("[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 _a(t){return t.label!==void 0}const Xf=3,eh="24px",th="16px",tc=4e3,oh=356,nh=14,ah=45,sh=200;function $t(...t){return t.filter(Boolean).join(" ")}function rh(t){const[e,o]=t.split("-"),n=[];return e&&n.push(e),o&&n.push(o),n}const ih=t=>{var e,o,n,a,s,r,i,m,d;const{invert:p,toast:u,unstyled:g,interacting:y,setHeights:f,visibleToasts:b,heights:h,index:w,toasts:C,expanded:v,removeToast:T,defaultRichColors:k,closeButton:S,style:A,cancelButtonStyle:D,actionButtonStyle:R,className:I="",descriptionClassName:B="",duration:M,position:x,gap:W,expandByDefault:O,classNames:L,icons:N,closeButtonAriaLabel:V="Close toast"}=t,[K,F]=oe.useState(null),[ae,_]=oe.useState(null),[z,H]=oe.useState(!1),[U,E]=oe.useState(!1),[j,q]=oe.useState(!1),[Y,be]=oe.useState(!1),[Ae,$]=oe.useState(!1),[ce,le]=oe.useState(0),[de,fe]=oe.useState(0),ee=oe.useRef(u.duration||M||tc),ve=oe.useRef(null),te=oe.useRef(null),Oe=w===0,Ce=w+1<=b,ye=u.type,Pe=u.dismissible!==!1,pe=u.className||"",J=u.descriptionClassName||"",ne=oe.useMemo(()=>h.findIndex(we=>we.toastId===u.id)||0,[h,u.id]),se=oe.useMemo(()=>{var we;return(we=u.closeButton)!=null?we:S},[u.closeButton,S]),X=oe.useMemo(()=>u.duration||M||tc,[u.duration,M]),ke=oe.useRef(0),xe=oe.useRef(0),Ge=oe.useRef(0),Be=oe.useRef(null),[Qe,it]=x.split("-"),Nt=oe.useMemo(()=>h.reduce((we,qe,We)=>We>=ne?we:we+qe.height,0),[h,ne]),qt=Kf(),Wt=u.invert||p,ho=ye==="loading";xe.current=oe.useMemo(()=>ne*W+Nt,[ne,Nt]),oe.useEffect(()=>{ee.current=X},[X]),oe.useEffect(()=>{H(!0)},[]),oe.useEffect(()=>{const we=te.current;if(we){const qe=we.getBoundingClientRect().height;return fe(qe),f(We=>[{toastId:u.id,height:qe,position:u.position},...We]),()=>f(We=>We.filter(et=>et.toastId!==u.id))}},[f,u.id]),oe.useLayoutEffect(()=>{if(!z)return;const we=te.current,qe=we.style.height;we.style.height="auto";const We=we.getBoundingClientRect().height;we.style.height=qe,fe(We),f(et=>et.find($e=>$e.toastId===u.id)?et.map($e=>$e.toastId===u.id?{...$e,height:We}:$e):[{toastId:u.id,height:We,position:u.position},...et])},[z,u.title,u.description,f,u.id,u.jsx,u.action,u.cancel]);const xt=oe.useCallback(()=>{E(!0),le(xe.current),f(we=>we.filter(qe=>qe.toastId!==u.id)),setTimeout(()=>{T(u)},sh)},[u,T,f,xe]);oe.useEffect(()=>{if(u.promise&&ye==="loading"||u.duration===1/0||u.type==="loading")return;let we;return v||y||qt?(()=>{if(Ge.current{ee.current!==1/0&&(ke.current=new Date().getTime(),we=setTimeout(()=>{u.onAutoClose==null||u.onAutoClose.call(u,u),xt()},ee.current))})(),()=>clearTimeout(we)},[v,y,u,ye,qt,xt]),oe.useEffect(()=>{u.delete&&(xt(),u.onDismiss==null||u.onDismiss.call(u,u))},[xt,u.delete]);function kn(){var we;if(N!=null&&N.loading){var qe;return oe.createElement("div",{className:$t(L==null?void 0:L.loader,u==null||(qe=u.classNames)==null?void 0:qe.loader,"sonner-loader"),"data-visible":ye==="loading"},N.loading)}return oe.createElement(zf,{className:$t(L==null?void 0:L.loader,u==null||(we=u.classNames)==null?void 0:we.loader),visible:ye==="loading"})}const _e=u.icon||(N==null?void 0:N[ye])||_f(ye);var ot,Pt;return oe.createElement("li",{tabIndex:0,ref:te,className:$t(I,pe,L==null?void 0:L.toast,u==null||(e=u.classNames)==null?void 0:e.toast,L==null?void 0:L.default,L==null?void 0:L[ye],u==null||(o=u.classNames)==null?void 0:o[ye]),"data-sonner-toast":"","data-rich-colors":(ot=u.richColors)!=null?ot:k,"data-styled":!(u.jsx||u.unstyled||g),"data-mounted":z,"data-promise":!!u.promise,"data-swiped":Ae,"data-removed":U,"data-visible":Ce,"data-y-position":Qe,"data-x-position":it,"data-index":w,"data-front":Oe,"data-swiping":j,"data-dismissible":Pe,"data-type":ye,"data-invert":Wt,"data-swipe-out":Y,"data-swipe-direction":ae,"data-expanded":!!(v||O&&z),"data-testid":u.testId,style:{"--index":w,"--toasts-before":w,"--z-index":C.length-w,"--offset":`${U?ce:xe.current}px`,"--initial-height":O?"auto":`${de}px`,...A,...u.style},onDragEnd:()=>{q(!1),F(null),Be.current=null},onPointerDown:we=>{we.button!==2&&(ho||!Pe||(ve.current=new Date,le(xe.current),we.target.setPointerCapture(we.pointerId),we.target.tagName!=="BUTTON"&&(q(!0),Be.current={x:we.clientX,y:we.clientY})))},onPointerUp:()=>{var we,qe,We;if(Y||!Pe)return;Be.current=null;const et=Number(((we=te.current)==null?void 0:we.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Ut=Number(((qe=te.current)==null?void 0:qe.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),$e=new Date().getTime()-((We=ve.current)==null?void 0:We.getTime()),ct=K==="x"?et:Ut,bo=Math.abs(ct)/$e;if(Math.abs(ct)>=ah||bo>.11){le(xe.current),u.onDismiss==null||u.onDismiss.call(u,u),_(K==="x"?et>0?"right":"left":Ut>0?"down":"up"),xt(),be(!0);return}else{var pt,Et;(pt=te.current)==null||pt.style.setProperty("--swipe-amount-x","0px"),(Et=te.current)==null||Et.style.setProperty("--swipe-amount-y","0px")}$(!1),q(!1),F(null)},onPointerMove:we=>{var qe,We,et;if(!Be.current||!Pe||((qe=window.getSelection())==null?void 0:qe.toString().length)>0)return;const $e=we.clientY-Be.current.y,ct=we.clientX-Be.current.x;var bo;const pt=(bo=t.swipeDirections)!=null?bo:rh(x);!K&&(Math.abs(ct)>1||Math.abs($e)>1)&&F(Math.abs(ct)>Math.abs($e)?"x":"y");let Et={x:0,y:0};const wn=Kt=>1/(1.5+Math.abs(Kt)/20);if(K==="y"){if(pt.includes("top")||pt.includes("bottom"))if(pt.includes("top")&&$e<0||pt.includes("bottom")&&$e>0)Et.y=$e;else{const Kt=$e*wn($e);Et.y=Math.abs(Kt)0)Et.x=ct;else{const Kt=ct*wn(ct);Et.x=Math.abs(Kt)0||Math.abs(Et.y)>0)&&$(!0),(We=te.current)==null||We.style.setProperty("--swipe-amount-x",`${Et.x}px`),(et=te.current)==null||et.style.setProperty("--swipe-amount-y",`${Et.y}px`)}},se&&!u.jsx&&ye!=="loading"?oe.createElement("button",{"aria-label":V,"data-disabled":ho,"data-close-button":!0,onClick:ho||!Pe?()=>{}:()=>{xt(),u.onDismiss==null||u.onDismiss.call(u,u)},className:$t(L==null?void 0:L.closeButton,u==null||(n=u.classNames)==null?void 0:n.closeButton)},(Pt=N==null?void 0:N.close)!=null?Pt:Wf):null,(ye||u.icon||u.promise)&&u.icon!==null&&((N==null?void 0:N[ye])!==null||u.icon)?oe.createElement("div",{"data-icon":"",className:$t(L==null?void 0:L.icon,u==null||(a=u.classNames)==null?void 0:a.icon)},u.promise||u.type==="loading"&&!u.icon?u.icon||kn():null,u.type!=="loading"?_e:null):null,oe.createElement("div",{"data-content":"",className:$t(L==null?void 0:L.content,u==null||(s=u.classNames)==null?void 0:s.content)},oe.createElement("div",{"data-title":"",className:$t(L==null?void 0:L.title,u==null||(r=u.classNames)==null?void 0:r.title)},u.jsx?u.jsx:typeof u.title=="function"?u.title():u.title),u.description?oe.createElement("div",{"data-description":"",className:$t(B,J,L==null?void 0:L.description,u==null||(i=u.classNames)==null?void 0:i.description)},typeof u.description=="function"?u.description():u.description):null),oe.isValidElement(u.cancel)?u.cancel:u.cancel&&_a(u.cancel)?oe.createElement("button",{"data-button":!0,"data-cancel":!0,style:u.cancelButtonStyle||D,onClick:we=>{_a(u.cancel)&&Pe&&(u.cancel.onClick==null||u.cancel.onClick.call(u.cancel,we),xt())},className:$t(L==null?void 0:L.cancelButton,u==null||(m=u.classNames)==null?void 0:m.cancelButton)},u.cancel.label):null,oe.isValidElement(u.action)?u.action:u.action&&_a(u.action)?oe.createElement("button",{"data-button":!0,"data-action":!0,style:u.actionButtonStyle||R,onClick:we=>{_a(u.action)&&(u.action.onClick==null||u.action.onClick.call(u.action,we),!we.defaultPrevented&&xt())},className:$t(L==null?void 0:L.actionButton,u==null||(d=u.classNames)==null?void 0:d.actionButton)},u.action.label):null)};function oc(){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 lh(t,e){const o={};return[t,e].forEach((n,a)=>{const s=a===1,r=s?"--mobile-offset":"--offset",i=s?th:eh;function m(d){["top","right","bottom","left"].forEach(p=>{o[`${r}-${p}`]=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[`${r}-${d}`]=i:o[`${r}-${d}`]=typeof n[d]=="number"?`${n[d]}px`:n[d]}):m(i)}),o}const ch=oe.forwardRef(function(e,o){const{id:n,invert:a,position:s="bottom-right",hotkey:r=["altKey","KeyT"],expand:i,closeButton:m,className:d,offset:p,mobileOffset:u,theme:g="light",richColors:y,duration:f,style:b,visibleToasts:h=Xf,toastOptions:w,dir:C=oc(),gap:v=nh,icons:T,containerAriaLabel:k="Notifications"}=e,[S,A]=oe.useState([]),D=oe.useMemo(()=>n?S.filter(z=>z.toasterId===n):S.filter(z=>!z.toasterId),[S,n]),R=oe.useMemo(()=>Array.from(new Set([s].concat(D.filter(z=>z.position).map(z=>z.position)))),[D,s]),[I,B]=oe.useState([]),[M,x]=oe.useState(!1),[W,O]=oe.useState(!1),[L,N]=oe.useState(g!=="system"?g:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),V=oe.useRef(null),K=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),F=oe.useRef(null),ae=oe.useRef(!1),_=oe.useCallback(z=>{A(H=>{var U;return(U=H.find(E=>E.id===z.id))!=null&&U.delete||kt.dismiss(z.id),H.filter(({id:E})=>E!==z.id)})},[]);return oe.useEffect(()=>kt.subscribe(z=>{if(z.dismiss){requestAnimationFrame(()=>{A(H=>H.map(U=>U.id===z.id?{...U,delete:!0}:U))});return}setTimeout(()=>{Md.flushSync(()=>{A(H=>{const U=H.findIndex(E=>E.id===z.id);return U!==-1?[...H.slice(0,U),{...H[U],...z},...H.slice(U+1)]:[z,...H]})})})}),[S]),oe.useEffect(()=>{if(g!=="system"){N(g);return}if(g==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?N("dark"):N("light")),typeof window>"u")return;const z=window.matchMedia("(prefers-color-scheme: dark)");try{z.addEventListener("change",({matches:H})=>{N(H?"dark":"light")})}catch{z.addListener(({matches:U})=>{try{N(U?"dark":"light")}catch(E){console.error(E)}})}},[g]),oe.useEffect(()=>{S.length<=1&&x(!1)},[S]),oe.useEffect(()=>{const z=H=>{var U;if(r.every(q=>H[q]||H.code===q)){var j;x(!0),(j=V.current)==null||j.focus()}H.code==="Escape"&&(document.activeElement===V.current||(U=V.current)!=null&&U.contains(document.activeElement))&&x(!1)};return document.addEventListener("keydown",z),()=>document.removeEventListener("keydown",z)},[r]),oe.useEffect(()=>{if(V.current)return()=>{F.current&&(F.current.focus({preventScroll:!0}),F.current=null,ae.current=!1)}},[V.current]),oe.createElement("section",{ref:o,"aria-label":`${k} ${K}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},R.map((z,H)=>{var U;const[E,j]=z.split("-");return D.length?oe.createElement("ol",{key:z,dir:C==="auto"?oc():C,tabIndex:-1,ref:V,className:d,"data-sonner-toaster":!0,"data-sonner-theme":L,"data-y-position":E,"data-x-position":j,style:{"--front-toast-height":`${((U=I[0])==null?void 0:U.height)||0}px`,"--width":`${oh}px`,"--gap":`${v}px`,...b,...lh(p,u)},onBlur:q=>{ae.current&&!q.currentTarget.contains(q.relatedTarget)&&(ae.current=!1,F.current&&(F.current.focus({preventScroll:!0}),F.current=null))},onFocus:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||ae.current||(ae.current=!0,F.current=q.relatedTarget)},onMouseEnter:()=>x(!0),onMouseMove:()=>x(!0),onMouseLeave:()=>{W||x(!1)},onDragEnd:()=>x(!1),onPointerDown:q=>{q.target instanceof HTMLElement&&q.target.dataset.dismissible==="false"||O(!0)},onPointerUp:()=>O(!1)},D.filter(q=>!q.position&&H===0||q.position===z).map((q,Y)=>{var be,Ae;return oe.createElement(ih,{key:q.id,icons:T,index:Y,toast:q,defaultRichColors:y,duration:(be=w==null?void 0:w.duration)!=null?be:f,className:w==null?void 0:w.className,descriptionClassName:w==null?void 0:w.descriptionClassName,invert:a,visibleToasts:h,closeButton:(Ae=w==null?void 0:w.closeButton)!=null?Ae:m,interacting:W,position:z,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:_,toasts:D.filter($=>$.position==q.position),heights:I.filter($=>$.position==q.position),setHeights:B,expandByDefault:i,gap:v,expanded:M,swipeDirections:e.swipeDirections})})):null}))});/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Gd=(...t)=>t.filter((e,o,n)=>!!e&&e.trim()!==""&&n.indexOf(e)===o).join(" ").trim();/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dh=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uh=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,o,n)=>n?n.toUpperCase():o.toLowerCase());/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nc=t=>{const e=uh(t);return e.charAt(0).toUpperCase()+e.slice(1)};/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var tr={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ph=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1},mh=c.createContext({}),gh=()=>c.useContext(mh),fh=c.forwardRef(({color:t,size:e,strokeWidth:o,absoluteStrokeWidth:n,className:a="",children:s,iconNode:r,...i},m)=>{const{size:d=24,strokeWidth:p=2,absoluteStrokeWidth:u=!1,color:g="currentColor",className:y=""}=gh()??{},f=n??u?Number(o??p)*24/Number(e??d):o??p;return c.createElement("svg",{ref:m,...tr,width:e??d??tr.width,height:e??d??tr.height,stroke:t??g,strokeWidth:f,className:Gd("lucide",y,a),...!s&&!ph(i)&&{"aria-hidden":"true"},...i},[...r.map(([b,h])=>c.createElement(b,h)),...Array.isArray(s)?s:[s]])});/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const re=(t,e)=>{const o=c.forwardRef(({className:n,...a},s)=>c.createElement(fh,{ref:s,iconNode:e,className:Gd(`lucide-${dh(nc(t))}`,`lucide-${t}`,n),...a}));return o.displayName=nc(t),o};/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hh=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],bh=re("activity",hh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yh=[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]],ac=re("arrow-left-right",yh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kh=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],wh=re("arrow-left",kh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vh=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],sc=re("bell",vh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ch=[["path",{d:"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2",key:"1ah6g2"}],["rect",{x:"14",y:"2",width:"8",height:"8",rx:"1",key:"88lufb"}]],Ci=re("blocks",Ch);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Th=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M16 12h2",key:"7q9ll5"}],["path",{d:"M16 8h2",key:"msurwy"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}],["path",{d:"M6 12h2",key:"32wvfc"}],["path",{d:"M6 8h2",key:"30oboj"}]],Sh=re("book-open-text",Th);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Dh=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],Jd=re("book-open",Dh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ah=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],Qd=re("bot",Ah);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const xh=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],Ph=re("boxes",xh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Eh=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],Yd=re("building-2",Eh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Rh=[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z",key:"trhst0"}],["path",{d:"M17 21v-2",key:"ds4u3f"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10",key:"1mo9zo"}],["path",{d:"M21 21v-2",key:"eo0ou"}],["path",{d:"M3 5V3",key:"1k5hjh"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z",key:"1dd30t"}],["path",{d:"M7 5V3",key:"1t1388"}]],Ih=re("cable",Rh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Fh=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Mh=re("chevron-down",Fh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Oh=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Zd=re("chevron-right",Oh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Nh=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],jh=re("circle-check",Nh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Lh=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],_h=re("circle-question-mark",Lh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Uh=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]],Xd=re("clipboard-list",Uh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zh=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],eu=re("clock",zh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Bh=[["path",{d:"M13.744 17.736a6 6 0 1 1-7.48-7.48",key:"bq4yh3"}],["path",{d:"M15 6h1v4",key:"11y1tn"}],["path",{d:"m6.134 14.768.866-.5 2 3.464",key:"17snzx"}],["circle",{cx:"16",cy:"8",r:"6",key:"14bfc9"}]],Vh=re("coins",Bh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Hh=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],tu=re("cpu",Hh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qh=[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]],Wh=re("credit-card",qh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Kh=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],$h=re("external-link",Kh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Gh=[["path",{d:"M20 10V8a2.4 2.4 0 0 0-.706-1.704l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.35",key:"1cdjst"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M16 14a2 2 0 0 0-2 2",key:"ceaadl"}],["path",{d:"M16 22a2 2 0 0 1-2-2",key:"1wqh5n"}],["path",{d:"M20 14a2 2 0 0 1 2 2",key:"1ny6zw"}],["path",{d:"M20 22a2 2 0 0 0 2-2",key:"1l9q4k"}]],Jh=re("file-scan",Gh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Qh=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],Ss=re("file-text",Qh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Yh=[["path",{d:"M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8",key:"14sh0y"}],["path",{d:"M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z",key:"1970lx"}],["path",{d:"M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1",key:"l4dndm"}]],Zh=re("files",Yh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Xh=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]],eb=re("flask-conical",Xh);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tb=[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]],ob=re("folder-tree",tb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nb=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],ou=re("folder",nb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ab=[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]],sb=re("git-branch",ab);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rb=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],nu=re("globe",rb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ib=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],lb=re("history",ib);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cb=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],Ti=re("image",cb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const db=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],ub=re("info",db);/** - * @license lucide-react v1.17.0 - ISC - * - * 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:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],Ds=re("key-round",pb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const mb=[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]],gb=re("languages",mb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const fb=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],au=re("layers",fb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hb=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],su=re("layout-dashboard",hb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bb=[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]],ru=re("layout-template",bb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yb=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["rect",{x:"3",y:"4",width:"6",height:"6",rx:"1",key:"cif1o7"}]],iu=re("list-todo",yb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kb=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],lu=re("loader-circle",kb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const wb=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],vb=re("log-out",wb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Cb=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],Tb=re("menu",Cb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Sb=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Db=re("message-circle-question-mark",Sb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ab=[["path",{d:"M12.7 3H4a2 2 0 0 0-2 2v16.286a.71.71 0 0 0 1.212.502l2.202-2.202A2 2 0 0 1 6.828 19H20a2 2 0 0 0 2-2v-4.7",key:"wjb7ig"}],["circle",{cx:"19",cy:"6",r:"3",key:"108a5v"}]],cu=re("message-square-dot",Ab);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const xb=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],du=re("message-square",xb);/** - * @license lucide-react v1.17.0 - ISC - * - * 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:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]],Eb=re("messages-square",Pb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Rb=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],uu=re("moon",Rb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ib=[["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",key:"2d38gg"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Fb=re("octagon-x",Ib);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Mb=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],Ob=re("package",Mb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Nb=[["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m18 3-4 4h6l-4 4",key:"16psg9"}]],jb=re("plug-zap",Nb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Lb=[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]],Si=re("puzzle",Lb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _b=[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],Ub=re("radio",_b);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zb=[["path",{d:"M12 17V7",key:"pyj7ub"}],["path",{d:"M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8",key:"1elt7d"}],["path",{d:"M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z",key:"ycz6yz"}]],Bb=re("receipt",zb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Vb=[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]],Hb=re("scan-search",Vb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qb=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],Wb=re("scissors",qb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Kb=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],Di=re("scroll-text",Kb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $b=[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["path",{d:"m8.5 8.5 5 5",key:"a8mexj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]],Gb=re("search-x",$b);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Jb=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],pu=re("search",Jb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Qb=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Ai=re("settings",Qb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Yb=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],mu=re("shield-check",Yb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Zb=[["path",{d:"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z",key:"1wgbhj"}]],rc=re("shirt",Zb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Xb=[["circle",{cx:"8",cy:"21",r:"1",key:"jimo8o"}],["circle",{cx:"19",cy:"21",r:"1",key:"13723u"}],["path",{d:"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12",key:"9zh506"}]],gu=re("shopping-cart",Xb);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ey=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],ty=re("sparkles",ey);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const oy=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],ny=re("star",oy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ay=[["path",{d:"M11 2v2",key:"1539x4"}],["path",{d:"M5 2v2",key:"1yf1q8"}],["path",{d:"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1",key:"rb5t3r"}],["path",{d:"M8 15a6 6 0 0 0 12 0v-3",key:"x18d4x"}],["circle",{cx:"20",cy:"10",r:"2",key:"ts1r5v"}]],sy=re("stethoscope",ay);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ry=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],fu=re("sun",ry);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iy=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],xi=re("tag",iy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ly=[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"M13 5v2",key:"dyzc3o"}],["path",{d:"M13 17v2",key:"1ont0d"}],["path",{d:"M13 11v2",key:"1wjjxi"}]],cy=re("ticket",ly);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dy=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],uy=re("triangle-alert",dy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const py=[["path",{d:"M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2",key:"wrbu53"}],["path",{d:"M15 18H9",key:"1lyqi6"}],["path",{d:"M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",key:"lysw3i"}],["circle",{cx:"17",cy:"18",r:"2",key:"332jqn"}],["circle",{cx:"7",cy:"18",r:"2",key:"19iecd"}]],my=re("truck",py);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gy=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],fy=re("user",gy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hy=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],hu=re("users",hy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const by=[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]],bu=re("wallet",by);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yy=[["path",{d:"m10.586 5.414-5.172 5.172",key:"4mc350"}],["path",{d:"m18.586 13.414-5.172 5.172",key:"8c96vv"}],["path",{d:"M6 12h12",key:"8npq4p"}],["circle",{cx:"12",cy:"20",r:"2",key:"144qzu"}],["circle",{cx:"12",cy:"4",r:"2",key:"muu5ef"}],["circle",{cx:"20",cy:"12",r:"2",key:"1xzzfp"}],["circle",{cx:"4",cy:"12",r:"2",key:"1hvhnz"}]],ky=re("waypoints",yy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const wy=[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]],yu=re("webhook",wy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vy=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],Pi=re("workflow",vy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Cy=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Ty=re("wrench",Cy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Sy=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],ku=re("x",Sy);/** - * @license lucide-react v1.17.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Dy=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Ay=re("zap",Dy),xy=({...t})=>{const{theme:e="system"}=vi();return l.jsx(ch,{theme:e,richColors:!0,className:"toaster group",icons:{success:l.jsx(jh,{className:"size-4"}),info:l.jsx(ub,{className:"size-4"}),warning:l.jsx(uy,{className:"size-4"}),error:l.jsx(Fb,{className:"size-4"}),loading:l.jsx(lu,{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})},ic={};function Ot(t,e){const o=c.useRef(ic);return o.current===ic&&(o.current=t(e)),o}const $r=[];let Gr;function Py(){return Gr}function Ey(t){$r.push(t)}function Ei(t){const e=(o,n)=>{const a=Ot(Ry).current;let s;try{Gr=a;for(const r of $r)r.before(a);s=t(o,n);for(const r of $r)r.after(a);a.didInitialize=!0}finally{Gr=void 0}return s};return e.displayName=t.displayName||t.name,e}function wu(t){return c.forwardRef(Ei(t))}function Ry(){return{didInitialize:!1}}function As(t){const e=c.useRef(!0);e.current&&(e.current=!1,t())}const Iy=()=>{},he=typeof document<"u"?c.useLayoutEffect:Iy;function Fy(t,e){return function(n,...a){const s=new URL(t);return s.searchParams.set("code",n.toString()),a.forEach(r=>s.searchParams.append("args[]",r)),`${e} error #${n}; visit ${s} for the full message.`}}const st=Fy("https://base-ui.com/production-error","Base UI"),vu=c.createContext(void 0);function Sa(t){const e=c.useContext(vu);if(e===void 0&&!t)throw new Error(st(72));return e}const My=[];function Ri(t){c.useEffect(t,My)}const Xn=0;class _t{constructor(){Ue(this,"currentId",Xn);Ue(this,"clear",()=>{this.currentId!==Xn&&(clearTimeout(this.currentId),this.currentId=Xn)});Ue(this,"disposeEffect",()=>this.clear)}static create(){return new _t}start(e,o){this.clear(),this.currentId=setTimeout(()=>{this.currentId=Xn,o()},e)}isStarted(){return this.currentId!==Xn}}function ht(){const t=Ot(_t.create).current;return Ri(t.disposeEffect),t}const Jn=typeof navigator<"u",or=Oy(),Cu=jy(),Tu=Ny(),Su=typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter:none"),Du=or.platform==="MacIntel"&&or.maxTouchPoints>1?!0:/iP(hone|ad|od)|iOS/.test(or.platform),Au=Jn&&/apple/i.test(navigator.vendor),Jr=Jn&&/android/i.test(Cu)||/android/i.test(Tu),xu=Jn&&Cu.toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints,Pu=Tu.includes("jsdom/");function Oy(){if(!Jn)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 Ny(){if(!Jn)return"";const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?t.brands.map(({brand:e,version:o})=>`${e}/${o}`).join(" "):navigator.userAgent}function jy(){if(!Jn)return"";const t=navigator.userAgentData;return t!=null&&t.platform?t.platform:navigator.platform??""}function Ft(t){t.preventDefault(),t.stopPropagation()}function Ly(t){return"nativeEvent"in t}function Eu(t){return t.pointerType===""&&t.isTrusted?!0:Jr&&t.pointerType?t.type==="click"&&t.buttons===1:t.detail===0&&!t.pointerType}function Ru(t){return Pu?!1:!Jr&&t.width===0&&t.height===0||Jr&&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 rn(t,e){const o=["mouse","pen"];return e||o.push("",void 0),o.includes(t)}function _y(t){const e=t.type;return e==="click"||e==="mousedown"||e==="keydown"||e==="keyup"}function xs(){return typeof window<"u"}function ut(t){return Ii(t)?(t.nodeName||"").toLowerCase():"#document"}function Xe(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function ao(t){var e;return(e=(Ii(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ii(t){return xs()?t instanceof Node||t instanceof Xe(t).Node:!1}function Re(t){return xs()?t instanceof Element||t instanceof Xe(t).Element:!1}function He(t){return xs()?t instanceof HTMLElement||t instanceof Xe(t).HTMLElement:!1}function Wn(t){return!xs()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Xe(t).ShadowRoot}function Uo(t){const{overflow:e,overflowX:o,overflowY:n,display:a}=At(t);return/auto|scroll|overlay|hidden|clip/.test(e+n+o)&&a!=="inline"&&a!=="contents"}function Uy(t){return/^(table|td|th)$/.test(ut(t))}function Ps(t){try{if(t.matches(":popover-open"))return!0}catch{}try{return t.matches(":modal")}catch{return!1}}const zy=/transform|translate|scale|rotate|perspective|filter/,By=/paint|layout|strict|content/,Wo=t=>!!t&&t!=="none";let nr;function Fi(t){const e=Re(t)?At(t):t;return Wo(e.transform)||Wo(e.translate)||Wo(e.scale)||Wo(e.rotate)||Wo(e.perspective)||!Es()&&(Wo(e.backdropFilter)||Wo(e.filter))||zy.test(e.willChange||"")||By.test(e.contain||"")}function Vy(t){let e=no(t);for(;He(e)&&!eo(e);){if(Fi(e))return e;if(Ps(e))return null;e=no(e)}return null}function Es(){return nr==null&&(nr=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),nr}function eo(t){return/^(html|body|#document)$/.test(ut(t))}function At(t){return Xe(t).getComputedStyle(t)}function Rs(t){return Re(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function no(t){if(ut(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Wn(t)&&t.host||ao(t);return Wn(e)?e.host:e}function Iu(t){const e=no(t);return eo(e)?t.ownerDocument?t.ownerDocument.body:t.body:He(e)&&Uo(e)?e:Iu(e)}function pa(t,e,o){var n;e===void 0&&(e=[]),o===void 0&&(o=!0);const a=Iu(t),s=a===((n=t.ownerDocument)==null?void 0:n.body),r=Xe(a);if(s){const i=Qr(r);return e.concat(r,r.visualViewport||[],Uo(a)?a:[],i&&o?pa(i):[])}else return e.concat(a,pa(a,[],o))}function Qr(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}const Yr="data-base-ui-focusable",Fu="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",Io="ArrowLeft",Fo="ArrowRight",Mi="ArrowUp",Da="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 Se(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&&Wn(o)){let a=e;for(;a;){if(t===a)return!0;a=a.parentNode||a.host}}return!1}function ft(t){return"composedPath"in t?t.composedPath()[0]:t.target}function ls(t,e){if(!Re(t))return!1;const o=t;if(e.hasElement(o))return!o.hasAttribute("data-trigger-disabled");for(const[,n]of e.entries())if(Se(n,o))return!n.hasAttribute("data-trigger-disabled");return!1}function ar(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 Hy(t){return t.matches("html,body")}function Is(t){return He(t)&&t.matches(Fu)}function qy(t){return(t==null?void 0:t.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${Fu}`))!=null}function Zr(t){return t?t.getAttribute("role")==="combobox"&&Is(t):!1}function Wy(t){if(!t||Pu)return!0;try{return t.matches(":focus-visible")}catch{return!0}}function Xr(t){return t?t.hasAttribute(Yr)?t:t.querySelector(`[${Yr}]`)||t:null}function Ky(t,e){return e!=null&&!rn(e)?0:typeof t=="function"?t():t}function cs(t,e,o){const n=Ky(t,o);return typeof n=="number"?n:n==null?void 0:n[e]}function lc(t){return typeof t=="function"?t():t}function Mu(t,e){return e||t==="click"||t==="mousedown"}function $y(t){return(t==null?void 0:t.includes("mouse"))&&t!=="mousedown"}function Oi(){}const ei=Object.freeze([]),Je=Object.freeze({}),Ou="none",po="trigger-press",Ye="trigger-hover",xn="trigger-focus",Ni="outside-press",Nu="item-press",ju="close-press",ln="focus-out",Aa="escape-key",ti="list-navigation",Gy="cancel-open",ra="sibling-open",Jy="disabled",rR="missing",iR="initial",Fs="imperative-action",lR="window-resize";function Me(t,e,o,n){let a=!1,s=!1;const r=n??Je;return{reason:t,event:e??new Event("base-ui"),cancel(){a=!0},allowPropagation(){s=!0},get isCanceled(){return a},get isPropagationAllowed(){return s},trigger:o,...r}}const Lu=c.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new _t,currentIdRef:{current:null},currentContextRef:{current:null}});function Qy(t){const{children:e,delay:o,timeoutMs:n=0}=t,a=c.useRef(o),s=c.useRef(o),r=c.useRef(null),i=c.useRef(null),m=ht();return l.jsx(Lu.Provider,{value:c.useMemo(()=>({hasProvider:!0,delayRef:a,initialDelayRef:s,currentIdRef:r,timeoutMs:n,currentContextRef:i,timeout:m}),[n,m]),children:e})}function Yy(t,e={open:!1}){const{open:o}=e,n="rootStore"in t?t.rootStore:t,a=n.useState("floatingId"),s=c.useContext(Lu),{currentIdRef:r,delayRef:i,timeoutMs:m,initialDelayRef:d,currentContextRef:p,hasProvider:u,timeout:g}=s,[y,f]=c.useState(!1);return he(()=>{function b(){var h;f(!1),(h=p.current)==null||h.setIsInstantPhase(!1),r.current=null,p.current=null,i.current=d.current}if(r.current&&!o&&r.current===a){if(f(!1),m){const h=a;return g.start(m,()=>{n.select("open")||r.current&&r.current!==h||b()}),()=>{g.clear()}}b()}},[o,a,r,i,m,d,p,g,n]),he(()=>{if(!o)return;const b=p.current,h=r.current;g.clear(),p.current={onOpenChange:n.setOpen,setIsInstantPhase:f},r.current=a,i.current={open:0,close:cs(d.current,"close")},h!==null&&h!==a?(f(!0),b==null||b.setIsInstantPhase(!0),b==null||b.onOpenChange(!1,Me(Ou))):(f(!1),b==null||b.setIsInstantPhase(!1))},[o,a,n,r,i,d,p,g]),he(()=>()=>{p.current=null},[p]),c.useMemo(()=>({hasProvider:u,delayRef:i,isInstantPhase:y}),[u,i,y])}function Fe(t,e,o,n){return t.addEventListener(e,o,n),()=>{t.removeEventListener(e,o,n)}}function to(...t){return()=>{for(let e=0;eo!==e[n])}function Uu(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 a=0;a{for(let a=0;a{e.current=e.next}};return e}const ji={...Ts},sr=ji.useInsertionEffect,ok=sr&&sr!==ji.useLayoutEffect?sr:t=>t();function De(t){const e=Ot(nk).current;return e.next=t,ok(e.effect),e.trampoline}function nk(){const t={next:void 0,callback:ak,trampoline:(...e)=>{var o;return(o=t.callback)==null?void 0:o.call(t,...e)},effect:()=>{t.callback=t.next}};return t}function ak(){}const Ua=null;class sk{constructor(){Ue(this,"callbacks",[]);Ue(this,"callbacksCount",0);Ue(this,"nextId",1);Ue(this,"startId",1);Ue(this,"isScheduled",!1);Ue(this,"tick",e=>{var a;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 za=new sk;class Zt{constructor(){Ue(this,"currentId",Ua);Ue(this,"cancel",()=>{this.currentId!==Ua&&(za.cancel(this.currentId),this.currentId=Ua)});Ue(this,"disposeEffect",()=>this.cancel)}static create(){return new Zt}static request(e){return za.request(e)}static cancel(e){return za.cancel(e)}request(e){this.cancel(),this.currentId=za.request(()=>{this.currentId=Ua,e()})}}function ma(){const t=Ot(Zt.create).current;return Ri(t.disposeEffect),t}function Le(t){return(t==null?void 0:t.ownerDocument)||document}const zu={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},rk={...zu,position:"fixed",top:0,left:0},cR={...zu,position:"absolute"},Oo=c.forwardRef(function(e,o){const[n,a]=c.useState();he(()=>{Au&&a("button")},[]);const s={tabIndex:0,role:n};return l.jsx("span",{...e,ref:o,style:rk,"aria-hidden":n?void 0:!0,...s,"data-base-ui-focus-guard":""})}),ik=["top","right","bottom","left"],$n=Math.min,Mt=Math.max,ds=Math.round,Go=Math.floor,oo=t=>({x:t,y:t}),lk={left:"right",right:"left",bottom:"top",top:"bottom"};function oi(t,e,o){return Mt(t,$n(e,o))}function mo(t,e){return typeof t=="function"?t(e):t}function Tt(t){return t.split("-")[0]}function zo(t){return t.split("-")[1]}function Li(t){return t==="x"?"y":"x"}function _i(t){return t==="y"?"height":"width"}function Lt(t){const e=t[0];return e==="t"||e==="b"?"y":"x"}function Ui(t){return Li(Lt(t))}function ck(t,e,o){o===void 0&&(o=!1);const n=zo(t),a=Ui(t),s=_i(a);let r=a==="x"?n===(o?"end":"start")?"right":"left":n==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=us(r)),[r,us(r)]}function dk(t){const e=us(t);return[ni(t),e,ni(e)]}function ni(t){return t.includes("start")?t.replace("start","end"):t.replace("end","start")}const cc=["left","right"],dc=["right","left"],uk=["top","bottom"],pk=["bottom","top"];function mk(t,e,o){switch(t){case"top":case"bottom":return o?e?dc:cc:e?cc:dc;case"left":case"right":return e?uk:pk;default:return[]}}function gk(t,e,o,n){const a=zo(t);let s=mk(Tt(t),o==="start",n);return a&&(s=s.map(r=>r+"-"+a),e&&(s=s.concat(s.map(ni)))),s}function us(t){const e=Tt(t);return lk[e]+t.slice(e.length)}function fk(t){return{top:0,right:0,bottom:0,left:0,...t}}function Bu(t){return typeof t!="number"?fk(t):{top:t,right:t,bottom:t,left:t}}function ps(t){const{x:e,y:o,width:n,height:a}=t;return{width:n,height:a,top:o,left:e,right:e+n,bottom:o+a,x:e,y:o}}function Ba(t,e,o){return Math.floor(t/e)!==o}function ms(t,e){return e<0||e>=t.length}function rr(t,e){return gt(t.current,{disabledIndices:e})}function uc(t,e){return gt(t.current,{decrement:!0,startingIndex:t.current.length,disabledIndices:e})}function gt(t,{startingIndex:e=-1,decrement:o=!1,disabledIndices:n,amount:a=1}={}){let s=e;do s+=o?-a:a;while(s>=0&&s<=t.length-1&&Pn(t,s,n));return s}function hk(t,{event:e,orientation:o,loopFocus:n,onLoop:a,rtl:s,cols:r,disabledIndices:i,minIndex:m,maxIndex:d,prevIndex:p,stopEvent:u=!1}){let g=p,y;if(e.key===Mi?y="up":e.key===Da&&(y="down"),y){const f=[],b=[];let h=!1,w=0;{let R=null,I=-1;t.forEach((B,M)=>{if(B==null)return;w+=1;const x=B.closest('[role="row"]');x&&(h=!0),(x!==R||I===-1)&&(R=x,I+=1,f[I]=[]),f[I].push(M),b[M]=I})}let C=!1,v=0;if(h)for(const R of f){const I=R.length;I>v&&(v=I),I!==r&&(C=!0)}const T=C&&w{if(!C||p===-1)return;const I=b[p];if(I==null)return;const B=f[I].indexOf(p),M=R==="up"?-1:1;for(let x=I+M,W=0;W=f.length){if(!n||T)return;if(x=x<0?f.length-1:0,a){const L=Math.min(B,f[x].length-1),N=f[x][L]??f[x][0],V=a(e,p,N);x=b[V]??x}}const O=f[x];for(let L=Math.min(B,O.length-1);L>=0;L-=1){const N=O[L];if(!Pn(t,N,i))return N}}},A=R=>{if(!T||p===-1)return;const I=p%k,B=R==="up"?-k:k,M=d-d%k,x=Go(d/k)+1;for(let W=p-I+B,O=0;Od){if(!n)return;W=W<0?M:0}const L=Math.min(W+k-1,d);for(let N=Math.min(W+I,L);N>=W;N-=1)if(!Pn(t,N,i))return N}};u&&Ft(e);const D=S(y)??A(y);if(D!==void 0)g=D;else if(p===-1)g=y==="up"?d:m;else if(g=gt(t,{startingIndex:p,amount:k,decrement:y==="up",disabledIndices:i}),n){if(y==="up"&&(p-kR?B:B-k,a&&(g=a(e,p,g))}y==="down"&&p+k>d&&(g=gt(t,{startingIndex:p%k-k,amount:k,disabledIndices:i}),a&&(g=a(e,p,g)))}ms(t,g)&&(g=p)}if(o==="both"){const f=Go(p/r);e.key===(s?Io:Fo)&&(u&&Ft(e),p%r!==r-1?(g=gt(t,{startingIndex:p,disabledIndices:i}),n&&Ba(g,r,f)&&(g=gt(t,{startingIndex:p-p%r-1,disabledIndices:i}),a&&(g=a(e,p,g)))):n&&(g=gt(t,{startingIndex:p-p%r-1,disabledIndices:i}),a&&(g=a(e,p,g))),Ba(g,r,f)&&(g=p)),e.key===(s?Fo:Io)&&(u&&Ft(e),p%r!==0?(g=gt(t,{startingIndex:p,decrement:!0,disabledIndices:i}),n&&Ba(g,r,f)&&(g=gt(t,{startingIndex:p+(r-p%r),decrement:!0,disabledIndices:i}),a&&(g=a(e,p,g)))):n&&(g=gt(t,{startingIndex:p+(r-p%r),decrement:!0,disabledIndices:i}),a&&(g=a(e,p,g))),Ba(g,r,f)&&(g=p));const b=Go(d/r)===f;ms(t,g)&&(n&&b?(g=e.key===(s?Fo:Io)?d:gt(t,{startingIndex:p-p%r-1,disabledIndices:i}),a&&(g=a(e,p,g))):g=p)}return g}function bk(t,e,o){const n=[];let a=0;return t.forEach(({width:s,height:r},i)=>{let m=!1;for(o&&(a=0);!m;){const d=[];for(let p=0;pn[p]==null)?(d.forEach(p=>{n[p]=i}),m=!0):a+=1}}),[...n]}function yk(t,e,o,n,a){if(t===-1)return-1;const s=o.indexOf(t),r=e[t];switch(a){case"tl":return s;case"tr":return r?s+r.width-1:s;case"bl":return r?s+(r.height-1)*n:s;case"br":return o.lastIndexOf(t);default:return-1}}function kk(t,e){return e.flatMap((o,n)=>t.includes(o)?[n]:[])}function Pn(t,e,o){if(typeof o=="function"?o(e):(o==null?void 0:o.includes(e))??!1)return!0;const a=t[e];return a?Ms(a)?!o&&(a.hasAttribute("disabled")||a.getAttribute("aria-disabled")==="true"):!0:!1}function wk(t){return t.visibility==="hidden"||t.visibility==="collapse"}function Ms(t,e=t?At(t):null){return!t||!t.isConnected||!e||wk(e)?!1:typeof t.checkVisibility=="function"?t.checkVisibility():e.display!=="none"&&e.display!=="contents"}const vk='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';function Ck(t){const e=t.assignedSlot;if(e)return e;if(t.parentElement)return t.parentElement;const o=t.getRootNode();return Wn(o)?o.host:null}function ai(t){for(const e of Array.from(t.children))if(ut(e)==="summary")return e;return null}function Tk(t,e){const o=ai(e);return!!o&&(t===o||Se(o,t))}function Vu(t){const e=t?ut(t):"";return t!=null&&t.matches(vk)&&(e!=="summary"||t.parentElement!=null&&ut(t.parentElement)==="details"&&ai(t.parentElement)===t)&&(e!=="details"||ai(t)==null)&&(e!=="input"||t.type!=="hidden")}function Hu(t){if(!Vu(t)||!t.isConnected||t.matches(":disabled"))return!1;for(let e=t;e;e=Ck(e)){const o=e!==t,n=ut(e)==="slot";if(e.hasAttribute("inert")||o&&ut(e)==="details"&&!e.open&&!Tk(t,e)||e.hasAttribute("hidden")||!n&&!Sk(e,o))return!1}return!0}function Sk(t,e){const o=At(t);return e?o.display!=="none":Ms(t,o)}function qu(t){const e=t.tabIndex;if(e<0){const o=ut(t);if(o==="details"||o==="audio"||o==="video"||He(t)&&t.isContentEditable)return 0}return e}function ir(t){if(ut(t)!=="input")return null;const e=t;return e.type==="radio"&&e.name!==""?e:null}function Dk(t,e){const o=ir(t);if(!o)return!0;const n=e.find(a=>{const s=ir(a);return(s==null?void 0:s.name)===o.name&&s.form===o.form&&s.checked});return n?n===o:e.find(a=>{const s=ir(a);return(s==null?void 0:s.name)===o.name&&s.form===o.form})===o}function Wu(t){if(He(t)&&ut(t)==="slot"){const e=t.assignedElements({flatten:!0});if(e.length>0)return e}return He(t)&&t.shadowRoot?Array.from(t.shadowRoot.children):Array.from(t.children)}function Ku(t,e){Wu(t).forEach(o=>{Vu(o)&&e.push(o),Ku(o,e)})}function $u(t,e,o){Wu(t).forEach(n=>{He(n)&&n.matches(e)&&o.push(n),$u(n,e,o)})}function zi(t){return Hu(t)&&qu(t)>=0}function Gu(t){const e=[];return Ku(t,e),e.filter(Hu)}function xa(t){const e=Gu(t);return e.filter(o=>qu(o)>=0&&Dk(o,e))}function Ju(t,e){const o=xa(t),n=o.length;if(n===0)return;const a=vt(Le(t)),s=o.indexOf(a),r=s===-1?e===1?0:n-1:s+e;return o[r]}function Bi(t){return Ju(Le(t).body,1)||t}function Qu(t){return Ju(Le(t).body,-1)||t}function Yu(t,e){if(!t)return null;const o=xa(Le(t).body),n=o.length;if(n===0)return null;const a=o.indexOf(t);if(a===-1)return null;const s=(a+e+n)%n;return o[s]}function Ak(t){return Yu(t,1)}function xk(t){return Yu(t,-1)}function En(t,e){const o=e||t.currentTarget,n=t.relatedTarget;return!n||!Se(o,n)}function Pk(t){xa(t).forEach(o=>{o.dataset.tabindex=o.getAttribute("tabindex")||"",o.setAttribute("tabindex","-1")})}function pc(t){const e=[];$u(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 No(t,e,o=!0){return t.filter(a=>a.parentId===e).flatMap(a=>{var s;return[...!o||(s=a.context)!=null&&s.open?[a]:[],...No(t,a.id,o)]})}function mc(t,e){var a;let o=[],n=(a=t.find(s=>s.id===e))==null?void 0:a.parentId;for(;n;){const s=t.find(r=>r.id===n);n=s==null?void 0:s.parentId,s&&(o=o.concat(s))}return o}function ga(t){return`data-base-ui-${t}`}let Va=0;function os(t,e={}){const{preventScroll:o=!1,sync:n=!1,shouldFocus:a}=e;cancelAnimationFrame(Va);function s(){a&&!a()||t==null||t.focus({preventScroll:o})}if(n)return s(),Oi;const r=requestAnimationFrame(s);return Va=r,()=>{Va===r&&(cancelAnimationFrame(r),Va=0)}}const lr={inert:new WeakMap,"aria-hidden":new WeakMap},gc="data-base-ui-inert",si={inert:new WeakSet,"aria-hidden":new WeakSet};let ea=new WeakMap,cr=0;function Ek(t){return si[t]}function Zu(t){return t?Wn(t)?t.host:Zu(t.parentNode):null}const dr=(t,e)=>e.map(o=>{if(t.contains(o))return o;const n=Zu(o);return t.contains(n)?n:null}).filter(o=>o!=null),fc=t=>{const e=new Set;return t.forEach(o=>{let n=o;for(;n&&!e.has(n);)e.add(n),n=n.parentNode}),e},hc=(t,e,o)=>{const n=[],a=s=>{!s||o.has(s)||Array.from(s.children).forEach(r=>{ut(r)!=="script"&&(e.has(r)?a(r):n.push(r))})};return a(t),n};function Rk(t,e,o,n,{mark:a=!0,markerIgnoreElements:s=[]}){const r=n?"inert":o?"aria-hidden":null;let i=null,m=null;const d=dr(e,t),p=a?dr(e,s):[],u=new Set(p),g=a?hc(e,fc(d),new Set(d)).filter(b=>!u.has(b)):[],y=[],f=[];if(r){const b=lr[r],h=Ek(r);m=h,i=b;const w=dr(e,Array.from(e.querySelectorAll("[aria-live]"))),C=d.concat(w);hc(e,fc(C),new Set(C)).forEach(T=>{const k=T.getAttribute(r),S=k!==null&&k!=="false",A=(b.get(T)||0)+1;b.set(T,A),y.push(T),A===1&&S&&h.add(T),S||T.setAttribute(r,r==="inert"?"":"true")})}return a&&g.forEach(b=>{const h=(ea.get(b)||0)+1;ea.set(b,h),f.push(b),h===1&&b.setAttribute(gc,"")}),cr+=1,()=>{i&&y.forEach(b=>{const w=(i.get(b)||0)-1;i.set(b,w),w||(!(m!=null&&m.has(b))&&r&&b.removeAttribute(r),m==null||m.delete(b))}),a&&f.forEach(b=>{const h=(ea.get(b)||0)-1;ea.set(b,h),h||b.removeAttribute(gc)}),cr-=1,cr||(lr.inert=new WeakMap,lr["aria-hidden"]=new WeakMap,si.inert=new WeakSet,si["aria-hidden"]=new WeakSet,ea=new WeakMap)}}function bc(t,e={}){const{ariaHidden:o=!1,inert:n=!1,mark:a=!0,markerIgnoreElements:s=[]}=e,r=Le(t[0]).body;return Rk(t,r,o,n,{mark:a,markerIgnoreElements:s})}let yc=0;function Ik(t,e="mui"){const[o,n]=c.useState(t),a=t||o;return c.useEffect(()=>{o==null&&(yc+=1,n(`${e}-${yc}`))},[o,e]),a}const kc=ji.useId;function cn(t,e){if(kc!==void 0){const o=kc();return t??(e?`${e}-${o}`:o)}return Ik(t,e)}const Fk=parseInt(c.version,10);function Vi(t){return Fk>=t}function wc(t){if(!c.isValidElement(t))return null;const e=t,o=e.props;return(Vi(19)?o==null?void 0:o.ref:e.ref)??null}function ri(t,e){if(t&&!e)return t;if(!t&&e)return e;if(t||e)return{...t,...e}}function Mk(t,e){const o={};for(const n in t){const a=t[n];if(e!=null&&e.hasOwnProperty(n)){const s=e[n](a);s!=null&&Object.assign(o,s);continue}a===!0?o[`data-${n.toLowerCase()}`]="":a&&(o[`data-${n.toLowerCase()}`]=a.toString())}return o}function Ok(t,e){return typeof t=="function"?t(e):t}function Nk(t,e){return typeof t=="function"?t(e):t}const Hi={};function St(t,e,o,n,a){if(!o&&!n&&!a&&!t)return gs(e);let s=gs(t);return e&&(s=ia(s,e)),o&&(s=ia(s,o)),n&&(s=ia(s,n)),a&&(s=ia(s,a)),s}function jk(t){if(t.length===0)return Hi;if(t.length===1)return gs(t[0]);let e=gs(t[0]);for(let o=1;o=65&&a<=90&&(typeof e=="function"||typeof e>"u")}function qi(t){return typeof t=="function"}function ep(t,e){return qi(t)?t(e):t??Hi}function Uk(t,e){return e?t?(...o)=>{const n=o[0];if(np(n)){const s=n;fs(s);const r=e(...o);return s.baseUIHandlerPrevented||t==null||t(...o),r}const a=e(...o);return t==null||t(...o),a}:tp(e):t}function tp(t){return t&&((...e)=>{const o=e[0];return np(o)&&fs(o),t(...e)})}function fs(t){return t.preventBaseUIHandler=()=>{t.baseUIHandlerPrevented=!0},t}function op(t,e){return e?t?e+" "+t:e:t}function np(t){return t!=null&&typeof t=="object"&&"nativeEvent"in t}function tt(t,e,o={}){const n=e.render,a=zk(e,o);if(o.enabled===!1)return null;const s=o.state??Je;return Hk(t,n,a,s)}function zk(t,e={}){const{className:o,style:n,render:a}=t,{state:s=Je,ref:r,props:i,stateAttributesMapping:m,enabled:d=!0}=e,p=d?Ok(o,s):void 0,u=d?Nk(n,s):void 0,g=d?Mk(s,m):Je,y=d&&i?Bk(i):void 0,f=d?ri(g,y)??{}:Je;return typeof document<"u"&&(d?Array.isArray(r)?f.ref=Zy([f.ref,wc(a),...r]):f.ref=Kn(f.ref,wc(a),r):Kn(null,null)),d?(p!==void 0&&(f.className=op(f.className,p)),u!==void 0&&(f.style=ri(f.style,u)),f):Je}function Bk(t){return Array.isArray(t)?jk(t):St(void 0,t)}const Vk=Symbol.for("react.lazy");function Hk(t,e,o,n){if(e){if(typeof e=="function")return e(o,n);const a=St(o,e.props);a.ref=o.ref;let s=e;return(s==null?void 0:s.$$typeof)===Vk&&(s=c.Children.toArray(e)[0]),c.cloneElement(s,a)}if(t&&typeof t=="string")return qk(t,o);throw new Error(st(8))}function qk(t,e){return t==="button"?c.createElement("button",{type:"button",...e,key:e.key}):t==="img"?c.createElement("img",{alt:"",...e,key:e.key}):c.createElement(t,e)}const Wk=500,ap=500,Kk={style:{transition:"none"}},sp="data-base-ui-click-trigger",$k={fallbackAxisSide:"none"},Wi={fallbackAxisSide:"end"},Gk={clipPath:"inset(50%)",position:"fixed",top:0,left:0},rp=c.createContext(null),ip=()=>c.useContext(rp),Jk=ga("portal");function lp(t={}){const{ref:e,container:o,componentProps:n=Je,elementProps:a}=t,s=cn(),r=ip(),i=r==null?void 0:r.portalNode,[m,d]=c.useState(null),[p,u]=c.useState(null),g=De(h=>{h!==null&&u(h)}),y=c.useRef(null);he(()=>{if(o===null){y.current&&(y.current=null,u(null),d(null));return}if(s==null)return;const h=(o&&(Ii(o)?o:o.current))??i??document.body;if(h==null){y.current&&(y.current=null,u(null),d(null));return}y.current!==h&&(y.current=h,u(null),d(h))},[o,i,s]);const f=tt("div",n,{ref:[e,g],props:[{id:s,[Jk]:""},a]});return{portalNode:p,portalSubtree:m&&f?Vt.createPortal(f,m):null}}const Ki=c.forwardRef(function(e,o){const{render:n,className:a,style:s,children:r,container:i,renderGuards:m,...d}=e,{portalNode:p,portalSubtree:u}=lp({container:i,ref:o,componentProps:e,elementProps:d}),g=c.useRef(null),y=c.useRef(null),f=c.useRef(null),b=c.useRef(null),[h,w]=c.useState(null),C=c.useRef(!1),v=h==null?void 0:h.modal,T=h==null?void 0:h.open,k=typeof m=="boolean"?m:!!h&&!h.modal&&h.open&&!!p;c.useEffect(()=>{if(!p||v)return;function A(D){p&&D.relatedTarget&&En(D)&&(D.type==="focusin"?C.current&&(pc(p),C.current=!1):(Pk(p),C.current=!0))}return to(Fe(p,"focusin",A,!0),Fe(p,"focusout",A,!0))},[p,v]),c.useEffect(()=>{!p||T!==!1||(pc(p),C.current=!1)},[T,p]);const S=c.useMemo(()=>({beforeOutsideRef:g,afterOutsideRef:y,beforeInsideRef:f,afterInsideRef:b,portalNode:p,setFocusManagerState:w}),[p]);return l.jsxs(c.Fragment,{children:[u,l.jsxs(rp.Provider,{value:S,children:[k&&p&&l.jsx(Oo,{"data-type":"outside",ref:g,onFocus:A=>{var D;if(En(A,p))(D=f.current)==null||D.focus();else{const R=h?h.domReference:null,I=Qu(R);I==null||I.focus()}}}),k&&p&&l.jsx("span",{"aria-owns":p.id,style:Gk}),p&&Vt.createPortal(r,p),k&&p&&l.jsx(Oo,{"data-type":"outside",ref:y,onFocus:A=>{var D;if(En(A,p))(D=b.current)==null||D.focus();else{const R=h?h.domReference:null,I=Bi(R);I==null||I.focus(),h!=null&&h.closeOnFocusOut&&(h==null||h.onOpenChange(!1,Me(ln,A.nativeEvent)))}}})]})]})});function cp(){const t=new Map;return{emit(e,o){var n;(n=t.get(e))==null||n.forEach(a=>a(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 $i{constructor(){Ue(this,"nodesRef",{current:[]});Ue(this,"events",cp())}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 dp=c.createContext(null),up=c.createContext(null),go=()=>{var t;return((t=c.useContext(dp))==null?void 0:t.id)||null},Bo=t=>{const e=c.useContext(up);return t??e};function Gi(t){const e=cn(),o=Bo(t),n=go();return he(()=>{if(!e)return;const a={id:e,parentId:n};return o==null||o.addNode(a),()=>{o==null||o.removeNode(a)}},[o,e,n]),e}function pp(t){const{children:e,id:o}=t,n=go();return l.jsx(dp.Provider,{value:c.useMemo(()=>({id:o,parentId:n}),[o,n]),children:e})}function mp(t){const{children:e,externalTree:o}=t,n=Ot(()=>o??new $i).current;return l.jsx(up.Provider,{value:n,children:e})}function io(t){return t==null?t:"current"in t?t.current:t}function Qk(t,e){const o=Xe(ft(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 vc=20;let Eo=[];function Ji(){Eo=Eo.filter(t=>{var e;return(e=t.deref())==null?void 0:e.isConnected})}function Yk(t){Ji(),t&&ut(t)!=="body"&&(Eo.push(new WeakRef(t)),Eo.length>vc&&(Eo=Eo.slice(-vc)))}function ur(){var t;return Ji(),(t=Eo[Eo.length-1])==null?void 0:t.deref()}function Zk(t){return t?zi(t)?t:xa(t)[0]||t:null}function Cc(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=Gu(t).filter(r=>{const i=r.getAttribute("data-tabindex")||"";return zi(r)||r.hasAttribute("data-tabindex")&&!i.startsWith("-")}),a=t.getAttribute("tabindex");e.current.includes("floating")||n.length===0?a!=="0"&&t.setAttribute("tabindex","0"):(a!=="-1"||t.hasAttribute("data-tabindex")&&t.getAttribute("data-tabindex")!=="-1")&&(t.setAttribute("tabindex","-1"),t.setAttribute("data-tabindex","-1"))}function Qi(t){const{context:e,children:o,disabled:n=!1,initialFocus:a=!0,returnFocus:s=!0,restoreFocus:r=!1,modal:i=!0,closeOnFocusOut:m=!0,openInteractionType:d="",nextFocusableElement:p,previousFocusableElement:u,beforeContentFocusGuardRef:g,externalTree:y,getInsideElements:f}=t,b="rootStore"in e?e.rootStore:e,h=b.useState("open"),w=b.useState("domReferenceElement"),C=b.useState("floatingElement"),{events:v,dataRef:T}=b.context,k=De(()=>{var $;return($=T.current.floatingContext)==null?void 0:$.nodeId}),S=a===!1,A=Zr(w)&&S,D=c.useRef(["content"]),R=at(a),I=at(s),B=at(d),M=Bo(y),x=ip(),W=c.useRef(!1),O=c.useRef(!1),L=c.useRef(!1),N=c.useRef(null),V=c.useRef(""),K=c.useRef(""),F=c.useRef(null),ae=c.useRef(null),_=Kn(F,g,x==null?void 0:x.beforeInsideRef),z=Kn(ae,x==null?void 0:x.afterInsideRef),H=ht(),U=ht(),E=ma(),j=x!=null,q=Xr(C),Y=De(($=q)=>$?xa($):[]),be=De(()=>(f==null?void 0:f().filter($=>$!=null))??[]);c.useEffect(()=>{if(n||!i)return;function $(le){le.key==="Tab"&&Se(q,vt(Le(q)))&&Y().length===0&&!A&&Ft(le)}const ce=Le(q);return Fe(ce,"keydown",$)},[n,q,i,A,Y]),c.useEffect(()=>{if(n||!h)return;const $=Le(q);function ce(){L.current=!1}function le(fe){const ee=ft(fe),ve=be(),te=Se(C,ee)||Se(w,ee)||Se(x==null?void 0:x.portalNode,ee)||ve.some(Oe=>Oe===ee||Se(Oe,ee));L.current=!te,K.current=fe.pointerType||"keyboard",ee!=null&&ee.closest(`[${sp}]`)&&(O.current=!0)}function de(){K.current="keyboard"}return to(Fe($,"pointerdown",le,!0),Fe($,"pointerup",ce,!0),Fe($,"pointercancel",ce,!0),Fe($,"keydown",de,!0))},[n,C,w,q,h,x,be]),c.useEffect(()=>{if(n||!m)return;const $=Le(q);function ce(){O.current=!0,U.start(0,()=>{O.current=!1})}function le(ve){const te=ft(ve);zi(te)&&(N.current=te)}function de(ve){const te=ve.relatedTarget,Oe=ve.currentTarget,Ce=ft(ve);queueMicrotask(()=>{const ye=k(),Pe=b.context.triggerElements,pe=be(),J=(te==null?void 0:te.hasAttribute(ga("focus-guard")))&&[F.current,ae.current,x==null?void 0:x.beforeInsideRef.current,x==null?void 0:x.afterInsideRef.current,x==null?void 0:x.beforeOutsideRef.current,x==null?void 0:x.afterOutsideRef.current,io(u),io(p)].includes(te),ne=!(Se(w,te)||Se(C,te)||Se(te,C)||Se(x==null?void 0:x.portalNode,te)||pe.some(se=>se===te||Se(se,te))||te!=null&&Pe.hasElement(te)||Pe.hasMatchingElement(se=>Se(se,te))||J||M&&(No(M.nodesRef.current,ye).find(se=>{var X,ke;return Se((X=se.context)==null?void 0:X.elements.floating,te)||Se((ke=se.context)==null?void 0:ke.elements.domReference,te)})||mc(M.nodesRef.current,ye).find(se=>{var X,ke,xe;return[(X=se.context)==null?void 0:X.elements.floating,Xr((ke=se.context)==null?void 0:ke.elements.floating)].includes(te)||((xe=se.context)==null?void 0:xe.elements.domReference)===te})));if(Oe===w&&q&&Cc(q,D),r&&Oe!==w&&!Ms(Ce)&&vt($)===$.body){if(He(q)&&(q.focus(),r==="popup")){E.request(()=>{q.focus()});return}const se=Y(),X=N.current,ke=(X&&se.includes(X)?X:null)||se[se.length-1]||q;He(ke)&&ke.focus()}if(T.current.insideReactTree){T.current.insideReactTree=!1;return}(A||!i)&&te&&ne&&!O.current&&(A||te!==ur())&&(W.current=!0,b.setOpen(!1,Me(ln,ve)))})}function fe(){L.current||(T.current.insideReactTree=!0,H.start(0,()=>{T.current.insideReactTree=!1}))}const ee=He(w)?w:null;if(!(!C&&!ee))return to(ee&&Fe(ee,"focusout",de),ee&&Fe(ee,"pointerdown",ce),C&&Fe(C,"focusin",le),C&&Fe(C,"focusout",de),C&&x&&Fe(C,"focusout",fe,!0))},[n,w,C,q,i,M,x,b,m,r,Y,A,k,D,T,H,U,E,p,u,be]),c.useEffect(()=>{var Oe,Ce,ye;if(n||!C||!h)return;const $=Array.from(((Oe=x==null?void 0:x.portalNode)==null?void 0:Oe.querySelectorAll(`[${ga("portal")}]`))||[]),le=(ye=(Ce=(M?mc(M.nodesRef.current,k()):[]).find(Pe=>{var pe;return Zr(((pe=Pe.context)==null?void 0:pe.elements.domReference)||null)}))==null?void 0:Ce.context)==null?void 0:ye.elements.domReference,fe=[...[C,...$,F.current,ae.current,x==null?void 0:x.beforeOutsideRef.current,x==null?void 0:x.afterOutsideRef.current,...be()],le,io(u),io(p),A?w:null].filter(Pe=>Pe!=null),ee=bc(fe,{ariaHidden:i||A,mark:!1}),ve=[C,...$].filter(Pe=>Pe!=null),te=bc(ve);return()=>{te(),ee()}},[h,n,w,C,i,x,A,M,k,p,u,be]),he(()=>{if(!h||n||!He(q))return;const $=Le(q),ce=vt($);queueMicrotask(()=>{const le=R.current,de=typeof le=="function"?le(B.current||""):le;if(de===void 0||de===!1||Se(q,ce))return;let ee=null;const ve=()=>(ee==null&&(ee=Y(q)),ee[0]||q);let te;de===!0||de===null?te=ve():te=io(de),te=te||ve();const Oe=Se(q,vt($));os(te,{preventScroll:te===q,shouldFocus(){if(Oe)return!0;const Ce=vt($);return!(Ce!==te&&Se(q,Ce))}})})},[n,h,q,Y,R,B]),he(()=>{if(n||!q)return;const $=Le(q),ce=vt($);Yk(ce);function le(fe){if(fe.open||(V.current=Qk(fe.nativeEvent,K.current)),fe.reason===Ye&&fe.nativeEvent.type==="mouseleave"&&(W.current=!0),fe.reason===Ni)if(fe.nested)W.current=!1;else if(Eu(fe.nativeEvent)||Ru(fe.nativeEvent))W.current=!1;else{let ee=!1;Le(q).createElement("div").focus({get preventScroll(){return ee=!0,!1}}),ee?W.current=!1:W.current=!0}}v.on("openchange",le);function de(){const fe=I.current;let ee=typeof fe=="function"?fe(V.current):fe;if(ee===void 0||ee===!1)return null;if(ee===null&&(ee=!0),typeof ee=="boolean")return w!=null&&w.isConnected?w:ur()||null;const ve=w!=null&&w.isConnected?w:ur();return io(ee)||ve||null}return()=>{v.off("openchange",le);const fe=vt($),ee=be(),ve=Se(C,fe)||ee.some(Ce=>Ce===fe||Se(Ce,fe))||M&&No(M.nodesRef.current,k(),!1).some(Ce=>{var ye;return Se((ye=Ce.context)==null?void 0:ye.elements.floating,fe)}),te=I.current,Oe=de();queueMicrotask(()=>{const Ce=Zk(Oe),ye=typeof te!="boolean";te&&!W.current&&He(Ce)&&(!(!ye&&Ce!==fe&&fe!==$.body)||ve)&&Ce.focus({preventScroll:!0}),W.current=!1})}},[n,C,q,I,v,M,w,k,be]),he(()=>{if(!Su||h||!C)return;const $=vt(Le(C));!He($)||!Is($)||Se(C,$)&&$.blur()},[h,C]),he(()=>{if(!(n||!x))return x.setFocusManagerState({modal:i,closeOnFocusOut:m,open:h,onOpenChange:b.setOpen,domReference:w}),()=>{x.setFocusManagerState(null)}},[n,x,i,h,b,m,w]),he(()=>{if(!(n||!q))return Cc(q,D),()=>{queueMicrotask(Ji)}},[n,q,D]);const Ae=!n&&(i?!A:!0)&&(j||i);return l.jsxs(c.Fragment,{children:[Ae&&l.jsx(Oo,{"data-type":"inside",ref:_,onFocus:$=>{var ce;if(i){const le=Y();os(le[le.length-1])}else if(x!=null&&x.portalNode)if(W.current=!1,En($,x.portalNode)){const le=Bi(w);le==null||le.focus()}else(ce=io(u??x.beforeOutsideRef))==null||ce.focus()}}),o,Ae&&l.jsx(Oo,{"data-type":"inside",ref:z,onFocus:$=>{var ce;if(i)os(Y()[0]);else if(x!=null&&x.portalNode)if(m&&(W.current=!0),En($,x.portalNode)){const le=Qu(w);le==null||le.focus()}else(ce=io(p??x.afterOutsideRef))==null||ce.focus()}})]})}function Yi(t,e={}){const{enabled:o=!0,event:n="click",toggle:a=!0,ignoreMouse:s=!1,stickIfOpen:r=!0,touchOpenDelay:i=0,reason:m=po}=e,d="rootStore"in t?t.rootStore:t,p=d.context.dataRef,u=c.useRef(void 0),g=ma(),y=ht(),f=c.useMemo(()=>{function b(w,C,v,T){const k=Me(m,C,v);w&&T==="touch"&&i>0?y.start(i,()=>{d.setOpen(!0,k)}):d.setOpen(w,k)}function h(w,C,v){const T=p.current.openEvent,k=d.select("domReferenceElement")!==C;return w&&k||!w||!a?!0:T&&r?!v(T.type):!1}return{onPointerDown(w){u.current=w.pointerType},onMouseDown(w){const C=u.current,v=w.nativeEvent,T=d.select("open");if(w.button!==0||n==="click"||rn(C,!0)&&s)return;const k=h(T,w.currentTarget,D=>D==="click"||D==="mousedown"),S=ft(v);if(Is(S)){b(k,v,S,C);return}const A=w.currentTarget;g.request(()=>{b(k,v,A,C)})},onClick(w){if(n==="mousedown-only")return;const C=u.current;if(n==="mousedown"&&C){u.current=void 0;return}if(rn(C,!0)&&s)return;const v=d.select("open"),T=h(v,w.currentTarget,k=>k==="click"||k==="mousedown"||k==="keydown"||k==="keyup");b(T,w.nativeEvent,w.currentTarget,C)},onKeyDown(){u.current=void 0}}},[p,n,s,m,d,r,a,g,y,i]);return c.useMemo(()=>o?{reference:f}:Je,[o,f])}function Xk(t,e){let o=null,n=null,a=!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},r=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,p=s.height,u=s.x,g=s.y;return o==null&&e.x&&r&&(o=s.x-e.x),n==null&&e.y&&i&&(n=s.y-e.y),u-=o||0,g-=n||0,d=0,p=0,!a||m?(d=e.axis==="y"?s.width:0,p=e.axis==="x"?s.height:0,u=r&&e.x!=null?e.x:u,g=i&&e.y!=null?e.y:g):a&&!m&&(p=e.axis==="x"?s.height:p,d=e.axis==="y"?s.width:d),a=!0,{width:d,height:p,x:u,y:g,top:g,right:u+d,bottom:g+p,left:u}}}}function Tc(t){return t!=null&&t.clientX!=null}function ew(t,e={}){const{enabled:o=!0,axis:n="both"}=e,a="rootStore"in t?t.rootStore:t,s=a.useState("open"),r=a.useState("floatingElement"),i=a.useState("domReferenceElement"),m=a.context.dataRef,d=c.useRef(!1),p=c.useRef(null),[u,g]=c.useState(),[y,f]=c.useState([]),b=De(T=>{a.set("positionReference",T)}),h=De((T,k,S)=>{d.current||m.current.openEvent&&!Tc(m.current.openEvent)||a.set("positionReference",Xk(S??i,{x:T,y:k,axis:n,dataRef:m,pointerType:u}))}),w=De(T=>{s?p.current||(h(T.clientX,T.clientY,T.currentTarget),f([])):h(T.clientX,T.clientY,T.currentTarget)}),C=rn(u)?r:s;c.useEffect(()=>{if(!o){b(i);return}if(!C)return;function T(){var A;(A=p.current)==null||A.call(p),p.current=null}const k=Xe(r);function S(A){const D=ft(A);Se(r,D)?T():h(A.clientX,A.clientY)}return!m.current.openEvent||Tc(m.current.openEvent)?p.current=Fe(k,"mousemove",S):b(i),T},[C,o,r,m,i,a,h,b,y]),c.useEffect(()=>()=>{a.set("positionReference",null)},[a]),c.useEffect(()=>{o&&!r&&(d.current=!1)},[o,r]),c.useEffect(()=>{!o&&s&&(d.current=!0)},[o,s]);const v=c.useMemo(()=>{function T(k){g(k.pointerType)}return{onPointerDown:T,onPointerEnter:T,onMouseMove:w,onMouseEnter:w}},[w]);return c.useMemo(()=>o?{reference:v,trigger:v}:{},[o,v])}const tw={intentional:"onClick",sloppy:"onPointerDown"};function ow(){return!1}function nw(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 Os(t,e={}){const{enabled:o=!0,escapeKey:n=!0,outsidePress:a=!0,outsidePressEvent:s="sloppy",referencePress:r=ow,referencePressEvent:i="sloppy",bubbles:m,externalTree:d}=e,p="rootStore"in t?t.rootStore:t,u=p.useState("open"),g=p.useState("floatingElement"),{dataRef:y}=p.context,f=Bo(d),b=De(typeof a=="function"?a:()=>!1),h=typeof a=="function"?b:a,w=h!==!1,C=De(()=>s),{escapeKey:v,outsidePress:T}=nw(m),k=c.useRef(!1),S=c.useRef(!1),A=c.useRef(!1),D=c.useRef(!1),R=c.useRef(""),I=c.useRef(null),B=ht(),M=ht(),x=De(()=>{M.clear(),y.current.insideReactTree=!1}),W=De(z=>{var E;const H=(E=y.current.floatingContext)==null?void 0:E.nodeId;return(f?No(f.nodesRef.current,H):[]).some(j=>{var q;return((q=j.context)==null?void 0:q.open)&&!j.context.dataRef.current[z]})}),O=De(z=>ar(z,p.select("floatingElement"))||ar(z,p.select("domReferenceElement"))),L=De(z=>{r()&&p.setOpen(!1,Me(po,z.nativeEvent))}),N=De(z=>{if(!u||!o||!n||z.key!=="Escape"||D.current||!v&&W("__escapeKeyBubbles"))return;const H=Ly(z)?z.nativeEvent:z,U=Me(Aa,H);p.setOpen(!1,U),U.isCanceled||z.preventDefault(),!v&&!U.isPropagationAllowed&&z.stopPropagation()}),V=De(()=>{y.current.insideReactTree=!0,M.start(0,x)}),K=De(z=>{if(!u||!o||z.button!==0)return;const H=ft(z.nativeEvent);Se(p.select("floatingElement"),H)&&(k.current||(k.current=!0,S.current=!1))}),F=De(z=>{!u||!o||(z.defaultPrevented||z.nativeEvent.defaultPrevented)&&k.current&&(S.current=!0)});c.useEffect(()=>{if(!u||!o)return;y.current.__escapeKeyBubbles=v,y.current.__outsidePressBubbles=T;const z=new _t,H=new _t;function U(){z.clear(),D.current=!0}function E(){z.start(Es()?5:0,()=>{D.current=!1})}function j(){A.current=!0,H.start(0,()=>{A.current=!1})}function q(){k.current=!1,S.current=!1}function Y(){const J=R.current,ne=J==="pen"||!J?"mouse":J,se=C(),X=typeof se=="function"?se():se;return typeof X=="string"?X:X[ne]}function be(J){const ne=Y();return ne==="intentional"&&J.type!=="click"||ne==="sloppy"&&J.type==="click"}function Ae(J){var X;const ne=(X=y.current.floatingContext)==null?void 0:X.nodeId,se=f&&No(f.nodesRef.current,ne).some(ke=>{var xe;return ar(J,(xe=ke.context)==null?void 0:xe.elements.floating)});return O(J)||se}function $(J){if(be(J)){J.type!=="click"&&!O(J)&&(H.clear(),A.current=!1),x();return}if(y.current.insideReactTree){x();return}const ne=ft(J),se=`[${ga("inert")}]`,X=Re(ne)?ne.getRootNode():null,ke=Array.from((Wn(X)?X:Le(p.select("floatingElement"))).querySelectorAll(se)),xe=p.context.triggerElements;if(ne&&(xe.hasElement(ne)||xe.hasMatchingElement(Be=>Se(Be,ne))))return;let Ge=Re(ne)?ne:null;for(;Ge&&!eo(Ge);){const Be=no(Ge);if(eo(Be)||!Re(Be))break;Ge=Be}if(!(ke.length&&Re(ne)&&!Hy(ne)&&!Se(ne,p.select("floatingElement"))&&ke.every(Be=>!Se(Ge,Be)))){if(He(ne)&&!("touches"in J)){const Be=eo(ne),Qe=At(ne),it=/auto|scroll/,Nt=Be||it.test(Qe.overflowX),qt=Be||it.test(Qe.overflowY),Wt=Nt&&ne.clientWidth>0&&ne.scrollWidth>ne.clientWidth,ho=qt&&ne.clientHeight>0&&ne.scrollHeight>ne.clientHeight,xt=Qe.direction==="rtl",kn=ho&&(xt?J.offsetX<=ne.offsetWidth-ne.clientWidth:J.offsetX>ne.clientWidth),_e=Wt&&J.offsetY>ne.clientHeight;if(kn||_e)return}if(!Ae(J)){if(Y()==="intentional"&&A.current){H.clear(),A.current=!1;return}typeof h=="function"&&!h(J)||W("__outsidePressBubbles")||(p.setOpen(!1,Me(Ni,J)),x())}}}function ce(J){Y()!=="sloppy"||J.pointerType==="touch"||!p.select("open")||!o||O(J)||$(J)}function le(J){if(Y()!=="sloppy"||!p.select("open")||!o||O(J))return;const ne=J.touches[0];ne&&(I.current={startTime:Date.now(),startX:ne.clientX,startY:ne.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},B.start(1e3,()=>{I.current&&(I.current.dismissOnTouchEnd=!1,I.current.dismissOnMouseDown=!1)}))}function de(J,ne){const se=ft(J);if(!se)return;const X=Fe(se,J.type,()=>{ne(J),X()})}function fe(J){R.current="touch",de(J,le)}function ee(J){B.clear(),J.type==="pointerdown"&&(R.current=J.pointerType),!(J.type==="mousedown"&&I.current&&!I.current.dismissOnMouseDown)&&de(J,ne=>{ne.type==="pointerdown"?ce(ne):$(ne)})}function ve(J){if(!k.current)return;const ne=S.current;if(q(),Y()==="intentional"){if(J.type==="pointercancel"){ne&&j();return}if(!Ae(J)){if(ne){j();return}typeof h=="function"&&!h(J)||(H.clear(),A.current=!0,x())}}}function te(J){if(Y()!=="sloppy"||!I.current||O(J))return;const ne=J.touches[0];if(!ne)return;const se=Math.abs(ne.clientX-I.current.startX),X=Math.abs(ne.clientY-I.current.startY),ke=Math.sqrt(se*se+X*X);ke>5&&(I.current.dismissOnTouchEnd=!0),ke>10&&($(J),B.clear(),I.current=null)}function Oe(J){de(J,te)}function Ce(J){Y()!=="sloppy"||!I.current||O(J)||(I.current.dismissOnTouchEnd&&$(J),B.clear(),I.current=null)}function ye(J){de(J,Ce)}const Pe=Le(g),pe=to(n&&to(Fe(Pe,"keydown",N),Fe(Pe,"compositionstart",U),Fe(Pe,"compositionend",E)),w&&to(Fe(Pe,"click",ee,!0),Fe(Pe,"pointerdown",ee,!0),Fe(Pe,"pointerup",ve,!0),Fe(Pe,"pointercancel",ve,!0),Fe(Pe,"mousedown",ee,!0),Fe(Pe,"mouseup",ve,!0),Fe(Pe,"touchstart",fe,!0),Fe(Pe,"touchmove",Oe,!0),Fe(Pe,"touchend",ye,!0)));return()=>{pe(),z.clear(),H.clear(),q(),A.current=!1}},[y,g,n,w,h,u,o,v,T,N,x,C,W,O,f,p,B]),c.useEffect(x,[h,x]);const ae=c.useMemo(()=>({onKeyDown:N,[tw[i]]:L,...i!=="intentional"&&{onClick:L}}),[N,L,i]),_=c.useMemo(()=>({onKeyDown:N,onPointerDown:F,onMouseDown:F,onClickCapture:V,onMouseDownCapture(z){V(),K(z)},onPointerDownCapture(z){V(),K(z)},onMouseUpCapture:V,onTouchEndCapture:V,onTouchMoveCapture:V}),[N,V,K,F]);return c.useMemo(()=>o?{reference:ae,floating:_,trigger:ae}:{},[o,ae,_])}function Sc(t,e,o){let{reference:n,floating:a}=t;const s=Lt(e),r=Ui(e),i=_i(r),m=Tt(e),d=s==="y",p=n.x+n.width/2-a.width/2,u=n.y+n.height/2-a.height/2,g=n[i]/2-a[i]/2;let y;switch(m){case"top":y={x:p,y:n.y-a.height};break;case"bottom":y={x:p,y:n.y+n.height};break;case"right":y={x:n.x+n.width,y:u};break;case"left":y={x:n.x-a.width,y:u};break;default:y={x:n.x,y:n.y}}switch(zo(e)){case"start":y[r]-=g*(o&&d?-1:1);break;case"end":y[r]+=g*(o&&d?-1:1);break}return y}async function aw(t,e){var o;e===void 0&&(e={});const{x:n,y:a,platform:s,rects:r,elements:i,strategy:m}=t,{boundary:d="clippingAncestors",rootBoundary:p="viewport",elementContext:u="floating",altBoundary:g=!1,padding:y=0}=mo(e,t),f=Bu(y),h=i[g?u==="floating"?"reference":"floating":u],w=ps(await s.getClippingRect({element:(o=await(s.isElement==null?void 0:s.isElement(h)))==null||o?h:h.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(i.floating)),boundary:d,rootBoundary:p,strategy:m})),C=u==="floating"?{x:n,y:a,width:r.floating.width,height:r.floating.height}:r.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(i.floating)),T=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},k=ps(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:i,rect:C,offsetParent:v,strategy:m}):C);return{top:(w.top-k.top+f.top)/T.y,bottom:(k.bottom-w.bottom+f.bottom)/T.y,left:(w.left-k.left+f.left)/T.x,right:(k.right-w.right+f.right)/T.x}}const sw=50,rw=async(t,e,o)=>{const{placement:n="bottom",strategy:a="absolute",middleware:s=[],platform:r}=o,i=r.detectOverflow?r:{...r,detectOverflow:aw},m=await(r.isRTL==null?void 0:r.isRTL(e));let d=await r.getElementRects({reference:t,floating:e,strategy:a}),{x:p,y:u}=Sc(d,n,m),g=n,y=0;const f={};for(let b=0;bW<=0)){var B,M;const W=(((B=s.flip)==null?void 0:B.index)||0)+1,O=A[W];if(O&&(!(u==="alignment"?C!==Lt(O):!1)||I.every(V=>Lt(V.placement)===C?V.overflows[0]>0:!0)))return{data:{index:W,overflows:I},reset:{placement:O}};let L=(M=I.filter(N=>N.overflows[0]<=0).sort((N,V)=>N.overflows[1]-V.overflows[1])[0])==null?void 0:M.placement;if(!L)switch(y){case"bestFit":{var x;const N=(x=I.filter(V=>{if(S){const K=Lt(V.placement);return K===C||K==="y"}return!0}).map(V=>[V.placement,V.overflows.filter(K=>K>0).reduce((K,F)=>K+F,0)]).sort((V,K)=>V[1]-K[1])[0])==null?void 0:x[0];N&&(L=N);break}case"initialPlacement":L=i;break}if(a!==L)return{reset:{placement:L}}}return{}}}};function Dc(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Ac(t){return ik.some(e=>t[e]>=0)}const lw=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:o,platform:n}=e,{strategy:a="referenceHidden",...s}=mo(t,e);switch(a){case"referenceHidden":{const r=await n.detectOverflow(e,{...s,elementContext:"reference"}),i=Dc(r,o.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:Ac(i)}}}case"escaped":{const r=await n.detectOverflow(e,{...s,altBoundary:!0}),i=Dc(r,o.floating);return{data:{escapedOffsets:i,escaped:Ac(i)}}}default:return{}}}}},gp=new Set(["left","top"]);async function cw(t,e){const{placement:o,platform:n,elements:a}=t,s=await(n.isRTL==null?void 0:n.isRTL(a.floating)),r=Tt(o),i=zo(o),m=Lt(o)==="y",d=gp.has(r)?-1:1,p=s&&m?-1:1,u=mo(e,t);let{mainAxis:g,crossAxis:y,alignmentAxis:f}=typeof u=="number"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return i&&typeof f=="number"&&(y=i==="end"?f*-1:f),m?{x:y*p,y:g*d}:{x:g*d,y:y*p}}const dw=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var o,n;const{x:a,y:s,placement:r,middlewareData:i}=e,m=await cw(e,t);return r===((o=i.offset)==null?void 0:o.placement)&&(n=i.arrow)!=null&&n.alignmentOffset?{}:{x:a+m.x,y:s+m.y,data:{...m,placement:r}}}}},uw=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:o,y:n,placement:a,platform:s}=e,{mainAxis:r=!0,crossAxis:i=!1,limiter:m={fn:w=>{let{x:C,y:v}=w;return{x:C,y:v}}},...d}=mo(t,e),p={x:o,y:n},u=await s.detectOverflow(e,d),g=Lt(Tt(a)),y=Li(g);let f=p[y],b=p[g];if(r){const w=y==="y"?"top":"left",C=y==="y"?"bottom":"right",v=f+u[w],T=f-u[C];f=oi(v,f,T)}if(i){const w=g==="y"?"top":"left",C=g==="y"?"bottom":"right",v=b+u[w],T=b-u[C];b=oi(v,b,T)}const h=m.fn({...e,[y]:f,[g]:b});return{...h,data:{x:h.x-o,y:h.y-n,enabled:{[y]:r,[g]:i}}}}}},pw=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:o,y:n,placement:a,rects:s,middlewareData:r}=e,{offset:i=0,mainAxis:m=!0,crossAxis:d=!0}=mo(t,e),p={x:o,y:n},u=Lt(a),g=Li(u);let y=p[g],f=p[u];const b=mo(i,e),h=typeof b=="number"?{mainAxis:b,crossAxis:0}:{mainAxis:0,crossAxis:0,...b};if(m){const v=g==="y"?"height":"width",T=s.reference[g]-s.floating[v]+h.mainAxis,k=s.reference[g]+s.reference[v]-h.mainAxis;yk&&(y=k)}if(d){var w,C;const v=g==="y"?"width":"height",T=gp.has(Tt(a)),k=s.reference[u]-s.floating[v]+(T&&((w=r.offset)==null?void 0:w[u])||0)+(T?0:h.crossAxis),S=s.reference[u]+s.reference[v]+(T?0:((C=r.offset)==null?void 0:C[u])||0)-(T?h.crossAxis:0);fS&&(f=S)}return{[g]:y,[u]:f}}}},mw=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var o,n;const{placement:a,rects:s,platform:r,elements:i}=e,{apply:m=()=>{},...d}=mo(t,e),p=await r.detectOverflow(e,d),u=Tt(a),g=zo(a),y=Lt(a)==="y",{width:f,height:b}=s.floating;let h,w;u==="top"||u==="bottom"?(h=u,w=g===(await(r.isRTL==null?void 0:r.isRTL(i.floating))?"start":"end")?"left":"right"):(w=u,h=g==="end"?"top":"bottom");const C=b-p.top-p.bottom,v=f-p.left-p.right,T=$n(b-p[h],C),k=$n(f-p[w],v),S=!e.middlewareData.shift;let A=T,D=k;if((o=e.middlewareData.shift)!=null&&o.enabled.x&&(D=v),(n=e.middlewareData.shift)!=null&&n.enabled.y&&(A=C),S&&!g){const I=Mt(p.left,0),B=Mt(p.right,0),M=Mt(p.top,0),x=Mt(p.bottom,0);y?D=f-2*(I!==0||B!==0?I+B:Mt(p.left,p.right)):A=b-2*(M!==0||x!==0?M+x:Mt(p.top,p.bottom))}await m({...e,availableWidth:D,availableHeight:A});const R=await r.getDimensions(i.floating);return f!==R.width||b!==R.height?{reset:{rects:!0}}:{}}}};function fp(t){const e=At(t);let o=parseFloat(e.width)||0,n=parseFloat(e.height)||0;const a=He(t),s=a?t.offsetWidth:o,r=a?t.offsetHeight:n,i=ds(o)!==s||ds(n)!==r;return i&&(o=s,n=r),{width:o,height:n,$:i}}function Zi(t){return Re(t)?t:t.contextElement}function Rn(t){const e=Zi(t);if(!He(e))return oo(1);const o=e.getBoundingClientRect(),{width:n,height:a,$:s}=fp(e);let r=(s?ds(o.width):o.width)/n,i=(s?ds(o.height):o.height)/a;return(!r||!Number.isFinite(r))&&(r=1),(!i||!Number.isFinite(i))&&(i=1),{x:r,y:i}}const gw=oo(0);function hp(t){const e=Xe(t);return!Es()||!e.visualViewport?gw:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function fw(t,e,o){return e===void 0&&(e=!1),!o||e&&o!==Xe(t)?!1:e}function dn(t,e,o,n){e===void 0&&(e=!1),o===void 0&&(o=!1);const a=t.getBoundingClientRect(),s=Zi(t);let r=oo(1);e&&(n?Re(n)&&(r=Rn(n)):r=Rn(t));const i=fw(s,o,n)?hp(s):oo(0);let m=(a.left+i.x)/r.x,d=(a.top+i.y)/r.y,p=a.width/r.x,u=a.height/r.y;if(s){const g=Xe(s),y=n&&Re(n)?Xe(n):n;let f=g,b=Qr(f);for(;b&&n&&y!==f;){const h=Rn(b),w=b.getBoundingClientRect(),C=At(b),v=w.left+(b.clientLeft+parseFloat(C.paddingLeft))*h.x,T=w.top+(b.clientTop+parseFloat(C.paddingTop))*h.y;m*=h.x,d*=h.y,p*=h.x,u*=h.y,m+=v,d+=T,f=Xe(b),b=Qr(f)}}return ps({width:p,height:u,x:m,y:d})}function Ns(t,e){const o=Rs(t).scrollLeft;return e?e.left+o:dn(ao(t)).left+o}function bp(t,e){const o=t.getBoundingClientRect(),n=o.left+e.scrollLeft-Ns(t,o),a=o.top+e.scrollTop;return{x:n,y:a}}function hw(t){let{elements:e,rect:o,offsetParent:n,strategy:a}=t;const s=a==="fixed",r=ao(n),i=e?Ps(e.floating):!1;if(n===r||i&&s)return o;let m={scrollLeft:0,scrollTop:0},d=oo(1);const p=oo(0),u=He(n);if((u||!u&&!s)&&((ut(n)!=="body"||Uo(r))&&(m=Rs(n)),u)){const y=dn(n);d=Rn(n),p.x=y.x+n.clientLeft,p.y=y.y+n.clientTop}const g=r&&!u&&!s?bp(r,m):oo(0);return{width:o.width*d.x,height:o.height*d.y,x:o.x*d.x-m.scrollLeft*d.x+p.x+g.x,y:o.y*d.y-m.scrollTop*d.y+p.y+g.y}}function bw(t){return Array.from(t.getClientRects())}function yw(t){const e=ao(t),o=Rs(t),n=t.ownerDocument.body,a=Mt(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),s=Mt(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let r=-o.scrollLeft+Ns(t);const i=-o.scrollTop;return At(n).direction==="rtl"&&(r+=Mt(e.clientWidth,n.clientWidth)-a),{width:a,height:s,x:r,y:i}}const xc=25;function kw(t,e){const o=Xe(t),n=ao(t),a=o.visualViewport;let s=n.clientWidth,r=n.clientHeight,i=0,m=0;if(a){s=a.width,r=a.height;const p=Es();(!p||p&&e==="fixed")&&(i=a.offsetLeft,m=a.offsetTop)}const d=Ns(n);if(d<=0){const p=n.ownerDocument,u=p.body,g=getComputedStyle(u),y=p.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,f=Math.abs(n.clientWidth-u.clientWidth-y);f<=xc&&(s-=f)}else d<=xc&&(s+=d);return{width:s,height:r,x:i,y:m}}function ww(t,e){const o=dn(t,!0,e==="fixed"),n=o.top+t.clientTop,a=o.left+t.clientLeft,s=He(t)?Rn(t):oo(1),r=t.clientWidth*s.x,i=t.clientHeight*s.y,m=a*s.x,d=n*s.y;return{width:r,height:i,x:m,y:d}}function Pc(t,e,o){let n;if(e==="viewport")n=kw(t,o);else if(e==="document")n=yw(ao(t));else if(Re(e))n=ww(e,o);else{const a=hp(t);n={x:e.x-a.x,y:e.y-a.y,width:e.width,height:e.height}}return ps(n)}function yp(t,e){const o=no(t);return o===e||!Re(o)||eo(o)?!1:At(o).position==="fixed"||yp(o,e)}function vw(t,e){const o=e.get(t);if(o)return o;let n=pa(t,[],!1).filter(i=>Re(i)&&ut(i)!=="body"),a=null;const s=At(t).position==="fixed";let r=s?no(t):t;for(;Re(r)&&!eo(r);){const i=At(r),m=Fi(r);!m&&i.position==="fixed"&&(a=null),(s?!m&&!a:!m&&i.position==="static"&&!!a&&(a.position==="absolute"||a.position==="fixed")||Uo(r)&&!m&&yp(t,r))?n=n.filter(p=>p!==r):a=i,r=no(r)}return e.set(t,n),n}function Cw(t){let{element:e,boundary:o,rootBoundary:n,strategy:a}=t;const r=[...o==="clippingAncestors"?Ps(e)?[]:vw(e,this._c):[].concat(o),n],i=Pc(e,r[0],a);let m=i.top,d=i.right,p=i.bottom,u=i.left;for(let g=1;g{r(!1,1e-7)},1e3)}A===1&&!wp(d,t.getBoundingClientRect())&&r(),T=!1}try{o=new IntersectionObserver(k,{...v,root:a.ownerDocument})}catch{o=new IntersectionObserver(k,v)}o.observe(t)}return r(!0),s}function Rc(t,e,o,n){n===void 0&&(n={});const{ancestorScroll:a=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:m=!1}=n,d=Zi(t),p=a||s?[...d?pa(d):[],...e?pa(e):[]]:[];p.forEach(w=>{a&&w.addEventListener("scroll",o,{passive:!0}),s&&w.addEventListener("resize",o)});const u=d&&i?Pw(d,o):null;let g=-1,y=null;r&&(y=new ResizeObserver(w=>{let[C]=w;C&&C.target===d&&y&&e&&(y.unobserve(e),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var v;(v=y)==null||v.observe(e)})),o()}),d&&!m&&y.observe(d),e&&y.observe(e));let f,b=m?dn(t):null;m&&h();function h(){const w=dn(t);b&&!wp(b,w)&&o(),b=w,f=requestAnimationFrame(h)}return o(),()=>{var w;p.forEach(C=>{a&&C.removeEventListener("scroll",o),s&&C.removeEventListener("resize",o)}),u==null||u(),(w=y)==null||w.disconnect(),y=null,m&&cancelAnimationFrame(f)}}const Ew=dw,Rw=uw,Iw=iw,Fw=mw,Mw=lw,Ow=pw,Nw=(t,e,o)=>{const n=new Map,a={platform:xw,...o},s={...a.platform,_c:n};return rw(t,e,{...a,platform:s})};var jw=typeof document<"u",Lw=function(){},ns=jw?c.useLayoutEffect:Lw;function hs(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,a;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(!hs(t[n],e[n]))return!1;return!0}if(a=Object.keys(t),o=a.length,o!==Object.keys(e).length)return!1;for(n=o;n--!==0;)if(!{}.hasOwnProperty.call(e,a[n]))return!1;for(n=o;n--!==0;){const s=a[n];if(!(s==="_owner"&&t.$$typeof)&&!hs(t[s],e[s]))return!1}return!0}return t!==t&&e!==e}function vp(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function Ic(t,e){const o=vp(t);return Math.round(e*o)/o}function mr(t){const e=c.useRef(t);return ns(()=>{e.current=t}),e}function _w(t){t===void 0&&(t={});const{placement:e="bottom",strategy:o="absolute",middleware:n=[],platform:a,elements:{reference:s,floating:r}={},transform:i=!0,whileElementsMounted:m,open:d}=t,[p,u]=c.useState({x:0,y:0,strategy:o,placement:e,middlewareData:{},isPositioned:!1}),[g,y]=c.useState(n);hs(g,n)||y(n);const[f,b]=c.useState(null),[h,w]=c.useState(null),C=c.useCallback(V=>{V!==S.current&&(S.current=V,b(V))},[]),v=c.useCallback(V=>{V!==A.current&&(A.current=V,w(V))},[]),T=s||f,k=r||h,S=c.useRef(null),A=c.useRef(null),D=c.useRef(p),R=m!=null,I=mr(m),B=mr(a),M=mr(d),x=c.useCallback(()=>{if(!S.current||!A.current)return;const V={placement:e,strategy:o,middleware:g};B.current&&(V.platform=B.current),Nw(S.current,A.current,V).then(K=>{const F={...K,isPositioned:M.current!==!1};W.current&&!hs(D.current,F)&&(D.current=F,Vt.flushSync(()=>{u(F)}))})},[g,e,o,B,M]);ns(()=>{d===!1&&D.current.isPositioned&&(D.current.isPositioned=!1,u(V=>({...V,isPositioned:!1})))},[d]);const W=c.useRef(!1);ns(()=>(W.current=!0,()=>{W.current=!1}),[]),ns(()=>{if(T&&(S.current=T),k&&(A.current=k),T&&k){if(I.current)return I.current(T,k,x);x()}},[T,k,x,I,R]);const O=c.useMemo(()=>({reference:S,floating:A,setReference:C,setFloating:v}),[C,v]),L=c.useMemo(()=>({reference:T,floating:k}),[T,k]),N=c.useMemo(()=>{const V={position:o,left:0,top:0};if(!L.floating)return V;const K=Ic(L.floating,p.x),F=Ic(L.floating,p.y);return i?{...V,transform:"translate("+K+"px, "+F+"px)",...vp(L.floating)>=1.5&&{willChange:"transform"}}:{position:o,left:K,top:F}},[o,i,L.floating,p.x,p.y]);return c.useMemo(()=>({...p,update:x,refs:O,elements:L,floatingStyles:N}),[p,x,O,L,N])}const Uw=(t,e)=>{const o=Ew(t);return{name:o.name,fn:o.fn,options:[t,e]}},zw=(t,e)=>{const o=Rw(t);return{name:o.name,fn:o.fn,options:[t,e]}},Bw=(t,e)=>({fn:Ow(t).fn,options:[t,e]}),Vw=(t,e)=>{const o=Iw(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]}},qw=(t,e)=>{const o=Mw(t);return{name:o.name,fn:o.fn,options:[t,e]}},ie=(t,e,o,n,a,s,...r)=>{if(r.length>0)throw new Error(st(1));let i;if(t)i=t;else throw new Error("Missing arguments");return i};var Cp=Ug();const Ww=Vi(19),Kw=Ww?Gw:Jw;function Tp(t,e,o,n,a){return Kw(t,e,o,n,a)}function $w(t,e,o,n,a){const s=c.useCallback(()=>e(t.getSnapshot(),o,n,a),[t,e,o,n,a]);return Cp.useSyncExternalStore(t.subscribe,s,s)}Ey({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 a of t.syncHooks)o.add(a.store);const n=[];for(const a of o)n.push(a.subscribe(e));return()=>{for(const a of n)a()}}),Cp.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot))}});function Gw(t,e,o,n,a){const s=Py();if(!s)return $w(t,e,o,n,a);const r=s.syncIndex;s.syncIndex+=1;let i;return s.didInitialize?(i=s.syncHooks[r],(i.store!==t||i.selector!==e||!Object.is(i.a1,o)||!Object.is(i.a2,n)||!Object.is(i.a3,a))&&(i.store!==t&&(s.didChangeStore=!0),i.store=t,i.selector=e,i.a1=o,i.a2=n,i.a3=a,i.didChange=!0)):(i={store:t,selector:e,a1:o,a2:n,a3:a,value:e(t.getSnapshot(),o,n,a),didChange:!1},s.syncHooks.push(i)),i.value}function Jw(t,e,o,n,a){return zg.useSyncExternalStoreWithSelector(t.subscribe,t.getSnapshot,t.getSnapshot,s=>e(s,o,n,a))}class Qw{constructor(e){Ue(this,"subscribe",e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}));Ue(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,a){return Tp(this,e,o,n,a)}}class Pa extends Qw{constructor(e,o={},n){super(e),this.context=o,this.selectors=n}useSyncedValue(e,o){c.useDebugValue(e);const n=this;he(()=>{n.state[e]!==o&&n.set(e,o)},[n,e,o])}useSyncedValueWithCleanup(e,o){const n=this;he(()=>(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);he(()=>{o.update(e)},[o,...n])}useControlledProp(e,o){c.useDebugValue(e);const n=this,a=o!==void 0;he(()=>{a&&!Object.is(n.state[e],o)&&n.setState({...n.state,[e]:o})},[n,e,o,a])}select(e,o,n,a){const s=this.selectors[e];return s(this.state,o,n,a)}useState(e,o,n,a){return c.useDebugValue(e),Tp(this,this.selectors[e],o,n,a)}useContextCallback(e,o){c.useDebugValue(e);const n=De(o??Oi);this.context[e]=n}useStateSetter(e){const o=c.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 a=n(this.state);return o(a,a,this),this.subscribe(s=>{const r=n(s);if(!Object.is(a,r)){const i=a;a=r,o(r,i,this)}})}}const Yw={open:ie(t=>t.open),transitionStatus:ie(t=>t.transitionStatus),domReferenceElement:ie(t=>t.domReferenceElement),referenceElement:ie(t=>t.positionReference??t.referenceElement),floatingElement:ie(t=>t.floatingElement),floatingId:ie(t=>t.floatingId)};class js extends Pa{constructor(o){const{syncOnly:n,nested:a,onOpenChange:s,triggerElements:r,...i}=o;super({...i,positionReference:i.referenceElement,domReferenceElement:i.referenceElement},{onOpenChange:s,dataRef:{current:{}},events:cp(),nested:a,triggerElements:r},Yw);Ue(this,"syncOpenEvent",(o,n)=>{(!o||!this.state.open||n!=null&&_y(n))&&(this.context.dataRef.current.openEvent=o?n:void 0)});Ue(this,"dispatchOpenChange",(o,n)=>{this.syncOpenEvent(o,n.event);const a={open:o,reason:n.reason,nativeEvent:n.event,nested:this.context.nested,triggerElement:n.trigger};this.context.events.emit("openchange",a)});Ue(this,"setOpen",(o,n)=>{var a,s,r,i;if(this.syncOnly){(s=(a=this.context).onOpenChange)==null||s.call(a,o,n);return}this.dispatchOpenChange(o,n),(i=(r=this.context).onOpenChange)==null||i.call(r,o,n)});this.syncOnly=n}}function Sp(t){const{popupStore:e,treatPopupAsFloatingElement:o=!1,floatingRootContext:n,floatingId:a,nested:s,onOpenChange:r}=t,i=e.useState("open"),m=e.useState("activeTriggerElement"),d=e.useState(o?"popupElement":"positionerElement"),p=e.context.triggerElements,u=r,g=c.useRef(null);n===void 0&&g.current===null&&(g.current=new js({open:i,transitionStatus:void 0,referenceElement:m,floatingElement:d,triggerElements:p,onOpenChange:u,floatingId:a,syncOnly:!0,nested:s}));const y=n??g.current;return e.useSyncedValue("floatingId",a),he(()=>{const f={open:i,floatingId:a,referenceElement:m,floatingElement:d};Re(m)&&(f.domReferenceElement=m),y.state.positionReference===y.state.referenceElement&&(f.positionReference=m),y.update(f)},[i,a,m,d,y]),y.context.onOpenChange=u,y.context.nested=s,y}function Zw(t,e=!1,o=!1){const[n,a]=c.useState(t&&e?"idle":void 0),[s,r]=c.useState(t);return t&&!s&&(r(!0),a("starting")),!t&&s&&n!=="ending"&&!o&&a("ending"),!t&&!s&&n==="ending"&&a(void 0),he(()=>{if(!t&&s&&n!=="ending"&&o){const i=Zt.request(()=>{a("ending")});return()=>{Zt.cancel(i)}}},[t,s,n,o]),he(()=>{if(!t||e)return;const i=Zt.request(()=>{a(void 0)});return()=>{Zt.cancel(i)}},[e,t]),he(()=>{if(!t||!e)return;t&&s&&n!=="idle"&&a("starting");const i=Zt.request(()=>{a("idle")});return()=>{Zt.cancel(i)}},[e,t,s,n]),{mounted:s,setMounted:r,transitionStatus:n}}let fa=(function(t){return t.startingStyle="data-starting-style",t.endingStyle="data-ending-style",t})({});const Xw={[fa.startingStyle]:""},ev={[fa.endingStyle]:""},Ea={transitionStatus(t){return t==="starting"?Xw:t==="ending"?ev:null}};function Xi(t,e=!1,o=!0){const n=ma();return De((a,s=null)=>{n.cancel();const r=io(t);if(r==null)return;const i=r,m=()=>{Vt.flushSync(a)};if(typeof i.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){a();return}function d(){Promise.all(i.getAnimations().map(p=>p.finished)).then(()=>{s!=null&&s.aborted||m()}).catch(()=>{if(o){s!=null&&s.aborted||m();return}const p=i.getAnimations();!(s!=null&&s.aborted)&&p.length>0&&p.some(u=>u.pending||u.playState!=="finished")&&d()})}if(e){const p=fa.startingStyle;if(!i.hasAttribute(p)){n.request(d);return}const u=new MutationObserver(()=>{i.hasAttribute(p)||(u.disconnect(),d())});u.observe(i,{attributes:!0,attributeFilter:[p]}),s==null||s.addEventListener("abort",()=>u.disconnect(),{once:!0});return}n.request(d)})}function Ra(t){const{enabled:e=!0,open:o,ref:n,onComplete:a}=t,s=De(a),r=Xi(n,o,!1);c.useEffect(()=>{if(!e)return;const i=new AbortController;return r(s,i.signal),()=>{i.abort()}},[e,o,s,r])}const Qn={tabIndex:-1,[Yr]:""};function el(t,e,o=!1){const n=cn(),a=go()!=null,s=c.useRef(null);t===void 0&&s.current===null&&(s.current=e(n,a));const r=t??s.current;return Sp({popupStore:r,treatPopupAsFloatingElement:o,floatingRootContext:r.state.floatingRootContext,floatingId:n,nested:a,onOpenChange:r.setOpen}),{store:r,internalStore:s.current}}function Dp(t,e){const o=c.useRef(null),n=c.useRef(null);return c.useCallback(a=>{if(t===void 0)return;let s=!1;if(o.current!==null){const r=o.current,i=n.current,m=e.context.triggerElements.getById(r);i&&m===i&&(e.context.triggerElements.delete(r),s=!0),o.current=null,n.current=null}if(a!==null&&(o.current=t,n.current=a,e.context.triggerElements.add(t,a),s=!0),s){const r=e.context.triggerElements.size;e.select("open")&&e.state.triggerCount!==r&&e.set("triggerCount",r)}},[e,t])}function tl(t,e,o){const n=(o==null?void 0:o.id)??null;(n||e)&&(t.activeTriggerId=n,t.activeTriggerElement=o??null)}function ol(t,e,o,n){const a=o.useState("isMountedByTrigger",t),s=Dp(t,o),r=De(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 he(()=>{a&&o.update({activeTriggerElement:e.current,...n})},[a,o,e,...Object.values(n)]),{registerTrigger:r,isMountedByThisTrigger:a}}function Ls(t){const e=t.useState("open"),o=t.useState("triggerCount");he(()=>{if(!e){t.state.triggerCount!==0&&t.set("triggerCount",0);return}const n=t.context.triggerElements.size,a={};if(t.state.triggerCount!==n&&(a.triggerCount=n),!t.select("activeTriggerId")&&n===1){const s=t.context.triggerElements.entries().next();if(!s.done){const[r,i]=s.value;a.activeTriggerId=r,a.activeTriggerElement=i}}(a.triggerCount!==void 0||a.activeTriggerId!==void 0)&&t.update(a)},[e,t,o])}function _s(t,e,o){const{mounted:n,setMounted:a,transitionStatus:s}=Zw(t);e.useSyncedValues({mounted:n,transitionStatus:s});const r=De(()=>{var m,d;a(!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 Ra({enabled:n&&!t&&!i,open:t,ref:e.context.popupRef,onComplete(){t||r()}}),{forceUnmount:r,transitionStatus:s}}function Us(t,e){t.useSyncedValues(e),he(()=>()=>{t.update({activeTriggerProps:Je,inactiveTriggerProps:Je,popupProps:Je})},[t])}function Ap(t,e){he(()=>{!e&&t.state.openMethod!==null&&t.set("openMethod",null)},[e,t]),he(()=>()=>{t.state.openMethod!==null&&t.set("openMethod",null)},[t])}class Yn{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 tv(){return new js({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:new Yn,floatingId:void 0,syncOnly:!1,nested:!1,onOpenChange:void 0})}function zs(){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:tv(),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 nl(t,e,o=!1){return new js({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:t,floatingId:e,syncOnly:!0,nested:o,onOpenChange:void 0})}const la=ie(t=>t.triggerIdProp??t.activeTriggerId),al=ie(t=>t.openProp??t.open),Fc=ie(t=>{var o;return(((o=t.popupElement)==null?void 0:o.id)??t.floatingId)||void 0});function xp(t,e){return e!==void 0&&al(t)&&la(t)===e}function ov(t,e){return xp(t,e)?!0:e!==void 0&&al(t)&&la(t)==null&&t.triggerCount===1}const Bs={open:al,mounted:ie(t=>t.mounted),transitionStatus:ie(t=>t.transitionStatus),floatingRootContext:ie(t=>t.floatingRootContext),triggerCount:ie(t=>t.triggerCount),preventUnmountingOnClose:ie(t=>t.preventUnmountingOnClose),payload:ie(t=>t.payload),activeTriggerId:la,activeTriggerElement:ie(t=>t.mounted?t.activeTriggerElement:null),popupId:Fc,isTriggerActive:ie((t,e)=>e!==void 0&&la(t)===e),isOpenedByTrigger:ie((t,e)=>xp(t,e)),isMountedByTrigger:ie((t,e)=>e!==void 0&&la(t)===e&&t.mounted),triggerProps:ie((t,e)=>e?t.activeTriggerProps:t.inactiveTriggerProps),triggerPopupId:ie((t,e)=>ov(t,e)?Fc(t):void 0),popupProps:ie(t=>t.popupProps),popupElement:ie(t=>t.popupElement),positionerElement:ie(t=>t.positionerElement)};function nv(t){const{open:e=!1,onOpenChange:o,elements:n={}}=t,a=cn(),s=go()!=null,r=Ot(()=>new js({open:e,transitionStatus:void 0,onOpenChange:o,referenceElement:n.reference??null,floatingElement:n.floating??null,triggerElements:new Yn,floatingId:a,syncOnly:!1,nested:s})).current;return he(()=>{const i={open:e,floatingId:a};n.reference!==void 0&&(i.referenceElement=n.reference,i.domReferenceElement=Re(n.reference)?n.reference:null),n.floating!==void 0&&(i.floatingElement=n.floating),r.update(i)},[e,a,n.reference,n.floating,r]),r.context.onOpenChange=o,r.context.nested=s,r}function av(t={}){const{nodeId:e,externalTree:o}=t,n=nv(t),a=t.rootContext||n,s=a.useState("referenceElement"),r=a.useState("floatingElement"),i=a.useState("domReferenceElement"),m=a.useState("open"),d=a.useState("floatingId"),[p,u]=c.useState(null),[g,y]=c.useState(void 0),[f,b]=c.useState(void 0),h=c.useRef(null),w=Bo(o),C=c.useMemo(()=>({reference:s,floating:r,domReference:i}),[s,r,i]),v=_w({...t,elements:{...C,...p&&{reference:p}}}),T=Re(g)?g:null,k=f===void 0?a.state.floatingElement:f;a.useSyncedValue("referenceElement",g??null),a.useSyncedValue("domReferenceElement",g===void 0?i:T),a.useSyncedValue("floatingElement",k);const S=c.useCallback(M=>{const x=Re(M)?{getBoundingClientRect:()=>M.getBoundingClientRect(),getClientRects:()=>M.getClientRects(),contextElement:M}:M;u(x),v.refs.setReference(x)},[v.refs]),A=c.useCallback(M=>{(Re(M)||M===null)&&(h.current=M,y(M)),(Re(v.refs.reference.current)||v.refs.reference.current===null||M!==null&&!Re(M))&&v.refs.setReference(M)},[v.refs,y]),D=c.useCallback(M=>{b(M),v.refs.setFloating(M)},[v.refs]),R=c.useMemo(()=>({...v.refs,setReference:A,setFloating:D,setPositionReference:S,domReference:h}),[v.refs,A,D,S]),I=c.useMemo(()=>({...v.elements,domReference:i}),[v.elements,i]),B=c.useMemo(()=>({...v,dataRef:a.context.dataRef,open:m,onOpenChange:a.setOpen,events:a.context.events,floatingId:d,refs:R,elements:I,nodeId:e,rootStore:a}),[v,R,I,e,a,m,d]);return he(()=>{i&&(h.current=i)},[i]),he(()=>{a.context.dataRef.current.floatingContext=B;const M=w==null?void 0:w.nodesRef.current.find(x=>x.id===e);M&&(M.context=B)}),c.useMemo(()=>({...v,context:B,refs:R,elements:I,rootStore:a}),[v,R,I,B,a])}const gr=xu&&Au;function Pp(t,e={}){const{enabled:o=!0,delay:n}=e,a="rootStore"in t?t.rootStore:t,{events:s,dataRef:r}=a.context,i=c.useRef(!1),m=c.useRef(null),d=c.useRef(!0),p=ht();c.useEffect(()=>{const g=a.select("domReferenceElement");if(!o)return;const y=Xe(g);function f(){const w=a.select("domReferenceElement");!a.select("open")&&He(w)&&w===vt(Le(w))&&(i.current=!0)}function b(){d.current=!0}function h(){d.current=!1}return to(Fe(y,"blur",f),gr&&Fe(y,"keydown",b,!0),gr&&Fe(y,"pointerdown",h,!0))},[a,o]),c.useEffect(()=>{if(!o)return;function g(y){if(y.reason===po||y.reason===Aa){const f=a.select("domReferenceElement");Re(f)&&(m.current=f,i.current=!0)}}return s.on("openchange",g),()=>{s.off("openchange",g)}},[s,o,a]);const u=c.useMemo(()=>{function g(){i.current=!1,m.current=null}return{onMouseLeave(){g()},onFocus(y){const f=y.currentTarget;if(i.current){if(m.current===f)return;g()}const b=ft(y.nativeEvent);if(Re(b)){if(gr&&!y.relatedTarget){if(!d.current&&!Is(b))return}else if(!Wy(b))return}const h=ls(y.relatedTarget,a.context.triggerElements),{nativeEvent:w,currentTarget:C}=y,v=typeof n=="function"?n():n;if(a.select("open")&&h||v===0||v===void 0){a.setOpen(!0,Me(xn,w,C));return}p.start(v,()=>{i.current||a.setOpen(!0,Me(xn,w,C))})},onBlur(y){g();const f=y.relatedTarget,b=y.nativeEvent,h=Re(f)&&f.hasAttribute(ga("focus-guard"))&&f.getAttribute("data-type")==="outside";p.start(0,()=>{var T;const w=a.select("domReferenceElement"),C=vt(Le(w));!f&&C===w||Se((T=r.current.floatingContext)==null?void 0:T.refs.floating.current,C)||Se(w,C)||h||ls(f??C,a.context.triggerElements)||a.setOpen(!1,Me(xn,b))})}}},[r,n,a,p]);return c.useMemo(()=>o?{reference:u,trigger:u}:{},[o,u])}class sl{constructor(){Ue(this,"dispose",()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()});Ue(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 _t,this.restTimeout=new _t,this.handleCloseOptions=void 0}static create(){return new sl}}const bs=new WeakMap;function ys(t){var o,n,a;if(!t.performedPointerEventsMutation)return;const e=t.pointerEventsScopeElement;e&&bs.get(e)===t&&((o=t.pointerEventsScopeElement)==null||o.style.removeProperty("pointer-events"),(n=t.pointerEventsReferenceElement)==null||n.style.removeProperty("pointer-events"),(a=t.pointerEventsFloatingElement)==null||a.style.removeProperty("pointer-events"),bs.delete(e)),t.performedPointerEventsMutation=!1,t.pointerEventsScopeElement=null,t.pointerEventsReferenceElement=null,t.pointerEventsFloatingElement=null}function Ep(t,e){const{scopeElement:o,referenceElement:n,floatingElement:a}=e,s=bs.get(o);s&&s!==t&&ys(s),ys(t),t.performedPointerEventsMutation=!0,t.pointerEventsScopeElement=o,t.pointerEventsReferenceElement=n,t.pointerEventsFloatingElement=a,bs.set(o,t),o.style.pointerEvents="none",n.style.pointerEvents="auto",a.style.pointerEvents="auto"}function rl(t){const e=t.context.dataRef.current,o=Ot(()=>e.hoverInteractionState??sl.create()).current;return e.hoverInteractionState||(e.hoverInteractionState=o),Ri(e.hoverInteractionState.disposeEffect),e.hoverInteractionState}function il(t,e={}){const{enabled:o=!0,closeDelay:n=0,nodeId:a}=e,s="rootStore"in t?t.rootStore:t,r=s.useState("open"),i=s.useState("floatingElement"),m=s.useState("domReferenceElement"),{dataRef:d}=s.context,p=Bo(),u=go(),g=rl(s),y=ht(),f=De(()=>{var w;return Mu((w=d.current.openEvent)==null?void 0:w.type,g.interactedInside)}),b=De(()=>{var w;return $y((w=d.current.openEvent)==null?void 0:w.type)}),h=De(()=>{ys(g)});he(()=>{r||(g.pointerType=void 0,g.restTimeoutPending=!1,g.interactedInside=!1,h())},[r,g,h]),c.useEffect(()=>h,[h]),he(()=>{var w,C,v,T,k;if(o&&r&&(w=g.handleCloseOptions)!=null&&w.blockPointerEvents&&b()&&Re(m)&&i){const S=m,A=i,D=Le(i),R=(v=(C=p==null?void 0:p.nodesRef.current.find(x=>x.id===u))==null?void 0:C.context)==null?void 0:v.elements.floating;R&&(R.style.pointerEvents="");const I=g.pointerEventsScopeElement!==A?g.pointerEventsScopeElement:null,B=R!==A?R:null,M=((k=(T=g.handleCloseOptions)==null?void 0:T.getScope)==null?void 0:k.call(T))??I??B??S.closest("[data-rootownerid]")??D.body;return Ep(g,{scopeElement:M,referenceElement:S,floatingElement:A}),()=>{h()}}},[o,r,m,i,g,b,p,u,h]),c.useEffect(()=>{if(!o)return;function w(){return!!(p&&u&&No(p.nodesRef.current,u).length>0)}function C(D){const R=cs(n,"close",g.pointerType),I=()=>{s.setOpen(!1,Me(Ye,D)),p==null||p.events.emit("floating.closed",D)};R?g.openChangeTimeout.start(R,I):(g.openChangeTimeout.clear(),I())}function v(D){const R=ft(D);if(!qy(R)){g.interactedInside=!1;return}g.interactedInside=(R==null?void 0:R.closest("[aria-haspopup]"))!=null}function T(){g.openChangeTimeout.clear(),y.clear(),p==null||p.events.off("floating.closed",S),h()}function k(D){var M;if(w()&&p){p.events.on("floating.closed",S);return}if(ls(D.relatedTarget,s.context.triggerElements))return;const R=((M=d.current.floatingContext)==null?void 0:M.nodeId)??a,I=D.relatedTarget;if(!(p&&R&&Re(I)&&No(p.nodesRef.current,R,!1).some(x=>{var W;return Se((W=x.context)==null?void 0:W.elements.floating,I)}))){if(g.handler){g.handler(D);return}h(),f()||C(D)}}function S(D){!p||!u||w()||y.start(0,()=>{p.events.off("floating.closed",S),s.setOpen(!1,Me(Ye,D)),p.events.emit("floating.closed",D)})}const A=i;return to(A&&Fe(A,"mouseenter",T),A&&Fe(A,"mouseleave",k),A&&Fe(A,"pointerdown",v,!0),()=>{p==null||p.events.off("floating.closed",S)})},[o,i,s,d,n,a,f,h,g,p,u,y])}const sv={current:null};function Vs(t,e={}){var O;const{enabled:o=!0,delay:n=0,handleClose:a=null,mouseOnly:s=!1,restMs:r=0,move:i=!0,triggerElementRef:m=sv,externalTree:d,isActiveTrigger:p=!0,getHandleCloseContext:u,isClosing:g,shouldOpen:y}=e,f="rootStore"in t?t.rootStore:t,{dataRef:b,events:h}=f.context,w=Bo(d),C=rl(f),v=c.useRef(!1),T=at(a),k=at(n),S=at(r),A=at(o),D=at(y),R=at(g),I=De(()=>{var L;return Mu((L=b.current.openEvent)==null?void 0:L.type,C.interactedInside)}),B=De(()=>{var L;return((L=D.current)==null?void 0:L.call(D))!==!1}),M=De((L,N,V)=>{const K=f.context.triggerElements;if(K.hasElement(N))return!L||!Se(L,N);if(!Re(V))return!1;const F=V;return K.hasMatchingElement(ae=>Se(ae,F))&&(!L||!Se(L,F))}),x=De(()=>{if(!C.handler)return;Le(f.select("domReferenceElement")).removeEventListener("mousemove",C.handler),C.handler=void 0}),W=De(()=>{ys(C)});return p&&(C.handleCloseOptions=(O=T.current)==null?void 0:O.__options),c.useEffect(()=>x,[x]),c.useEffect(()=>{if(!o)return;function L(N){N.open?v.current=!1:(v.current=N.reason===Ye,x(),C.openChangeTimeout.clear(),C.restTimeout.clear(),C.blockMouseMove=!0,C.restTimeoutPending=!1)}return h.on("openchange",L),()=>{h.off("openchange",L)}},[o,h,C,x]),c.useEffect(()=>{if(!o)return;function L(F,ae=!0){const _=cs(k.current,"close",C.pointerType);_?C.openChangeTimeout.start(_,()=>{f.setOpen(!1,Me(Ye,F)),w==null||w.events.emit("floating.closed",F)}):ae&&(C.openChangeTimeout.clear(),f.setOpen(!1,Me(Ye,F)),w==null||w.events.emit("floating.closed",F))}const N=m.current??(p?f.select("domReferenceElement"):null);if(!Re(N))return;function V(F){var de;if(C.openChangeTimeout.clear(),C.blockMouseMove=!1,s&&!rn(C.pointerType))return;const ae=lc(S.current),_=cs(k.current,"open",C.pointerType),z=ft(F),H=F.currentTarget??null,U=f.select("domReferenceElement");let E=H;if(Re(z)&&!f.context.triggerElements.hasElement(z)){for(const fe of f.context.triggerElements.elements())if(Se(fe,z)){E=fe;break}}Re(H)&&Re(U)&&!f.context.triggerElements.hasElement(H)&&Se(H,U)&&(E=U);const j=E==null?!1:M(U,E,z),q=f.select("open"),Y=((de=R.current)==null?void 0:de.call(R))??f.select("transitionStatus")==="ending",be=!q&&Y&&v.current,Ae=!j&&Re(E)&&Re(U)&&Se(U,E)&&be,$=ae>0&&!_,ce=j&&(q||be)||Ae,le=!q||j;if(ce){B()&&f.setOpen(!0,Me(Ye,F,E));return}$||(_?C.openChangeTimeout.start(_,()=>{le&&B()&&f.setOpen(!0,Me(Ye,F,E))}):le&&B()&&f.setOpen(!0,Me(Ye,F,E)))}function K(F){if(I()){W();return}x();const ae=f.select("domReferenceElement"),_=Le(ae);C.restTimeout.clear(),C.restTimeoutPending=!1;const z=b.current.floatingContext??(u==null?void 0:u());if(ls(F.relatedTarget,f.context.triggerElements))return;if(T.current&&z){f.select("open")||C.openChangeTimeout.clear();const U=m.current;C.handler=T.current({...z,tree:w,x:F.clientX,y:F.clientY,onClose(){W(),x(),A.current&&!I()&&U===f.select("domReferenceElement")&&L(F,!0)}}),_.addEventListener("mousemove",C.handler),C.handler(F);return}(C.pointerType==="touch"?!Se(f.select("floatingElement"),F.relatedTarget):!0)&&L(F)}return i?to(Fe(N,"mousemove",V,{once:!0}),Fe(N,"mouseenter",V),Fe(N,"mouseleave",K)):to(Fe(N,"mouseenter",V),Fe(N,"mouseleave",K))},[x,W,b,k,f,o,T,C,p,M,I,s,i,S,m,w,A,u,R,B]),c.useMemo(()=>{if(!o)return;function L(N){C.pointerType=N.pointerType}return{onPointerDown:L,onPointerEnter:L,onMouseMove(N){var U,E,j;const{nativeEvent:V}=N,K=N.currentTarget,F=f.select("domReferenceElement"),ae=f.select("open"),_=M(F,K,N.target);if(s&&!rn(C.pointerType))return;if(ae&&_&&((U=C.handleCloseOptions)!=null&&U.blockPointerEvents)){const q=f.select("floatingElement");if(q){const Y=((j=(E=C.handleCloseOptions)==null?void 0:E.getScope)==null?void 0:j.call(E))??K.ownerDocument.body;Ep(C,{scopeElement:Y,referenceElement:K,floatingElement:q})}}const z=lc(S.current);if(ae&&!_||z===0||!_&&C.restTimeoutPending&&N.movementX**2+N.movementY**2<2)return;C.restTimeout.clear();function H(){if(C.restTimeoutPending=!1,I())return;const q=f.select("open");!C.blockMouseMove&&(!q||_)&&B()&&f.setOpen(!0,Me(Ye,V,K))}C.pointerType==="touch"?Vt.flushSync(()=>{H()}):_&&ae?H():(C.restTimeoutPending=!0,C.restTimeout.start(z,H))}}},[o,C,I,M,s,f,S,B])}const rv="Escape";function Hs(t,e,o){switch(t){case"vertical":return e;case"horizontal":return o;default:return e||o}}function Ha(t,e){return Hs(e,t===Mi||t===Da,t===Io||t===Fo)}function fr(t,e,o){return Hs(e,t===Da,o?t===Io:t===Fo)||t==="Enter"||t===" "||t===""}function iv(t,e,o){return Hs(e,o?t===Io:t===Fo,t===Da)}function lv(t,e,o,n){const a=o?t===Fo:t===Io,s=t===Mi;return e==="both"||e==="horizontal"&&n&&n>1?t===rv:Hs(e,a,s)}function cv(t,e){const{listRef:o,activeIndex:n,onNavigate:a=()=>{},enabled:s=!0,selectedIndex:r=null,allowEscape:i=!1,loopFocus:m=!1,nested:d=!1,rtl:p=!1,virtual:u=!1,focusItemOnOpen:g="auto",focusItemOnHover:y=!0,openOnArrowKeyDown:f=!0,disabledIndices:b=void 0,orientation:h="vertical",parentOrientation:w,cols:C=1,id:v,resetOnPointerLeave:T=!0,externalTree:k}=e,S="rootStore"in t?t.rootStore:t,A=S.useState("open"),D=S.useState("floatingElement"),R=S.useState("domReferenceElement"),I=S.context.dataRef,B=Xr(D),M=Zr(R),x=at(B),W=go(),O=Bo(k),L=c.useRef(g),N=c.useRef(r??-1),V=c.useRef(null),K=c.useRef(!0),F=De(pe=>{a(N.current===-1?null:N.current,pe)}),ae=c.useRef(F),_=c.useRef(!!D),z=c.useRef(A),H=c.useRef(!1),U=c.useRef(!1),E=c.useRef(null),j=at(b),q=at(A),Y=at(r),be=at(T),Ae=ma(),$=ma(),ce=De(()=>{function pe(X){u?O==null||O.events.emit("virtualfocus",X):E.current=os(X,{sync:H.current,preventScroll:!0})}const J=o.current[N.current],ne=U.current;J&&pe(J),(H.current?X=>X():X=>Ae.request(X))(()=>{var xe;const X=o.current[N.current]||J;if(!X)return;J||pe(X),te&&(ne||!K.current)&&((xe=X.scrollIntoView)==null||xe.call(X,{block:"nearest",inline:"nearest"}))})});he(()=>{I.current.orientation=h},[I,h]),he(()=>{s&&(A&&D?(N.current=r??-1,L.current&&r!=null&&(U.current=!0,F())):_.current&&(N.current=-1,ae.current()))},[s,A,D,r,F]),he(()=>{if(s){if(!A){H.current=!1;return}if(D)if(n==null){if(H.current=!1,Y.current!=null)return;if(_.current&&(N.current=-1,ce()),(!z.current||!_.current)&&L.current&&(V.current!=null||L.current===!0&&V.current==null)){let pe=0;const J=()=>{o.current[0]==null?(pe<2&&(pe?se=>$.request(se):queueMicrotask)(J),pe+=1):(N.current=V.current==null||fr(V.current,h,p)||d?rr(o):uc(o),V.current=null,F())};J()}}else ms(o.current,n)||(N.current=n,ce(),U.current=!1)}},[s,A,D,n,Y,d,o,h,p,F,ce,$]),he(()=>{var X,ke;if(!s||D||!O||u||!_.current)return;const pe=O.nodesRef.current,J=(ke=(X=pe.find(xe=>xe.id===W))==null?void 0:X.context)==null?void 0:ke.elements.floating,ne=vt(Le(D)),se=pe.some(xe=>xe.context&&Se(xe.context.elements.floating,ne));J&&!se&&K.current&&J.focus({preventScroll:!0})},[s,D,O,W,u]),he(()=>{ae.current=F,z.current=A,_.current=!!D}),he(()=>{A||(V.current=null,L.current=g)},[A,g]);const le=n!=null,de=De(pe=>{if(!q.current)return;const J=o.current.indexOf(pe.currentTarget);J!==-1&&(N.current!==J||n!==J)&&(N.current=J,F(pe))}),fe=De(()=>{var pe,J,ne;return w??((ne=(J=(pe=O==null?void 0:O.nodesRef.current.find(se=>se.id===W))==null?void 0:pe.context)==null?void 0:J.dataRef)==null?void 0:ne.current.orientation)}),ee=De(()=>rr(o,j.current)),ve=De(pe=>{if(K.current=!1,H.current=!0,pe.which===229||!q.current&&pe.currentTarget===x.current)return;if(d&&lv(pe.key,h,p,C)){Ha(pe.key,fe())||Ft(pe),S.setOpen(!1,Me(ti,pe.nativeEvent)),He(R)&&(u?O==null||O.events.emit("virtualfocus",R):R.focus());return}const J=N.current,ne=rr(o,b),se=uc(o,b);if(M||(pe.key==="Home"&&(Ft(pe),N.current=ne,F(pe)),pe.key==="End"&&(Ft(pe),N.current=se,F(pe))),C>1){const X=Array.from({length:o.current.length},()=>({width:1,height:1})),ke=bk(X,C,!1),xe=ke.findIndex(Qe=>Qe!=null&&!Pn(o.current,Qe,b)),Ge=ke.reduce((Qe,it,Nt)=>it!=null&&!Pn(o.current,it,b)?Nt:Qe,-1),Be=ke[hk(ke.map(Qe=>Qe!=null?o.current[Qe]:null),{event:pe,orientation:h,loopFocus:m,rtl:p,cols:C,disabledIndices:kk([...(typeof b!="function"?b:null)||o.current.map((Qe,it)=>Pn(o.current,it,b)?it:void 0),void 0],ke),minIndex:xe,maxIndex:Ge,prevIndex:yk(N.current>se?ne:N.current,X,ke,C,pe.key===Da?"bl":pe.key===(p?Io:Fo)?"tr":"tl"),stopEvent:!0})];if(Be!=null&&(N.current=Be,F(pe)),h==="both")return}if(Ha(pe.key,h)){if(Ft(pe),A&&!u&&vt(pe.currentTarget.ownerDocument)===pe.currentTarget){N.current=fr(pe.key,h,p)?ne:se,F(pe);return}fr(pe.key,h,p)?m?J>=se?i&&J!==o.current.length?N.current=-1:(H.current=!1,N.current=ne):N.current=gt(o.current,{startingIndex:J,disabledIndices:b}):N.current=Math.min(se,gt(o.current,{startingIndex:J,disabledIndices:b})):m?J<=ne?i&&J!==-1?N.current=o.current.length:(H.current=!1,N.current=se):N.current=gt(o.current,{startingIndex:J,decrement:!0,disabledIndices:b}):N.current=Math.max(ne,gt(o.current,{startingIndex:J,decrement:!0,disabledIndices:b})),ms(o.current,N.current)&&(N.current=-1),F(pe)}}),te=c.useMemo(()=>({onFocus(J){H.current=!0,de(J)},onClick:({currentTarget:J})=>J.focus({preventScroll:!0}),onMouseMove(J){H.current=!0,U.current=!1,y&&de(J)},onPointerLeave(J){var se;if(!q.current||!K.current||J.pointerType==="touch")return;H.current=!0;const ne=J.relatedTarget;if(!(!y||o.current.includes(ne))&&be.current&&((se=E.current)==null||se.call(E),E.current=null,N.current=-1,F(J),!u)){const X=x.current,ke=vt(Le(X));X&&Se(X,ke)&&X.focus({preventScroll:!0})}}}),[de,q,x,y,o,F,be,u]),Oe=c.useMemo(()=>u&&A&&le&&{"aria-activedescendant":`${v}-${n}`},[u,A,le,v,n]),Ce=c.useMemo(()=>({"aria-orientation":h==="both"?void 0:h,...M?{}:Oe,onKeyDown(pe){if(pe.key==="Tab"&&pe.shiftKey&&A&&!u){const J=ft(pe.nativeEvent);if(J&&!Se(x.current,J))return;Ft(pe),S.setOpen(!1,Me(ln,pe.nativeEvent)),He(R)&&R.focus();return}ve(pe)},onPointerMove(){K.current=!0}}),[Oe,ve,x,h,M,S,A,u,R]),ye=c.useMemo(()=>{function pe(se){S.setOpen(!0,Me(ti,se.nativeEvent,se.currentTarget))}function J(se){g==="auto"&&Eu(se.nativeEvent)&&(L.current=!u)}function ne(se){L.current=g,g==="auto"&&Ru(se.nativeEvent)&&(L.current=!0)}return{onKeyDown(se){const X=S.select("open");K.current=!1;const ke=se.key.startsWith("Arrow"),xe=iv(se.key,fe(),p),Ge=Ha(se.key,h),Be=(d?xe:Ge)||se.key==="Enter"||se.key.trim()==="";if(u&&X)return ve(se);if(!(!X&&!f&&ke)){if(Be){const Qe=Ha(se.key,fe());V.current=d&&Qe?null:se.key}if(d){xe&&(Ft(se),X?(N.current=ee(),F(se)):pe(se));return}Ge&&(Y.current!=null&&(N.current=Y.current),Ft(se),!X&&f?pe(se):ve(se),X&&F(se))}},onFocus(se){S.select("open")&&!u&&(N.current=-1,F(se))},onPointerDown:ne,onPointerEnter:ne,onMouseDown:J,onClick:J}},[ve,g,ee,d,F,S,f,h,fe,p,Y,u]),Pe=c.useMemo(()=>({...Oe,...ye}),[Oe,ye]);return c.useMemo(()=>s?{reference:Pe,floating:Ce,item:te,trigger:ye}:{},[s,Pe,Ce,ye,te])}function dv(t,e){const{listRef:o,elementsRef:n,activeIndex:a,onMatch:s,onTyping:r,enabled:i=!0,resetMs:m=750,selectedIndex:d=null}=e,p="rootStore"in t?t.rootStore:t,u=p.useState("open"),g=ht(),y=c.useRef(""),f=c.useRef(d??a??-1),b=c.useRef(null),h=De(v=>{function T(M){const x=n==null?void 0:n.current[M];return!x||Ms(x)}function k(M,x,W=0){if(M.length===0)return-1;const O=(W%M.length+M.length)%M.length,L=x.toLocaleLowerCase();for(let N=0;N0&&v.key===" "&&(Ft(v),r==null||r(!0)),y.current.length>0&&y.current[0]!==" "&&k(S,y.current)===-1&&v.key!==" "&&(r==null||r(!1)),S==null||v.key.length!==1||v.ctrlKey||v.metaKey||v.altKey)return;u&&v.key!==" "&&(Ft(v),r==null||r(!0));const A=y.current==="";A&&(f.current=d??a??-1),S.every(M=>{var x,W;return M?((x=M[0])==null?void 0:x.toLocaleLowerCase())!==((W=M[1])==null?void 0:W.toLocaleLowerCase()):!0})&&y.current===v.key&&(y.current="",f.current=b.current),y.current+=v.key,g.start(m,()=>{y.current="",f.current=b.current,r==null||r(!1)});const I=((A?d??a??-1:f.current)??0)+1,B=k(S,y.current,I);B!==-1?(s==null||s(B),b.current=B):v.key!==" "&&(y.current="",r==null||r(!1))}),w=De(v=>{const T=v.relatedTarget,k=p.select("domReferenceElement"),S=p.select("floatingElement");Se(k,T)||Se(S,T)||(g.clear(),y.current="",f.current=b.current,r==null||r(!1))});he(()=>{!u&&d!==null||(g.clear(),b.current=null,y.current!==""&&(y.current=""))},[u,d,g]),he(()=>{u&&y.current===""&&(f.current=d??a??-1)},[u,d,a]);const C=c.useMemo(()=>({onKeyDown:h,onBlur:w}),[h,w]);return c.useMemo(()=>i?{reference:C,floating:C}:{},[i,C])}const Mc=.1,uv=Mc*Mc,Ke=.5;function qa(t,e,o,n,a,s){return n>=e!=s>=e&&t<=(a-o)*(e-n)/(s-n)+o}function Wa(t,e,o,n,a,s,r,i,m,d){let p=!1;return qa(t,e,o,n,a,s)&&(p=!p),qa(t,e,a,s,r,i)&&(p=!p),qa(t,e,r,i,m,d)&&(p=!p),qa(t,e,m,d,o,n)&&(p=!p),p}function pv(t,e,o){return t>=o.x&&t<=o.x+o.width&&e>=o.y&&e<=o.y+o.height}function Ka(t,e,o,n,a,s){const r=Math.min(o,a),i=Math.max(o,a),m=Math.min(n,s),d=Math.max(n,s);return t>=r&&t<=i&&e>=m&&e<=d}function qs(t={}){const{blockPointerEvents:e=!1}=t,o=new _t,n=({x:a,y:s,placement:r,elements:i,onClose:m,nodeId:d,tree:p})=>{const u=r==null?void 0:r.split("-")[0];let g=!1,y=null,f=null,b=typeof performance<"u"?performance.now():0;function h(C,v){const T=performance.now(),k=T-b;if(y===null||f===null||k===0)return y=C,f=v,b=T,!1;const S=C-y,A=v-f,D=S*S+A*A,R=k*k*uv;return y=C,f=v,b=T,D0)}function x(){M()||w()}if(M())return;const W=T.getBoundingClientRect(),O=k.getBoundingClientRect(),L=a>O.right-O.width/2,N=s>O.bottom-O.height/2,V=O.width>W.width,K=O.height>W.height,F=(V?W:O).left,ae=(V?W:O).right,_=(K?W:O).top,z=(K?W:O).bottom;if(u==="top"&&s>=W.bottom-1||u==="bottom"&&s<=W.top+1||u==="left"&&a>=W.right-1||u==="right"&&a<=W.left+1){x();return}let H=!1;switch(u){case"top":H=Ka(S,A,F,W.top+1,ae,O.bottom-1);break;case"bottom":H=Ka(S,A,F,O.top+1,ae,W.bottom-1);break;case"left":H=Ka(S,A,O.right-1,z,W.left+1,_);break;case"right":H=Ka(S,A,W.right-1,z,O.left+1,_);break}if(H)return;if(g&&!pv(S,A,W)){x();return}if(!R&&h(S,A)){x();return}let U=!1;switch(u){case"top":{const E=V?Ke/2:Ke*4,j=V||L?a+E:a-E,q=V?a-E:L?a+E:a-E,Y=s+Ke+1,be=L||V?O.bottom-Ke:O.top,Ae=L?V?O.bottom-Ke:O.top:O.bottom-Ke;U=Wa(S,A,j,Y,q,Y,O.left,be,O.right,Ae);break}case"bottom":{const E=V?Ke/2:Ke*4,j=V||L?a+E:a-E,q=V?a-E:L?a+E:a-E,Y=s-Ke,be=L||V?O.top+Ke:O.bottom,Ae=L?V?O.top+Ke:O.bottom:O.top+Ke;U=Wa(S,A,j,Y,q,Y,O.left,be,O.right,Ae);break}case"left":{const E=K?Ke/2:Ke*4,j=K||N?s+E:s-E,q=K?s-E:N?s+E:s-E,Y=a+Ke+1,be=N||K?O.right-Ke:O.left,Ae=N?K?O.right-Ke:O.left:O.right-Ke;U=Wa(S,A,be,O.top,Ae,O.bottom,Y,j,Y,q);break}case"right":{const E=K?Ke/2:Ke*4,j=K||N?s+E:s-E,q=K?s-E:N?s+E:s-E,Y=a-Ke,be=N||K?O.left+Ke:O.right,Ae=N?K?O.left+Ke:O.right:O.left+Ke;U=Wa(S,A,Y,j,Y,q,be,O.top,Ae,O.bottom);break}}U?g||o.start(40,x):x()}};return n.__options={...t,blockPointerEvents:e},n}const mv={...Bs,disabled:ie(t=>t.disabled),instantType:ie(t=>t.instantType),isInstantPhase:ie(t=>t.isInstantPhase),trackCursorAxis:ie(t=>t.trackCursorAxis),disableHoverablePopup:ie(t=>t.disableHoverablePopup),lastOpenChangeReason:ie(t=>t.openChangeReason),closeOnClick:ie(t=>t.closeOnClick),closeDelay:ie(t=>t.closeDelay),hasViewport:ie(t=>t.hasViewport)};class ll extends Pa{constructor(o,n,a=!1){const s=new Yn,r={...gv(),...o};r.floatingRootContext=nl(s,n,a);super(r,{popupRef:c.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:s},mv);Ue(this,"setOpen",(o,n)=>{var d,p;const a=n.reason,s=a===Ye,r=o&&a===xn,i=!o&&(a===po||a===Aa);if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},(p=(d=this.context).onOpenChange)==null||p.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const u={open:o,openChangeReason:a};r?u.instantType="focus":i?u.instantType="dismiss":a===Ye&&(u.instantType=void 0),tl(u,o,n.trigger),this.update(u)};s?Vt.flushSync(m):m()})}cancelPendingOpen(o){this.state.floatingRootContext.dispatchOpenChange(!1,Me(po,o))}static useStore(o,n){return el(o,(s,r)=>new ll(n,s,r)).store}}function gv(){return{...zs(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,hasViewport:!1}}const fv=Ei(function(e){const{disabled:o=!1,defaultOpen:n=!1,open:a,disableHoverablePopup:s=!1,trackCursorAxis:r="none",actionsRef:i,onOpenChange:m,onOpenChangeComplete:d,handle:p,triggerId:u,defaultTriggerId:g=null,children:y}=e,f=ll.useStore(p==null?void 0:p.store,{open:n,openProp:a,activeTriggerId:g,triggerIdProp:u});As(()=>{a===void 0&&f.state.open===!1&&n===!0&&f.update({open:!0,activeTriggerId:g})}),f.useControlledProp("openProp",a),f.useControlledProp("triggerIdProp",u),f.useContextCallback("onOpenChange",m),f.useContextCallback("onOpenChangeComplete",d);const b=f.useState("open"),h=!o&&b,w=f.useState("activeTriggerId"),C=f.useState("mounted"),v=f.useState("payload");f.useSyncedValues({trackCursorAxis:r,disableHoverablePopup:s}),f.useSyncedValue("disabled",o),Ls(f);const{forceUnmount:T,transitionStatus:k}=_s(h,f),S=f.useState("isInstantPhase"),A=f.useState("instantType"),D=f.useState("lastOpenChangeReason"),R=c.useRef(null);he(()=>{b&&o&&f.setOpen(!1,Me(Jy))},[b,o,f]),he(()=>{k==="ending"&&D===Ou||k!=="ending"&&S?(A!=="delay"&&(R.current=A),f.set("instantType","delay")):R.current!==null&&(f.set("instantType",R.current),R.current=null)},[k,S,D,A,f]),he(()=>{h&&w==null&&f.set("payload",void 0)},[f,w,h]);const I=c.useCallback(()=>{f.setOpen(!1,Me(Fs))},[f]);c.useImperativeHandle(i,()=>({unmount:T,close:I}),[T,I]);const B=h||C||!o&&r!=="none";return l.jsxs(vu.Provider,{value:f,children:[B&&l.jsx(hv,{store:f,disabled:o,trackCursorAxis:r}),typeof y=="function"?y({payload:v}):y]})});function hv({store:t,disabled:e,trackCursorAxis:o}){const n=t.useState("floatingRootContext"),a=Os(n,{enabled:!e,referencePress:()=>t.select("closeOnClick")}),s=ew(n,{enabled:!e&&o!=="none",axis:o==="none"?void 0:o}),r=c.useMemo(()=>St(s.reference,a.reference),[s.reference,a.reference]),i=c.useMemo(()=>St(s.trigger,a.trigger),[s.trigger,a.trigger]),m=c.useMemo(()=>St(Qn,s.floating,a.floating),[s.floating,a.floating]);return Us(t,{activeTriggerProps:r,inactiveTriggerProps:i,popupProps:m}),null}let Jo=(function(t){return t.open="data-open",t.closed="data-closed",t[t.startingStyle=fa.startingStyle]="startingStyle",t[t.endingStyle=fa.endingStyle]="endingStyle",t.anchorHidden="data-anchor-hidden",t.side="data-side",t.align="data-align",t})({}),ks=(function(t){return t.popupOpen="data-popup-open",t.pressed="data-pressed",t})({});const bv={[ks.popupOpen]:""},yv={[ks.popupOpen]:"",[ks.pressed]:""},kv={[Jo.open]:""},wv={[Jo.closed]:""},vv={[Jo.anchorHidden]:""},cl={open(t){return t?bv:null}},ii={open(t){return t?yv:null}},gn={open(t){return t?kv:wv},anchorHidden(t){return t?vv:null}};function fn(t){return cn(t,"base-ui")}const Rp=c.createContext(void 0);function Cv(){return c.useContext(Rp)}let Tv=(function(t){return t[t.popupOpen=ks.popupOpen]="popupOpen",t.triggerDisabled="data-trigger-disabled",t})({});const Sv=600,Ip="data-base-ui-tooltip-trigger";function Oc(t){if("composedPath"in t){const o=t.composedPath();for(let n=0;nb.select("transitionStatus")==="ending",shouldOpen(){return!K.current}}),E=Pp(v,{enabled:!O}).reference,j=$=>{const ce=K.current,le=Oc($),de=H(le),fe=T.current,ee=fe&&le&&Se(fe,le);if(de&&b.select("open")&&b.select("lastOpenChangeReason")===Ye){b.setOpen(!1,Me(Ye,$));return}if(ce&&!de&&ee&&!L.current&&!b.select("open")&&fe&&rn(ae.current)){const ve=()=>{!K.current&&!L.current&&!b.select("open")&&b.setOpen(!0,Me(Ye,$,fe))},te=_();te===0?(F.clear(),ve()):F.start(te,ve)}},q=b.useState("triggerProps",D);return tt("button",e,{state:{open:C},ref:[o,A,T],props:[U,E,D||N!=="none"?q:void 0,{onMouseOver($){j($.nativeEvent)},onFocus($){z(Oc($.nativeEvent))&&$.preventBaseUIHandler()},onMouseLeave(){K.current=!1,F.clear(),ae.current=void 0},onPointerEnter($){ae.current=$.pointerType},onPointerDown($){ae.current=$.pointerType,b.set("closeOnClick",p),p&&!b.select("open")&&b.cancelPendingOpen($.nativeEvent)},onClick($){p&&!b.select("open")&&b.cancelPendingOpen($.nativeEvent)},id:h,[Tv.triggerDisabled]:O?"":void 0,[Ip]:O?void 0:""},y],stateAttributesMapping:cl})}),Fp=c.createContext(void 0);function xv(){const t=c.useContext(Fp);if(t===void 0)throw new Error(st(70));return t}const Pv=c.forwardRef(function(e,o){const{children:n,container:a,className:s,render:r,style:i,...m}=e,{portalNode:d,portalSubtree:p}=lp({container:a,ref:o,componentProps:e,elementProps:m});return!p&&!d?null:l.jsxs(c.Fragment,{children:[p,d&&Vt.createPortal(n,d)]})}),Ev=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e;return Sa().useState("mounted")||n?l.jsx(Fp.Provider,{value:n,children:l.jsx(Pv,{ref:o,...a})}):null}),Mp=c.createContext(void 0);function Op(){const t=c.useContext(Mp);if(t===void 0)throw new Error(st(71));return t}const Rv=c.createContext(void 0);function Np(){const t=c.useContext(Rv);return(t==null?void 0:t.direction)??"ltr"}const Iv=t=>({name:"arrow",options:t,async fn(e){var K,F;const{x:o,y:n,placement:a,rects:s,platform:r,elements:i,middlewareData:m}=e,{element:d,padding:p=0,offsetParent:u="real"}=mo(t,e)||{};if(d==null)return{};const g=Bu(p),y={x:o,y:n},f=Ui(a),b=_i(f),h=await r.getDimensions(d),w=f==="y",C=w?"top":"left",v=w?"bottom":"right",T=w?"clientHeight":"clientWidth",k=s.reference[b]+s.reference[f]-y[f]-s.floating[b],S=y[f]-s.reference[f],A=u==="real"?await((K=r.getOffsetParent)==null?void 0:K.call(r,d)):i.floating;let D=i.floating[T]||s.floating[b];(!D||!await((F=r.isElement)==null?void 0:F.call(r,A)))&&(D=i.floating[T]||s.floating[b]);const R=k/2-S/2,I=D/2-h[b]/2-1,B=Math.min(g[C],I),M=Math.min(g[v],I),x=B,W=D-h[b]-M,O=D/2-h[b]/2+R,L=oi(x,O,W),N=!m.arrow&&zo(a)!=null&&O!==L&&s.reference[b]/2-(O({...Iv(t),options:[t,e]}),Mv={name:"hide",async fn(t){var i;const{width:e,height:o,x:n,y:a}=t.rects.reference,s=e===0&&o===0&&n===0&&a===0;return{data:{referenceHidden:((i=(await qw().fn(t)).data)==null?void 0:i.referenceHidden)||s}}}},as={sideX:"left",sideY:"top"},dl={name:"adaptiveOrigin",async fn(t){var C,v;const{x:e,y:o,rects:{floating:n},elements:{floating:a},platform:s,strategy:r,placement:i}=t,m=Xe(a),d=m.getComputedStyle(a);if(!(d.transitionDuration!=="0s"&&d.transitionDuration!==""))return{x:e,y:o,data:as};const u=await((C=s.getOffsetParent)==null?void 0:C.call(s,a));let g={width:0,height:0};if(r==="fixed"&&(m!=null&&m.visualViewport))g={width:m.visualViewport.width,height:m.visualViewport.height};else if(u===m){const T=Le(a);g={width:T.documentElement.clientWidth,height:T.documentElement.clientHeight}}else await((v=s.isElement)==null?void 0:v.call(s,u))&&(g=await s.getDimensions(u));const y=Tt(i);let f=e,b=o;y==="left"&&(f=g.width-(e+n.width)),y==="top"&&(b=g.height-(o+n.height));const h=y==="left"?"right":as.sideX,w=y==="top"?"bottom":as.sideY;return{x:f,y:b,data:{sideX:h,sideY:w}}}};function jp(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:a}=t;return{side:jp(e,Tt(a),o),align:zo(a)||"center",anchor:{width:n.reference.width,height:n.reference.height},positioner:{width:n.floating.width,height:n.floating.height}}}function ul(t){var xt,kn;const{anchor:e,positionMethod:o="absolute",side:n="bottom",sideOffset:a=0,align:s="center",alignOffset:r=0,collisionBoundary:i,collisionPadding:m=5,sticky:d=!1,arrowPadding:p=5,disableAnchorTracking:u=!1,inline:g,keepMounted:y=!1,floatingRootContext:f,mounted:b,collisionAvoidance:h,shiftCrossAxis:w=!1,nodeId:C,adaptiveOrigin:v,lazyFlip:T=!1,externalTree:k}=t,[S,A]=c.useState(null);!b&&S!==null&&A(null);const D=h.side||"flip",R=h.align||"flip",I=h.fallbackAxisSide||"end",B=typeof e=="function"?e:void 0,M=De(B),x=B?M:e,W=at(e),O=at(b),N=Np()==="rtl",V=S||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":N?"left":"right","inline-start":N?"right":"left"}[n],K=s==="center"?V:`${V}-${s}`;let F=m;const ae=1,_=n==="bottom"?ae:0,z=n==="top"?ae:0,H=n==="right"?ae:0,U=n==="left"?ae:0;typeof F=="number"?F={top:F+_,right:F+U,bottom:F+z,left:F+H}:F&&(F={top:(F.top||0)+_,right:(F.right||0)+U,bottom:(F.bottom||0)+z,left:(F.left||0)+H});const E={boundary:i==="clipping-ancestors"?"clippingAncestors":i,padding:F},j=c.useRef(null),q=at(a),Y=at(r),be=typeof a!="function"?a:0,Ae=typeof r!="function"?r:0,$=[];g&&$.push(g),$.push(Uw(_e=>{const ot=Nc(_e,n,N),Pt=typeof q.current=="function"?q.current(ot):q.current,we=typeof Y.current=="function"?Y.current(ot):Y.current;return{mainAxis:Pt,crossAxis:we,alignmentAxis:we}},[be,Ae,N,n]));const ce=R==="none"&&D!=="shift",le=!ce&&(d||w||D==="shift"),de=D==="none"?null:Vw({...E,padding:{top:F.top+ae,right:F.right+ae,bottom:F.bottom+ae,left:F.left+ae},mainAxis:!w&&D==="flip",crossAxis:R==="flip"?"alignment":!1,fallbackAxisSideDirection:I}),fe=ce?null:zw(_e=>{const ot=Le(_e.elements.floating).documentElement;return{...E,rootBoundary:w?{x:0,y:0,width:ot.clientWidth,height:ot.clientHeight}:void 0,mainAxis:R!=="none",crossAxis:le,limiter:d||w?void 0:Bw(Pt=>{if(!j.current)return{};const{width:we,height:qe}=j.current.getBoundingClientRect(),We=Lt(Tt(Pt.placement)),et=We==="y"?we:qe,Ut=We==="y"?F.left+F.right:F.top+F.bottom;return{offset:et/2+Ut/2}})}},[E,d,w,F,R]);D==="shift"||R==="shift"||s==="center"?$.push(fe,de):$.push(de,fe),$.push(Hw({...E,apply({elements:{floating:_e},availableWidth:ot,availableHeight:Pt,rects:we}){if(!O.current)return;const qe=_e.style;qe.setProperty("--available-width",`${ot}px`),qe.setProperty("--available-height",`${Pt}px`);const We=Xe(_e).devicePixelRatio||1,{x:et,y:Ut,width:$e,height:ct}=we.reference,bo=(Math.round((et+$e)*We)-Math.round(et*We))/We,pt=(Math.round((Ut+ct)*We)-Math.round(Ut*We))/We;qe.setProperty("--anchor-width",`${bo}px`),qe.setProperty("--anchor-height",`${pt}px`)}}),Fv(_e=>({element:j.current||Le(_e.elements.floating).createElement("div"),padding:p,offsetParent:"floating"}),[p]),{name:"transformOrigin",fn(_e){var Ul,zl,Bl;const{elements:ot,middlewareData:Pt,placement:we,rects:qe,y:We}=_e,et=Tt(we),Ut=Lt(et),$e=j.current,ct=((Ul=Pt.arrow)==null?void 0:Ul.x)||0,bo=((zl=Pt.arrow)==null?void 0:zl.y)||0,pt=($e==null?void 0:$e.clientWidth)||0,Et=($e==null?void 0:$e.clientHeight)||0,wn=ct+pt/2,Kt=bo+Et/2,_l=Math.abs(((Bl=Pt.shift)==null?void 0:Bl.y)||0),Dg=qe.reference.height/2,Zn=typeof a=="function"?a(Nc(_e,n,N)):a,Ag=_l>Zn,xg={top:`${wn}px calc(100% + ${Zn}px)`,bottom:`${wn}px ${-Zn}px`,left:`calc(100% + ${Zn}px) ${Kt}px`,right:`${-Zn}px ${Kt}px`}[et],Pg=`${wn}px ${qe.reference.y+Dg-We}px`;return ot.floating.style.setProperty("--transform-origin",le&&Ut==="y"&&Ag?Pg:xg),{}}},Mv,v),he(()=>{!b&&f&&f.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[b,f]);const ee=c.useMemo(()=>({elementResize:!u&&typeof ResizeObserver<"u",layoutShift:!u&&typeof IntersectionObserver<"u"}),[u]),{refs:ve,elements:te,x:Oe,y:Ce,middlewareData:ye,update:Pe,placement:pe,context:J,isPositioned:ne,floatingStyles:se}=av({rootContext:f,open:y?b:void 0,placement:K,middleware:$,strategy:o,whileElementsMounted:y?void 0:(..._e)=>Rc(..._e,ee),nodeId:C,externalTree:k}),{sideX:X,sideY:ke}=ye.adaptiveOrigin||as,xe=ne?o:"fixed",Ge=c.useMemo(()=>{const _e=v?{position:xe,[X]:Oe,[ke]:Ce}:{position:xe,...se};return ne||(_e.opacity=0),_e},[v,xe,X,Oe,ke,Ce,se,ne]),Be=c.useRef(null);he(()=>{if(!b)return;const _e=W.current,ot=typeof _e=="function"?_e():_e,we=(jc(ot)?ot.current:ot)||null||null;we!==Be.current&&(ve.setPositionReference(we),Be.current=we)},[b,ve,x,W]),c.useEffect(()=>{if(!b)return;const _e=W.current;typeof _e!="function"&&jc(_e)&&_e.current!==Be.current&&(ve.setPositionReference(_e.current),Be.current=_e.current)},[b,ve,x,W]),c.useEffect(()=>{if(y&&b&&te.domReference&&te.floating)return Rc(te.domReference,te.floating,Pe,ee)},[y,b,te,Pe,ee]);const Qe=Tt(pe),it=jp(n,Qe,N),Nt=zo(pe)||"center",qt=!!((xt=ye.hide)!=null&&xt.referenceHidden);he(()=>{T&&b&&ne&&A(Qe)},[T,b,ne,Qe]);const Wt=c.useMemo(()=>{var _e,ot;return{position:"absolute",top:(_e=ye.arrow)==null?void 0:_e.y,left:(ot=ye.arrow)==null?void 0:ot.x}},[ye.arrow]),ho=((kn=ye.arrow)==null?void 0:kn.centerOffset)!==0;return c.useMemo(()=>({positionerStyles:Ge,arrowStyles:Wt,arrowRef:j,arrowUncentered:ho,side:it,align:Nt,physicalSide:Qe,anchorHidden:qt,refs:ve,context:J,isPositioned:ne,update:Pe}),[Ge,Wt,j,ho,it,Nt,Qe,qt,ve,J,ne,Pe])}function jc(t){return t!=null&&"current"in t}function Ws(t){return t==="starting"?Kk:Je}function pl(t,e,{styles:o,transitionStatus:n,props:a,refs:s,hidden:r,inert:i=!1}){const m={...o};return i&&(m.pointerEvents="none"),tt("div",t,{state:e,ref:s,props:[{role:"presentation",hidden:r,style:m},Ws(n),a],stateAttributesMapping:gn})}const Ov=c.forwardRef(function(e,o){const{render:n,className:a,anchor:s,positionMethod:r="absolute",side:i="top",align:m="center",sideOffset:d=0,alignOffset:p=0,collisionBoundary:u="clipping-ancestors",collisionPadding:g=5,arrowPadding:y=5,sticky:f=!1,disableAnchorTracking:b=!1,collisionAvoidance:h=Wi,style:w,...C}=e,v=Sa(),T=xv(),k=v.useState("open"),S=v.useState("mounted"),A=v.useState("trackCursorAxis"),D=v.useState("disableHoverablePopup"),R=v.useState("floatingRootContext"),I=v.useState("instantType"),B=v.useState("transitionStatus"),M=v.useState("hasViewport"),x=ul({anchor:s,positionMethod:r,floatingRootContext:R,mounted:S,side:i,sideOffset:d,align:m,alignOffset:p,collisionBoundary:u,collisionPadding:g,sticky:f,arrowPadding:y,disableAnchorTracking:b,keepMounted:T,collisionAvoidance:h,adaptiveOrigin:M?dl:void 0}),W=c.useMemo(()=>({open:k,side:x.side,align:x.align,anchorHidden:x.anchorHidden,instant:A!=="none"?"tracking-cursor":I}),[k,x.side,x.align,x.anchorHidden,A,I]),O=pl(e,W,{styles:x.positionerStyles,transitionStatus:B,props:C,refs:[o,v.useStateSetter("positionerElement")],hidden:!S,inert:!k||A==="both"||D});return l.jsx(Mp.Provider,{value:x,children:O})}),Nv={...gn,...Ea},jv=c.forwardRef(function(e,o){const{render:n,className:a,style:s,...r}=e,i=Sa(),{side:m,align:d}=Op(),p=i.useState("open"),u=i.useState("instantType"),g=i.useState("transitionStatus"),y=i.useState("popupProps"),f=i.useState("floatingRootContext"),b=i.useState("disabled"),h=i.useState("closeDelay");Ra({open:p,ref:i.context.popupRef,onComplete(){var T,k;p&&((k=(T=i.context).onOpenChangeComplete)==null||k.call(T,!0))}}),il(f,{enabled:!b,closeDelay:h});const w=i.useStateSetter("popupElement");return tt("div",e,{state:{open:p,side:m,align:d,instant:u,transitionStatus:g},ref:[o,i.context.popupRef,w],props:[y,Ws(g),r],stateAttributesMapping:Nv})}),Lv=c.forwardRef(function(e,o){const{render:n,className:a,style:s,...r}=e,i=Sa(),{arrowRef:m,side:d,align:p,arrowUncentered:u,arrowStyles:g}=Op(),y=i.useState("open"),f=i.useState("instantType");return tt("div",e,{state:{open:y,side:d,align:p,uncentered:u,instant:f},ref:[o,m],props:[{style:g,"aria-hidden":!0},r],stateAttributesMapping:gn})}),_v=function(e){const{delay:o,closeDelay:n,timeout:a=400}=e,s=c.useMemo(()=>({delay:o,closeDelay:n}),[o,n]),r=c.useMemo(()=>({open:o,close:n}),[o,n]);return l.jsx(Rp.Provider,{value:s,children:l.jsx(Qy,{delay:r,timeoutMs:a,children:e.children})})};function ml(t){return Vi(19)?t:t?"true":void 0}function Lp(t){var e,o,n="";if(typeof t=="string"||typeof t=="number")n+=t;else if(typeof t=="object")if(Array.isArray(t)){var a=t.length;for(e=0;e{const o=new Array(t.length+e.length);for(let n=0;n({classGroupId:t,validator:e}),Up=(t=new Map,e=null,o)=>({nextPart:t,validators:e,classGroupId:o}),ws="-",Lc=[],Bv="arbitrary..",Vv=t=>{const e=qv(t),{conflictingClassGroups:o,conflictingClassGroupModifiers:n}=t;return{getClassGroupId:r=>{if(r.startsWith("[")&&r.endsWith("]"))return Hv(r);const i=r.split(ws),m=i[0]===""&&i.length>1?1:0;return zp(i,m,e)},getConflictingClassGroupIds:(r,i)=>{if(i){const m=n[r],d=o[r];return m?d?Uv(d,m):m:d||Lc}return o[r]||Lc}}},zp=(t,e,o)=>{if(t.length-e===0)return o.classGroupId;const a=t[e],s=o.nextPart.get(a);if(s){const d=zp(t,e+1,s);if(d)return d}const r=o.validators;if(r===null)return;const i=e===0?t.join(ws):t.slice(e).join(ws),m=r.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?Bv+n:void 0})(),qv=t=>{const{theme:e,classGroups:o}=t;return Wv(o,e)},Wv=(t,e)=>{const o=Up();for(const n in t){const a=t[n];gl(a,o,n,e)}return o},gl=(t,e,o,n)=>{const a=t.length;for(let s=0;s{if(typeof t=="string"){$v(t,e,o);return}if(typeof t=="function"){Gv(t,e,o,n);return}Jv(t,e,o,n)},$v=(t,e,o)=>{const n=t===""?e:Bp(e,t);n.classGroupId=o},Gv=(t,e,o,n)=>{if(Qv(t)){gl(t(n),e,o,n);return}e.validators===null&&(e.validators=[]),e.validators.push(zv(o,t))},Jv=(t,e,o,n)=>{const a=Object.entries(t),s=a.length;for(let r=0;r{let o=t;const n=e.split(ws),a=n.length;for(let s=0;s"isThemeGetter"in t&&t.isThemeGetter===!0,Yv=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,o=Object.create(null),n=Object.create(null);const a=(s,r)=>{o[s]=r,e++,e>t&&(e=0,n=o,o=Object.create(null))};return{get(s){let r=o[s];if(r!==void 0)return r;if((r=n[s])!==void 0)return a(s,r),r},set(s,r){s in o?o[s]=r:a(s,r)}}},li="!",_c=":",Zv=[],Uc=(t,e,o,n,a)=>({modifiers:t,hasImportantModifier:e,baseClassName:o,maybePostfixModifierPosition:n,isExternal:a}),Xv=t=>{const{prefix:e,experimentalParseClassName:o}=t;let n=a=>{const s=[];let r=0,i=0,m=0,d;const p=a.length;for(let b=0;bm?d-m:void 0;return Uc(s,y,g,f)};if(e){const a=e+_c,s=n;n=r=>r.startsWith(a)?s(r.slice(a.length)):Uc(Zv,!1,r,void 0,!0)}if(o){const a=n;n=s=>o({className:s,parseClassName:a})}return n},eC=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((o,n)=>{e.set(o,1e6+n)}),o=>{const n=[];let a=[];for(let s=0;s0&&(a.sort(),n.push(...a),a=[]),n.push(r)):a.push(r)}return a.length>0&&(a.sort(),n.push(...a)),n}},tC=t=>({cache:Yv(t.cacheSize),parseClassName:Xv(t),sortModifiers:eC(t),postfixLookupClassGroupIds:oC(t),...Vv(t)}),oC=t=>{const e=Object.create(null),o=t.postfixLookupClassGroups;if(o)for(let n=0;n{const{parseClassName:o,getClassGroupId:n,getConflictingClassGroupIds:a,sortModifiers:s,postfixLookupClassGroupIds:r}=e,i=[],m=t.trim().split(nC);let d="";for(let p=m.length-1;p>=0;p-=1){const u=m[p],{isExternal:g,modifiers:y,hasImportantModifier:f,baseClassName:b,maybePostfixModifierPosition:h}=o(u);if(g){d=u+(d.length>0?" "+d:d);continue}let w=!!h,C;if(w){const A=b.substring(0,h);C=n(A);const D=C&&r[C]?n(b):void 0;D&&D!==C&&(C=D,w=!1)}else C=n(b);if(!C){if(!w){d=u+(d.length>0?" "+d:d);continue}if(C=n(b),!C){d=u+(d.length>0?" "+d:d);continue}w=!1}const v=y.length===0?"":y.length===1?y[0]:s(y).join(":"),T=f?v+li:v,k=T+C;if(i.indexOf(k)>-1)continue;i.push(k);const S=a(C,w);for(let A=0;A0?" "+d:d)}return d},sC=(...t)=>{let e=0,o,n,a="";for(;e{if(typeof t=="string")return t;let e,o="";for(let n=0;n{let o,n,a,s;const r=m=>{const d=e.reduce((p,u)=>u(p),t());return o=tC(d),n=o.cache.get,a=o.cache.set,s=i,i(m)},i=m=>{const d=n(m);if(d)return d;const p=aC(m,o);return a(m,p),p};return s=r,(...m)=>s(sC(...m))},iC=[],nt=t=>{const e=o=>o[t]||iC;return e.isThemeGetter=!0,e},Hp=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,qp=/^\((?:(\w[\w-]*):)?(.+)\)$/i,lC=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,cC=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,dC=/\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$/,uC=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,pC=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,mC=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,yo=t=>lC.test(t),Ee=t=>!!t&&!Number.isNaN(Number(t)),Gt=t=>!!t&&Number.isInteger(Number(t)),hr=t=>t.endsWith("%")&&Ee(t.slice(0,-1)),so=t=>cC.test(t),Wp=()=>!0,gC=t=>dC.test(t)&&!uC.test(t),fl=()=>!1,fC=t=>pC.test(t),hC=t=>mC.test(t),bC=t=>!me(t)&&!ge(t),yC=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)),kC=t=>Vo(t,Gp,fl),me=t=>Hp.test(t),Ko=t=>Vo(t,Jp,gC),zc=t=>Vo(t,xC,Ee),wC=t=>Vo(t,Yp,Wp),vC=t=>Vo(t,Qp,fl),Bc=t=>Vo(t,Kp,fl),CC=t=>Vo(t,$p,hC),$a=t=>Vo(t,Zp,fC),ge=t=>qp.test(t),ta=t=>hn(t,Jp),TC=t=>hn(t,Qp),Vc=t=>hn(t,Kp),SC=t=>hn(t,Gp),DC=t=>hn(t,$p),Ga=t=>hn(t,Zp,!0),AC=t=>hn(t,Yp,!0),Vo=(t,e,o)=>{const n=Hp.exec(t);return n?n[1]?e(n[1]):o(n[2]):!1},hn=(t,e,o=!1)=>{const n=qp.exec(t);return n?n[1]?e(n[1]):o:!1},Kp=t=>t==="position"||t==="percentage",$p=t=>t==="image"||t==="url",Gp=t=>t==="length"||t==="size"||t==="bg-size",Jp=t=>t==="length",xC=t=>t==="number",Qp=t=>t==="family-name",Yp=t=>t==="number"||t==="weight",Zp=t=>t==="shadow",PC=()=>{const t=nt("color"),e=nt("font"),o=nt("text"),n=nt("font-weight"),a=nt("tracking"),s=nt("leading"),r=nt("breakpoint"),i=nt("container"),m=nt("spacing"),d=nt("radius"),p=nt("shadow"),u=nt("inset-shadow"),g=nt("text-shadow"),y=nt("drop-shadow"),f=nt("blur"),b=nt("perspective"),h=nt("aspect"),w=nt("ease"),C=nt("animate"),v=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],k=()=>[...T(),ge,me],S=()=>["auto","hidden","clip","visible","scroll"],A=()=>["auto","contain","none"],D=()=>[ge,me,m],R=()=>[yo,"full","auto",...D()],I=()=>[Gt,"none","subgrid",ge,me],B=()=>["auto",{span:["full",Gt,ge,me]},Gt,ge,me],M=()=>[Gt,"auto",ge,me],x=()=>["auto","min","max","fr",ge,me],W=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],O=()=>["start","end","center","stretch","center-safe","end-safe"],L=()=>["auto",...D()],N=()=>[yo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...D()],V=()=>[yo,"screen","full","dvw","lvw","svw","min","max","fit",...D()],K=()=>[yo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...D()],F=()=>[t,ge,me],ae=()=>[...T(),Vc,Bc,{position:[ge,me]}],_=()=>["no-repeat",{repeat:["","x","y","space","round"]}],z=()=>["auto","cover","contain",SC,kC,{size:[ge,me]}],H=()=>[hr,ta,Ko],U=()=>["","none","full",d,ge,me],E=()=>["",Ee,ta,Ko],j=()=>["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"],Y=()=>[Ee,hr,Vc,Bc],be=()=>["","none",f,ge,me],Ae=()=>["none",Ee,ge,me],$=()=>["none",Ee,ge,me],ce=()=>[Ee,ge,me],le=()=>[yo,"full",...D()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[so],breakpoint:[so],color:[Wp],container:[so],"drop-shadow":[so],ease:["in","out","in-out"],font:[bC],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[so],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[so],shadow:[so],spacing:["px",Ee],text:[so],"text-shadow":[so],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",yo,me,ge,h]}],container:["container"],"container-type":[{"@container":["","normal","size",ge,me]}],"container-named":[yC],columns:[{columns:[Ee,me,ge,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:k()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:A()}],"overscroll-x":[{"overscroll-x":A()}],"overscroll-y":[{"overscroll-y":A()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:R()}],"inset-x":[{"inset-x":R()}],"inset-y":[{"inset-y":R()}],start:[{"inset-s":R(),start:R()}],end:[{"inset-e":R(),end:R()}],"inset-bs":[{"inset-bs":R()}],"inset-be":[{"inset-be":R()}],top:[{top:R()}],right:[{right:R()}],bottom:[{bottom:R()}],left:[{left:R()}],visibility:["visible","invisible","collapse"],z:[{z:[Gt,"auto",ge,me]}],basis:[{basis:[yo,"full","auto",i,...D()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ee,yo,"auto","initial","none",me]}],grow:[{grow:["",Ee,ge,me]}],shrink:[{shrink:["",Ee,ge,me]}],order:[{order:[Gt,"first","last","none",ge,me]}],"grid-cols":[{"grid-cols":I()}],"col-start-end":[{col:B()}],"col-start":[{"col-start":M()}],"col-end":[{"col-end":M()}],"grid-rows":[{"grid-rows":I()}],"row-start-end":[{row:B()}],"row-start":[{"row-start":M()}],"row-end":[{"row-end":M()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":x()}],"auto-rows":[{"auto-rows":x()}],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:L()}],mx:[{mx:L()}],my:[{my:L()}],ms:[{ms:L()}],me:[{me:L()}],mbs:[{mbs:L()}],mbe:[{mbe:L()}],mt:[{mt:L()}],mr:[{mr:L()}],mb:[{mb:L()}],ml:[{ml:L()}],"space-x":[{"space-x":D()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":D()}],"space-y-reverse":["space-y-reverse"],size:[{size:N()}],"inline-size":[{inline:["auto",...V()]}],"min-inline-size":[{"min-inline":["auto",...V()]}],"max-inline-size":[{"max-inline":["none",...V()]}],"block-size":[{block:["auto",...K()]}],"min-block-size":[{"min-block":["auto",...K()]}],"max-block-size":[{"max-block":["none",...K()]}],w:[{w:[i,"screen",...N()]}],"min-w":[{"min-w":[i,"screen","none",...N()]}],"max-w":[{"max-w":[i,"screen","none","prose",{screen:[r]},...N()]}],h:[{h:["screen","lh",...N()]}],"min-h":[{"min-h":["screen","lh","none",...N()]}],"max-h":[{"max-h":["screen","lh",...N()]}],"font-size":[{text:["base",o,ta,Ko]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[n,AC,wC]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",hr,me]}],"font-family":[{font:[TC,vC,e]}],"font-features":[{"font-features":[me]}],"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:[a,ge,me]}],"line-clamp":[{"line-clamp":[Ee,"none",ge,zc]}],leading:[{leading:[s,...D()]}],"list-image":[{"list-image":["none",ge,me]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ge,me]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:F()}],"text-color":[{text:F()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...j(),"wavy"]}],"text-decoration-thickness":[{decoration:[Ee,"from-font","auto",ge,Ko]}],"text-decoration-color":[{decoration:F()}],"underline-offset":[{"underline-offset":[Ee,"auto",ge,me]}],"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:[Gt,ge,me]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ge,me]}],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",ge,me]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ae()}],"bg-repeat":[{bg:_()}],"bg-size":[{bg:z()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Gt,ge,me],radial:["",ge,me],conic:[Gt,ge,me]},DC,CC]}],"bg-color":[{bg:F()}],"gradient-from-pos":[{from:H()}],"gradient-via-pos":[{via:H()}],"gradient-to-pos":[{to:H()}],"gradient-from":[{from:F()}],"gradient-via":[{via:F()}],"gradient-to":[{to:F()}],rounded:[{rounded:U()}],"rounded-s":[{"rounded-s":U()}],"rounded-e":[{"rounded-e":U()}],"rounded-t":[{"rounded-t":U()}],"rounded-r":[{"rounded-r":U()}],"rounded-b":[{"rounded-b":U()}],"rounded-l":[{"rounded-l":U()}],"rounded-ss":[{"rounded-ss":U()}],"rounded-se":[{"rounded-se":U()}],"rounded-ee":[{"rounded-ee":U()}],"rounded-es":[{"rounded-es":U()}],"rounded-tl":[{"rounded-tl":U()}],"rounded-tr":[{"rounded-tr":U()}],"rounded-br":[{"rounded-br":U()}],"rounded-bl":[{"rounded-bl":U()}],"border-w":[{border:E()}],"border-w-x":[{"border-x":E()}],"border-w-y":[{"border-y":E()}],"border-w-s":[{"border-s":E()}],"border-w-e":[{"border-e":E()}],"border-w-bs":[{"border-bs":E()}],"border-w-be":[{"border-be":E()}],"border-w-t":[{"border-t":E()}],"border-w-r":[{"border-r":E()}],"border-w-b":[{"border-b":E()}],"border-w-l":[{"border-l":E()}],"divide-x":[{"divide-x":E()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":E()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...j(),"hidden","none"]}],"divide-style":[{divide:[...j(),"hidden","none"]}],"border-color":[{border:F()}],"border-color-x":[{"border-x":F()}],"border-color-y":[{"border-y":F()}],"border-color-s":[{"border-s":F()}],"border-color-e":[{"border-e":F()}],"border-color-bs":[{"border-bs":F()}],"border-color-be":[{"border-be":F()}],"border-color-t":[{"border-t":F()}],"border-color-r":[{"border-r":F()}],"border-color-b":[{"border-b":F()}],"border-color-l":[{"border-l":F()}],"divide-color":[{divide:F()}],"outline-style":[{outline:[...j(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Ee,ge,me]}],"outline-w":[{outline:["",Ee,ta,Ko]}],"outline-color":[{outline:F()}],shadow:[{shadow:["","none",p,Ga,$a]}],"shadow-color":[{shadow:F()}],"inset-shadow":[{"inset-shadow":["none",u,Ga,$a]}],"inset-shadow-color":[{"inset-shadow":F()}],"ring-w":[{ring:E()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:F()}],"ring-offset-w":[{"ring-offset":[Ee,Ko]}],"ring-offset-color":[{"ring-offset":F()}],"inset-ring-w":[{"inset-ring":E()}],"inset-ring-color":[{"inset-ring":F()}],"text-shadow":[{"text-shadow":["none",g,Ga,$a]}],"text-shadow-color":[{"text-shadow":F()}],opacity:[{opacity:[Ee,ge,me]}],"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":Y()}],"mask-image-linear-to-pos":[{"mask-linear-to":Y()}],"mask-image-linear-from-color":[{"mask-linear-from":F()}],"mask-image-linear-to-color":[{"mask-linear-to":F()}],"mask-image-t-from-pos":[{"mask-t-from":Y()}],"mask-image-t-to-pos":[{"mask-t-to":Y()}],"mask-image-t-from-color":[{"mask-t-from":F()}],"mask-image-t-to-color":[{"mask-t-to":F()}],"mask-image-r-from-pos":[{"mask-r-from":Y()}],"mask-image-r-to-pos":[{"mask-r-to":Y()}],"mask-image-r-from-color":[{"mask-r-from":F()}],"mask-image-r-to-color":[{"mask-r-to":F()}],"mask-image-b-from-pos":[{"mask-b-from":Y()}],"mask-image-b-to-pos":[{"mask-b-to":Y()}],"mask-image-b-from-color":[{"mask-b-from":F()}],"mask-image-b-to-color":[{"mask-b-to":F()}],"mask-image-l-from-pos":[{"mask-l-from":Y()}],"mask-image-l-to-pos":[{"mask-l-to":Y()}],"mask-image-l-from-color":[{"mask-l-from":F()}],"mask-image-l-to-color":[{"mask-l-to":F()}],"mask-image-x-from-pos":[{"mask-x-from":Y()}],"mask-image-x-to-pos":[{"mask-x-to":Y()}],"mask-image-x-from-color":[{"mask-x-from":F()}],"mask-image-x-to-color":[{"mask-x-to":F()}],"mask-image-y-from-pos":[{"mask-y-from":Y()}],"mask-image-y-to-pos":[{"mask-y-to":Y()}],"mask-image-y-from-color":[{"mask-y-from":F()}],"mask-image-y-to-color":[{"mask-y-to":F()}],"mask-image-radial":[{"mask-radial":[ge,me]}],"mask-image-radial-from-pos":[{"mask-radial-from":Y()}],"mask-image-radial-to-pos":[{"mask-radial-to":Y()}],"mask-image-radial-from-color":[{"mask-radial-from":F()}],"mask-image-radial-to-color":[{"mask-radial-to":F()}],"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":T()}],"mask-image-conic-pos":[{"mask-conic":[Ee]}],"mask-image-conic-from-pos":[{"mask-conic-from":Y()}],"mask-image-conic-to-pos":[{"mask-conic-to":Y()}],"mask-image-conic-from-color":[{"mask-conic-from":F()}],"mask-image-conic-to-color":[{"mask-conic-to":F()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ae()}],"mask-repeat":[{mask:_()}],"mask-size":[{mask:z()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ge,me]}],filter:[{filter:["","none",ge,me]}],blur:[{blur:be()}],brightness:[{brightness:[Ee,ge,me]}],contrast:[{contrast:[Ee,ge,me]}],"drop-shadow":[{"drop-shadow":["","none",y,Ga,$a]}],"drop-shadow-color":[{"drop-shadow":F()}],grayscale:[{grayscale:["",Ee,ge,me]}],"hue-rotate":[{"hue-rotate":[Ee,ge,me]}],invert:[{invert:["",Ee,ge,me]}],saturate:[{saturate:[Ee,ge,me]}],sepia:[{sepia:["",Ee,ge,me]}],"backdrop-filter":[{"backdrop-filter":["","none",ge,me]}],"backdrop-blur":[{"backdrop-blur":be()}],"backdrop-brightness":[{"backdrop-brightness":[Ee,ge,me]}],"backdrop-contrast":[{"backdrop-contrast":[Ee,ge,me]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ee,ge,me]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ee,ge,me]}],"backdrop-invert":[{"backdrop-invert":["",Ee,ge,me]}],"backdrop-opacity":[{"backdrop-opacity":[Ee,ge,me]}],"backdrop-saturate":[{"backdrop-saturate":[Ee,ge,me]}],"backdrop-sepia":[{"backdrop-sepia":["",Ee,ge,me]}],"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",ge,me]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ee,"initial",ge,me]}],ease:[{ease:["linear","initial",w,ge,me]}],delay:[{delay:[Ee,ge,me]}],animate:[{animate:["none",C,ge,me]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[b,ge,me]}],"perspective-origin":[{"perspective-origin":k()}],rotate:[{rotate:Ae()}],"rotate-x":[{"rotate-x":Ae()}],"rotate-y":[{"rotate-y":Ae()}],"rotate-z":[{"rotate-z":Ae()}],scale:[{scale:$()}],"scale-x":[{"scale-x":$()}],"scale-y":[{"scale-y":$()}],"scale-z":[{"scale-z":$()}],"scale-3d":["scale-3d"],skew:[{skew:ce()}],"skew-x":[{"skew-x":ce()}],"skew-y":[{"skew-y":ce()}],transform:[{transform:[ge,me,"","none","gpu","cpu"]}],"transform-origin":[{origin:k()}],"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:[Gt,ge,me]}],accent:[{accent:F()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:F()}],"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",ge,me]}],"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":F()}],"scrollbar-track-color":[{"scrollbar-track":F()}],"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",ge,me]}],fill:[{fill:["none",...F()]}],"stroke-w":[{stroke:[Ee,ta,Ko,zc]}],stroke:[{stroke:["none",...F()]}],"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"]}},EC=rC(PC);function Ie(...t){return EC(_p(t))}function Xp({delay:t=0,...e}){return l.jsx(_v,{"data-slot":"tooltip-provider",delay:t,...e})}function em({...t}){return l.jsx(fv,{"data-slot":"tooltip",...t})}function tm({...t}){return l.jsx(Av,{"data-slot":"tooltip-trigger",...t})}function om({className:t,side:e="top",sideOffset:o=4,align:n="center",alignOffset:a=0,children:s,...r}){return l.jsx(Ev,{children:l.jsx(Ov,{align:n,alignOffset:a,side:e,sideOffset:o,className:"isolate z-50",children:l.jsxs(jv,{"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),...r,children:[s,l.jsx(Lv,{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 nm(){const t=Ig();return{push:e=>t(e),replace:e=>t(e,{replace:!0}),back:()=>t(-1),forward:()=>t(1),refresh:()=>t(0)}}function am(){return Mg().pathname}function dR(){return Fg()[0]}const Hc=t=>{let e;const o=new Set,n=(d,p)=>{const u=typeof d=="function"?d(e):d;if(!Object.is(u,e)){const g=e;e=p??(typeof u!="object"||u===null)?u:Object.assign({},e,u),o.forEach(y=>y(e,g))}},a=()=>e,i={setState:n,getState:a,getInitialState:()=>m,subscribe:d=>(o.add(d),()=>o.delete(d))},m=e=t(n,a,i);return i},RC=(t=>t?Hc(t):Hc),IC=t=>t;function FC(t,e=IC){const o=oe.useSyncExternalStore(t.subscribe,oe.useCallback(()=>e(t.getState()),[t,e]),oe.useCallback(()=>e(t.getInitialState()),[t,e]));return oe.useDebugValue(o),o}const MC=t=>{const e=RC(t),o=n=>FC(e,n);return Object.assign(o,e),o},hl=(t=>MC);function OC(t,e){let o;try{o=t()}catch{return}return{getItem:a=>{var s;const r=m=>m===null?null:JSON.parse(m,void 0),i=(s=o.getItem(a))!=null?s:null;return i instanceof Promise?i.then(r):r(i)},setItem:(a,s)=>o.setItem(a,JSON.stringify(s,void 0)),removeItem:a=>o.removeItem(a)}}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)}}}},NC=(t,e)=>(o,n,a)=>{let s={storage:OC(()=>window.localStorage),partialize:h=>h,version:0,merge:(h,w)=>({...w,...h}),...e},r=!1,i=0;const m=new Set,d=new Set;let p=s.storage;if(!p)return t((...h)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),o(...h)},n,a);const u=()=>{const h=s.partialize({...n()});return p.setItem(s.name,{state:h,version:s.version})},g=a.setState;a.setState=(h,w)=>(g(h,w),u());const y=t((...h)=>(o(...h),u()),n,a);a.getInitialState=()=>y;let f;const b=()=>{var h,w;if(!p)return;const C=++i;r=!1,m.forEach(T=>{var k;return T((k=n())!=null?k:y)});const v=((w=s.onRehydrateStorage)==null?void 0:w.call(s,(h=n())!=null?h:y))||void 0;return ci(p.getItem.bind(p))(s.name).then(T=>{if(T)if(typeof T.version=="number"&&T.version!==s.version){if(s.migrate){const k=s.migrate(T.state,T.version);return k instanceof Promise?k.then(S=>[!0,S]):[!0,k]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,T.state];return[!1,void 0]}).then(T=>{var k;if(C!==i)return;const[S,A]=T;if(f=s.merge(A,(k=n())!=null?k:y),o(f,!0),S)return u()}).then(()=>{C===i&&(v==null||v(n(),void 0),f=n(),r=!0,d.forEach(T=>T(f)))}).catch(T=>{C===i&&(v==null||v(void 0,T))})};return a.persist={setOptions:h=>{s={...s,...h},h.storage&&(p=h.storage)},clearStorage:()=>{p==null||p.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>b(),hasHydrated:()=>r,onHydrate:h=>(m.add(h),()=>{m.delete(h)}),onFinishHydration:h=>(d.add(h),()=>{d.delete(h)})},s.skipHydration||b(),f||y},bl=NC,jC={"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.jobs":"Job Queue","layout.tenants":"Tenants","layout.webhooks":"Webhooks","layout.apiTokens":"API Tokens","layout.workflows":"Workflows","layout.flows":"Flows","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.true":"Yes","common.false":"No","common.save":"Save","common.cancel":"Cancel","common.ok":"OK","common.create":"Create","common.creating":"Creating...","common.saving":"Saving...","common.deleting":"Deleting...","common.confirmDeleteNameDesc":'This action cannot be undone. Type "{name}" to confirm deletion:',"common.confirmDeleteNameLabel":"Name","common.delete":"Delete","common.confirmDeleteTitle":"Confirm Delete","common.edit":"Edit","common.content":"Content","common.listView":"List view","common.cardView":"Card view","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.refresh":"Refresh","common.all":"All","common.draft":"Draft","common.published":"Published","common.active":"Active","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","flows.title":"Flows","flows.newFlow":"New Flow","flows.createFlow":"Create Flow","flows.editFlow":"Edit","flows.deleteFlow":"Delete","flows.deleteConfirm":'Delete flow "{name}"? All of its versions and run instances will be removed.',"flows.instances":"Instances","flows.instances.noBody":"This step produced no input/output payload.","flows.instances.noSteps":"No node execution records for this instance.","flows.instances.triggerAll":"All triggers","flows.instances.trigger.api":"Manual (api)","flows.instances.trigger.api_public":"Public API","flows.instances.trigger.job":"Job","flows.instances.trigger.event":"Event","flows.instances.trigger.cron":"Cron","flows.instances.empty":"No instances yet. Run a flow to get started.","flows.instances.logs":"Node logs","flows.instances.node":"Node","flows.instances.type":"Type","flows.instances.flowName":"Flow","flows.instances.allStatus":"All statuses","flows.instances.latency":"Latency","flows.flowDeleted":"Flow deleted","flows.failedToDelete":"Failed to delete flow","flows.noFlows":"No flows found. Create one to get started.","flows.noFlowsDesc":"Build visual automations with the flow engine canvas.","flows.name":"Name","flows.description":"Description","flows.version":"v{version}","flows.versionColumn":"Version","flows.enabled":"Enabled","flows.disabled":"Disabled","flows.triggers.title":"Internal triggers","flows.triggers.all":"All kinds","flows.triggers.flowName":"Flow name","flows.triggers.kind":"Kind","flows.triggers.kindEvent":"Event (eventbus)","flows.triggers.kindCron":"Cron","flows.triggers.config":"Config","flows.triggers.newTrigger":"New trigger","flows.triggers.empty":"No internal triggers yet. Events/cron matched here auto-run the referenced flow.","flows.triggers.newDesc":"A trigger points at a flow; the flow never needs to know about it.","flows.triggers.triggerName":"Trigger name","flows.triggers.eventType":"Event type (event_type)","flows.triggers.cronExpr":"Cron expression","flows.triggers.filter":"Filter (JSON)","flows.triggers.inputsMap":"Inputs map (JSON)","flows.triggers.saved":"Saved","flows.triggers.deleted":"Trigger deleted","flows.triggers.created":"Trigger created","flows.triggers.deleteHint":'Delete trigger "{name}"?',"flows.draft":"draft","flows.api.title":"Publish as API","flows.api.token":"API token","flows.api.endpoint":"Endpoint","flows.api.curl":"Example request","flows.api.curlHint":"Dev backend is plain http on :9898; in production use your https domain.","flows.api.enable":"Enable API","flows.api.disable":"Disable","flows.api.regenerate":"Regenerate token","flows.api.enabled":"API enabled","flows.api.disabled":"API disabled","flows.api.disabledDesc":"This flow is not exposed yet. Enabling generates a token third parties use to call its latest published version.","flows.api.hint":"Runs the latest published version (drafts are ignored). Inputs are passed to the start node as JSON.","flows.api.copy":"Copy","flows.api.copied":"Copied","flows.api.failed":"Action failed","flows.api.requireAuth":"Require Bearer token (off = open to internal network)","flows.apis.title":"Public APIs","flows.apis.logsPage":"API Call Logs","flows.apis.allLogs":"All public-API calls","flows.apis.listDesc":'Manage the flows published as public APIs. Click "API Call Logs" to review external invocations.',"flows.apis.apiTab":"APIs","flows.apis.logsTab":"Call logs","flows.apis.empty":"No published APIs yet. Enable one from a flow's More menu.","flows.apis.noLogs":"No external API calls yet.","flows.apis.time":"Time","flows.apis.flow":"Flow","flows.apis.inputs":"Inputs","flows.apis.detail":"Edit flow","flows.apis.logs":"Call logs","flows.apis.viewSteps":"View step logs","flows.apis.restore":"Restore","flows.apis.saved":"Updated","flows.apis.apiSettings":"API settings","flows.apis.regenerate":"Regenerate token","flows.apis.rotated":"Token rotated","flows.apis.enableFirst":"Enable the API first, then change its auth requirement.","flows.apis.slug":"Slug (public path id)","flows.apis.slugHint":"Identifies this endpoint. Changing it makes the old URL invalid immediately.","flows.apis.regenerateSlug":"Regenerate slug","flows.apis.slugRotated":"Slug updated","flows.apis.usageTitle":"Usage","flows.apis.copyCurl":"Copy curl","flows.apis.usageSteps":"POST the latest published version of this flow; body inputs go to the start node. Returns status / outputs / instance_id; if it parks on approval it returns status=waiting.","flows.apis.auth":"Auth","flows.apis.open":"Open","flows.apis.authBearer":"Bearer","flows.apis.deleted":"API deleted","flows.apis.deleteApi":"Delete API","flows.apis.deleteHint":'Delete the public API of "{name}"? Its token becomes invalid permanently (pausing keeps the token, deleting does not).',"flows.updated":"Updated","flows.run":"Run","flows.runFlow":"Run Flow","flows.runConfirm":'Run flow "{name}"? Inputs are passed to the start node.',"flows.runStarted":"Flow run started","flows.failedToRun":"Failed to run flow","flows.inputsJson":"Inputs (JSON)","flows.instance.title":"Flow Instance","flows.instance.status":"Status","flows.instance.error":"Error","flows.instance.outputs":"Outputs","flows.instance.payload":"Resume payload (JSON)","flows.instance.resume":"Resume","flows.instance.stop":"Stop","flows.instance.stopped":"Instance stopped","flows.instance.resumed":"Instance resumed","flows.instance.failed":"Action failed","flows.instance.noOutputs":"No outputs yet","flows.instance.outputsEmptyHint":'This flow has no End-node outputs mapped, so the instance output is empty. Edit the flow and add an `outputs` mapping on the End node (e.g. { "name": "result", "value": { "ref": ["script_1", "output"] } }).',"flows.editor.endOutputsHint":"The instance output only contains fields mapped in the End node's `outputs`. Add mappings to surface results.","flows.editor.autoMap":"Auto-map from upstream nodes","flows.editor.branchHint":"Branch nodes split by configured rules. Connect each outgoing edge from the matching port (rule.handle); connect the `else` port for fallback when no rule matches.","flows.editor.edgeTitle":"Edge selected","flows.editor.edgeHint":"Click a palette node above to insert it between the two ends, or drag either endpoint to reconnect.","flows.editor.title":"Flow Editor","flows.editor.saveAndRun":"Save & Run","flows.editor.saveDraft":"Save draft","flows.editor.draftSaved":"Draft saved","flows.editor.publish":"Publish","flows.editor.published":"Published as a new version","flows.editor.failedToPublish":"Failed to publish","flows.editor.saving":"Saving...","flows.editor.test":"Test (run current canvas, unpublished)","flows.editor.unsaved":"Unsaved changes","flows.editor.draftUnpublished":"Draft · unpublished","flows.editor.saveFirst":"Save the flow first, then test it.","flows.editor.save":"Save","flows.editor.nodeTypes":"Node types","flows.editor.palette":"Nodes","flows.editor.canvas":"Canvas","flows.editor.config":"Node Config","flows.editor.selectNode":"Select a node to configure it.","flows.editor.configJson":"Config (JSON)","flows.editor.invalidJson":"Config must be valid JSON","flows.editor.deleteNode":"Delete node","flows.editor.requiredStart":"The graph needs exactly one start node.","flows.editor.requiredEnd":"The graph needs at least one end node.","flows.editor.titleLabel":"Title","flows.editor.typeLabel":"Type","flows.editor.node.start":"Start","flows.editor.node.end":"End","flows.editor.node.script":"Script","flows.editor.node.egress":"Egress","flows.editor.node.branch":"Branch","flows.editor.node.await":"Await","flows.editor.node.llm":"LLM","flows.editor.fModel":"Model","flows.editor.fMessages":"Messages ({{#ns.var#}} refs supported)","flows.editor.fSystemPrompt":"System prompt (fixed first message)","flows.editor.fTemperature":"Temperature","flows.editor.fMaxTokens":"Max tokens","flows.editor.fStop":"Stop sequences (comma-separated, max 4)","flows.editor.fJsonSchema":"Structured output (JSON Schema)","flows.editor.fTimeoutMs":"Timeout (ms)","flows.editor.addMessage":"Add message","flows.editor.modifiers":"Modifiers","flows.editor.fRetry":"Retry attempts","flows.editor.fOnError":"Error strategy","flows.editor.fDefaultOutputs":"Default outputs","flows.editor.errorOutHint":"Publish validation requires at least one edge from this node's error port","flows.editor.code":"Code (JS)","flows.editor.hint":"Draw the flow by adding nodes and connecting them, then Save & Run.","flows.editor.created":"Flow created","flows.editor.saved":"Flow saved","flows.editor.failedToSave":"Failed to save flow","flows.editor.schemaInvalid":"The graph is invalid: {message}","flows.editor.autoLayout":"Auto layout","flows.editor.layoutLR":"Layout left → right","flows.editor.jsonView":"JSON","flows.editor.copyJson":"Copy","flows.editor.fClientKey":"Client key","flows.editor.fOp":"Operation","flows.editor.fResponse":"Response field","flows.editor.fInputMap":"Input (ValueExpr map)","flows.editor.fAwaitKind":"Await kind","flows.editor.fTimeout":"Timeout (seconds)","flows.editor.fAwaitApprovers":"Approver user_ids (soft routing, comma-separated)","flows.editor.fAwaitEvents":"Event rules","flows.editor.fAwaitFormContent":"Display text (form_content)","flows.editor.awaitFormContentHint":"Text shown to the actor; {{#start.xxx#}} refs runtime variables","flows.editor.fAwaitFormFields":"Form fields (inputs)","flows.editor.awaitAddField":"Add field","flows.editor.awaitFieldVar":"Variable name","flows.editor.awaitFieldLabel":"Label","flows.editor.awaitFieldRequired":"Required","flows.editor.awaitFormFieldName":"Field variable names must be non-empty and unique","flows.editor.awaitSelectOptions":"type=select requires non-empty options","flows.editor.awaitSelectOptionsPh":"Options (comma-separated)","flows.editor.fAwaitActions":"Action buttons (actions)","flows.editor.awaitAddAction":"Add action","flows.editor.awaitActionTitle":"Button text","flows.editor.awaitApprovalPreset":"Approval preset","flows.editor.awaitPresetApprove":"Approve","flows.editor.awaitPresetReject":"Reject","flows.editor.awaitPresetHint":"Generates Approve/Reject actions (edit freely afterwards)","flows.editor.awaitActionsHint":"Each action is an output port — wire each; button text is free-form.","flows.editor.awaitActionIdInvalid":"Action ids: letter/underscore start, ≤20 chars, unique","flows.editor.awaitAddEvent":"Add event","flows.editor.awaitAddCorr":"Add correlation key","flows.editor.awaitCorrField":"Event field","flows.editor.awaitCorrHint":"Correlation keys address the wake to THIS instance: the event field must equal the flow variable (e.g. start.order_id) or the event is ignored.","flows.editor.unitDays":"Days","flows.editor.unitHours":"Hours","flows.editor.unitMinutes":"Min","flows.editor.unitSeconds":"Sec","flows.editor.awaitPortsHint":"approval exposes approve / reject ports — wire each; the reject destination is whatever you connect it to.","flows.editor.awaitTimeoutPortHint":"A timeout adds a timeout output port; unwired, expiry fails the instance.","flows.editor.awaitTimeoutInvalid":"Timeout must be an integer ≥ 1","flows.editor.node.transform":"Transform","flows.editor.fTransformAssignments":"Assignments","flows.editor.transformAddRow":"Add field","flows.editor.transformKey":"Field key","flows.editor.transformKeyInvalid":"Keys: letter/underscore start, ≤20 chars, unique","flows.editor.fTransformHintLabel":"Notes","flows.editor.fTransformHint":"Each key becomes a field downstream references; values support constant/variable/expression (trim, replace, concat, default… with {{#node.field#}} refs).","flows.editor.node.docparse":"Doc Parse","flows.editor.fDocParseInput":"Input file (input)","flows.editor.fDocParseEngine":"Parser engine (engine)","flows.editor.fDocParseEnginePh":"Blank = global default; e.g. mineru / paddleocr_vl","flows.editor.fDocParseExtractImages":"Extract embedded images","flows.editor.docParseHint":"Input must resolve to a file reference string: a storage key or an https URL. Outputs markdown/images/engine/pages/warnings for downstream refs.","flows.editor.toExpr":"Switch to expression","flows.editor.exprPh":"e.g. trim({{#start.name#}})","flows.editor.awaitEventRequired":"kind=event requires at least one event name","flows.instance.waitingKind":"Waiting kind","flows.instance.resumeUntil":"Expires at","flows.instance.approve":"Approve","flows.instance.reject":"Reject","flows.instance.rejectReason":"Rejection reason (optional, carried in the resume)","flows.instance.submitData":"Submit data","flows.instance.resumeUrlHint":"Callback URL: hand it to whoever should resume this flow (POST, body is {action, data})","flows.instance.resumeUrlCopied":"Callback URL copied","flows.instance.awaitApproversHint":"Assigned approvers: {list}","flows.instance.formFieldRequired":"Field {field} is required","flows.editor.fLabel":"Label","flows.editor.fElseHandle":"Else handle (fallback port)","flows.editor.addBranch":"Add branch rule","flows.editor.addNode":"Add node","flows.editor.exportTitle":"Export canvas","flows.editor.namePlaceholder":"Untitled flow","flows.editor.descPlaceholder":"Add description...","flows.editor.insertVariable":"Insert variable","flows.editor.noUpstream":"No upstream nodes","flows.editor.undeclared":"No declared output fields","flows.editor.wholeOutput":"Whole output object","flows.editor.fOutputSchema":"Output declaration (field + type, runtime-checked)","flows.editor.addField":"Add output field","flows.editor.titleConflict":"Title conflicts with another node; it will be auto-numbered on blur","flows.editor.titleDedup":"Title auto-renamed to {title}","flows.editor.fStartParams":"Input variables (start namespace, referenceable downstream)","flows.editor.fVariable":"Variable name","flows.editor.fRequired":"Required","flows.editor.addParam":"Add variable","flows.editor.dupVariable":"Duplicate variable: {v}","flows.editor.fRefNode":"Node","flows.editor.fRefField":"Field","flows.editor.fRefPath":"Child path","flows.editor.fInputKey":"Input key (used in code)","flows.editor.addInput":"Add input mapping","flows.editor.fEndOutputs":"Flow outputs (final result keys)","flows.editor.fOutputKey":"Result key","flows.editor.addOutput":"Add output","flows.editor.toLiteral":"Switch to literal","flows.editor.toRef":"Switch to reference","flows.editor.fParamType":"Field type","flows.editor.fMaxLength":"Max length","flows.editor.fDefaultValue":"Default value","flows.editor.fOptions":"Options","flows.editor.editParam":"Edit variable","flows.editor.invalidMaxLength":"Max length must be an integer ≥ 1","flows.editor.fAccept":"File categories (multi-select)","flows.editor.accept.document":"Document","flows.editor.accept.document.desc":"PDF, Word, Excel, PPT, TXT, Markdown","flows.editor.accept.image":"Image","flows.editor.accept.image.desc":"PNG, JPG, JPEG, WEBP, GIF, SVG","flows.editor.accept.audio":"Audio","flows.editor.accept.audio.desc":"MP3, WAV, OGG, M4A, FLAC","flows.editor.accept.video":"Video","flows.editor.accept.video.desc":"MP4, MOV, WEBM, AVI, MKV","flows.editor.accept.other":"Other","flows.editor.accept.other.desc":"ZIP, CSV, JSON and other formats","flows.editor.fMaxCount":"Max count (multi-file)","flows.editor.invalidMaxCount":"Max count must be an integer ≥ 1","flows.editor.noDefault":"Not set","flows.editor.addOption":"Add option","flows.editor.node.http":"HTTP Request","flows.editor.fUrl":"URL","flows.editor.fHeaders":"Headers","flows.editor.fQuery":"Query params","flows.editor.fBody":"Body (JSON template)","flows.editor.httpUrlScheme":"URL must start with http:// or https://","flows.editor.node.ct":"Data","flows.editor.fContentType":"Content type (plural)","flows.editor.fRecordId":"Record ID (template)","flows.editor.fFilters":"Filters","flows.editor.fValues":"Fields to write","flows.editor.fSort":"Sort (-field desc)","flows.editor.node.iteration":"Iteration","flows.editor.fIterItems":"Items (array)","flows.editor.fIterConcurrency":"Concurrency (1=serial)","flows.editor.fIterOnError":"On item error","flows.editor.fIterMax":"Max items","flows.editor.fIterBody":"Body (subgraph JSON)","flows.editor.fIterBodyHint":"Body must have exactly one start + one end; {{#item.value/index/total#}} and outer upstream vars available; await is not supported inside a body","flows.editor.dupHandle":"Duplicate branch handle '{v}'","flows.editor.pickVariable":"Select variable","flows.editor.condValueHint":"Type auto-detected; quote ('021') to force string comparison","flows.editor.nodeDescPlaceholder":"Add node description...","flows.editor.enlargeCode":"Enlarge editor","flows.editor.cancel":"Cancel","flows.editor.fullscreen":"Toggle fullscreen","flows.editor.exportFailed":"Export failed","flows.editor.fHostPerms":"Host permissions (JSON)","flows.editor.zoomIn":"Zoom in","flows.editor.zoomOut":"Zoom out","flows.editor.zoomFit":"Fit view","flows.editor.collapsePanel":"Collapse panel","flows.editor.expandPanel":"Expand panel","flows.editor.autoMapInput":"Map upstream outputs as inputs","flows.editor.jsonCopied":"JSON copied","flows.editor.failedToCopy":"Failed to copy","flows.editor.layoutTB":"Layout top → bottom","flows.editor.versions":"Version history","flows.editor.rollback":"Restore","flows.editor.restored":"Restored — saved as a new version","flows.editor.failedToRollback":"Failed to restore version","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.redemptionCodes":"Activation codes","layout.wallets":"Wallets","layout.walletTransactions":"Wallet transactions","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.createdAt":"Created","wallets.updatedAt":"Updated","wallets.details":"Details","wallets.allUsers":"All users","redemption.generate":"Generate codes","redemption.generateTitle":"Generate redemption codes","redemption.generateFailed":"Failed to generate codes","redemption.targetUser":"Target user","redemption.publicHint":"Public code (any user)","redemption.publicHintDesc":"Leave empty for a public code — whoever redeems it gets the credit; pick a user to bind it.","redemption.count":"Count (1-100)","redemption.generatedTitle":"Codes generated","redemption.generatedOnce":"Copy and store these now — plaintext is shown only once.","redemption.redeemedBy":"Redeemed by","redemption.redeemedAt":"Activated at","redemption.copy":"Copy code","redemption.activate":"Activate","redemption.activateTitle":"Activate to account","redemption.activateDesc":"Credit {amount} {currency} to the selected user and mark this code activated.","redemption.activateUserLabel":"Credit to user","redemption.activateSuccess":"Code activated — owner wallet credited","redemption.activateFailed":"Failed to activate code","redemption.disable":"Disable","redemption.enable":"Enable","redemption.delete":"Delete","redemption.deleteTitle":"Delete this code?","redemption.deleteDesc":"Type the code exactly to confirm. Redeemed codes cannot be deleted.","redemption.code":"Code","redemption.public":"Public code","redemption.expiresAt":"Expires at","redemption.expiresHint":"Optional — expired codes can no longer be redeemed.","redemption.statusPending":"pending","redemption.statusRedeemed":"redeemed","redemption.statusDisabled":"disabled","redemption.noCodes":"No redemption codes","redemption.noCodesDesc":"Generate codes to hand out wallet credit.","redemption.disableSuccess":"Code disabled","redemption.disableFailed":"Failed to disable code","redemption.enableSuccess":"Code enabled","redemption.enableFailed":"Failed to enable code","redemption.deleteSuccess":"Code deleted","redemption.deleteFailed":"Failed to delete code","wallets.all":"All","wallets.llmUsage":"LLM usage","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","llm.modelUnpriced":"unpriced","llm.unpricedHint":"Unpriced models are disabled: {models} — price them in Model Directory first (relay rejects unpriced models).","llm.modelPickerAll":"All models (no restriction)","llm.modelPickerSearch":"Search models...","llm.modelPickerEmpty":"No models found","llm.tokenCreateDesc":"Create an sk- key to call the OpenAI-compatible /v1 endpoint.","llm.newToken":"New API Key","llm.noTokens":"No API keys yet","llm.noTokensDesc":"Create an sk- key to call the OpenAI-compatible /v1 endpoint.","llm.tokenUpdated":"API key updated","llm.tokenDeleted":"API key deleted","llm.confirmDeleteToken":'Delete key "{name}"? Clients using it will get 401 immediately.',"llm.failedToCreate":"Failed to create","llm.copyFailed":"Copy failed","llm.fRemainQuota":"Quota limit","llm.quotaHint":"Amounts are USD ($1 = 1,000,000 quota)","llm.fAllowedModels":"Model allowlist","llm.allowedModelsHint":"Empty = all models; options come from enabled channels","llm.fGroup":"Billing group","llm.groupHint":'Paid = price × group ratio; configure under "Group ratios"',"llm.manageGroups":"Group ratios","llm.groupsDesc":'Sell-price multiplier per group: 1.5 = +50% markup, 0.8 = 20% off. "default" is the fallback group.',"llm.addGroup":"Add group","llm.groupsSaved":"Group ratios saved","llm.fAllowedIps":"IP allowlist","llm.allowedIpsHint":"CIDR or exact IPs, comma/newline separated; empty = any","llm.fTokenEnabled":"Enabled","llm.fUnlimited":"Unlimited quota","llm.unlimitedAdminOnly":"(admin only)","llm.colRemain":"Remaining","llm.colUsed":"Used","llm.colExpiry":"Expires","llm.colUser":"User","llm.colCreatedAt":"Created","llm.colUpdatedAt":"Updated","llm.colQuotaTotal":"Quota","llm.fOwnerUser":"Owner","llm.filterUser":"Search users…","llm.userPickerSearch":"Search users…","llm.userPickerEmpty":"No users found","llm.allModels":"all models","llm.keyOnceTitle":"API key created","llm.keyOnceDesc":"Copy it now — you can also copy it anytime from the list below.","llmPlayground.token":"API Key","llmPlayground.selectToken":"Select an API key","llmPlayground.noKey":"no key","llmPlayground.tokenNotUsable":"This key is currently {status} and cannot be used for chat","llmPlayground.model":"Model","llmPlayground.selectModel":"Select a model","llmPlayground.noTokens":'Create an sk- key on the "API Keys" page first',"llmPlayground.noModels":"No models available — configure a channel first","llmPlayground.emptyConversation":"Pick a key and a model, then send the first message","llmPlayground.thinking":"Thinking","llmPlayground.waiting":"Waiting for response…","llmPlayground.busy":"Generating…","llmPlayground.inputPlaceholder":"Type a message, Enter to send…","llmPlayground.stop":"Stop","llmPlayground.clear":"Clear","llmPlayground.turnFailed":"Request failed","layout.llm":"LLM","layout.llmChannels":"Channels","layout.llmModels":"Model Directory","layout.llmLogs":"Usage Logs","layout.llmTokens":"API Keys","layout.llmPlayground":"Chat Test","llm.newChannel":"New Channel","llm.noChannels":"No LLM channels","llm.noChannelsDesc":"Add an upstream provider with its API keys to start routing LLM traffic.","llm.channelCreated":"Channel created","llm.channelUpdated":"Channel updated","llm.channelDeleted":"Channel deleted","llm.confirmDeleteChannel":'Delete channel "{name}"? Its key pool and routing entry are removed.',"llm.failedToSave":"Failed to save","llm.failedToDelete":"Failed to delete","llm.fName":"Name","llm.fProvider":"Provider","llm.fBaseUrl":"Base URL","llm.fModels":"Models (comma separated)","llm.fTestModel":"Test model","llm.testModelHint":"Used by the health probe and channel test. If empty, the first model in the list is probed.","llm.testModelNoDirHint":"Used by the health probe and channel test. Register models in the Model Directory first.","llm.noDirectoryTitle":"Model Directory is empty","llm.noDirectoryHint":"This channel won't route any traffic until its models are registered and priced in the Model Directory. You can create it now and add models afterwards.","llm.goToModels":"Go to Model Directory →","llm.fPriority":"Priority","llm.fKeyMode":"Key mode","llm.keyModePolling":"Polling","llm.keyModeRandom":"Random","llm.fAutoBan":"Auto ban","llm.fCostMode":"Cost mode","llm.costModeUsage":"Usage (discount)","llm.costModeFixed":"Subscription (monthly)","llm.fCostDiscount":"Cost discount","llm.costDiscountHint":"Actual cost = list price × discount (0.8 = 20% off)","llm.fMonthlyCost":"Monthly cost (USD/account)","llm.monthlyCostHint":"Fixed subscription cost; per-request cost logs 0, settled monthly","llm.fInitialKeys":"Initial keys","llm.fMaxConcurrency":"Max concurrency","llm.addKey":"Add key","llm.keysWriteOnlyHint":"API keys are managed via the key pool (row menu → Manage keys) and cannot be edited here.","llm.colChannel":"Channel","llm.colPriority":"Priority","llm.colKeys":"Keys","llm.colMaskedKey":"Key","llm.colMaxConcurrency":"Concurrency","llm.keysSummary":"{active} active of {total} keys","llm.manageKeys":"Manage keys","llm.testChannel":"Test connectivity","llm.disableChannel":"Disable","llm.enableChannel":"Enable","llm.testOk":"{model} responded in {ms}ms","llm.testFailed":"Test failed: {detail}","llm.disableKey":"Disable","llm.enableKey":"Enable","llm.replacePool":"Replace the whole key pool","llm.replacePoolHint":"Replaces ALL keys at once. Existing statuses (disabled keys, concurrency caps) are lost.","llm.replacePoolSubmit":"Replace pool","llm.keysReplaced":"Key pool replaced","llm.newModel":"New Model","llm.noModels":"No model-directory rows","llm.noModelsDesc":"Register models with pricing. Unregistered models are rejected by the relay.","llm.modelCreated":"Model created","llm.modelUpdated":"Model updated","llm.modelDeleted":"Model deleted","llm.confirmDeleteModel":'Delete model "{name}" from the directory? The relay will reject it afterwards.',"llm.defaultsTitle":"Default models","llm.defaultsDesc":"Used by agents, flows and knowledge bases when no model is specified. Must be registered in this directory.","llm.defaultChatModel":"Default chat model","llm.defaultEmbeddingModel":"Default embedding model","llm.defaultEmbeddingHint":"Embedding models need a dimension (set it in the model's params).","llm.defaultNone":"Not set","llm.defaultsSaved":"Default models saved","llm.fModelName":"Model name","llm.fModelType":"Type","llm.fPriceMode":"Price mode","llm.priceModeToken":"Per token","llm.priceModePerCall":"Per call","llm.fInputPrice":"Input price ($/1M tokens)","llm.inputPriceHint":"Upstream list price (empty = $0); users pay price × group ratio","llm.fOutputPrice":"Output price ($/1M tokens)","llm.outputPriceHint":"Upstream list price","llm.fCacheReadPrice":"Cache-read price ($/1M)","llm.cachePriceHint":"Empty = same as input price","llm.fCacheWritePrice":"Cache-write price ($/1M)","llm.cacheWritePriceHint":"Empty = same as input price (Anthropic typically 1.25× input)","llm.fParams":"Model params","llm.fContextWindow":"Context window (tokens)","llm.fMaxOutputTokens":"Max output tokens","llm.fDimension":"Embedding dimension","llm.fCapabilities":"Capabilities","llm.paramsHint":"Read by agent context truncation and kb vector building; empty = unset. Capability tags drive frontend selector filtering.","llm.fCompletionRatio":"Completion ratio","llm.fCacheRatio":"Cache read ratio","llm.fCacheWriteRatio":"Cache write ratio","llm.fCallPrice":"Price per call (USD)","llm.callPriceHint":"Charged in full upfront ($1 = 1,000,000 quota).","llm.statusActive":"Active","llm.statusDisabled":"Disabled","llm.colPricing":"Pricing","llm.filterModel":"Filter by model","llm.filterToken":"Filter by token id","llm.filterChannelAll":"All channels","llm.applyFilter":"Apply","llm.colTime":"Time","llm.colSource":"Source","llm.colTokens":"P/C tokens","llm.colQuota":"Charged","llm.colCost":"Cost","llm.colProfit":"Profit","llm.colRequests":"Requests","llm.colOutputTokens":"Output tokens","llm.colPromptTokens":"Input tokens","llm.colCompletionTokens":"Output tokens","llm.statsTitle":"Usage & profit","llm.groupByDay":"By day","llm.groupByModel":"By model","llm.groupByUser":"By user","llm.groupByChannel":"By channel","llm.chartMoney":"Charge / Cost / Profit","llm.chartTokens":"Token usage","llm.noUsageData":"No usage in this period","llm.colStream":"Stream","llm.colStatus":"Status","llm.colElapsed":"Elapsed","llm.noLogs":"No usage logs","llm.noLogsDesc":"Relay and internal LLM calls will appear here.","layout.ai":"AI","layout.aiAgents":"Agents","layout.aiPlayground":"Playground","aiAgents.newAgent":"New Agent","aiAgents.noAgents":"No agents yet","aiAgents.emptyHint":"Create an agent, configure its model and system prompt, then start chatting.","aiAgents.name":"Name","aiAgents.namePlaceholder":"e.g. Content Assistant","aiAgents.nameImmutable":"The name cannot be changed after creation","aiAgents.provider":"Provider","aiAgents.providerHint":"OpenAI-compatible endpoint (DeepSeek/OpenRouter/Ollama) or Anthropic","aiAgents.model":"Model","aiAgents.modelPlaceholder":"Select a model","modelSelect.placeholder":"Select a model","modelSelect.selectedCount":"{count} selected","modelSelect.useDefault":"Use default model","modelSelect.selectAll":"Select all","modelSelect.clearAll":"Clear","modelSelect.type":"Type","modelSelect.channel":"Channel","modelSelect.model":"Model","aiAgents.channelPin":"Pinned channel","aiAgents.channelPinAuto":"Automatic routing (no pin)","aiAgents.channelPinHint":"Pin this agent to one upstream channel for predictable cost. Pinned channels must serve the model and belong to this tenant; no cross-channel failover.","aiAgents.systemPrompt":"System Prompt","aiAgents.systemPromptPlaceholder":"You are a helpful assistant...","aiAgents.tools":"Tool Allowlist","aiAgents.allowAll":"Allow all","aiAgents.allowAllHint":"This agent may call every domain tool registered on the server.","aiAgents.memoryToolsHint":"Memory tools (memory_store/recall/forget) are always available and need no allowlist entry.","aiAgents.customToolPlaceholder":"Add custom tool name (e.g. MCP tools)…","aiAgents.addTool":"Add","aiAgents.toolGroup.content":"Content","aiAgents.toolGroup.system":"System","aiAgents.toolGroup.skills":"Skills","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Files","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Knowledge","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Other","aiAgents.kbBinding":"Knowledge Bases","aiAgents.kbEmpty":"No active knowledge bases.","aiAgents.kbBindingHint":"Select each knowledge base to mount individually; with none selected the knowledge_search tool is not mounted. With the tool enabled, the agent searches the selected knowledge bases during conversations and cites sources; kb_ids passed in a call can only narrow this scope.","aiAgents.memory":"Long-term Memory","aiAgents.memoryHint":"When enabled, the agent's core memories are injected each turn (isolated per user).","aiAgents.temperature":"Temperature","aiAgents.temperaturePlaceholder":"Empty = provider default","aiAgents.maxIterations":"Max Iterations","aiAgents.maxIterationsHint":"Maximum engine iterations (tool-call rounds) per turn.","aiAgents.params":"Extra Params (JSON)","aiAgents.paramsInvalid":"Invalid JSON","aiAgents.paramsHint":"skill_bundles is managed by the Enabled Skills control above; hand-written values here are overwritten.","aiAgents.allTools":"All","aiAgents.noTools":"None","aiAgents.updatedAt":"Updated","aiAgents.usage":"Usage","aiAgents.playground":"Playground","aiAgents.created":"Agent created","aiAgents.createFailed":"Failed to create agent","aiAgents.updated":"Agent updated","aiAgents.updateFailed":"Failed to update agent","aiAgents.deleted":"Agent deleted","aiAgents.deleteFailed":"Failed to delete agent","aiAgents.confirmDelete":"Delete {name}? Its sessions, messages and memories will be removed permanently.","aiUsage.totalTurns":"Total Turns","aiUsage.inputTokens":"Input Tokens","aiUsage.outputTokens":"Output Tokens","aiUsage.cacheReadTokens":"Cache Read Tokens","aiUsage.toolCalls":"Tool Calls","aiUsage.dailyTitle":"Daily Usage","aiUsage.noData":"No usage in this period","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"Select an agent","aiPlayground.sessions":"Sessions","aiPlayground.sessionDeleted":"Session deleted","aiPlayground.sessionDeleteFailed":"Failed to delete session","aiPlayground.deleteSessionDesc":"The session and all its messages will be deleted. This cannot be undone.","aiPlayground.newSession":"New session","aiPlayground.noSessions":"No sessions yet — sending a message creates one.","aiPlayground.noAgents":"Create an agent first","aiPlayground.emptySession":"Select or create a session to start chatting","aiPlayground.thinking":"Thinking","aiPlayground.busy":"Turn in progress…","aiPlayground.inputPlaceholder":"Type a message and press Enter…","aiPlayground.stop":"Stop","aiPlayground.sessionFailed":"Failed to create session","aiPlayground.turnFailed":"Turn failed","aiMemory.title":"Memories","aiMemory.searchPlaceholder":"Search key or content…","aiMemory.allCategories":"All categories","aiMemory.add":"Add Memory","aiMemory.addTitle":"Add Memory","aiMemory.editTitle":"Edit Memory","aiMemory.dialogHint":"Deduplicated by key: an existing (agent, user, key) row gets its content updated.","aiMemory.key":"Key","aiMemory.keyImmutable":"The key is the memory's unique identity and cannot change after creation","aiMemory.content":"Content","aiMemory.category":"Category","aiMemory.categoryHint":"core is injected and budget-managed; daily is log-only, never injected","aiMemory.importance":"Importance","aiMemory.user":"User","aiMemory.userOptional":"Owner user (optional)","aiMemory.userPlaceholder":"Empty = platform-level row","aiMemory.pinned":"Pinned (exempt from budget eviction)","aiMemory.noMemories":"No memories","aiMemory.emptyHint":"Memories accumulate from agent conversations, or add one manually.","aiMemory.saved":"Memory saved","aiMemory.saveFailed":"Failed to save memory","aiMemory.deleted":"Memory deleted","aiMemory.deleteFailed":"Failed to delete memory","aiMemory.confirmDelete":"Delete memory {key}? This cannot be undone.","layout.aiSkills":"Skills","layout.aiTools":"AI Tools","aiTools.title":"AI Tool Catalog","aiTools.tabBuiltin":"Built-in Tools","aiTools.category":"Category","aiTools.nameDesc":"Name / Description","aiTools.usedByCol":"Used by agent","aiTools.desc":"Backend-registered domain tools (name/description/category are backend-defined), grouped by category.","aiTools.usedBy":"used by {count} agents","aiTools.empty":"No tools","aiTools.emptyDesc":"No domain tools are registered by the backend.","aiSkills.new":"New Skill","aiSkills.newTitle":"New Skill","aiSkills.editTitle":"Edit Skill","aiSkills.dialogHint":"Skills are stored as SKILL.md (frontmatter + body); agents reference them via their enable list.","aiSkills.name":"Name","aiSkills.nameHint":"Directory name: letters/digits/-/_, max 64 chars","aiSkills.layer":"Layer","aiSkills.layerHint":"tenant = current tenant only; platform = all tenants (platform wins on name clash)","aiSkills.description":"Description","aiSkills.descriptionPlaceholder":"When this skill should be used (for model discovery)","aiSkills.instructions":"Instructions (Markdown)","aiSkills.tools":"Composed tools","aiSkills.toolsPlaceholder":"Type a tool name and press Enter, e.g. list_posts","aiSkills.disallowedTools":"Disallowed tools","aiSkills.always":"Always inline","aiSkills.alwaysHint":"Inline full instructions even in Compact mode (default: metadata + on-demand read_skill)","aiSkills.noSkills":"No skills yet","aiSkills.emptyHint":"A skill is a SKILL.md directory with instructions, injected into the agent's system prompt when enabled.","aiSkills.saved":"Skill saved","aiSkills.saveFailed":"Failed to save skill","aiSkills.deleted":"Skill deleted","aiSkills.deleteFailed":"Failed to delete skill","aiSkills.confirmDelete":"Delete skill {name}? The whole skill directory (including scripts/assets) is removed.","aiSkills.bundles":"Enabled Skills","aiSkills.bundlesAllHint":"Enable every skill in scope for this agent.","aiSkills.bundlesEmpty":"No skills available yet — create one on the Skills page first.","aiSkills.bundlesHint":"Pick the skills injected into this agent's system prompt; directories are rescanned every turn.","layout.aiSessions":"Conversations","aiSessions.title":"Title","aiSessions.agent":"Agent","aiSessions.user":"User","aiSessions.messages":"Messages","aiSessions.lastActive":"Last Active","aiSessions.allAgents":"All agents","aiSessions.allStatuses":"All statuses","aiSessions.noSessions":"No conversations","aiSessions.emptyHint":"Conversations appear here once users start turns in agent sessions.","aiSessions.untitled":"(untitled)","aiSessions.view":"View messages","aiSessions.noMessages":"No messages in this session","aiSessions.deleted":"Conversation deleted","aiSessions.deleteFailed":"Failed to delete conversation","aiSessions.confirmDelete":'Delete conversation "{title}"? All its messages are removed (agent memories are kept); this cannot be undone.',"layout.kb":"Knowledge Base","layout.kbDocs":"Documents","layout.kbChunks":"Chunks","layout.kbImages":"Images","layout.kbChunker":"Chunker Preview","layout.kbPlayground":"QA Playground","layout.kbWiki":"Wiki Pages","layout.kbFaqs":"FAQs","layout.kbGaps":"Knowledge Gaps","layout.kbDiagnostics":"Diagnostics","kb.new":"New Knowledge Base","kb.noKb":"No knowledge bases yet","kb.noKbDesc":"Create one to start uploading documents.","kb.deleteKb":"Delete knowledge base","kb.confirmDeleteKb":'Delete knowledge base "{name}"? All of its documents, chunks, FAQs, wiki pages, vector/full-text indexes and original files will be permanently removed.',"kb.kbDeleted":"Knowledge base deleted (incl. contents and indexes)","kb.viewChunks":"View chunks","kb.reparseAction":"Reprocess","kb.thinking":"Thinking…","kb.viewFullRef":"View full content","kb.distillWiki":"Generate Wiki","kb.distillWikiHint":"Background LLM task: distills draft wiki pages from the selected documents; review and publish them in the list afterwards.","kb.noReadyDocs":"No ready documents in this knowledge base","kb.distillQueued":"Wiki generation task queued ({count} documents)","kb.distillSubmit":"Generate Wiki ({count})","kb.editChunk":"Edit chunk","kb.editChunkHint":"Saving re-embeds and re-indexes the chunk automatically.","kb.confirmDeleteChunk":"Delete this chunk? Its vector/full-text indexes will be removed; deleting a parent chunk cascades to its children.","kb.chunkUpdated":"Chunk updated (re-indexed)","kb.chunkDeleted":"Chunk deleted (incl. indexes)","kb.updatedAt":"Updated","kb.jobHistory":"Processing history","kb.jobAttempts":"Attempts","kb.noJobs":"No processing records","kb.updated":"Knowledge base updated","kb.created":"Knowledge base created","kb.vectorBackend":"Vector backend","kb.enabledOn":"Enabled","kb.enabledOff":"Disabled","kb.slug":"Slug","kb.kindDoc":"Document KB (may include wiki)","kb.kindFaq":"FAQ KB","kb.selectKb":"Select a knowledge base","kb.selectKbDesc":"Pick one above, or create it on the Knowledge Bases page.","kb.selectPlaceholder":"Select knowledge base","kb.allKbs":"All knowledge bases","kb.allDocs":"All documents","kb.progress":"Progress","kb.partialParsed":"Partial parse","kb.pagesCol":"Pages","kb.imagesCol":"Images","kb.pageCol":"Page","kb.parseEngine":"Parse engine","kb.parseEngineBuiltin":"Built-in (zero-dep fallback)","kb.parseEngineDocreader":"docreader service (high-fidelity PDF images/scans)","kb.parseEngineMineru":"MinerU (PDF layout/formula/tables)","kb.parseEngineHint":"PDF images, scans and layout fidelity need the docreader service; falls back to built-in automatically when the service URL is unset","kb.noImages":"No images","kb.noImagesDesc":"Images extracted from documents appear here once recognition is enabled.","kb.recognition":"Recognition","kb.imagePreview":"Preview","kb.imageCaption":"Caption","kb.imageOcr":"OCR text","kb.imageStatus.pending":"Pending","kb.imageStatus.done":"Recognized","kb.imageStatus.failed":"Failed","kb.imageStatus.skipped":"Skipped","kb.createdAtCol":"Created","kb.imagePreviewUnavailable":"Preview unavailable (external link dead or bytes missing)","kb.imageThumb":"Thumb","kb.imageContent":"Content","kb.zoomIn":"Zoom in","kb.zoomOut":"Zoom out","kb.zoomReset":"Reset","kb.reader":"Reader view","kb.readerEmpty":"No parsed blocks to display","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Page unknown","kb.upload":"Upload document","kb.uploadOk":"Uploaded; parsing queued","kb.uploadFailed":"Upload failed","kb.online":"Online entry","kb.onlineOk":"Submitted; processing","kb.onlineFailed":"Submit failed","kb.noDocs":"No documents","kb.noDocsDesc":"Upload files or write Markdown online.","kb.source":"Source","common.search":"Search","layout.kbSearchTest":"Search Test","kb.searchTest.vectorTab":"Vector recall","kb.searchTest.bm25Tab":"Keyword recall","kb.searchTest.selectKb":"Select knowledge base","kb.searchTest.queryPlaceholder":"Enter a query…","kb.searchTest.queryFirst":"Enter a query and search to verify each retrieval path","kb.searchTest.selectKbFirst":"Select a knowledge base first","kb.searchTest.empty":"No hits","kb.searchTest.score":"Score","kb.searchTest.kind":"Kind","kb.searchTest.doc":"Document","kb.searchTest.preview":"Content","kb.searchTest.grams":"Query tokens","kb.searchTest.keywords":"Chunk keywords","kb.searchTest.ghostHint":"Some hits are ghosts (chunks no longer in SQL)","kb.parserEngineCol":"Parser","kb.parserDefault":"Default","kb.imageRecogCol":"Image recognition","kb.imageRecogOn":"On","kb.imageRecogOff":"Off","layout.docparse":"Docparse","layout.docparseEngines":"Engines","layout.docparseTokens":"API Tokens","layout.docparseConvert":"Convert","layout.docparseRecognize":"Recognize","layout.docparseUsage":"Usage","docparse.engineName":"Engine","docparse.category":"Category","docparse.categoryDocument":"Document","docparse.categoryOcr":"Image OCR","docparse.enabled":"Enabled","docparse.pricePerPage":"Price/page","docparse.pricePerCall":"Price/call","docparse.costPerPage":"Cost/page","docparse.registered":"Registered","docparse.notRegistered":"Not registered","docparse.updatedAt":"Updated at","docparse.editEngine":"Edit engine","docparse.editEngineDesc":'Update pricing for "{name}". Amounts are in cents.',"docparse.engineUpdated":"Engine updated","docparse.noEngines":"No engines","docparse.failedToSave":"Failed to save","docparse.newToken":"New token","docparse.owner":"Owner","docparse.ownerPlaceholder":"Leave empty = me","docparse.ownerHint":"User who owns this token; defaults to the current admin.","docparse.tokenCreated":"Token created","docparse.tokenName":"Token name","docparse.tokenPrefix":"Prefix","docparse.quota":"Quota","docparse.quotaHint":"Daily page quota; 0 = unlimited","docparse.tokenCreateDesc":"API token for third parties to call the document-parsing endpoints.","docparse.noTokens":"No tokens","docparse.noTokensDesc":"Create a token to let third parties call the parsing API.","docparse.confirmDeleteToken":'Delete token "{name}"? Third parties using it will immediately lose access. This cannot be undone.',"docparse.tokenDeleted":"Token deleted","docparse.createdAt":"Created at","docparse.failedToCreate":"Failed to create","docparse.convertHint":"Upload a document, optionally pick an engine, and get markdown output.","docparse.file":"File","docparse.engineAuto":"Default engine","docparse.extractImages":"Extract images","docparse.parse":"Parse","docparse.jobSubmitted":"Job submitted","docparse.jobRunning":"Running…","docparse.jobFailed":"Job failed","docparse.newJob":"New job","docparse.pages":"Pages","docparse.images":"Images","docparse.failedToSubmit":"Failed to submit","docparse.recognizeHint":"Upload an image to get a caption and OCR text via the default vision model.","docparse.image":"Image","docparse.prompt":"Prompt","docparse.promptPlaceholder":"Optional custom prompt","docparse.recognize":"Recognize","docparse.caption":"Caption","docparse.noUsage":"No usage data","docparse.kind":"Kind","docparse.chars":"Chars","docparse.durationMs":"Duration(ms)","kb.noChunks":"No chunks","kb.noChunksDesc":"Parent/child chunks — click a row for full content","kb.breadcrumb":"Chunk","kb.embedded":"Embedded","kb.notEmbedded":"Not embedded","kb.bytes":"bytes","kb.vectorCol":"Vector","kb.backToDocs":"Back to documents","kb.chunkCount":"Chunks","kb.reparse":"Reprocessed","kb.reparseFailed":"Reprocess failed","kb.confirmDelete":'Delete document "{title}"? Its chunks, vector/full-text indexes and the original file will be permanently removed.',"kb.deleted":"Deleted (incl. indexes)","kb.mdTitle":"Title","kb.mdContent":"Content (Markdown; # headings drive chunking)","kb.status.pending":"Pending","kb.status.parsing":"Parsing","kb.status.chunking":"Chunking","kb.status.indexing":"Indexing","kb.status.embedding":"Embedding","kb.status.ready":"Ready","kb.status.failed":"Failed","kb.status.stale":"Stale","kb.sample":"Sample Markdown (≤64KB, read-only, nothing is stored)","kb.runPreview":"Run preview","kb.running":"Chunking…","kb.parent":"Parent","kb.child":"Child","kb.parents":"Parents","kb.children":"Children","kb.total":"Total","kb.chars":"chars","kb.askLabel":"Question (single-turn; empty scope = all enabled KBs)","kb.stream":"Streaming (SSE)","kb.ask":"Ask","kb.stop":"Stop","kb.references":"References","kb.wikiNoPages":"No wiki pages","kb.wikiNoPagesDesc":"Distill ready documents; drafts appear here for review.","kb.publish":"Publish (index for retrieval)","kb.approveOk":"Published and indexed","kb.reject":"Reject and archive","kb.rejected":"Archived","kb.saveOk":"Saved (published pages re-index automatically)","kb.noVersions":"No revisions yet.","kb.diffCurrent":"Diff vs current","kb.rollback":"Rollback","kb.rollbackOk":"Rolled back (previous content saved as a new revision)","kb.diffTitle":"Line diff (red=removed, green=added)","kb.newFaq":"New FAQ","kb.faqCreated":"Created and indexed","kb.stdQuestion":"Standard question","kb.similarCount":"Similar","kb.hits":"Hits","kb.toggleOk":"Toggled (indexes updated)","kb.similarLabel":"Similar questions (one per line, optional)","kb.answersLabel":"Answers (one per line, multiple allowed)","kb.noFaqs":"No FAQs","kb.noFaqsDesc":"Create manually, or draft from the Knowledge Gaps page.","kb.gapsIntro":"Aggregated uncovered (or negatively rated) questions — drafts go to FAQs for human review.","kb.diag.allKinds":"All kinds","kb.diag.allStatuses":"All statuses","kb.diag.docFilter":"Filter by document ID","kb.diag.total":"{n} runs","kb.diag.noRuns":"No runs yet","kb.diag.noRunsDesc":"Every KB pipeline execution (ingest / ask / search…) is recorded here.","kb.traceToggle":"Trace","kb.tracePanel":"Pipeline trace","kb.logId":"Log ID","kb.diag.runs":"Runs","kb.diag.checkup":"Checkup","kb.diag.health":"Health","kb.diag.checkupIntro":"On-demand consistency scan (10s cache).","kb.diag.healthIntro":"Component health; default probe is zero-cost.","kb.diag.embedProbe":"Embed smoke probe","kb.diag.r1":"Lost events (pending without jobs)","kb.diag.r2":"Stuck intermediate docs","kb.diag.r3":"Failed docs","kb.diag.r4":"Incomplete (missing embeddings)","kb.diag.r5":"Vector drift","kb.diag.r6":"Dead KB jobs","kb.diag.r7":"Stuck runs","kb.diag.kind":"Kind","kb.diag.status":"Status","kb.diag.trigger":"Trigger","kb.diag.attempt":"Attempt","kb.diag.latency":"Latency","kb.diag.error":"Error","kb.diag.created":"Time","kb.diag.prev":"Prev","kb.diag.next":"Next","kb.diag.detail":"Run detail","kb.diag.agent":"Agent","kb.diag.session":"Session","kb.diag.configSnapshot":"Config snapshot","kb.diag.stages":"Stages","kb.diag.noStages":"No stages recorded","kb.noGaps":"No knowledge gaps","kb.noGapsDesc":"All questions are covered by the KB.","kb.freq":"Count","kb.draftFaq":"Draft FAQ","kb.drafted":"FAQ drafted (disabled) — review it on the FAQs page","kb.docsPage":"Documents","kb.title":"Title","kb.versions":"Versions","kb.edit":"Edit","kb.operations":"Actions","kb.state":"Status","kb.allStatus":"All statuses","kb.type":"Type","kb.embeddingModel":"Embedding model","kb.embeddingDim":"Vector dimension","kb.modelHint":"Immutable after creation (defaults from global config if empty)","kb.modelCol":"Model","kb.modelRequired":"Required: fill in, or configure global defaults (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Rerank model","kb.rerankModelOptional":"Optional: global default if empty (rerank off when unconfigured)","kb.rerankWindow":"Rerank window","kb.rerankThreshold":"Rerank threshold","kb.rerankInherit":"Inherit global default","kb.rerankHint":"Empty window/threshold inherit the global defaults (RAISFAST_KB_RERANK_*); clearing the model falls back to the global default — with no model configured S5 passes through","kb.rerankInvalid":"Window must be a positive integer; threshold must be within 0–1","kb.chatModel":"Generation model","kb.chatModelOptional":"Optional: global default (RAISFAST_KB_CHAT_MODEL) → tenant default","kb.chatModelHint":"Model used for S9 answer generation; clearing falls back to the global default","kb.distillModel":"Distill model","kb.distillModelOptional":"Optional: global default (RAISFAST_KB_DISTILL_MODEL) → tenant default","kb.distillModelHint":"Model used for wiki distillation (topic extraction + drafting); clearing falls back to the global default","kb.imageRecognition":"Image recognition","kb.imageModel":"Recognition model","kb.imageModelOptional":"Pick a vision-capable model; global default if empty (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Caption language","kb.imageLanguagePlaceholder":"e.g. zh / en; empty follows the document language","kb.imageInstructions":"Custom instructions","kb.imageInstructionsPlaceholder":"Extra guidance for image interpretation (optional)","kb.imageHint":"When enabled, document images get VLM captions + OCR text that becomes searchable","kb.descPlaceholder":"What this KB is for (optional)","jobs.attempts":"Attempts","jobs.runAfter":"Scheduled","jobs.updatedAt":"Updated","jobs.error":"Error","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"No jobs","jobs.noJobsDesc":"The background job queue is empty.","jobs.cleanup":"Cleanup","jobs.cleanupDesc":"Delete completed/dead jobs older than 7 days. This cannot be undone.","jobs.cleanupDone":"Cleaned up {n} jobs","jobs.confirmDelete":"Delete job {type}? The record will be removed from the queue.","jobs.retried":"Job requeued","jobs.deleted":"Job deleted","jobs.actionFailed":"Action failed"},LC={"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.jobs":"任务队列","layout.tenants":"租户","layout.webhooks":"Webhooks","layout.apiTokens":"API 令牌","layout.workflows":"工作流","layout.flows":"流程引擎","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.true":"是","common.false":"否","common.save":"保存","common.cancel":"取消","common.ok":"确定","common.create":"创建","common.creating":"创建中...","common.saving":"保存中...","common.deleting":"删除中...","common.confirmDeleteNameDesc":"此操作不可撤销。输入「{name}」以确认删除:","common.confirmDeleteNameLabel":"名称","common.delete":"删除","common.confirmDeleteTitle":"确认删除","common.edit":"编辑","common.content":"内容","common.remove":"移除","common.download":"下载","common.listView":"列表视图","common.cardView":"卡片视图","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.refresh":"刷新","common.all":"全部","common.draft":"草稿","common.published":"已发布","common.active":"启用","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":"保存工作流失败","flows.title":"流程引擎","flows.newFlow":"新建流程","flows.createFlow":"创建流程","flows.editFlow":"编辑","flows.deleteFlow":"删除","flows.deleteConfirm":"删除流程「{name}」?其所有版本与运行实例都会被一并删除。","flows.instances":"实例","flows.instances.noBody":"该步骤没有输入/输出内容。","flows.instances.noSteps":"该实例暂无节点执行记录。","flows.instances.triggerAll":"全部触发方式","flows.instances.trigger.api":"手动 (api)","flows.instances.trigger.api_public":"公开 API","flows.instances.trigger.job":"任务 (job)","flows.instances.trigger.event":"事件","flows.instances.trigger.cron":"定时","flows.instances.empty":"暂无实例。运行流程后即可查看。","flows.instances.logs":"节点日志","flows.instances.node":"节点","flows.instances.type":"类型","flows.instances.flowName":"所属流程","flows.instances.allStatus":"全部状态","flows.instances.latency":"耗时","flows.flowDeleted":"流程已删除","flows.failedToDelete":"删除流程失败","flows.noFlows":"暂无流程,点击创建开始。","flows.noFlowsDesc":"使用可视化画布编排自动化流程。","flows.name":"名称","flows.description":"描述","flows.version":"v{version}","flows.versionColumn":"版本","flows.enabled":"已启用","flows.disabled":"已停用","flows.triggers.title":"内部触发器","flows.triggers.all":"全部类型","flows.triggers.flowName":"流程名称","flows.triggers.kind":"类型","flows.triggers.kindEvent":"事件触发 (eventbus)","flows.triggers.kindCron":"定时触发 (cron)","flows.triggers.config":"配置","flows.triggers.newTrigger":"新建触发器","flows.triggers.empty":"暂无内部触发器。匹配的事件/定时会自动运行其指向的流程。","flows.triggers.newDesc":"触发器独立指向一个流程;流程无需感知是谁触发它。","flows.triggers.triggerName":"触发器名称","flows.triggers.eventType":"事件类型 (event_type)","flows.triggers.cronExpr":"Cron 表达式","flows.triggers.filter":"过滤 (JSON)","flows.triggers.inputsMap":"入参映射 (JSON)","flows.triggers.saved":"已保存","flows.triggers.deleted":"触发器已删除","flows.triggers.created":"触发器已创建","flows.triggers.deleteHint":"删除触发器「{name}」?","flows.draft":"草稿","flows.api.title":"发布为 API","flows.api.token":"API Token","flows.api.endpoint":"调用端点","flows.api.curl":"请求示例","flows.api.curlHint":"开发环境为 http://127.0.0.1:9898;生产环境请换成你的 https 域名。","flows.api.enable":"启用 API","flows.api.disable":"停用","flows.api.regenerate":"重新生成 Token","flows.api.enabled":"API 已启用","flows.api.disabled":"API 已停用","flows.api.disabledDesc":"该流程尚未对外开放。启用后会生成一个 Token,第三方用它调用该流程最新已发布版本。","flows.api.hint":"执行最新已发布版本(草稿不生效),请求中的 inputs 会作为 JSON 传给 start 节点。","flows.api.copy":"复制","flows.api.copied":"已复制","flows.api.failed":"操作失败","flows.api.requireAuth":"需要 Bearer Token(关闭 = 内网免认证调用)","flows.apis.title":"公开 API","flows.apis.logsPage":"API 调用日志","flows.apis.allLogs":"全部外部 API 调用","flows.apis.listDesc":"管理已发布为公开 API 的流程。查看外部调用请进入「API 调用日志」。","flows.apis.apiTab":"接口","flows.apis.logsTab":"调用日志","flows.apis.empty":"暂无已发布的 API。可在流程的「更多 → 发布为 API」中启用。","flows.apis.noLogs":"暂无外部 API 调用记录。","flows.apis.time":"时间","flows.apis.flow":"流程","flows.apis.inputs":"输入参数","flows.apis.detail":"编辑流程","flows.apis.logs":"日志","flows.apis.viewSteps":"查看步骤日志","flows.apis.restore":"恢复","flows.apis.saved":"已更新","flows.apis.apiSettings":"API 设置","flows.apis.regenerate":"重新生成 Token","flows.apis.rotated":"Token 已重新生成","flows.apis.enableFirst":"请先启用 API,再修改认证要求。","flows.apis.slug":"Slug(公开路径标识)","flows.apis.slugHint":"用于定位该端点;重新生成后旧地址立即失效。","flows.apis.regenerateSlug":"重新生成 Slug","flows.apis.slugRotated":"Slug 已更新","flows.apis.usageTitle":"使用说明","flows.apis.copyCurl":"复制 curl","flows.apis.usageSteps":"POST 调用该流程的最新已发布版本,body 的 inputs 会传给 start 节点。返回 status / outputs / instance_id;如需人工等待则返回 status=waiting。","flows.apis.auth":"认证","flows.apis.open":"免认证","flows.apis.authBearer":"Bearer","flows.apis.deleted":"API 已删除","flows.apis.deleteApi":"删除 API","flows.apis.deleteHint":"删除「{name}」的公开 API?其 Token 将永久失效(停用会保留 Token,删除则不会)。","flows.updated":"更新时间","flows.run":"运行","flows.runFlow":"运行流程","flows.runConfirm":"运行流程「{name}」?输入将传给 start 节点。","flows.runStarted":"流程已启动","flows.failedToRun":"运行流程失败","flows.inputsJson":"输入 (JSON)","flows.instance.title":"流程实例","flows.instance.status":"状态","flows.instance.error":"错误","flows.instance.outputs":"输出","flows.instance.payload":"Resume payload (JSON)","flows.instance.resume":"恢复","flows.instance.stop":"停止","flows.instance.stopped":"实例已停止","flows.instance.resumed":"实例已恢复","flows.instance.failed":"操作失败","flows.instance.noOutputs":"暂无输出","flows.instance.outputsEmptyHint":'该流程的 End 节点未配置 outputs 映射,因此实例输出为空。可编辑流程,在 End 节点中添加 outputs 映射(例如 { "name": "result", "value": { "ref": ["script_1", "output"] } })。',"flows.editor.endOutputsHint":"实例输出只包含 End 节点 outputs 中映射的字段,请添加映射以返回结果。","flows.editor.autoMap":"自动映射上游节点输出","flows.editor.branchHint":"分支节点按规则分流:从对应端口(rule.handle)拉线到后续节点;无规则命中时走 else 端口。","flows.editor.edgeTitle":"已选中连线","flows.editor.edgeHint":"点击上方调色板节点即可插入到两端之间;也可拖动任一端点重新连接。","flows.editor.title":"流程编辑器","flows.editor.saveAndRun":"保存并运行","flows.editor.saveDraft":"保存草稿","flows.editor.draftSaved":"草稿已保存","flows.editor.publish":"发布","flows.editor.published":"已发布为新版本","flows.editor.failedToPublish":"发布失败","flows.editor.saving":"保存中...","flows.editor.test":"测试(用当前画布试运行,不发布)","flows.editor.unsaved":"有未保存的改动","flows.editor.draftUnpublished":"草稿 · 未发布","flows.editor.saveFirst":"请先保存流程,再执行测试。","flows.editor.save":"保存","flows.editor.nodeTypes":"节点类型","flows.editor.palette":"节点","flows.editor.canvas":"画布","flows.editor.config":"节点配置","flows.editor.selectNode":"选择节点以编辑配置。","flows.editor.configJson":"配置 (JSON)","flows.editor.invalidJson":"配置必须是合法的 JSON","flows.editor.deleteNode":"删除节点","flows.editor.requiredStart":"图中必须恰好有一个 start 节点。","flows.editor.requiredEnd":"图中至少需要一个 end 节点。","flows.editor.titleLabel":"标题","flows.editor.typeLabel":"类型","flows.editor.node.start":"开始","flows.editor.node.end":"结束","flows.editor.node.script":"脚本","flows.editor.node.egress":"外部调用","flows.editor.node.branch":"分支","flows.editor.node.await":"等待审批","flows.editor.node.llm":"LLM 节点","flows.editor.fModel":"模型 (model)","flows.editor.fMessages":"消息列表(支持 {{#ns.var#}} 引用)","flows.editor.fSystemPrompt":"System 提示词(固定首条,不可删)","flows.editor.fTemperature":"温度 (temperature)","flows.editor.fMaxTokens":"最大 tokens","flows.editor.fStop":"停止词(逗号分隔,≤4)","flows.editor.fJsonSchema":"结构化输出 (JSON Schema)","flows.editor.fTimeoutMs":"超时(毫秒)","flows.editor.addMessage":"添加消息","flows.editor.modifiers":"修饰器 (modifiers)","flows.editor.fRetry":"重试次数","flows.editor.fOnError":"错误策略","flows.editor.fDefaultOutputs":"兜底输出 (default_outputs)","flows.editor.errorOutHint":"发布校验要求从本节点的 error 端口连出至少一条边","flows.editor.code":"代码 (JS)","flows.editor.hint":"添加并连接节点后点击「保存并运行」。","flows.editor.created":"流程已创建","flows.editor.saved":"流程已保存","flows.editor.failedToSave":"保存流程失败","flows.editor.schemaInvalid":"图结构无效:{message}","flows.editor.autoLayout":"自动排列","flows.editor.layoutLR":"从左到右排列","flows.editor.jsonView":"JSON","flows.editor.copyJson":"复制","flows.editor.fClientKey":"客户端标识 (client_key)","flows.editor.fOp":"操作 (op)","flows.editor.fResponse":"响应字段","flows.editor.fInputMap":"输入映射 (ValueExpr)","flows.editor.fAwaitKind":"等待类型 (kind)","flows.editor.fTimeout":"超时(秒)","flows.editor.fAwaitApprovers":"审批人 user_id(软路由,逗号分隔)","flows.editor.fAwaitEvents":"事件规则","flows.editor.fAwaitFormContent":"展示文本 (form_content)","flows.editor.awaitFormContentHint":"审批时展示给操作者的文本,可用 {{#start.xxx#}} 引用运行时变量","flows.editor.fAwaitFormFields":"表单字段 (inputs)","flows.editor.awaitAddField":"添加字段","flows.editor.awaitFieldVar":"变量名","flows.editor.awaitFieldLabel":"标签","flows.editor.awaitFieldRequired":"必填","flows.editor.awaitFormFieldName":"字段变量名不能为空或重复","flows.editor.awaitSelectOptions":"type=select 须配置非空选项","flows.editor.awaitSelectOptionsPh":"选项(逗号分隔)","flows.editor.fAwaitActions":"操作按钮 (actions)","flows.editor.awaitAddAction":"添加操作","flows.editor.awaitActionTitle":"按钮文案","flows.editor.awaitApprovalPreset":"审批预设","flows.editor.awaitPresetApprove":"通过","flows.editor.awaitPresetReject":"驳回","flows.editor.awaitPresetHint":"生成 通过/驳回 两个操作(可再自由修改)","flows.editor.awaitActionsHint":"每个操作是一个输出端口,请分别连线;按钮文案任意。","flows.editor.awaitActionIdInvalid":"操作 id 需字母/下划线开头、≤20 字符且不重复","flows.editor.awaitAddEvent":"添加事件","flows.editor.awaitAddCorr":"添加关联键","flows.editor.awaitCorrField":"事件字段","flows.editor.awaitCorrHint":"关联键把事件寻址到本实例:事件字段的值须等于流程变量(如 start.order_id),否则不唤醒。","flows.editor.unitDays":"天","flows.editor.unitHours":"小时","flows.editor.unitMinutes":"分","flows.editor.unitSeconds":"秒","flows.editor.awaitPortsHint":"approval 有 approve / reject 输出端口,请分别连线;拒绝去向由连线决定。","flows.editor.awaitTimeoutPortHint":"配置超时后会多出一个 timeout 输出端口;未连线时到期实例将失败。","flows.editor.awaitTimeoutInvalid":"超时须为 ≥1 的整数","flows.editor.node.transform":"转换","flows.editor.fTransformAssignments":"字段赋值 (assignments)","flows.editor.transformAddRow":"添加字段","flows.editor.transformKey":"字段名 (key)","flows.editor.transformKeyInvalid":"字段名需字母/下划线开头、≤20 字符且不重复","flows.editor.fTransformHintLabel":"说明","flows.editor.fTransformHint":"每个 key 成为下游可引用的字段;值支持 常量/变量/表达式(trim、replace、concat、default 等清洗函数,{{#节点.字段#}} 引用上游)。","flows.editor.node.docparse":"文档解析","flows.editor.fDocParseInput":"输入文件 (input)","flows.editor.fDocParseEngine":"解析引擎 (engine)","flows.editor.fDocParseEnginePh":"留空使用全局默认;如 mineru / paddleocr_vl","flows.editor.fDocParseExtractImages":"提取内嵌图片","flows.editor.docParseHint":"输入须解析为文件引用字符串:对象存储 key 或 https URL;输出 markdown/images/engine/pages/warnings 供下游引用。","flows.editor.toExpr":"切换为表达式","flows.editor.exprPh":"如 trim({{#start.name#}})","flows.editor.awaitEventRequired":"kind=event 需要至少一个事件名","flows.instance.waitingKind":"等待类型","flows.instance.resumeUntil":"超时时间","flows.instance.approve":"通过","flows.instance.reject":"拒绝","flows.instance.rejectReason":"拒绝原因(可选,随 resume 传递)","flows.instance.submitData":"提交数据","flows.instance.resumeUrlHint":"回调地址:交给需要恢复此流程的系统(POST,body 为 {action, data})","flows.instance.resumeUrlCopied":"回调地址已复制","flows.instance.awaitApproversHint":"指定审批人:{list}","flows.instance.formFieldRequired":"字段 {field} 必填","flows.editor.fLabel":"标签","flows.editor.fElseHandle":"兜底端口 (else handle)","flows.editor.addBranch":"添加分支规则","flows.editor.addNode":"添加节点","flows.editor.exportTitle":"导出画布","flows.editor.namePlaceholder":"未命名流程","flows.editor.descPlaceholder":"添加描述...","flows.editor.insertVariable":"插入变量","flows.editor.noUpstream":"无上游节点","flows.editor.undeclared":"未声明输出字段","flows.editor.wholeOutput":"整个输出对象","flows.editor.fOutputSchema":"输出声明(字段+类型,运行时校验)","flows.editor.addField":"添加输出字段","flows.editor.titleConflict":"标题与其他节点重复,失焦后自动编号","flows.editor.titleDedup":"标题已自动改为 {title}","flows.editor.fStartParams":"入参定义(写入 start 命名空间,下游可引用)","flows.editor.fVariable":"变量名 (variable)","flows.editor.fRequired":"必填","flows.editor.addParam":"添加入参","flows.editor.dupVariable":"变量名重复: {v}","flows.editor.fRefNode":"节点","flows.editor.fRefField":"字段","flows.editor.fRefPath":"子路径","flows.editor.fInputKey":"输入键名(脚本内访问)","flows.editor.addInput":"添加输入映射","flows.editor.fEndOutputs":"流程输出(最终结果键)","flows.editor.fOutputKey":"结果键","flows.editor.addOutput":"添加输出","flows.editor.toLiteral":"切换为固定值","flows.editor.toRef":"切换为引用","flows.editor.fParamType":"字段类型","flows.editor.fMaxLength":"最大长度","flows.editor.fDefaultValue":"默认值","flows.editor.fOptions":"选项","flows.editor.editParam":"编辑入参","flows.editor.invalidMaxLength":"最大长度须为 ≥1 的整数","flows.editor.fAccept":"文件类别(可多选)","flows.editor.accept.document":"文档","flows.editor.accept.document.desc":"PDF、Word、Excel、PPT、TXT、Markdown","flows.editor.accept.image":"图片","flows.editor.accept.image.desc":"PNG、JPG、JPEG、WEBP、GIF、SVG","flows.editor.accept.audio":"音频","flows.editor.accept.audio.desc":"MP3、WAV、OGG、M4A、FLAC","flows.editor.accept.video":"视频","flows.editor.accept.video.desc":"MP4、MOV、WEBM、AVI、MKV","flows.editor.accept.other":"其他","flows.editor.accept.other.desc":"ZIP、CSV、JSON 等其他格式","flows.editor.fMaxCount":"最大数量(多文件)","flows.editor.invalidMaxCount":"最大数量须为 ≥1 的整数","flows.editor.noDefault":"不设置","flows.editor.addOption":"添加选项","flows.editor.node.http":"HTTP 请求","flows.editor.fUrl":"URL","flows.editor.fHeaders":"Headers","flows.editor.fQuery":"Query 参数","flows.editor.fBody":"请求体(JSON 模板)","flows.editor.httpUrlScheme":"URL 须以 http:// 或 https:// 开头","flows.editor.node.ct":"数据查询","flows.editor.fContentType":"内容类型 (plural)","flows.editor.fRecordId":"记录 ID(模板)","flows.editor.fFilters":"过滤条件","flows.editor.fValues":"写入字段","flows.editor.fSort":"排序(-field 倒序)","flows.editor.node.iteration":"迭代","flows.editor.fIterItems":"迭代数组(items)","flows.editor.fIterConcurrency":"并发数(1=串行)","flows.editor.fIterOnError":"单项失败","flows.editor.fIterMax":"最大项数","flows.editor.fIterBody":"循环体(body 子图 JSON)","flows.editor.fIterBodyHint":"体约束:恰好一个 start + 一个 end;可用 {{#item.value/index/total#}} 与外层上游变量;体内不支持 await","flows.editor.dupHandle":"分支端口 '{v}' 重复","flows.editor.pickVariable":"选择变量","flows.editor.condValueHint":"自动识别类型;加引号('021')强制按字符串比较","flows.editor.nodeDescPlaceholder":"添加节点描述...","flows.editor.enlargeCode":"放大编辑","flows.editor.cancel":"取消","flows.editor.fullscreen":"全屏 / 退出全屏","flows.editor.exportFailed":"导出失败","flows.editor.fHostPerms":"宿主权限 (JSON)","flows.editor.zoomIn":"放大","flows.editor.zoomOut":"缩小","flows.editor.zoomFit":"适应视图","flows.editor.collapsePanel":"收起属性栏","flows.editor.expandPanel":"展开属性栏","flows.editor.autoMapInput":"自动映射上游输出为输入","flows.editor.jsonCopied":"JSON 已复制","flows.editor.failedToCopy":"复制失败","flows.editor.layoutTB":"从上到下排列","flows.editor.versions":"版本历史","flows.editor.rollback":"恢复此版本","flows.editor.restored":"已恢复(保存为新版本)","flows.editor.failedToRollback":"恢复版本失败","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.redemptionCodes":"激活码","layout.wallets":"钱包","layout.walletTransactions":"钱包流水","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.createdAt":"创建时间","wallets.updatedAt":"更新时间","wallets.details":"明细","wallets.allUsers":"全部用户","redemption.generate":"生成激活码","redemption.generateTitle":"生成激活码","redemption.generateFailed":"生成失败","redemption.targetUser":"指定用户","redemption.publicHint":"公共码(任意用户)","redemption.publicHintDesc":"留空生成公共码——谁兑换谁到账;选择用户则生成定向码,仅该用户可兑。","redemption.count":"张数(1-100)","redemption.generatedTitle":"激活码已生成","redemption.generatedOnce":"请立即复制保存——明文只显示这一次。","redemption.redeemedBy":"激活人","redemption.redeemedAt":"激活时间","redemption.copy":"复制激活码","redemption.activate":"激活","redemption.activateTitle":"激活到账","redemption.activateDesc":"将 {amount} {currency} 充入所选用户钱包,并将该码标记为已激活。","redemption.activateUserLabel":"到账用户","redemption.activateSuccess":"已激活,钱包已到账","redemption.activateFailed":"激活失败","redemption.disable":"禁用","redemption.enable":"启用","redemption.delete":"删除","redemption.deleteTitle":"确认删除该激活码?","redemption.deleteDesc":"输入完整激活码以确认。已激活的码不可删除。","redemption.code":"激活码","redemption.public":"公共码","redemption.expiresAt":"过期时间","redemption.expiresHint":"可选——过期后兑换码无法使用。","redemption.statusPending":"未激活","redemption.statusRedeemed":"已激活","redemption.statusDisabled":"已禁用","redemption.noCodes":"暂无激活码","redemption.noCodesDesc":"生成激活码给用户发放钱包余额。","redemption.disableSuccess":"已禁用","redemption.disableFailed":"禁用失败","redemption.enableSuccess":"已启用","redemption.enableFailed":"启用失败","redemption.deleteSuccess":"已删除","redemption.deleteFailed":"删除失败","wallets.all":"全部","wallets.llmUsage":"LLM 用量","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 长驻","llm.modelUnpriced":"未定价","llm.unpricedHint":"以下模型未定价,暂不可选:{models} —— 请先在「模型目录」配置定价(未定价模型中转也会拒绝)。","llm.modelPickerAll":"全部模型(不选即不限)","llm.modelPickerSearch":"搜索模型…","llm.modelPickerEmpty":"未找到模型","llm.tokenCreateDesc":"创建 sk- key,用于调用 OpenAI 兼容的 /v1 接口。","llm.newToken":"新建 API Key","llm.noTokens":"暂无 API Key","llm.noTokensDesc":"创建 sk- key 即可调用 OpenAI 兼容的 /v1 接口。","llm.tokenUpdated":"API Key 已更新","llm.tokenDeleted":"API Key 已删除","llm.confirmDeleteToken":"确定删除「{name}」?使用它的客户端将立即收到 401。","llm.failedToCreate":"创建失败","llm.copyFailed":"复制失败","llm.fRemainQuota":"额度上限","llm.quotaHint":"额度以美元计($1 = 1,000,000 quota)","llm.fAllowedModels":"模型白名单","llm.allowedModelsHint":"留空 = 全部模型;选项来自已启用渠道","llm.fGroup":"计费分组","llm.groupHint":"实付 = 价格 × 分组系数;在「分组倍率」里配置","llm.manageGroups":"分组倍率","llm.groupsDesc":"分组的售价系数:1.5 = 加价 50% 卖,0.8 = 八折。default 为默认分组。","llm.addGroup":"添加分组","llm.groupsSaved":"分组倍率已保存","llm.fAllowedIps":"IP 白名单","llm.allowedIpsHint":"支持 CIDR 或精确 IP,逗号/换行分隔;留空 = 不限","llm.fTokenEnabled":"启用","llm.fUnlimited":"不限额度","llm.unlimitedAdminOnly":"(仅管理员)","llm.colRemain":"剩余","llm.colUsed":"已用","llm.colExpiry":"过期","llm.colUser":"用户","llm.colCreatedAt":"创建时间","llm.colUpdatedAt":"修改时间","llm.colQuotaTotal":"额度","llm.fOwnerUser":"所属用户","llm.filterUser":"搜索用户…","llm.userPickerSearch":"搜索用户…","llm.userPickerEmpty":"未找到用户","llm.allModels":"全部模型","llm.keyOnceTitle":"API Key 已创建","llm.keyOnceDesc":"现在即可复制——之后也可以随时在下方列表中复制。","llmPlayground.token":"API Key","llmPlayground.selectToken":"选择 API Key","llmPlayground.noKey":"无 key","llmPlayground.tokenNotUsable":"该 key 当前状态为 {status},不可用于对话","llmPlayground.model":"模型","llmPlayground.selectModel":"选择模型","llmPlayground.noTokens":"请先在「API Keys」页创建一个 sk- key","llmPlayground.noModels":"暂无可用模型,请先在渠道中配置","llmPlayground.emptyConversation":"选择 key 与模型,发送第一条消息开始测试","llmPlayground.thinking":"思考过程","llmPlayground.waiting":"等待响应…","llmPlayground.busy":"回复生成中…","llmPlayground.inputPlaceholder":"输入消息,Enter 发送…","llmPlayground.stop":"停止","llmPlayground.clear":"清空对话","llmPlayground.turnFailed":"请求失败","layout.llm":"LLM","layout.llmChannels":"渠道管理","layout.llmModels":"模型目录","layout.llmLogs":"用量日志","layout.llmTokens":"API Keys","layout.llmPlayground":"对话测试","llm.newChannel":"新建渠道","llm.noChannels":"暂无 LLM 渠道","llm.noChannelsDesc":"添加上游服务商及其 API key,开始路由 LLM 流量。","llm.channelCreated":"渠道已创建","llm.channelUpdated":"渠道已更新","llm.channelDeleted":"渠道已删除","llm.confirmDeleteChannel":"确定删除渠道「{name}」?其 key 池与路由条目将一并移除。","llm.failedToSave":"保存失败","llm.failedToDelete":"删除失败","llm.fName":"名称","llm.fProvider":"服务商","llm.fBaseUrl":"Base URL","llm.fModels":"模型列表(逗号分隔)","llm.fTestModel":"测试模型","llm.testModelHint":"用于健康探活与渠道测试;留空则探测模型列表中的第一个模型。","llm.testModelNoDirHint":"用于健康探活与渠道测试;请先到模型目录注册模型。","llm.noDirectoryTitle":"模型目录为空","llm.noDirectoryHint":"在模型目录中注册并定价模型之前,该渠道不会转发任何流量。可以现在先建渠道,之后再补模型。","llm.goToModels":"前往模型目录 →","llm.fPriority":"优先级","llm.fKeyMode":"Key 轮转","llm.keyModePolling":"轮询","llm.keyModeRandom":"随机","llm.fAutoBan":"自动封禁","llm.fCostMode":"成本模式","llm.costModeUsage":"按量(折扣)","llm.costModeFixed":"订阅(月费)","llm.fCostDiscount":"成本折扣","llm.costDiscountHint":"实际进货价 = 目录价 × 折扣(0.8 = 八折拿货)","llm.fMonthlyCost":"月费(USD/账号)","llm.monthlyCostHint":"订阅上游固定成本,逐笔成本记 0,月底从固定池扣","llm.fInitialKeys":"初始 Key 池","llm.fMaxConcurrency":"并发上限","llm.addKey":"添加 Key","llm.keysWriteOnlyHint":"API key 通过 key 池管理(行菜单 → 管理 Key),此处不可编辑。","llm.colChannel":"渠道","llm.colPriority":"优先级","llm.colKeys":"Key 池","llm.colMaskedKey":"Key","llm.colMaxConcurrency":"并发","llm.keysSummary":"{total} 把 key 中 {active} 把可用","llm.manageKeys":"管理 Key","llm.testChannel":"连通性测试","llm.disableChannel":"停用","llm.enableChannel":"启用","llm.testOk":"{model} 响应 {ms}ms","llm.testFailed":"测试失败:{detail}","llm.disableKey":"禁用","llm.enableKey":"启用","llm.replacePool":"整体替换 Key 池","llm.replacePoolHint":"一次性替换全部 key。既有状态(禁用 key、并发上限)会丢失。","llm.replacePoolSubmit":"替换 Key 池","llm.keysReplaced":"Key 池已替换","llm.newModel":"新建模型","llm.noModels":"暂无模型目录","llm.noModelsDesc":"注册模型并配置定价。未注册的模型会被中转拒绝。","llm.modelCreated":"模型已创建","llm.modelUpdated":"模型已更新","llm.modelDeleted":"模型已删除","llm.confirmDeleteModel":"从目录删除模型「{name}」?之后中转将拒绝该模型。","llm.defaultsTitle":"默认模型","llm.defaultsDesc":"agent、flows、知识库未显式指定模型时使用,必须先在下方目录中注册。","llm.defaultChatModel":"默认对话模型","llm.defaultEmbeddingModel":"默认向量模型","llm.defaultEmbeddingHint":"向量模型必须设置维度(在模型参数的 dimension 中填写)。","llm.defaultNone":"未设置","llm.defaultsSaved":"默认模型已保存","llm.fModelName":"模型名","llm.fModelType":"类型","llm.fPriceMode":"计价模式","llm.priceModeToken":"按 token","llm.priceModePerCall":"按次","llm.fInputPrice":"输入价格($/1M tokens)","llm.inputPriceHint":"上游原价,留空按 0 计;用户实付 = 价格 × 分组系数","llm.fOutputPrice":"输出价格($/1M tokens)","llm.outputPriceHint":"上游原价","llm.fCacheReadPrice":"缓存读价格($/1M)","llm.cachePriceHint":"留空 = 同输入价","llm.fCacheWritePrice":"缓存写价格($/1M)","llm.cacheWritePriceHint":"留空 = 同输入价(Anthropic 通常 1.25× 输入)","llm.fParams":"模型参数","llm.fContextWindow":"上下文窗口 (tokens)","llm.fMaxOutputTokens":"单次输出上限","llm.fDimension":"Embedding 维度","llm.fCapabilities":"能力标签","llm.paramsHint":"供 agent 上下文截断与 kb 向量库构建读取;留空 = 不设。能力标签用于前端选择器过滤。","llm.fCompletionRatio":"补全倍率","llm.fCacheRatio":"缓存读倍率","llm.fCacheWriteRatio":"缓存写倍率","llm.fCallPrice":"单次价格(USD)","llm.callPriceHint":"按次全额预扣($1 = 1,000,000 quota)。","llm.statusActive":"启用","llm.statusDisabled":"停用","llm.colPricing":"定价","llm.filterModel":"按模型过滤","llm.filterToken":"按 token id 过滤","llm.filterChannelAll":"全部渠道","llm.applyFilter":"应用","llm.colTime":"时间","llm.colSource":"来源","llm.colTokens":"输入/输出","llm.colQuota":"收费","llm.colCost":"成本","llm.colProfit":"利润","llm.colRequests":"请求数","llm.colOutputTokens":"输出 token","llm.colPromptTokens":"输入 token","llm.colCompletionTokens":"输出 token","llm.statsTitle":"用量与利润统计","llm.groupByDay":"按日","llm.groupByModel":"按模型","llm.groupByUser":"按用户","llm.groupByChannel":"按渠道","llm.chartMoney":"收费 / 成本 / 利润","llm.chartTokens":"Token 用量","llm.noUsageData":"该时间段内暂无用量","llm.colStream":"流式","llm.colStatus":"状态","llm.colElapsed":"耗时","llm.noLogs":"暂无用量日志","llm.noLogsDesc":"中转与内部 LLM 调用会记录在这里。","layout.ai":"AI","layout.aiAgents":"Agent 管理","layout.aiPlayground":"对话调试","aiAgents.newAgent":"新建 Agent","aiAgents.noAgents":"还没有 Agent","aiAgents.emptyHint":"创建一个 Agent,配置模型与系统提示词后即可对话。","aiAgents.name":"名称","aiAgents.namePlaceholder":"例如:内容助手","aiAgents.nameImmutable":"名称创建后不可修改","aiAgents.provider":"Provider","aiAgents.providerHint":"OpenAI 兼容端点(含 DeepSeek/OpenRouter/Ollama)或 Anthropic","aiAgents.model":"模型","aiAgents.modelPlaceholder":"选择模型","modelSelect.placeholder":"选择模型","modelSelect.selectedCount":"已选 {count} 个","modelSelect.useDefault":"使用默认模型","modelSelect.selectAll":"全选","modelSelect.clearAll":"取消全选","modelSelect.type":"分类","modelSelect.channel":"渠道","modelSelect.model":"模型","aiAgents.channelPin":"钉死渠道","aiAgents.channelPinAuto":"自动路由(不钉死)","aiAgents.channelPinHint":"把该 agent 钉在一条上游渠道,便于成本可控。被钉渠道必须属于本租户且服务该模型;不做跨渠道 failover。","aiAgents.systemPrompt":"系统提示词","aiAgents.systemPromptPlaceholder":"你是一个乐于助人的助手……","aiAgents.tools":"工具白名单","aiAgents.allowAll":"全部允许","aiAgents.allowAllHint":"该 Agent 可调用服务端注册的所有域工具。","aiAgents.memoryToolsHint":"记忆工具(memory_store/recall/forget)始终可用,无需列入白名单。","aiAgents.customToolPlaceholder":"添加自定义工具名(如 MCP 工具)…","aiAgents.addTool":"添加","aiAgents.toolGroup.content":"内容","aiAgents.toolGroup.system":"系统","aiAgents.toolGroup.skills":"技能","aiAgents.toolGroup.script":"脚本","aiAgents.toolGroup.files":"文件","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"知识库","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"其它","aiAgents.kbBinding":"知识库绑定","aiAgents.kbEmpty":"暂无启用的知识库。","aiAgents.kbBindingHint":"必须逐一勾选要挂载的知识库;未勾选任何库时 knowledge_search 工具不会挂载。勾选 knowledge_search 工具后,agent 对话时可检索所勾选的知识库并引用来源;调用中传入的 kb_ids 只能在该范围内收窄。","aiAgents.memory":"长期记忆","aiAgents.memoryHint":"开启后每回合注入该 Agent 的核心记忆(按用户隔离)。","aiAgents.temperature":"温度","aiAgents.temperaturePlaceholder":"留空使用 provider 默认值","aiAgents.maxIterations":"回合上限","aiAgents.maxIterationsHint":"单次回合内引擎最大迭代次数(工具调用轮数)。","aiAgents.params":"扩展参数(JSON)","aiAgents.paramsInvalid":"JSON 格式无效","aiAgents.paramsHint":"skill_bundles 由上方「启用 Skills」控件管理,此处手写会被覆盖。","aiAgents.allTools":"全部","aiAgents.noTools":"无","aiAgents.updatedAt":"更新时间","aiAgents.usage":"用量","aiAgents.playground":"对话调试","aiAgents.created":"Agent 已创建","aiAgents.createFailed":"创建 Agent 失败","aiAgents.updated":"Agent 已更新","aiAgents.updateFailed":"更新 Agent 失败","aiAgents.deleted":"Agent 已删除","aiAgents.deleteFailed":"删除 Agent 失败","aiAgents.confirmDelete":"确定删除 {name}?其会话、消息与记忆将一并删除,且不可恢复。","aiUsage.totalTurns":"总回合数","aiUsage.inputTokens":"输入 Token","aiUsage.outputTokens":"输出 Token","aiUsage.cacheReadTokens":"缓存命中 Token","aiUsage.toolCalls":"工具调用","aiUsage.dailyTitle":"每日用量","aiUsage.noData":"该时间段内暂无用量","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"选择 Agent","aiPlayground.sessions":"会话","aiPlayground.sessionDeleted":"会话已删除","aiPlayground.sessionDeleteFailed":"删除会话失败","aiPlayground.deleteSessionDesc":"将删除该会话及其全部消息,此操作不可撤销。","aiPlayground.newSession":"新建会话","aiPlayground.noSessions":"暂无会话,发送第一条消息将自动创建。","aiPlayground.noAgents":"请先创建一个 Agent","aiPlayground.emptySession":"选择或新建一个会话开始对话","aiPlayground.thinking":"思考过程","aiPlayground.busy":"回合进行中…","aiPlayground.inputPlaceholder":"输入消息,Enter 发送…","aiPlayground.stop":"停止","aiPlayground.sessionFailed":"创建会话失败","aiPlayground.turnFailed":"回合执行失败","aiMemory.title":"记忆管理","aiMemory.searchPlaceholder":"搜索 key 或内容…","aiMemory.allCategories":"全部分类","aiMemory.add":"新增记忆","aiMemory.addTitle":"新增记忆","aiMemory.editTitle":"编辑记忆","aiMemory.dialogHint":"按 key 去重:同 (Agent, 用户, key) 已存在时将更新内容。","aiMemory.key":"键","aiMemory.keyImmutable":"key 是记忆的唯一标识,创建后不可修改","aiMemory.content":"内容","aiMemory.category":"分类","aiMemory.categoryHint":"core 参与注入与预算;daily 仅为日志,不注入","aiMemory.importance":"重要度","aiMemory.user":"用户","aiMemory.userOptional":"所属用户(可选)","aiMemory.userPlaceholder":"留空 = 平台级(对全部用户生效范围见记忆注入规则)","aiMemory.pinned":"固定(不被预算驱逐)","aiMemory.noMemories":"暂无记忆","aiMemory.emptyHint":"记忆由 agent 对话自动沉淀,也可在此手动添加。","aiMemory.saved":"记忆已保存","aiMemory.saveFailed":"保存记忆失败","aiMemory.deleted":"记忆已删除","aiMemory.deleteFailed":"删除记忆失败","aiMemory.confirmDelete":"确定删除记忆 {key}?该操作不可恢复。","layout.aiSkills":"Skills","layout.aiTools":"AI 工具","aiTools.title":"AI 工具目录","aiTools.tabBuiltin":"内置工具","aiTools.category":"分类","aiTools.nameDesc":"名称 / 描述","aiTools.usedByCol":"使用 agent 数","aiTools.desc":"后端注册的域工具目录(名称/描述/分类由后端定义),按分类分组。","aiTools.usedBy":"{count} 个 agent 在用","aiTools.empty":"暂无工具","aiTools.emptyDesc":"后端未注册任何域工具。","aiSkills.new":"新建 Skill","aiSkills.newTitle":"新建 Skill","aiSkills.editTitle":"编辑 Skill","aiSkills.dialogHint":"技能以 SKILL.md 存储(frontmatter + 正文),agent 通过启用清单引用。","aiSkills.name":"名称","aiSkills.nameHint":"目录名:字母/数字/-/_,最长 64 字符","aiSkills.layer":"层级","aiSkills.layerHint":"tenant = 仅当前租户可用;platform = 所有租户可用(同名时 platform 优先)","aiSkills.description":"描述","aiSkills.descriptionPlaceholder":"什么场景下应使用此技能(供模型发现)","aiSkills.instructions":"操作手册(Markdown)","aiSkills.tools":"组合工具","aiSkills.toolsPlaceholder":"输入工具名回车添加,如 list_posts","aiSkills.disallowedTools":"禁用工具","aiSkills.always":"始终内联全文","aiSkills.alwaysHint":"Compact 模式下也注入完整指令(默认仅元数据 + read_skill 按需加载)","aiSkills.noSkills":"还没有 Skill","aiSkills.emptyHint":"技能是带操作手册的 SKILL.md 目录,agent 启用后注入 system 提示。","aiSkills.saved":"Skill 已保存","aiSkills.saveFailed":"保存 Skill 失败","aiSkills.deleted":"Skill 已删除","aiSkills.deleteFailed":"删除 Skill 失败","aiSkills.confirmDelete":"确定删除 Skill {name}?整个技能目录(含 scripts/资源)都会被删除。","aiSkills.bundles":"启用 Skills","aiSkills.bundlesAllHint":"该 Agent 启用作用域内全部技能。","aiSkills.bundlesEmpty":"暂无可用技能,请先到 Skills 页创建。","aiSkills.bundlesHint":"勾选注入该 Agent system 提示的技能;每回合重扫目录,改动下回合生效。","layout.aiSessions":"对话","aiSessions.title":"标题","aiSessions.agent":"Agent","aiSessions.user":"用户","aiSessions.messages":"消息数","aiSessions.lastActive":"最近活跃","aiSessions.allAgents":"全部 Agent","aiSessions.allStatuses":"全部状态","aiSessions.noSessions":"暂无对话","aiSessions.emptyHint":"用户在 agent 会话中发起回合后,会话会出现在这里。","aiSessions.untitled":"(未命名)","aiSessions.view":"查看消息","aiSessions.noMessages":"该会话暂无消息","aiSessions.deleted":"会话已删除","aiSessions.deleteFailed":"删除会话失败","aiSessions.confirmDelete":"确定删除对话「{title}」?其全部消息将一并删除(记忆按 agent 保留),不可恢复。","layout.kb":"知识库","layout.kbDocs":"文档","layout.kbChunks":"分块","layout.kbImages":"图片","layout.kbChunker":"切块预览","layout.kbPlayground":"问答测试","layout.kbWiki":"知识页","layout.kbFaqs":"FAQ","layout.kbGaps":"知识缺口","layout.kbDiagnostics":"诊断","kb.new":"新建知识库","kb.noKb":"还没有知识库","kb.noKbDesc":"创建第一个知识库后即可上传文档。","kb.deleteKb":"删除知识库","kb.confirmDeleteKb":"删除知识库「{name}」?其中所有文档、切块、FAQ、Wiki 页面、向量/全文索引和原始文件都会被永久删除,不可恢复。","kb.kbDeleted":"知识库已删除(含全部内容与索引)","kb.viewChunks":"查看分块","kb.reparseAction":"重新处理","kb.thinking":"思考中…","kb.viewFullRef":"查看全文","kb.distillWiki":"生成 Wiki","kb.distillWikiHint":"后台 LLM 任务:从所选文档蒸馏知识页草稿,完成后出现在列表中等待人工审核发布。","kb.noReadyDocs":"该知识库没有就绪状态的文档","kb.distillQueued":"Wiki 生成任务已加入队列({count} 个文档)","kb.distillSubmit":"生成 Wiki({count})","kb.editChunk":"编辑分块","kb.editChunkHint":"保存后自动重新向量化和重建索引。","kb.confirmDeleteChunk":"删除该分块?其向量/全文索引将一并移除;删除父块会级联删除其子块,不可恢复。","kb.chunkUpdated":"分块已更新(已重建索引)","kb.chunkDeleted":"分块已删除(含索引)","kb.updatedAt":"更新时间","kb.jobHistory":"处理记录","kb.jobAttempts":"尝试次数","kb.noJobs":"暂无处理记录","kb.updated":"知识库已更新","kb.created":"知识库已创建","kb.vectorBackend":"向量后端","kb.enabledOn":"已启用","kb.enabledOff":"未启用","kb.slug":"Slug","kb.kindDoc":"文档库(可含 Wiki)","kb.kindFaq":"FAQ 库","kb.selectKb":"请选择知识库","kb.selectKbDesc":"从上方选择或先到「知识库」页创建。","kb.selectPlaceholder":"选择知识库","kb.allKbs":"全部知识库","kb.allDocs":"全部文档","kb.progress":"进度","kb.partialParsed":"部分解析","kb.pagesCol":"页数","kb.imagesCol":"图片","kb.pageCol":"页","kb.parseEngine":"解析引擎","kb.parseEngineBuiltin":"内置(零依赖保底)","kb.parseEngineDocreader":"docreader 解析服务(PDF 图片/扫描件高保真)","kb.parseEngineMineru":"MinerU(PDF 版面/公式/表格)","kb.parseEngineHint":"PDF 图片、扫描件、版面保真需要 docreader 服务;未配置服务端地址时选了也会自动回落内置","kb.noImages":"暂无图片","kb.noImagesDesc":"上传带图文档并启用识别后,这里会列出抽取的图片。","kb.recognition":"识别内容","kb.imagePreview":"预览","kb.imageCaption":"图片描述","kb.imageOcr":"OCR 文本","kb.imageStatus.pending":"待识别","kb.imageStatus.done":"已识别","kb.imageStatus.failed":"失败","kb.imageStatus.skipped":"跳过","kb.createdAtCol":"添加时间","kb.imagePreviewUnavailable":"图片暂不可用(外链失效或字节缺失)","kb.imageThumb":"缩略图","kb.imageContent":"内容","kb.zoomIn":"放大","kb.zoomOut":"缩小","kb.zoomReset":"重置","kb.reader":"阅读视图","kb.readerEmpty":"该文档没有可展示的解析块","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"页码未知","kb.upload":"上传文档","kb.uploadOk":"已上传,解析排队中","kb.uploadFailed":"上传失败","kb.online":"在线录入","kb.onlineOk":"已录入,处理中","kb.onlineFailed":"录入失败","kb.noDocs":"暂无文档","kb.noDocsDesc":"上传文件或在线录入 Markdown。","kb.source":"来源","common.search":"搜索","layout.kbSearchTest":"检索测试","kb.searchTest.vectorTab":"向量召回","kb.searchTest.bm25Tab":"关键字召回","kb.searchTest.selectKb":"选择知识库","kb.searchTest.queryPlaceholder":"输入查询内容…","kb.searchTest.queryFirst":"输入查询并点击搜索,验证两条检索链路各自的召回结果","kb.searchTest.selectKbFirst":"先选择一个知识库","kb.searchTest.empty":"没有命中","kb.searchTest.score":"分数","kb.searchTest.kind":"类型","kb.searchTest.doc":"文档","kb.searchTest.preview":"内容","kb.searchTest.grams":"查询词元","kb.searchTest.keywords":"块关键字","kb.searchTest.ghostHint":"存在 SQL 中已不存在的幽灵命中(索引未清理)","kb.parserEngineCol":"解析引擎","kb.parserDefault":"默认","kb.imageRecogCol":"图片识别","kb.imageRecogOn":"已开启","kb.imageRecogOff":"未开启","layout.docparse":"文档解析","layout.docparseEngines":"引擎管理","layout.docparseTokens":"API 令牌","layout.docparseConvert":"转换测试","layout.docparseRecognize":"识别测试","layout.docparseUsage":"用量报表","docparse.engineName":"引擎","docparse.category":"分类","docparse.categoryDocument":"文档解析","docparse.categoryOcr":"图像 OCR","docparse.enabled":"启用","docparse.pricePerPage":"每页价格","docparse.pricePerCall":"每次价格","docparse.costPerPage":"每页成本","docparse.registered":"已注册","docparse.notRegistered":"未注册","docparse.updatedAt":"更新时间","docparse.editEngine":"编辑引擎","docparse.editEngineDesc":"更新「{name}」的定价,金额单位为分。","docparse.engineUpdated":"引擎已更新","docparse.noEngines":"暂无引擎","docparse.failedToSave":"保存失败","docparse.newToken":"新建令牌","docparse.owner":"所有者","docparse.ownerPlaceholder":"留空 = 当前管理员","docparse.ownerHint":"令牌归属的用户;留空默认为当前管理员。","docparse.tokenCreated":"令牌已创建","docparse.tokenName":"令牌名称","docparse.tokenPrefix":"前缀","docparse.quota":"配额","docparse.quotaHint":"每日页数配额,0 表示不限制","docparse.tokenCreateDesc":"供第三方调用文档解析服务的 API 令牌。","docparse.noTokens":"暂无令牌","docparse.noTokensDesc":"创建令牌后,第三方即可调用解析 API。","docparse.confirmDeleteToken":"删除令牌「{name}」?使用它的第三方将立即失去访问权限,且不可恢复。","docparse.tokenDeleted":"令牌已删除","docparse.createdAt":"创建时间","docparse.failedToCreate":"创建失败","docparse.convertHint":"上传文档文件,可选择解析引擎,获取 markdown 输出。","docparse.file":"文件","docparse.engineAuto":"默认引擎","docparse.extractImages":"提取图片","docparse.parse":"解析","docparse.jobSubmitted":"任务已提交","docparse.jobRunning":"运行中…","docparse.jobFailed":"任务失败","docparse.newJob":"新建任务","docparse.pages":"页数","docparse.images":"图片","docparse.failedToSubmit":"提交失败","docparse.recognizeHint":"上传图片,经默认视觉模型识别,获取 caption 和 OCR 文本。","docparse.image":"图片","docparse.prompt":"提示词","docparse.promptPlaceholder":"可选自定义提示词","docparse.recognize":"识别","docparse.caption":"描述","docparse.noUsage":"暂无用量数据","docparse.kind":"类型","docparse.chars":"字符数","docparse.durationMs":"耗时(ms)","kb.noChunks":"暂无分块","kb.noChunksDesc":"父块/子块结构,点击行查看完整内容","kb.breadcrumb":"分块","kb.embedded":"已向量化","kb.notEmbedded":"未向量化","kb.bytes":"字节","kb.vectorCol":"向量","kb.backToDocs":"返回文档列表","kb.chunkCount":"切块数","kb.reparse":"已重新处理","kb.reparseFailed":"重处理失败","kb.confirmDelete":"删除文档「{title}」?将永久删除其切块、向量/全文索引和原始文件,不可恢复。","kb.deleted":"已删除(含索引)","kb.mdTitle":"标题","kb.mdContent":"内容(Markdown,# 标题用于切块)","kb.status.pending":"等待中","kb.status.parsing":"解析中","kb.status.chunking":"切块中","kb.status.indexing":"建索引中","kb.status.embedding":"嵌入中","kb.status.ready":"就绪","kb.status.failed":"失败","kb.status.stale":"已过期","kb.sample":"样例 Markdown(≤64KB,只读预览,不落库)","kb.runPreview":"运行预览","kb.running":"切块中…","kb.parent":"父块","kb.child":"子块","kb.parents":"父块","kb.children":"子块","kb.total":"共","kb.chars":"字符","kb.askLabel":"问题(单轮;空范围 = 全部启用库)","kb.stream":"流式(SSE)","kb.ask":"提问","kb.stop":"停止","kb.references":"引用","kb.wikiNoPages":"暂无知识页","kb.wikiNoPagesDesc":"对 ready 文档发起蒸馏后,草稿页会出现在这里待审。","kb.publish":"发布(入池检索)","kb.approveOk":"已发布并入池","kb.reject":"拒绝并归档","kb.rejected":"已归档","kb.saveOk":"已保存(已发布页自动重建索引)","kb.noVersions":"暂无历史版本(首发未覆盖旧内容)。","kb.diffCurrent":"对比当前","kb.rollback":"回滚","kb.rollbackOk":"已回滚(回滚前内容已存为新版本)","kb.diffTitle":"行级对比(红=删除,绿=新增)","kb.newFaq":"新建 FAQ","kb.faqCreated":"已创建并入池","kb.stdQuestion":"标准问题","kb.similarCount":"相似问","kb.hits":"命中","kb.toggleOk":"已切换(联动索引)","kb.similarLabel":"相似问(每行一个,可选)","kb.answersLabel":"答案(每行一条,可多条)","kb.noFaqs":"暂无 FAQ","kb.noFaqsDesc":"手动创建,或到「知识缺口」页一键起草。","kb.gapsIntro":"未覆盖(或负反馈)问题的聚合清单——起草后进入 FAQ 页人工审核启用。","kb.diag.allKinds":"全部类型","kb.diag.allStatuses":"全部状态","kb.diag.docFilter":"按文档 ID 筛选","kb.diag.total":"共 {n} 条","kb.diag.noRuns":"暂无运行记录","kb.diag.noRunsDesc":"知识库链路每次执行(处理/问答/检索等)都会在此留下记录。","kb.traceToggle":"诊断","kb.tracePanel":"管线追踪","kb.logId":"日志 ID","kb.diag.runs":"运行记录","kb.diag.checkup":"体检","kb.diag.health":"健康","kb.diag.checkupIntro":"按需扫描一致性规则(10 秒缓存)。","kb.diag.healthIntro":"组件健康;默认探测零成本。","kb.diag.embedProbe":"Embed 冒烟探测","kb.diag.r1":"事件丢失(pending 无任务)","kb.diag.r2":"中间态僵死","kb.diag.r3":"失败文档","kb.diag.r4":"半成品(缺嵌入)","kb.diag.r5":"向量漂移","kb.diag.r6":"KB 死信任务","kb.diag.r7":"僵死运行记录","kb.diag.kind":"类型","kb.diag.status":"状态","kb.diag.trigger":"来源","kb.diag.attempt":"尝试","kb.diag.latency":"耗时","kb.diag.error":"错误","kb.diag.created":"时间","kb.diag.prev":"上一页","kb.diag.next":"下一页","kb.diag.detail":"运行详情","kb.diag.agent":"Agent","kb.diag.session":"会话","kb.diag.configSnapshot":"配置快照","kb.diag.stages":"阶段记录","kb.diag.noStages":"无阶段记录","kb.noGaps":"没有知识缺口","kb.noGapsDesc":"所有提问都被知识库覆盖。","kb.freq":"频次","kb.draftFaq":"起草 FAQ","kb.drafted":"已起草 FAQ(未启用)——到「FAQ」页人审启用","kb.docsPage":"文档","kb.title":"标题","kb.versions":"版本","kb.edit":"编辑","kb.operations":"操作","kb.state":"状态","kb.allStatus":"全部状态","kb.type":"类型","kb.embeddingModel":"嵌入模型","kb.embeddingDim":"向量维度","kb.modelHint":"创建后不可修改(缺省用全局默认)","kb.modelCol":"模型","kb.modelRequired":"必填:请输入或配置全局默认(RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"重排模型","kb.rerankModelOptional":"可选:缺省用全局默认(未配置则关闭重排)","kb.rerankWindow":"重排窗口","kb.rerankThreshold":"重排阈值","kb.rerankInherit":"继承全局默认","kb.rerankHint":"窗口/阈值留空继承全局默认(RAISFAST_KB_RERANK_*);清空模型即回落全局默认,模型未配置时 S5 直通","kb.rerankInvalid":"窗口须为正整数,阈值须在 0–1 之间","kb.chatModel":"生成模型","kb.chatModelOptional":"可选:缺省用全局默认(RAISFAST_KB_CHAT_MODEL)→ 租户默认","kb.chatModelHint":"S9 答案生成所用模型;清空即回落全局默认","kb.distillModel":"蒸馏模型","kb.distillModelOptional":"可选:缺省用全局默认(RAISFAST_KB_DISTILL_MODEL)→ 租户默认","kb.distillModelHint":"wiki 蒸馏(主题抽取+起草)所用模型;清空即回落全局默认","kb.imageRecognition":"图片识别","kb.imageModel":"识别模型","kb.imageModelOptional":"选带 vision 能力的模型;缺省用全局默认(RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"描述语言","kb.imageLanguagePlaceholder":"如 zh / en,留空跟随文档语言","kb.imageInstructions":"自定义指令","kb.imageInstructionsPlaceholder":"对图片解读的额外要求(可选)","kb.imageHint":"开启后文档图片经 VLM 生成描述与文字提取,识别结果可被检索","kb.descPlaceholder":"描述这个知识库的用途(可选)","jobs.attempts":"尝试次数","jobs.runAfter":"计划执行","jobs.updatedAt":"更新时间","jobs.error":"错误","jobs.id":"ID","jobs.payload":"载荷","jobs.noJobs":"暂无任务","jobs.noJobsDesc":"后台任务队列当前没有记录。","jobs.cleanup":"清理旧任务","jobs.cleanupDesc":"删除 7 天前已完成或已死亡(completed/dead)的任务记录,此操作不可撤销。","jobs.cleanupDone":"已清理 {n} 条任务记录","jobs.confirmDelete":"删除任务 {type}?该记录将从队列中移除。","jobs.retried":"任务已重新入队","jobs.deleted":"任务已删除","jobs.actionFailed":"操作失败"},_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.jobs":"ジョブキュー","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.listView":"リスト表示","common.cardView":"カード表示","common.view":"表示","common.back":"戻る","common.actions":"操作","common.status":"ステータス","common.retry":"再試行","common.previous":"前へ","common.next":"次へ","common.pageOf":"{total}ページ中{page}ページ目","common.noData":"データがありません","common.refresh":"更新","common.all":"すべて","common.draft":"下書き","common.published":"公開済み","common.active":"アクティブ","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 対応","layout.ai":"AI","layout.aiAgents":"エージェント管理","layout.aiPlayground":"チャットデバッグ","aiAgents.newAgent":"新規エージェント","aiAgents.noAgents":"エージェントがありません","aiAgents.emptyHint":"エージェントを作成し、モデルとシステムプロンプトを設定すると会話できます。","aiAgents.name":"名前","aiAgents.namePlaceholder":"例:コンテンツアシスタント","aiAgents.nameImmutable":"名前は作成後に変更できません","aiAgents.provider":"プロバイダー","aiAgents.providerHint":"OpenAI 互換エンドポイント(DeepSeek/OpenRouter/Ollama)または Anthropic","aiAgents.model":"モデル","aiAgents.systemPrompt":"システムプロンプト","aiAgents.systemPromptPlaceholder":"あなたは親切なアシスタントです…","aiAgents.tools":"ツール許可リスト","aiAgents.allowAll":"すべて許可","aiAgents.allowAllHint":"サーバーに登録されたすべてのドメインツールを呼び出せます。","aiAgents.memoryToolsHint":"メモリツール(memory_store/recall/forget)は常に利用可能で、許可リストへの記載は不要です。","aiAgents.customToolPlaceholder":"カスタムツール名を追加(MCP ツールなど)…","aiAgents.addTool":"追加","aiAgents.toolGroup.content":"コンテンツ","aiAgents.toolGroup.system":"システム","aiAgents.toolGroup.skills":"スキル","aiAgents.toolGroup.script":"スクリプト","aiAgents.toolGroup.files":"ファイル","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"ナレッジ","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"その他","aiAgents.kbBinding":"ナレッジベース連携","aiAgents.kbEmpty":"有効なナレッジベースがありません。","aiAgents.kbBindingHint":"マウントするナレッジベースを個別に選択する必要があります。何も選択しない場合、knowledge_search ツールはマウントされません。ツールを有効にすると、エージェントは選択したナレッジベースを会話中に検索し、出典を引用します。呼び出し時の kb_ids はこの範囲を絞り込むのみです。","aiAgents.memory":"長期メモリ","aiAgents.memoryHint":"有効にすると、毎ターンこのエージェントのコアメモリを注入します(ユーザー単位で隔離)。","aiAgents.temperature":"温度","aiAgents.temperaturePlaceholder":"空欄でプロバイダーの既定値","aiAgents.maxIterations":"最大イテレーション","aiAgents.maxIterationsHint":"1 ターンあたりのエンジンの最大反復数(ツール呼び出しラウンド)。","aiAgents.params":"拡張パラメータ(JSON)","aiAgents.paramsInvalid":"JSON が不正です","aiAgents.paramsHint":"skill_bundles は上の「有効な Skills」コントロールで管理され、ここに手入力しても上書きされます。","aiAgents.allTools":"すべて","aiAgents.noTools":"なし","aiAgents.updatedAt":"更新日時","aiAgents.usage":"使用量","aiAgents.playground":"チャットデバッグ","aiAgents.created":"エージェントを作成しました","aiAgents.createFailed":"エージェントの作成に失敗しました","aiAgents.updated":"エージェントを更新しました","aiAgents.updateFailed":"エージェントの更新に失敗しました","aiAgents.deleted":"エージェントを削除しました","aiAgents.deleteFailed":"エージェントの削除に失敗しました","aiAgents.confirmDelete":"{name} を削除しますか?セッション・メッセージ・メモリも完全に削除されます。","aiUsage.totalTurns":"総ターン数","aiUsage.inputTokens":"入力トークン","aiUsage.outputTokens":"出力トークン","aiUsage.cacheReadTokens":"キャッシュヒットトークン","aiUsage.toolCalls":"ツール呼び出し","aiUsage.dailyTitle":"日別使用量","aiUsage.noData":"この期間の使用量はありません","aiPlayground.agent":"エージェント","aiPlayground.selectAgent":"エージェントを選択","aiPlayground.sessions":"セッション","aiPlayground.sessionDeleted":"セッションを削除しました","aiPlayground.sessionDeleteFailed":"セッションの削除に失敗しました","aiPlayground.deleteSessionDesc":"セッションとそのメッセージがすべて削除されます。この操作は元に戻せません。","aiPlayground.newSession":"新規セッション","aiPlayground.noSessions":"セッションがありません。メッセージを送信すると自動作成されます。","aiPlayground.noAgents":"先にエージェントを作成してください","aiPlayground.emptySession":"セッションを選択または作成して会話を開始","aiPlayground.thinking":"思考プロセス","aiPlayground.busy":"ターン実行中…","aiPlayground.inputPlaceholder":"メッセージを入力して Enter…","aiPlayground.stop":"停止","aiPlayground.sessionFailed":"セッションの作成に失敗しました","aiPlayground.turnFailed":"ターンの実行に失敗しました","aiMemory.title":"メモリ管理","aiMemory.searchPlaceholder":"キーまたは内容を検索…","aiMemory.allCategories":"すべてのカテゴリ","aiMemory.add":"メモリを追加","aiMemory.addTitle":"メモリを追加","aiMemory.editTitle":"メモリを編集","aiMemory.dialogHint":"キーで重複排除:同 (エージェント, ユーザー, キー) の既存行は内容が更新されます。","aiMemory.key":"キー","aiMemory.keyImmutable":"キーはメモリの一意な識別子で、作成後は変更できません","aiMemory.content":"内容","aiMemory.category":"カテゴリ","aiMemory.categoryHint":"core は注入と予算管理の対象、daily はログのみで注入されません","aiMemory.importance":"重要度","aiMemory.user":"ユーザー","aiMemory.userOptional":"所有ユーザー(任意)","aiMemory.userPlaceholder":"空欄 = プラットフォームレベル","aiMemory.pinned":"ピン留め(予算による削除から保護)","aiMemory.noMemories":"メモリがありません","aiMemory.emptyHint":"メモリはエージェントの会話から蓄積されます。手動追加も可能です。","aiMemory.saved":"メモリを保存しました","aiMemory.saveFailed":"メモリの保存に失敗しました","aiMemory.deleted":"メモリを削除しました","aiMemory.deleteFailed":"メモリの削除に失敗しました","aiMemory.confirmDelete":"メモリ {key} を削除しますか?元に戻せません。","layout.aiSkills":"Skills","layout.aiTools":"AI ツール","aiTools.title":"AI ツールカタログ","aiTools.tabBuiltin":"内蔵ツール","aiTools.category":"カテゴリ","aiTools.nameDesc":"名前 / 説明","aiTools.usedByCol":"使用エージェント数","aiTools.desc":"バックエンド登録のドメインツールカタログ(名前/説明/カテゴリはバックエンド定義)、カテゴリ別にグループ化。","aiTools.usedBy":"{count} 個のエージェントが使用中","aiTools.empty":"ツールなし","aiTools.emptyDesc":"バックエンドにドメインツールが登録されていません。","aiSkills.new":"新規 Skill","aiSkills.newTitle":"新規 Skill","aiSkills.editTitle":"Skill を編集","aiSkills.dialogHint":"スキルは SKILL.md(frontmatter + 本文)として保存され、エージェントの有効化リストから参照されます。","aiSkills.name":"名前","aiSkills.nameHint":"ディレクトリ名:英数字/-/_、最大 64 文字","aiSkills.layer":"レイヤー","aiSkills.layerHint":"tenant = 現在のテナントのみ、platform = 全テナント(同名時は platform 優先)","aiSkills.description":"説明","aiSkills.descriptionPlaceholder":"このスキルをいつ使うか(モデルの発見用)","aiSkills.instructions":"手順書(Markdown)","aiSkills.tools":"合成ツール","aiSkills.toolsPlaceholder":"ツール名を入力して Enter、例: list_posts","aiSkills.disallowedTools":"無効化ツール","aiSkills.always":"常時全文インライン","aiSkills.alwaysHint":"Compact モードでも全文を注入(既定はメタデータ + read_skill のオンデマンド読込)","aiSkills.noSkills":"スキルがありません","aiSkills.emptyHint":"スキルは手順書付きの SKILL.md ディレクトリで、有効化時に system プロンプトへ注入されます。","aiSkills.saved":"スキルを保存しました","aiSkills.saveFailed":"スキルの保存に失敗しました","aiSkills.deleted":"スキルを削除しました","aiSkills.deleteFailed":"スキルの削除に失敗しました","aiSkills.confirmDelete":"スキル {name} を削除しますか?ディレクトリ全体(scripts/アセット含む)が削除されます。","aiSkills.bundles":"有効な Skills","aiSkills.bundlesAllHint":"このエージェントはスコープ内の全スキルを有効化します。","aiSkills.bundlesEmpty":"利用可能なスキルがありません。先に Skills ページで作成してください。","aiSkills.bundlesHint":"このエージェントの system プロンプトに注入するスキルを選択。ディレクトリは毎ターン再スキャンされます。","layout.aiSessions":"会話","aiSessions.title":"タイトル","aiSessions.agent":"エージェント","aiSessions.user":"ユーザー","aiSessions.messages":"メッセージ数","aiSessions.lastActive":"最終アクティブ","aiSessions.allAgents":"すべてのエージェント","aiSessions.allStatuses":"すべてのステータス","aiSessions.noSessions":"会話がありません","aiSessions.emptyHint":"ユーザーがエージェントセッションでターンを開始すると、ここに表示されます。","aiSessions.untitled":"(無題)","aiSessions.view":"メッセージを表示","aiSessions.noMessages":"このセッションにメッセージはありません","aiSessions.deleted":"会話を削除しました","aiSessions.deleteFailed":"会話の削除に失敗しました","aiSessions.confirmDelete":"会話「{title}」を削除しますか?全メッセージが削除され(メモリはエージェント単位で保持)、元に戻せません。","layout.kb":"ナレッジベース","layout.kbDocs":"ドキュメント","layout.kbChunks":"チャンク","layout.kbImages":"画像","layout.kbChunker":"チャンクプレビュー","layout.kbPlayground":"Q&Aテスト","layout.kbWiki":"ナレッジページ","layout.kbFaqs":"FAQ","layout.kbGaps":"ナレッジギャップ","layout.kbDiagnostics":"診断","kb.new":"新規ナレッジベース","kb.noKb":"ナレッジベースがありません","kb.noKbDesc":"作成するとドキュメントをアップロードできます。","kb.deleteKb":"ナレッジベースを削除","kb.confirmDeleteKb":"ナレッジベース「{name}」を削除しますか?すべてのドキュメント、チャンク、FAQ、Wiki ページ、ベクトル/全文索引、元ファイルが完全に削除されます。","kb.kbDeleted":"ナレッジベースを削除しました(内容と索引を含む)","kb.viewChunks":"チャンクを表示","kb.reparseAction":"再処理","kb.thinking":"思考中…","kb.viewFullRef":"全文を見る","kb.distillWiki":"Wiki を生成","kb.distillWikiHint":"バックグラウンド LLM タスク:選択したドキュメントから Wiki ページのドラフトを蒸留します。完了後、リストでレビューして公開してください。","kb.noReadyDocs":"このナレッジベースに準備完了のドキュメントはありません","kb.distillQueued":"Wiki 生成タスクをキューに入れました({count} 件)","kb.distillSubmit":"Wiki を生成({count})","kb.editChunk":"チャンクを編集","kb.editChunkHint":"保存すると自動的に再ベクトル化・再索引されます。","kb.confirmDeleteChunk":"このチャンクを削除しますか?ベクトル/全文索引も削除されます。親チャンクの場合は子チャンクも削除されます。","kb.chunkUpdated":"チャンクを更新しました(索引再構築)","kb.chunkDeleted":"チャンクを削除しました(索引含む)","kb.updatedAt":"更新日時","kb.jobHistory":"処理履歴","kb.jobAttempts":"試行回数","kb.noJobs":"処理履歴はありません","kb.updated":"ナレッジベースを更新しました","kb.created":"ナレッジベースを作成しました","kb.vectorBackend":"ベクトルバックエンド","kb.enabledOn":"有効","kb.enabledOff":"無効","kb.slug":"スラッグ","kb.kindDoc":"ドキュメント(Wiki 含む)","kb.kindFaq":"FAQ","kb.selectKb":"ナレッジベースを選択","kb.selectKbDesc":"上で選択、またはナレッジベースページで作成してください。","kb.selectPlaceholder":"ナレッジベースを選択","kb.allKbs":"すべてのナレッジベース","kb.allDocs":"すべてのドキュメント","kb.progress":"進捗","kb.partialParsed":"部分解析","kb.pagesCol":"ページ","kb.imagesCol":"画像","kb.pageCol":"頁","kb.parseEngine":"解析エンジン","kb.parseEngineBuiltin":"内蔵(ゼロ依存)","kb.parseEngineDocreader":"docreader サービス(PDF 画像/スキャン高精細)","kb.parseEngineHint":"PDF の画像・スキャン・レイアウト再現には docreader サービスが必要。未設定の場合は内蔵へ自動フォールバック","kb.noImages":"画像なし","kb.noImagesDesc":"認識を有効にすると、ドキュメントから抽出した画像がここに表示されます。","kb.recognition":"認識内容","kb.imagePreview":"プレビュー","kb.imageCaption":"キャプション","kb.imageOcr":"OCR テキスト","kb.imageStatus.pending":"待機中","kb.imageStatus.done":"認識済み","kb.imageStatus.failed":"失敗","kb.imageStatus.skipped":"スキップ","kb.createdAtCol":"作成日時","kb.imagePreviewUnavailable":"プレビューできません","kb.imageThumb":"サムネイル","kb.imageContent":"内容","kb.zoomIn":"拡大","kb.zoomOut":"縮小","kb.zoomReset":"リセット","kb.reader":"読み取りビュー","kb.readerEmpty":"表示できる解析ブロックがありません","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"ページ不明","kb.upload":"ドキュメントをアップロード","kb.uploadOk":"アップロード完了、解析待ち","kb.uploadFailed":"アップロード失敗","kb.online":"オンライン入力","kb.onlineOk":"送信完了、処理中","kb.onlineFailed":"送信失敗","kb.noDocs":"ドキュメントがありません","kb.noDocsDesc":"ファイルをアップロードまたは Markdown を入力。","kb.source":"ソース","kb.noChunks":"チャンクはありません","kb.noChunksDesc":"親/子チャンク — クリックで全文表示","kb.breadcrumb":"チャンク","kb.embedded":"ベクトル化済み","kb.notEmbedded":"未ベクトル化","kb.bytes":"バイト","kb.vectorCol":"ベクトル","kb.backToDocs":"ドキュメント一覧へ戻る","kb.chunkCount":"チャンク数","kb.reparse":"再処理しました","kb.reparseFailed":"再処理失敗","kb.confirmDelete":"ドキュメント「{title}」を削除しますか?チャンク、ベクトル/全文索引、元ファイルが完全に削除されます。","kb.deleted":"削除完了(索引含む)","kb.mdTitle":"タイトル","kb.mdContent":"内容(Markdown、# 見出しで分割)","kb.status.pending":"待機中","kb.status.parsing":"解析中","kb.status.chunking":"チャンク中","kb.status.indexing":"索引中","kb.status.embedding":"埋め込み中","kb.status.ready":"準備完了","kb.status.failed":"失敗","kb.status.stale":"期限切れ","kb.sample":"サンプル Markdown(≤64KB、読み取り専用)","kb.runPreview":"プレビュー実行","kb.running":"分割中…","kb.parent":"親チャンク","kb.child":"子チャンク","kb.parents":"親","kb.children":"子","kb.total":"合計","kb.chars":"文字","kb.askLabel":"質問(単発、未指定なら全ライブラリ)","kb.stream":"ストリーミング(SSE)","kb.ask":"質問","kb.stop":"停止","kb.references":"引用","kb.wikiNoPages":"ナレッジページがありません","kb.wikiNoPagesDesc":"ready ドキュメントを蒸留すると草稿がここに表示されます。","kb.publish":"公開(検索に反映)","kb.approveOk":"公開しインデックスしました","kb.reject":"却下してアーカイブ","kb.rejected":"アーカイブしました","kb.saveOk":"保存しました(公開済みは自動再インデックス)","kb.noVersions":"バージョンはまだありません。","kb.diffCurrent":"現在と比較","kb.rollback":"ロールバック","kb.rollbackOk":"ロールバックしました(旧内容は新バージョンとして保存)","kb.diffTitle":"行比較(赤=削除、緑=追加)","kb.newFaq":"新規 FAQ","kb.faqCreated":"作成しインデックスしました","kb.stdQuestion":"標準質問","kb.similarCount":"類似質問","kb.hits":"ヒット","kb.toggleOk":"切り替えました(索引連動)","kb.similarLabel":"類似質問(1 行 1 つ、任意)","kb.answersLabel":"回答(1 行 1 つ、複数可)","kb.noFaqs":"FAQ がありません","kb.noFaqsDesc":"手動作成、またはナレッジギャップから起草。","kb.gapsIntro":"未カバー質問の集計 — 起草後 FAQ ページで人間審査。","kb.diag.allKinds":"全種類","kb.diag.allStatuses":"全ステータス","kb.diag.docFilter":"ドキュメントIDで絞り込み","kb.diag.total":"{n} 件","kb.diag.noRuns":"実行記録はまだありません","kb.diag.noRunsDesc":"KBパイプラインの各実行(取り込み・質問・検索など)はここに記録されます。","kb.traceToggle":"診断","kb.tracePanel":"パイプライン追跡","kb.logId":"ログ ID","kb.diag.runs":"実行記録","kb.diag.checkup":"健診","kb.diag.health":"健康状態","kb.diag.checkupIntro":"オンデマンド整合性スキャン(10 秒キャッシュ)。","kb.diag.healthIntro":"コンポーネント健全性。既定プローブは無コスト。","kb.diag.embedProbe":"Embed スモークプローブ","kb.diag.r1":"イベント消失(ジョブなし pending)","kb.diag.r2":"中間状態の停滞","kb.diag.r3":"失敗ドキュメント","kb.diag.r4":"不完全(埋め込み欠落)","kb.diag.r5":"ベクトル乖離","kb.diag.r6":"KB デッドジョブ","kb.diag.r7":"停滞実行","kb.diag.kind":"種類","kb.diag.status":"ステータス","kb.diag.trigger":"起源","kb.diag.attempt":"試行","kb.diag.latency":"レイテンシ","kb.diag.error":"エラー","kb.diag.created":"時刻","kb.diag.prev":"前へ","kb.diag.next":"次へ","kb.diag.detail":"実行詳細","kb.diag.agent":"エージェント","kb.diag.session":"セッション","kb.diag.configSnapshot":"設定スナップショット","kb.diag.stages":"ステージ記録","kb.diag.noStages":"ステージ記録なし","kb.noGaps":"ギャップはありません","kb.noGapsDesc":"すべての質問はカバーされています。","kb.freq":"回数","kb.draftFaq":"FAQ を起草","kb.drafted":"FAQ を起草しました(無効)— FAQ ページで審査","kb.docsPage":"ドキュメント","kb.title":"タイトル","kb.versions":"バージョン","kb.edit":"編集","kb.operations":"操作","kb.state":"状態","kb.allStatus":"すべて","kb.type":"タイプ","kb.embeddingModel":"埋め込みモデル","kb.embeddingDim":"ベクトル次元","kb.modelHint":"作成後は変更不可(空欄ならグローバル既定)","kb.modelCol":"モデル","kb.modelRequired":"必須:入力するかグローバル既定(RAISFAST_AI_EMBEDDING_MODEL/_DIM)を設定してください","kb.rerankModel":"リランキングモデル","kb.rerankModelOptional":"任意:空欄ならグローバル既定(未設定ならリランキング無効)","kb.rerankWindow":"リランキングウィンドウ","kb.rerankThreshold":"リランキングしきい値","kb.rerankInherit":"グローバル既定を継承","kb.rerankHint":"ウィンドウ/しきい値の空欄はグローバル既定(RAISFAST_KB_RERANK_*)を継承;モデル未設定時は S5 パススルー","kb.rerankInvalid":"ウィンドウは正の整数、しきい値は 0–1 の範囲で指定してください","kb.chatModel":"生成モデル","kb.chatModelOptional":"任意:グローバル既定(RAISFAST_KB_CHAT_MODEL)→ テナント既定","kb.chatModelHint":"S9 の回答生成に使うモデル。空欄でグローバル既定に戻る","kb.distillModel":"蒸留モデル","kb.distillModelOptional":"任意:グローバル既定(RAISFAST_KB_DISTILL_MODEL)→ テナント既定","kb.distillModelHint":"wiki 蒸留(トピック抽出と起草)に使うモデル。空欄でグローバル既定に戻る","kb.imageRecognition":"画像認識","kb.imageModel":"認識モデル","kb.imageModelOptional":"vision 対応モデルを選択。空欄ならグローバル既定(RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"説明言語","kb.imageLanguagePlaceholder":"例: zh / ja。空欄は文書の言語に従う","kb.imageInstructions":"カスタム指示","kb.imageInstructionsPlaceholder":"画像解釈への追加指示(任意)","kb.imageHint":"有効化すると文档画像に VLM のキャプション + OCR を生成し、検索可能になります","kb.descPlaceholder":"このナレッジベースの用途(任意)","jobs.attempts":"試行回数","jobs.runAfter":"実行予定","jobs.updatedAt":"更新日時","jobs.error":"エラー","jobs.id":"ID","jobs.payload":"ペイロード","jobs.noJobs":"ジョブなし","jobs.noJobsDesc":"バックグラウンドジョブキューにレコードがありません。","jobs.cleanup":"クリーンアップ","jobs.cleanupDesc":"7 日より前の完了/失敗済み(completed/dead)ジョブを削除します。この操作は元に戻せません。","jobs.cleanupDone":"{n} 件のジョブを削除しました","jobs.confirmDelete":"ジョブ {type} を削除しますか?キューから削除されます。","jobs.retried":"ジョブを再登録しました","jobs.deleted":"ジョブを削除しました","jobs.actionFailed":"操作に失敗しました"},UC={"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.jobs":"작업 큐","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.listView":"목록 보기","common.cardView":"카드 보기","common.view":"보기","common.back":"뒤로","common.actions":"작업","common.status":"상태","common.retry":"재시도","common.previous":"이전","common.next":"다음","common.pageOf":"{total}페이지 중 {page}페이지","common.noData":"데이터 없음","common.refresh":"새로 고침","common.all":"전체","common.draft":"임시저장","common.published":"게시됨","common.active":"활성","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 지원","layout.ai":"AI","layout.aiAgents":"에이전트 관리","layout.aiPlayground":"채팅 디버그","aiAgents.newAgent":"새 에이전트","aiAgents.noAgents":"에이전트가 없습니다","aiAgents.emptyHint":"에이전트를 만들고 모델과 시스템 프롬프트를 구성하면 대화할 수 있습니다.","aiAgents.name":"이름","aiAgents.namePlaceholder":"예: 콘텐츠 어시스턴트","aiAgents.nameImmutable":"이름은 생성 후 변경할 수 없습니다","aiAgents.provider":"공급자","aiAgents.providerHint":"OpenAI 호환 엔드포인트(DeepSeek/OpenRouter/Ollama) 또는 Anthropic","aiAgents.model":"모델","aiAgents.systemPrompt":"시스템 프롬프트","aiAgents.systemPromptPlaceholder":"당신은 도움이 되는 어시스턴트입니다…","aiAgents.tools":"도구 허용 목록","aiAgents.allowAll":"모두 허용","aiAgents.allowAllHint":"서버에 등록된 모든 도메인 도구를 호출할 수 있습니다.","aiAgents.memoryToolsHint":"메모리 도구(memory_store/recall/forget)는 항상 사용 가능하며 허용 목록에 넣을 필요가 없습니다.","aiAgents.customToolPlaceholder":"커스텀 도구 이름 추가(MCP 도구 등)…","aiAgents.addTool":"추가","aiAgents.toolGroup.content":"콘텐츠","aiAgents.toolGroup.system":"시스템","aiAgents.toolGroup.skills":"스킬","aiAgents.toolGroup.script":"스크립트","aiAgents.toolGroup.files":"파일","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"지식","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"기타","aiAgents.kbBinding":"지식 베이스 연결","aiAgents.kbEmpty":"활성화된 지식 베이스가 없습니다.","aiAgents.kbBindingHint":"마운트할 지식 베이스를 하나씩 개별 선택해야 합니다. 아무것도 선택하지 않으면 knowledge_search 도구가 마운트되지 않습니다. 도구를 활성화하면 에이전트가 선택한 지식 베이스를 대화 중 검색하고 출처를 인용합니다. 호출 시의 kb_ids는 이 범위 내에서만 좁힐 수 있습니다.","aiAgents.memory":"장기 기억","aiAgents.memoryHint":"활성화하면 매 턴 이 에이전트의 핵심 기억을 주입합니다(사용자별 격리).","aiAgents.temperature":"온도","aiAgents.temperaturePlaceholder":"비우면 공급자 기본값","aiAgents.maxIterations":"최대 반복","aiAgents.maxIterationsHint":"턴당 엔진 최대 반복 횟수(도구 호출 라운드).","aiAgents.params":"확장 매개변수(JSON)","aiAgents.paramsInvalid":"JSON 형식이 잘못되었습니다","aiAgents.paramsHint":"skill_bundles는 위의 «활성화된 Skills» 컨트롤에서 관리되며 여기 직접 입력한 값은 덮어써집니다.","aiAgents.allTools":"전체","aiAgents.noTools":"없음","aiAgents.updatedAt":"수정 시간","aiAgents.usage":"사용량","aiAgents.playground":"채팅 디버그","aiAgents.created":"에이전트가 생성되었습니다","aiAgents.createFailed":"에이전트 생성 실패","aiAgents.updated":"에이전트가 업데이트되었습니다","aiAgents.updateFailed":"에이전트 업데이트 실패","aiAgents.deleted":"에이전트가 삭제되었습니다","aiAgents.deleteFailed":"에이전트 삭제 실패","aiAgents.confirmDelete":"{name}을(를) 삭제하시겠습니까? 세션·메시지·기억도 영구 삭제됩니다.","aiUsage.totalTurns":"총 턴 수","aiUsage.inputTokens":"입력 토큰","aiUsage.outputTokens":"출력 토큰","aiUsage.cacheReadTokens":"캐시 적중 토큰","aiUsage.toolCalls":"도구 호출","aiUsage.dailyTitle":"일별 사용량","aiUsage.noData":"해당 기간 사용량 없음","aiPlayground.agent":"에이전트","aiPlayground.selectAgent":"에이전트 선택","aiPlayground.sessions":"세션","aiPlayground.sessionDeleted":"세션이 삭제되었습니다","aiPlayground.sessionDeleteFailed":"세션 삭제 실패","aiPlayground.deleteSessionDesc":"세션과 모든 메시지가 삭제됩니다. 되돌릴 수 없습니다.","aiPlayground.newSession":"새 세션","aiPlayground.noSessions":"세션이 없습니다. 메시지를 보내면 자동 생성됩니다.","aiPlayground.noAgents":"먼저 에이전트를 만드세요","aiPlayground.emptySession":"세션을 선택하거나 만들어 대화를 시작하세요","aiPlayground.thinking":"사고 과정","aiPlayground.busy":"턴 진행 중…","aiPlayground.inputPlaceholder":"메시지를 입력하고 Enter…","aiPlayground.stop":"중지","aiPlayground.sessionFailed":"세션 생성 실패","aiPlayground.turnFailed":"턴 실행 실패","aiMemory.title":"메모리 관리","aiMemory.searchPlaceholder":"키 또는 내용 검색…","aiMemory.allCategories":"전체 카테고리","aiMemory.add":"메모리 추가","aiMemory.addTitle":"메모리 추가","aiMemory.editTitle":"메모리 편집","aiMemory.dialogHint":"키로 중복 제거: 동일한 (에이전트, 사용자, 키) 행이 있으면 내용이 업데이트됩니다.","aiMemory.key":"키","aiMemory.keyImmutable":"키는 메모리의 고유 식별자이며 생성 후 변경할 수 없습니다","aiMemory.content":"내용","aiMemory.category":"카테고리","aiMemory.categoryHint":"core는 주입 및 예산 관리 대상, daily는 로그 전용으로 주입되지 않습니다","aiMemory.importance":"중요도","aiMemory.user":"사용자","aiMemory.userOptional":"소유 사용자(선택)","aiMemory.userPlaceholder":"비우면 플랫폼 수준","aiMemory.pinned":"고정(예산 제거에서 제외)","aiMemory.noMemories":"메모리가 없습니다","aiMemory.emptyHint":"메모리는 에이전트 대화에서 축적되며 직접 추가할 수도 있습니다.","aiMemory.saved":"메모리가 저장되었습니다","aiMemory.saveFailed":"메모리 저장 실패","aiMemory.deleted":"메모리가 삭제되었습니다","aiMemory.deleteFailed":"메모리 삭제 실패","aiMemory.confirmDelete":"메모리 {key}을(를) 삭제하시겠습니까? 되돌릴 수 없습니다.","layout.aiSkills":"Skills","layout.aiTools":"AI 도구","aiTools.title":"AI 도구 카탈로그","aiTools.tabBuiltin":"내장 도구","aiTools.category":"분류","aiTools.nameDesc":"이름 / 설명","aiTools.usedByCol":"사용 에이전트 수","aiTools.desc":"백엔드 등록 도메인 도구 카탈로그(이름/설명/카테고리는 백엔드 정의), 카테고리별 그룹화.","aiTools.usedBy":"{count}개 에이전트 사용 중","aiTools.empty":"도구 없음","aiTools.emptyDesc":"백엔드에 등록된 도메인 도구가 없습니다.","aiSkills.new":"새 Skill","aiSkills.newTitle":"새 Skill","aiSkills.editTitle":"Skill 편집","aiSkills.dialogHint":"스킬은 SKILL.md(frontmatter + 본문)로 저장되며 에이전트의 활성화 목록에서 참조됩니다.","aiSkills.name":"이름","aiSkills.nameHint":"디렉터리 이름: 영숫자/-/_, 최대 64자","aiSkills.layer":"레이어","aiSkills.layerHint":"tenant = 현재 테넌트 전용, platform = 모든 테넌트(동명 시 platform 우선)","aiSkills.description":"설명","aiSkills.descriptionPlaceholder":"이 스킬을 언제 사용할지(모델 발견용)","aiSkills.instructions":"지침서(Markdown)","aiSkills.tools":"구성 도구","aiSkills.toolsPlaceholder":"도구 이름 입력 후 Enter, 예: list_posts","aiSkills.disallowedTools":"비활성 도구","aiSkills.always":"항상 전체 인라인","aiSkills.alwaysHint":"Compact 모드에서도 전체 지침을 주입(기본값은 메타데이터 + read_skill 주문 로딩)","aiSkills.noSkills":"스킬이 없습니다","aiSkills.emptyHint":"스킬은 지침서가 포함된 SKILL.md 디렉터리이며, 활성화되면 system 프롬프트에 주입됩니다.","aiSkills.saved":"스킬이 저장되었습니다","aiSkills.saveFailed":"스킬 저장 실패","aiSkills.deleted":"스킬이 삭제되었습니다","aiSkills.deleteFailed":"스킬 삭제 실패","aiSkills.confirmDelete":"스킬 {name}을(를) 삭제하시겠습니까? 디렉터리 전체(scripts/에셋 포함)가 삭제됩니다.","aiSkills.bundles":"활성화된 Skills","aiSkills.bundlesAllHint":"이 에이전트는 범위 내 모든 스킬을 활성화합니다.","aiSkills.bundlesEmpty":"사용 가능한 스킬이 없습니다. 먼저 Skills 페이지에서 만드세요.","aiSkills.bundlesHint":"이 에이전트의 system 프롬프트에 주입할 스킬을 선택하세요. 디렉터리는 매 턴 다시 스캔됩니다.","layout.aiSessions":"대화","aiSessions.title":"제목","aiSessions.agent":"에이전트","aiSessions.user":"사용자","aiSessions.messages":"메시지 수","aiSessions.lastActive":"최근 활동","aiSessions.allAgents":"전체 에이전트","aiSessions.allStatuses":"전체 상태","aiSessions.noSessions":"대화가 없습니다","aiSessions.emptyHint":"사용자가 에이전트 세션에서 턴을 시작하면 여기에 표시됩니다.","aiSessions.untitled":"(제목 없음)","aiSessions.view":"메시지 보기","aiSessions.noMessages":"이 세션에 메시지가 없습니다","aiSessions.deleted":"대화가 삭제되었습니다","aiSessions.deleteFailed":"대화 삭제 실패","aiSessions.confirmDelete":'대화 "{title}"을(를) 삭제하시겠습니까? 모든 메시지가 삭제되고(메모리는 에이전트 단위로 유지) 되돌릴 수 없습니다.',"layout.kb":"지식 베이스","layout.kbDocs":"문서","layout.kbChunks":"청크","layout.kbImages":"이미지","layout.kbChunker":"청크 미리보기","layout.kbPlayground":"질의 응답 테스트","layout.kbWiki":"지식 페이지","layout.kbFaqs":"FAQ","layout.kbGaps":"지식 격차","layout.kbDiagnostics":"진단","kb.new":"새 지식 베이스","kb.noKb":"지식 베이스가 없습니다","kb.noKbDesc":"생성 후 문서를 업로드할 수 있습니다.","kb.deleteKb":"지식 베이스 삭제","kb.confirmDeleteKb":'지식 베이스 "{name}"을(를) 삭제할까요? 모든 문서, 청크, FAQ, 위키 페이지, 벡터/전문 색인, 원본 파일이 영구 삭제됩니다.',"kb.kbDeleted":"지식 베이스 삭제됨(콘텐츠 및 색인 포함)","kb.viewChunks":"청크 보기","kb.reparseAction":"재처리","kb.thinking":"생각 중…","kb.viewFullRef":"전문 보기","kb.distillWiki":"Wiki 생성","kb.distillWikiHint":"백그라운드 LLM 작업: 선택한 문서에서 Wiki 페이지 초안을 증류합니다. 완료 후 목록에서 검토하고 게시하세요.","kb.noReadyDocs":"이 지식 베이스에 준비 완료 상태의 문서가 없습니다","kb.distillQueued":"Wiki 생성 작업이 대기열에 추가되었습니다({count}개)","kb.distillSubmit":"Wiki 생성({count})","kb.editChunk":"청크 편집","kb.editChunkHint":"저장하면 자동으로 재벡터화 및 재색인됩니다.","kb.confirmDeleteChunk":"이 청크를 삭제할까요? 벡터/전문 색인도 함께 제거되며, 부모 청크 삭제 시 하위 청크도 삭제됩니다.","kb.chunkUpdated":"청크 업데이트됨(재색인)","kb.chunkDeleted":"청크 삭제됨(색인 포함)","kb.updatedAt":"갱신 시간","kb.jobHistory":"처리 기록","kb.jobAttempts":"시도 횟수","kb.noJobs":"처리 기록 없음","kb.updated":"지식 베이스가 업데이트되었습니다","kb.created":"지식 베이스가 생성되었습니다","kb.vectorBackend":"벡터 백엔드","kb.enabledOn":"활성화","kb.enabledOff":"비활성화","kb.slug":"슬러그","kb.kindDoc":"문서(위키 포함)","kb.kindFaq":"FAQ","kb.selectKb":"지식 베이스 선택","kb.selectKbDesc":"위에서 선택하거나 지식 베이스 페이지에서 생성하세요.","kb.selectPlaceholder":"지식 베이스 선택","kb.allKbs":"전체 지식 베이스","kb.allDocs":"전체 문서","kb.progress":"진행 상황","kb.partialParsed":"부분 파싱","kb.pagesCol":"페이지","kb.imagesCol":"이미지","kb.pageCol":"쪽","kb.parseEngine":"파싱 엔진","kb.parseEngineBuiltin":"내장(제로 의존성)","kb.parseEngineDocreader":"docreader 서비스(PDF 이미지/스캔 고정밀)","kb.parseEngineHint":"PDF 이미지·스캔·레이아웃 충실도는 docreader 서비스가 필요. URL 미설정 시 내장으로 자동 폴백","kb.noImages":"이미지 없음","kb.noImagesDesc":"인식을 활성화하면 문서에서 추출한 이미지가 여기에 표시됩니다.","kb.recognition":"인식 내용","kb.imagePreview":"미리보기","kb.imageCaption":"캡션","kb.imageOcr":"OCR 텍스트","kb.imageStatus.pending":"대기 중","kb.imageStatus.done":"인식됨","kb.imageStatus.failed":"실패","kb.imageStatus.skipped":"건너뜀","kb.createdAtCol":"생성","kb.imagePreviewUnavailable":"미리보기를 사용할 수 없습니다","kb.imageThumb":"썸네일","kb.imageContent":"내용","kb.zoomIn":"확대","kb.zoomOut":"축소","kb.zoomReset":"재설정","kb.reader":"읽기 보기","kb.readerEmpty":"표시할 파싱 블록이 없습니다","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"페이지 알 수 없음","kb.upload":"문서 업로드","kb.uploadOk":"업로드됨, 파싱 대기 중","kb.uploadFailed":"업로드 실크드","kb.online":"온라인 입력","kb.onlineOk":"제출됨, 처리 중","kb.onlineFailed":"제출 실패","kb.noDocs":"문서가 없습니다","kb.noDocsDesc":"파일 업로드 또는 Markdown 입력.","kb.source":"출처","kb.noChunks":"청크 없음","kb.noChunksDesc":"부모/자식 청크 — 클릭하면 전체 내용 표시","kb.breadcrumb":"청크","kb.embedded":"벡터화됨","kb.notEmbedded":"미벡터화","kb.bytes":"바이트","kb.vectorCol":"벡터","kb.backToDocs":"문서 목록으로 돌아가기","kb.chunkCount":"청크 수","kb.reparse":"재처리됨","kb.reparseFailed":"재처리 실패","kb.confirmDelete":'문서 "{title}"을(를) 삭제할까요? 청크, 벡터/전문 색인, 원본 파일이 영구 삭제됩니다.',"kb.deleted":"삭제됨(인덱스 포함)","kb.mdTitle":"제목","kb.mdContent":"내용(Markdown, # 제목 기준 분할)","kb.status.pending":"대기 중","kb.status.parsing":"파싱 중","kb.status.chunking":"청크 중","kb.status.indexing":"인덱싱 중","kb.status.embedding":"임베딩 중","kb.status.ready":"준비됨","kb.status.failed":"실패","kb.status.stale":"오래됨","kb.sample":"샘플 Markdown(≤64KB, 읽기 전용)","kb.runPreview":"미리보기 실행","kb.running":"청크 중…","kb.parent":"부모 청크","kb.child":"자식 청크","kb.parents":"부모","kb.children":"자식","kb.total":"총","kb.chars":"자","kb.askLabel":"질문(단일 턴, 미지정 시 전체)","kb.stream":"스트리밍(SSE)","kb.ask":"질문","kb.stop":"정지","kb.references":"참조","kb.wikiNoPages":"지식 페이지가 없습니다","kb.wikiNoPagesDesc":"ready 문서를 증류하면 초안이 여기 표시됩니다.","kb.publish":"게시(검색 반영)","kb.approveOk":"게시되고 인덱싱됨","kb.reject":"거절하고 보관","kb.rejected":"보관됨","kb.saveOk":"저장됨(게시됨 페이지 자동 재인덱싱)","kb.noVersions":"버전이 없습니다.","kb.diffCurrent":"현재와 비교","kb.rollback":"롤백","kb.rollbackOk":"롤백됨(이전 내용은 새 버전으로 저장)","kb.diffTitle":"행 비교(빨강=삭제, 초록=추가)","kb.newFaq":"새 FAQ","kb.faqCreated":"생성되고 인덱싱됨","kb.stdQuestion":"표준 질문","kb.similarCount":"유사 질문","kb.hits":"히트","kb.toggleOk":"전환됨(인덱스 연동)","kb.similarLabel":"유사 질문(한 줄에 하나, 선택)","kb.answersLabel":"답변(한 줄에 하나, 여러 개 가능)","kb.noFaqs":"FAQ가 없습니다","kb.noFaqsDesc":"수동 생성 또는 지식 격차에서 초안.","kb.gapsIntro":"커버되지 않은 질문 집계 — 초안은 FAQ 검토 후 활성화.","kb.diag.allKinds":"전체 유형","kb.diag.allStatuses":"전체 상태","kb.diag.docFilter":"문서 ID로 필터","kb.diag.total":"{n}건","kb.diag.noRuns":"실행 기록이 없습니다","kb.diag.noRunsDesc":"KB 파이프라인의 모든 실행(수집/질의/검색 등)이 여기 기록됩니다.","kb.traceToggle":"진단","kb.tracePanel":"파이프라인 추적","kb.logId":"로그 ID","kb.diag.runs":"실행 기록","kb.diag.checkup":"점검","kb.diag.health":"상태","kb.diag.checkupIntro":"온디맨드 일관성 스캔(10초 캐시).","kb.diag.healthIntro":"구성 요소 상태. 기본 프로브는 무비용.","kb.diag.embedProbe":"Embed 스모크 프로브","kb.diag.r1":"이벤트 유실(작업 없는 pending)","kb.diag.r2":"중간 상태 정체","kb.diag.r3":"실패 문서","kb.diag.r4":"불완전(임베딩 누락)","kb.diag.r5":"벡터 불일치","kb.diag.r6":"KB 데드 작업","kb.diag.r7":"정체 실행","kb.diag.kind":"유형","kb.diag.status":"상태","kb.diag.trigger":"출처","kb.diag.attempt":"시도","kb.diag.latency":"지연","kb.diag.error":"오류","kb.diag.created":"시각","kb.diag.prev":"이전","kb.diag.next":"다음","kb.diag.detail":"실행 상세","kb.diag.agent":"에이전트","kb.diag.session":"세션","kb.diag.configSnapshot":"구성 스냅샷","kb.diag.stages":"단계 기록","kb.diag.noStages":"단계 기록 없음","kb.noGaps":"격차가 없습니다","kb.noGapsDesc":"모든 질문이 커버됩니다.","kb.freq":"빈도","kb.draftFaq":"FAQ 초안","kb.drafted":"FAQ 초안 작성됨(비활성) — FAQ 페이지에서 검토","kb.docsPage":"문서","kb.title":"제목","kb.versions":"버전","kb.edit":"편집","kb.operations":"작업","kb.state":"상태","kb.allStatus":"전체","kb.type":"유형","kb.embeddingModel":"임베딩 모델","kb.embeddingDim":"벡터 차원","kb.modelHint":"생성 후 변경 불가(비우면 전역 기본값)","kb.modelCol":"모델","kb.modelRequired":"필수: 입력하거나 전역 기본값(RAISFAST_AI_EMBEDDING_MODEL/_DIM)을 설정하세요","kb.rerankModel":"리랭크 모델","kb.rerankModelOptional":"선택: 비워 두면 전역 기본값 사용(미설정 시 리랭크 비활성)","kb.rerankWindow":"리랭크 윈도우","kb.rerankThreshold":"리랭크 임계값","kb.rerankInherit":"전역 기본값 상속","kb.rerankHint":"윈도우/임계값을 비우면 전역 기본값(RAISFAST_KB_RERANK_*)을 상속; 모델 미설정 시 S5 통과","kb.rerankInvalid":"윈도우는 양의 정수, 임계값은 0–1 사이여야 합니다","kb.chatModel":"생성 모델","kb.chatModelOptional":"선택: 전역 기본값(RAISFAST_KB_CHAT_MODEL) → 테넌트 기본값","kb.chatModelHint":"S9 답변 생성에 사용하는 모델. 비우면 전역 기본값으로 돌아감","kb.distillModel":"증류 모델","kb.distillModelOptional":"선택: 전역 기본값(RAISFAST_KB_DISTILL_MODEL) → 테넌트 기본값","kb.distillModelHint":"wiki 증류(주제 추출+초안)에 사용하는 모델. 비우면 전역 기본값으로 돌아감","kb.imageRecognition":"이미지 인식","kb.imageModel":"인식 모델","kb.imageModelOptional":"vision 지원 모델 선택. 비워 두면 전역 기본값(RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"설명 언어","kb.imageLanguagePlaceholder":"예: zh / ko. 비우면 문서 언어","kb.imageInstructions":"사용자 지정 지침","kb.imageInstructionsPlaceholder":" 이미지 해석에 대한 추가 지침(선택)","kb.imageHint":"활성화하면 문서 이미지에 VLM 캡션 + OCR이 생성되어 검색 가능","kb.descPlaceholder":"이 지식 베이스의 용도(선택)","jobs.attempts":"시도 횟수","jobs.runAfter":"예약 실행","jobs.updatedAt":"업데이트","jobs.error":"오류","jobs.id":"ID","jobs.payload":"페이로드","jobs.noJobs":"작업 없음","jobs.noJobsDesc":"백그라운드 작업 큐가 비어 있습니다.","jobs.cleanup":"정리","jobs.cleanupDesc":"7일 이전의 완료/실패(completed/dead) 작업을 삭제합니다. 되돌릴 수 없습니다.","jobs.cleanupDone":"{n}개의 작업을 정리했습니다","jobs.confirmDelete":"작업 {type}을(를) 삭제하시겠습니까? 큐에서 제거됩니다.","jobs.retried":"작업이 다시 대기열에 등록되었습니다","jobs.deleted":"작업이 삭제되었습니다","jobs.actionFailed":"작업 실패"},zC={"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.jobs":"Cola de tareas","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.listView":"Vista de lista","common.cardView":"Vista de tarjetas","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.refresh":"Actualizar","common.all":"Todos","common.draft":"Borrador","common.published":"Publicado","common.active":"Activo","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","layout.ai":"IA","layout.aiAgents":"Agentes","layout.aiPlayground":"Depuración de chat","aiAgents.newAgent":"Nuevo agente","aiAgents.noAgents":"Aún no hay agentes","aiAgents.emptyHint":"Crea un agente, configura su modelo y prompt del sistema, y comienza a chatear.","aiAgents.name":"Nombre","aiAgents.namePlaceholder":"p. ej. Asistente de contenido","aiAgents.nameImmutable":"El nombre no se puede cambiar tras crearlo","aiAgents.provider":"Proveedor","aiAgents.providerHint":"Endpoint compatible con OpenAI (DeepSeek/OpenRouter/Ollama) o Anthropic","aiAgents.model":"Modelo","aiAgents.systemPrompt":"Prompt del sistema","aiAgents.systemPromptPlaceholder":"Eres un asistente útil…","aiAgents.tools":"Lista de herramientas permitidas","aiAgents.allowAll":"Permitir todas","aiAgents.allowAllHint":"Este agente puede llamar a todas las herramientas de dominio registradas en el servidor.","aiAgents.memoryToolsHint":"Las herramientas de memoria (memory_store/recall/forget) siempre están disponibles y no requieren estar en la lista.","aiAgents.customToolPlaceholder":"Añadir herramienta personalizada (p. ej. MCP)…","aiAgents.addTool":"Añadir","aiAgents.toolGroup.content":"Contenido","aiAgents.toolGroup.system":"Sistema","aiAgents.toolGroup.skills":"Habilidades","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Archivos","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Conocimiento","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Otros","aiAgents.kbBinding":"Bases de conocimiento","aiAgents.kbEmpty":"No hay bases de conocimiento activas.","aiAgents.kbBindingHint":"Seleccione individualmente cada base de conocimiento a montar; sin ninguna seleccionada, la herramienta knowledge_search no se monta. Con la herramienta habilitada, el agente busca en las bases seleccionadas y cita fuentes; los kb_ids en llamadas solo pueden acotar este ámbito.","aiAgents.memory":"Memoria a largo plazo","aiAgents.memoryHint":"Si está activado, las memorias principales del agente se inyectan en cada turno (aisladas por usuario).","aiAgents.temperature":"Temperatura","aiAgents.temperaturePlaceholder":"Vacío = valor por defecto del proveedor","aiAgents.maxIterations":"Iteraciones máx.","aiAgents.maxIterationsHint":"Iteraciones máximas del motor por turno (rondas de llamadas a herramientas).","aiAgents.params":"Parámetros extra (JSON)","aiAgents.paramsInvalid":"JSON no válido","aiAgents.paramsHint":"skill_bundles se gestiona con el control Skills activas de arriba; lo escrito aquí se sobrescribe.","aiAgents.allTools":"Todas","aiAgents.noTools":"Ninguna","aiAgents.updatedAt":"Actualizado","aiAgents.usage":"Uso","aiAgents.playground":"Depuración","aiAgents.created":"Agente creado","aiAgents.createFailed":"Error al crear el agente","aiAgents.updated":"Agente actualizado","aiAgents.updateFailed":"Error al actualizar el agente","aiAgents.deleted":"Agente eliminado","aiAgents.deleteFailed":"Error al eliminar el agente","aiAgents.confirmDelete":"¿Eliminar {name}? Sus sesiones, mensajes y memorias se eliminarán permanentemente.","aiUsage.totalTurns":"Turnos totales","aiUsage.inputTokens":"Tokens de entrada","aiUsage.outputTokens":"Tokens de salida","aiUsage.cacheReadTokens":"Tokens de caché","aiUsage.toolCalls":"Llamadas a herramientas","aiUsage.dailyTitle":"Uso diario","aiUsage.noData":"Sin uso en este período","aiPlayground.agent":"Agente","aiPlayground.selectAgent":"Selecciona un agente","aiPlayground.sessions":"Sesiones","aiPlayground.sessionDeleted":"Sesión eliminada","aiPlayground.sessionDeleteFailed":"Error al eliminar la sesión","aiPlayground.deleteSessionDesc":"Se eliminarán la sesión y todos sus mensajes. Esta acción no se puede deshacer.","aiPlayground.newSession":"Nueva sesión","aiPlayground.noSessions":"Sin sesiones; enviar un mensaje crea una.","aiPlayground.noAgents":"Crea primero un agente","aiPlayground.emptySession":"Selecciona o crea una sesión para empezar","aiPlayground.thinking":"Proceso de razonamiento","aiPlayground.busy":"Turno en curso…","aiPlayground.inputPlaceholder":"Escribe un mensaje y pulsa Enter…","aiPlayground.stop":"Detener","aiPlayground.sessionFailed":"Error al crear la sesión","aiPlayground.turnFailed":"El turno falló","aiMemory.title":"Gestión de memoria","aiMemory.searchPlaceholder":"Buscar por clave o contenido…","aiMemory.allCategories":"Todas las categorías","aiMemory.add":"Añadir memoria","aiMemory.addTitle":"Añadir memoria","aiMemory.editTitle":"Editar memoria","aiMemory.dialogHint":"Deduplicación por clave: si ya existe (agente, usuario, clave), se actualiza el contenido.","aiMemory.key":"Clave","aiMemory.keyImmutable":"La clave es la identidad única de la memoria y no puede cambiar tras crearse","aiMemory.content":"Contenido","aiMemory.category":"Categoría","aiMemory.categoryHint":"core se inyecta y se gestiona por presupuesto; daily es solo registro, nunca se inyecta","aiMemory.importance":"Importancia","aiMemory.user":"Usuario","aiMemory.userOptional":"Usuario propietario (opcional)","aiMemory.userPlaceholder":"Vacío = nivel de plataforma","aiMemory.pinned":"Fijada (exenta de expulsión por presupuesto)","aiMemory.noMemories":"Sin memorias","aiMemory.emptyHint":"Las memorias se acumulan en las conversaciones del agente, o añade una manualmente.","aiMemory.saved":"Memoria guardada","aiMemory.saveFailed":"Error al guardar la memoria","aiMemory.deleted":"Memoria eliminada","aiMemory.deleteFailed":"Error al eliminar la memoria","aiMemory.confirmDelete":"¿Eliminar la memoria {key}? No se puede deshacer.","layout.aiSkills":"Skills","layout.aiTools":"Herramientas IA","aiTools.title":"Catálogo de herramientas IA","aiTools.tabBuiltin":"Herramientas integradas","aiTools.category":"Categoría","aiTools.nameDesc":"Nombre / Descripción","aiTools.usedByCol":"Agentes que lo usan","aiTools.desc":"Herramientas de dominio registradas por el backend (nombre/descripción/categoría definidos por el backend), agrupadas por categoría.","aiTools.usedBy":"usado por {count} agentes","aiTools.empty":"Sin herramientas","aiTools.emptyDesc":"El backend no tiene herramientas de dominio registradas.","aiSkills.new":"Nueva skill","aiSkills.newTitle":"Nueva skill","aiSkills.editTitle":"Editar skill","aiSkills.dialogHint":"Las skills se guardan como SKILL.md (frontmatter + cuerpo); los agentes las referencian vía su lista de activación.","aiSkills.name":"Nombre","aiSkills.nameHint":"Nombre del directorio: letras/dígitos/-/_, máx. 64 caracteres","aiSkills.layer":"Capa","aiSkills.layerHint":"tenant = solo el tenant actual; platform = todos los tenants (platform gana en colisión de nombres)","aiSkills.description":"Descripción","aiSkills.descriptionPlaceholder":"Cuándo usar esta skill (para el descubrimiento del modelo)","aiSkills.instructions":"Instrucciones (Markdown)","aiSkills.tools":"Herramientas compuestas","aiSkills.toolsPlaceholder":"Escribe un nombre de herramienta y pulsa Enter, ej. list_posts","aiSkills.disallowedTools":"Herramientas excluidas","aiSkills.always":"Siempre inline","aiSkills.alwaysHint":"Incluir las instrucciones completas incluso en modo Compact (por defecto: metadatos + read_skill bajo demanda)","aiSkills.noSkills":"Aún no hay skills","aiSkills.emptyHint":"Una skill es un directorio SKILL.md con instrucciones, inyectado en el system prompt del agente al activarse.","aiSkills.saved":"Skill guardada","aiSkills.saveFailed":"Error al guardar la skill","aiSkills.deleted":"Skill eliminada","aiSkills.deleteFailed":"Error al eliminar la skill","aiSkills.confirmDelete":"¿Eliminar la skill {name}? Se elimina todo el directorio (incluidos scripts/recursos).","aiSkills.bundles":"Skills activas","aiSkills.bundlesAllHint":"Este agente activa todas las skills en su ámbito.","aiSkills.bundlesEmpty":"No hay skills disponibles todavía; crea una en la página Skills.","aiSkills.bundlesHint":"Elige las skills inyectadas en el system prompt del agente; los directorios se re-escanean cada turno.","layout.aiSessions":"Conversaciones","aiSessions.title":"Título","aiSessions.agent":"Agente","aiSessions.user":"Usuario","aiSessions.messages":"Mensajes","aiSessions.lastActive":"Última actividad","aiSessions.allAgents":"Todos los agentes","aiSessions.allStatuses":"Todos los estados","aiSessions.noSessions":"Sin conversaciones","aiSessions.emptyHint":"Las conversaciones aparecen aquí cuando los usuarios inician turnos en sesiones de agente.","aiSessions.untitled":"(sin título)","aiSessions.view":"Ver mensajes","aiSessions.noMessages":"Sin mensajes en esta sesión","aiSessions.deleted":"Conversación eliminada","aiSessions.deleteFailed":"Error al eliminar la conversación","aiSessions.confirmDelete":'¿Eliminar la conversación "{title}"? Se borran todos sus mensajes (las memorias del agente se conservan); no se puede deshacer.',"layout.kb":"Base de conocimiento","layout.kbDocs":"Documentos","layout.kbChunks":"Fragmentos","layout.kbImages":"Imágenes","layout.kbChunker":"Vista previa de fragmentación","layout.kbPlayground":"Pruebas de preguntas","layout.kbWiki":"Páginas Wiki","layout.kbFaqs":"FAQ","layout.kbGaps":"Brechas de conocimiento","layout.kbDiagnostics":"Diagnóstico","kb.new":"Nueva base de conocimiento","kb.noKb":"Sin bases aún","kb.noKbDesc":"Cree una para subir documentos.","kb.deleteKb":"Eliminar base","kb.confirmDeleteKb":"¿Eliminar la base «{name}»? Se eliminarán permanentemente todos sus documentos, fragmentos, FAQs, páginas wiki, índices vectorial/de texto completo y archivos originales.","kb.kbDeleted":"Base eliminada (contenidos e índices incl.)","kb.viewChunks":"Ver fragmentos","kb.reparseAction":"Reprocesar","kb.thinking":"Pensando…","kb.viewFullRef":"Ver texto completo","kb.distillWiki":"Generar Wiki","kb.distillWikiHint":"Tarea LLM en segundo plano: destila borradores de páginas wiki de los documentos seleccionados; revísalas y publícalas en la lista.","kb.noReadyDocs":"No hay documentos listos en esta base","kb.distillQueued":"Tarea de generación de Wiki en cola ({count} documentos)","kb.distillSubmit":"Generar Wiki ({count})","kb.editChunk":"Editar fragmento","kb.editChunkHint":"Al guardar se re-vectoriza y re-indexa automáticamente.","kb.confirmDeleteChunk":"¿Eliminar este fragmento? Se quitarán sus índices vectorial/de texto completo; eliminar un padre elimina también sus hijos.","kb.chunkUpdated":"Fragmento actualizado (re-indexado)","kb.chunkDeleted":"Fragmento eliminado (índices incl.)","kb.updatedAt":"Actualizado","kb.jobHistory":"Historial de procesamiento","kb.jobAttempts":"Intentos","kb.noJobs":"Sin registros de procesamiento","kb.updated":"Base de conocimiento actualizada","kb.created":"Base creada","kb.vectorBackend":"Backend de vectores","kb.enabledOn":"Activado","kb.enabledOff":"Desactivado","kb.slug":"Slug","kb.kindDoc":"Base de documentos (wiki incluido)","kb.kindFaq":"Base de FAQ","kb.selectKb":"Seleccione una base","kb.selectKbDesc":"Elija arriba o cree una.","kb.selectPlaceholder":"Seleccionar","kb.allKbs":"Todas las bases de conocimiento","kb.allDocs":"Todos los documentos","kb.progress":"Progreso","kb.partialParsed":"Análisis parcial","kb.pagesCol":"Págs.","kb.imagesCol":"Imágenes","kb.pageCol":"Pág.","kb.parseEngine":"Motor de análisis","kb.parseEngineBuiltin":"Integrado (sin dependencias)","kb.parseEngineDocreader":"Servicio docreader (PDF imágenes/escaneos de alta fidelidad)","kb.parseEngineHint":"Imágenes PDF, escaneos y fidelidad de diseño requieren el servicio docreader; vuelve al integrado si no hay URL configurada","kb.noImages":"Sin imágenes","kb.noImagesDesc":"Las imágenes extraídas de los documentos aparecen aquí cuando activas el reconocimiento.","kb.recognition":"Reconocimiento","kb.imagePreview":"Vista previa","kb.imageCaption":"Descripción","kb.imageOcr":"Texto OCR","kb.imageStatus.pending":"Pendiente","kb.imageStatus.done":"Reconocida","kb.imageStatus.failed":"Fallida","kb.imageStatus.skipped":"Omitida","kb.createdAtCol":"Creado","kb.imagePreviewUnavailable":"Vista previa no disponible","kb.imageThumb":"Mini","kb.imageContent":"Contenido","kb.zoomIn":"Acercar","kb.zoomOut":"Alejar","kb.zoomReset":"Restablecer","kb.reader":"Vista de lectura","kb.readerEmpty":"Sin bloques que mostrar","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Página desconocida","kb.upload":"Subir documento","kb.uploadOk":"Subido, análisis en cola","kb.uploadFailed":"Fallo al subir","kb.online":"Entrada en línea","kb.onlineOk":"Enviado, procesando","kb.onlineFailed":"Fallo al enviar","kb.noDocs":"Sin documentos","kb.noDocsDesc":"Suba archivos o escriba Markdown.","kb.source":"Origen","kb.noChunks":"Sin fragmentos","kb.noChunksDesc":"Bloques padre/hijo — haz clic para ver el contenido completo","kb.breadcrumb":"Fragments","kb.embedded":"Vectorizado","kb.notEmbedded":"Sin vectorizar","kb.bytes":"bytes","kb.vectorCol":"Vector","kb.backToDocs":"Volver a los documentos","kb.chunkCount":"Fragmentos","kb.reparse":"Reprocesado","kb.reparseFailed":"Fallo","kb.confirmDelete":"¿Eliminar el documento «{title}»? Se eliminarán permanentemente sus fragmentos, índices vectorial/de texto completo y el archivo original.","kb.deleted":"Eliminado (índices incl.)","kb.mdTitle":"Título","kb.mdContent":"Contenido (Markdown; # fragmenta)","kb.status.pending":"Pendiente","kb.status.parsing":"Analizando","kb.status.chunking":"Fragmentando","kb.status.indexing":"Indexando","kb.status.embedding":"Embebiendo","kb.status.ready":"Listo","kb.status.failed":"Fallido","kb.status.stale":"Obsoleto","kb.sample":"Markdown de muestra (≤64KB, vista previa)","kb.runPreview":"Ejecutar vista previa","kb.running":"Fragmentando…","kb.parent":"Padre","kb.child":"Hijo","kb.parents":"Padres","kb.children":"Hijos","kb.total":"Total","kb.chars":"caracteres","kb.askLabel":"Pregunta (un turno; vacío = todo)","kb.stream":"Streaming (SSE)","kb.ask":"Preguntar","kb.stop":"Detener","kb.references":"Referencias","kb.wikiNoPages":"Sin páginas","kb.wikiNoPagesDesc":"Las páginas destiladas aparecen aquí para revisión.","kb.publish":"Publicar (indexado)","kb.approveOk":"Publicado e indexado","kb.reject":"Rechazar y archivar","kb.rejected":"Archivado","kb.saveOk":"Guardado (reindexado automático)","kb.noVersions":"Sin versiones aún.","kb.diffCurrent":"Diff con actual","kb.rollback":"Revertir","kb.rollbackOk":"Revertido (contenido guardado)","kb.diffTitle":"Diff de líneas (rojo=eliminado, verde=añadido)","kb.newFaq":"Nueva FAQ","kb.faqCreated":"Creada e indexada","kb.stdQuestion":"Pregunta estándar","kb.similarCount":"Similares","kb.hits":"Aciertos","kb.toggleOk":"Alternado (índices actualizados)","kb.similarLabel":"Preguntas similares (una por línea)","kb.answersLabel":"Respuestas (una por línea)","kb.noFaqs":"Sin FAQs","kb.noFaqsDesc":"Cree manualmente o desde las brechas.","kb.gapsIntro":"Preguntas sin cobertura — borradores a revisar.","kb.diag.allKinds":"Todos los tipos","kb.diag.allStatuses":"Todos los estados","kb.diag.docFilter":"Filtrar por ID de documento","kb.diag.total":"{n} ejecuciones","kb.diag.noRuns":"Aún no hay ejecuciones","kb.diag.noRunsDesc":"Cada ejecución del pipeline de KB (ingesta/pregunta/búsqueda…) se registra aquí.","kb.traceToggle":"Traza","kb.tracePanel":"Traza del pipeline","kb.logId":"ID de registro","kb.diag.runs":"Ejecuciones","kb.diag.checkup":"Chequeo","kb.diag.health":"Salud","kb.diag.checkupIntro":"Escaneo de consistencia bajo demanda (caché 10 s).","kb.diag.healthIntro":"Salud de componentes; la sonda por defecto no cuesta.","kb.diag.embedProbe":"Sonda de embed","kb.diag.r1":"Eventos perdidos (pending sin job)","kb.diag.r2":"Docs atascados","kb.diag.r3":"Docs fallidos","kb.diag.r4":"Incompletos (embeddings faltantes)","kb.diag.r5":"Deriva de vectores","kb.diag.r6":"Jobs KB muertos","kb.diag.r7":"Ejecuciones atascadas","kb.diag.kind":"Tipo","kb.diag.status":"Estado","kb.diag.trigger":"Origen","kb.diag.attempt":"Intento","kb.diag.latency":"Latencia","kb.diag.error":"Error","kb.diag.created":"Hora","kb.diag.prev":"Anterior","kb.diag.next":"Siguiente","kb.diag.detail":"Detalle de ejecución","kb.diag.agent":"Agente","kb.diag.session":"Sesión","kb.diag.configSnapshot":"Instantánea de config","kb.diag.stages":"Etapas","kb.diag.noStages":"Sin etapas registradas","kb.noGaps":"Sin brechas","kb.noGapsDesc":"Todas las preguntas están cubiertas.","kb.freq":"Frecuencia","kb.draftFaq":"Borrador FAQ","kb.drafted":"Borrador creado (inactivo) — revisar","kb.docsPage":"Documentos","kb.title":"Título","kb.versions":"Versiones","kb.edit":"Editar","kb.operations":"Acciones","kb.state":"Estado","kb.allStatus":"Todos","kb.type":"Tipo","kb.embeddingModel":"Modelo de embedding","kb.embeddingDim":"Dimensión del vector","kb.modelHint":"Inmutable tras crear (vacío = valor global)","kb.modelCol":"Modelo","kb.modelRequired":"Obligatorio: rellenar o configurar los valores globales (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Modelo de rerank","kb.rerankModelOptional":"Opcional: valor global si está vacío (rerank desactivado sin configurar)","kb.rerankWindow":"Ventana de rerank","kb.rerankThreshold":"Umbral de rerank","kb.rerankInherit":"Heredar valor global","kb.rerankHint":"Ventana/umbral vacíos heredan los valores globales (RAISFAST_KB_RERANK_*); sin modelo configurado, S5 pasa directamente","kb.rerankInvalid":"La ventana debe ser un entero positivo; el umbral entre 0–1","kb.chatModel":"Modelo de generación","kb.chatModelOptional":"Opcional: valor global (RAISFAST_KB_CHAT_MODEL) → valor del tenant","kb.chatModelHint":"Modelo usado para la generación de respuestas S9; vaciar vuelve al valor global","kb.distillModel":"Modelo de destilación","kb.distillModelOptional":"Opcional: valor global (RAISFAST_KB_DISTILL_MODEL) → valor del tenant","kb.distillModelHint":"Modelo usado para la destilación wiki (extracción + borrador); vaciar vuelve al valor global","kb.imageRecognition":"Reconocimiento de imágenes","kb.imageModel":"Modelo de reconocimiento","kb.imageModelOptional":"Elige un modelo con visión; valor global si está vacío (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Idioma de descripción","kb.imageLanguagePlaceholder":"p. ej. zh / es; vacío sigue el idioma del documento","kb.imageInstructions":"Instrucciones personalizadas","kb.imageInstructionsPlaceholder":"Guía adicional para interpretar imágenes (opcional)","kb.imageHint":"Al activarlo, las imágenes reciben caption + OCR por VLM y pasan a ser buscables","kb.descPlaceholder":"Para qué sirve esta base (opcional)","jobs.attempts":"Intentos","jobs.runAfter":"Programado","jobs.updatedAt":"Actualizado","jobs.error":"Error","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Sin tareas","jobs.noJobsDesc":"La cola de tareas en segundo plano está vacía.","jobs.cleanup":"Limpiar","jobs.cleanupDesc":"Elimina tareas completadas/muertas de más de 7 días. No se puede deshacer.","jobs.cleanupDone":"Se limpiaron {n} tareas","jobs.confirmDelete":"¿Eliminar la tarea {type}? El registro se quitará de la cola.","jobs.retried":"Tarea reencolada","jobs.deleted":"Tarea eliminada","jobs.actionFailed":"La acción falló"},BC={"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.jobs":"Fila de tarefas","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.listView":"Vista em lista","common.cardView":"Vista em cartões","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.refresh":"Atualizar","common.all":"Todos","common.draft":"Rascunho","common.published":"Publicado","common.active":"Ativo","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","layout.ai":"IA","layout.aiAgents":"Agentes","layout.aiPlayground":"Depuração de chat","aiAgents.newAgent":"Novo agente","aiAgents.noAgents":"Ainda não há agentes","aiAgents.emptyHint":"Crie um agente, configure o modelo e o prompt de sistema e comece a conversar.","aiAgents.name":"Nome","aiAgents.namePlaceholder":"ex.: Assistente de conteúdo","aiAgents.nameImmutable":"O nome não pode ser alterado após a criação","aiAgents.provider":"Provedor","aiAgents.providerHint":"Endpoint compatível com OpenAI (DeepSeek/OpenRouter/Ollama) ou Anthropic","aiAgents.model":"Modelo","aiAgents.systemPrompt":"Prompt de sistema","aiAgents.systemPromptPlaceholder":"Você é um assistente prestativo…","aiAgents.tools":"Lista de ferramentas permitidas","aiAgents.allowAll":"Permitir todas","aiAgents.allowAllHint":"Este agente pode chamar todas as ferramentas de domínio registradas no servidor.","aiAgents.memoryToolsHint":"As ferramentas de memória (memory_store/recall/forget) estão sempre disponíveis e não precisam da lista.","aiAgents.customToolPlaceholder":"Adicionar ferramenta personalizada (ex.: MCP)…","aiAgents.addTool":"Adicionar","aiAgents.toolGroup.content":"Conteúdo","aiAgents.toolGroup.system":"Sistema","aiAgents.toolGroup.skills":"Habilidades","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Arquivos","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Conhecimento","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Outros","aiAgents.kbBinding":"Bases de conhecimento","aiAgents.kbEmpty":"Nenhuma base de conhecimento ativa.","aiAgents.kbBindingHint":"Selecione individualmente cada base de conhecimento a montar; sem nenhuma selecionada, a ferramenta knowledge_search não é montada. Com a ferramenta ativada, o agente pesquisa as bases selecionadas e cita fontes; os kb_ids em chamadas só podem restringir este escopo.","aiAgents.memory":"Memória de longo prazo","aiAgents.memoryHint":"Quando ativado, as memórias principais do agente são injetadas a cada turno (isoladas por usuário).","aiAgents.temperature":"Temperatura","aiAgents.temperaturePlaceholder":"Vazio = padrão do provedor","aiAgents.maxIterations":"Iterações máx.","aiAgents.maxIterationsHint":"Iterações máximas do motor por turno (rodadas de chamadas de ferramentas).","aiAgents.params":"Parâmetros extras (JSON)","aiAgents.paramsInvalid":"JSON inválido","aiAgents.paramsHint":"skill_bundles é gerenciado pelo controle Skills ativadas acima; valores escritos aqui são sobrescritos.","aiAgents.allTools":"Todas","aiAgents.noTools":"Nenhuma","aiAgents.updatedAt":"Atualizado","aiAgents.usage":"Uso","aiAgents.playground":"Depuração","aiAgents.created":"Agente criado","aiAgents.createFailed":"Falha ao criar o agente","aiAgents.updated":"Agente atualizado","aiAgents.updateFailed":"Falha ao atualizar o agente","aiAgents.deleted":"Agente excluído","aiAgents.deleteFailed":"Falha ao excluir o agente","aiAgents.confirmDelete":"Excluir {name}? Suas sessões, mensagens e memórias serão removidas permanentemente.","aiUsage.totalTurns":"Total de turnos","aiUsage.inputTokens":"Tokens de entrada","aiUsage.outputTokens":"Tokens de saída","aiUsage.cacheReadTokens":"Tokens de cache","aiUsage.toolCalls":"Chamadas de ferramentas","aiUsage.dailyTitle":"Uso diário","aiUsage.noData":"Sem uso neste período","aiPlayground.agent":"Agente","aiPlayground.selectAgent":"Selecione um agente","aiPlayground.sessions":"Sessões","aiPlayground.sessionDeleted":"Sessão excluída","aiPlayground.sessionDeleteFailed":"Falha ao excluir a sessão","aiPlayground.deleteSessionDesc":"A sessão e todas as suas mensagens serão excluídas. Não pode ser desfeito.","aiPlayground.newSession":"Nova sessão","aiPlayground.noSessions":"Sem sessões — enviar uma mensagem cria uma.","aiPlayground.noAgents":"Crie um agente primeiro","aiPlayground.emptySession":"Selecione ou crie uma sessão para começar","aiPlayground.thinking":"Processo de raciocínio","aiPlayground.busy":"Turno em andamento…","aiPlayground.inputPlaceholder":"Digite uma mensagem e pressione Enter…","aiPlayground.stop":"Parar","aiPlayground.sessionFailed":"Falha ao criar a sessão","aiPlayground.turnFailed":"O turno falhou","aiMemory.title":"Gerenciamento de memória","aiMemory.searchPlaceholder":"Buscar por chave ou conteúdo…","aiMemory.allCategories":"Todas as categorias","aiMemory.add":"Adicionar memória","aiMemory.addTitle":"Adicionar memória","aiMemory.editTitle":"Editar memória","aiMemory.dialogHint":"Deduplicação por chave: se (agente, usuário, chave) já existe, o conteúdo é atualizado.","aiMemory.key":"Chave","aiMemory.keyImmutable":"A chave é a identidade única da memória e não pode ser alterada após a criação","aiMemory.content":"Conteúdo","aiMemory.category":"Categoria","aiMemory.categoryHint":"core é injetada e gerenciada por orçamento; daily é apenas registro, nunca injetada","aiMemory.importance":"Importância","aiMemory.user":"Usuário","aiMemory.userOptional":"Usuário proprietário (opcional)","aiMemory.userPlaceholder":"Vazio = nível de plataforma","aiMemory.pinned":"Fixada (isenta da remoção por orçamento)","aiMemory.noMemories":"Sem memórias","aiMemory.emptyHint":"As memórias se acumulam nas conversas do agente, ou adicione uma manualmente.","aiMemory.saved":"Memória salva","aiMemory.saveFailed":"Falha ao salvar a memória","aiMemory.deleted":"Memória excluída","aiMemory.deleteFailed":"Falha ao excluir a memória","aiMemory.confirmDelete":"Excluir a memória {key}? Isso não pode ser desfeito.","layout.aiSkills":"Skills","layout.aiTools":"Ferramentas IA","aiTools.title":"Catálogo de ferramentas IA","aiTools.tabBuiltin":"Ferramentas integradas","aiTools.category":"Categoria","aiTools.nameDesc":"Nome / Descrição","aiTools.usedByCol":"Agentes que usam","aiTools.desc":"Ferramentas de domínio registradas pelo backend (nome/descrição/categoria definidos pelo backend), agrupadas por categoria.","aiTools.usedBy":"usado por {count} agentes","aiTools.empty":"Sem ferramentas","aiTools.emptyDesc":"Nenhuma ferramenta de domínio registrada pelo backend.","aiSkills.new":"Nova skill","aiSkills.newTitle":"Nova skill","aiSkills.editTitle":"Editar skill","aiSkills.dialogHint":"Skills são armazenadas como SKILL.md (frontmatter + corpo); agentes as referenciam pela lista de ativação.","aiSkills.name":"Nome","aiSkills.nameHint":"Nome do diretório: letras/dígitos/-/_, máx. 64 caracteres","aiSkills.layer":"Camada","aiSkills.layerHint":"tenant = apenas o tenant atual; platform = todos os tenants (platform vence em conflito de nome)","aiSkills.description":"Descrição","aiSkills.descriptionPlaceholder":"Quando usar esta skill (para descoberta pelo modelo)","aiSkills.instructions":"Instruções (Markdown)","aiSkills.tools":"Ferramentas compostas","aiSkills.toolsPlaceholder":"Digite um nome de ferramenta e pressione Enter, ex.: list_posts","aiSkills.disallowedTools":"Ferramentas excluídas","aiSkills.always":"Sempre inline","aiSkills.alwaysHint":"Inclui as instruções completas mesmo no modo Compact (padrão: metadados + read_skill sob demanda)","aiSkills.noSkills":"Ainda não há skills","aiSkills.emptyHint":"Uma skill é um diretório SKILL.md com instruções, injetado no system prompt do agente quando ativada.","aiSkills.saved":"Skill salva","aiSkills.saveFailed":"Falha ao salvar a skill","aiSkills.deleted":"Skill excluída","aiSkills.deleteFailed":"Falha ao excluir a skill","aiSkills.confirmDelete":"Excluir a skill {name}? Todo o diretório (incluindo scripts/ativos) é removido.","aiSkills.bundles":"Skills ativadas","aiSkills.bundlesAllHint":"Este agente ativa todas as skills no escopo.","aiSkills.bundlesEmpty":"Nenhuma skill disponível ainda — crie uma na página Skills.","aiSkills.bundlesHint":"Escolha as skills injetadas no system prompt do agente; os diretórios são re-escaneados a cada turno.","layout.aiSessions":"Conversas","aiSessions.title":"Título","aiSessions.agent":"Agente","aiSessions.user":"Usuário","aiSessions.messages":"Mensagens","aiSessions.lastActive":"Última atividade","aiSessions.allAgents":"Todos os agentes","aiSessions.allStatuses":"Todos os status","aiSessions.noSessions":"Sem conversas","aiSessions.emptyHint":"As conversas aparecem aqui quando os usuários iniciam turnos em sessões de agente.","aiSessions.untitled":"(sem título)","aiSessions.view":"Ver mensagens","aiSessions.noMessages":"Sem mensagens nesta sessão","aiSessions.deleted":"Conversa excluída","aiSessions.deleteFailed":"Falha ao excluir a conversa","aiSessions.confirmDelete":'Excluir a conversa "{title}"? Todas as mensagens são removidas (as memórias do agente são mantidas); não pode ser desfeito.',"layout.kb":"Base de conhecimento","layout.kbDocs":"Documentos","layout.kbChunks":"Fragmentos","layout.kbImages":"Imagens","layout.kbChunker":"Prévia de fragmentação","layout.kbPlayground":"Playground de perguntas","layout.kbWiki":"Páginas Wiki","layout.kbFaqs":"FAQ","layout.kbGaps":"Lacunas de conhecimento","layout.kbDiagnostics":"Diagnóstico","kb.new":"Nova base de conhecimento","kb.noKb":"Sem base ainda","kb.noKbDesc":"Crie uma para enviar documentos.","kb.deleteKb":"Excluir base","kb.confirmDeleteKb":'Excluir a base "{name}"? Todos os seus documentos, fragmentos, FAQs, páginas wiki, índices vetorial/texto completo e arquivos originais serão removidos permanentemente.',"kb.kbDeleted":"Base excluída (conteúdos e índices incl.)","kb.viewChunks":"Ver fragmentos","kb.reparseAction":"Reprocessar","kb.thinking":"Pensando…","kb.viewFullRef":"Ver texto completo","kb.distillWiki":"Gerar Wiki","kb.distillWikiHint":"Tarefa LLM em segundo plano: destila rascunhos de páginas wiki dos documentos selecionados; revise e publique na lista.","kb.noReadyDocs":"Nenhum documento pronto nesta base","kb.distillQueued":"Tarefa de geração de Wiki na fila ({count} documentos)","kb.distillSubmit":"Gerar Wiki ({count})","kb.editChunk":"Editar fragmento","kb.editChunkHint":"Ao salvar, o fragmento é re-vetorizado e re-indexado automaticamente.","kb.confirmDeleteChunk":"Excluir este fragmento? Seus índices vetorial/texto completo serão removidos; excluir um pai também exclui seus filhos.","kb.chunkUpdated":"Fragmento atualizado (re-indexado)","kb.chunkDeleted":"Fragmento excluído (índices incl.)","kb.updatedAt":"Atualizado","kb.jobHistory":"Histórico de processamento","kb.jobAttempts":"Tentativas","kb.noJobs":"Sem registros de processamento","kb.updated":"Base de conhecimento atualizada","kb.created":"Base criada","kb.vectorBackend":"Backend de vetores","kb.enabledOn":"Ativado","kb.enabledOff":"Desativado","kb.slug":"Slug","kb.kindDoc":"Base de documentos (wiki incluído)","kb.kindFaq":"Base de FAQ","kb.selectKb":"Selecione uma base","kb.selectKbDesc":"Selecione acima ou crie uma.","kb.selectPlaceholder":"Selecionar","kb.allKbs":"Todas as bases de conhecimento","kb.allDocs":"Todos os documentos","kb.progress":"Progresso","kb.partialParsed":"Análise parcial","kb.pagesCol":"Págs.","kb.imagesCol":"Imagens","kb.pageCol":"Pág.","kb.parseEngine":"Motor de análise","kb.parseEngineBuiltin":"Integrado (zero dependência)","kb.parseEngineDocreader":"Serviço docreader (imagens/digitalizações PDF de alta fidelidade)","kb.parseEngineHint":"Imagens PDF, digitalizações e fidelidade de layout exigem o serviço docreader; retorna ao integrado se a URL não estiver configurada","kb.noImages":"Sem imagens","kb.noImagesDesc":"Imagens extraídas de documentos aparecem aqui quando o reconhecimento é ativado.","kb.recognition":"Reconhecimento","kb.imagePreview":"Pré-visualizar","kb.imageCaption":"Legenda","kb.imageOcr":"Texto OCR","kb.imageStatus.pending":"Pendente","kb.imageStatus.done":"Reconhecida","kb.imageStatus.failed":"Falhou","kb.imageStatus.skipped":"Ignorada","kb.createdAtCol":"Criada","kb.imagePreviewUnavailable":"Pré-visualização indisponível","kb.imageThumb":"Mini","kb.imageContent":"Conteúdo","kb.zoomIn":"Ampliar","kb.zoomOut":"Reduzir","kb.zoomReset":"Redefinir","kb.reader":"Vista de leitura","kb.readerEmpty":"Nenhum bloco a exibir","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Página desconhecida","kb.upload":"Enviar documento","kb.uploadOk":"Enviado, análise na fila","kb.uploadFailed":"Falha no envio","kb.online":"Entrada online","kb.onlineOk":"Enviado, processando","kb.onlineFailed":"Falha no envio","kb.noDocs":"Sem documentos","kb.noDocsDesc":"Envie arquivos ou escreva Markdown.","kb.source":"Origem","kb.noChunks":"Sem fragmentos","kb.noChunksDesc":"Blocos pai/filho — clique para ver o conteúdo completo","kb.breadcrumb":"Fragments","kb.embedded":"Vetorizado","kb.notEmbedded":"Não vetorizado","kb.bytes":"bytes","kb.vectorCol":"Vetor","kb.backToDocs":"Voltar aos documentos","kb.chunkCount":"Fragmentos","kb.reparse":"Reprocessado","kb.reparseFailed":"Falha","kb.confirmDelete":'Excluir o documento "{title}"? Seus fragmentos, índices vetorial/texto completo e o arquivo original serão removidos permanentemente.',"kb.deleted":"Excluído (índices incl.)","kb.mdTitle":"Título","kb.mdContent":"Conteúdo (Markdown; # fragmenta)","kb.status.pending":"Pendente","kb.status.parsing":"Analisando","kb.status.chunking":"Fragmentando","kb.status.indexing":"Indexando","kb.status.embedding":"Embutindo","kb.status.ready":"Pronto","kb.status.failed":"Falhou","kb.status.stale":"Obsoleto","kb.sample":"Markdown de exemplo (≤64KB, prévia)","kb.runPreview":"Executar prévia","kb.running":"Fragmentando…","kb.parent":"Pai","kb.child":"Filho","kb.parents":"Pais","kb.children":"Filhos","kb.total":"Total","kb.chars":"caracteres","kb.askLabel":"Pergunta (turno único; vazio = tudo)","kb.stream":"Streaming (SSE)","kb.ask":"Perguntar","kb.stop":"Parar","kb.references":"Referências","kb.wikiNoPages":"Sem páginas","kb.wikiNoPagesDesc":"Os rascunhos aparecem aqui para revisão.","kb.publish":"Publicar (indexado)","kb.approveOk":"Publicado e indexado","kb.reject":"Rejeitar e arquivar","kb.rejected":"Arquivado","kb.saveOk":"Salvo (reindexado automático)","kb.noVersions":"Sem versões ainda.","kb.diffCurrent":"Diff com atual","kb.rollback":"Reverter","kb.rollbackOk":"Revertido (conteúdo salvo)","kb.diffTitle":"Diff de linhas (vermelho=removido, verde=adicionado)","kb.newFaq":"Nova FAQ","kb.faqCreated":"Criada e indexada","kb.stdQuestion":"Pergunta padrão","kb.similarCount":"Similares","kb.hits":"Acertos","kb.toggleOk":"Alternado (índices atualizados)","kb.similarLabel":"Perguntas similares (uma por linha)","kb.answersLabel":"Respostas (uma por linha)","kb.noFaqs":"Sem FAQs","kb.noFaqsDesc":"Crie manualmente ou das lacunas.","kb.gapsIntro":"Perguntas sem cobertura — rascunhos a revisar","kb.diag.allKinds":"Todos os tipos","kb.diag.allStatuses":"Todos os status","kb.diag.docFilter":"Filtrar por ID de documento","kb.diag.total":"{n} execuções","kb.diag.noRuns":"Ainda sem execuções","kb.diag.noRunsDesc":"Cada execução do pipeline do KB (ingestão/pergunta/busca…) é registrada aqui.","kb.traceToggle":"Rastro","kb.tracePanel":"Rastro do pipeline","kb.logId":"ID do log","kb.diag.runs":"Execuções","kb.diag.checkup":"Diagnóstico","kb.diag.health":"Saúde","kb.diag.checkupIntro":"Varredura de consistência sob demanda (cache 10 s).","kb.diag.healthIntro":"Saúde dos componentes; sonda padrão sem custo.","kb.diag.embedProbe":"Sonda de embed","kb.diag.r1":"Eventos perdidos (pending sem job)","kb.diag.r2":"Docs presos","kb.diag.r3":"Docs falhos","kb.diag.r4":"Incompletos (embeddings faltando)","kb.diag.r5":"Deriva vetorial","kb.diag.r6":"Jobs KB mortos","kb.diag.r7":"Execuções presas","kb.diag.kind":"Tipo","kb.diag.status":"Status","kb.diag.trigger":"Origem","kb.diag.attempt":"Tentativa","kb.diag.latency":"Latência","kb.diag.error":"Erro","kb.diag.created":"Hora","kb.diag.prev":"Anterior","kb.diag.next":"Próximo","kb.diag.detail":"Detalhe da execução","kb.diag.agent":"Agente","kb.diag.session":"Sessão","kb.diag.configSnapshot":"Snapshot de config","kb.diag.stages":"Etapas","kb.diag.noStages":"Nenhuma etapa registrada","kb.noGaps":"Sem lacunas","kb.noGapsDesc":"Todas as perguntas estão cobertas","kb.freq":"Frequência","kb.draftFaq":"Rascunho FAQ","kb.drafted":"Rascunho criado (inativo) — revisar","kb.docsPage":"Documentos","kb.title":"Título","kb.versions":"Versões","kb.edit":"Editar","kb.operations":"Ações","kb.state":"Estado","kb.allStatus":"Todos","kb.type":"Tipo","kb.embeddingModel":"Modelo de embedding","kb.embeddingDim":"Dimensão do vetor","kb.modelHint":"Imutável após criar (vazio = padrão global)","kb.modelCol":"Modelo","kb.modelRequired":"Obrigatório: preencher ou configurar os padrões globais (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Modelo de rerank","kb.rerankModelOptional":"Opcional: padrão global se vazio (rerank desativado sem configuração)","kb.rerankWindow":"Janela de rerank","kb.rerankThreshold":"Limiar de rerank","kb.rerankInherit":"Herdar padrão global","kb.rerankHint":"Janela/limiar vazios herdam os padrões globais (RAISFAST_KB_RERANK_*); sem modelo configurado, S5 passa direto","kb.rerankInvalid":"Janela deve ser um inteiro positivo; limiar entre 0–1","kb.chatModel":"Modelo de geração","kb.chatModelOptional":"Opcional: padrão global (RAISFAST_KB_CHAT_MODEL) → padrão do tenant","kb.chatModelHint":"Modelo usado na geração de respostas S9; limpar volta ao padrão global","kb.distillModel":"Modelo de destilação","kb.distillModelOptional":"Opcional: padrão global (RAISFAST_KB_DISTILL_MODEL) → padrão do tenant","kb.distillModelHint":"Modelo usado na destilação wiki (extração + rascunho); limpar volta ao padrão global","kb.imageRecognition":"Reconhecimento de imagens","kb.imageModel":"Modelo de reconhecimento","kb.imageModelOptional":"Escolha um modelo com visão; padrão global se vazio (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Idioma da descrição","kb.imageLanguagePlaceholder":"ex. zh / pt; vazio segue o idioma do documento","kb.imageInstructions":"Instruções personalizadas","kb.imageInstructionsPlaceholder":"Orientação extra para interpretar imagens (opcional)","kb.imageHint":"Ativo: imagens ganham caption + OCR por VLM e tornam-se pesquisáveis","kb.descPlaceholder":"Para que serve esta base (opcional)","jobs.attempts":"Tentativas","jobs.runAfter":"Agendado","jobs.updatedAt":"Atualizado","jobs.error":"Erro","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Sem tarefas","jobs.noJobsDesc":"A fila de tarefas em segundo plano está vazia.","jobs.cleanup":"Limpar","jobs.cleanupDesc":"Exclui tarefas concluídas/mortas com mais de 7 dias. Não pode ser desfeito.","jobs.cleanupDone":"{n} tarefas limpas","jobs.confirmDelete":"Excluir a tarefa {type}? O registro será removido da fila.","jobs.retried":"Tarefa reenfileirada","jobs.deleted":"Tarefa excluída","jobs.actionFailed":"A ação falhou"},VC={"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.jobs":"Job-Warteschlange","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.listView":"Listenansicht","common.cardView":"Kartenansicht","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.refresh":"Aktualisieren","common.all":"Alle","common.draft":"Entwurf","common.published":"Veröffentlicht","common.active":"Aktiv","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","layout.ai":"KI","layout.aiAgents":"Agenten","layout.aiPlayground":"Chat-Debugging","aiAgents.newAgent":"Neuer Agent","aiAgents.noAgents":"Noch keine Agenten","aiAgents.emptyHint":"Erstellen Sie einen Agenten, konfigurieren Sie Modell und System-Prompt und starten Sie den Chat.","aiAgents.name":"Name","aiAgents.namePlaceholder":"z. B. Inhalts-Assistent","aiAgents.nameImmutable":"Der Name kann nach dem Erstellen nicht geändert werden","aiAgents.provider":"Anbieter","aiAgents.providerHint":"OpenAI-kompatibler Endpunkt (DeepSeek/OpenRouter/Ollama) oder Anthropic","aiAgents.model":"Modell","aiAgents.systemPrompt":"System-Prompt","aiAgents.systemPromptPlaceholder":"Du bist ein hilfreicher Assistent…","aiAgents.tools":"Tool-Freigabeliste","aiAgents.allowAll":"Alle erlauben","aiAgents.allowAllHint":"Dieser Agent darf alle auf dem Server registrierten Domänen-Tools aufrufen.","aiAgents.memoryToolsHint":"Speicher-Tools (memory_store/recall/forget) sind immer verfügbar und brauchen keinen Listeneintrag.","aiAgents.customToolPlaceholder":"Benutzerdefinierten Tool-Namen hinzufügen (z. B. MCP)…","aiAgents.addTool":"Hinzufügen","aiAgents.toolGroup.content":"Inhalt","aiAgents.toolGroup.system":"System","aiAgents.toolGroup.skills":"Skills","aiAgents.toolGroup.script":"Skript","aiAgents.toolGroup.files":"Dateien","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Wissen","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Sonstige","aiAgents.kbBinding":"Wissensbanken","aiAgents.kbEmpty":"Keine aktiven Wissensbanken.","aiAgents.kbBindingHint":"Wissensbanken müssen einzeln zum Einbinden ausgewählt werden; ohne Auswahl wird das Werkzeug knowledge_search nicht eingebunden. Mit aktiviertem Werkzeug durchsucht der Agent die ausgewählten Wissensbanken und zitiert Quellen; kb_ids in Aufrufen können diesen Bereich nur einschränken.","aiAgents.memory":"Langzeitgedächtnis","aiAgents.memoryHint":"Wenn aktiviert, werden die Kern-Erinnerungen des Agenten jede Runde injiziert (pro Benutzer isoliert).","aiAgents.temperature":"Temperatur","aiAgents.temperaturePlaceholder":"Leer = Anbieter-Standard","aiAgents.maxIterations":"Max. Iterationen","aiAgents.maxIterationsHint":"Maximale Engine-Iterationen pro Runde (Tool-Aufruf-Runden).","aiAgents.params":"Zusätzliche Parameter (JSON)","aiAgents.paramsInvalid":"Ungültiges JSON","aiAgents.paramsHint":"skill_bundles wird über das Steuerfeld Aktivierte Skills verwaltet; hier geschriebene Werte werden überschrieben.","aiAgents.allTools":"Alle","aiAgents.noTools":"Keine","aiAgents.updatedAt":"Aktualisiert","aiAgents.usage":"Verbrauch","aiAgents.playground":"Debugging","aiAgents.created":"Agent erstellt","aiAgents.createFailed":"Agent konnte nicht erstellt werden","aiAgents.updated":"Agent aktualisiert","aiAgents.updateFailed":"Agent konnte nicht aktualisiert werden","aiAgents.deleted":"Agent gelöscht","aiAgents.deleteFailed":"Agent konnte nicht gelöscht werden","aiAgents.confirmDelete":"{name} löschen? Sitzungen, Nachrichten und Erinnerungen werden dauerhaft entfernt.","aiUsage.totalTurns":"Gesamtrunden","aiUsage.inputTokens":"Eingabe-Tokens","aiUsage.outputTokens":"Ausgabe-Tokens","aiUsage.cacheReadTokens":"Cache-Tokens","aiUsage.toolCalls":"Tool-Aufrufe","aiUsage.dailyTitle":"Täglicher Verbrauch","aiUsage.noData":"Kein Verbrauch in diesem Zeitraum","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"Agent auswählen","aiPlayground.sessions":"Sitzungen","aiPlayground.sessionDeleted":"Sitzung gelöscht","aiPlayground.sessionDeleteFailed":"Sitzung konnte nicht gelöscht werden","aiPlayground.deleteSessionDesc":"Die Sitzung und alle ihre Nachrichten werden gelöscht. Dies kann nicht rückgängig gemacht werden.","aiPlayground.newSession":"Neue Sitzung","aiPlayground.noSessions":"Keine Sitzungen — eine Nachricht erstellt eine.","aiPlayground.noAgents":"Erstellen Sie zuerst einen Agenten","aiPlayground.emptySession":"Sitzung auswählen oder erstellen, um zu starten","aiPlayground.thinking":"Denkprozess","aiPlayground.busy":"Runde läuft…","aiPlayground.inputPlaceholder":"Nachricht eingeben und Enter drücken…","aiPlayground.stop":"Stopp","aiPlayground.sessionFailed":"Sitzung konnte nicht erstellt werden","aiPlayground.turnFailed":"Runde fehlgeschlagen","aiMemory.title":"Gedächtnisverwaltung","aiMemory.searchPlaceholder":"Nach Schlüssel oder Inhalt suchen…","aiMemory.allCategories":"Alle Kategorien","aiMemory.add":"Erinnerung hinzufügen","aiMemory.addTitle":"Erinnerung hinzufügen","aiMemory.editTitle":"Erinnerung bearbeiten","aiMemory.dialogHint":"Deduplizierung nach Schlüssel: Existiert (Agent, Benutzer, Schlüssel) bereits, wird der Inhalt aktualisiert.","aiMemory.key":"Schlüssel","aiMemory.keyImmutable":"Der Schlüssel ist die eindeutige Identität der Erinnerung und kann nach dem Erstellen nicht geändert werden","aiMemory.content":"Inhalt","aiMemory.category":"Kategorie","aiMemory.categoryHint":"core wird injiziert und budgetverwaltet; daily ist nur Protokoll, wird nie injiziert","aiMemory.importance":"Wichtigkeit","aiMemory.user":"Benutzer","aiMemory.userOptional":"Besitzer-Benutzer (optional)","aiMemory.userPlaceholder":"Leer = Plattform-Ebene","aiMemory.pinned":"Angeheftet (von Budget-Räumung ausgenommen)","aiMemory.noMemories":"Keine Erinnerungen","aiMemory.emptyHint":"Erinnerungen sammeln sich in Agenten-Gesprächen, oder fügen Sie sie manuell hinzu.","aiMemory.saved":"Erinnerung gespeichert","aiMemory.saveFailed":"Erinnerung konnte nicht gespeichert werden","aiMemory.deleted":"Erinnerung gelöscht","aiMemory.deleteFailed":"Erinnerung konnte nicht gelöscht werden","aiMemory.confirmDelete":"Erinnerung {key} löschen? Dies kann nicht rückgängig gemacht werden.","layout.aiSkills":"Skills","layout.aiTools":"AI-Werkzeuge","aiTools.title":"AI-Werkzeugkatalog","aiTools.tabBuiltin":"Eingebaute Tools","aiTools.category":"Kategorie","aiTools.nameDesc":"Name / Beschreibung","aiTools.usedByCol":"Von Agenten genutzt","aiTools.desc":"Vom Backend registrierte Domänen-Werkzeuge (Name/Beschreibung/Kategorie vom Backend definiert), nach Kategorie gruppiert.","aiTools.usedBy":"von {count} Agents genutzt","aiTools.empty":"Keine Werkzeuge","aiTools.emptyDesc":"Vom Backend sind keine Domänen-Werkzeuge registriert.","aiSkills.new":"Neuer Skill","aiSkills.newTitle":"Neuer Skill","aiSkills.editTitle":"Skill bearbeiten","aiSkills.dialogHint":"Skills werden als SKILL.md (Frontmatter + Hauptteil) gespeichert; Agenten referenzieren sie über ihre Aktivierungsliste.","aiSkills.name":"Name","aiSkills.nameHint":"Verzeichnisname: Buchstaben/Ziffern/-/_, max. 64 Zeichen","aiSkills.layer":"Ebene","aiSkills.layerHint":"tenant = nur aktueller Mandant; platform = alle Mandanten (gewinnt bei Namenskonflikt)","aiSkills.description":"Beschreibung","aiSkills.descriptionPlaceholder":"Wann dieser Skill genutzt werden soll (für die Modell-Entdeckung)","aiSkills.instructions":"Anleitung (Markdown)","aiSkills.tools":"Kombinierte Tools","aiSkills.toolsPlaceholder":"Tool-Namen eingeben und Enter drücken, z. B. list_posts","aiSkills.disallowedTools":"Ausgeschlossene Tools","aiSkills.always":"Immer inline","aiSkills.alwaysHint":"Vollständige Anweisungen auch im Compact-Modus (Standard: Metadaten + read_skill bei Bedarf)","aiSkills.noSkills":"Noch keine Skills","aiSkills.emptyHint":"Ein Skill ist ein SKILL.md-Verzeichnis mit Anleitung, das bei Aktivierung in den System-Prompt injiziert wird.","aiSkills.saved":"Skill gespeichert","aiSkills.saveFailed":"Skill konnte nicht gespeichert werden","aiSkills.deleted":"Skill gelöscht","aiSkills.deleteFailed":"Skill konnte nicht gelöscht werden","aiSkills.confirmDelete":"Skill {name} löschen? Das gesamte Verzeichnis (inkl. Skripte/Assets) wird entfernt.","aiSkills.bundles":"Aktivierte Skills","aiSkills.bundlesAllHint":"Dieser Agent aktiviert alle Skills im Geltungsbereich.","aiSkills.bundlesEmpty":"Noch keine Skills verfügbar — erstellen Sie zuerst eine auf der Skills-Seite.","aiSkills.bundlesHint":"Wählen Sie die in den System-Prompt injizierten Skills; Verzeichnisse werden jede Runde neu gescannt.","layout.aiSessions":"Konversationen","aiSessions.title":"Titel","aiSessions.agent":"Agent","aiSessions.user":"Benutzer","aiSessions.messages":"Nachrichten","aiSessions.lastActive":"Letzte Aktivität","aiSessions.allAgents":"Alle Agenten","aiSessions.allStatuses":"Alle Status","aiSessions.noSessions":"Keine Konversationen","aiSessions.emptyHint":"Konversationen erscheinen hier, sobald Benutzer Runden in Agenten-Sitzungen starten.","aiSessions.untitled":"(unbenannt)","aiSessions.view":"Nachrichten ansehen","aiSessions.noMessages":"Keine Nachrichten in dieser Sitzung","aiSessions.deleted":"Konversation gelöscht","aiSessions.deleteFailed":"Konversation konnte nicht gelöscht werden","aiSessions.confirmDelete":'Konversation "{title}" löschen? Alle Nachrichten werden entfernt (Agenten-Gedächtnis bleibt); dies kann nicht rückgängig gemacht werden.',"layout.kb":"Wissensbasis","layout.kbDocs":"Dokumente","layout.kbChunks":"Chunks","layout.kbImages":"Bilder","layout.kbChunker":"Chunking-Vorschau","layout.kbPlayground":"Fragen-Antwort-Test","layout.kbWiki":"Wiki-Seiten","layout.kbFaqs":"FAQs","layout.kbGaps":"Wissenslücken","layout.kbDiagnostics":"Diagnose","kb.new":"Neue Wissensbasis","kb.noKb":"Noch keine Wissensbasis","kb.noKbDesc":"Erstellen Sie eine, um Dokumente hochzuladen.","kb.deleteKb":"Wissensbasis löschen","kb.confirmDeleteKb":"Wissensbasis „{name}“ löschen? Alle Dokumente, Chunks, FAQs, Wiki-Seiten, Vektor-/Volltextindizes und Originaldateien werden endgültig gelöscht.","kb.kbDeleted":"Wissensbasis gelöscht (inkl. Inhalte und Indizes)","kb.viewChunks":"Chunks anzeigen","kb.reparseAction":"Erneut verarbeiten","kb.thinking":"Denkt nach…","kb.viewFullRef":"Volltext anzeigen","kb.distillWiki":"Wiki generieren","kb.distillWikiHint":"Hintergrund-LLM-Aufgabe: destilliert Wiki-Seiten-Entwürfe aus den gewählten Dokumenten; danach in der Liste prüfen und veröffentlichen.","kb.noReadyDocs":"Keine bereiten Dokumente in dieser Wissensbasis","kb.distillQueued":"Wiki-Generierungsaufgabe in Warteschlange gestellt ({count} Dokumente)","kb.distillSubmit":"Wiki generieren ({count})","kb.editChunk":"Chunk bearbeiten","kb.editChunkHint":"Beim Speichern wird der Chunk automatisch neu eingebettet und neu indiziert.","kb.confirmDeleteChunk":"Diesen Chunk löschen? Seine Vektor-/Volltextindizes werden entfernt; das Löschen eines Parent-Chunks löscht auch seine Child-Chunks.","kb.chunkUpdated":"Chunk aktualisiert (neu indiziert)","kb.chunkDeleted":"Chunk gelöscht (inkl. Index)","kb.updatedAt":"Aktualisiert","kb.jobHistory":"Verarbeitungsprotokoll","kb.jobAttempts":"Versuche","kb.noJobs":"Keine Verarbeitungsprotokolle","kb.updated":"Wissensbasis aktualisiert","kb.created":"Wissensbasis erstellt","kb.vectorBackend":"Vektor-Backend","kb.enabledOn":"Aktiviert","kb.enabledOff":"Deaktiviert","kb.slug":"Slug","kb.kindDoc":"Dokument-Basis (mit Wiki)","kb.kindFaq":"FAQ-Basis","kb.selectKb":"Wissensbasis wählen","kb.selectKbDesc":"Oben wählen oder auf der Übersicht anlegen.","kb.selectPlaceholder":"Wissensbasis wählen","kb.allKbs":"Alle Wissensbasen","kb.allDocs":"Alle Dokumente","kb.progress":"Fortschritt","kb.partialParsed":"Teilweise geparst","kb.pagesCol":"Seiten","kb.imagesCol":"Bilder","kb.pageCol":"S.","kb.parseEngine":"Parse-Engine","kb.parseEngineBuiltin":"Eingebaut (Null-Abhängigkeit)","kb.parseEngineDocreader":"docreader-Dienst (hochwertige PDF-Bilder/Scans)","kb.parseEngineHint":"PDF-Bilder, Scans und Layouttreue brauchen den docreader-Dienst; ohne URL automatischer Fallback auf eingebaut","kb.noImages":"Keine Bilder","kb.noImagesDesc":"Aus Dokumenten extrahierte Bilder erscheinen hier, sobald Erkennung aktiviert ist.","kb.recognition":"Erkennung","kb.imagePreview":"Vorschau","kb.imageCaption":"Beschreibung","kb.imageOcr":"OCR-Text","kb.imageStatus.pending":"Ausstehend","kb.imageStatus.done":"Erkannt","kb.imageStatus.failed":"Fehlgeschlagen","kb.imageStatus.skipped":"Übersprungen","kb.createdAtCol":"Erstellt","kb.imagePreviewUnavailable":"Vorschau nicht verfügbar","kb.imageThumb":"Mini","kb.imageContent":"Inhalt","kb.zoomIn":"Vergrößern","kb.zoomOut":"Verkleinern","kb.zoomReset":"Zurücksetzen","kb.reader":"Leseansicht","kb.readerEmpty":"Keine geparsten Blöcke","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Seite unbekannt","kb.upload":"Dokument hochladen","kb.uploadOk":"Hochgeladen, Analyse wartet","kb.uploadFailed":"Upload fehlgeschlagen","kb.online":"Online erfassen","kb.onlineOk":"Gespeichert, verarbeitet","kb.onlineFailed":"Speichern fehlgeschlagen","kb.noDocs":"Keine Dokumente","kb.noDocsDesc":"Dateien hochladen oder Markdown erfassen.","kb.source":"Quelle","kb.noChunks":"Keine Chunks","kb.noChunksDesc":"Über-/Unter-Chunks anzeigen, klicken für Volltext","kb.breadcrumb":"Chunks","kb.embedded":"Vektorisiert","kb.notEmbedded":"Nicht vektorisiert","kb.bytes":"Bytes","kb.vectorCol":"Vektor","kb.backToDocs":"Zurück zu den Dokumenten","kb.chunkCount":"Chunks","kb.reparse":"Erneut verarbeitet","kb.reparseFailed":"Fehlgeschlagen","kb.confirmDelete":"Dokument „{title}“ löschen? Chunks, Vektor-/Volltextindex und die Originaldatei werden endgültig gelöscht.","kb.deleted":"Gelöscht (inkl. Index)","kb.mdTitle":"Titel","kb.mdContent":"Inhalt (Markdown; # gliedert)","kb.status.pending":"Ausstehend","kb.status.parsing":"Analysiert","kb.status.chunking":"Zerlegt","kb.status.indexing":"Indizierung","kb.status.embedding":"Einbettung","kb.status.ready":"Bereit","kb.status.failed":"Fehlgeschlagen","kb.status.stale":"Veraltet","kb.sample":"Beispiel-Markdown (≤64 KB, nur Vorschau)","kb.runPreview":"Vorschau starten","kb.running":"Zerlege…","kb.parent":"Parent","kb.child":"Child","kb.parents":"Parents","kb.children":"Children","kb.total":"Gesamt","kb.chars":"Zeichen","kb.askLabel":"Frage (einmalig; leer = alle)","kb.stream":"Streaming (SSE)","kb.ask":"Fragen","kb.stop":"Stopp","kb.references":"Referenzen","kb.wikiNoPages":"Keine Wiki-Seiten","kb.wikiNoPagesDesc":"Destillierte Entwürfe erscheinen hier zur Prüfung.","kb.publish":"Veröffentlichen (indiziert)","kb.approveOk":"Veröffentlicht und indiziert","kb.reject":"Ablehnen und archivieren","kb.rejected":"Archiviert","kb.saveOk":"Gespeichert (indiziert automatisch)","kb.noVersions":"Noch keine Versionen.","kb.diffCurrent":"Mit aktuell vergleichen","kb.rollback":"Zurücksetzen","kb.rollbackOk":"Zurückgesetzt (vorheriger Stand gesichert)","kb.diffTitle":"Zeilenvergleich (rot/gelöscht, grün/ neu)","kb.newFaq":"Neue FAQ","kb.faqCreated":"Erstellt und indiziert","kb.stdQuestion":"Standardfrage","kb.similarCount":"Ähnliche","kb.hits":"Treffer","kb.toggleOk":"Umgeschaltet (Index aktualisiert)","kb.similarLabel":"Ähnliche Fragen (eine pro Zeile)","kb.answersLabel":"Antworten (eine pro Zeile)","kb.noFaqs":"Keine FAQs","kb.noFaqsDesc":"Manuell oder aus Wissenslücken.","kb.gapsIntro":"Aggregierte unbeantwortete Fragen — Entwürfe werden geprüft.","kb.diag.allKinds":"Alle Arten","kb.diag.allStatuses":"Alle Status","kb.diag.docFilter":"Nach Dokument-ID filtern","kb.diag.total":"{n} Läufe","kb.diag.noRuns":"Noch keine Läufe","kb.diag.noRunsDesc":"Jede KB-Pipeline-Ausführung (Ingest/Fragen/Suche…) wird hier aufgezeichnet.","kb.traceToggle":"Trace","kb.tracePanel":"Pipeline-Trace","kb.logId":"Log-ID","kb.diag.runs":"Läufe","kb.diag.checkup":"Check-up","kb.diag.health":"Zustand","kb.diag.checkupIntro":"Bedarfs-Consistency-Scan (10s Cache).","kb.diag.healthIntro":"Komponenten-Zustand; Standard-Sonde kostet nichts.","kb.diag.embedProbe":"Embed-Smoke-Test","kb.diag.r1":"Verlorene Events (pending ohne Job)","kb.diag.r2":"Feststeckende Dokumente","kb.diag.r3":"Fehlgeschlagene Docs","kb.diag.r4":"Unvollständig (Embeddings fehlen)","kb.diag.r5":"Vektor-Abweichung","kb.diag.r6":"Tote KB-Jobs","kb.diag.r7":"Feststeckende Läufe","kb.diag.kind":"Art","kb.diag.status":"Status","kb.diag.trigger":"Quelle","kb.diag.attempt":"Versuch","kb.diag.latency":"Latenz","kb.diag.error":"Fehler","kb.diag.created":"Zeit","kb.diag.prev":"Zurück","kb.diag.next":"Weiter","kb.diag.detail":"Laufdetails","kb.diag.agent":"Agent","kb.diag.session":"Sitzung","kb.diag.configSnapshot":"Konfigurations-Snapshot","kb.diag.stages":"Phasen","kb.diag.noStages":"Keine Phasen aufgezeichnet","kb.noGaps":"Keine Wissenslücken","kb.noGapsDesc":"Alle Fragen sind abgedeckt.","kb.freq":"Anzahl","kb.draftFaq":"FAQ-Entwurf","kb.drafted":"Entwurf erstellt (inaktiv) — in FAQs prüfen","kb.docsPage":"Dokumente","kb.title":"Titel","kb.versions":"Versionen","kb.edit":"Bearbeiten","kb.operations":"Aktionen","kb.state":"Status","kb.allStatus":"Alle","kb.type":"Typ","kb.embeddingModel":"Embedding-Modell","kb.embeddingDim":"Vektor-Dimension","kb.modelHint":"Nach Erstellung unveränderlich (leer = globaler Standard)","kb.modelCol":"Modell","kb.modelRequired":"Pflicht: ausfüllen oder globale Defaults setzen (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Rerank-Modell","kb.rerankModelOptional":"Optional: globaler Default wenn leer (Rerank aus, wenn nicht konfiguriert)","kb.rerankWindow":"Rerank-Fenster","kb.rerankThreshold":"Rerank-Schwellenwert","kb.rerankInherit":"Globalen Default erben","kb.rerankHint":"Leere Fenster/Schwelle erben die globalen Defaults (RAISFAST_KB_RERANK_*); ohne konfiguriertes Modell läuft S5 im Passthrough","kb.rerankInvalid":"Fenster muss eine positive Ganzzahl sein; Schwelle zwischen 0–1","kb.chatModel":"Generierungsmodell","kb.chatModelOptional":"Optional: globaler Default (RAISFAST_KB_CHAT_MODEL) → Mandanten-Default","kb.chatModelHint":"Modell der S9-Antwortgenerierung; leeren = globaler Default","kb.distillModel":"Destillationsmodell","kb.distillModelOptional":"Optional: globaler Default (RAISFAST_KB_DISTILL_MODEL) → Mandanten-Default","kb.distillModelHint":"Modell der Wiki-Destillation (Extraktion + Entwurf); leeren = globaler Default","kb.imageRecognition":"Bilderkennung","kb.imageModel":"Erkennungsmodell","kb.imageModelOptional":"Vision-fähiges Modell wählen; sonst globaler Default (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Beschreibungssprache","kb.imageLanguagePlaceholder":"z. B. zh / de; leer = Dokumentsprache","kb.imageInstructions":"Eigene Anweisungen","kb.imageInstructionsPlaceholder":"Zusätzliche Hinweise zur Bildauswertung (optional)","kb.imageHint":"Aktiviert VLM-Caption + OCR für Dokumentbilder; Ergebnisse sind durchsuchbar","kb.descPlaceholder":"Zweck dieser Wissensbasis (optional)","jobs.attempts":"Versuche","jobs.runAfter":"Geplant","jobs.updatedAt":"Aktualisiert","jobs.error":"Fehler","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Keine Jobs","jobs.noJobsDesc":"Die Hintergrund-Job-Warteschlange ist leer.","jobs.cleanup":"Aufräumen","jobs.cleanupDesc":"Löscht abgeschlossene/fehlerhafte (completed/dead) Jobs älter als 7 Tage. Kann nicht rückgängig gemacht werden.","jobs.cleanupDone":"{n} Jobs bereinigt","jobs.confirmDelete":"Job {type} löschen? Der Eintrag wird aus der Warteschlange entfernt.","jobs.retried":"Job erneut eingereiht","jobs.deleted":"Job gelöscht","jobs.actionFailed":"Aktion fehlgeschlagen"},HC={"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.jobs":"File de tâches","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.listView":"Vue liste","common.cardView":"Vue cartes","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.refresh":"Rafraîchir","common.all":"Tout","common.draft":"Brouillon","common.published":"Publié","common.active":"Actif","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","layout.ai":"IA","layout.aiAgents":"Agents","layout.aiPlayground":"Débogage chat","aiAgents.newAgent":"Nouvel agent","aiAgents.noAgents":"Aucun agent pour le moment","aiAgents.emptyHint":"Créez un agent, configurez son modèle et son prompt système, puis démarrez la conversation.","aiAgents.name":"Nom","aiAgents.namePlaceholder":"ex. Assistant de contenu","aiAgents.nameImmutable":"Le nom ne peut pas être modifié après création","aiAgents.provider":"Fournisseur","aiAgents.providerHint":"Endpoint compatible OpenAI (DeepSeek/OpenRouter/Ollama) ou Anthropic","aiAgents.model":"Modèle","aiAgents.systemPrompt":"Prompt système","aiAgents.systemPromptPlaceholder":"Vous êtes un assistant utile…","aiAgents.tools":"Liste d'outils autorisés","aiAgents.allowAll":"Tout autoriser","aiAgents.allowAllHint":"Cet agent peut appeler tous les outils de domaine enregistrés sur le serveur.","aiAgents.memoryToolsHint":"Les outils mémoire (memory_store/recall/forget) sont toujours disponibles et n'ont pas besoin d'être listés.","aiAgents.customToolPlaceholder":"Ajouter un outil personnalisé (ex. MCP)…","aiAgents.addTool":"Ajouter","aiAgents.toolGroup.content":"Contenu","aiAgents.toolGroup.system":"Système","aiAgents.toolGroup.skills":"Compétences","aiAgents.toolGroup.script":"Script","aiAgents.toolGroup.files":"Fichiers","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"Connaissance","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"Autres","aiAgents.kbBinding":"Bases de connaissances","aiAgents.kbEmpty":"Aucune base de connaissances active.","aiAgents.kbBindingHint":"Sélectionnez individuellement chaque base de connaissances à monter ; sans sélection, l'outil knowledge_search n'est pas monté. Avec l'outil activé, l'agent interroge les bases sélectionnées et cite ses sources ; les kb_ids passés en appel ne peuvent que restreindre cette portée.","aiAgents.memory":"Mémoire à long terme","aiAgents.memoryHint":"Si activé, les souvenirs principaux de l'agent sont injectés à chaque tour (isolés par utilisateur).","aiAgents.temperature":"Température","aiAgents.temperaturePlaceholder":"Vide = valeur par défaut du fournisseur","aiAgents.maxIterations":"Itérations max.","aiAgents.maxIterationsHint":"Itérations moteur maximales par tour (cycles d'appels d'outils).","aiAgents.params":"Paramètres supplémentaires (JSON)","aiAgents.paramsInvalid":"JSON invalide","aiAgents.paramsHint":"skill_bundles est géré par le contrôle Skills activés ci-dessus ; toute valeur saisie ici est écrasée.","aiAgents.allTools":"Tous","aiAgents.noTools":"Aucun","aiAgents.updatedAt":"Mis à jour","aiAgents.usage":"Usage","aiAgents.playground":"Débogage","aiAgents.created":"Agent créé","aiAgents.createFailed":"Échec de la création de l'agent","aiAgents.updated":"Agent mis à jour","aiAgents.updateFailed":"Échec de la mise à jour de l'agent","aiAgents.deleted":"Agent supprimé","aiAgents.deleteFailed":"Échec de la suppression de l'agent","aiAgents.confirmDelete":"Supprimer {name} ? Ses sessions, messages et souvenirs seront définitivement supprimés.","aiUsage.totalTurns":"Tours totaux","aiUsage.inputTokens":"Tokens d'entrée","aiUsage.outputTokens":"Tokens de sortie","aiUsage.cacheReadTokens":"Tokens en cache","aiUsage.toolCalls":"Appels d'outils","aiUsage.dailyTitle":"Usage quotidien","aiUsage.noData":"Aucun usage sur cette période","aiPlayground.agent":"Agent","aiPlayground.selectAgent":"Sélectionner un agent","aiPlayground.sessions":"Sessions","aiPlayground.sessionDeleted":"Session supprimée","aiPlayground.sessionDeleteFailed":"Échec de la suppression de la session","aiPlayground.deleteSessionDesc":"La session et tous ses messages seront supprimés. Action irréversible.","aiPlayground.newSession":"Nouvelle session","aiPlayground.noSessions":"Aucune session — l'envoi d'un message en crée une.","aiPlayground.noAgents":"Créez d'abord un agent","aiPlayground.emptySession":"Sélectionnez ou créez une session pour commencer","aiPlayground.thinking":"Processus de réflexion","aiPlayground.busy":"Tour en cours…","aiPlayground.inputPlaceholder":"Saisissez un message et appuyez sur Entrée…","aiPlayground.stop":"Arrêter","aiPlayground.sessionFailed":"Échec de la création de la session","aiPlayground.turnFailed":"Le tour a échoué","aiMemory.title":"Gestion de la mémoire","aiMemory.searchPlaceholder":"Rechercher par clé ou contenu…","aiMemory.allCategories":"Toutes les catégories","aiMemory.add":"Ajouter un souvenir","aiMemory.addTitle":"Ajouter un souvenir","aiMemory.editTitle":"Modifier le souvenir","aiMemory.dialogHint":"Déduplication par clé : si (agent, utilisateur, clé) existe déjà, le contenu est mis à jour.","aiMemory.key":"Clé","aiMemory.keyImmutable":"La clé est l'identité unique du souvenir et ne peut pas changer après création","aiMemory.content":"Contenu","aiMemory.category":"Catégorie","aiMemory.categoryHint":"core est injecté et géré par budget ; daily est uniquement un journal, jamais injecté","aiMemory.importance":"Importance","aiMemory.user":"Utilisateur","aiMemory.userOptional":"Utilisateur propriétaire (facultatif)","aiMemory.userPlaceholder":"Vide = niveau plateforme","aiMemory.pinned":"Épinglé (exempté de l'éviction par budget)","aiMemory.noMemories":"Aucun souvenir","aiMemory.emptyHint":"Les souvenirs s'accumulent dans les conversations de l'agent, ou ajoutez-en un manuellement.","aiMemory.saved":"Souvenir enregistré","aiMemory.saveFailed":"Échec de l'enregistrement du souvenir","aiMemory.deleted":"Souvenir supprimé","aiMemory.deleteFailed":"Échec de la suppression du souvenir","aiMemory.confirmDelete":"Supprimer le souvenir {key} ? Cette action est irréversible.","layout.aiSkills":"Skills","layout.aiTools":"Outils IA","aiTools.title":"Catalogue d'outils IA","aiTools.tabBuiltin":"Outils intégrés","aiTools.category":"Catégorie","aiTools.nameDesc":"Nom / Description","aiTools.usedByCol":"Agents utilisateurs","aiTools.desc":"Outils de domaine enregistrés par le backend (nom/description/catégorie définis par le backend), groupés par catégorie.","aiTools.usedBy":"utilisé par {count} agents","aiTools.empty":"Aucun outil","aiTools.emptyDesc":"Aucun outil de domaine enregistré par le backend.","aiSkills.new":"Nouveau skill","aiSkills.newTitle":"Nouveau skill","aiSkills.editTitle":"Modifier le skill","aiSkills.dialogHint":"Les skills sont stockés en SKILL.md (frontmatter + corps) ; les agents les référencent via leur liste d'activation.","aiSkills.name":"Nom","aiSkills.nameHint":"Nom du répertoire : lettres/chiffres/-/_, max 64 caractères","aiSkills.layer":"Niveau","aiSkills.layerHint":"tenant = tenant actuel uniquement ; platform = tous les tenants (platform gagne en cas de conflit de nom)","aiSkills.description":"Description","aiSkills.descriptionPlaceholder":"Quand utiliser ce skill (pour la découverte par le modèle)","aiSkills.instructions":"Instructions (Markdown)","aiSkills.tools":"Outils composés","aiSkills.toolsPlaceholder":"Saisissez un nom d'outil et Entrée, ex. list_posts","aiSkills.disallowedTools":"Outils exclus","aiSkills.always":"Toujours inline","aiSkills.alwaysHint":"Instructions complètes même en mode Compact (défaut : métadonnées + read_skill à la demande)","aiSkills.noSkills":"Aucun skill","aiSkills.emptyHint":"Un skill est un répertoire SKILL.md avec instructions, injecté dans le prompt système de l'agent une fois activé.","aiSkills.saved":"Skill enregistré","aiSkills.saveFailed":"Échec de l'enregistrement du skill","aiSkills.deleted":"Skill supprimé","aiSkills.deleteFailed":"Échec de la suppression du skill","aiSkills.confirmDelete":"Supprimer le skill {name} ? Tout le répertoire (scripts/ressources inclus) est supprimé.","aiSkills.bundles":"Skills activés","aiSkills.bundlesAllHint":"Cet agent active tous les skills à portée.","aiSkills.bundlesEmpty":"Aucun skill disponible — créez-en un sur la page Skills.","aiSkills.bundlesHint":"Choisissez les skills injectés dans le prompt système de l'agent ; les répertoires sont rescannés à chaque tour.","layout.aiSessions":"Conversations","aiSessions.title":"Titre","aiSessions.agent":"Agent","aiSessions.user":"Utilisateur","aiSessions.messages":"Messages","aiSessions.lastActive":"Dernière activité","aiSessions.allAgents":"Tous les agents","aiSessions.allStatuses":"Tous les statuts","aiSessions.noSessions":"Aucune conversation","aiSessions.emptyHint":"Les conversations apparaissent ici dès que des utilisateurs lancent des tours dans les sessions d'agent.","aiSessions.untitled":"(sans titre)","aiSessions.view":"Voir les messages","aiSessions.noMessages":"Aucun message dans cette session","aiSessions.deleted":"Conversation supprimée","aiSessions.deleteFailed":"Échec de la suppression de la conversation","aiSessions.confirmDelete":`Supprimer la conversation "{title}" ? Tous ses messages sont supprimés (les souvenirs de l'agent sont conservés) ; action irréversible.`,"layout.kb":"Base de connaissances","layout.kbDocs":"Documents","layout.kbChunks":"Fragments","layout.kbImages":"Images","layout.kbChunker":"Aperçu du découpage","layout.kbPlayground":"Bac à sable QA","layout.kbWiki":"Pages Wiki","layout.kbFaqs":"FAQ","layout.kbGaps":"Lacunes","layout.kbDiagnostics":"Diagnostics","kb.new":"Nouvelle base","kb.noKb":"Aucune base","kb.noKbDesc":"Créez-en une pour importer des documents.","kb.deleteKb":"Supprimer la base","kb.confirmDeleteKb":"Supprimer la base «{name}» ? Tous ses documents, fragments, FAQ, pages wiki, index vectoriel/plein texte et fichiers originaux seront définitivement supprimés.","kb.kbDeleted":"Base supprimée (contenus et index inclus)","kb.viewChunks":"Voir les fragments","kb.reparseAction":"Retraiter","kb.thinking":"Réflexion…","kb.viewFullRef":"Voir le texte complet","kb.distillWiki":"Générer le Wiki","kb.distillWikiHint":"Tâche LLM en arrière-plan : distille des brouillons de pages wiki depuis les documents sélectionnés ; révisez puis publiez-les dans la liste.","kb.noReadyDocs":"Aucun document prêt dans cette base","kb.distillQueued":"Tâche de génération Wiki mise en file d'attente ({count} documents)","kb.distillSubmit":"Générer le Wiki ({count})","kb.editChunk":"Modifier le fragment","kb.editChunkHint":"L'enregistrement ré-encastre et ré-indexe automatiquement le fragment.","kb.confirmDeleteChunk":"Supprimer ce fragment ? Ses index vectoriel/plein texte seront retirés ; supprimer un parent supprime aussi ses enfants.","kb.chunkUpdated":"Fragment mis à jour (ré-indexé)","kb.chunkDeleted":"Fragment supprimé (index inclus)","kb.updatedAt":"Mis à jour","kb.jobHistory":"Historique de traitement","kb.jobAttempts":"Tentatives","kb.noJobs":"Aucun enregistrement de traitement","kb.updated":"Base de connaissances mise à jour","kb.created":"Base créée","kb.vectorBackend":"Backend vectoriel","kb.enabledOn":"Activé","kb.enabledOff":"Désactivé","kb.slug":"Slug","kb.kindDoc":"Base documents (wiki inclus)","kb.kindFaq":"Base FAQ","kb.selectKb":"Sélectionner une base","kb.selectKbDesc":"Choisissez ci-dessus ou créez-la.","kb.selectPlaceholder":"Sélectionner","kb.allKbs":"Toutes les bases de connaissances","kb.allDocs":"Tous les documents","kb.progress":"Progression","kb.partialParsed":"Analyse partielle","kb.pagesCol":"Pages","kb.imagesCol":"Images","kb.pageCol":"p.","kb.parseEngine":"Moteur d'analyse","kb.parseEngineBuiltin":"Intégré (zéro dépendance)","kb.parseEngineDocreader":"Service docreader (images/scan PDF haute fidélité)","kb.parseEngineHint":"Images PDF, scans et fidélité de mise en page nécessitent le service docreader ; retombe sur l'intégré si l'URL n'est pas configurée","kb.noImages":"Aucune image","kb.noImagesDesc":"Les images extraites des documents apparaissent ici une fois la reconnaissance activée.","kb.recognition":"Reconnaissance","kb.imagePreview":"Aperçu","kb.imageCaption":"Légende","kb.imageOcr":"Texte OCR","kb.imageStatus.pending":"En attente","kb.imageStatus.done":"Reconnue","kb.imageStatus.failed":"Échec","kb.imageStatus.skipped":"Ignorée","kb.createdAtCol":"Créée","kb.imagePreviewUnavailable":"Aperçu indisponible","kb.imageThumb":"Vignette","kb.imageContent":"Contenu","kb.zoomIn":"Agrandir","kb.zoomOut":"Réduire","kb.zoomReset":"Réinitialiser","kb.reader":"Vue lecture","kb.readerEmpty":"Aucun bloc à afficher","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"Page inconnue","kb.upload":"Importer un document","kb.uploadOk":"Importé, analyse en file","kb.uploadFailed":"Échec de l'import","kb.online":"Saisie en ligne","kb.onlineOk":"Soumis, en traitement","kb.onlineFailed":"Échec de l'envoi","kb.noDocs":"Aucun document","kb.noDocsDesc":"Importer ou rédiger en Markdown.","kb.source":"Source","kb.noChunks":"Aucun fragment","kb.noChunksDesc":"Blocs parent/enfant — cliquez pour voir le contenu complet","kb.breadcrumb":"Fragments","kb.embedded":"Vectorisé","kb.notEmbedded":"Non vectorisé","kb.bytes":"octets","kb.vectorCol":"Vecteur","kb.backToDocs":"Retour aux documents","kb.chunkCount":"Chunks","kb.reparse":"Retraité","kb.reparseFailed":"Échec","kb.confirmDelete":"Supprimer le document «{title}» ? Ses fragments, index vectoriel/plein texte et le fichier original seront définitivement supprimés.","kb.deleted":"Supprimé (index inclus)","kb.mdTitle":"Titre","kb.mdContent":"Contenu (Markdown; # segmente)","kb.status.pending":"En attente","kb.status.parsing":"Analyse","kb.status.chunking":"Découpage","kb.status.indexing":"Indexation","kb.status.embedding":"Embedding","kb.status.ready":"Prêt","kb.status.failed":"Échoué","kb.status.stale":"Obsolète","kb.sample":"Exemple Markdown (≤64 Ko, aperçu)","kb.runPreview":"Lancer l'aperçu","kb.running":"Découpage…","kb.parent":"Parent","kb.child":"Enfant","kb.parents":"Parents","kb.children":"Enfants","kb.total":"Total","kb.chars":"car.","kb.askLabel":"Question (tour unique; vide = tout)","kb.stream":"Streaming (SSE)","kb.ask":"Demander","kb.stop":"Arrêter","kb.references":"Références","kb.wikiNoPages":"Aucune page","kb.wikiNoPagesDesc":"Les brouillons distillés apparaissent ici.","kb.publish":"Publier (indexé)","kb.approveOk":"Publié et indexé","kb.reject":"Rejeter et archiver","kb.rejected":"Archivé","kb.saveOk":"Enregistré (réindexé auto)","kb.noVersions":"Aucune version.","kb.diffCurrent":"Diff avec l'actuel","kb.rollback":"Restaurer","kb.rollbackOk":"Restauré (contenu sauvegardé)","kb.diffTitle":"Diff ligne (rouge=supprimé, vert=ajouté)","kb.newFaq":"Nouvelle FAQ","kb.faqCreated":"Créée et indexée","kb.stdQuestion":"Question standard","kb.similarCount":"Similaires","kb.hits":"Hits","kb.toggleOk":"Basculé (index mis à jour)","kb.similarLabel":"Questions similaires (une par ligne)","kb.answersLabel":"Réponses (une par ligne)","kb.noFaqs":"Aucune FAQ","kb.noFaqsDesc":"Créer manuellement ou depuis les lacunes.","kb.gapsIntro":"Questions non couvertes — brouillons à valider.","kb.diag.allKinds":"Tous les types","kb.diag.allStatuses":"Tous les statuts","kb.diag.docFilter":"Filtrer par ID de document","kb.diag.total":"{n} exécutions","kb.diag.noRuns":"Aucune exécution","kb.diag.noRunsDesc":"Chaque exécution du pipeline KB (ingestion/question/recherche…) est enregistrée ici.","kb.traceToggle":"Trace","kb.tracePanel":"Trace du pipeline","kb.logId":"ID de log","kb.diag.runs":"Exécutions","kb.diag.checkup":"Bilan","kb.diag.health":"Santé","kb.diag.checkupIntro":"Scan de cohérence à la demande (cache 10 s).","kb.diag.healthIntro":"Santé des composants ; sonde par défaut gratuite.","kb.diag.embedProbe":"Sonde embed","kb.diag.r1":"Événements perdus (pending sans job)","kb.diag.r2":"Documents bloqués","kb.diag.r3":"Docs en échec","kb.diag.r4":"Incomplets (embeddings manquants)","kb.diag.r5":"Dérive vectorielle","kb.diag.r6":"Jobs KB morts","kb.diag.r7":"Exécutions bloquées","kb.diag.kind":"Type","kb.diag.status":"Statut","kb.diag.trigger":"Source","kb.diag.attempt":"Tentative","kb.diag.latency":"Latence","kb.diag.error":"Erreur","kb.diag.created":"Heure","kb.diag.prev":"Préc.","kb.diag.next":"Suiv.","kb.diag.detail":"Détail de l'exécution","kb.diag.agent":"Agent","kb.diag.session":"Session","kb.diag.configSnapshot":"Instantané de config","kb.diag.stages":"Étapes","kb.diag.noStages":"Aucune étape enregistrée","kb.noGaps":"Aucune lacune","kb.noGapsDesc":"Toutes les questions sont couvertes.","kb.freq":"Occurrences","kb.draftFaq":"Brouillon FAQ","kb.drafted":"Brouillon créé (désactivé) — à valider","kb.docsPage":"Documents","kb.title":"Titre","kb.versions":"Versions","kb.edit":"Modifier","kb.operations":"Actions","kb.state":"Statut","kb.allStatus":"Toutes","kb.type":"Type","kb.embeddingModel":"Modèle d'embedding","kb.embeddingDim":"Dimension des vecteurs","kb.modelHint":"Immuable après création (vide = défaut global)","kb.modelCol":"Modèle","kb.modelRequired":"Requis : saisir ou configurer les défauts globaux (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"Modèle de rerank","kb.rerankModelOptional":"Optionnel : global par défaut si vide (rerank désactivé sinon)","kb.rerankWindow":"Fenêtre de rerank","kb.rerankThreshold":"Seuil de rerank","kb.rerankInherit":"Hériter du global","kb.rerankHint":"Fenêtre/seuil vides héritent des défauts globaux (RAISFAST_KB_RERANK_*) ; sans modèle configuré, S5 passe directement","kb.rerankInvalid":"Fenêtre : entier positif ; seuil entre 0–1","kb.chatModel":"Modèle de génération","kb.chatModelOptional":"Optionnel : défaut global (RAISFAST_KB_CHAT_MODEL) → défaut du tenant","kb.chatModelHint":"Modèle utilisé pour la génération S9 ; vider revient au défaut global","kb.distillModel":"Modèle de distillation","kb.distillModelOptional":"Optionnel : défaut global (RAISFAST_KB_DISTILL_MODEL) → défaut du tenant","kb.distillModelHint":"Modèle utilisé pour la distillation wiki (extraction + rédaction) ; vider revient au défaut global","kb.imageRecognition":"Reconnaissance d'images","kb.imageModel":"Modèle de reconnaissance","kb.imageModelOptional":"Choisissez un modèle vision ; défaut global si vide (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"Langue des descriptions","kb.imageLanguagePlaceholder":"ex. zh / fr ; vide suit la langue du document","kb.imageInstructions":"Instructions personnalisées","kb.imageInstructionsPlaceholder":"Consignes supplémentaires d'interprétation (facultatif)","kb.imageHint":"Activé : légendes VLM + OCR sur les images, consultables par la recherche","kb.descPlaceholder":"Usage de cette base (facultatif)","jobs.attempts":"Tentatives","jobs.runAfter":"Planifié","jobs.updatedAt":"Mis à jour","jobs.error":"Erreur","jobs.id":"ID","jobs.payload":"Payload","jobs.noJobs":"Aucune tâche","jobs.noJobsDesc":"La file de tâches d'arrière-plan est vide.","jobs.cleanup":"Nettoyer","jobs.cleanupDesc":"Supprime les tâches terminées/mortes de plus de 7 jours. Irréversible.","jobs.cleanupDone":"{n} tâches nettoyées","jobs.confirmDelete":"Supprimer la tâche {type} ? L'enregistrement sera retiré de la file.","jobs.retried":"Tâche remise en file","jobs.deleted":"Tâche supprimée","jobs.actionFailed":"Échec de l'action"},qC={"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.jobs":"قائمة المهام","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.listView":"عرض القائمة","common.cardView":"عرض البطاقات","common.view":"عرض","common.back":"رجوع","common.actions":"الإجراءات","common.status":"الحالة","common.retry":"إعادة المحاولة","common.previous":"السابق","common.next":"التالي","common.pageOf":"صفحة {page} من {total}","common.noData":"لا توجد بيانات","common.refresh":"تحديث","common.all":"الكل","common.draft":"مسودة","common.published":"منشور","common.active":"نشط","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","layout.ai":"الذكاء الاصطناعي","layout.aiAgents":"إدارة الوكلاء","layout.aiPlayground":"تجربة المحادثة","aiAgents.newAgent":"وكيل جديد","aiAgents.noAgents":"لا يوجد وكلاء بعد","aiAgents.emptyHint":"أنشئ وكيلًا، واضبط النموذج وموجه النظام، ثم ابدأ المحادثة.","aiAgents.name":"الاسم","aiAgents.namePlaceholder":"مثال: مساعد المحتوى","aiAgents.nameImmutable":"لا يمكن تغيير الاسم بعد الإنشاء","aiAgents.provider":"المزوّد","aiAgents.providerHint":"نقطة نهاية متوافقة مع OpenAI (DeepSeek/OpenRouter/Ollama) أو Anthropic","aiAgents.model":"النموذج","aiAgents.systemPrompt":"موجه النظام","aiAgents.systemPromptPlaceholder":"أنت مساعد مفيد…","aiAgents.tools":"قائمة الأدوات المسموح بها","aiAgents.allowAll":"السماح بالكل","aiAgents.allowAllHint":"يمكن لهذا الوكيل استدعاء جميع أدوات النطاق المسجلة على الخادم.","aiAgents.memoryToolsHint":"أدوات الذاكرة (memory_store/recall/forget) متاحة دائمًا ولا تحتاج إلى إضافتها للقائمة.","aiAgents.customToolPlaceholder":"إضافة اسم أداة مخصصة (مثل أدوات MCP)…","aiAgents.addTool":"إضافة","aiAgents.toolGroup.content":"المحتوى","aiAgents.toolGroup.system":"النظام","aiAgents.toolGroup.skills":"المهارات","aiAgents.toolGroup.script":"البرمجة النصية","aiAgents.toolGroup.files":"الملفات","aiAgents.toolGroup.shell":"Shell","aiAgents.toolGroup.kb":"المعرفة","aiAgents.toolGroup.mcp":"MCP","aiAgents.toolGroup.other":"أخرى","aiAgents.kbBinding":"قواعد المعرفة","aiAgents.kbEmpty":"لا توجد قواعد معرفة نشطة.","aiAgents.kbBindingHint":"يجب تحديد كل قاعدة معرفة لتثبيتها على حدة؛ دون أي تحديد، لا تُثبَّت أداة knowledge_search. عند تفعيل الأداة، يبحث الوكيل في القواعد المحددة ويستشهد بالمصادر؛ لا يمكن لـ kb_ids في الاستدعاءات إلا تضييق هذا النطاق.","aiAgents.memory":"الذاكرة طويلة المدى","aiAgents.memoryHint":"عند التفعيل، تُدرج ذكريات الوكيل الأساسية في كل دورة (معزولة لكل مستخدم).","aiAgents.temperature":"درجة الحرارة","aiAgents.temperaturePlaceholder":"فارغ = القيمة الافتراضية للمزوّد","aiAgents.maxIterations":"أقصى تكرارات","aiAgents.maxIterationsHint":"الحد الأقصى لتكرارات المحرك لكل دورة (جولات استدعاء الأدوات).","aiAgents.params":"معلمات إضافية (JSON)","aiAgents.paramsInvalid":"JSON غير صالح","aiAgents.paramsHint":"يُدار skill_bundles عبر عنصر «المهارات المفعلة» أعلاه؛ أي قيمة تُكتب هنا ستُستبدل.","aiAgents.allTools":"الكل","aiAgents.noTools":"لا شيء","aiAgents.updatedAt":"آخر تحديث","aiAgents.usage":"الاستخدام","aiAgents.playground":"التجربة","aiAgents.created":"تم إنشاء الوكيل","aiAgents.createFailed":"فشل إنشاء الوكيل","aiAgents.updated":"تم تحديث الوكيل","aiAgents.updateFailed":"فشل تحديث الوكيل","aiAgents.deleted":"تم حذف الوكيل","aiAgents.deleteFailed":"فشل حذف الوكيل","aiAgents.confirmDelete":"حذف {name}؟ ستُحذف جلساته ورسائله وذكرياته نهائيًا.","aiUsage.totalTurns":"إجمالي الدورات","aiUsage.inputTokens":"رموز الإدخال","aiUsage.outputTokens":"رموز الإخراج","aiUsage.cacheReadTokens":"رموز التخزين المؤقت","aiUsage.toolCalls":"استدعاءات الأدوات","aiUsage.dailyTitle":"الاستخدام اليومي","aiUsage.noData":"لا استخدام في هذه الفترة","aiPlayground.agent":"الوكيل","aiPlayground.selectAgent":"اختر وكيلًا","aiPlayground.sessions":"الجلسات","aiPlayground.sessionDeleted":"تم حذف الجلسة","aiPlayground.sessionDeleteFailed":"فشل حذف الجلسة","aiPlayground.deleteSessionDesc":"سيتم حذف الجلسة وجميع رسائلها. لا يمكن التراجع عن هذا الإجراء.","aiPlayground.newSession":"جلسة جديدة","aiPlayground.noSessions":"لا جلسات — إرسال رسالة ينشئ واحدة.","aiPlayground.noAgents":"أنشئ وكيلًا أولاً","aiPlayground.emptySession":"اختر أو أنشئ جلسة للبدء","aiPlayground.thinking":"عملية التفكير","aiPlayground.busy":"الدورة قيد التنفيذ…","aiPlayground.inputPlaceholder":"اكتب رسالة واضغط Enter…","aiPlayground.stop":"إيقاف","aiPlayground.sessionFailed":"فشل إنشاء الجلسة","aiPlayground.turnFailed":"فشلت الدورة","aiMemory.title":"إدارة الذاكرة","aiMemory.searchPlaceholder":"ابحث بالمفتاح أو المحتوى…","aiMemory.allCategories":"كل الفئات","aiMemory.add":"إضافة ذكرى","aiMemory.addTitle":"إضافة ذكرى","aiMemory.editTitle":"تعديل الذكرى","aiMemory.dialogHint":"إزالة التكرار بالمفتاح: إذا وُجد صف (الوكيل، المستخدم، المفتاح) نفسه، يُحدَّث المحتوى.","aiMemory.key":"المفتاح","aiMemory.keyImmutable":"المفتاح هو الهوية الفريدة للذكرى ولا يمكن تغييره بعد الإنشاء","aiMemory.content":"المحتوى","aiMemory.category":"الفئة","aiMemory.categoryHint":"core تُدرج وتُدار بالميزانية؛ daily سجل فقط ولا تُدرج أبدًا","aiMemory.importance":"الأهمية","aiMemory.user":"المستخدم","aiMemory.userOptional":"المستخدم المالك (اختياري)","aiMemory.userPlaceholder":"فارغ = مستوى المنصة","aiMemory.pinned":"مثبتة (معفاة من الإزالة بالميزانية)","aiMemory.noMemories":"لا ذكريات","aiMemory.emptyHint":"تتراكم الذكريات من محادثات الوكيل، أو أضف واحدة يدويًا.","aiMemory.saved":"تم حفظ الذكرى","aiMemory.saveFailed":"فشل حفظ الذكرى","aiMemory.deleted":"تم حذف الذكرى","aiMemory.deleteFailed":"فشل حذف الذكرى","aiMemory.confirmDelete":"حذف الذكرى {key}؟ لا يمكن التراجع عن هذا الإجراء.","layout.aiSkills":"المهارات","layout.aiTools":"أدوات الذكاء الاصطناعي","aiTools.title":"كتالوج أدوات الذكاء الاصطناعي","aiTools.tabBuiltin":"الأدوات المدمجة","aiTools.category":"الفئة","aiTools.nameDesc":"الاسم / الوصف","aiTools.usedByCol":"عدد الوكلاء المستخدمين","aiTools.desc":"أدوات النطاق المسجلة في الواجهة الخلفية (الاسم/الوصف/الفئة محددة بالخلفية)، مجمعة حسب الفئة.","aiTools.usedBy":"يستخدمه {count} من الوكلاء","aiTools.empty":"لا توجد أدوات","aiTools.emptyDesc":"لم تسجل الواجهة الخلفية أي أدوات نطاق.","aiSkills.new":"مهارة جديدة","aiSkills.newTitle":"مهارة جديدة","aiSkills.editTitle":"تعديل المهارة","aiSkills.dialogHint":"تُخزَّن المهارات كـ SKILL.md (مقدمة + متن)؛ يشير إليها الوكلاء عبر قائمة التفعيل.","aiSkills.name":"الاسم","aiSkills.nameHint":"اسم الدليل: حروف/أرقام/-/_، بحد أقصى 64 حرفًا","aiSkills.layer":"الطبقة","aiSkills.layerHint":"tenant = المستأجر الحالي فقط؛ platform = كل المستأجرين (تتقدم platform عند تعارض الأسماء)","aiSkills.description":"الوصف","aiSkills.descriptionPlaceholder":"متى تُستخدم هذه المهارة (لكي يكتشفها النموذج)","aiSkills.instructions":"التعليمات (Markdown)","aiSkills.tools":"الأدوات المركبة","aiSkills.toolsPlaceholder":"اكتب اسم أداة واضغط Enter، مثل list_posts","aiSkills.disallowedTools":"الأدوات المستبعدة","aiSkills.always":"تضمين دائم","aiSkills.alwaysHint":"تضمين التعليمات كاملة حتى في وضع Compact (الافتراضي: بيانات وصفية + read_skill عند الحاجة)","aiSkills.noSkills":"لا مهارات بعد","aiSkills.emptyHint":"المهارة دليل SKILL.md مع تعليمات، يُدرج في موجه النظام للوكيل عند تفعيله.","aiSkills.saved":"تم حفظ المهارة","aiSkills.saveFailed":"فشل حفظ المهارة","aiSkills.deleted":"تم حذف المهارة","aiSkills.deleteFailed":"فشل حذف المهارة","aiSkills.confirmDelete":"حذف المهارة {name}؟ يُحذف الدليل بأكمله (بما فيه scripts/الأصول).","aiSkills.bundles":"المهارات المفعلة","aiSkills.bundlesAllHint":"يفعّل هذا الوكيل كل المهارات في نطاقه.","aiSkills.bundlesEmpty":"لا مهارات متاحة بعد — أنشئ واحدة في صفحة المهارات أولًا.","aiSkills.bundlesHint":"اختر المهارات المدرجة في موجه النظام للوكيل؛ يُعاد فحص الأدلة كل دورة.","layout.aiSessions":"المحادثات","aiSessions.title":"العنوان","aiSessions.agent":"الوكيل","aiSessions.user":"المستخدم","aiSessions.messages":"الرسائل","aiSessions.lastActive":"آخر نشاط","aiSessions.allAgents":"كل الوكلاء","aiSessions.allStatuses":"كل الحالات","aiSessions.noSessions":"لا محادثات","aiSessions.emptyHint":"تظهر المحادثات هنا عندما يبدأ المستخدمون دورات في جلسات الوكلاء.","aiSessions.untitled":"(بدون عنوان)","aiSessions.view":"عرض الرسائل","aiSessions.noMessages":"لا رسائل في هذه الجلسة","aiSessions.deleted":"تم حذف المحادثة","aiSessions.deleteFailed":"فشل حذف المحادثة","aiSessions.confirmDelete":'حذف المحادثة "{title}"؟ ستُحذف كل رسائلها (تُحفظ ذكريات الوكيل) ولا يمكن التراجع.',"layout.kb":"قاعدة المعرفة","layout.kbDocs":"المستندات","layout.kbChunks":"التقطيعات","layout.kbImages":"الصور","layout.kbChunker":"معاينة التقسيم","layout.kbPlayground":"اختبار الأسئلة","layout.kbWiki":"صفحات المعرفة","layout.kbFaqs":"الأسئلة الشائعة","layout.kbGaps":"الفجوات المعرفية","layout.kbDiagnostics":"التشخيص","kb.new":"قاعدة معرفة جديدة","kb.noKb":"لا توجد قواعد معرفة","kb.noKbDesc":"أنشئ واحدة لبدء رفع المستندات.","kb.deleteKb":"حذف قاعدة المعرفة","kb.confirmDeleteKb":"حذف قاعدة المعرفة «{name}»؟ سيتم حذف جميع المستندات والتقطيعات والأسئلة الشائعة وصفحات الويكي والفهارس والملفات الأصلية نهائيًا.","kb.kbDeleted":"تم حذف قاعدة المعرفة (مع المحتوى والفهارس)","kb.viewChunks":"عرض التقطيعات","kb.reparseAction":"إعادة المعالجة","kb.thinking":"جارٍ التفكير…","kb.viewFullRef":"عرض النص الكامل","kb.distillWiki":"توليد الويكي","kb.distillWikiHint":"مهمة LLM في الخلفية: تستخلص مسودات صفحات ويكي من المستندات المحددة؛ راجعها وانشرها في القائمة بعد ذلك.","kb.noReadyDocs":"لا توجد مستندات جاهزة في هذه القاعدة","kb.distillQueued":"تمت إضافة مهمة توليد الويكي إلى قائمة الانتظار ({count} مستندًا)","kb.distillSubmit":"توليد الويكي ({count})","kb.editChunk":"تحرير التقطيعة","kb.editChunkHint":"الحفظ يعيد التوجيه المتجهي والفهرسة تلقائيًا.","kb.confirmDeleteChunk":"حذف هذه التقطيعة؟ ستُزال فهارسها المتجهية/النصية؛ وحذف تقطيعة أبوية يحذف تقطيعاتها الفرعية أيضًا.","kb.chunkUpdated":"تم تحديث التقطيعة (إعادة فهرسة)","kb.chunkDeleted":"تم حذف التقطيعة (مع الفهارس)","kb.updatedAt":"وقت التحديث","kb.jobHistory":"سجل المعالجة","kb.jobAttempts":"عدد المحاولات","kb.noJobs":"لا يوجد سجل معالجة","kb.updated":"تم تحديث قاعدة المعرفة","kb.created":"تم إنشاء قاعدة المعرفة","kb.vectorBackend":"الواجهة الخلفية للمتجهات","kb.enabledOn":"ممكّن","kb.enabledOff":"غير ممكّن","kb.slug":"المعرّف","kb.kindDoc":"قاعدة مستندات (تشمل الويكي)","kb.kindFaq":"قاعدة الأسئلة الشائعة","kb.selectKb":"اختر قاعدة معرفة","kb.selectKbDesc":"اختر أعلاه أو أنشئها في صفحة قواعد المعرفة.","kb.selectPlaceholder":"اختر قاعدة","kb.allKbs":"كل قواعد المعرفة","kb.allDocs":"كل المستندات","kb.progress":"التقدم","kb.partialParsed":"تحليل جزئي","kb.pagesCol":"الصفحات","kb.imagesCol":"الصور","kb.pageCol":"ص","kb.parseEngine":"محرك التحليل","kb.parseEngineBuiltin":"مدمج (بدون تبعيات)","kb.parseEngineDocreader":"خدمة docreader (دقة عالية لصور/فحوص PDF)","kb.parseEngineHint":"صور PDF والفحوصات ودقة التنسيق تتطلب خدمة docreader؛ تعود للمدمج تلقائيًا إذا لم يُضبط العنوان","kb.noImages":"لا صور","kb.noImagesDesc":"تظهر الصور المستخرجة من المستندات هنا بعد تفعيل التعرف.","kb.recognition":"المحتوى المُتعرف","kb.imagePreview":"معاينة","kb.imageCaption":"الوصف","kb.imageOcr":"نص OCR","kb.imageStatus.pending":"قيد الانتظار","kb.imageStatus.done":"مُتعرف عليها","kb.imageStatus.failed":"فشل","kb.imageStatus.skipped":"تم تخطيها","kb.createdAtCol":"أنشئت","kb.imagePreviewUnavailable":"المعاينة غير متاحة","kb.imageThumb":"مصغّرة","kb.imageContent":"المحتوى","kb.zoomIn":"تكبير","kb.zoomOut":"تصغير","kb.zoomReset":"إعادة تعيين","kb.reader":"عرض القراءة","kb.readerEmpty":"لا توجد كتل لعرضها","kb.readerIndex":"idx","kb.readerMode":"rmode","kb.blocksMode":"bmode","kb.imageOcrHide":"ocrhide","kb.pageUnknown":"صفحة غير معروفة","kb.upload":"رفع مستند","kb.uploadOk":"تم الرفع، التحليل في الانتظار","kb.uploadFailed":"فشل الرفع","kb.online":"إدخال مباشر","kb.onlineOk":"تم الإرسال، قيد المعالجة","kb.onlineFailed":"فشل الإرسال","kb.noDocs":"لا مستندات","kb.noDocsDesc":"ارفع ملفات أو أدخل ماركداون.","kb.source":"المصدر","kb.noChunks":"لا توجد كتل","kb.noChunksDesc":"عرض الكتلة الأصلية/الفرعية، انقر لرؤية المحتوى الكامل","kb.breadcrumb":"كتلة","kb.embedded":"مضمن","kb.notEmbedded":"غير مضمن","kb.bytes":"بايت","kb.vectorCol":"متجه","kb.backToDocs":"عودة إلى المستندات","kb.chunkCount":"عدد الأجزاء","kb.reparse":"أعيدت المعالجة","kb.reparseFailed":"فشلت إعادة المعالجة","kb.confirmDelete":"حذف المستند «{title}»؟ سيتم حذف التقطيعات والفهارس والملف الأصلي نهائيًا ولا يمكن التراجع.","kb.deleted":"تم الحذف (مع الفهارس)","kb.mdTitle":"العنوان","kb.mdContent":"المحتوى (ماركداون؛ # للعناوين)","kb.status.pending":"قيد الانتظار","kb.status.parsing":"تحليل","kb.status.chunking":"تقسيم","kb.status.indexing":"فهرسة","kb.status.embedding":"تضمين","kb.status.ready":"جاهز","kb.status.failed":"فشل","kb.status.stale":"قديم","kb.sample":"نموذج ماركداون (≤64KB، معاينة فقط)","kb.runPreview":"تشغيل المعاينة","kb.running":"جارٍ التقسيم…","kb.parent":"أصل","kb.child":"فرع","kb.parents":"أصلية","kb.children":"فرعية","kb.total":"الإجمالي","kb.chars":"حرف","kb.askLabel":"سؤال (جولة واحدة؛ الفارغ = الكل)","kb.stream":"بث (SSE)","kb.ask":"اسأل","kb.stop":"إيقاف","kb.references":"مراجع","kb.wikiNoPages":"لا صفحات معرفة","kb.wikiNoPagesDesc":"تظهر المسودات هنا للمراجعة.","kb.publish":"نشر (فهرسته)","kb.approveOk":"تم النشر والفهرسة","kb.reject":"رفض وأرشفة","kb.rejected":"تمت الأرشفة","kb.saveOk":"تم الحفظ (إعادة فهرسة تلقائية)","kb.noVersions":"لا إصدارات بعد.","kb.diffCurrent":"مقارنة بالحالي","kb.rollback":"تراجع","kb.rollbackOk":"تم التراجع (حُفظ المحتوى السابق)","kb.diffTitle":"مقارنة سطرية (أحمر=محذوف، أخضر=مضاف)","kb.newFaq":"سؤال شائع جديد","kb.faqCreated":"تم الإنشاء والفهرسة","kb.stdQuestion":"السؤال المعياري","kb.similarCount":"أسئلة مشابهة","kb.hits":"إصابات","kb.toggleOk":"تم التبديل (تحديث الفهارس)","kb.similarLabel":"أسئلة مشابهة (واحد لكل سطر)","kb.answersLabel":"إجابات (واحدة لكل سطر)","kb.noFaqs":"لا أسئلة شائعة","kb.noFaqsDesc":"أنشئ يدويًا أو من الفجوات.","kb.gapsIntro":"الأسئلة غير المغطاة — المسودات تُراجع يدويًا.","kb.diag.allKinds":"كل الأنواع","kb.diag.allStatuses":"كل الحالات","kb.diag.docFilter":"تصفية حسب معرّف المستند","kb.diag.total":"{n} تشغيل","kb.diag.noRuns":"لا توجد عمليات بعد","kb.diag.noRunsDesc":"تُسجَّل هنا كل عملية لخط KB (الاستيعاب/السؤال/البحث…).","kb.traceToggle":"التتبع","kb.tracePanel":"تتبع الخط","kb.logId":"معرّف السجل","kb.diag.runs":"العمليات","kb.diag.checkup":"الفحص","kb.diag.health":"الصحة","kb.diag.checkupIntro":"فحص اتساق عند الطلب (ذاكرة 10 ثوانٍ).","kb.diag.healthIntro":"صحة المكونات؛ الفحص الافتراضي بلا تكلفة.","kb.diag.embedProbe":"فحص Embed","kb.diag.r1":"أحداث مفقودة (pending بدون مهمة)","kb.diag.r2":"مستندات عالقة","kb.diag.r3":"مستندات فاشلة","kb.diag.r4":"غير مكتمل (embeddings ناقصة)","kb.diag.r5":"انحراف المتجهات","kb.diag.r6":"مهام KB ميتة","kb.diag.r7":"عمليات عالقة","kb.diag.kind":"النوع","kb.diag.status":"الحالة","kb.diag.trigger":"المصدر","kb.diag.attempt":"المحاولة","kb.diag.latency":"الزمن","kb.diag.error":"خطأ","kb.diag.created":"الوقت","kb.diag.prev":"السابق","kb.diag.next":"التالي","kb.diag.detail":"تفاصيل التشغيل","kb.diag.agent":"الوكيل","kb.diag.session":"الجلسة","kb.diag.configSnapshot":"لقطة الإعداد","kb.diag.stages":"المراحل","kb.diag.noStages":"لا مراحل مسجلة","kb.noGaps":"لا فجوات معرفية","kb.noGapsDesc":"جميع الأسئلة مغطاة.","kb.freq":"التكرار","kb.draftFaq":"صياغة سؤال","kb.drafted":"تمت الصياغة (معطلة) — راجعها في صفحة الأسئلة","kb.docsPage":"المستندات","kb.title":"العنوان","kb.versions":"الإصدارات","kb.edit":"تحرير","kb.operations":"إجراءات","kb.state":"الحالة","kb.allStatus":"الكل","kb.type":"النوع","kb.embeddingModel":"نموذج التضمين","kb.embeddingDim":"أبعاد المتجه","kb.modelHint":"غير قابل للتغيير بعد الإنشاء (الفارغ = الافتراضي العام)","kb.modelCol":"النموذج","kb.modelRequired":"مطلوب: أدخل القيمة أو اضبط الافتراضي العام (RAISFAST_AI_EMBEDDING_MODEL/_DIM)","kb.rerankModel":"نموذج إعادة الترتيب","kb.rerankModelOptional":"اختياري: الافتراضي العام إذا تُرك فارغًا (إعادة الترتيب معطلة بدون إعداد)","kb.rerankWindow":"نافذة إعادة الترتيب","kb.rerankThreshold":"عتبة إعادة الترتيب","kb.rerankInherit":"وراثة الافتراضي العام","kb.rerankHint":"النافذة/العتبة الفارغة ترث الافتراضيات العامة (RAISFAST_KB_RERANK_*)؛ بدون نموذج مُعد يمر S5 مباشرة","kb.rerankInvalid":"النافذة يجب أن تكون عددًا صحيحًا موجبًا؛ العتبة بين 0–1","kb.chatModel":"نموذج التوليد","kb.chatModelOptional":"اختياري: الافتراضي العام (RAISFAST_KB_CHAT_MODEL) ← افتراضي المستأجر","kb.chatModelHint":"النموذج المستخدم لتوليد إجابات S9؛ تفريغه يعيد الافتراضي العام","kb.distillModel":"نموذج التقطير","kb.distillModelOptional":"اختياري: الافتراضي العام (RAISFAST_KB_DISTILL_MODEL) ← افتراضي المستأجر","kb.distillModelHint":"النموذج المستخدم لتقطير الويكي (استخراج المواضيع + الصياغة)؛ تفريغه يعيد الافتراضي العام","kb.imageRecognition":"التعرف على الصور","kb.imageModel":"نموذج التعرف","kb.imageModelOptional":"اختر نموذجًا يدعم الرؤية؛ الافتراضي العام إذا تُرك فارغًا (RAISFAST_KB_IMAGE_MODEL)","kb.imageLanguage":"لغة الوصف","kb.imageLanguagePlaceholder":"مثل zh / ar؛ الفارغ يتبع لغة المستند","kb.imageInstructions":"تعليمات مخصصة","kb.imageInstructionsPlaceholder":"إرشادات إضافية لتفسير الصور (اختياري)","kb.imageHint":"عند التفعيل تحصل صور المستند على وصف + OCR عبر VLM وتصبح قابلة للبحث","kb.descPlaceholder":"الغرض من هذه القاعدة (اختياري)","jobs.attempts":"المحاولات","jobs.runAfter":"مجدول","jobs.updatedAt":"محدّث","jobs.error":"خطأ","jobs.id":"المعرّف","jobs.payload":"الحمولة","jobs.noJobs":"لا توجد مهام","jobs.noJobsDesc":"قائمة المهام في الخلفية فارغة.","jobs.cleanup":"تنظيف","jobs.cleanupDesc":"حذف المهام المكتملة/الميتة الأقدم من 7 أيام. لا يمكن التراجع عن هذا الإجراء.","jobs.cleanupDone":"تم تنظيف {n} مهمة","jobs.confirmDelete":"حذف المهمة {type}؟ سيتم إزالة السجل من القائمة.","jobs.retried":"أُعيدت المهمة إلى القائمة","jobs.deleted":"حُذفت المهمة","jobs.actionFailed":"فشل الإجراء"},qc={en:jC,zh:LC,ja:_C,ko:UC,es:zC,pt:BC,de:VC,fr:HC,ar:qC},WC=["ar"];function KC(t){return WC.includes(t)}const un=hl()(bl(t=>({locale:"en",setLocale:e=>t({locale:e})}),{name:"i18n-locale"}));function bt(){const t=un(n=>n.locale),e=qc[t];function o(n,a){let s=e[n]??qc.en[n]??n;if(a)for(const[r,i]of Object.entries(a))s=s.replace(`{${r}}`,String(i));return s}return{t:o,locale:t}}function sm(){const t=un(e=>e.locale);return KC(t)?"rtl":"ltr"}var Wc=1,$C=.9,GC=.8,JC=.17,br=.1,yr=.999,QC=.9999,YC=.99,ZC=/[\\\/_+.#"@\[\(\{&]/,XC=/[\\\/_+.#"@\[\(\{&]/g,eT=/[\s-]/,rm=/[\s-]/g;function di(t,e,o,n,a,s,r){if(s===e.length)return a===t.length?Wc:YC;var i=`${a},${s}`;if(r[i]!==void 0)return r[i];for(var m=n.charAt(s),d=o.indexOf(m,a),p=0,u,g,y,f;d>=0;)u=di(t,e,o,n,d+1,s+1,r),u>p&&(d===a?u*=Wc:ZC.test(t.charAt(d-1))?(u*=GC,y=t.slice(a,d-1).match(XC),y&&a>0&&(u*=Math.pow(yr,y.length))):eT.test(t.charAt(d-1))?(u*=$C,f=t.slice(a,d-1).match(rm),f&&a>0&&(u*=Math.pow(yr,f.length))):(u*=JC,a>0&&(u*=Math.pow(yr,d-a))),t.charAt(d)!==e.charAt(s)&&(u*=QC)),(uu&&(u=g*br)),u>p&&(p=u),d=o.indexOf(m,d+1);return r[i]=p,p}function Kc(t){return t.toLowerCase().replace(rm," ")}function tT(t,e,o){return t=o&&o.length>0?`${t+" "+o.join(" ")}`:t,di(t,e,Kc(t),Kc(e),0,0,{})}function Mo(t,e,{checkForDefaultPrevented:o=!0}={}){return function(a){if(t==null||t(a),o===!1||!a.defaultPrevented)return e==null?void 0:e(a)}}function $c(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function jo(...t){return e=>{let o=!1;const n=t.map(a=>{const s=$c(a,e);return!o&&typeof s=="function"&&(o=!0),s});if(o)return()=>{for(let a=0;a{const{children:r,...i}=s,m=c.useMemo(()=>i,Object.values(i));return l.jsx(o.Provider,{value:m,children:r})};n.displayName=t+"Provider";function a(s){const r=c.useContext(o);if(r)return r;if(e!==void 0)return e;throw new Error(`\`${s}\` must be used within \`${t}\``)}return[n,a]}function nT(t,e=[]){let o=[];function n(s,r){const i=c.createContext(r),m=o.length;o=[...o,r];const d=u=>{var w;const{scope:g,children:y,...f}=u,b=((w=g==null?void 0:g[t])==null?void 0:w[m])||i,h=c.useMemo(()=>f,Object.values(f));return l.jsx(b.Provider,{value:h,children:y})};d.displayName=s+"Provider";function p(u,g){var b;const y=((b=g==null?void 0:g[t])==null?void 0:b[m])||i,f=c.useContext(y);if(f)return f;if(r!==void 0)return r;throw new Error(`\`${u}\` must be used within \`${s}\``)}return[d,p]}const a=()=>{const s=o.map(r=>c.createContext(r));return function(i){const m=(i==null?void 0:i[t])||s;return c.useMemo(()=>({[`__scope${t}`]:{...i,[t]:m}}),[i,m])}};return a.scopeName=t,[n,aT(a,...e)]}function aT(...t){const e=t[0];if(t.length===1)return e;const o=()=>{const n=t.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(s){const r=n.reduce((i,{useScope:m,scopeName:d})=>{const u=m(s)[`__scope${d}`];return{...i,...u}},{});return c.useMemo(()=>({[`__scope${e.scopeName}`]:r}),[r])}};return o.scopeName=e.scopeName,o}var ha=globalThis!=null&&globalThis.document?c.useLayoutEffect:()=>{},sT=Ts[" useId ".trim().toString()]||(()=>{}),rT=0;function uo(t){const[e,o]=c.useState(sT());return ha(()=>{o(n=>n??String(rT++))},[t]),e?`radix-${e}`:""}var iT=Ts[" useInsertionEffect ".trim().toString()]||ha;function lT({prop:t,defaultProp:e,onChange:o=()=>{},caller:n}){const[a,s,r]=cT({defaultProp:e,onChange:o}),i=t!==void 0,m=i?t:a;{const p=c.useRef(t!==void 0);c.useEffect(()=>{const u=p.current;u!==i&&console.warn(`${n} is changing from ${u?"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.`),p.current=i},[i,n])}const d=c.useCallback(p=>{var u;if(i){const g=dT(p)?p(t):p;g!==t&&((u=r.current)==null||u.call(r,g))}else s(p)},[i,t,s,r]);return[m,d]}function cT({defaultProp:t,onChange:e}){const[o,n]=c.useState(t),a=c.useRef(o),s=c.useRef(e);return iT(()=>{s.current=e},[e]),c.useEffect(()=>{var r;a.current!==o&&((r=s.current)==null||r.call(s,o),a.current=o)},[o,a]),[o,n,s]}function dT(t){return typeof t=="function"}function Ia(t){const e=uT(t),o=c.forwardRef((n,a)=>{const{children:s,...r}=n,i=c.Children.toArray(s),m=i.find(mT);if(m){const d=m.props.children,p=i.map(u=>u===m?c.Children.count(d)>1?c.Children.only(null):c.isValidElement(d)?d.props.children:null:u);return l.jsx(e,{...r,ref:a,children:c.isValidElement(d)?c.cloneElement(d,void 0,p):null})}return l.jsx(e,{...r,ref:a,children:s})});return o.displayName=`${t}.Slot`,o}function uT(t){const e=c.forwardRef((o,n)=>{const{children:a,...s}=o;if(c.isValidElement(a)){const r=fT(a),i=gT(s,a.props);return a.type!==c.Fragment&&(i.ref=n?jo(n,r):r),c.cloneElement(a,i)}return c.Children.count(a)>1?c.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var pT=Symbol("radix.slottable");function mT(t){return c.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===pT}function gT(t,e){const o={...e};for(const n in e){const a=t[n],s=e[n];/^on[A-Z]/.test(n)?a&&s?o[n]=(...i)=>{const m=s(...i);return a(...i),m}:a&&(o[n]=a):n==="style"?o[n]={...a,...s}:n==="className"&&(o[n]=[a,s].filter(Boolean).join(" "))}return{...t,...o}}function fT(t){var n,a;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=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var hT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],im=hT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{});function bT(t,e){t&&Vt.flushSync(()=>t.dispatchEvent(e))}function ba(t){const e=c.useRef(t);return c.useEffect(()=>{e.current=t}),c.useMemo(()=>(...o)=>{var n;return(n=e.current)==null?void 0:n.call(e,...o)},[])}function yT(t,e=globalThis==null?void 0:globalThis.document){const o=ba(t);c.useEffect(()=>{const n=a=>{a.key==="Escape"&&o(a)};return e.addEventListener("keydown",n,{capture:!0}),()=>e.removeEventListener("keydown",n,{capture:!0})},[o,e])}var kT="DismissableLayer",ui="dismissableLayer.update",wT="dismissableLayer.pointerDownOutside",vT="dismissableLayer.focusOutside",Gc,lm=c.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),cm=c.forwardRef((t,e)=>{const{disableOutsidePointerEvents:o=!1,onEscapeKeyDown:n,onPointerDownOutside:a,onFocusOutside:s,onInteractOutside:r,onDismiss:i,...m}=t,d=c.useContext(lm),[p,u]=c.useState(null),g=(p==null?void 0:p.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=c.useState({}),f=bn(e,A=>u(A)),b=Array.from(d.layers),[h]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),w=b.indexOf(h),C=p?b.indexOf(p):-1,v=d.layersWithOutsidePointerEventsDisabled.size>0,T=C>=w,k=ST(A=>{const D=A.target,R=[...d.branches].some(I=>I.contains(D));!T||R||(a==null||a(A),r==null||r(A),A.defaultPrevented||i==null||i())},g),S=DT(A=>{const D=A.target;[...d.branches].some(I=>I.contains(D))||(s==null||s(A),r==null||r(A),A.defaultPrevented||i==null||i())},g);return yT(A=>{C===d.layers.size-1&&(n==null||n(A),!A.defaultPrevented&&i&&(A.preventDefault(),i()))},g),c.useEffect(()=>{if(p)return o&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Gc=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(p)),d.layers.add(p),Jc(),()=>{o&&d.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=Gc)}},[p,g,o,d]),c.useEffect(()=>()=>{p&&(d.layers.delete(p),d.layersWithOutsidePointerEventsDisabled.delete(p),Jc())},[p,d]),c.useEffect(()=>{const A=()=>y({});return document.addEventListener(ui,A),()=>document.removeEventListener(ui,A)},[]),l.jsx(im.div,{...m,ref:f,style:{pointerEvents:v?T?"auto":"none":void 0,...t.style},onFocusCapture:Mo(t.onFocusCapture,S.onFocusCapture),onBlurCapture:Mo(t.onBlurCapture,S.onBlurCapture),onPointerDownCapture:Mo(t.onPointerDownCapture,k.onPointerDownCapture)})});cm.displayName=kT;var CT="DismissableLayerBranch",TT=c.forwardRef((t,e)=>{const o=c.useContext(lm),n=c.useRef(null),a=bn(e,n);return c.useEffect(()=>{const s=n.current;if(s)return o.branches.add(s),()=>{o.branches.delete(s)}},[o.branches]),l.jsx(im.div,{...t,ref:a})});TT.displayName=CT;function ST(t,e=globalThis==null?void 0:globalThis.document){const o=ba(t),n=c.useRef(!1),a=c.useRef(()=>{});return c.useEffect(()=>{const s=i=>{if(i.target&&!n.current){let m=function(){dm(wT,o,d,{discrete:!0})};const d={originalEvent:i};i.pointerType==="touch"?(e.removeEventListener("click",a.current),a.current=m,e.addEventListener("click",a.current,{once:!0})):m()}else e.removeEventListener("click",a.current);n.current=!1},r=window.setTimeout(()=>{e.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(r),e.removeEventListener("pointerdown",s),e.removeEventListener("click",a.current)}},[e,o]),{onPointerDownCapture:()=>n.current=!0}}function DT(t,e=globalThis==null?void 0:globalThis.document){const o=ba(t),n=c.useRef(!1);return c.useEffect(()=>{const a=s=>{s.target&&!n.current&&dm(vT,o,{originalEvent:s},{discrete:!1})};return e.addEventListener("focusin",a),()=>e.removeEventListener("focusin",a)},[e,o]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function Jc(){const t=new CustomEvent(ui);document.dispatchEvent(t)}function dm(t,e,o,{discrete:n}){const a=o.originalEvent.target,s=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:o});e&&a.addEventListener(t,e,{once:!0}),n?bT(a,s):a.dispatchEvent(s)}var AT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],xT=AT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),kr="focusScope.autoFocusOnMount",wr="focusScope.autoFocusOnUnmount",Qc={bubbles:!1,cancelable:!0},PT="FocusScope",um=c.forwardRef((t,e)=>{const{loop:o=!1,trapped:n=!1,onMountAutoFocus:a,onUnmountAutoFocus:s,...r}=t,[i,m]=c.useState(null),d=ba(a),p=ba(s),u=c.useRef(null),g=bn(e,b=>m(b)),y=c.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;c.useEffect(()=>{if(n){let b=function(v){if(y.paused||!i)return;const T=v.target;i.contains(T)?u.current=T:wo(u.current,{select:!0})},h=function(v){if(y.paused||!i)return;const T=v.relatedTarget;T!==null&&(i.contains(T)||wo(u.current,{select:!0}))},w=function(v){if(document.activeElement===document.body)for(const k of v)k.removedNodes.length>0&&wo(i)};document.addEventListener("focusin",b),document.addEventListener("focusout",h);const C=new MutationObserver(w);return i&&C.observe(i,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",b),document.removeEventListener("focusout",h),C.disconnect()}}},[n,i,y.paused]),c.useEffect(()=>{if(i){Zc.add(y);const b=document.activeElement;if(!i.contains(b)){const w=new CustomEvent(kr,Qc);i.addEventListener(kr,d),i.dispatchEvent(w),w.defaultPrevented||(ET(OT(pm(i)),{select:!0}),document.activeElement===b&&wo(i))}return()=>{i.removeEventListener(kr,d),setTimeout(()=>{const w=new CustomEvent(wr,Qc);i.addEventListener(wr,p),i.dispatchEvent(w),w.defaultPrevented||wo(b??document.body,{select:!0}),i.removeEventListener(wr,p),Zc.remove(y)},0)}}},[i,d,p,y]);const f=c.useCallback(b=>{if(!o&&!n||y.paused)return;const h=b.key==="Tab"&&!b.altKey&&!b.ctrlKey&&!b.metaKey,w=document.activeElement;if(h&&w){const C=b.currentTarget,[v,T]=RT(C);v&&T?!b.shiftKey&&w===T?(b.preventDefault(),o&&wo(v,{select:!0})):b.shiftKey&&w===v&&(b.preventDefault(),o&&wo(T,{select:!0})):w===C&&b.preventDefault()}},[o,n,y.paused]);return l.jsx(xT.div,{tabIndex:-1,...r,ref:g,onKeyDown:f})});um.displayName=PT;function ET(t,{select:e=!1}={}){const o=document.activeElement;for(const n of t)if(wo(n,{select:e}),document.activeElement!==o)return}function RT(t){const e=pm(t),o=Yc(e,t),n=Yc(e.reverse(),t);return[o,n]}function pm(t){const e=[],o=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const a=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||a?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;o.nextNode();)e.push(o.currentNode);return e}function Yc(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 FT(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&&FT(t)&&e&&t.select()}}var Zc=MT();function MT(){let t=[];return{add(e){const o=t[0];e!==o&&(o==null||o.pause()),t=Xc(t,e),t.unshift(e)},remove(e){var o;t=Xc(t,e),(o=t[0])==null||o.resume()}}}function Xc(t,e){const o=[...t],n=o.indexOf(e);return n!==-1&&o.splice(n,1),o}function OT(t){return t.filter(e=>e.tagName!=="A")}var NT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],jT=NT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),LT="Portal",mm=c.forwardRef((t,e)=>{var i;const{container:o,...n}=t,[a,s]=c.useState(!1);ha(()=>s(!0),[]);const r=o||a&&((i=globalThis==null?void 0:globalThis.document)==null?void 0:i.body);return r?Md.createPortal(l.jsx(jT.div,{...n,ref:e}),r):null});mm.displayName=LT;function _T(t,e){return c.useReducer((o,n)=>e[o][n]??o,t)}var Ks=t=>{const{present:e,children:o}=t,n=UT(e),a=typeof o=="function"?o({present:n.isPresent}):c.Children.only(o),s=bn(n.ref,zT(a));return typeof o=="function"||n.isPresent?c.cloneElement(a,{ref:s}):null};Ks.displayName="Presence";function UT(t){const[e,o]=c.useState(),n=c.useRef(null),a=c.useRef(t),s=c.useRef("none"),r=t?"mounted":"unmounted",[i,m]=_T(r,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return c.useEffect(()=>{const d=Ja(n.current);s.current=i==="mounted"?d:"none"},[i]),ha(()=>{const d=n.current,p=a.current;if(p!==t){const g=s.current,y=Ja(d);t?m("MOUNT"):y==="none"||(d==null?void 0:d.display)==="none"?m("UNMOUNT"):m(p&&g!==y?"ANIMATION_OUT":"UNMOUNT"),a.current=t}},[t,m]),ha(()=>{if(e){let d;const p=e.ownerDocument.defaultView??window,u=y=>{const b=Ja(n.current).includes(CSS.escape(y.animationName));if(y.target===e&&b&&(m("ANIMATION_END"),!a.current)){const h=e.style.animationFillMode;e.style.animationFillMode="forwards",d=p.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=h)})}},g=y=>{y.target===e&&(s.current=Ja(n.current))};return e.addEventListener("animationstart",g),e.addEventListener("animationcancel",u),e.addEventListener("animationend",u),()=>{p.clearTimeout(d),e.removeEventListener("animationstart",g),e.removeEventListener("animationcancel",u),e.removeEventListener("animationend",u)}}else m("ANIMATION_END")},[e,m]),{isPresent:["mounted","unmountSuspended"].includes(i),ref:c.useCallback(d=>{n.current=d?getComputedStyle(d):null,o(d)},[])}}function Ja(t){return(t==null?void 0:t.animationName)||"none"}function zT(t){var n,a;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=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.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"],Fa=BT.reduce((t,e)=>{const o=Ia(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),vr=0;function VT(){c.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??ed()),document.body.insertAdjacentElement("beforeend",t[1]??ed()),vr++,()=>{vr===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),vr--}},[])}function ed(){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 Xt=function(){return Xt=Object.assign||function(e){for(var o,n=1,a=arguments.length;n"u")return sS;var e=rS(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])}},lS=bm(),In="data-scroll-locked",cS=function(t,e,o,n){var a=t.left,s=t.top,r=t.right,i=t.gap;return o===void 0&&(o="margin"),` - .`.concat(qT,` { - overflow: hidden `).concat(n,`; - padding-right: `).concat(i,"px ").concat(n,`; - } - body[`).concat(In,`] { - overflow: hidden `).concat(n,`; - overscroll-behavior: contain; - `).concat([e&&"position: relative ".concat(n,";"),o==="margin"&&` - padding-left: `.concat(a,`px; - padding-top: `).concat(s,`px; - padding-right: `).concat(r,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(i,"px ").concat(n,`; - `),o==="padding"&&"padding-right: ".concat(i,"px ").concat(n,";")].filter(Boolean).join(""),` - } - - .`).concat(ss,` { - right: `).concat(i,"px ").concat(n,`; - } - - .`).concat(rs,` { - margin-right: `).concat(i,"px ").concat(n,`; - } - - .`).concat(ss," .").concat(ss,` { - right: 0 `).concat(n,`; - } - - .`).concat(rs," .").concat(rs,` { - margin-right: 0 `).concat(n,`; - } - - body[`).concat(In,`] { - `).concat(WT,": ").concat(i,`px; - } -`)},od=function(){var t=parseInt(document.body.getAttribute(In)||"0",10);return isFinite(t)?t:0},dS=function(){c.useEffect(function(){return document.body.setAttribute(In,(od()+1).toString()),function(){var t=od()-1;t<=0?document.body.removeAttribute(In):document.body.setAttribute(In,t.toString())}},[])},uS=function(t){var e=t.noRelative,o=t.noImportant,n=t.gapMode,a=n===void 0?"margin":n;dS();var s=c.useMemo(function(){return iS(a)},[a]);return c.createElement(lS,{styles:cS(s,!e,a,o?"":"!important")})},pi=!1;if(typeof window<"u")try{var Qa=Object.defineProperty({},"passive",{get:function(){return pi=!0,!0}});window.addEventListener("test",Qa,Qa),window.removeEventListener("test",Qa,Qa)}catch{pi=!1}var vn=pi?{passive:!1}:!1,pS=function(t){return t.tagName==="TEXTAREA"},ym=function(t,e){if(!(t instanceof Element))return!1;var o=window.getComputedStyle(t);return o[e]!=="hidden"&&!(o.overflowY===o.overflowX&&!pS(t)&&o[e]==="visible")},mS=function(t){return ym(t,"overflowY")},gS=function(t){return ym(t,"overflowX")},nd=function(t,e){var o=e.ownerDocument,n=e;do{typeof ShadowRoot<"u"&&n instanceof ShadowRoot&&(n=n.host);var a=km(t,n);if(a){var s=wm(t,n),r=s[1],i=s[2];if(r>i)return!0}n=n.parentNode}while(n&&n!==o.body);return!1},fS=function(t){var e=t.scrollTop,o=t.scrollHeight,n=t.clientHeight;return[e,o,n]},hS=function(t){var e=t.scrollLeft,o=t.scrollWidth,n=t.clientWidth;return[e,o,n]},km=function(t,e){return t==="v"?mS(e):gS(e)},wm=function(t,e){return t==="v"?fS(e):hS(e)},bS=function(t,e){return t==="h"&&e==="rtl"?-1:1},yS=function(t,e,o,n,a){var s=bS(t,window.getComputedStyle(e).direction),r=s*n,i=o.target,m=e.contains(i),d=!1,p=r>0,u=0,g=0;do{if(!i)break;var y=wm(t,i),f=y[0],b=y[1],h=y[2],w=b-h-s*f;(f||w)&&km(t,i)&&(u+=w,g+=f);var C=i.parentNode;i=C&&C.nodeType===Node.DOCUMENT_FRAGMENT_NODE?C.host:C}while(!m&&i!==document.body||m&&(e.contains(i)||e===i));return(p&&Math.abs(u)<1||!p&&Math.abs(g)<1)&&(d=!0),d},Ya=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},ad=function(t){return[t.deltaX,t.deltaY]},sd=function(t){return t&&"current"in t?t.current:t},kS=function(t,e){return t[0]===e[0]&&t[1]===e[1]},wS=function(t){return` - .block-interactivity-`.concat(t,` {pointer-events: none;} - .allow-interactivity-`).concat(t,` {pointer-events: all;} -`)},vS=0,Cn=[];function CS(t){var e=c.useRef([]),o=c.useRef([0,0]),n=c.useRef(),a=c.useState(vS++)[0],s=c.useState(bm)[0],r=c.useRef(t);c.useEffect(function(){r.current=t},[t]),c.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(a));var b=HT([t.lockRef.current],(t.shards||[]).map(sd),!0).filter(Boolean);return b.forEach(function(h){return h.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),b.forEach(function(h){return h.classList.remove("allow-interactivity-".concat(a))})}}},[t.inert,t.lockRef.current,t.shards]);var i=c.useCallback(function(b,h){if("touches"in b&&b.touches.length===2||b.type==="wheel"&&b.ctrlKey)return!r.current.allowPinchZoom;var w=Ya(b),C=o.current,v="deltaX"in b?b.deltaX:C[0]-w[0],T="deltaY"in b?b.deltaY:C[1]-w[1],k,S=b.target,A=Math.abs(v)>Math.abs(T)?"h":"v";if("touches"in b&&A==="h"&&S.type==="range")return!1;var D=window.getSelection(),R=D&&D.anchorNode,I=R?R===S||R.contains(S):!1;if(I)return!1;var B=nd(A,S);if(!B)return!0;if(B?k=A:(k=A==="v"?"h":"v",B=nd(A,S)),!B)return!1;if(!n.current&&"changedTouches"in b&&(v||T)&&(n.current=k),!k)return!0;var M=n.current||k;return yS(M,h,b,M==="h"?v:T)},[]),m=c.useCallback(function(b){var h=b;if(!(!Cn.length||Cn[Cn.length-1]!==s)){var w="deltaY"in h?ad(h):Ya(h),C=e.current.filter(function(k){return k.name===h.type&&(k.target===h.target||h.target===k.shadowParent)&&kS(k.delta,w)})[0];if(C&&C.should){h.cancelable&&h.preventDefault();return}if(!C){var v=(r.current.shards||[]).map(sd).filter(Boolean).filter(function(k){return k.contains(h.target)}),T=v.length>0?i(h,v[0]):!r.current.noIsolation;T&&h.cancelable&&h.preventDefault()}}},[]),d=c.useCallback(function(b,h,w,C){var v={name:b,delta:h,target:w,should:C,shadowParent:TS(w)};e.current.push(v),setTimeout(function(){e.current=e.current.filter(function(T){return T!==v})},1)},[]),p=c.useCallback(function(b){o.current=Ya(b),n.current=void 0},[]),u=c.useCallback(function(b){d(b.type,ad(b),b.target,i(b,t.lockRef.current))},[]),g=c.useCallback(function(b){d(b.type,Ya(b),b.target,i(b,t.lockRef.current))},[]);c.useEffect(function(){return Cn.push(s),t.setCallbacks({onScrollCapture:u,onWheelCapture:u,onTouchMoveCapture:g}),document.addEventListener("wheel",m,vn),document.addEventListener("touchmove",m,vn),document.addEventListener("touchstart",p,vn),function(){Cn=Cn.filter(function(b){return b!==s}),document.removeEventListener("wheel",m,vn),document.removeEventListener("touchmove",m,vn),document.removeEventListener("touchstart",p,vn)}},[]);var y=t.removeScrollBar,f=t.inert;return c.createElement(c.Fragment,null,f?c.createElement(s,{styles:wS(a)}):null,y?c.createElement(uS,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function TS(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const SS=ZT(hm,CS);var vm=c.forwardRef(function(t,e){return c.createElement($s,Xt({},t,{ref:e,sideCar:SS}))});vm.classNames=$s.classNames;var DS=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},Tn=new WeakMap,Za=new WeakMap,Xa={},Dr=0,Cm=function(t){return t&&(t.host||Cm(t.parentNode))},AS=function(t,e){return e.map(function(o){if(t.contains(o))return o;var n=Cm(o);return n&&t.contains(n)?n:(console.error("aria-hidden",o,"in not contained inside",t,". Doing nothing"),null)}).filter(function(o){return!!o})},xS=function(t,e,o,n){var a=AS(e,Array.isArray(t)?t:[t]);Xa[o]||(Xa[o]=new WeakMap);var s=Xa[o],r=[],i=new Set,m=new Set(a),d=function(u){!u||i.has(u)||(i.add(u),d(u.parentNode))};a.forEach(d);var p=function(u){!u||m.has(u)||Array.prototype.forEach.call(u.children,function(g){if(i.has(g))p(g);else try{var y=g.getAttribute(n),f=y!==null&&y!=="false",b=(Tn.get(g)||0)+1,h=(s.get(g)||0)+1;Tn.set(g,b),s.set(g,h),r.push(g),b===1&&f&&Za.set(g,!0),h===1&&g.setAttribute(o,"true"),f||g.setAttribute(n,"true")}catch(w){console.error("aria-hidden: cannot operate on ",g,w)}})};return p(e),i.clear(),Dr++,function(){r.forEach(function(u){var g=Tn.get(u)-1,y=s.get(u)-1;Tn.set(u,g),s.set(u,y),g||(Za.has(u)||u.removeAttribute(n),Za.delete(u)),y||u.removeAttribute(o)}),Dr--,Dr||(Tn=new WeakMap,Tn=new WeakMap,Za=new WeakMap,Xa={})}},PS=function(t,e,o){o===void 0&&(o="data-aria-hidden");var n=Array.from(Array.isArray(t)?t:[t]),a=DS(t);return a?(n.push.apply(n,Array.from(a.querySelectorAll("[aria-live], script"))),xS(n,a,o,"aria-hidden")):function(){return null}},Gs="Dialog",[Tm]=nT(Gs),[ES,Ht]=Tm(Gs),Sm=t=>{const{__scopeDialog:e,children:o,open:n,defaultOpen:a,onOpenChange:s,modal:r=!0}=t,i=c.useRef(null),m=c.useRef(null),[d,p]=lT({prop:n,defaultProp:a??!1,onChange:s,caller:Gs});return l.jsx(ES,{scope:e,triggerRef:i,contentRef:m,contentId:uo(),titleId:uo(),descriptionId:uo(),open:d,onOpenChange:p,onOpenToggle:c.useCallback(()=>p(u=>!u),[p]),modal:r,children:o})};Sm.displayName=Gs;var Dm="DialogTrigger",RS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(Dm,o),s=bn(e,a.triggerRef);return l.jsx(Fa.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":wl(a.open),...n,ref:s,onClick:Mo(t.onClick,a.onOpenToggle)})});RS.displayName=Dm;var yl="DialogPortal",[IS,Am]=Tm(yl,{forceMount:void 0}),xm=t=>{const{__scopeDialog:e,forceMount:o,children:n,container:a}=t,s=Ht(yl,e);return l.jsx(IS,{scope:e,forceMount:o,children:c.Children.map(n,r=>l.jsx(Ks,{present:o||s.open,children:l.jsx(mm,{asChild:!0,container:a,children:r})}))})};xm.displayName=yl;var vs="DialogOverlay",Pm=c.forwardRef((t,e)=>{const o=Am(vs,t.__scopeDialog),{forceMount:n=o.forceMount,...a}=t,s=Ht(vs,t.__scopeDialog);return s.modal?l.jsx(Ks,{present:n||s.open,children:l.jsx(MS,{...a,ref:e})}):null});Pm.displayName=vs;var FS=Ia("DialogOverlay.RemoveScroll"),MS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(vs,o);return l.jsx(vm,{as:FS,allowPinchZoom:!0,shards:[a.contentRef],children:l.jsx(Fa.div,{"data-state":wl(a.open),...n,ref:e,style:{pointerEvents:"auto",...n.style}})})}),pn="DialogContent",Em=c.forwardRef((t,e)=>{const o=Am(pn,t.__scopeDialog),{forceMount:n=o.forceMount,...a}=t,s=Ht(pn,t.__scopeDialog);return l.jsx(Ks,{present:n||s.open,children:s.modal?l.jsx(OS,{...a,ref:e}):l.jsx(NS,{...a,ref:e})})});Em.displayName=pn;var OS=c.forwardRef((t,e)=>{const o=Ht(pn,t.__scopeDialog),n=c.useRef(null),a=bn(e,o.contentRef,n);return c.useEffect(()=>{const s=n.current;if(s)return PS(s)},[]),l.jsx(Rm,{...t,ref:a,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Mo(t.onCloseAutoFocus,s=>{var r;s.preventDefault(),(r=o.triggerRef.current)==null||r.focus()}),onPointerDownOutside:Mo(t.onPointerDownOutside,s=>{const r=s.detail.originalEvent,i=r.button===0&&r.ctrlKey===!0;(r.button===2||i)&&s.preventDefault()}),onFocusOutside:Mo(t.onFocusOutside,s=>s.preventDefault())})}),NS=c.forwardRef((t,e)=>{const o=Ht(pn,t.__scopeDialog),n=c.useRef(!1),a=c.useRef(!1);return l.jsx(Rm,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{var r,i;(r=t.onCloseAutoFocus)==null||r.call(t,s),s.defaultPrevented||(n.current||(i=o.triggerRef.current)==null||i.focus(),s.preventDefault()),n.current=!1,a.current=!1},onInteractOutside:s=>{var m,d;(m=t.onInteractOutside)==null||m.call(t,s),s.defaultPrevented||(n.current=!0,s.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const r=s.target;((d=o.triggerRef.current)==null?void 0:d.contains(r))&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&a.current&&s.preventDefault()}})}),Rm=c.forwardRef((t,e)=>{const{__scopeDialog:o,trapFocus:n,onOpenAutoFocus:a,onCloseAutoFocus:s,...r}=t,i=Ht(pn,o),m=c.useRef(null),d=bn(e,m);return VT(),l.jsxs(l.Fragment,{children:[l.jsx(um,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:a,onUnmountAutoFocus:s,children:l.jsx(cm,{role:"dialog",id:i.contentId,"aria-describedby":i.descriptionId,"aria-labelledby":i.titleId,"data-state":wl(i.open),...r,ref:d,onDismiss:()=>i.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(US,{titleId:i.titleId}),l.jsx(BS,{contentRef:m,descriptionId:i.descriptionId})]})]})}),kl="DialogTitle",jS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(kl,o);return l.jsx(Fa.h2,{id:a.titleId,...n,ref:e})});jS.displayName=kl;var Im="DialogDescription",LS=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(Im,o);return l.jsx(Fa.p,{id:a.descriptionId,...n,ref:e})});LS.displayName=Im;var Fm="DialogClose",_S=c.forwardRef((t,e)=>{const{__scopeDialog:o,...n}=t,a=Ht(Fm,o);return l.jsx(Fa.button,{type:"button",...n,ref:e,onClick:Mo(t.onClick,()=>a.onOpenChange(!1))})});_S.displayName=Fm;function wl(t){return t?"open":"closed"}var Mm="DialogTitleWarning",[uR,Om]=oT(Mm,{contentName:pn,titleName:kl,docsSlug:"dialog"}),US=({titleId:t})=>{const e=Om(Mm),o=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. - -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 c.useEffect(()=>{t&&(document.getElementById(t)||console.error(o))},[o,t]),null},zS="DialogDescriptionWarning",BS=({contentRef:t,descriptionId:e})=>{const n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Om(zS).contentName}}.`;return c.useEffect(()=>{var s;const a=(s=t.current)==null?void 0:s.getAttribute("aria-describedby");e&&a&&(document.getElementById(e)||console.warn(n))},[n,t,e]),null},VS=Sm,HS=xm,qS=Pm,WS=Em,KS=Symbol.for("react.lazy"),Cs=Ts[" use ".trim().toString()];function $S(t){return typeof t=="object"&&t!==null&&"then"in t}function Nm(t){return t!=null&&typeof t=="object"&&"$$typeof"in t&&t.$$typeof===KS&&"_payload"in t&&$S(t._payload)}function GS(t){const e=JS(t),o=c.forwardRef((n,a)=>{let{children:s,...r}=n;Nm(s)&&typeof Cs=="function"&&(s=Cs(s._payload));const i=c.Children.toArray(s),m=i.find(YS);if(m){const d=m.props.children,p=i.map(u=>u===m?c.Children.count(d)>1?c.Children.only(null):c.isValidElement(d)?d.props.children:null:u);return l.jsx(e,{...r,ref:a,children:c.isValidElement(d)?c.cloneElement(d,void 0,p):null})}return l.jsx(e,{...r,ref:a,children:s})});return o.displayName=`${t}.Slot`,o}function JS(t){const e=c.forwardRef((o,n)=>{let{children:a,...s}=o;if(Nm(a)&&typeof Cs=="function"&&(a=Cs(a._payload)),c.isValidElement(a)){const r=XS(a),i=ZS(s,a.props);return a.type!==c.Fragment&&(i.ref=n?jo(n,r):r),c.cloneElement(a,i)}return c.Children.count(a)>1?c.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var QS=Symbol("radix.slottable");function YS(t){return c.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===QS}function ZS(t,e){const o={...e};for(const n in e){const a=t[n],s=e[n];/^on[A-Z]/.test(n)?a&&s?o[n]=(...i)=>{const m=s(...i);return a(...i),m}:a&&(o[n]=a):n==="style"?o[n]={...a,...s}:n==="className"&&(o[n]=[a,s].filter(Boolean).join(" "))}return{...t,...o}}function XS(t){var n,a;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=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,o=e&&"isReactWarning"in e&&e.isReactWarning,o?t.props.ref:t.props.ref||t.ref)}var eD=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ho=eD.reduce((t,e)=>{const o=GS(`Primitive.${e}`),n=c.forwardRef((a,s)=>{const{asChild:r,...i}=a,m=r?o:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(m,{...i,ref:s})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{}),oa='[cmdk-group=""]',Ar='[cmdk-group-items=""]',tD='[cmdk-group-heading=""]',jm='[cmdk-item=""]',rd=`${jm}:not([aria-disabled="true"])`,mi="cmdk-item-select",Dn="data-value",oD=(t,e,o)=>tT(t,e,o),Lm=c.createContext(void 0),Ma=()=>c.useContext(Lm),_m=c.createContext(void 0),vl=()=>c.useContext(_m),Um=c.createContext(void 0),zm=c.forwardRef((t,e)=>{let o=An(()=>{var _,z;return{search:"",value:(z=(_=t.value)!=null?_:t.defaultValue)!=null?z:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),n=An(()=>new Set),a=An(()=>new Map),s=An(()=>new Map),r=An(()=>new Set),i=Bm(t),{label:m,children:d,value:p,onValueChange:u,filter:g,shouldFilter:y,loop:f,disablePointerSelection:b=!1,vimBindings:h=!0,...w}=t,C=uo(),v=uo(),T=uo(),k=c.useRef(null),S=mD();mn(()=>{if(p!==void 0){let _=p.trim();o.current.value=_,A.emit()}},[p]),mn(()=>{S(6,x)},[]);let A=c.useMemo(()=>({subscribe:_=>(r.current.add(_),()=>r.current.delete(_)),snapshot:()=>o.current,setState:(_,z,H)=>{var U,E,j,q;if(!Object.is(o.current[_],z)){if(o.current[_]=z,_==="search")M(),I(),S(1,B);else if(_==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let Y=document.getElementById(T);Y?Y.focus():(U=document.getElementById(C))==null||U.focus()}if(S(7,()=>{var Y;o.current.selectedItemId=(Y=W())==null?void 0:Y.id,A.emit()}),H||S(5,x),((E=i.current)==null?void 0:E.value)!==void 0){let Y=z??"";(q=(j=i.current).onValueChange)==null||q.call(j,Y);return}}A.emit()}},emit:()=>{r.current.forEach(_=>_())}}),[]),D=c.useMemo(()=>({value:(_,z,H)=>{var U;z!==((U=s.current.get(_))==null?void 0:U.value)&&(s.current.set(_,{value:z,keywords:H}),o.current.filtered.items.set(_,R(z,H)),S(2,()=>{I(),A.emit()}))},item:(_,z)=>(n.current.add(_),z&&(a.current.has(z)?a.current.get(z).add(_):a.current.set(z,new Set([_]))),S(3,()=>{M(),I(),o.current.value||B(),A.emit()}),()=>{s.current.delete(_),n.current.delete(_),o.current.filtered.items.delete(_);let H=W();S(4,()=>{M(),(H==null?void 0:H.getAttribute("id"))===_&&B(),A.emit()})}),group:_=>(a.current.has(_)||a.current.set(_,new Set),()=>{s.current.delete(_),a.current.delete(_)}),filter:()=>i.current.shouldFilter,label:m||t["aria-label"],getDisablePointerSelection:()=>i.current.disablePointerSelection,listId:C,inputId:T,labelId:v,listInnerRef:k}),[]);function R(_,z){var H,U;let E=(U=(H=i.current)==null?void 0:H.filter)!=null?U:oD;return _?E(_,o.current.search,z):0}function I(){if(!o.current.search||i.current.shouldFilter===!1)return;let _=o.current.filtered.items,z=[];o.current.filtered.groups.forEach(U=>{let E=a.current.get(U),j=0;E.forEach(q=>{let Y=_.get(q);j=Math.max(Y,j)}),z.push([U,j])});let H=k.current;O().sort((U,E)=>{var j,q;let Y=U.getAttribute("id"),be=E.getAttribute("id");return((j=_.get(be))!=null?j:0)-((q=_.get(Y))!=null?q:0)}).forEach(U=>{let E=U.closest(Ar);E?E.appendChild(U.parentElement===E?U:U.closest(`${Ar} > *`)):H.appendChild(U.parentElement===H?U:U.closest(`${Ar} > *`))}),z.sort((U,E)=>E[1]-U[1]).forEach(U=>{var E;let j=(E=k.current)==null?void 0:E.querySelector(`${oa}[${Dn}="${encodeURIComponent(U[0])}"]`);j==null||j.parentElement.appendChild(j)})}function B(){let _=O().find(H=>H.getAttribute("aria-disabled")!=="true"),z=_==null?void 0:_.getAttribute(Dn);A.setState("value",z||void 0)}function M(){var _,z,H,U;if(!o.current.search||i.current.shouldFilter===!1){o.current.filtered.count=n.current.size;return}o.current.filtered.groups=new Set;let E=0;for(let j of n.current){let q=(z=(_=s.current.get(j))==null?void 0:_.value)!=null?z:"",Y=(U=(H=s.current.get(j))==null?void 0:H.keywords)!=null?U:[],be=R(q,Y);o.current.filtered.items.set(j,be),be>0&&E++}for(let[j,q]of a.current)for(let Y of q)if(o.current.filtered.items.get(Y)>0){o.current.filtered.groups.add(j);break}o.current.filtered.count=E}function x(){var _,z,H;let U=W();U&&(((_=U.parentElement)==null?void 0:_.firstChild)===U&&((H=(z=U.closest(oa))==null?void 0:z.querySelector(tD))==null||H.scrollIntoView({block:"nearest"})),U.scrollIntoView({block:"nearest"}))}function W(){var _;return(_=k.current)==null?void 0:_.querySelector(`${jm}[aria-selected="true"]`)}function O(){var _;return Array.from(((_=k.current)==null?void 0:_.querySelectorAll(rd))||[])}function L(_){let z=O()[_];z&&A.setState("value",z.getAttribute(Dn))}function N(_){var z;let H=W(),U=O(),E=U.findIndex(q=>q===H),j=U[E+_];(z=i.current)!=null&&z.loop&&(j=E+_<0?U[U.length-1]:E+_===U.length?U[0]:U[E+_]),j&&A.setState("value",j.getAttribute(Dn))}function V(_){let z=W(),H=z==null?void 0:z.closest(oa),U;for(;H&&!U;)H=_>0?uD(H,oa):pD(H,oa),U=H==null?void 0:H.querySelector(rd);U?A.setState("value",U.getAttribute(Dn)):N(_)}let K=()=>L(O().length-1),F=_=>{_.preventDefault(),_.metaKey?K():_.altKey?V(1):N(1)},ae=_=>{_.preventDefault(),_.metaKey?L(0):_.altKey?V(-1):N(-1)};return c.createElement(Ho.div,{ref:e,tabIndex:-1,...w,"cmdk-root":"",onKeyDown:_=>{var z;(z=w.onKeyDown)==null||z.call(w,_);let H=_.nativeEvent.isComposing||_.keyCode===229;if(!(_.defaultPrevented||H))switch(_.key){case"n":case"j":{h&&_.ctrlKey&&F(_);break}case"ArrowDown":{F(_);break}case"p":case"k":{h&&_.ctrlKey&&ae(_);break}case"ArrowUp":{ae(_);break}case"Home":{_.preventDefault(),L(0);break}case"End":{_.preventDefault(),K();break}case"Enter":{_.preventDefault();let U=W();if(U){let E=new Event(mi);U.dispatchEvent(E)}}}}},c.createElement("label",{"cmdk-label":"",htmlFor:D.inputId,id:D.labelId,style:fD},m),Js(t,_=>c.createElement(_m.Provider,{value:A},c.createElement(Lm.Provider,{value:D},_))))}),nD=c.forwardRef((t,e)=>{var o,n;let a=uo(),s=c.useRef(null),r=c.useContext(Um),i=Ma(),m=Bm(t),d=(n=(o=m.current)==null?void 0:o.forceMount)!=null?n:r==null?void 0:r.forceMount;mn(()=>{if(!d)return i.item(a,r==null?void 0:r.id)},[d]);let p=Vm(a,s,[t.value,t.children,s],t.keywords),u=vl(),g=Lo(S=>S.value&&S.value===p.current),y=Lo(S=>d||i.filter()===!1?!0:S.search?S.filtered.items.get(a)>0:!0);c.useEffect(()=>{let S=s.current;if(!(!S||t.disabled))return S.addEventListener(mi,f),()=>S.removeEventListener(mi,f)},[y,t.onSelect,t.disabled]);function f(){var S,A;b(),(A=(S=m.current).onSelect)==null||A.call(S,p.current)}function b(){u.setState("value",p.current,!0)}if(!y)return null;let{disabled:h,value:w,onSelect:C,forceMount:v,keywords:T,...k}=t;return c.createElement(Ho.div,{ref:jo(s,e),...k,id:a,"cmdk-item":"",role:"option","aria-disabled":!!h,"aria-selected":!!g,"data-disabled":!!h,"data-selected":!!g,onPointerMove:h||i.getDisablePointerSelection()?void 0:b,onClick:h?void 0:f},t.children)}),aD=c.forwardRef((t,e)=>{let{heading:o,children:n,forceMount:a,...s}=t,r=uo(),i=c.useRef(null),m=c.useRef(null),d=uo(),p=Ma(),u=Lo(y=>a||p.filter()===!1?!0:y.search?y.filtered.groups.has(r):!0);mn(()=>p.group(r),[]),Vm(r,i,[t.value,t.heading,m]);let g=c.useMemo(()=>({id:r,forceMount:a}),[a]);return c.createElement(Ho.div,{ref:jo(i,e),...s,"cmdk-group":"",role:"presentation",hidden:u?void 0:!0},o&&c.createElement("div",{ref:m,"cmdk-group-heading":"","aria-hidden":!0,id:d},o),Js(t,y=>c.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":o?d:void 0},c.createElement(Um.Provider,{value:g},y))))}),sD=c.forwardRef((t,e)=>{let{alwaysRender:o,...n}=t,a=c.useRef(null),s=Lo(r=>!r.search);return!o&&!s?null:c.createElement(Ho.div,{ref:jo(a,e),...n,"cmdk-separator":"",role:"separator"})}),rD=c.forwardRef((t,e)=>{let{onValueChange:o,...n}=t,a=t.value!=null,s=vl(),r=Lo(d=>d.search),i=Lo(d=>d.selectedItemId),m=Ma();return c.useEffect(()=>{t.value!=null&&s.setState("search",t.value)},[t.value]),c.createElement(Ho.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:a?t.value:r,onChange:d=>{a||s.setState("search",d.target.value),o==null||o(d.target.value)}})}),iD=c.forwardRef((t,e)=>{let{children:o,label:n="Suggestions",...a}=t,s=c.useRef(null),r=c.useRef(null),i=Lo(d=>d.selectedItemId),m=Ma();return c.useEffect(()=>{if(r.current&&s.current){let d=r.current,p=s.current,u,g=new ResizeObserver(()=>{u=requestAnimationFrame(()=>{let y=d.offsetHeight;p.style.setProperty("--cmdk-list-height",y.toFixed(1)+"px")})});return g.observe(d),()=>{cancelAnimationFrame(u),g.unobserve(d)}}},[]),c.createElement(Ho.div,{ref:jo(s,e),...a,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":i,"aria-label":n,id:m.listId},Js(t,d=>c.createElement("div",{ref:jo(r,m.listInnerRef),"cmdk-list-sizer":""},d)))}),lD=c.forwardRef((t,e)=>{let{open:o,onOpenChange:n,overlayClassName:a,contentClassName:s,container:r,...i}=t;return c.createElement(VS,{open:o,onOpenChange:n},c.createElement(HS,{container:r},c.createElement(qS,{"cmdk-overlay":"",className:a}),c.createElement(WS,{"aria-label":t.label,"cmdk-dialog":"",className:s},c.createElement(zm,{ref:e,...i}))))}),cD=c.forwardRef((t,e)=>Lo(o=>o.filtered.count===0)?c.createElement(Ho.div,{ref:e,...t,"cmdk-empty":"",role:"presentation"}):null),dD=c.forwardRef((t,e)=>{let{progress:o,children:n,label:a="Loading...",...s}=t;return c.createElement(Ho.div,{ref:e,...s,"cmdk-loading":"",role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a},Js(t,r=>c.createElement("div",{"aria-hidden":!0},r)))}),qo=Object.assign(zm,{List:iD,Item:nD,Input:rD,Group:aD,Separator:sD,Dialog:lD,Empty:cD,Loading:dD});function uD(t,e){let o=t.nextElementSibling;for(;o;){if(o.matches(e))return o;o=o.nextElementSibling}}function pD(t,e){let o=t.previousElementSibling;for(;o;){if(o.matches(e))return o;o=o.previousElementSibling}}function Bm(t){let e=c.useRef(t);return mn(()=>{e.current=t}),e}var mn=typeof window>"u"?c.useEffect:c.useLayoutEffect;function An(t){let e=c.useRef();return e.current===void 0&&(e.current=t()),e}function Lo(t){let e=vl(),o=()=>t(e.snapshot());return c.useSyncExternalStore(e.subscribe,o,o)}function Vm(t,e,o,n=[]){let a=c.useRef(),s=Ma();return mn(()=>{var r;let i=(()=>{var d;for(let p of o){if(typeof p=="string")return p.trim();if(typeof p=="object"&&"current"in p)return p.current?(d=p.current.textContent)==null?void 0:d.trim():a.current}})(),m=n.map(d=>d.trim());s.value(t,i,m),(r=e.current)==null||r.setAttribute(Dn,i),a.current=i}),a}var mD=()=>{let[t,e]=c.useState(),o=An(()=>new Map);return mn(()=>{o.current.forEach(n=>n()),o.current=new Map},[t]),(n,a)=>{o.current.set(n,a),e({})}};function gD(t){let e=t.type;return typeof e=="function"?e(t.props):"render"in e?e.render(t.props):t}function Js({asChild:t,children:e},o){return t&&c.isValidElement(e)?c.cloneElement(gD(e),{ref:e.ref},o(e.props.children)):o(e)}var fD={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function hD({className:t,...e}){return l.jsx(qo,{className:Ie("flex size-full flex-col overflow-hidden rounded-xl bg-popover text-popover-foreground shadow-lg",t),...e})}function bD({className:t,children:e,onOpenChange:o,...n}){return l.jsxs(qo.Dialog,{className:Ie("fixed inset-0 z-50 flex items-start justify-center pt-[15vh]",t),onOpenChange:o,...n,children:[l.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm",onClick:()=>o==null?void 0:o(!1)}),l.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:l.jsx(hD,{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 yD({className:t,...e}){return l.jsxs("div",{className:"flex items-center border-b px-4","cmdk-input-wrapper":"",children:[l.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:[l.jsx("circle",{cx:"11",cy:"11",r:"8"}),l.jsx("path",{d:"m21 21-4.3-4.3"})]}),l.jsx(qo.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 kD({className:t,...e}){return l.jsx(qo.List,{className:Ie("max-h-80 overflow-y-auto overscroll-contain p-1",t),...e})}function wD({...t}){return l.jsx(qo.Empty,{className:"py-6 text-center text-sm text-muted-foreground",...t})}function na({className:t,...e}){return l.jsx(qo.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 vD({className:t,...e}){return l.jsx(qo.Separator,{className:Ie("-mx-1 h-px bg-border",t),...e})}function Sn({className:t,...e}){return l.jsx(qo.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 CD(){const[t,e]=c.useState(!1);return c.useEffect(()=>{function o(a){a.key==="k"&&(a.metaKey||a.ctrlKey)&&(a.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 TD({open:t,setOpen:e}){const o=nm(),{resolvedTheme:n,setTheme:a}=vi(),{t:s}=bt(),r=c.useCallback(u=>{e(!1),o.push(u)},[o]),i=[{label:s("layout.posts"),href:"/posts",icon:Ss,keywords:["blog","article"]},{label:s("layout.categories"),href:"/categories",icon:ou},{label:s("layout.tags"),href:"/tags",icon:xi},{label:s("layout.comments"),href:"/comments",icon:du},{label:s("layout.media"),href:"/media",icon:Ti,keywords:["upload","image","file"]},{label:s("layout.pages"),href:"/pages",icon:ru},{label:s("layout.reusableBlocks"),href:"/reusable-blocks",icon:Ci}],m=[{label:s("layout.contentTypes"),href:"/content-types",icon:au,keywords:["cms","schema","model"]},{label:s("layout.plugins"),href:"/plugins",icon:Si,keywords:["extension","addon"]}],d=[{label:s("flows.title"),href:"/flows",icon:Pi,keywords:["flow","automation","canvas"]}],p=[{label:s("layout.users"),href:"/users",icon:hu,keywords:["member","account"]},{label:s("layout.rolesPermissions"),href:"/rbac",icon:mu,keywords:["role","permission","rbac","admin"]},{label:s("layout.cron"),href:"/crons",icon:eu,keywords:["schedule","job","task"]},{label:s("layout.jobs"),href:"/jobs",icon:iu,keywords:["queue","worker","job","task"]},{label:s("layout.tenants"),href:"/tenants",icon:Yd,keywords:["tenant","multi"]},{label:s("layout.webhooks"),href:"/webhooks",icon:yu},{label:s("layout.apiTokens"),href:"/tokens",icon:Ds,keywords:["api","token","key"]},{label:s("layout.workflows"),href:"/workflows",icon:sb,keywords:["automation","flow"]},{label:s("layout.auditLog"),href:"/audit",icon:Xd,keywords:["log","history"]},{label:s("layout.options"),href:"/options",icon:Ai,keywords:["setting","config","preference"]}];return l.jsxs(bD,{open:t,onOpenChange:e,children:[l.jsx(yD,{placeholder:s("command.placeholder")}),l.jsxs(kD,{children:[l.jsx(wD,{children:s("command.noResults")}),l.jsx(na,{heading:s("layout.content"),children:i.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(na,{heading:s("layout.extension"),children:m.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(na,{heading:s("flows.title"),children:d.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(na,{heading:s("layout.system"),children:p.map(u=>l.jsxs(Sn,{onSelect:()=>r(u.href),keywords:u.keywords,children:[l.jsx(u.icon,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:u.label})]},u.href))}),l.jsx(vD,{}),l.jsxs(na,{heading:s("command.actions"),children:[l.jsxs(Sn,{onSelect:()=>{e(!1),r("/dashboard")},children:[l.jsx(su,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:s("layout.dashboard")})]}),l.jsxs(Sn,{onSelect:()=>{e(!1),a(n==="dark"?"light":"dark")},children:[n==="dark"?l.jsx(fu,{className:"size-4 text-muted-foreground"}):l.jsx(uu,{className:"size-4 text-muted-foreground"}),l.jsx("span",{children:s(n==="dark"?"command.switchToLight":"command.switchToDark")})]})]})]})]})}function SD(){const{open:t,setOpen:e}=CD();return l.jsx(TD,{open:t,setOpen:e})}function DD({children:t}){const[e]=c.useState(()=>new ff({defaultOptions:{queries:{staleTime:0,gcTime:0,refetchOnMount:"always",retry:1}}})),o=sm();return c.useEffect(()=>{document.documentElement.dir=o,document.documentElement.lang=o==="rtl"?"ar":""},[o]),l.jsx(hf,{client:e,children:l.jsxs(If,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:[l.jsx(Xp,{children:t}),l.jsx(SD,{}),l.jsx(xy,{})]})})}const AD=c.createContext(void 0);function Cl(t=!1){const e=c.useContext(AD);if(e===void 0&&!t)throw new Error(st(16));return e}function xD(t){const{focusableWhenDisabled:e,disabled:o,composite:n=!1,tabIndex:a=0,isNativeButton:s}=t,r=n&&e!==!1,i=n&&e===!1;return{props:c.useMemo(()=>{const d={onKeyDown(p){o&&e&&p.key!=="Tab"&&p.preventDefault()}};return n||(d.tabIndex=a,!s&&o&&(d.tabIndex=e?a:-1)),(s&&(e||r)||!s&&o)&&(d["aria-disabled"]=o),s&&(!e||i)&&(d.disabled=o),d},[n,o,e,r,i,s,a])}}function Oa(t={}){const{disabled:e=!1,focusableWhenDisabled:o,tabIndex:n=0,native:a=!0,composite:s}=t,r=c.useRef(null),i=Cl(!0),m=s??i!==void 0,{props:d}=xD({focusableWhenDisabled:o,disabled:e,composite:m,tabIndex:n,isNativeButton:a}),p=c.useCallback(()=>{const y=r.current;xr(y)&&m&&e&&d.disabled===void 0&&y.disabled&&(y.disabled=!1)},[e,d.disabled,m]);he(p,[p]);const u=c.useCallback((y={})=>{const{onClick:f,onMouseDown:b,onKeyUp:h,onKeyDown:w,onPointerDown:C,...v}=y;return St({onClick(T){if(e){T.preventDefault();return}f==null||f(T)},onMouseDown(T){e||b==null||b(T)},onKeyDown(T){if(e||(fs(T),w==null||w(T),T.baseUIHandlerPrevented))return;const k=T.target===T.currentTarget,S=T.currentTarget,A=xr(S),D=!a&&PD(S),R=k&&(a?A:!D),I=T.key==="Enter",B=T.key===" ",M=S.getAttribute("role"),x=(M==null?void 0:M.startsWith("menuitem"))||M==="option"||M==="gridcell";if(k&&m&&B){if(T.defaultPrevented&&x)return;T.preventDefault(),D||a&&A?(S.click(),T.preventBaseUIHandler()):R&&(f==null||f(T),T.preventBaseUIHandler());return}R&&(!a&&(B||I)&&T.preventDefault(),!a&&I&&(f==null||f(T)))},onKeyUp(T){if(!e){if(fs(T),h==null||h(T),T.target===T.currentTarget&&a&&m&&xr(T.currentTarget)&&T.key===" "){T.preventDefault();return}T.baseUIHandlerPrevented||T.target===T.currentTarget&&!a&&!m&&T.key===" "&&(f==null||f(T))}},onPointerDown(T){if(e){T.preventDefault();return}C==null||C(T)}},a?{type:"button"}:{role:"button"},d,v)},[e,d,m,a]),g=De(y=>{r.current=y,p()});return{getButtonProps:u,buttonRef:g}}function xr(t){return He(t)&&t.tagName==="BUTTON"}function PD(t){return!!((t==null?void 0:t.tagName)==="A"&&(t!=null&&t.href))}const ED=c.forwardRef(function(e,o){const{render:n,className:a,disabled:s=!1,focusableWhenDisabled:r=!1,nativeButton:i=!0,style:m,...d}=e,{getButtonProps:p,buttonRef:u}=Oa({disabled:s,focusableWhenDisabled:r,native:i});return tt("button",e,{state:{disabled:s},ref:[o,u],props:[d,p]})}),id=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,ld=_p,Hm=(t,e)=>o=>{var n;if((e==null?void 0:e.variants)==null)return ld(t,o==null?void 0:o.class,o==null?void 0:o.className);const{variants:a,defaultVariants:s}=e,r=Object.keys(a).map(d=>{const p=o==null?void 0:o[d],u=s==null?void 0:s[d];if(p===null)return null;const g=id(p)||id(u);return a[d][g]}),i=o&&Object.entries(o).reduce((d,p)=>{let[u,g]=p;return g===void 0||(d[u]=g),d},{}),m=e==null||(n=e.compoundVariants)===null||n===void 0?void 0:n.reduce((d,p)=>{let{class:u,className:g,...y}=p;return Object.entries(y).every(f=>{let[b,h]=f;return Array.isArray(h)?h.includes({...s,...i}[b]):{...s,...i}[b]===h})?[...d,u,g]:d},[]);return ld(t,r,m,o==null?void 0:o.class,o==null?void 0:o.className)},RD=Hm("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 Gn({className:t,variant:e="default",size:o="default",...n}){return l.jsx(ED,{"data-slot":"button",className:Ie(RD({variant:e,size:o,className:t})),...n})}class qm extends c.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?l.jsx("div",{className:"flex min-h-[50vh] items-center justify-center p-8",children:l.jsxs("div",{className:"text-center space-y-4 max-w-md",children:[l.jsx("div",{className:"text-4xl",children:"💥"}),l.jsx("h2",{className:"text-lg font-semibold",children:"Something went wrong"}),l.jsx("p",{className:"text-sm text-muted-foreground break-all",children:(e=this.state.error)==null?void 0:e.message}),l.jsx(Gn,{onClick:()=>{this.setState({hasError:!1,error:null})},children:"Try Again"})]})}):this.props.children}}function Tl({href:t,to:e,...o}){return l.jsx(Og,{to:e??t??"/",...o})}function ID(t){return tt(t.defaultTagName??"div",t,t)}const Pr=768;function FD(){const[t,e]=c.useState(void 0);return c.useEffect(()=>{const o=window.matchMedia(`(max-width: ${Pr-1}px)`),n=()=>{e(window.innerWidtho.removeEventListener("change",n)},[]),!!t}const MD=c.forwardRef(function(e,o){const{className:n,render:a,orientation:s="horizontal",style:r,...i}=e;return tt("div",e,{state:{orientation:s},ref:o,props:[{role:"separator","aria-orientation":s},i]})}),Wm=c.createContext(!1),Km=c.createContext(void 0);function yn(t){const e=c.useContext(Km);if(t===!1&&e===void 0)throw new Error(st(27));return e}const OD={...gn,...Ea},ND=c.forwardRef(function(e,o){const{render:n,className:a,style:s,forceRender:r=!1,...i}=e,{store:m}=yn(),d=m.useState("open"),p=m.useState("nested"),u=m.useState("mounted"),g=m.useState("transitionStatus");return tt("div",e,{state:{open:d,transitionStatus:g},ref:[m.context.backdropRef,o],stateAttributesMapping:OD,props:[{role:"presentation",hidden:!u,style:{userSelect:"none",WebkitUserSelect:"none"}},i],enabled:r||!p})}),jD=c.forwardRef(function(e,o){const{render:n,className:a,style:s,disabled:r=!1,nativeButton:i=!0,...m}=e,{store:d}=yn(),p=d.useState("open"),{getButtonProps:u,buttonRef:g}=Oa({disabled:r,native:i}),y={disabled:r};function f(b){p&&d.setOpen(!1,Me(ju,b.nativeEvent))}return tt("button",e,{state:y,ref:[o,g],props:[{onClick:f},m,u]})}),LD=c.forwardRef(function(e,o){const{render:n,className:a,style:s,id:r,...i}=e,{store:m}=yn(),d=fn(r);return m.useSyncedValueWithCleanup("descriptionElementId",d),tt("p",e,{ref:o,props:[{id:d},i]})});let _D=(function(t){return t.nestedDialogs="--nested-dialogs",t})({}),UD=(function(t){return t[t.open=Jo.open]="open",t[t.closed=Jo.closed]="closed",t[t.startingStyle=Jo.startingStyle]="startingStyle",t[t.endingStyle=Jo.endingStyle]="endingStyle",t.nested="data-nested",t.nestedDialogOpen="data-nested-dialog-open",t})({});const $m=c.createContext(void 0);function zD(){const t=c.useContext($m);if(t===void 0)throw new Error(st(26));return t}const Gm="ArrowUp",Jm="ArrowDown",Qm="ArrowLeft",Ym="ArrowRight",Sl="Home",Dl="End",BD=new Set([Qm,Ym]),pR=new Set([Qm,Ym,Sl,Dl]),VD=new Set([Gm,Jm]),mR=new Set([Gm,Jm,Sl,Dl]),HD=new Set([...BD,...VD]),Al=new Set([...HD,Sl,Dl]),qD="Shift",WD="Control",KD="Alt",$D="Meta",gR=new Set([qD,WD,KD,$D]);function GD(t){return He(t)&&t.tagName==="INPUT"}function fR(t){return!!(GD(t)&&t.selectionStart!=null||He(t)&&t.tagName==="TEXTAREA")}function hR(t,e,o,n){if(!t||!e||!e.scrollTo)return;let a=t.scrollLeft,s=t.scrollTop;const r=t.clientWidtht.scrollLeft+t.clientWidth-d.scrollPaddingRight?a=m+e.offsetWidth+p.scrollMarginRight-t.clientWidth+d.scrollPaddingRight:m-p.scrollMarginLeftt.scrollLeft+t.clientWidth-d.scrollPaddingRight&&(a=m+e.offsetWidth+p.scrollMarginRight-t.clientWidth+d.scrollPaddingRight))}if(i&&n!=="horizontal"){const m=cd(t,e,"top"),d=es(t),p=es(e);m-p.scrollMarginTopt.scrollTop+t.clientHeight-d.scrollPaddingBottom&&(s=m+e.offsetHeight+p.scrollMarginBottom-t.clientHeight+d.scrollPaddingBottom)}t.scrollTo({left:a,top:s,behavior:"auto"})}function cd(t,e,o){const n=o==="left"?"offsetLeft":"offsetTop";let a=0;for(;e.offsetParent&&(a+=e[n],e.offsetParent!==t);)e=e.offsetParent;return a}function es(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 JD={...gn,...Ea,nestedDialogOpen(t){return t?{[UD.nestedDialogOpen]:""}:null}},QD=c.forwardRef(function(e,o){const{render:n,className:a,style:s,finalFocus:r,initialFocus:i,...m}=e,{store:d}=yn(),p=d.useState("descriptionElementId"),u=d.useState("disablePointerDismissal"),g=d.useState("floatingRootContext"),y=d.useState("popupProps"),f=d.useState("modal"),b=d.useState("mounted"),h=d.useState("nested"),w=d.useState("nestedOpenDialogCount"),C=d.useState("open"),v=d.useState("openMethod"),T=d.useState("titleElementId"),k=d.useState("transitionStatus"),S=d.useState("role"),A=g.useState("floatingId"),D=m.id??A;zD(),Ra({open:C,ref:d.context.popupRef,onComplete(){var O,L;C&&((L=(O=d.context).onOpenChangeComplete)==null||L.call(O,!0))}});function R(O){return O==="touch"?d.context.popupRef.current:!0}const I=i===void 0?R:i,B=w>0,M=d.useStateSetter("popupElement"),W=tt("div",e,{state:{open:C,nested:h,transitionStatus:k,nestedDialogOpen:B},props:[y,{id:D,"aria-labelledby":T??void 0,"aria-describedby":p??void 0,role:S,...Qn,hidden:!b,onKeyDown(O){Al.has(O.key)&&O.stopPropagation()},style:{[_D.nestedDialogs]:w}},m],ref:[o,d.context.popupRef,M],stateAttributesMapping:JD});return l.jsx(Qi,{context:g,openInteractionType:v,disabled:!b,closeOnFocusOut:!u,initialFocus:I,returnFocus:r,modal:f!==!1,restoreFocus:"popup",children:W})}),xl=c.forwardRef(function(e,o){const{cutout:n,...a}=e;let s;if(n){const r=n.getBoundingClientRect();s=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${r.left}px ${r.top}px,${r.left}px ${r.bottom}px,${r.right}px ${r.bottom}px,${r.right}px ${r.top}px,${r.left}px ${r.top}px)`}return l.jsx("div",{ref:o,role:"presentation","data-base-ui-inert":"",...a,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:s}})}),YD=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e,{store:s}=yn(),r=s.useState("mounted"),i=s.useState("modal"),m=s.useState("open");return r||n?l.jsx($m.Provider,{value:n,children:l.jsxs(Ki,{ref:o,...a,children:[r&&i===!0&&l.jsx(xl,{ref:s.context.internalBackdropRef,inert:ml(!m)}),e.children]})}):null});let dd={},ud={},pd="";function ZD(t){if(typeof document>"u")return!1;const e=Le(t);return Xe(e).innerWidth-e.documentElement.clientWidth>0}function XD(t){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const o=Le(t),n=o.documentElement,a=o.body,s=Uo(n)?n:a,r=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=r,n.style.scrollbarGutter=i,m===d}function eA(t){const e=Le(t),o=e.documentElement,n=e.body,a=Uo(o)?o:n,s={overflowY:a.style.overflowY,overflowX:a.style.overflowX};return Object.assign(a.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(a.style,s)}}function tA(t){var y;const e=Le(t),o=e.documentElement,n=e.body,a=Xe(o);let s=0,r=0,i=!1;const m=Zt.create();if(Su&&(((y=a.visualViewport)==null?void 0:y.scale)??1)!==1)return()=>{};function d(){const f=a.getComputedStyle(o),b=a.getComputedStyle(n),C=(f.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";s=o.scrollTop,r=o.scrollLeft,dd={scrollbarGutter:o.style.scrollbarGutter,overflowY:o.style.overflowY,overflowX:o.style.overflowX},pd=o.style.scrollBehavior,ud={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,T=o.scrollWidth>o.clientWidth,k=f.overflowY==="scroll"||b.overflowY==="scroll",S=f.overflowX==="scroll"||b.overflowX==="scroll",A=Math.max(0,a.innerWidth-n.clientWidth),D=Math.max(0,a.innerHeight-n.clientHeight),R=parseFloat(b.marginTop)+parseFloat(b.marginBottom),I=parseFloat(b.marginLeft)+parseFloat(b.marginRight),B=Uo(o)?o:n;if(i=XD(t),i){o.style.scrollbarGutter=C,B.style.overflowY="hidden",B.style.overflowX="hidden";return}Object.assign(o.style,{scrollbarGutter:C,overflowY:"hidden",overflowX:"hidden"}),(v||k)&&(o.style.overflowY="scroll"),(T||S)&&(o.style.overflowX="scroll"),Object.assign(n.style,{position:"relative",height:R||D?`calc(100dvh - ${R+D}px)`:"100dvh",width:I||A?`calc(100vw - ${I+A}px)`:"100vw",boxSizing:"border-box",overflow:"hidden",scrollBehavior:"unset"}),n.scrollTop=s,n.scrollLeft=r,o.setAttribute("data-base-ui-scroll-locked",""),o.style.scrollBehavior="unset"}function p(){Object.assign(o.style,dd),Object.assign(n.style,ud),i||(o.scrollTop=s,o.scrollLeft=r,o.removeAttribute("data-base-ui-scroll-locked"),o.style.scrollBehavior=pd)}function u(){p(),m.request(d)}d();const g=Fe(a,"resize",u);return()=>{m.cancel(),p(),typeof a.removeEventListener=="function"&&g()}}class oA{constructor(){Ue(this,"lockCount",0);Ue(this,"restore",null);Ue(this,"timeoutLock",_t.create());Ue(this,"timeoutUnlock",_t.create());Ue(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});Ue(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,a=Xe(n).getComputedStyle(n).overflowY;if(a==="hidden"||a==="clip"){this.restore=Oi;return}const s=Du||!ZD(e);this.restore=s?eA(e):tA(e)}}const nA=new oA;function Zm(t=!0,e=null){he(()=>{if(t)return nA.acquire(e)},[t,e])}function aA(t){const{store:e,parentContext:o,actionsRef:n,isDrawer:a}=t,s=e.useState("open");Ap(e,s),Ls(e);const{forceUnmount:r}=_s(s,e),i=c.useCallback(()=>{e.setOpen(!1,Me(Fs))},[e]);return c.useImperativeHandle(n,()=>({unmount:r,close:i}),[r,i]),{parentContext:o,isDrawer:a}}function sA({store:t,dialogRoot:e}){const{parentContext:o,isDrawer:n}=e,a=t.useState("open"),s=t.useState("disablePointerDismissal"),r=t.useState("modal"),i=t.useState("popupElement"),m=t.useState("floatingRootContext"),[d,p]=c.useState(0),[u,g]=c.useState(0),y=d===0,f=Os(m,{outsidePressEvent(){return t.context.internalBackdropRef.current||t.context.backdropRef.current?"intentional":{mouse:r==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(C){if(!t.context.outsidePressEnabledRef.current||"button"in C&&C.button!==0||"touches"in C&&C.touches.length!==1)return!1;const v=ft(C);if(y&&!s){const T=v;return r&&(t.context.internalBackdropRef.current||t.context.backdropRef.current)?t.context.internalBackdropRef.current===T||t.context.backdropRef.current===T||Se(T,i)&&!(T!=null&&T.hasAttribute("data-base-ui-portal")):!0}return!1},escapeKey:y});Zm(a&&r===!0,i),t.useContextCallback("onNestedDialogOpen",(C,v)=>{p(C),g(v)}),t.useContextCallback("onNestedDialogClose",()=>{p(0),g(0)}),c.useEffect(()=>(o!=null&&o.onNestedDialogOpen&&a&&o.onNestedDialogOpen(d+1,u+(n?1:0)),o!=null&&o.onNestedDialogClose&&!a&&o.onNestedDialogClose(),()=>{o!=null&&o.onNestedDialogClose&&a&&o.onNestedDialogClose()}),[n,a,d,u,o]);const b=f.reference??Je,h=f.trigger??Je,w=c.useMemo(()=>St(Qn,f.floating),[f.floating]);return Us(t,{activeTriggerProps:b,inactiveTriggerProps:h,popupProps:w,nestedOpenDialogCount:d,nestedOpenDrawerCount:u}),null}const rA={...Bs,modal:ie(t=>t.modal),nested:ie(t=>t.nested),nestedOpenDialogCount:ie(t=>t.nestedOpenDialogCount),nestedOpenDrawerCount:ie(t=>t.nestedOpenDrawerCount),disablePointerDismissal:ie(t=>t.disablePointerDismissal),openMethod:ie(t=>t.openMethod),descriptionElementId:ie(t=>t.descriptionElementId),titleElementId:ie(t=>t.titleElementId),viewportElement:ie(t=>t.viewportElement),role:ie(t=>t.role)};class Pl extends Pa{constructor(o,n,a=!1){const s=new Yn,r=iA(o);r.floatingRootContext=nl(s,n,a);super(r,{popupRef:c.createRef(),backdropRef:c.createRef(),internalBackdropRef:c.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:s,onOpenChange:void 0,onOpenChangeComplete:void 0},rA);Ue(this,"setOpen",(o,n)=>{var s,r;if(n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!o&&n.trigger==null&&this.state.activeTriggerId!=null&&(n.trigger=this.state.activeTriggerElement??void 0),(r=(s=this.context).onOpenChange)==null||r.call(s,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const a={open:o};tl(a,o,n.trigger),this.update(a)})}static useStore(o,n){return el(o,(s,r)=>new Pl(n,s,r),!0).store}}function iA(t={}){return{...zs(),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 lA(t,e="dialog"){const{children:o,open:n,defaultOpen:a=!1,onOpenChange:s,onOpenChangeComplete:r,disablePointerDismissal:i=!1,modal:m=!0,actionsRef:d,handle:p,triggerId:u,defaultTriggerId:g=null}=t,y=e==="drawer",f=e==="alert-dialog",b=f?!0:m,h=f||i,w=f?"alertdialog":"dialog",C=yn(!0),T={modal:b,disablePointerDismissal:h,nested:!!C,role:w},k=Pl.useStore(p==null?void 0:p.store,{open:a,openProp:n,activeTriggerId:g,triggerIdProp:u,...T});As(()=>{const M=n===void 0&&k.state.open===!1&&a===!0?{open:!0,activeTriggerId:g}:null;f?k.update(M?{...T,...M}:T):M&&k.update(M)}),k.useControlledProp("openProp",n),k.useControlledProp("triggerIdProp",u),k.useSyncedValues(T),k.useContextCallback("onOpenChange",s),k.useContextCallback("onOpenChangeComplete",r);const S=k.useState("open"),A=k.useState("mounted"),D=k.useState("payload"),R=aA({store:k,actionsRef:d,parentContext:C==null?void 0:C.store.context,isDrawer:y}),I=S||A,B=c.useMemo(()=>({store:k}),[k]);return l.jsx(Wm.Provider,{value:!1,children:l.jsxs(Km.Provider,{value:B,children:[I&&l.jsx(sA,{store:k,dialogRoot:R}),typeof o=="function"?o({payload:D}):o]})})}function cA(t){const e=c.useContext(Wm)?"drawer":"dialog";return lA(t,e)}const dA=c.forwardRef(function(e,o){const{render:n,className:a,style:s,id:r,...i}=e,{store:m}=yn(),d=fn(r);return m.useSyncedValueWithCleanup("titleElementId",d),tt("h2",e,{ref:o,props:[{id:d},i]})});function uA(t){const e=c.useRef(""),o=c.useCallback(a=>{a.defaultPrevented||(e.current=a.pointerType,t(a,a.pointerType))},[t]);return{onClick:c.useCallback(a=>{if(a.detail===0){t(a,"keyboard");return}"pointerType"in a?t(a,a.pointerType):t(a,e.current),e.current=""},[t]),onPointerDown:o}}function pA(t,e){const o=c.useRef(t),n=De(e);he(()=>{o.current!==t&&n(o.current)},[t,n]),he(()=>{o.current=t},[t])}function Xm(t,e){const o=De((s,r)=>{(typeof t=="function"?t():t)||e(r||(Du?"touch":""))}),{onClick:n,onPointerDown:a}=uA(o);return c.useMemo(()=>({onClick:n,onPointerDown:a}),[n,a])}function mA(t){const[e,o]=c.useState(null),n=Xm(t,o);return pA(t,a=>{a&&!t&&o(null)}),c.useMemo(()=>({openMethod:e,triggerProps:n}),[e,n])}function gA({...t}){return l.jsx(cA,{"data-slot":"sheet",...t})}function fA({...t}){return l.jsx(YD,{"data-slot":"sheet-portal",...t})}function hA({className:t,...e}){return l.jsx(ND,{"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 bA({className:t,children:e,side:o="right",showCloseButton:n=!0,...a}){return l.jsxs(fA,{children:[l.jsx(hA,{}),l.jsxs(QD,{"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),...a,children:[e,n&&l.jsxs(jD,{"data-slot":"sheet-close",render:l.jsx(Gn,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[l.jsx(ku,{}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function yA({className:t,...e}){return l.jsx("div",{"data-slot":"sheet-header",className:Ie("flex flex-col gap-0.5 p-4",t),...e})}function bR({className:t,...e}){return l.jsx("div",{"data-slot":"sheet-footer",className:Ie("mt-auto flex flex-col gap-2 p-4",t),...e})}function kA({className:t,...e}){return l.jsx(dA,{"data-slot":"sheet-title",className:Ie("font-heading text-base font-medium text-foreground",t),...e})}function wA({className:t,...e}){return l.jsx(LD,{"data-slot":"sheet-description",className:Ie("text-sm text-muted-foreground",t),...e})}function Er({className:t,...e}){return l.jsx("div",{"data-slot":"skeleton",className:Ie("animate-pulse rounded-md bg-muted",t),...e})}const vA="sidebar_state",CA=3600*24*7,TA="16rem",SA="18rem",DA="3rem",AA="b",eg=c.createContext(null);function El(){const t=c.useContext(eg);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function xA({defaultOpen:t=!0,open:e,onOpenChange:o,className:n,style:a,children:s,...r}){const i=FD(),[m,d]=c.useState(!1),[p,u]=c.useState(t),g=e??p,y=c.useCallback(w=>{const C=typeof w=="function"?w(g):w;o?o(C):u(C),document.cookie=`${vA}=${C}; path=/; max-age=${CA}`},[o,g]),f=c.useCallback(()=>i?d(w=>!w):y(w=>!w),[i,y,d]);c.useEffect(()=>{const w=C=>{C.key===AA&&(C.metaKey||C.ctrlKey)&&(C.preventDefault(),f())};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[f]);const b=g?"expanded":"collapsed",h=c.useMemo(()=>({state:b,open:g,setOpen:y,isMobile:i,openMobile:m,setOpenMobile:d,toggleSidebar:f}),[b,g,y,i,m,d,f]);return l.jsx(eg.Provider,{value:h,children:l.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":TA,"--sidebar-width-icon":DA,...a},className:Ie("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",n),...r,children:s})})}function PA({side:t="left",variant:e="sidebar",collapsible:o="offcanvas",className:n,children:a,dir:s,...r}){const{isMobile:i,state:m,openMobile:d,setOpenMobile:p}=El();return o==="none"?l.jsx("div",{"data-slot":"sidebar",className:Ie("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",n),...r,children:a}):i?l.jsx(gA,{open:d,onOpenChange:p,...r,children:l.jsxs(bA,{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":SA},side:t,children:[l.jsxs(yA,{className:"sr-only",children:[l.jsx(kA,{children:"Sidebar"}),l.jsx(wA,{children:"Displays the mobile sidebar."})]}),l.jsx("div",{className:"flex h-full w-full flex-col",children:a})]})}):l.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:[l.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)")}),l.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),...r,children:l.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:a})})]})}function EA({className:t,onClick:e,...o}){const{toggleSidebar:n}=El();return l.jsxs(Gn,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:Ie(t),onClick:a=>{e==null||e(a),n()},...o,children:[l.jsx(Tb,{}),l.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function RA({className:t,...e}){return l.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 IA({className:t,...e}){return l.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:Ie("flex flex-col gap-2 p-2",t),...e})}function FA({className:t,...e}){return l.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 tg({className:t,...e}){return l.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 og({className:t,...e}){return l.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:Ie("w-full text-sm",t),...e})}function ng({className:t,...e}){return l.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:Ie("flex w-full min-w-0 flex-col gap-0",t),...e})}function ag({className:t,...e}){return l.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:Ie("group/menu-item relative",t),...e})}const MA=Hm("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 sg({render:t,isActive:e=!1,variant:o="default",size:n="default",tooltip:a,className:s,...r}){const{isMobile:i,state:m}=El(),d=ID({defaultTagName:"button",props:St({className:Ie(MA({variant:o,size:n}),s)},r),render:a?l.jsx(tm,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:n,active:e}});return a?(typeof a=="string"&&(a={children:a}),l.jsxs(em,{children:[d,l.jsx(om,{side:"right",align:"center",hidden:m!=="collapsed"||i,...a})]})):d}const rg=c.createContext(void 0);function Rl(t){const e=c.useContext(rg);if(e===void 0&&!t)throw new Error(st(33));return e}const ig=c.createContext(void 0);function fo(t){const e=c.useContext(ig);if(e===void 0&&!t)throw new Error(st(36));return e}const OA=c.createContext(void 0);function Qs(t=!0){const e=c.useContext(OA);if(e===void 0&&!t)throw new Error(st(25));return e}function NA(t){const{closeOnClick:e,highlighted:o,id:n,nodeId:a,store:s,typingRef:r,itemRef:i,itemMetadata:m}=t,{events:d}=s.useState("floatingTreeRoot"),p=Qs(!0),u=p!==void 0;return c.useMemo(()=>({id:n,role:"menuitem",tabIndex:o?0:-1,onKeyDown(g){g.key===" "&&(r!=null&&r.current)&&g.preventDefault()},onMouseMove(g){a&&d.emit("itemhover",{nodeId:a,target:g.currentTarget})},onClick(g){e&&d.emit("close",{domEvent:g,reason:Nu})},onMouseUp(g){if(p){const y=p.initialCursorPointRef.current;if(p.initialCursorPointRef.current=null,u&&y&&Math.abs(g.clientX-y.x)<=1&&Math.abs(g.clientY-y.y)<=1||u&&!xu&&g.button===2)return}i.current&&s.context.allowMouseUpTriggerRef.current&&(!u||g.button===2)&&(!m||m.type==="regular-item")&&i.current.click()}}),[e,o,n,d,a,s,r,i,p,u,m])}const jA={type:"regular-item"};function lg(t){const{closeOnClick:e,disabled:o=!1,highlighted:n,id:a,store:s,typingRef:r=s.context.typingRef,nativeButton:i,itemMetadata:m,nodeId:d}=t,p=c.useRef(null),{getButtonProps:u,buttonRef:g}=Oa({disabled:o,focusableWhenDisabled:!0,native:i,composite:!0}),y=NA({closeOnClick:e,highlighted:n,id:a,nodeId:d,store:s,typingRef:r,itemRef:p,itemMetadata:m}),f=c.useCallback(h=>St(y,{onMouseEnter(){m.type==="submenu-trigger"&&m.setActive()}},h,u),[y,u,m]),b=Kn(p,g);return c.useMemo(()=>({getItemProps:f,itemRef:b}),[f,b])}const cg=c.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}});function LA(){return c.useContext(cg)}let _A=(function(t){return t[t.None=0]="None",t[t.GuessFromOrder=1]="GuessFromOrder",t})({});function Il(t={}){const{label:e,metadata:o,textRef:n,indexGuessBehavior:a,index:s}=t,{register:r,unregister:i,subscribeMapChange:m,elementsRef:d,labelsRef:p,nextIndexRef:u}=LA(),g=c.useRef(-1),[y,f]=c.useState(s??(a===_A.GuessFromOrder?()=>{if(g.current===-1){const w=u.current;u.current+=1,g.current=w}return g.current}:-1)),b=c.useRef(null),h=c.useCallback(w=>{var C;if(b.current=w,y!==-1&&w!==null&&(d.current[y]=w,p)){const v=e!==void 0;p.current[y]=v?e:((C=n==null?void 0:n.current)==null?void 0:C.textContent)??w.textContent}},[y,d,p,e,n]);return he(()=>{if(s!=null)return;const w=b.current;if(w)return r(w,o),()=>{i(w)}},[s,r,i,o]),he(()=>{if(s==null)return m(w=>{var v;const C=b.current?(v=w.get(b.current))==null?void 0:v.index:null;C!=null&&f(C)})},[s,m,f]),c.useMemo(()=>({ref:h,index:y}),[y,h])}const UA=c.forwardRef(function(e,o){const{render:n,className:a,id:s,label:r,nativeButton:i=!1,disabled:m=!1,closeOnClick:d=!0,style:p,...u}=e,g=Il({label:r}),y=Rl(!0),f=fn(s),{store:b}=fo(),h=b.useState("isActive",g.index),w=b.useState("itemProps"),{getItemProps:C,itemRef:v}=lg({closeOnClick:d,disabled:m,highlighted:h,id:f,store:b,nativeButton:i,nodeId:y==null?void 0:y.context.nodeId,itemMetadata:jA});return tt("div",e,{state:{disabled:m,highlighted:h},props:[w,u,C],ref:[v,o,g.ref]})}),zA=c.createContext(void 0);function dg(t){return c.useContext(zA)}const BA={...gn,...Ea},VA=c.forwardRef(function(e,o){const{render:n,className:a,style:s,finalFocus:r,...i}=e,{store:m}=fo(),{side:d,align:p}=Rl(),u=dg()!=null,g=m.useState("open"),y=m.useState("transitionStatus"),f=m.useState("popupProps"),b=m.useState("mounted"),h=m.useState("instantType"),w=m.useState("activeTriggerElement"),C=m.useState("parent"),v=m.useState("lastOpenChangeReason"),T=m.useState("rootId"),k=m.useState("floatingRootContext"),S=m.useState("floatingTreeRoot"),A=m.useState("closeDelay"),D=m.useState("activeTriggerElement"),R=m.useState("hoverEnabled"),I=m.useState("disabled"),B=C.type==="context-menu";Ra({open:g,ref:m.context.popupRef,onComplete(){var L,N;g&&((N=(L=m.context).onOpenChangeComplete)==null||N.call(L,!0))}}),c.useEffect(()=>{function L(N){m.setOpen(!1,Me(N.reason,N.domEvent))}return S.events.on("close",L),()=>{S.events.off("close",L)}},[S.events,m]),il(k,{enabled:R&&!I&&!B&&C.type!=="menubar",closeDelay:A});const M=c.useCallback(L=>{m.set("popupElement",L)},[m]),x={transitionStatus:y,side:d,align:p,open:g,nested:C.type==="menu",instant:h},W=tt("div",e,{state:x,ref:[o,m.context.popupRef,M],stateAttributesMapping:BA,props:[f,{onKeyDown(L){u&&Al.has(L.key)&&L.stopPropagation()}},Ws(y),i,{"data-rootownerid":T}]});let O=C.type===void 0||B;return(w||C.type==="menubar"&&v!==Ni)&&(O=!0),l.jsx(Qi,{context:k,modal:B,disabled:!b,returnFocus:r===void 0?O:r,initialFocus:C.type!=="menu",restoreFocus:!0,externalTree:C.type!=="menubar"?S:void 0,previousFocusableElement:D,nextFocusableElement:C.type===void 0?m.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:C.type===void 0?m.context.beforeContentFocusGuardRef:void 0,children:W})}),ug=c.createContext(void 0);function HA(){const t=c.useContext(ug);if(t===void 0)throw new Error(st(32));return t}const qA=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e,{store:s}=fo();return s.useState("mounted")||n?l.jsx(ug.Provider,{value:n,children:l.jsx(Ki,{ref:o,...a})}):null});function WA(t){const{children:e,elementsRef:o,labelsRef:n,onMapChange:a}=t,s=De(a),r=c.useRef(0),i=Ot($A).current,m=Ot(KA).current,[d,p]=c.useState(0),u=c.useRef(d),g=De((w,C)=>{m.set(w,C??null),u.current+=1,p(u.current)}),y=De(w=>{m.delete(w),u.current+=1,p(u.current)}),f=c.useMemo(()=>{const w=new Map;return Array.from(m.keys()).filter(v=>v.isConnected).sort(GA).forEach((v,T)=>{const k=m.get(v)??{};w.set(v,{...k,index:T})}),w},[m,d]);he(()=>{if(typeof MutationObserver!="function"||f.size===0)return;const w=new MutationObserver(C=>{const v=new Set,T=k=>v.has(k)?v.delete(k):v.add(k);C.forEach(k=>{k.removedNodes.forEach(T),k.addedNodes.forEach(T)}),v.size===0&&(u.current+=1,p(u.current))});return f.forEach((C,v)=>{v.parentElement&&w.observe(v.parentElement,{childList:!0})}),()=>{w.disconnect()}},[f]),he(()=>{u.current===d&&(o.current.length!==f.size&&(o.current.length=f.size),n&&n.current.length!==f.size&&(n.current.length=f.size),r.current=f.size),s(f)},[s,f,o,n,d]),he(()=>()=>{o.current=[]},[o]),he(()=>()=>{n&&(n.current=[])},[n]);const b=De(w=>(i.add(w),()=>{i.delete(w)}));he(()=>{i.forEach(w=>w(f))},[i,f]);const h=c.useMemo(()=>({register:g,unregister:y,subscribeMapChange:b,elementsRef:o,labelsRef:n,nextIndexRef:r}),[g,y,b,o,n,r]);return l.jsx(cg.Provider,{value:h,children:e})}function KA(){return new Map}function $A(){return new Set}function GA(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 JA=20;function pg(t,e,o,n){const[a,s]=c.useState(!1);he(()=>{if(!t||!e||o==null){s(!1);return}const r=Le(o).documentElement.clientWidth,i=o.offsetWidth;s(r>0&&i>0&&i>=r-JA)},[t,e,o]),Zm(t&&(!e||a),n)}const QA=c.forwardRef(function(e,o){var Oe;const{anchor:n,positionMethod:a="absolute",className:s,render:r,side:i,align:m,sideOffset:d=0,alignOffset:p=0,collisionBoundary:u="clipping-ancestors",collisionPadding:g=5,arrowPadding:y=5,sticky:f=!1,disableAnchorTracking:b=!1,collisionAvoidance:h=$k,style:w,...C}=e,{store:v}=fo(),T=HA(),k=Qs(!0),S=v.useState("parent"),A=v.useState("floatingRootContext"),D=v.useState("floatingTreeRoot"),R=v.useState("mounted"),I=v.useState("open"),B=v.useState("modal"),M=v.useState("openMethod"),x=v.useState("activeTriggerElement"),W=v.useState("transitionStatus"),O=v.useState("positionerElement"),L=v.useState("instantType"),N=v.useState("hasViewport"),V=v.useState("lastOpenChangeReason"),K=v.useState("floatingNodeId"),F=v.useState("floatingParentNodeId"),ae=A.useState("domReferenceElement"),_=c.useRef(null),z=Xi(O,!1,!1);let H=n,U=d,E=p,j=m,q=h;S.type==="context-menu"&&(H=n??((Oe=S.context)==null?void 0:Oe.anchor),j=j??"start",!i&&j!=="center"&&(E=e.alignOffset??2,U=e.sideOffset??-5));let Y=i,be=j;S.type==="menu"?(Y=Y??"inline-end",be=be??"start",q=e.collisionAvoidance??Wi):S.type==="menubar"&&(Y=Y??"bottom",be=be??"start");const Ae=S.type==="context-menu",$=ul({anchor:H,floatingRootContext:A,positionMethod:k?"fixed":a,mounted:R,side:Y,sideOffset:U,align:be,alignOffset:E,arrowPadding:Ae?0:y,collisionBoundary:u,collisionPadding:g,sticky:f,nodeId:K,keepMounted:T,disableAnchorTracking:b,collisionAvoidance:q,shiftCrossAxis:Ae&&!("side"in q&&q.side==="flip"),externalTree:D,adaptiveOrigin:N?dl:void 0});c.useEffect(()=>{function Ce(ye){ye.open&&(ye.parentNodeId===K&&v.set("hoverEnabled",!1),ye.nodeId!==K&&ye.parentNodeId===v.select("floatingParentNodeId")&&v.setOpen(!1,Me(ra)))}return D.events.on("menuopenchange",Ce),()=>{D.events.off("menuopenchange",Ce)}},[v,D.events,K]),c.useEffect(()=>{if(v.select("floatingParentNodeId")==null)return;function Ce(ye){if(ye.open||ye.nodeId!==v.select("floatingParentNodeId"))return;const Pe=ye.reason??ra;v.setOpen(!1,Me(Pe))}return D.events.on("menuopenchange",Ce),()=>{D.events.off("menuopenchange",Ce)}},[D.events,v]);const ce=ht();c.useEffect(()=>{I||ce.clear()},[I,ce]),c.useEffect(()=>{function Ce(ye){if(!(!I||ye.nodeId!==v.select("floatingParentNodeId")))if(ye.target&&x&&x!==ye.target){const Pe=v.select("closeDelay");Pe>0?ce.isStarted()||ce.start(Pe,()=>{v.setOpen(!1,Me(ra))}):v.setOpen(!1,Me(ra))}else ce.clear()}return D.events.on("itemhover",Ce),()=>{D.events.off("itemhover",Ce)}},[D.events,I,x,v,ce]),c.useEffect(()=>{const Ce={open:I,nodeId:K,parentNodeId:F,reason:v.select("lastOpenChangeReason")};D.events.emit("menuopenchange",Ce)},[D.events,I,v,K,F]),he(()=>{const Ce=ae,ye=_.current;if(Ce&&(_.current=Ce),ye&&Ce&&Ce!==ye){v.set("instantType",void 0);const Pe=new AbortController;return z(()=>{v.set("instantType","trigger-change")},Pe.signal),()=>{Pe.abort()}}},[ae,z,v]);const le={open:I,side:$.side,align:$.align,anchorHidden:$.anchorHidden,nested:S.type==="menu",instant:L},de=S.type==="menubar"&&S.context.modal;pg(I&&(de||B&&V!==Ye),M==="touch",O,x);const ee=pl(e,le,{styles:$.positionerStyles,transitionStatus:W,props:C,refs:[o,v.useStateSetter("positionerElement")],hidden:!R,inert:!I}),ve=R&&S.type!=="menu"&&(S.type!=="menubar"&&B&&V!==Ye||S.type==="menubar"&&S.context.modal);let te=null;return S.type==="menubar"?te=S.context.contentElement:S.type===void 0&&(te=x),l.jsxs(rg.Provider,{value:$,children:[ve&&l.jsx(xl,{ref:S.type==="context-menu"||S.type==="nested-context-menu"?S.context.internalBackdropRef:null,inert:ml(!I),cutout:te}),l.jsx(pp,{id:K,children:l.jsx(WA,{elementsRef:v.context.itemDomElements,labelsRef:v.context.itemLabels,children:ee})})]})}),YA=c.createContext(null);function mg(t){return c.useContext(YA)}const ZA={...Bs,disabled:ie(t=>t.parent.type==="menubar"&&t.parent.context.disabled||t.disabled),modal:ie(t=>(t.parent.type===void 0||t.parent.type==="context-menu")&&(t.modal??!0)),openMethod:ie(t=>t.openMethod),allowMouseEnter:ie(t=>t.allowMouseEnter),stickIfOpen:ie(t=>t.stickIfOpen),parent:ie(t=>t.parent),rootId:ie(t=>t.parent.type==="menu"?t.parent.store.select("rootId"):t.parent.type!==void 0?t.parent.context.rootId:t.rootId),activeIndex:ie(t=>t.activeIndex),isActive:ie((t,e)=>t.activeIndex===e),hoverEnabled:ie(t=>t.hoverEnabled),instantType:ie(t=>t.instantType),lastOpenChangeReason:ie(t=>t.openChangeReason),floatingTreeRoot:ie(t=>t.parent.type==="menu"?t.parent.store.select("floatingTreeRoot"):t.floatingTreeRoot),floatingNodeId:ie(t=>t.floatingNodeId),floatingParentNodeId:ie(t=>t.floatingParentNodeId),itemProps:ie(t=>t.itemProps),closeDelay:ie(t=>t.closeDelay),hasViewport:ie(t=>t.hasViewport),keyboardEventRelay:ie(t=>{if(t.keyboardEventRelay)return t.keyboardEventRelay;if(t.parent.type==="menu")return t.parent.store.select("keyboardEventRelay")})};class Fl extends Pa{constructor(o){super({...XA(),...o},{positionerRef:c.createRef(),popupRef:c.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:c.createRef(),beforeContentFocusGuardRef:c.createRef(),onOpenChangeComplete:void 0,triggerElements:new Yn},ZA);Ue(this,"unsubscribeParentListener",null);this.unsubscribeParentListener=this.observe("parent",n=>{var a;if((a=this.unsubscribeParentListener)==null||a.call(this),n.type==="menu"){let s=n.store.select("rootId"),r=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"),p=n.store.select("keyboardEventRelay");s===m&&r===d&&i===p||(s=m,r=d,i=p,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 a=Ot(()=>new Fl(n)).current;return o??a}}function XA(){return{...zs(),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 $i,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:Je,keyboardEventRelay:void 0,closeDelay:0,hasViewport:!1}}const gg=c.createContext(void 0);function fg(){return c.useContext(gg)}const hg=Ei(function(e){const{children:o,open:n,onOpenChange:a,onOpenChangeComplete:s,defaultOpen:r=!1,disabled:i=!1,modal:m,loopFocus:d=!0,orientation:p="vertical",actionsRef:u,closeParentOnEsc:g=!1,handle:y,triggerId:f,defaultTriggerId:b=null,highlightItemOnHover:h=!0}=e,w=Qs(!0),C=fo(!0),v=mg(!0),T=fg(),k=c.useMemo(()=>T&&C?{type:"menu",store:C.store}:v?{type:"menubar",context:v}:w&&!C?{type:"context-menu",context:w}:{type:void 0},[w,C,v,T]),S=Fl.useStore(y==null?void 0:y.store,{open:r,openProp:n,activeTriggerId:b,triggerIdProp:f,parent:k});As(()=>{n===void 0&&S.state.open===!1&&r===!0&&S.update({open:!0,activeTriggerId:b})}),S.useControlledProp("openProp",n),S.useControlledProp("triggerIdProp",f),S.useContextCallback("onOpenChangeComplete",s);const A=cn(),D=cn(),R=S.useState("floatingTreeRoot"),I=Gi(R),B=go(),M=S.useState("open"),x=S.useState("activeTriggerElement"),W=S.useState("positionerElement"),O=S.useState("hoverEnabled"),L=S.useState("disabled"),N=S.useState("lastOpenChangeReason"),V=S.useState("parent"),K=S.useState("activeIndex"),F=S.useState("payload"),ae=S.useState("floatingParentNodeId"),_=c.useRef(null),z=c.useRef(V.type!=="context-menu"),H=ht(),U=c.useRef(!0),E=ht(),j=ae!=null,{openMethod:q,triggerProps:Y}=mA(M);S.useSyncedValues({disabled:i,modal:V.type===void 0?m:void 0,openMethod:q,rootId:A}),Ls(S);const{forceUnmount:be}=_s(M,S,()=>{S.update({allowMouseEnter:!1,stickIfOpen:!0})});he(()=>{w&&!C?S.update({parent:{type:"context-menu",context:w},floatingNodeId:I,floatingParentNodeId:B}):C&&S.update({floatingNodeId:I,floatingParentNodeId:B})},[w,C,I,B,S]),c.useEffect(()=>{if(M||(_.current=null),V.type==="context-menu"){if(!M){H.clear(),z.current=!1;return}H.start(500,()=>{z.current=!0})}},[H,M,V.type]),he(()=>{!M&&!O&&S.set("hoverEnabled",!0)},[M,O,S]);const Ae=De((X,ke)=>{var qt;const xe=ke.reason;if(M===X&&ke.trigger===x&&N===xe||(ke.preventUnmountOnClose=()=>{S.set("preventUnmountingOnClose",!0)},!X&&ke.trigger==null&&(ke.trigger=x??void 0),a==null||a(X,ke),ke.isCanceled))return;S.state.floatingRootContext.dispatchOpenChange(X,ke);const Ge=ke.event;if(X===!1&&(Ge==null?void 0:Ge.type)==="click"&&Ge.pointerType==="touch"&&!U.current)return;if(!X&&K!==null){const Wt=S.context.itemDomElements.current[K];queueMicrotask(()=>{Wt==null||Wt.setAttribute("tabindex","-1")})}X&&xe===xn?(U.current=!1,E.start(300,()=>{U.current=!0})):(U.current=!0,E.clear());const Be=(xe===po||xe===Nu)&&Ge.detail===0&&(Ge==null?void 0:Ge.isTrusted),Qe=!X&&(xe===Aa||xe==null),it={open:X,openChangeReason:xe};_.current=ke.event??null;const Nt=((qt=ke.trigger)==null?void 0:qt.id)??null;(Nt||X)&&(it.activeTriggerId=Nt,it.activeTriggerElement=ke.trigger??null),S.update(it),V.type==="menubar"&&(xe===xn||xe===ln||xe===Ye||xe===ti||xe===ra)?S.set("instantType","group"):Be||Qe?S.set("instantType",Be?"click":"dismiss"):S.set("instantType",void 0)}),$=Sp({popupStore:S,floatingId:D,nested:B!=null,onOpenChange:Ae}),ce=$.context.events;c.useEffect(()=>{const X=({open:ke,eventDetails:xe})=>Ae(ke,xe);return ce.on("setOpen",X),()=>{ce==null||ce.off("setOpen",X)}},[ce,Ae]);const le=c.useCallback(()=>{S.setOpen(!1,Me(Fs))},[S]);c.useImperativeHandle(u,()=>({unmount:be,close:le}),[be,le]);let de;V.type==="context-menu"&&(de=V.context),c.useImperativeHandle(de==null?void 0:de.positionerRef,()=>W,[W]),c.useImperativeHandle(de==null?void 0:de.actionsRef,()=>({setOpen:Ae}),[Ae]);const fe=Os($,{enabled:!L,bubbles:{escapeKey:g&&V.type==="menu"},outsidePress(){var X;return V.type!=="context-menu"||((X=_.current)==null?void 0:X.type)==="contextmenu"?!0:z.current},externalTree:j?R:void 0}),ee=Np(),ve=c.useCallback(X=>{S.select("activeIndex")!==X&&S.set("activeIndex",X)},[S]),te=cv($,{enabled:!L,listRef:S.context.itemDomElements,activeIndex:K,nested:V.type!==void 0,loopFocus:d,orientation:p,parentOrientation:V.type==="menubar"?V.context.orientation:void 0,rtl:ee==="rtl",disabledIndices:ei,onNavigate:ve,openOnArrowKeyDown:V.type!=="context-menu",externalTree:j?R:void 0,focusItemOnHover:h}),Oe=c.useCallback(X=>{S.context.typingRef.current=X},[S]),Ce=dv($,{listRef:S.context.itemLabels,elementsRef:S.context.itemDomElements,activeIndex:K,resetMs:Wk,onMatch:X=>{M&&X!==K&&S.set("activeIndex",X)},onTyping:Oe}),ye=c.useMemo(()=>{const X=St(Ce.reference,te.reference,fe.reference,{onMouseMove(){S.set("allowMouseEnter",!0)}},Y);return X["aria-haspopup"]="menu",X["aria-expanded"]=M,X},[S,Ce.reference,te.reference,fe.reference,Y,M]),Pe=c.useMemo(()=>{const X=St(te.trigger,fe.trigger,Y);return X["aria-haspopup"]="menu",X["aria-expanded"]=!1,X},[te.trigger,fe.trigger,Y]),pe=c.useMemo(()=>St(Qn,{id:D,role:"menu","aria-labelledby":x==null?void 0:x.id,onMouseMove(){S.set("allowMouseEnter",!0),V.type==="menu"&&S.set("hoverEnabled",!1)},onClick(){S.select("hoverEnabled")&&S.set("hoverEnabled",!1)},onKeyDown(X){const ke=S.select("keyboardEventRelay");ke&&!X.isPropagationStopped()&&ke(X)}},Ce.floating,te.floating,fe.floating),[x,D,V.type,S,Ce.floating,te.floating,fe.floating]),J=te.item??Je;Us(S,{floatingRootContext:$,activeTriggerProps:ye,inactiveTriggerProps:Pe,popupProps:pe,itemProps:J});const ne=c.useMemo(()=>({store:S,parent:k}),[S,k]),se=l.jsx(ig.Provider,{value:ne,children:typeof o=="function"?o({payload:F}):o});return V.type===void 0||V.type==="context-menu"?l.jsx(mp,{externalTree:R,children:se}):se});function ex(t){const e=fo().store,o=c.useMemo(()=>({parentMenu:e}),[e]);return l.jsx(gg.Provider,{value:o,children:l.jsx(hg,{...t})})}function tx(t){const e=t.getBoundingClientRect(),o=Xe(t),n=o.getComputedStyle(t,"::before"),a=o.getComputedStyle(t,"::after");if(!(n.content!=="none"||a.content!=="none"))return e;const r=parseFloat(n.width)||0,i=parseFloat(n.height)||0,m=parseFloat(a.width)||0,d=parseFloat(a.height)||0,p=Math.max(e.width,r,m),u=Math.max(e.height,i,d),g=p-e.width,y=u-e.height;return{left:e.left-g/2,right:e.right+g/2,top:e.top-y/2,bottom:e.bottom+y/2}}function ox(t={}){const{highlightItemOnHover:e,highlightedIndex:o,onHighlightedIndexChange:n}=Cl(),{ref:a,index:s}=Il(t),r=o===s,i=c.useRef(null),m=Kn(a,i);return{compositeProps:c.useMemo(()=>({tabIndex:r?0:-1,onFocus(){n(s)},onMouseMove(){const p=i.current;if(!e||!p)return;const u=p.hasAttribute("disabled")||p.ariaDisabled==="true";!r&&!u&&p.focus()}}),[r,n,s,e]),compositeRef:m,index:s}}function nx(t){const{render:e,className:o,style:n,state:a=Je,props:s=ei,refs:r=ei,metadata:i,stateAttributesMapping:m,tag:d="div",...p}=t,{compositeProps:u,compositeRef:g}=ox({metadata:i});return tt(d,t,{state:a,ref:[...r,g],props:[u,...s,p],stateAttributesMapping:m})}function bg(t){if(He(t)&&t.hasAttribute("data-rootownerid"))return t.getAttribute("data-rootownerid")??void 0;if(!eo(t))return bg(no(t))}function yg(t,e){const o=c.useRef(null);function n(s){Vt.flushSync(()=>{t.setOpen(!1,Me(ln,s.nativeEvent,s.currentTarget))});const r=xk(o.current);r==null||r.focus()}function a(s){var i;const r=t.select("positionerElement");if(r&&En(s,r))(i=t.context.beforeContentFocusGuardRef.current)==null||i.focus();else{Vt.flushSync(()=>{t.setOpen(!1,Me(ln,s.nativeEvent,s.currentTarget))});let m=Ak(t.context.triggerFocusTargetRef.current||e.current);for(;m!==null&&Se(r,m);){const d=m;if(m=Bi(m),m===d)break}m==null||m.focus()}}return{preFocusGuardRef:o,handlePreFocusGuardFocus:n,handleFocusTargetFocus:a}}function ax(t){const{enabled:e=!0,mouseDownAction:o,open:n}=t,a=c.useRef(!1);return c.useMemo(()=>e?{onMouseDown:s=>{(o==="open"&&!n||o==="close"&&n)&&(a.current=!0,Le(s.currentTarget).addEventListener("click",()=>{a.current=!1},{once:!0}))},onClick:s=>{a.current&&(a.current=!1,s.preventBaseUIHandler())}}:Je,[e,o,n])}const ts=2,sx=wu(function(e,o){const{render:n,className:a,style:s,disabled:r=!1,nativeButton:i=!0,id:m,openOnHover:d,delay:p=100,closeDelay:u=0,handle:g,payload:y,...f}=e,b=fo(!0),h=(g==null?void 0:g.store)??(b==null?void 0:b.store);if(!h)throw new Error(st(85));const w=fn(m),C=h.useState("isTriggerActive",w),v=h.useState("floatingRootContext"),T=h.useState("isOpenedByTrigger",w),k=h.useState("triggerPopupId",w),S=c.useRef(null),A=ix(),D=Cl(!0),R=Bo(),I=c.useMemo(()=>R??new $i,[R]),B=Gi(I),M=go(),{registerTrigger:x,isMountedByThisTrigger:W}=ol(w,S,h,{payload:y,closeDelay:u,parent:A,floatingTreeRoot:I,floatingNodeId:B,floatingParentNodeId:M,keyboardEventRelay:D==null?void 0:D.relayKeyboardEvent}),O=A.type==="menubar",L=h.useState("disabled"),N=r||L||O&&A.context.disabled,{getButtonProps:V,buttonRef:K}=Oa({disabled:N,native:i});c.useEffect(()=>{!T&&A.type===void 0&&(h.context.allowMouseUpTriggerRef.current=!1)},[h,T,A.type]);const F=c.useRef(null),ae=ht(),_=De(te=>{if(!F.current)return;ae.clear(),h.context.allowMouseUpTriggerRef.current=!1;const Oe=te.target;if(Se(F.current,Oe)||Se(h.select("positionerElement"),Oe)||Oe===F.current||Oe!=null&&bg(Oe)===h.select("rootId"))return;const Ce=tx(F.current);te.clientX>=Ce.left-ts&&te.clientX<=Ce.right+ts&&te.clientY>=Ce.top-ts&&te.clientY<=Ce.bottom+ts||I.events.emit("close",{domEvent:te,reason:Gy})});c.useEffect(()=>{T&&h.select("lastOpenChangeReason")===Ye&&Le(F.current).addEventListener("mouseup",_,{once:!0})},[T,_,h]);const z=O&&A.context.hasSubmenuOpen,U=Vs(v,{enabled:(d??z)&&!N&&A.type!=="context-menu"&&(!O||z&&!W),handleClose:qs({blockPointerEvents:!O}),mouseOnly:!0,move:!1,restMs:A.type===void 0?p:void 0,delay:{close:u},triggerElementRef:S,externalTree:I,isActiveTrigger:C,isClosing:()=>h.select("transitionStatus")==="ending"}),E=rx(T,h.select("lastOpenChangeReason")),j=Yi(v,{enabled:!N&&A.type!=="context-menu",event:T&&O?"click":"mousedown",toggle:!0,ignoreMouse:!1,stickIfOpen:A.type===void 0?E:!1}),q=Pp(v,{enabled:!N&&z}),Y=ax({open:T,enabled:O,mouseDownAction:"open"}),be=c.useMemo(()=>St(q.reference,j.reference),[q.reference,j.reference]),Ae=h.useState("triggerProps",W),{preFocusGuardRef:$,handlePreFocusGuardFocus:ce,handleFocusTargetFocus:le}=yg(h,S),de={disabled:N,open:T},fe=[F,o,K,x,S],ee=[be,U??Je,Ae,{"aria-haspopup":"menu","aria-controls":k,id:w,onMouseDown:te=>{if(h.select("open"))return;ae.start(200,()=>{h.context.allowMouseUpTriggerRef.current=!0}),Le(te.currentTarget).addEventListener("mouseup",_,{once:!0})}},O?{role:"menuitem"}:{},Y,f,V],ve=tt("button",e,{enabled:!O,stateAttributesMapping:ii,state:de,ref:fe,props:ee});return O?l.jsx(nx,{tag:"button",render:n,className:a,style:s,state:de,refs:fe,props:ee,stateAttributesMapping:ii}):T?l.jsxs(c.Fragment,{children:[l.jsx(Oo,{ref:$,onFocus:ce},`${w}-pre-focus-guard`),l.jsx(c.Fragment,{children:ve},w),l.jsx(Oo,{ref:h.context.triggerFocusTargetRef,onFocus:le},`${w}-post-focus-guard`)]}):l.jsx(c.Fragment,{children:ve},w)});function rx(t,e){const o=ht(),[n,a]=c.useState(!1);return he(()=>{t&&e==="trigger-hover"?(a(!0),o.start(ap,()=>{a(!1)})):t||(o.clear(),a(!1))},[t,e,o]),n}function ix(){const t=Qs(!0),e=fo(!0),o=mg();return c.useMemo(()=>o?{type:"menubar",context:o}:t&&!e?{type:"context-menu",context:t}:{type:void 0},[t,e,o])}const lx=c.forwardRef(function(e,o){const{render:n,className:a,style:s,label:r,id:i,nativeButton:m=!1,openOnHover:d=!0,delay:p=100,closeDelay:u=0,disabled:g=!1,...y}=e,f=Il(),b=Rl(),{store:h}=fo(),w=fn(i),C=h.useState("open"),v=h.useState("floatingRootContext"),T=h.useState("floatingTreeRoot"),k=h.useState("triggerPopupId",w),S=Dp(w,h),A=c.useCallback(j=>{const q=S(j);return j!==null&&h.select("open")&&h.select("activeTriggerId")==null&&h.update({activeTriggerId:w,activeTriggerElement:j,closeDelay:u}),q},[S,u,h,w]),D=c.useRef(null),R=c.useCallback(j=>{D.current=j,h.set("activeTriggerElement",j)},[h]),I=fg();if(!(I!=null&&I.parentMenu))throw new Error(st(37));h.useSyncedValue("closeDelay",u);const B=I.parentMenu,M=B.useState("itemProps"),x=B.useState("isActive",f.index),W=c.useMemo(()=>({type:"submenu-trigger",setActive(){B.set("activeIndex",f.index)}}),[B,f.index]),O=h.useState("disabled"),L=g||O,{getItemProps:N,itemRef:V}=lg({closeOnClick:!1,disabled:L,highlighted:x,id:w,store:h,typingRef:B.context.typingRef,nativeButton:m,itemMetadata:W,nodeId:b==null?void 0:b.context.nodeId}),K=h.useState("hoverEnabled"),F=B.useState("allowMouseEnter"),ae=Vs(v,{enabled:K&&d&&!L,handleClose:qs({blockPointerEvents:!0}),mouseOnly:!0,move:!0,restMs:p,delay:F?{open:p,close:u}:0,triggerElementRef:D,externalTree:T,isClosing:()=>h.select("transitionStatus")==="ending"}),z=Yi(v,{enabled:!L,event:"mousedown",toggle:!d,ignoreMouse:d,stickIfOpen:!1}).reference??Je,H=h.useState("triggerProps",!0);return delete H.id,tt("div",e,{state:{disabled:L,highlighted:x,open:C},stateAttributesMapping:cl,props:[z,ae,H,M,{"aria-controls":k,tabIndex:C||x?0:-1,onBlur(){x&&B.set("activeIndex",null)}},y,N],ref:[o,f.ref,V,A,R]})});function Ml({...t}){return l.jsx(hg,{"data-slot":"dropdown-menu",...t})}function Ol({...t}){return l.jsx(sx,{"data-slot":"dropdown-menu-trigger",...t})}function Ys({align:t="start",alignOffset:e=0,side:o="bottom",sideOffset:n=4,className:a,...s}){return l.jsx(qA,{children:l.jsx(QA,{className:"isolate z-50 outline-none",align:t,alignOffset:e,side:o,sideOffset:n,children:l.jsx(VA,{"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",a),...s})})})}function gi({className:t,inset:e,variant:o="default",...n}){return l.jsx(UA,{"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 yR({...t}){return l.jsx(ex,{"data-slot":"dropdown-menu-sub",...t})}function kR({className:t,inset:e,children:o,...n}){return l.jsxs(lx,{"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,l.jsx(Zd,{className:"ms-auto"})]})}function wR({align:t="start",alignOffset:e=-3,side:o="right",sideOffset:n=0,className:a,...s}){return l.jsx(Ys,{"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",a),align:t,alignOffset:e,side:o,sideOffset:n,...s})}function vR({className:t,...e}){return l.jsx(MD,{"data-slot":"dropdown-menu-separator",className:Ie("-mx-1 my-1 h-px bg-border",t),...e})}const kg="session";function md(t){const e=location.protocol==="https:"?"; Secure":"";document.cookie=`${kg}=${t}; path=/; max-age=${3600*24*7}; SameSite=Lax${e}`}function cx(){document.cookie=`${kg}=; path=/; max-age=0`}const Qo=hl()(bl((t,e)=>({user:null,accessToken:null,refreshToken:null,setTokens:(o,n)=>{md(o),t({accessToken:o,refreshToken:n})},setUser:o=>t({user:o}),login:(o,n,a)=>{md(n),t({user:o,accessToken:n,refreshToken:a})},logout:()=>{cx(),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"})),_o=hl()(bl(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 Dt extends Error{constructor(e,o,n=400,a="",s={},r=!1,i=null){super(o),this.name="SDKError",this.code=e,this.status=n,this.url=a,this.response=s,this.isAbort=r,this.originalError=i}}function ze(t){if(!t)return;const e={};for(const[o,n]of Object.entries(t))n!=null&&(e[o]=String(n));return e}class dx{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:a,query:s,headers:r,signal:i,fetch:m,requestKey:d}=o;let p=`${this.baseUrl}${e}`;if(s){const v=new URLSearchParams(s).toString();v&&(p+=(p.includes("?")?"&":"?")+v)}const u=new Headers;a!=null&&!(a instanceof FormData)&&u.set("Content-Type","application/json");const g=this.authStore.token;if(g&&u.set("Authorization",`Bearer ${g}`),this._tenantId&&u.set("X-Tenant-ID",this._tenantId),this._locale&&u.set("Accept-Language",this._locale),r)for(const[v,T]of Object.entries(r))u.set(v,T);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 f={method:n,headers:u,body:a instanceof FormData?a:a!==void 0?JSON.stringify(a):void 0,signal:y};if(this._beforeSend){const v=await this._beforeSend(p,f);p=v.url,f={...f,...v.options}}const b=m??fetch;let h;try{h=await b(p,f)}catch(v){throw d&&this._requestControllers.delete(d),new Dt(0,v instanceof Error?v.message:"Network request failed",0,p,{},v instanceof DOMException&&v.name==="AbortError",v instanceof Error?v:null)}if(h.status===401&&this.authStore.isAuthenticated){const v=f.headers instanceof Headers?f.headers.get("Authorization"):null;if(!((v==null?void 0:v.startsWith("Bearer rf_"))??!1)){const k=await this._refresh();if(k){const S=new Headers(f.headers);S.set("Authorization",`Bearer ${k}`),f={...f,headers:S},h=await b(p,f)}}}d&&this._requestControllers.delete(d);let w;try{w=await h.json()}catch(v){throw new Dt(0,"Failed to parse response",h.status,p,{},!1,v instanceof Error?v:null)}if(w.code!==0)throw new Dt(w.code??0,w.message??"Unknown error",h.status,p,w);let C=w.data;return this._afterSend&&(C=await this._afterSend(h,C)),C}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 a=n.data;return this.authStore.save(a),a.access_token}catch{return this.authStore.clear(),null}finally{this._refreshPromise=null}})(),this._refreshPromise)}}class wg{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 ux extends wg{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 px{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 a=await this.http.post("/auth/login",{email:e,password:o},n);return this.store.save(a),a}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 mx{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 gx{constructor(e){this.http=e}async list(e,o){return this.http.get("/posts",{...o,query:ze(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 fx{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 hx{constructor(e){this.http=e}async list(e,o=1,n=25,a){return this.http.get(`/posts/${e}/comments`,{...a,query:{page:String(o),page_size:String(n)}})}async create(e,o,n){var r;const s=((r=this.http.authStore)==null?void 0:r.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 bx{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 yx{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 kx{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 a=this.http.baseUrl.replace("/api/v1",""),s=e[o];if(typeof s!="string")return"";if(s.startsWith("http"))return s;let r=`${a}/uploads/${s}`;return n!=null&&n.thumb&&(r+=`?thumb=${encodeURIComponent(n.thumb)}`),r}}class wx{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 vx{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:ze(o)})}async listAllTransactions(e,o){return this.http.get("/wallets/transactions",{...o,query:ze(e)})}}class Cx{constructor(e){this.baseUrl=e}subscribe(e){const o=e?`${this.baseUrl}/events?filter=${encodeURIComponent(e)}`:`${this.baseUrl}/events`;return new EventSource(o)}}class Tx{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 Sx{constructor(e){this.http=e}async listAvailableChannels(e,o){return this.http.get("/payment/channels/available",{...o,query:ze(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 Dx{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 Ax{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 xx{constructor(e){this.http=e}async list(e,o=1,n=25,a){return this.http.get(`/products/${e}/comments`,{...a,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 Px{constructor(e){this.http=e}async list(e,o){return this.http.get(`/products/${e}/variants`,o)}}class Ex{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 Rx{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 Ix{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 Fx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/ai/agents",{...o,query:ze(e)})}async get(e,o){return this.http.get(`/admin/ai/agents/${e}`,o)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/ai/agents"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/ai/agents",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/ai/agents",e),{...o,method:this.http.methodForDelete()})}async usage(e,o,n){return this.http.get(`/admin/ai/agents/${e}/usage`,{...n,query:ze({days:o})})}async listMemories(e,o,n){return this.http.get(`/admin/ai/agents/${e}/memories`,{...n,query:ze(o)})}async upsertMemory(e,o,n){return this.http.post(`/admin/ai/agents/${e}/memories`,o,n)}async updateMemory(e,o,n,a){return this.http.request(this.http.pathForUpdate(`/admin/ai/agents/${e}/memories`,o),{...a,method:this.http.methodForUpdate(),body:n})}async deleteMemory(e,o,n){await this.http.request(this.http.pathForDelete(`/admin/ai/agents/${e}/memories`,o),{...n,method:this.http.methodForDelete()})}}class Mx{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 Ox{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 Nx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/comments",{...o,query:ze(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 jx{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 Lx{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 _x{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:ze(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:ze(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 Ux{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 zx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/redemption-codes",{...o,query:ze(e)})}async generate(e,o){return this.http.post("/admin/redemption-codes",e,o)}async disable(e,o){return await this.http.post(`/admin/redemption-codes/${e}/disable`,{},o),!0}async activate(e,o,n){return this.http.post(`/admin/redemption-codes/${e}/activate`,{user_id:o??null},n)}async enable(e,o){return await this.http.post(`/admin/redemption-codes/${e}/enable`,{},o),!0}async deleteCode(e,o){return await this.http.request(this.http.pathForDelete("/admin/redemption-codes",e),{...o,method:this.http.methodForDelete()}),!0}}class Bx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/jobs",{...o,query:ze(e)})}async stats(e){return this.http.get("/admin/jobs/stats",e)}async types(e){return this.http.get("/admin/jobs/types",e)}async retry(e,o){await this.http.post(`/admin/jobs/${e}/retry`,{},o)}async remove(e,o){await this.http.request(this.http.pathForDelete("/admin/jobs",e),{...o,method:this.http.methodForDelete()})}async cleanup(e){return this.http.post("/admin/jobs/cleanup",{},e)}}class Vx{constructor(e){this.http=e}async listChannels(e,o){return this.http.get("/admin/integration/channels",{...o,query:ze(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:ze(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:ze(e)})}}class Hx{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 qx{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 Wx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/orders",{...o,query:ze(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 Kx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/pages",{...o,query:ze(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 $x{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:ze(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:ze(e)})}async listRefunds(e,o){return this.http.get("/admin/payment/refunds",{...o,query:ze(e)})}}class Gx{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 Jx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/posts",{...o,query:ze(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 Qx{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/products",{...o,query:ze(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 Yx{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 Zx{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 Xx{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 eP{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 tP{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 oP{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 nP{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:ze({table:e,days:o})})}}class aP{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 sP{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 rP{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 iP{constructor(e){this.http=e}async list(e,o){return this.http.get(`/admin/users/${e}/addresses`,o)}}class lP{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 cP{constructor(e){this.http=e}async listWallets(e,o){return this.http.get("/admin/wallets",{...o,query:ze(e)})}async listTransactions(e,o){return this.http.get("/admin/wallets/transactions",{...o,query:ze(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:ze(o)})}async userCurrencyTransactions(e,o,n,a){return this.http.get(`/admin/wallets/${e}/${o}/transactions`,{...a,query:ze(n)})}async reversal(e,o,n){return this.http.post(`/admin/wallets/${e}/reversal`,o,n)}}class dP{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 uP{constructor(e){this.http=e}async list(e){return this.http.get("/admin/flows",e)}async listFlowsPaged(e,o){const n={};return(e==null?void 0:e.page)!=null&&(n.page=String(e.page)),(e==null?void 0:e.page_size)!=null&&(n.page_size=String(e.page_size)),this.http.get("/admin/flows/page",{...o,query:n})}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/flows"),{...o,method:this.http.methodForCreate(),body:e})}async get(e,o){return this.http.get(`/admin/flows/${e}`,o)}async update(e,o,n){return this.http.request(this.http.pathForUpdate("/admin/flows",e),{...n,method:this.http.methodForUpdate(),body:o})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/flows",e),{...o,method:this.http.methodForDelete()})}async testFlow(e,o,n){return this.http.post(`/admin/flows/${e}/test`,o,n)}async run(e,o,n){return this.http.post(`/admin/flows/${e}/run`,o??{},n)}async getInstance(e,o){return this.http.get(`/admin/flows/instances/${e}`,o)}async listInstances(e,o){const n={},a=e??{};return a.page!=null&&(n.page=String(a.page)),a.page_size!=null&&(n.page_size=String(a.page_size)),a.flow_id&&(n.flow_id=a.flow_id),a.status&&(n.status=a.status),a.trigger&&(n.trigger=a.trigger),this.http.get("/admin/flows/instances",{...o,query:n})}async listVersions(e,o){return this.http.get(`/admin/flows/${e}/versions`,o)}async listApis(e,o){const n={};return(e==null?void 0:e.page)!=null&&(n.page=String(e.page)),(e==null?void 0:e.page_size)!=null&&(n.page_size=String(e.page_size)),this.http.get("/admin/flows/apis",{...o,query:n})}async listApiLogs(e,o){const n={};return(e==null?void 0:e.page)!=null&&(n.page=String(e.page)),(e==null?void 0:e.page_size)!=null&&(n.page_size=String(e.page_size)),e!=null&&e.flow_id&&(n.flow_id=e.flow_id),this.http.get("/admin/flows/apis/logs",{...o,query:n})}async deleteApi(e,o){await this.http.post(`/admin/flows/${e}/api/delete`,{},o)}async rotateApi(e,o){return this.http.post(`/admin/flows/${e}/api/rotate`,{},o)}async rotateApiSlug(e,o){return this.http.post(`/admin/flows/${e}/api/slug`,{},o)}async listTriggers(e,o){const n=e?{kind:e}:void 0;return this.http.get("/admin/flows/triggers",{...o,query:n})}async createTrigger(e,o){return this.http.post("/admin/flows/triggers",e,o)}async setTriggerEnabled(e,o,n){await this.http.post(`/admin/flows/triggers/${e}/${o?"enable":"disable"}`,{},n)}async deleteTrigger(e,o){await this.http.request(`/admin/flows/triggers/${e}`,{...o,method:"DELETE"})}async apiStatus(e,o){return this.http.get(`/admin/flows/${e}/api`,o)}async enableApi(e,o,n){return this.http.post(`/admin/flows/${e}/api/enable`,o??{},n)}async disableApi(e,o){return this.http.post(`/admin/flows/${e}/api/disable`,{},o)}async publish(e,o){return this.http.post(`/admin/flows/${e}/publish`,{},o)}async rollback(e,o,n){return this.http.post(`/admin/flows/${e}/versions/${o}/rollback`,{},n)}async nodeRuns(e,o){return this.http.get(`/admin/flows/instances/${e}/node-runs`,o)}async stopInstance(e,o){await this.http.post(`/admin/flows/instances/${e}/stop`,{},o)}async getInstanceWaiting(e,o){return this.http.get(`/admin/flows/instances/${e}/waiting`,o)}async resume(e,o,n){return this.http.post(`/admin/flows/instances/${e}/resume`,o,n)}}class pP{constructor(e){this.http=e}async list(e,o){return this.http.get("/admin/ai/sessions",{...o,query:ze(e)})}async listMessages(e,o,n){return this.http.get(`/admin/ai/sessions/${e}/messages`,{...n,query:ze(o)})}async delete(e,o){await this.http.request(this.http.pathForDelete("/admin/ai/sessions",e),{...o,method:this.http.methodForDelete()})}}class mP{constructor(e){this.http=e}async list(e){return this.http.get("/admin/ai/skills",e)}async create(e,o){return this.http.request(this.http.pathForCreate("/admin/ai/skills"),{...o,method:this.http.methodForCreate(),body:e})}async update(e,o,n="tenant",a){return this.http.request(this.http.pathForUpdate("/admin/ai/skills",e),{...a,method:this.http.methodForUpdate(),query:ze({scope:n}),body:o})}async delete(e,o="tenant",n){await this.http.request(this.http.pathForDelete("/admin/ai/skills",e),{...n,query:ze({scope:o}),method:this.http.methodForDelete()})}}class gP{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 fP{constructor(e){this.http=e,this.users=new lP(e),this.posts=new Jx(e),this.pages=new Kx(e),this.comments=new Nx(e),this.categories=new Ox(e),this.tags=new aP(e),this.media=new Hx(e),this.reusableBlocks=new tP(e),this.wallets=new cP(e),this.currencies=new Ux(e),this.redemptionCodes=new zx(e),this.plugins=new Gx(e),this.contentTypes=new jx(e),this.tenants=new sP(e),this.rbac=new eP(e),this.options=new qx(e),this.webhooks=new dP(e),this.audit=new Mx(e),this.crons=new _x(e),this.jobs=new Bx(e),this.tokens=new rP(e),this.flows=new uP(e),this.workflows=new gP(e),this.stats=new nP(e),this.orders=new Wx(e),this.payment=new $x(e),this.products=new Qx(e),this.productCategories=new Yx(e),this.productVariants=new Xx(e),this.productComments=new Zx(e),this.coupons=new Lx(e),this.shippingTemplates=new oP(e),this.userAddresses=new iP(e),this.integration=new Vx(e),this.aiAgents=new Fx(e),this.aiSkills=new mP(e),this.aiSessions=new pP(e)}async listRoutes(e){return this.http.get("/routes",e)}async listResources(e){return this.http.get("/admin/resources",e)}}function hP(t){let e="message";const o=[];for(const a of t.split(` -`)){if(!a||a.startsWith(":"))continue;const s=a.indexOf(":"),r=s===-1?a:a.slice(0,s);let i=s===-1?"":a.slice(s+1);i.startsWith(" ")&&(i=i.slice(1)),r==="event"?e=i:r==="data"&&o.push(i)}if(o.length===0)return null;let n;try{n=JSON.parse(o.join(` -`))}catch{return null}switch(e){case"chunk":return{event:"chunk",delta:String(n.delta??"")};case"thinking":return{event:"thinking",delta:String(n.delta??"")};case"text":return{event:"text",text:String(n.text??"")};case"tool_call":return{event:"tool_call",name:String(n.name??""),args:n.args};case"tool_result":return{event:"tool_result",name:String(n.name??""),output:String(n.output??""),success:n.success!==!1};case"done":return{event:"done",outcome:n.outcome};case"error":return{event:"error",code:String(n.code??"error"),message:String(n.message??""),fatal:n.fatal===!0};default:return null}}async function bP(t,e,o){if(!t.ok||!t.body){let i=`Request failed (${t.status})`,m=t.status;try{const d=await t.json();d.message&&(i=d.message),d.code!==void 0&&(m=d.code)}catch{}throw new Dt(m,i,t.status,e,{})}const n=t.body.getReader(),a=new TextDecoder;let s="";const r=i=>{const m=hP(i);if(!m)return"continue";if(o(m),m.event==="done")return"done";if(m.event==="error"&&m.fatal)throw new Dt(0,m.message,200,e,{event:"error",data:m});return"continue"};for(;;){const{done:i,value:m}=await n.read();if(i)break;for(s+=a.decode(m,{stream:!0});;){const d=s.indexOf(` - -`);if(d===-1)break;const p=s.slice(0,d);if(s=s.slice(d+2),r(p)==="done")return}}s.trim()&&r(s)}class yP{constructor(e){this.http=e}async createSession(e,o,n){return this.http.post(`/ai/agents/${e}/sessions`,o??{},n)}async listSessions(e,o){return this.http.get(`/ai/agents/${e}/sessions`,o)}async listMessages(e,o,n){return this.http.get(`/ai/sessions/${e}/messages`,{...n,query:Object.fromEntries(Object.entries(o??{}).map(([a,s])=>[a,String(s)]))})}async compactSession(e,o){return this.http.post(`/ai/sessions/${e}/compact`,{},o)}async runTurn(e,o,n){const a=`${this.http.baseUrl}/ai/sessions/${e}/turns`,s={"Content-Type":"application/json",Accept:"text/event-stream"},r=this.http.authStore.token;r&&(s.Authorization=`Bearer ${r}`),this.http.tenantId&&(s["X-Tenant-ID"]=this.http.tenantId),this.http.locale&&(s["Accept-Language"]=this.http.locale);const i=n.fetch??fetch;let m;try{m=await i(a,{method:"POST",headers:s,body:JSON.stringify({content:o}),signal:n.signal})}catch(d){if(d instanceof DOMException&&d.name==="AbortError")return;throw new Dt(0,d instanceof Error?d.message:"Network request failed",0,a,{})}await bP(m,a,n.onEvent)}}class gd{constructor(e,o,n=!1,a){this.http=e,this.name=o,this.apiToken=a,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 a={page:String(e),page_size:String(o)};if(n!=null&&n.sort&&(a.sort=n.sort),n!=null&&n.filter&&(a.filter=n.filter),n!=null&&n.filterCond)for(const[s,r]of Object.entries(n.filterCond))r!=null&&(a[s]=Array.isArray(r)?r.join(","):String(r));return n!=null&&n.search&&(a.search=n.search),n!=null&&n.fields&&(a.fields=n.fields),n!=null&&n.status&&(a.status=n.status),n!=null&&n.expand&&(a.expand=n.expand),this.http.get(this.prefix,{...this.withAuth(n),query:a})}async getFullList(e){const o=[];let n=1;for(;;){const a=await this.getList(n,200,e);if(o.push(...a.items),o.length>=a.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 Dt(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",a){const s=new FormData;return s.append(n,o),this.http.request(`${this.prefix}/${e}`,{...this.withAuth(a),method:"POST",body:s})}async listRevisions(e,o=1,n=25,a){return this.http.get(`/admin/cms/${this.name}/${e}/revisions`,{...this.withAuth(a),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,a){return this.http.get(`/admin/cms/${this.name}/${e}/revisions/${o}/diff/${n}`,this.withAuth(a))}}class kP{constructor(e,o){this.authStore=(o==null?void 0:o.authStore)??new ux,this.http=new dx(e,this.authStore),this.auth=new px(this.http,this.authStore),this.admin=new fP(this.http),this.ai=new yP(this.http),this.users=new mx(this.http),this.media=new kx(this.http),this.health=new wx(this.http),this.posts=new gx(this.http),this.categories=new bx(this.http),this.tags=new yx(this.http),this.comments=new hx(this.http),this.pages=new fx(this.http),this.wallets=new vx(this.http),this.events=new Cx(this.http.baseUrl),this.orders=new Tx(this.http),this.payment=new Sx(this.http),this.products=new Dx(this.http),this.productCategories=new Ax(this.http),this.productVariants=new Px(this.http),this.productComments=new xx(this.http),this.userAddresses=new Ix(this.http),this.cart=new Ex(this.http),this.productFavorites=new Rx(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 gd(this.http,e,!1,o)}adminCt(e,o){return new gd(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 a=await this.ct(e).getList(1,1,o);if(a.items.length===0)throw new Dt(404,`No ${e} item found`,404);return a.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 jl(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(jl).join(", "):JSON.stringify(t)}function wP(t){return/[",\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t}function CR(t,e){const o=new Blob([JSON.stringify(t,null,2)],{type:"application/json"});Nl(o,e)}function TR(t,e,o,n){const a=e.map(o).join(","),s=t.map(i=>e.map(m=>wP(jl(i[m]))).join(",")),r=new Blob([`\uFEFF${[a,...s].join(` -`)}`],{type:"text/csv;charset=utf-8"});Nl(r,n)}async function SR(t,e,o,n){const{default:a}=await Z(async()=>{const{default:r}=await import("./index-CTXUgEVK.js");return{default:r}},[]),s=[e.map(o),...t.map(r=>e.map(i=>jl(r[i])))];await a(s).toFile(n)}class vP extends wg{constructor(){if(super(),typeof window<"u"){const e=Qo.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=Qo.getState();if(o.setTokens(e.access_token,e.refresh_token),e.user){const n=e.user,a=Qo.getState().user,s=Array.isArray(n.roles)?n.roles:[];o.setUser({id:String(n.id),email:typeof n.email=="string"?n.email:(a==null?void 0:a.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(),Qo.getState().logout(),typeof window<"u"&&!window.location.pathname.startsWith("/admin/auth/")&&(window.location.href="/admin/auth/login?expired=1")}}const Zs="/api/v1",Ct=new kP(Zs,{authStore:new vP});typeof window<"u"&&(Ct.setTenantId(_o.getState().currentTenantId),Ct.setLocale(un.getState().locale),_o.subscribe(t=>{Ct.setTenantId(t.currentTenantId)}),un.subscribe(t=>{Ct.setLocale(t.locale)}));async function DR(t,e,o){const n=`${Zs}${t}?format=${e}`,a={"Content-Type":"application/octet-stream"},s=Ct.authStore.token;s&&(a.Authorization=`Bearer ${s}`);const r=_o.getState().currentTenantId;r&&(a["X-Tenant-ID"]=r);const i=un.getState().locale;i&&(a["Accept-Language"]=i);let m;try{m=await fetch(n,{method:"POST",headers:a,body:o})}catch(p){throw new Dt(0,p instanceof Error?p.message:"Network request failed",0,n,{})}let d;try{d=await m.json()}catch{throw new Dt(0,"Failed to parse response",m.status,n,{})}if(d.code!==0)throw new Dt(d.code??0,d.message??"Unknown error",m.status,n,d);return d.data}async function AR(t,e,o){const n=`${Zs}${t}?format=${e}`,a={},s=Ct.authStore.token;s&&(a.Authorization=`Bearer ${s}`);const r=_o.getState().currentTenantId;r&&(a["X-Tenant-ID"]=r);const i=un.getState().locale;i&&(a["Accept-Language"]=i);let m;try{m=await fetch(n,{headers:a})}catch(p){throw new Dt(0,p instanceof Error?p.message:"Network request failed",0,n,{})}if(!m.ok){let p=`Export failed (${m.status})`;try{const u=await m.json();u!=null&&u.message&&(p=u.message)}catch{}throw new Dt(m.status,p,m.status,n,{})}const d=await m.blob();return Nl(d,o),{size:d.size}}async function xR(t){const e=`${Zs}${t}`,o={},n=Ct.authStore.token;n&&(o.Authorization=`Bearer ${n}`);const a=_o.getState().currentTenantId;a&&(o["X-Tenant-ID"]=a);const s=await fetch(e,{headers:o});if(!s.ok)throw new Dt(0,`preview fetch failed: ${s.status}`,s.status,e,{});const r=await s.blob();return URL.createObjectURL(r)}function CP(){const[t,e]=c.useState(!1),{isAdmin:o}=Qo(),n=c.useRef(localStorage.getItem("notifications_last_seen")),a=Wd(),{data:s,isLoading:r}=sa({queryKey:["notifications"],queryFn:async()=>{try{return await Ct.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(u=>u.created_at>n.current).length:i.length>0?1:0;c.useEffect(()=>{if(t&&i.length>0){const u=i[0].created_at;n.current=u,localStorage.setItem("notifications_last_seen",u),a.invalidateQueries({queryKey:["notifications"]})}},[t,i,a]);function d(u){const g=new Date(u),f=new Date().getTime()-g.getTime(),b=Math.floor(f/6e4);if(b<1)return"just now";if(b<60)return`${b}m ago`;const h=Math.floor(b/60);if(h<24)return`${h}h ago`;const w=Math.floor(h/24);return w<7?`${w}d ago`:g.toLocaleDateString()}function p(u){return u.includes("delete")||u.includes("remove")?"text-red-500":u.includes("create")||u.includes("register")?"text-green-500":u.includes("update")||u.includes("login")?"text-blue-500":"text-muted-foreground"}return l.jsxs(Ml,{open:t,onOpenChange:e,children:[l.jsxs(Ol,{className:"relative inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:[l.jsx(sc,{className:"size-4"}),m>0&&l.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})]}),l.jsxs(Ys,{align:"end",className:"w-80 p-0",children:[l.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[l.jsx("span",{className:"text-sm font-semibold",children:"Notifications"}),m>0&&l.jsxs("span",{className:"text-xs text-muted-foreground",children:[m," new"]})]}),l.jsx("div",{className:"max-h-80 overflow-y-auto overscroll-contain",children:r?l.jsx("div",{className:"space-y-3 p-4",children:Array.from({length:5}).map((u,g)=>l.jsxs("div",{className:"flex gap-3",children:[l.jsx(Er,{className:"size-2 mt-2 rounded-full shrink-0"}),l.jsxs("div",{className:"flex-1 space-y-1.5",children:[l.jsx(Er,{className:"h-3.5 w-3/4"}),l.jsx(Er,{className:"h-3 w-1/3"})]})]},g))}):i.length===0?l.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[l.jsx(sc,{className:"size-8 mb-2 opacity-30"}),l.jsx("p",{className:"text-sm",children:"No notifications"})]}):l.jsx("div",{className:"divide-y",children:i.map(u=>{const g=!n.current||u.created_at>n.current;return l.jsxs("div",{className:`flex gap-3 px-4 py-3 transition-colors hover:bg-muted/50 cursor-default ${g?"bg-muted/30":""}`,children:[l.jsx("div",{className:`mt-1.5 size-2 rounded-full shrink-0 ${g?"bg-primary":"bg-transparent"}`}),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsxs("p",{className:"text-sm leading-snug",children:[l.jsx("span",{className:p(u.action),children:u.action}),l.jsx("span",{className:"text-muted-foreground",children:" on "}),l.jsx("span",{className:"font-medium",children:u.subject})]}),u.detail!=null&&l.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 truncate",children:typeof u.detail=="string"?u.detail:JSON.stringify(u.detail)}),l.jsx("p",{className:"text-[11px] text-muted-foreground/60 mt-1",children:d(u.created_at)})]})]},u.id)})})})]})]})}const TP=[{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 SP(){const{locale:t,setLocale:e}=un();return l.jsxs(Ml,{children:[l.jsx(Ol,{className:"inline-flex items-center justify-center rounded-md p-1 hover:bg-muted transition-colors",children:l.jsx(gb,{className:"size-4"})}),l.jsx(Ys,{align:"end",className:"min-w-28",children:TP.map(o=>l.jsxs(gi,{className:"text-sm gap-2",onClick:()=>e(o.value),children:[l.jsx("span",{className:t===o.value?"size-2 rounded-full bg-primary":"size-2"}),o.label]},o.value))})]})}const vg=c.createContext(void 0);function Na(t){const e=c.useContext(vg);if(e===void 0&&!t)throw new Error(st(47));return e}function DP(){return{...zs(),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 AP={...Bs,disabled:ie(t=>t.disabled),instantType:ie(t=>t.instantType),openMethod:ie(t=>t.openMethod),openChangeReason:ie(t=>t.openChangeReason),modal:ie(t=>t.modal),focusManagerModal:ie(t=>t.focusManagerModal),stickIfOpen:ie(t=>t.stickIfOpen),titleElementId:ie(t=>t.titleElementId),descriptionElementId:ie(t=>t.descriptionElementId),openOnHover:ie(t=>t.openOnHover),closeDelay:ie(t=>t.closeDelay),hasViewport:ie(t=>t.hasViewport)};class Ll extends Pa{constructor(o,n,a=!1){const s={...DP(),...o},r=new Yn;s.open&&(o==null?void 0:o.mounted)===void 0&&(s.mounted=!0),s.floatingRootContext=nl(r,n,a);super(s,{popupRef:c.createRef(),backdropRef:c.createRef(),internalBackdropRef:c.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:c.createRef(),beforeContentFocusGuardRef:c.createRef(),stickIfOpenTimeout:new _t,triggerElements:r},AP);Ue(this,"setOpen",(o,n)=>{var d,p;const a=n.reason===Ye,s=n.reason===po&&n.event.detail===0,r=!o&&(n.reason===Aa||n.reason==null);n.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)};const i=this.select("activeTriggerId");if(!o&&n.reason===ju&&n.trigger==null&&i!=null&&(n.trigger=this.context.triggerElements.getById(i)??this.select("activeTriggerElement")??void 0),(p=(d=this.context).onOpenChange)==null||p.call(d,o,n),n.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(o,n);const m=()=>{const u={open:o,openChangeReason:n.reason};tl(u,o,n.trigger),this.update(u)};a?(this.set("stickIfOpen",!0),this.context.stickIfOpenTimeout.start(ap,()=>{this.set("stickIfOpen",!1)}),Vt.flushSync(m)):m(),s||r?this.set("instantType",s?"click":"dismiss"):n.reason===ln?this.set("instantType","focus"):this.set("instantType",void 0)});Ue(this,"disposeEffect",()=>this.context.stickIfOpenTimeout.disposeEffect())}static useStore(o,n){const{store:a,internalStore:s}=el(o,(r,i)=>new Ll(n,r,i));return c.useEffect(()=>s==null?void 0:s.disposeEffect(),[s]),a}}function fd({props:t}){const{children:e,open:o,defaultOpen:n=!1,onOpenChange:a,onOpenChangeComplete:s,modal:r=!1,handle:i,triggerId:m,defaultTriggerId:d=null}=t,p=Ll.useStore(i==null?void 0:i.store,{modal:r,open:n,openProp:o,activeTriggerId:d,triggerIdProp:m});As(()=>{o===void 0&&p.state.open===!1&&n===!0&&p.update({open:!0,activeTriggerId:d})}),p.useControlledProp("openProp",o),p.useControlledProp("triggerIdProp",m);const u=p.useState("open"),g=p.useState("mounted"),y=p.useState("payload"),f=go()!=null;p.useContextCallback("onOpenChange",a),p.useContextCallback("onOpenChangeComplete",s),Ap(p,u),Ls(p);const{forceUnmount:b}=_s(u,p,()=>{p.update({stickIfOpen:!0,openChangeReason:null})});p.useSyncedValues({modal:r,nested:f}),c.useEffect(()=>{u||p.context.stickIfOpenTimeout.clear()},[p,u]);const h=c.useCallback(()=>{p.setOpen(!1,Me(Fs))},[p]);c.useImperativeHandle(t.actionsRef,()=>({unmount:b,close:h}),[b,h]);const w=u||g,C=c.useMemo(()=>({store:p}),[p]);return l.jsxs(vg.Provider,{value:C,children:[w&&l.jsx(PP,{store:p,modal:r}),typeof e=="function"?e({payload:y}):e]})}function xP(t){return Na(!0)?l.jsx(fd,{props:t}):l.jsx(mp,{children:l.jsx(fd,{props:t})})}function PP({store:t,modal:e}){const o=t.useState("floatingRootContext"),n=Os(o,{outsidePressEvent:{mouse:e==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}}),a=n.reference??Je,s=n.trigger??Je,r=c.useMemo(()=>St(Qn,n.floating),[n.floating]);return Us(t,{activeTriggerProps:a,inactiveTriggerProps:s,popupProps:r}),null}const EP=300,RP=c.forwardRef(function(e,o){const{render:n,className:a,style:s,disabled:r=!1,nativeButton:i=!0,handle:m,payload:d,openOnHover:p=!1,delay:u=EP,closeDelay:g=0,id:y,...f}=e,b=Na(!0),h=(m==null?void 0:m.store)??(b==null?void 0:b.store);if(!h)throw new Error(st(74));const w=fn(y),C=h.useState("isTriggerActive",w),v=h.useState("floatingRootContext"),T=h.useState("isOpenedByTrigger",w),k=h.useState("triggerPopupId",w),S=c.useRef(null),{registerTrigger:A,isMountedByThisTrigger:D}=ol(w,S,h,{payload:d,disabled:r,openOnHover:p,closeDelay:g}),R=h.useState("openChangeReason"),I=h.useState("stickIfOpen"),B=h.useState("openMethod"),M=h.useState("focusManagerModal"),x=Vs(v,{enabled:v!=null&&p&&(B!=="touch"||R!==po),mouseOnly:!0,move:!1,handleClose:qs(),restMs:u,delay:{close:g},triggerElementRef:S,isActiveTrigger:C,isClosing:()=>h.select("transitionStatus")==="ending"}),W=Yi(v,{enabled:v!=null,stickIfOpen:I}),O=Xm(()=>h.select("open"),U=>{h.set("openMethod",U)}),L=h.useState("triggerProps",D),{getButtonProps:N,buttonRef:V}=Oa({disabled:r,native:i}),K={open(U){return U&&R===po?ii.open(U):cl.open(U)}},{preFocusGuardRef:F,handlePreFocusGuardFocus:ae,handleFocusTargetFocus:_}=yg(h,S),H=tt("button",e,{state:{disabled:r,open:T},ref:[V,o,A,S],props:[W.reference,x,L,O,{[sp]:"",id:w,"aria-haspopup":"dialog","aria-expanded":T,"aria-controls":k},f,N],stateAttributesMapping:K});return D&&!M?l.jsxs(c.Fragment,{children:[l.jsx(Oo,{ref:F,onFocus:ae}),l.jsx(c.Fragment,{children:H},w),l.jsx(Oo,{ref:h.context.triggerFocusTargetRef,onFocus:_})]}):l.jsx(c.Fragment,{children:H},w)}),Cg=c.createContext(void 0);function IP(){const t=c.useContext(Cg);if(t===void 0)throw new Error(st(45));return t}const FP=c.forwardRef(function(e,o){const{keepMounted:n=!1,...a}=e,{store:s}=Na();return s.useState("mounted")||n?l.jsx(Cg.Provider,{value:n,children:l.jsx(Ki,{ref:o,...a})}):null}),Tg=c.createContext(void 0);function MP(){const t=c.useContext(Tg);if(!t)throw new Error(st(46));return t}const OP=c.forwardRef(function(e,o){const{render:n,className:a,style:s,anchor:r,positionMethod:i="absolute",side:m="bottom",align:d="center",sideOffset:p=0,alignOffset:u=0,collisionBoundary:g="clipping-ancestors",collisionPadding:y=5,arrowPadding:f=5,sticky:b=!1,disableAnchorTracking:h=!1,collisionAvoidance:w=Wi,...C}=e,{store:v}=Na(),T=IP(),k=Gi(),S=v.useState("floatingRootContext"),A=v.useState("mounted"),D=v.useState("open"),R=v.useState("openChangeReason"),I=v.useState("activeTriggerElement"),B=v.useState("modal"),M=v.useState("openMethod"),x=v.useState("positionerElement"),W=v.useState("instantType"),O=v.useState("transitionStatus"),L=v.useState("hasViewport"),N=c.useRef(null),V=Xi(x,!1,!1),K=ul({anchor:r,floatingRootContext:S,positionMethod:i,mounted:A,side:m,sideOffset:p,align:d,alignOffset:u,arrowPadding:f,collisionBoundary:g,collisionPadding:y,sticky:b,disableAnchorTracking:h,keepMounted:T,nodeId:k,collisionAvoidance:w,adaptiveOrigin:L?dl:void 0}),F=S.useState("domReferenceElement");he(()=>{const H=F,U=N.current;if(H&&(N.current=H),U&&H&&H!==U){v.set("instantType",void 0);const E=new AbortController;return V(()=>{v.set("instantType","trigger-change")},E.signal),()=>{E.abort()}}},[F,V,v]),pg(D&&B===!0&&R!==Ye,M==="touch",x,I);const ae=c.useCallback(H=>{v.set("positionerElement",H)},[v]),_={open:D,side:K.side,align:K.align,anchorHidden:K.anchorHidden,instant:W},z=pl(e,_,{styles:K.positionerStyles,transitionStatus:O,props:C,refs:[o,ae],hidden:!A,inert:!D});return l.jsxs(Tg.Provider,{value:K,children:[A&&B===!0&&R!==Ye&&l.jsx(xl,{ref:v.context.internalBackdropRef,inert:ml(!D),cutout:I}),l.jsx(pp,{id:k,children:z})]})}),NP=c.createContext(void 0);function jP(){const[t,e]=c.useState(0),o=De(()=>(e(a=>a+1),()=>{e(a=>Math.max(0,a-1))}));return{context:c.useMemo(()=>({register:o}),[o]),hasClosePart:t>0}}function LP(t){const{value:e,children:o}=t;return l.jsx(NP.Provider,{value:e,children:o})}const _P={...gn,...Ea},UP=c.forwardRef(function(e,o){const{render:n,className:a,style:s,initialFocus:r,finalFocus:i,...m}=e,{store:d}=Na(),p=MP(),u=dg()!=null,{context:g,hasClosePart:y}=jP(),f=d.useState("open"),b=d.useState("openMethod"),h=d.useState("instantType"),w=d.useState("transitionStatus"),C=d.useState("popupProps"),v=d.useState("titleElementId"),T=d.useState("descriptionElementId"),k=d.useState("modal"),S=d.useState("mounted"),A=d.useState("openChangeReason"),D=d.useState("activeTriggerElement"),R=d.useState("floatingRootContext"),I=R.useState("floatingId"),B=d.useState("disabled"),M=d.useState("openOnHover"),x=d.useState("closeDelay"),W=m.id??I;Ra({open:f,ref:d.context.popupRef,onComplete(){var ae,_;f&&((_=(ae=d.context).onOpenChangeComplete)==null||_.call(ae,!0))}}),il(R,{enabled:M&&!B,closeDelay:x});function O(ae){return ae==="touch"?d.context.popupRef.current:!0}const L=r===void 0?O:r,N=k!==!1&&y;d.useSyncedValue("focusManagerModal",N);const V=c.useCallback(ae=>{d.set("popupElement",ae)},[d]),K={open:f,side:p.side,align:p.align,instant:h,transitionStatus:w},F=tt("div",e,{state:K,ref:[o,d.context.popupRef,V],props:[C,{id:W,role:"dialog",...Qn,"aria-labelledby":v,"aria-describedby":T,onKeyDown(ae){u&&Al.has(ae.key)&&ae.stopPropagation()}},Ws(w),m],stateAttributesMapping:_P});return l.jsx(Qi,{context:R,openInteractionType:b,modal:N,disabled:!S||A===Ye,initialFocus:L,returnFocus:i,restoreFocus:"popup",previousFocusableElement:He(D)?D:void 0,nextFocusableElement:d.context.triggerFocusTargetRef,beforeContentFocusGuardRef:d.context.beforeContentFocusGuardRef,children:l.jsx(LP,{value:g,children:F})})});function zP({...t}){return l.jsx(xP,{"data-slot":"popover",...t})}function BP({...t}){return l.jsx(RP,{"data-slot":"popover-trigger",...t})}function VP({className:t,align:e="center",alignOffset:o=0,side:n="bottom",sideOffset:a=4,...s}){return l.jsx(FP,{children:l.jsx(OP,{align:e,alignOffset:o,side:n,sideOffset:a,className:"isolate z-50",children:l.jsx(UP,{"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 HP="https://www.raisfast.com/data/templates.json",Sg="raisfast.templates.cache",qP=0,WP=[{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 KP(){try{const t=localStorage.getItem(Sg);if(!t)return null;const e=JSON.parse(t);return Date.now()-e.at>qP?null:Array.isArray(e.data)?e.data:null}catch{return null}}function $P(t){try{localStorage.setItem(Sg,JSON.stringify({at:Date.now(),data:t}))}catch{}}function GP(){const[t,e]=c.useState(()=>KP()??WP),[o,n]=c.useState(!1);return c.useEffect(()=>{let a=!1;return n(!0),fetch(HP,{cache:"no-cache"}).then(s=>s.ok?s.json():Promise.reject(new Error(String(s.status)))).then(s=>{a||!Array.isArray(s)||s.length===0||(e(s),$P(s))}).catch(()=>{}).finally(()=>{a||n(!1)}),()=>{a=!0}},[]),{templates:t,loading:o}}function JP({className:t}){return l.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:t,"aria-hidden":"true",children:l.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 QP(t,e){return typeof t.description=="string"?t.description:t.description?e==="zh"?t.description.cn??t.description.en:t.description.en:""}function YP(){const{t,locale:e}=bt(),{templates:o,loading:n}=GP(),[a,s]=c.useState(!1),[r,i]=c.useState(""),[m,d]=c.useState("all"),p=["all",...Array.from(new Set(o.map(g=>g.type)))],u=o.filter(g=>{if(m!=="all"&&g.type!==m)return!1;if(!r)return!0;const y=r.toLowerCase();return g.name.toLowerCase().includes(y)||g.type.toLowerCase().includes(y)||(g.features??[]).some(f=>f.toLowerCase().includes(y))});return l.jsxs(zP,{open:a,onOpenChange:s,children:[l.jsx(Xp,{delay:300,children:l.jsxs(em,{children:[l.jsx(tm,{render:g=>l.jsxs(BP,{...g,className:"group relative flex size-7 items-center justify-center rounded-md text-primary transition-colors hover:bg-primary/10 hover:text-primary",children:[l.jsx("span",{className:"absolute inset-0 rounded-md animate-ping bg-primary/25 [animation-duration:2.5s] group-hover:[animation:none]"}),l.jsx(rc,{className:"relative size-4 transition-transform duration-300 group-hover:scale-110 group-hover:-rotate-6"}),l.jsx("span",{className:"absolute -end-0.5 -top-0.5 size-1.5 rounded-full bg-primary opacity-100 group-hover:opacity-0"})]})}),l.jsx(om,{children:t("templates.title")})]})}),l.jsxs(VP,{align:"end",className:"w-[min(1080px,calc(100vw-2rem))] p-0",children:[l.jsxs("div",{className:"flex items-center gap-2 border-b px-3 py-2",children:[l.jsx(pu,{className:"size-3.5 text-muted-foreground"}),l.jsx("input",{value:r,onChange:g=>i(g.target.value),placeholder:t("templates.search"),className:"h-6 w-40 bg-transparent text-sm outline-none placeholder:text-muted-foreground"}),l.jsx("div",{className:"flex-1"}),l.jsx("div",{className:"flex items-center gap-1",children:p.map(g=>l.jsx("button",{type:"button",onClick:()=>d(g),className:`rounded-md px-2 py-1 text-xs transition-colors ${m===g?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,children:g==="all"?t("templates.all"):g},g))}),n&&l.jsx(lu,{className:"size-3.5 animate-spin text-muted-foreground"})]}),l.jsx("div",{className:"grid max-h-[600px] grid-cols-3 gap-4 overflow-y-auto overscroll-contain p-4",children:u.length===0?l.jsx("p",{className:"col-span-3 py-10 text-center text-sm text-muted-foreground",children:t("templates.empty")}):u.map(g=>l.jsxs("div",{className:"group overflow-hidden rounded-lg border bg-card transition-colors hover:border-primary/60",children:[l.jsxs("div",{className:"relative aspect-[16/10] overflow-hidden bg-muted",children:[l.jsx("a",{href:g.demoUrl??void 0,target:"_blank",rel:"noopener noreferrer","aria-label":g.name,className:"block size-full",children:g.image?l.jsx("img",{src:g.image,alt:g.name,loading:"lazy",className:"size-full object-cover transition-transform duration-300 group-hover:scale-105"}):l.jsx("div",{className:"flex size-full items-center justify-center text-muted-foreground",children:l.jsx(rc,{className:"size-8"})})}),l.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:g.type})]}),l.jsxs("div",{className:"space-y-2 p-3",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"truncate text-sm font-medium",children:g.name}),l.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[g.githubUrl&&l.jsx("a",{href:g.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:l.jsx(JP,{className:"size-3.5"})}),g.demoUrl&&l.jsx("a",{href:g.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:l.jsx($h,{className:"size-3.5"})})]})]}),l.jsx("p",{className:"line-clamp-2 min-h-8 text-xs leading-4 text-muted-foreground",children:QP(g,e)})]})]},g.id))})]})]})}function ZP({children:t,className:e}){return l.jsx("nav",{"data-slot":"breadcrumb",className:Ie("flex items-center text-sm text-muted-foreground",e),children:l.jsx("ol",{className:"flex items-center gap-1.5",children:t})})}function XP({children:t,className:e}){return l.jsx("li",{"data-slot":"breadcrumb-item",className:Ie("inline-flex items-center gap-1.5",e),children:t})}function eE({href:t,children:e,className:o}){return l.jsx(Tl,{href:t,className:Ie("hover:text-foreground transition-colors",o),children:e})}function tE({children:t,className:e}){return l.jsx("span",{"data-slot":"breadcrumb-page",className:Ie("font-medium text-foreground",e),children:t})}function oE(){return l.jsx(Zd,{className:"size-3.5 text-muted-foreground/50"})}function nE(){const{t}=bt();return[{label:t("layout.posts"),href:"/posts",icon:Ss},{label:t("layout.categories"),href:"/categories",icon:ou},{label:t("layout.tags"),href:"/tags",icon:xi},{label:t("layout.comments"),href:"/comments",icon:du},{label:t("layout.media"),href:"/media",icon:Ti},{label:t("layout.pages"),href:"/pages",icon:ru},{label:t("layout.reusableBlocks"),href:"/reusable-blocks",icon:Ci}]}function aE(){const{t}=bt();return[{label:t("layout.contentTypes"),href:"/content-types",icon:au},{label:t("layout.plugins"),href:"/plugins",icon:Si}]}function sE(){const{t}=bt();return[{label:t("layout.orders"),href:"/orders",icon:gu},{label:t("layout.products"),href:"/products",icon:Ob},{label:t("layout.productCategories"),href:"/product-categories",icon:ob},{label:t("layout.productComments"),href:"/product-comments",icon:ny},{label:t("layout.coupons"),href:"/coupons",icon:xi},{label:t("layout.shippingTemplates"),href:"/shipping-templates",icon:my}]}function rE(){const{t}=bt();return[{label:t("layout.paymentOrders"),href:"/payment-orders",icon:Bb},{label:t("layout.paymentTransactions"),href:"/payment-transactions",icon:ac},{label:t("layout.paymentChannels"),href:"/payments",icon:Wh},{label:t("layout.wallets"),href:"/wallets",icon:bu},{label:t("layout.walletTransactions"),href:"/wallet-transactions",icon:ac},{label:t("layout.currencies"),href:"/currencies",icon:Vh},{label:t("layout.redemptionCodes"),href:"/redemption-codes",icon:cy}]}function iE(){const{t}=bt();return[{label:t("layout.channels"),href:"/channels",icon:Ub},{label:t("layout.receipts"),href:"/receipts",icon:Di},{label:t("layout.apiClients"),href:"/api-clients",icon:jb}]}function lE(){const{t}=bt();return[{label:t("flows.title"),href:"/flows",icon:Pi},{label:t("flows.triggers.title"),href:"/flows/triggers",icon:Ay},{label:t("flows.instances"),href:"/flows/instances",icon:lb},{label:t("flows.apis.title"),href:"/flows/apis",icon:nu},{label:t("flows.apis.logsPage"),href:"/flows/apis/logs",icon:bh}]}function cE(){const{t}=bt();return[{label:t("layout.llmChannels"),href:"/llm/channels",icon:ky},{label:t("layout.llmModels"),href:"/llm/models",icon:Ph},{label:t("layout.llmLogs"),href:"/llm/logs",icon:Di},{label:t("layout.llmTokens"),href:"/llm/tokens",icon:Ds},{label:t("layout.llmPlayground"),href:"/llm/playground",icon:cu}]}function dE(){const{t}=bt();return[{label:t("layout.aiAgents"),href:"/ai/agents",icon:Qd},{label:t("layout.aiSkills"),href:"/ai/skills",icon:ty},{label:t("layout.aiTools"),href:"/ai/tools",icon:Ty},{label:t("layout.aiSessions"),href:"/ai/sessions",icon:Eb},{label:t("layout.aiPlayground"),href:"/ai/playground",icon:cu}]}function uE(){const{t}=bt();return[{label:t("layout.kb"),href:"/kb",icon:Jd},{label:t("layout.kbDocs"),href:"/kb/docs",icon:Zh},{label:t("layout.kbChunks"),href:"/kb/chunks",icon:Ci},{label:t("layout.kbImages"),href:"/kb/images",icon:Ti},{label:t("layout.kbChunker"),href:"/kb/chunker-preview",icon:Wb},{label:t("layout.kbPlayground"),href:"/kb/playground",icon:Db},{label:t("layout.kbWiki"),href:"/kb/wiki",icon:Sh},{label:t("layout.kbFaqs"),href:"/kb/faqs",icon:_h},{label:t("layout.kbGaps"),href:"/kb/gaps",icon:Gb},{label:t("layout.kbDiagnostics"),href:"/kb/diagnostics",icon:sy},{label:t("layout.kbSearchTest"),href:"/kb/search-test",icon:eb}]}function pE(){const{t}=bt();return[{label:t("layout.docparseEngines"),href:"/docparse",icon:tu},{label:t("layout.docparseTokens"),href:"/docparse/tokens",icon:Ds},{label:t("layout.docparseConvert"),href:"/docparse/convert",icon:Ss},{label:t("layout.docparseRecognize"),href:"/docparse/recognize",icon:Hb},{label:t("layout.docparseUsage"),href:"/docparse/usage",icon:Di}]}function mE(){const{t}=bt(),{builtinTenantable:e}=_o();return[{label:t("layout.users"),href:"/users",icon:hu},{label:t("layout.rolesPermissions"),href:"/rbac",icon:mu},{label:t("layout.cron"),href:"/crons",icon:eu},{label:t("layout.jobs"),href:"/jobs",icon:iu},...e?[{label:t("layout.tenants"),href:"/tenants",icon:Yd}]:[],{label:t("layout.webhooks"),href:"/webhooks",icon:yu},{label:t("layout.apiTokens"),href:"/tokens",icon:Ds},{label:t("layout.auditLog"),href:"/audit",icon:Xd},{label:t("layout.options"),href:"/options",icon:Ai}]}function gE(){const{t}=bt(),{currentTenantId:e,clearTenant:o,builtinTenantable:n}=_o(),{isAdmin:a}=Qo();return!n||!a()?null:l.jsxs("div",{className:"flex items-center gap-2 px-4 py-2",children:[l.jsx(nu,{className:"size-3.5 text-muted-foreground shrink-0"}),l.jsx("span",{className:"text-[11px] text-muted-foreground uppercase tracking-wider font-medium",children:t("layout.tenant")}),l.jsx("div",{className:"flex-1 min-w-0"}),e?l.jsxs("div",{className:"flex items-center gap-1",children:[l.jsx("span",{className:"text-xs font-medium truncate max-w-[80px]",children:e}),l.jsx(Gn,{variant:"ghost",size:"icon-sm",onClick:o,title:t("layout.clearTenant"),children:l.jsx(ku,{className:"size-3"})})]}):l.jsx("span",{className:"text-xs text-muted-foreground/60 italic",children:t("layout.all")})]})}function Rr(t,e){if(t===e)return!0;const o=e.endsWith("/")?e:`${e}/`;return t.startsWith(o)}function zt({label:t,icon:e,items:o}){const n=am(),[a,s]=c.useState(()=>o.some(i=>Rr(n,i.href))),r=i=>Rr(n,i.href)?!o.some(m=>m.href!==i.href&&m.href.length>i.href.length&&Rr(n,m.href)):!1;return l.jsxs(tg,{className:"mt-0 pt-0",children:[l.jsxs("button",{onClick:()=>s(!a),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:[l.jsx(e,{className:"size-3.5 shrink-0"}),l.jsx("span",{className:"truncate flex-1 text-left",children:t}),l.jsx(Mh,{className:`size-3 shrink-0 transition-transform duration-200 ${a?"":"-rotate-90"}`})]}),l.jsx("div",{className:`grid transition-[grid-template-rows] duration-200 ease-in-out ${a?"grid-rows-[1fr]":"grid-rows-[0fr]"} group-data-[collapsible=icon]:grid-rows-[1fr]`,children:l.jsx("div",{className:"overflow-hidden",children:l.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:l.jsx(og,{children:l.jsx(ng,{children:o.map(i=>{const m=i.icon,d=r(i);return l.jsx(ag,{children:l.jsxs(sg,{render:l.jsx(Tl,{href:i.href}),isActive:d,tooltip:i.label,children:[l.jsx(m,{}),l.jsx("span",{children:i.label})]})},i.href)})})})})})})]})}function fE(){var U;const t=am(),e=nm(),{isLoggedIn:o,isAuthor:n,logout:a,user:s}=Qo(),{resolvedTheme:r,setTheme:i}=vi(),[m,d]=c.useState(!1),p=nE(),u=aE(),g=sE(),y=rE(),f=iE(),b=lE(),h=dE(),w=cE(),C=uE(),v=pE(),T=mE(),{t:k}=bt(),A=sm()==="rtl"?"right":"left",{setBuiltinTenantable:D}=_o(),[R,I]=c.useState(""),B=c.useRef(t),M=t.split("/").filter(Boolean),x=M[0]!=="content-types"||M.length<2||M[1]==="builder"?null:M.length>=3&&M[2]!=="new"?`${M[1]}/${M[2]}`:M[1],W=sa({queryKey:["content-type",x],queryFn:()=>x?Ct.send(`/admin/content-types/${x}`):null,enabled:!!x}),O=(()=>{if(M[0]!=="crons"||M.length<2)return null;const E=M[1];return E==="new"?null:E})(),L=sa({queryKey:["cron-breadcrumb",O],queryFn:()=>O?Ct.send(`/admin/crons/${O}`):null,enabled:!!O}),N=M[0]==="flows"&&M.length>=3&&M[2]==="editor"?M[1]:null,V=sa({queryKey:["flow-breadcrumb",N],queryFn:()=>N?Ct.send(`/admin/flows/${N}`):null,enabled:!!N}),K=(()=>{if(M[0]!=="ai"||M[1]!=="agents")return null;const E=M[2];return!E||E==="new"?null:E})(),F=sa({queryKey:["ai-agent-breadcrumb",K],queryFn:()=>K?Ct.send(`/admin/ai/agents/${K}`):null,enabled:!!K}),ae=(()=>{var Y,be,Ae,$,ce,le;const E=t.split("/").filter(Boolean),j=[{label:k("layout.dashboard"),href:"/dashboard"}],q={posts:{label:k("layout.posts"),parent:k("layout.content")},categories:{label:k("layout.categories"),parent:k("layout.content")},tags:{label:k("layout.tags"),parent:k("layout.content")},comments:{label:k("layout.comments"),parent:k("layout.content")},media:{label:k("layout.media"),parent:k("layout.content")},pages:{label:k("layout.pages"),parent:k("layout.content")},"reusable-blocks":{label:k("layout.reusableBlocks"),parent:k("layout.content")},"content-types":{label:k("layout.contentTypes"),parent:k("layout.extension")},plugins:{label:k("layout.plugins"),parent:k("layout.extension")},users:{label:k("layout.users")},profile:{label:k("layout.profile")},rbac:{label:k("layout.rolesPermissions")},crons:{label:k("layout.cron")},jobs:{label:k("layout.jobs")},tenants:{label:k("layout.tenants")},webhooks:{label:k("layout.webhooks")},tokens:{label:k("layout.apiTokens")},workflows:{label:k("layout.workflows")},flows:{label:k("layout.flows")},llm:{label:k("layout.llm")},ai:{label:k("layout.ai")},audit:{label:k("layout.auditLog")},options:{label:k("layout.options")},products:{label:k("layout.products"),parent:k("layout.ecommerce")},"product-categories":{label:k("layout.productCategories"),parent:k("layout.ecommerce")},orders:{label:k("layout.orders"),parent:k("layout.ecommerce")},"product-comments":{label:k("layout.productComments"),parent:k("layout.ecommerce")},coupons:{label:k("layout.coupons"),parent:k("layout.ecommerce")},"shipping-templates":{label:k("layout.shippingTemplates"),parent:k("layout.ecommerce")},plans:{label:k("layout.plans"),parent:k("layout.system")},currencies:{label:k("layout.currencies"),parent:k("layout.finance")},"redemption-codes":{label:k("layout.redemptionCodes"),parent:k("layout.finance")},wallets:{label:k("layout.wallets"),parent:k("layout.finance")},"wallet-transactions":{label:k("layout.walletTransactions"),parent:k("layout.finance")},payments:{label:k("layout.paymentChannels"),parent:k("layout.finance")},"payment-orders":{label:k("layout.paymentOrders"),parent:k("layout.finance")},"payment-transactions":{label:k("layout.paymentTransactions"),parent:k("layout.finance")},channels:{label:k("layout.channels"),parent:k("layout.integration")},kb:{label:k("layout.kb")},docparse:{label:k("layout.docparse")},receipts:{label:k("layout.receipts"),parent:k("layout.integration")},"api-clients":{label:k("layout.apiClients"),parent:k("layout.integration")}};if(E.length===1&&E[0]==="dashboard")return j;if(E.length>=1){const de=E[0],fe=q[de];if(!fe)return j;if(E.length===1)j.push({label:fe.label});else{j.push({label:fe.label,href:`/${de}`});const ee=E[1];if(de==="content-types"&&ee!=="builder"){let ve,te;E[2]&&E[2]!=="new"&&E[3]!=="edit"&&E[2]!=="new"?(ve=`${E[1]} / ${E[2].replace(/_/g," ")}`,te=3):(ve=ee.replace(/_/g," "),te=2),j.push({label:ve,description:((Y=W.data)==null?void 0:Y.description)??void 0}),E[te]==="new"?j.push({label:k("common.create")}):E[te]&&E[te+1]==="edit"&&j.push({label:k("common.edit")})}else if(ee==="new")j.push({label:k("common.create")});else if(de==="content-types"&&ee==="builder")j.push({label:k("contentTypes.builder")});else if(de==="crons"&&ee!=="new"){const ve=((be=L.data)==null?void 0:be.label)??ee;j.push({label:ve}),E[2]==="edit"?j.push({label:k("common.edit")}):j.push({label:k("common.view")})}else de==="flows"&&ee==="editor"?j.push({label:k("flows.editor.title")}):de==="flows"&&ee==="instances"?j.push({label:k("flows.instances")}):de==="flows"&&ee==="triggers"?j.push({label:k("flows.triggers.title")}):de==="flows"&&ee==="apis"?(j.push({label:k("flows.apis.title")}),E[2]==="logs"&&j.push({label:k("flows.apis.logsPage")})):de==="flows"&&E[2]==="editor"?(j.push({label:((Ae=V.data)==null?void 0:Ae.name)??ee}),j.push({label:k("flows.editor.title")})):de==="docparse"?ee==="tokens"?j.push({label:k("layout.docparseTokens")}):ee==="convert"?j.push({label:k("layout.docparseConvert")}):ee==="recognize"?j.push({label:k("layout.docparseRecognize")}):ee==="usage"&&j.push({label:k("layout.docparseUsage")}):de==="kb"?ee==="docs"?j.push({label:k("layout.kbDocs"),href:"/kb/docs"}):ee==="chunks"?(j.push({label:k("layout.kbChunks"),href:"/kb/chunks"}),j.push({label:k("layout.kbImages"),href:"/kb/images"})):ee==="chunker-preview"?j.push({label:k("layout.kbChunker"),href:"/kb/chunker-preview"}):ee==="playground"?j.push({label:k("layout.kbPlayground"),href:"/kb/playground"}):ee==="faqs"?j.push({label:k("layout.kbFaqs"),href:"/kb/faqs"}):ee==="gaps"?j.push({label:k("layout.kbGaps"),href:"/kb/gaps"}):ee==="diagnostics"?j.push({label:k("layout.kbDiagnostics"),href:"/kb/diagnostics"}):ee==="search-test"?j.push({label:k("layout.kbSearchTest"),href:"/kb/search-test"}):ee==="wiki"&&(j.push({label:k("layout.kbWiki"),href:"/kb/wiki"}),E[2]&&j.push({label:E[2]})):de==="llm"&&ee==="channels"?j.push({label:k("layout.llmChannels")}):de==="llm"&&ee==="models"?j.push({label:k("layout.llmModels")}):de==="llm"&&ee==="logs"?j.push({label:k("layout.llmLogs")}):de==="llm"&&ee==="tokens"?j.push({label:k("layout.llmTokens")}):de==="llm"&&ee==="playground"?j.push({label:k("layout.llmPlayground")}):de==="ai"&&ee==="agents"?(j.push({label:k("layout.aiAgents"),href:"/ai/agents"}),E[2]==="new"?j.push({label:k("common.create")}):E[2]&&E[3]==="edit"?(j.push({label:(($=F.data)==null?void 0:$.name)??E[2]}),j.push({label:k("common.edit")})):E[2]&&E[3]==="usage"?(j.push({label:((ce=F.data)==null?void 0:ce.name)??E[2]}),j.push({label:k("aiAgents.usage")})):E[2]&&E[3]==="memories"&&(j.push({label:((le=F.data)==null?void 0:le.name)??E[2]}),j.push({label:k("aiMemory.title")}))):de==="ai"&&ee==="skills"?j.push({label:k("layout.aiSkills")}):de==="ai"&&ee==="tools"?j.push({label:k("layout.aiTools")}):de==="ai"&&ee==="sessions"?j.push({label:k("layout.aiSessions")}):de==="ai"&&ee==="playground"?j.push({label:k("layout.aiPlayground")}):E[2]==="edit"?j.push({label:k("common.edit")}):j.push({label:k("common.view")})}}return j})();if(c.useEffect(()=>{const E={"/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","/jobs":"layout.jobs","/tenants":"layout.tenants","/webhooks":"layout.webhooks","/tokens":"layout.apiTokens","/workflows":"layout.workflows","/flows/apis/logs":"flows.apis.logsPage","/flows/triggers":"flows.triggers.title","/flows/apis":"flows.apis.title","/flows/instances":"flows.instances","/flows/editor":"flows.editor.title","/flows":"layout.flows","/llm/channels":"layout.llmChannels","/llm/models":"layout.llmModels","/llm/logs":"layout.llmLogs","/llm/tokens":"layout.llmTokens","/llm/playground":"layout.llmPlayground","/ai/agents":"layout.aiAgents","/ai/skills":"layout.aiSkills","/ai/tools":"layout.aiTools","/ai/sessions":"layout.aiSessions","/ai/playground":"layout.aiPlayground","/kb/diagnostics":"layout.kbDiagnostics","/kb/search-test":"layout.kbSearchTest","/docparse":"layout.docparseEngines","/docparse/tokens":"layout.docparseTokens","/docparse/convert":"layout.docparseConvert","/docparse/recognize":"layout.docparseRecognize","/docparse/usage":"layout.docparseUsage","/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","/redemption-codes":"layout.redemptionCodes","/wallets":"layout.wallets","/wallet-transactions":"layout.walletTransactions","/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 j="";for(const[q,Y]of Object.entries(E))if(t===q||t.startsWith(q+"/")){j=k(Y);break}document.title=j?`${j} - ${R||"Admin"}`:`${R||"Admin"}`},[t,k,R]),c.useEffect(()=>{if(B.current!==t){B.current=t;const E=document.getElementById("nprogress-bar");if(E){E.style.display="block";const j=setTimeout(()=>{E.style.display="none"},300);return()=>clearTimeout(j)}}},[t]),c.useEffect(()=>{d(!0),Ct.send("/options/public").then(E=>{(E==null?void 0:E.builtin_tenantable)!=null&&D(E.builtin_tenantable)}).catch(()=>{}),Ct.send("/info").then(E=>{E!=null&&E.name&&I(E.name)}).catch(()=>{})},[]),!m)return l.jsx("div",{className:"flex min-h-screen items-center justify-center",children:l.jsx("div",{className:"text-center space-y-4",children:l.jsx("div",{className:"size-8 animate-spin rounded-full border-2 border-muted border-t-transparent mx-auto"})})});if(!o()||!n())return l.jsx(Ir,{to:"/auth/login",replace:!0});const _={dark:"#241c1a",light:"#e8e4e0"};function z(E){const j=r,q=j==="dark"?"light":"dark",be=E.currentTarget.getBoundingClientRect(),Ae=be.left+be.width/2,$=be.top+be.height/2;i(q);const ce=Math.hypot(Math.max(Ae,window.innerWidth-Ae),Math.max($,window.innerHeight-$)),le=document.createElement("div");le.style.cssText=` - position: fixed; - left: ${Ae-ce}px; - top: ${$-ce}px; - width: ${ce*2}px; - height: ${ce*2}px; - border-radius: 50%; - z-index: 99999; - pointer-events: none; - background: ${_[j??"dark"]||"#17171e"}; - transform-origin: center center; - will-change: transform; - `,document.body.appendChild(le);const de=le.animate([{transform:"scale(1)"},{transform:"scale(0)"}],{duration:400,easing:"cubic-bezier(0.4, 0, 0.2, 1)"});de.onfinish=()=>{le.remove()}}function H(E){return t===E||E!=="/dashboard"&&t.startsWith(E)}return l.jsxs(l.Fragment,{children:[l.jsx("div",{id:"nprogress-bar",style:{display:"none"},children:l.jsx("div",{className:"bar"})}),l.jsxs(xA,{children:[l.jsxs(PA,{collapsible:"icon",side:A,children:[l.jsx(IA,{className:"h-12 border-b flex items-center justify-center group-data-[collapsible=icon]:px-0 px-4 overflow-hidden",children:l.jsxs("div",{className:"flex items-center gap-2.5 w-full min-w-0 group-data-[collapsible=icon]:justify-center",children:[l.jsx("img",{src:"/admin/logo.png",alt:"RaisFast",className:"size-8 shrink-0"}),l.jsx("div",{className:"flex flex-col overflow-hidden group-data-[collapsible=icon]:hidden",children:l.jsx("span",{className:"text-lg font-semibold leading-tight whitespace-nowrap text-sidebar-foreground",children:R||k("layout.brand")})})]})}),l.jsx(gE,{}),l.jsxs(FA,{children:[l.jsx(tg,{children:l.jsx(og,{children:l.jsx(ng,{children:l.jsx(ag,{children:l.jsxs(sg,{render:l.jsx(Tl,{href:"/dashboard"}),isActive:H("/dashboard"),tooltip:k("layout.dashboard"),children:[l.jsx(su,{}),l.jsx("span",{children:k("layout.dashboard")})]})})})})}),l.jsx(zt,{label:k("layout.content"),icon:Ss,items:p}),l.jsx(zt,{label:k("layout.ecommerce"),icon:gu,items:g}),l.jsx(zt,{label:k("layout.extension"),icon:Si,items:u}),l.jsx(zt,{label:k("layout.finance"),icon:bu,items:y}),l.jsx(zt,{label:k("layout.integration"),icon:Ih,items:f}),l.jsx(zt,{label:k("layout.flows"),icon:Pi,items:b}),l.jsx(zt,{label:k("layout.llm"),icon:tu,items:w}),l.jsx(zt,{label:k("layout.ai"),icon:Qd,items:h}),l.jsx(zt,{label:k("layout.docparse"),icon:Jh,items:v}),l.jsx(zt,{label:k("layout.kb"),icon:Jd,items:C}),l.jsx(zt,{label:k("layout.system"),icon:Ai,items:T})]})]}),l.jsxs(RA,{className:"h-screen overflow-hidden",children:[l.jsxs("header",{className:"sticky top-0 z-10 flex h-12 items-center gap-2 border-b bg-background px-4",children:[l.jsx(EA,{}),l.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:[l.jsx(pu,{className:"size-3.5"}),l.jsx("span",{className:"flex-1 text-left",children:k("command.search")}),l.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:[l.jsx("span",{className:"text-xs",children:"⌘"}),"K"]})]}),l.jsx("div",{className:"flex-1"}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(YP,{}),l.jsx(Gn,{variant:"ghost",size:"icon-sm",onClick:z,title:k("layout.toggleTheme"),children:m&&r==="dark"?l.jsx(fu,{className:"size-4"}):l.jsx(uu,{className:"size-4"})}),l.jsx(SP,{}),l.jsx(CP,{}),l.jsxs(Ml,{children:[l.jsx(Ol,{className:"flex size-7 items-center justify-center rounded-full bg-muted text-xs font-medium hover:opacity-80",children:((U=s==null?void 0:s.username)==null?void 0:U.charAt(0).toUpperCase())??"U"}),l.jsxs(Ys,{align:"end",className:"min-w-36",children:[l.jsxs(gi,{className:"text-sm gap-2",onClick:()=>e.push("/profile"),children:[l.jsx(fy,{className:"size-4"}),k("layout.profile")]}),l.jsxs(gi,{className:"text-sm gap-2",onClick:a,children:[l.jsx(vb,{className:"size-4"}),k("layout.signOut")]})]})]})]})]}),l.jsxs("div",{className:"flex-1 overflow-y-auto overscroll-contain pt-6 px-6 flex flex-col",children:[l.jsxs("div",{className:"mb-4 shrink-0 flex items-center gap-4",children:[l.jsx(ZP,{children:ae.map((E,j)=>l.jsxs(XP,{children:[j>0&&l.jsx(oE,{}),E.href&&j