@maudecode/kanvil 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/server/dist/{auth-CFjetlB4.mjs → auth-D43XyHdK.mjs} +227 -71
- package/apps/server/dist/client.mjs +2 -2
- package/apps/server/dist/{config-BQw6mPzE.mjs → config-CQVdVhXv.mjs} +1 -1
- package/apps/server/dist/index.mjs +161 -44
- package/apps/server/dist/migrate.mjs +1 -1
- package/apps/server/dist/recover.mjs +3 -3
- package/apps/server/dist/{src-BaTNDJB7.mjs → src-D70GmZ5R.mjs} +83 -26
- package/apps/server/drizzle/0040_upload_urls.sql +20 -0
- package/apps/server/drizzle/0041_project_repositories.sql +2 -0
- package/apps/server/drizzle/meta/0040_snapshot.json +7170 -0
- package/apps/server/drizzle/meta/0041_snapshot.json +7183 -0
- package/apps/server/drizzle/meta/_journal.json +14 -0
- package/apps/web/dist/assets/{CompositeItem-Dotj8JZL.js → CompositeItem-DLTRsada.js} +1 -1
- package/apps/web/dist/assets/{Trans-CE4EAAY1.js → Trans-DqX-qhvQ.js} +1 -1
- package/apps/web/dist/assets/admin-settings-BQzdZII5.js +1 -0
- package/apps/web/dist/assets/{archive-restore-BMtgjFUu.js → archive-restore-BO1qng5Y.js} +1 -1
- package/apps/web/dist/assets/az-AZ-SXqDBPA2.js +1 -0
- package/apps/web/dist/assets/{az-B-DxMc__.js → az-CEW7-a7J.js} +1 -1
- package/apps/web/dist/assets/configuration-D0zvwrXt.js +1 -0
- package/apps/web/dist/assets/{corner-left-up-O4OsTW-L.js → corner-left-up-Be7Z9Uhf.js} +1 -1
- package/apps/web/dist/assets/{de-Btbkq-aX.js → de-B-oGVMYL.js} +1 -1
- package/apps/web/dist/assets/de-DE-CB7aQ6b-.js +1 -0
- package/apps/web/dist/assets/default-CCI1vZxa.js +56 -0
- package/apps/web/dist/assets/delivery-settings-BrwSrFIN.js +1 -0
- package/apps/web/dist/assets/{el-DBVEX16k.js → el-Cp69kezM.js} +1 -1
- package/apps/web/dist/assets/el-GR-D1ntYXIt.js +1 -0
- package/apps/web/dist/assets/{ellipsis-CvEPDi9V.js → ellipsis-B0AE8ax3.js} +1 -1
- package/apps/web/dist/assets/{es-CMJoxZBk.js → es-CwOMVSTx.js} +1 -1
- package/apps/web/dist/assets/es-ES-CllsaxcB.js +1 -0
- package/apps/web/dist/assets/{forms-DbfnnPg_.js → forms-CkVpTx29.js} +1 -1
- package/apps/web/dist/assets/{fr-OyEmYoRn.js → fr-Cy4co9ic.js} +1 -1
- package/apps/web/dist/assets/fr-FR-DxTw6LgI.js +1 -0
- package/apps/web/dist/assets/{hi-CIgXSseB.js → hi-DbO9TKwg.js} +1 -1
- package/apps/web/dist/assets/hi-IN-CaQga-0l.js +1 -0
- package/apps/web/dist/assets/{highlight-B4K3yEEh.js → highlight-zMg1BK-r.js} +1 -1
- package/apps/web/dist/assets/{id-WV2oSAPB.js → id-B6NKsmCm.js} +1 -1
- package/apps/web/dist/assets/id-ID-DBfwAAqU.js +1 -0
- package/apps/web/dist/assets/index-CZuFd4LM.js +17 -0
- package/apps/web/dist/assets/index-DPT5LAs1.css +2 -0
- package/apps/web/dist/assets/{invitations-BTB8f2Xl.js → invitations-Dp40BfHj.js} +1 -1
- package/apps/web/dist/assets/it-IT-BckuH9Nl.js +1 -0
- package/apps/web/dist/assets/{it-BWSrRqus.js → it-ilGYCq2T.js} +1 -1
- package/apps/web/dist/assets/{item-HmFuRZet.js → item-DQR89bKm.js} +1 -1
- package/apps/web/dist/assets/{ja-BtOHWvUJ.js → ja-D-hJRTgP.js} +1 -1
- package/apps/web/dist/assets/ja-JP-BAGgJKZ4.js +1 -0
- package/apps/web/dist/assets/ko-KR-srIEsTP5.js +1 -0
- package/apps/web/dist/assets/{ko-DAryK0HN.js → ko-ajkkoJ_d.js} +1 -1
- package/apps/web/dist/assets/{label-settings-ssfEX2uR.js → label-settings-ChnKkA97.js} +1 -1
- package/apps/web/dist/assets/{markdown-blocks-B1kO6iku.js → markdown-blocks-CpzrwyQG.js} +1 -1
- package/apps/web/dist/assets/{member-directory-BA4ZT1qU.js → member-directory-XK0ZEGUq.js} +1 -1
- package/apps/web/dist/assets/{mk-DBbiGUk5.js → mk-C_sMyEHX.js} +1 -1
- package/apps/web/dist/assets/mk-MK-BTa1NMAF.js +1 -0
- package/apps/web/dist/assets/{nl-D4V-8WdF.js → nl-D9-P4UPR.js} +1 -1
- package/apps/web/dist/assets/nl-NL-CQduhDqs.js +1 -0
- package/apps/web/dist/assets/{pl-C--QrxO0.js → pl-CiQM7fSB.js} +1 -1
- package/apps/web/dist/assets/pl-PL-BdZMf7Ni.js +1 -0
- package/apps/web/dist/assets/project-lifecycle-VYecJuiP.js +1 -0
- package/apps/web/dist/assets/project-settings-Bs6YEpo9.js +1 -0
- package/apps/web/dist/assets/{pt-BR-DvFVKpmO.js → pt-BR-CP7dhuqF.js} +1 -1
- package/apps/web/dist/assets/pt-BR-DZEXJNHg.js +1 -0
- package/apps/web/dist/assets/public-project-DUfWDao9.js +1 -0
- package/apps/web/dist/assets/{rotate-ccw-CB36Zu3L.js → rotate-ccw-Cxh9ec2s.js} +1 -1
- package/apps/web/dist/assets/{ru-UmbPUOka.js → ru-DxJ6vF4E.js} +1 -1
- package/apps/web/dist/assets/ru-RU-CZKEe7P8.js +1 -0
- package/apps/web/dist/assets/{search-Cvetr1OK.js → search-DfbsqO7M.js} +6 -6
- package/apps/web/dist/assets/{send-CJDct4Oj.js → send-DrJl0BKm.js} +1 -1
- package/apps/web/dist/assets/settings-BN8uIiBG.js +1 -0
- package/apps/web/dist/assets/{sliders-horizontal-dmqWngxy.js → sliders-horizontal-DM47MLe7.js} +1 -1
- package/apps/web/dist/assets/{switch-BtScTpP9.js → switch-CJTVGtE9.js} +1 -1
- package/apps/web/dist/assets/{table-byFokzo-.js → table-BLLjFPWD.js} +1 -1
- package/apps/web/dist/assets/{ticket-detail-C3YA3Hzc.js → ticket-detail-BTy_3JeU.js} +2 -2
- package/apps/web/dist/assets/ticket-editor-Bb_lyxnJ.js +2 -0
- package/apps/web/dist/assets/{ticket-list-BXUorfmj.js → ticket-list-Botp5qf5.js} +5 -5
- package/apps/web/dist/assets/ticket-list-controls-Dmkno4pm.js +1 -0
- package/apps/web/dist/assets/{tr-CNpgQ4ka.js → tr-9IkdRLIk.js} +1 -1
- package/apps/web/dist/assets/tr-TR-Y8wBLO8I.js +1 -0
- package/apps/web/dist/assets/{uk-MQoTXdpk.js → uk-Btampsdw.js} +1 -1
- package/apps/web/dist/assets/uk-UA-CVpasGUS.js +1 -0
- package/apps/web/dist/assets/{upload-D1x_ib3B.js → upload-HARy4VC_.js} +1 -1
- package/apps/web/dist/assets/{useQueries-BnlNCoy4.js → useQueries-CTeEF--U.js} +1 -1
- package/apps/web/dist/assets/{vi-CEw4gTWc.js → vi-BVZzOn_n.js} +1 -1
- package/apps/web/dist/assets/vi-VN-BMy-iJD-.js +1 -0
- package/apps/web/dist/assets/{visual-editor-CpdMRn3e.js → visual-editor-DKBPjqV-.js} +1 -1
- package/apps/web/dist/assets/{workspace-settings-BickBtZx.js → workspace-settings-DqzBNw60.js} +1 -1
- package/apps/web/dist/assets/{zh-CN-ChzoXkfr.js → zh-CN-BoUvF2do.js} +1 -1
- package/apps/web/dist/assets/zh-CN-Cds_v0R8.js +1 -0
- package/apps/web/dist/assets/{zh-TW-bWBKARrK.js → zh-TW-CEIDGTWe.js} +1 -1
- package/apps/web/dist/assets/zh-TW-DCCYakXz.js +1 -0
- package/apps/web/dist/index.html +8 -8
- package/docs/api.md +33 -3
- package/docs/cli.md +1 -1
- package/package.json +1 -1
- package/apps/web/dist/assets/admin-settings-CO7nnD9T.js +0 -1
- package/apps/web/dist/assets/az-AZ-R8_HFWJr.js +0 -1
- package/apps/web/dist/assets/configuration-Bnt72HRu.js +0 -1
- package/apps/web/dist/assets/de-DE-BHgMj19Y.js +0 -1
- package/apps/web/dist/assets/default-DqsN66dq.js +0 -56
- package/apps/web/dist/assets/delivery-settings-Cji0N0m0.js +0 -1
- package/apps/web/dist/assets/el-GR-CQFGM5Sr.js +0 -1
- package/apps/web/dist/assets/es-ES-DZkcRVA4.js +0 -1
- package/apps/web/dist/assets/fr-FR-CRPAezXU.js +0 -1
- package/apps/web/dist/assets/hi-IN-2YFE4UQk.js +0 -1
- package/apps/web/dist/assets/id-ID-B-J0_QIW.js +0 -1
- package/apps/web/dist/assets/index-BAnwOrh1.css +0 -2
- package/apps/web/dist/assets/index-nltuyQtq.js +0 -17
- package/apps/web/dist/assets/it-IT-CJ0HYggO.js +0 -1
- package/apps/web/dist/assets/ja-JP-DDQS7D7b.js +0 -1
- package/apps/web/dist/assets/ko-KR-CkpoewEa.js +0 -1
- package/apps/web/dist/assets/mk-MK-C0RhS6XR.js +0 -1
- package/apps/web/dist/assets/nl-NL-BSKqlzcL.js +0 -1
- package/apps/web/dist/assets/pl-PL-CHz38SiU.js +0 -1
- package/apps/web/dist/assets/project-lifecycle-COZb9FqM.js +0 -1
- package/apps/web/dist/assets/project-settings-DwmTm9KA.js +0 -1
- package/apps/web/dist/assets/pt-BR-BotWHRiO.js +0 -1
- package/apps/web/dist/assets/public-project-B3hEkeCF.js +0 -1
- package/apps/web/dist/assets/ru-RU-DtOwNna6.js +0 -1
- package/apps/web/dist/assets/settings-3IXm9lJ-.js +0 -1
- package/apps/web/dist/assets/ticket-editor-CZnZQMG1.js +0 -2
- package/apps/web/dist/assets/ticket-list-controls-BxGKCZMo.js +0 -1
- package/apps/web/dist/assets/tr-TR-CdG2alU2.js +0 -1
- package/apps/web/dist/assets/uk-UA-Ceu5gorw.js +0 -1
- package/apps/web/dist/assets/vi-VN-CxshgV4W.js +0 -1
- package/apps/web/dist/assets/zh-CN-D7Yrjhd3.js +0 -1
- package/apps/web/dist/assets/zh-TW-DyF38kqx.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{At as t,Bt as n,Cn as r,Vn as i,W as a,an as o,ct as s,dn as c,fn as l,h as u,in as d,jt as f,kn as p,m,mn as h,mt as g,p as ee,r as _,st as v,un as te,wn as y,yn as b}from"./default-DqsN66dq.js";import{$a as x,$r as ne,Ba as S,Bi as re,Br as ie,Ca as ae,Ct as C,Da as w,Ea as T,Et as E,Fa as D,Gi as O,H as oe,Ir as se,J as k,Ja as A,Jt as j,Ki as M,Lt as N,Pa as P,Q as F,Qa as I,Qi as L,Rr as ce,U as R,Vi as le,Vr as ue,X as z,Xi as de,Y as B,Yi as fe,Z as V,Zi as pe,_i as me,ai as he,ar as ge,at as H,ba as U,cn as _e,di as ve,dr as W,et as G,fi as ye,ft as be,ha as xe,ii as Se,ir as Ce,ka as we,ko as Te,kr as Ee,lr as De,ma as Oe,mi as K,mr as ke,nr as Ae,oa as je,oi as Me,or as Ne,ot as q,pa as Pe,pi as Fe,q as Ie,rr as Le,sa as Re,si as ze,sr as Be,st as J,tr as Ve,ui as He,ur as Ue,vi as We,vr as Ge,wt as Ke,xa as qe,xt as Je,ya as Ye,zi as Xe,zr as Ze}from"./search-Cvetr1OK.js";import{g as Qe}from"./item-HmFuRZet.js";import{i as $e,t as et}from"./delivery-settings-Cji0N0m0.js";import{r as tt,u as nt}from"./project-lifecycle-COZb9FqM.js";import{n as rt,r as it,t as at}from"./CompositeItem-Dotj8JZL.js";import{t as ot}from"./ticket-list-controls-BxGKCZMo.js";import{t as st}from"./upload-D1x_ib3B.js";import{t as ct}from"./forms-DbfnnPg_.js";import{Ct as lt,Et as ut,Gt as dt,Jt as ft,Kt as pt,Tt as mt,Xt as ht,Yt as gt,_t,bt as Y,en as vt,f as yt,ht as bt,i as xt,in as St,ln as Ct,n as X,p as wt,qt as Tt,r as Et,t as Dt,v as Ot,xt as kt,y as At}from"./index-nltuyQtq.js";import{t as jt}from"./switch-BtScTpP9.js";import{a as Mt,i as Nt,n as Pt,o as Ft,r as Z,t as It}from"./table-byFokzo-.js";var Q=e(i(),1),Lt=Q.createContext(void 0);function Rt(e=!1){let t=Q.useContext(Lt);if(!t&&!e)throw Error(qe(86));return t}Object.keys(ye);function zt(e,t){return e.matches(`:disabled`)?!1:!t||e.form===t||e.form===null&&!e.hasAttribute(`form`)}var $=_(),Bt=[`7`,`30`,`90`,`365`,`custom`,`never`],Vt=e=>({name:h(`settings.credentials.permission.${e}.name`),description:h(`settings.credentials.permission.${e}.description`)});function Ht(e){try{return JSON.parse(e??`null`)}catch{return null}}function Ut(e){return{permissions:p({kanvil:y(r(n))}).safeParse(Ht(e.permissions)).data?.kanvil??[],projectIds:(m.safeParse(Ht(e.metadata)).data??{projectIds:[]}).projectIds}}function Wt(){let e=Te(),t=de(),[n,r]=(0,Q.useState)(!1),[i,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(null),[d]=(0,Q.useState)(Date.now),f=x({queryKey:[`kanvil`,`credentials`],queryFn:()=>O.request(`/api/v1/credentials`,u)});function p(){r(!1),l(null)}return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(q,{title:h(`settings.credentials.title`),description:h(`settings.credentials.description`),action:(0,$.jsx)(z,{label:h(`settings.credentials.create`),variant:`default`,disabled:t.isPending,onClick:()=>r(!0),children:(0,$.jsx)(Qe,{})})}),(0,$.jsx)(k,{error:f.error??t.error}),f.isPending?(0,$.jsx)(F,{}):f.data?.length?(0,$.jsxs)(It,{"aria-label":h(`settings.credentials.title`),mobileLayout:`rows`,children:[(0,$.jsx)(Mt,{children:(0,$.jsxs)(Ft,{children:[(0,$.jsx)(Nt,{children:h(`settings.credentials.name`)}),(0,$.jsx)(Nt,{children:h(`settings.credentials.access`)}),(0,$.jsx)(Nt,{children:h(`settings.credentials.projects`)}),(0,$.jsx)(Nt,{children:h(`settings.credentials.expires`)}),(0,$.jsx)(Nt,{children:(0,$.jsx)(`span`,{className:`sr-only`,children:h(`settings.credentials.actions`)})})]})}),(0,$.jsx)(Pt,{children:f.data.map(n=>{let r=Ut(n),i=!!n.expiresAt&&new Date(n.expiresAt).getTime()<=d,s=r.projectIds?.map(e=>t.data?.find(t=>t.id===e)?.name??h(`settings.credentials.unavailableProject`));return(0,$.jsxs)(Ft,{children:[(0,$.jsx)(Z,{className:`max-w-64 whitespace-normal`,children:(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,$.jsx)(`span`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground`,children:(0,$.jsx)(Ct,{className:`size-4`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`strong`,{dir:`auto`,className:`block wrap-anywhere font-medium`,children:n.name||h(`settings.credentials.untitled`)}),(0,$.jsxs)(`code`,{className:`text-xs text-muted-foreground`,children:[n.start,`…`]})]}),(i||!n.enabled)&&(0,$.jsx)(Je,{variant:`secondary`,children:h(i?`settings.credentials.expired`:`settings.credentials.disabled`)})]})}),(0,$.jsx)(Z,{"data-label":h(`settings.credentials.access`),className:`max-w-72 whitespace-normal`,children:(0,$.jsx)(`span`,{className:`text-sm`,children:r.permissions.length===1&&r.permissions[0]===`read`?h(`settings.credentials.preset.read`):o(r.permissions.map(e=>Vt(e).name))||h(`settings.credentials.custom`)})}),(0,$.jsx)(Z,{"data-label":h(`settings.credentials.projects`),className:`max-w-64 whitespace-normal`,children:r.projectIds===null?h(`settings.credentials.global`):o(s??[])||h(`settings.credentials.noProjects`)}),(0,$.jsx)(Z,{"data-label":h(`settings.credentials.expires`),className:`whitespace-nowrap text-muted-foreground`,children:n.expiresAt?a(n.expiresAt):h(`settings.credentials.never`)}),(0,$.jsx)(Z,{children:(0,$.jsx)(R,{label:h(`settings.credentials.revoke`),icon:(0,$.jsx)(rt,{}),danger:!0,description:n.name===null?h(`settings.credentials.revokeUnnamed`):h(`settings.credentials.revokeNamed`,{name:n.name}),onConfirm:async()=>{await O.request(`/api/v1/credentials/${encodeURIComponent(n.id)}`,g,{method:`DELETE`}),await e.invalidateQueries({queryKey:[`kanvil`,`credentials`]})}})})]},n.id)})})]}):(0,$.jsx)(Ie,{title:h(`settings.credentials.empty`),icon:Ct,className:`py-16`,children:(0,$.jsx)(`p`,{className:`mb-0 max-w-sm text-center text-sm text-muted-foreground`,children:h(`settings.credentials.emptyDescription`)})}),(0,$.jsx)(G,{busy:i,title:h(c?`settings.credentials.created`:`settings.credentials.create`),open:n,onOpenChange:e=>{e||p()},children:c?(0,$.jsx)(Gt,{value:c,onDone:p}):(0,$.jsx)(qt,{pending:i,setPending:s,projects:t.data??[],loading:t.isPending,onCancel:p,onCreated:async t=>{l(t),await e.invalidateQueries({queryKey:[`kanvil`,`credentials`]})}})})]})}function Gt({value:e,onDone:t}){let[n,r]=(0,Q.useState)(!1),[i,a]=(0,Q.useState)();return(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{children:h(`settings.credentials.copyNow`)}),(0,$.jsx)(V,{label:h(`settings.credentials.newKey`),value:e.key,readOnly:!0,className:`font-mono text-xs`,onFocus:e=>e.target.select()}),(0,$.jsx)(k,{error:i}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,$.jsxs)(K,{onClick:()=>{Xe(e.key).then(()=>r(!0)).catch(a)},children:[n?(0,$.jsx)(A,{}):(0,$.jsx)(S,{}),h(n?`common.state.copied`:`settings.credentials.copy`)]}),(0,$.jsx)(K,{variant:`default`,onClick:t,children:h(`common.action.done`)})]})]})}function Kt({scope:e,checked:t,onChange:n}){let r=(0,Q.useId)(),i=Vt(e);return(0,$.jsxs)(ge,{orientation:`horizontal`,className:`border-b py-3 last:border-0 [&_[data-slot=field-description]]:m-0 [&_[data-slot=field-description]]:text-xs`,children:[(0,$.jsx)(Ve,{id:r,checked:t,onCheckedChange:n}),(0,$.jsxs)(Ne,{children:[(0,$.jsx)(De,{htmlFor:r,children:i.name}),(0,$.jsx)(Be,{children:i.description})]})]})}function qt({projects:e,loading:t,onCreated:r,onCancel:i,pending:a,setPending:o}){let s=je(),c=new Map(s.data?.map(e=>[e.id,e.name])),[{tomorrow:l,lastDay:u}]=(0,Q.useState)(()=>{let e=new Date;e.setHours(0,0,0,0),e.setDate(e.getDate()+1);let t=new Date;return t.setDate(t.getDate()+365),{tomorrow:e,lastDay:t}}),[d,f]=(0,Q.useState)(e.length===1&&e[0]?[e[0].id]:[]),[p,m]=(0,Q.useState)(!1),[g,_]=(0,Q.useState)([`read`]),[v,te]=(0,Q.useState)(()=>{let e=new Date;return e.setDate(e.getDate()+90),e}),[y,b]=(0,Q.useState)(`90`),[x,ne]=(0,Q.useState)(),[S,re]=(0,Q.useState)(`read`),[ie,ae]=(0,Q.useState)(``),C=e.filter(e=>`${e.name} ${e.key} ${c.get(e.workspaceId)??``}`.toLowerCase().includes(ie.toLowerCase()));async function w(e){e.preventDefault(),o(!0),ne(void 0);try{await r(await O.request(`/api/v1/credentials`,ee,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:ct(new FormData(e.currentTarget),`name`),projectIds:p?null:d,scopes:g,expiresIn:y===`never`?null:y===`custom`?_t(v):Number(y)*86400})}))}catch(e){ne(e)}finally{o(!1)}}return t?(0,$.jsx)(F,{}):(0,$.jsx)(`form`,{onSubmit:e=>{w(e)},children:(0,$.jsxs)(W,{disabled:a,children:[(0,$.jsx)(V,{label:h(`settings.credentials.keyName`),name:`name`,required:!0,maxLength:100,placeholder:h(`settings.credentials.keyNamePlaceholder`),autoFocus:!0}),(0,$.jsxs)(W,{className:`gap-2`,children:[(0,$.jsx)(Ue,{variant:`label`,children:h(`settings.credentials.projectAccess`)}),(0,$.jsx)(oe,{label:h(`settings.credentials.global`),description:h(`settings.credentials.globalDescription`),checked:p,onCheckedChange:m}),!p&&e.length>6&&(0,$.jsx)(H,{label:h(`settings.credentials.findProject`),value:ie,onChange:ae,className:`mb-2`}),!p&&(0,$.jsxs)(`div`,{className:`max-h-44 overflow-y-auto px-3 py-1`,children:[C.map(e=>(0,$.jsx)(oe,{label:e.name,description:h(`settings.credentials.projectDescription`,{key:e.key,workspace:c.get(e.workspaceId)??h(`settings.credentials.workspace`)}),checked:d.includes(e.id),onCheckedChange:t=>f(n=>t?[...n,e.id]:n.filter(t=>t!==e.id))},e.id)),C.length===0&&(0,$.jsx)(`p`,{className:`my-4 text-sm text-muted-foreground`,children:h(`settings.credentials.noMatches`)})]}),(0,$.jsx)(Be,{children:h(`settings.credentials.roleLimit`)})]}),(0,$.jsxs)(J,{label:h(`settings.credentials.accessLevel`),value:S,onValueChange:e=>{let t=e??`read`;re(t),t!==`custom`&&_(t===`read`?[`read`]:t===`write`?[`read`,`write`]:[`read`,`write`,`claim`])},children:[(0,$.jsx)(N,{value:`read`,children:h(`settings.credentials.preset.read`)}),(0,$.jsx)(N,{value:`write`,children:h(`settings.credentials.preset.write`)}),(0,$.jsx)(N,{value:`automation`,children:h(`settings.credentials.preset.automation`)}),(0,$.jsx)(N,{value:`custom`,children:h(`settings.credentials.preset.custom`)})]}),S===`custom`&&(0,$.jsx)(W,{className:`gap-0`,children:n.map(e=>(0,$.jsx)(Kt,{scope:e,checked:g.includes(e),onChange:t=>_(n=>t?e===`intake`?[`intake`]:[...n.filter(e=>e!==`intake`),e]:n.filter(t=>t!==e))},e))}),(0,$.jsx)(J,{label:h(`settings.credentials.expires`),value:y,onValueChange:e=>b(e??`90`),children:Bt.map(e=>(0,$.jsx)(N,{value:e,children:h(`settings.credentials.expiry.${e}`)},e))}),y===`custom`&&(0,$.jsx)(bt,{label:h(`settings.credentials.expiresOn`),value:v,onChange:e=>{e&&te(e)},bounds:{from:l,to:u}}),y===`never`&&(0,$.jsx)(Be,{children:h(`settings.credentials.neverDescription`)}),(0,$.jsx)(B,{error:x,pending:a,submitLabel:h(`settings.credentials.create`),pendingLabel:h(`settings.credentials.creating`),submitDisabled:!p&&!d.length||!g.length,onCancel:i})]})})}function Jt(){let e=Te(),t=pe(),n=M.useSession(),r=(0,Q.useRef)(null),[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(),[c,l]=(0,Q.useState)(),[u,d]=(0,Q.useState)(``);async function f(){await Promise.all([n.refetch(),e.invalidateQueries({queryKey:[`kanvil`]})])}async function p(e){a(!0),s(void 0),d(``);try{await O.request(`/api/v1/profile/photo`,b,e?{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(await le(e))}:{method:`DELETE`}),await f(),d(h(e?`settings.profile.photoUpdated`:`settings.profile.photoRemoved`))}catch(e){s(e)}finally{a(!1)}}return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(q,{title:h(`settings.profile.title`)}),(0,$.jsx)(Dt,{name:t.name,nameLabel:h(`settings.profile.displayName`),withDescription:!1,canEdit:!0,pending:i,error:c,editLabel:h(`settings.profile.edit`),media:(0,$.jsx)($e,{label:h(`settings.profile.changePhoto`),round:!0,disabled:i,onClick:()=>r.current?.click(),children:(0,$.jsx)(Re,{name:t.name,image:t.image,className:`size-16 text-xl`})}),onSave:async({name:e})=>{l(void 0),a(!0);try{let t=await M.updateUser({name:e});if(t.error)throw Error(t.error.message);await f(),d(h(`settings.profile.saved`))}catch(e){throw l(e),e}finally{a(!1)}},children:(0,$.jsx)(`p`,{className:`mb-0 text-sm break-all text-muted-foreground`,children:t.email})}),t.image&&(0,$.jsxs)(K,{className:`mt-5`,variant:`ghost`,disabled:i,onClick:()=>{p()},children:[(0,$.jsx)(rt,{}),h(`settings.profile.removePhoto`)]}),(0,$.jsx)(Ge,{ref:r,type:`file`,disabled:i,accept:`image/png,image/jpeg,image/webp`,className:`hidden`,"aria-label":h(`settings.profile.photoFile`),onChange:e=>{let t=e.currentTarget.files?.[0];t&&p(t),e.currentTarget.value=``}}),(0,$.jsx)(k,{error:o}),u&&(0,$.jsx)(`p`,{role:`status`,className:`mt-4 mb-0 text-sm text-muted-foreground`,children:u})]})}function Yt({palette:e,clip:t}){return(0,$.jsxs)(`g`,{clipPath:t,children:[(0,$.jsx)(`rect`,{width:`160`,height:`96`,fill:e.background}),(0,$.jsx)(`rect`,{width:`34`,height:`96`,fill:e.sidebar}),(0,$.jsx)(`rect`,{x:`7`,y:`10`,width:`19`,height:`4`,rx:`2`,fill:e.primary}),[0,1,2].map(t=>(0,$.jsx)(`rect`,{x:`7`,y:27+t*12,width:t===2?12:21,height:`3`,rx:`1.5`,fill:e.foreground,opacity:`.25`},t)),(0,$.jsx)(`rect`,{x:`45`,y:`12`,width:`65`,height:`5`,rx:`2`,fill:e.foreground,opacity:`.8`}),(0,$.jsx)(`rect`,{x:`127`,y:`10`,width:`23`,height:`8`,rx:`3`,fill:e.primary}),[0,1,2].map(t=>(0,$.jsxs)(`g`,{children:[(0,$.jsx)(`rect`,{x:`45`,y:34+t*18,width:`57`,height:`3`,rx:`1.5`,fill:e.foreground,opacity:`.3`}),(0,$.jsx)(`circle`,{cx:`130`,cy:35+t*18,r:`3`,fill:e.primary,opacity:t===1?1:.35}),(0,$.jsx)(`rect`,{x:`45`,y:43+t*18,width:`105`,height:`.6`,fill:e.foreground,opacity:`.12`})]},t))]})}function Xt({theme:e,mode:t=`system`,variant:n=`wireframe`,className:r}){let i=(0,Q.useId)();if(n===`orb`&&t!==`system`){let n=e[t],i=t===`light`;return(0,$.jsx)(`span`,{"aria-hidden":`true`,className:D(`relative block size-14 shrink-0 overflow-hidden rounded-full border-2 border-background`,r),style:{boxShadow:i?`inset 0 0 0 1px rgb(0 0 0 / .1), 0 1px 2px rgb(0 0 0 / .08)`:`inset 0 0 0 1px rgb(255 255 255 / .14), 0 1px 2px rgb(0 0 0 / .18)`},children:(0,$.jsx)(`span`,{className:`absolute inset-0 rounded-full`,style:{backgroundColor:`color-mix(in oklab, ${n.background} 80%, ${i?`#ffffff`:`#09090b`})`,backgroundImage:`radial-gradient(circle at ${i?`72% 22%`:`28% 78%`} in oklab, ${n.primary} 0%, color-mix(in oklab, ${n.primary} ${i?`72%`:`62%`}, transparent) 28%, transparent 58%), radial-gradient(circle at ${i?`18% 82%`:`82% 18%`} in oklab, color-mix(in oklab, ${n.primary} 45%, transparent) 0%, transparent 55%)`,filter:`blur(3px)`,transform:`scale(1.1)`}})})}return(0,$.jsxs)(`svg`,{viewBox:`0 0 160 96`,preserveAspectRatio:`none`,className:D(`w-full rounded-md`,r),"aria-hidden":`true`,children:[(0,$.jsxs)(`defs`,{children:[(0,$.jsx)(`clipPath`,{id:`${i}-light`,children:(0,$.jsx)(`rect`,{width:`80`,height:`96`})}),(0,$.jsx)(`clipPath`,{id:`${i}-dark`,children:(0,$.jsx)(`rect`,{x:`80`,width:`80`,height:`96`})})]}),t===`system`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Yt,{palette:e.light,clip:`url(#${i}-light)`}),(0,$.jsx)(Yt,{palette:e.dark,clip:`url(#${i}-dark)`})]}):(0,$.jsx)(Yt,{palette:e[t]})]})}var Zt=`data-checked`,Qt=`data-unchecked`,$t={checked(e){return e?{[Zt]:``}:{[Qt]:``}},...Oe,...Fe},en=Q.createContext(void 0);function tn(){return Q.useContext(en)}var nn=Q.createContext(void 0);function rn(){let e=Q.useContext(nn);if(e===void 0)throw Error(qe(52));return e}var an=Q.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,readOnly:a=!1,required:o=!1,"aria-labelledby":s,value:c,inputRef:l,nativeButton:u=!1,id:d,style:f,...p}=e,m=tn(),{disabled:h,readOnly:g,required:ee,form:_,checkedValue:v,touched:te=!1,validation:y,name:b,setCheckedValue:x=w,setTouched:ne=w,registerInputRef:S=w}=m??{},{setTouched:re,setFilled:C,state:E,disabled:D}=ve(),O=ue(),{labelId:oe,getDescriptionProps:k}=Me(),A=D||O.disabled||h||i,j=g||a,M=ee||o,N=_,P=m?v===c:c===``,F=Q.useRef(null),I=ie(A,F),L=Q.useRef(null),ce=y?.registerInput,R=Q.useCallback(e=>ce?.(e,{controlRef:F,value:void 0}),[ce]),le=we(l,L,S,R);Ye(()=>{L.current?.checked&&C(!0)},[C]),Ye(()=>{L.current&&S(A&&P?null:L.current)},[P,A,S]);let z=ze(),de=Se({id:d}),B=u?void 0:de,fe={role:`radio`,"aria-checked":P,"aria-labelledby":he(s,oe,L,!u,B,p[`aria-label`]),[At]:P?``:void 0,id:u?de:z,onKeyDown(e){e.key===`Enter`&&e.preventDefault()},onClick(e){if(e.defaultPrevented||A||j)return;e.preventDefault();let t=L.current;t&&We(t,e)},onFocus(e){I(!0),!(e.defaultPrevented||A||j||!te)&&(L.current?.click(),ne(!1))},onBlur(){m||I(!1)}},{getButtonProps:V,buttonRef:pe}=me({disabled:A,native:u,composite:!1}),ge={type:`radio`,ref:le,form:N,id:B,name:b,tabIndex:-1,style:b?Le:Ae,"aria-hidden":!0,...c===void 0?T:{value:_e(c)},disabled:A,checked:P,required:M,readOnly:j,onChange(e){if(e.nativeEvent.defaultPrevented||A||j||c===void 0)return;let t=se(Ee,e.nativeEvent);x(c,t),!t.isCanceled&&re(!0)},onClick(e){e.stopPropagation()},onFocus(){F.current?.focus()}},H=Q.useMemo(()=>({...E,required:M,disabled:A,readOnly:j,checked:P}),[E,A,j,P,M]),U=H,W=m!==void 0,G=[t,F,pe],ye=[fe,p,V,k,y?e=>y.getValidationProps(A,e):T],be=ae(`span`,e,{enabled:!W,state:H,ref:G,props:ye,stateAttributesMapping:$t});return(0,$.jsxs)(nn.Provider,{value:U,children:[W?(0,$.jsx)(at,{tag:`span`,render:n,className:r,style:f,state:H,refs:G,props:ye,stateAttributesMapping:$t}):be,(0,$.jsx)(`input`,{...ge,suppressHydrationWarning:!0})]})}),on=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=rn(),c=s.checked,{mounted:l,transitionStatus:u,setMounted:d}=Pe(c),f={...s,transitionStatus:u},p=Q.useRef(null),m=a||l,h=ae(`span`,e,{ref:[t,p],state:f,props:o,stateAttributesMapping:$t});return xe({batch:!0,enabled:!c,open:c,ref:p,onComplete(){c||d(!1)}}),m?h:null}),sn=[j],cn=Q.forwardRef(function(e,t){let{render:n,className:r,disabled:i,readOnly:a,required:o,onValueChange:s,value:c,defaultValue:l,form:u,name:d,inputRef:f,id:p,style:m,...h}=e,{setTouched:g,setFocused:ee,validationMode:_,name:v,disabled:te,state:y,validation:b,setDirty:x,setFilled:S,validityData:re}=ve(),{labelId:ie}=Me(),{clearErrors:ae,elementRef:C}=He(),w=Rt(!0),T=te||i,E=v??d,D=ze(p),[O,oe]=Ce({controlled:c,default:l,name:`RadioGroup`,state:`value`}),[se,k]=Q.useState(!1),A=U((e,t)=>{s?.(e,t),!t.isCanceled&&oe(e)}),j=b.getInputControl,M=Q.useMemo(()=>({get current(){return j()}}),[j]),N=Q.useRef(null),P=Q.useRef(null),F=we(N,f),I=Q.useRef(F),L=U(e=>{(N.current!==e||I.current!==F)&&(I.current=F,F?.(e))});Ye(()=>{L(N.current)},[F,L]);let R=U(e=>{if(e){if(!e.disabled){P.current||=e;let t=N.current;(e.checked||t==null||t.disabled)&&L(e)}return()=>{P.current===e&&(P.current=null),N.current===e&&L(null)}}}),le=U(()=>{let e=C.current;if(!e)return O??null;for(let t of b.registeredInputs.keys())if(t.checked&&zt(t,e))return O??null;return null});Ze(M,D,O??null,le,!T,d),ce(O,()=>{ae(E),x(O!==re.initialValue),S(O!=null),b.change(O);let e=P.current;O==null&&e&&!e.disabled&&L(e)});let ue=ie??w?.legendId,z={...y,disabled:T??!1,required:o??!1,readOnly:a??!1},de=Q.useMemo(()=>({checkedValue:O,disabled:T,form:u,validation:b,name:E,readOnly:a,registerInputRef:R,required:o,setCheckedValue:A,setTouched:k,touched:se}),[O,T,u,b,E,a,R,o,A,k,se]),B={id:p,role:`radiogroup`,"aria-required":o||void 0,"aria-disabled":T||void 0,"aria-readonly":a||void 0,"aria-labelledby":ue,onBlur(e){ne(e.currentTarget,e.relatedTarget)||(k(!1),g(!0),ee(!1),_===`onBlur`&&b.commit(O))},onKeyDownCapture(e){e.key.startsWith(`Arrow`)&&k(!0)}};return(0,$.jsx)(en.Provider,{value:de,children:(0,$.jsx)(Ot,{render:n,className:r,style:m,state:z,props:[B,h,e=>b.getValidationProps(T??!1,e)],refs:[t],stateAttributesMapping:Fe,enableHomeAndEndKeys:!1,modifierKeys:sn})})});function ln({className:e,...t}){return(0,$.jsx)(cn,{"data-slot":`radio-group`,className:D(`grid w-full gap-2`,e),...t})}function un({className:e,...t}){return(0,$.jsx)(an,{"data-slot":`radio-group-item`,className:D(`group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-transparent focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background 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 group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary`,e),...t,children:(0,$.jsx)(on,{"data-slot":`radio-group-indicator`,className:`flex size-4 items-center justify-center`,children:(0,$.jsx)(`span`,{className:`absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground`})})})}var dn=[`system`,`light`,`dark`],fn=e=>re(`${e.id}.kanvil-theme.json`,ft([e]));function pn({theme:e,active:t,activeModes:n,onPickMode:r,actions:i}){return(0,$.jsxs)(`div`,{className:`relative overflow-hidden rounded-xl border border-border/70 bg-background transition-colors hover:bg-accent/10 has-[>[data-slot=radio-group-item]:focus-visible]:ring-2 has-[>[data-slot=radio-group-item]:focus-visible]:ring-ring has-[>[data-slot=radio-group-item]:focus-visible]:ring-offset-2 has-[>[data-slot=radio-group-item]:focus-visible]:ring-offset-background data-[selected=true]:bg-accent/30 data-[selected=true]:shadow-[inset_0_0_0_1px_var(--ring)]`,"data-selected":t,children:[(0,$.jsx)(un,{value:e.id,id:`theme-${e.id}`,className:`peer absolute inset-0 size-full aspect-auto rounded-xl opacity-0`}),(0,$.jsx)(`div`,{className:`pointer-events-none relative flex min-h-16 items-center justify-center gap-2.5 px-3 pt-3`,children:[`light`,`dark`].map(t=>{let i=n.includes(t),a=t===`light`?vt:St;return(0,$.jsxs)(C,{children:[(0,$.jsxs)(E,{render:(0,$.jsx)(K,{variant:`ghost`,"aria-label":h(`settings.appearance.useMode.${t}`,{name:e.name}),"aria-pressed":i,className:`pointer-events-auto relative size-[68px] shrink-0 rounded-full p-1 transition-transform hover:scale-105 hover:bg-transparent aria-pressed:hover:scale-100`,onClick:()=>r(t)}),children:[(0,$.jsx)(Xt,{theme:e,mode:t,variant:`orb`}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0 rounded-full ring-2 ring-inset ring-ring`}),(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`pointer-events-none absolute bottom-0.5 right-0.5 flex size-5 items-center justify-center rounded-full border border-border/70 bg-background text-foreground shadow-sm`,children:(0,$.jsx)(a,{className:`size-3`})})]})]}),(0,$.jsx)(Ke,{children:h(`settings.appearance.modeOnly.${t}`)})]},t)})}),(0,$.jsxs)(`div`,{className:`pointer-events-none relative flex items-center gap-2 px-3 pb-3 pt-2`,children:[(0,$.jsx)(ke,{htmlFor:`theme-${e.id}`,title:e.name,className:`min-w-0 flex-1 truncate text-sm font-medium`,children:e.name}),(0,$.jsx)(`div`,{className:`pointer-events-auto relative flex shrink-0 items-center gap-1`,children:i})]})]})}var mn=e=>e.toLocaleLowerCase().normalize(`NFD`).replace(/\p{Diacritic}/gu,``);function hn(){let e=pt(),t=(0,Q.useRef)(null),[n,i]=(0,Q.useState)(null),[a,o]=(0,Q.useState)(``),[s,c]=(0,Q.useState)(),l={...e.selected,light:e.lightTheme.light,dark:e.darkTheme.dark};function u(e){i({...e,id:`custom-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`,name:h(`settings.appearance.copyName`,{name:e.name})})}let d=e.themes.filter(e=>mn(e.name).includes(mn(a)));return(0,$.jsxs)(`section`,{className:`space-y-5`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h2`,{className:`mb-3 text-sm font-normal text-muted-foreground`,children:h(`settings.appearance.colorScheme`)}),(0,$.jsx)(ln,{value:e.mode,onValueChange:t=>e.setMode(r(dn).parse(t)),"aria-label":h(`settings.appearance.theme`),className:`grid grid-cols-3 gap-3`,children:dn.map(t=>(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(un,{id:`mode-${t}`,value:t,className:`peer absolute inset-0 z-10 size-full aspect-auto rounded-xl opacity-0`}),(0,$.jsxs)(ke,{htmlFor:`mode-${t}`,className:`theme-choice flex w-full cursor-pointer flex-col gap-2 rounded-lg border border-border bg-background p-2 text-xs font-medium transition-colors peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-background hover:bg-muted/50 data-[selected=true]:border-primary data-[selected=true]:ring-1 data-[selected=true]:ring-primary [&_svg]:overflow-hidden [&_svg]:border [&_svg]:border-foreground/10`,"data-selected":e.mode===t,children:[(0,$.jsx)(Xt,{theme:l,mode:t,className:`h-[8.75rem]`}),(0,$.jsx)(`span`,{className:`pb-1`,children:dt[t]})]})]},t))})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center justify-between gap-3`,children:[(0,$.jsx)(`h2`,{className:`mb-0 text-sm font-normal text-muted-foreground`,children:h(`settings.appearance.themes`)}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center justify-end gap-1`,children:[(0,$.jsx)(H,{label:h(`settings.appearance.search`),placeholder:h(`settings.appearance.searchPlaceholder`),value:a,onChange:o}),(0,$.jsx)(z,{label:h(`settings.appearance.create`),size:`icon-sm`,onClick:()=>u(l),children:(0,$.jsx)(Qe,{})}),(0,$.jsx)(z,{label:h(`settings.appearance.add`),size:`icon-sm`,onClick:()=>t.current?.click(),children:(0,$.jsx)(st,{})})]})]}),(0,$.jsx)(Ge,{ref:t,type:`file`,accept:`application/json,.json`,className:`hidden`,"aria-label":h(`settings.appearance.importFile`),onChange:t=>{let n=t.currentTarget.files?.[0];n&&(c(void 0),n.text().then(t=>e.importThemes(Tt(t))).catch(c),t.currentTarget.value=``)}}),(0,$.jsx)(k,{error:s}),(0,$.jsx)(ln,{"aria-label":h(`settings.appearance.colorTheme`),value:e.color,onValueChange:t=>e.setColor(String(t)),className:`grid grid-cols-[repeat(auto-fit,minmax(min(100%,16rem),1fr))] gap-2`,children:d.map(t=>(0,$.jsx)(pn,{theme:t,active:t.id===e.color,activeModes:[`light`,`dark`].filter(n=>(n===`light`?e.lightTheme.id:e.darkTheme.id)===t.id),onPickMode:n=>e.setColorForMode(n,t.id),actions:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{label:h(`settings.appearance.duplicate`,{name:t.name}),className:`size-6`,onClick:()=>u(t),children:(0,$.jsx)(S,{})}),t.id.startsWith(`custom-`)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(z,{label:h(`settings.appearance.edit`,{name:t.name}),className:`size-6`,onClick:()=>i(t),children:(0,$.jsx)(it,{})}),(0,$.jsx)(z,{label:h(`settings.appearance.export`,{name:t.name}),className:`size-6`,onClick:()=>fn(t),children:(0,$.jsx)(nt,{})}),(0,$.jsx)(R,{label:h(`settings.appearance.delete`,{name:t.name}),description:h(`settings.appearance.deleteDescription`,{name:t.name}),danger:!0,icon:(0,$.jsx)(rt,{}),onConfirm:async()=>e.remove(t.id)})]})]})},t.id))}),d.length===0&&(0,$.jsx)(`p`,{role:`status`,className:`mt-4`,children:h(`settings.appearance.noMatches`)})]}),(0,$.jsx)(G,{title:h(`settings.appearance.customTheme`),open:!!n,onOpenChange:e=>{e||i(null)},children:n&&(0,$.jsx)(gn,{initial:n,onSaved:t=>{e.save(t),o(``),i(null)}})})]})}function gn({initial:e,onSaved:t}){let[n,r]=(0,Q.useState)(e),[i,a]=(0,Q.useState)();return(0,$.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),a(void 0);try{t(ht(n))}catch(e){a(e)}},children:[(0,$.jsx)(V,{label:h(`settings.appearance.name`),value:n.name,required:!0,maxLength:60,onChange:e=>r({...n,name:e.target.value})}),(0,$.jsx)(`div`,{className:`grid grid-cols-2 gap-5`,children:[`light`,`dark`].map(e=>(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{children:dt[e]}),(0,$.jsx)(Xt,{theme:n,mode:e}),(0,$.jsx)(`div`,{className:`mt-4 space-y-3`,children:gt.keyof().options.map(t=>(0,$.jsx)(V,{label:h(`settings.appearance.paletteColor`,{mode:dt[e],color:h(`settings.appearance.color.${t}`)}),type:`color`,value:n[e][t],onChange:i=>r({...n,[e]:{...n[e],[t]:i.target.value}})},t))})]},e))}),(0,$.jsx)(k,{error:i}),(0,$.jsx)(K,{type:`submit`,variant:`default`,className:`mt-4`,children:h(`settings.appearance.save`)})]})}function _n({section:e}){let[t,n]=yt(),r=pe(),i=L(),a=x({queryKey:[`accounts`],refetchOnMount:`always`,queryFn:async()=>{let e=await M.listAccounts();if(e.error)throw Error(e.error.message);return e.data}}),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(!1);async function u(e){e.preventDefault(),n(void 0);let t=new FormData(e.currentTarget);if(t.get(`next`)!==t.get(`confirm`))n(Error(h(`settings.account.passwordMismatch`)));else{l(!0);try{let e=await M.changePassword({currentPassword:ct(t,`current`),newPassword:ct(t,`next`),revokeOtherSessions:!0});if(e.error)throw Error(e.error.message);s(!1),P.success(h(`settings.account.passwordUpdated`))}catch(e){n(e)}finally{l(!1)}}}return(0,$.jsxs)(Et,{title:h(`settings.account.title`),section:e,children:[(0,$.jsxs)(xt,{value:`account`,children:[(0,$.jsx)(Jt,{}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(q,{title:h(`settings.account.security`)}),(0,$.jsx)(X,{title:h(`settings.account.localPassword`),description:h(`settings.account.localPasswordDescription`),children:(0,$.jsx)(K,{onClick:()=>{n(void 0),s(!0)},children:h(`settings.account.changePassword`)})}),i.data?.providers.map(e=>{let t=a.data?.some(t=>t.providerId===e.id);return(0,$.jsx)(X,{title:e.name,description:h(t?`settings.account.oidcLinked`:`settings.account.oidcUnlinked`),children:t?(0,$.jsx)(Je,{variant:`secondary`,children:h(`settings.account.linked`)}):(0,$.jsx)(K,{disabled:c,onClick:()=>{l(!0),n(void 0),M.linkSocial({provider:e.id,callbackURL:`${window.location.origin}/settings?section=account`,errorCallbackURL:`${window.location.origin}/settings?section=account`}).then(e=>{if(e.error)throw Error(e.error.message)}).catch(n).finally(()=>l(!1))},children:h(`settings.account.link`,{name:e.name})})},e.id)}),(0,$.jsx)(tt,{account:r,onDeleted:()=>fe(r).catch(async()=>{await r.clearPrivateData(),window.location.assign(`/login`)})}),!o&&(0,$.jsx)(k,{error:t}),(0,$.jsx)(k,{error:a.error??i.error})]}),(0,$.jsx)(G,{title:h(`settings.account.changePassword`),open:o,onOpenChange:s,busy:c,children:(0,$.jsxs)(`form`,{onSubmit:e=>{u(e)},children:[(0,$.jsx)(V,{label:h(`settings.account.currentPassword`),name:`current`,type:`password`,autoComplete:`current-password`,required:!0}),(0,$.jsx)(V,{label:h(`settings.account.newPassword`),name:`next`,type:`password`,autoComplete:`new-password`,required:!0,minLength:12,maxLength:128}),(0,$.jsx)(V,{label:h(`settings.account.confirmPassword`),name:`confirm`,type:`password`,autoComplete:`new-password`,required:!0,minLength:12,maxLength:128}),(0,$.jsx)(B,{error:t,pending:c,submitLabel:h(`settings.account.changePassword`),onCancel:()=>s(!1)})]})})]}),(0,$.jsx)(xt,{value:`appearance`,children:(0,$.jsx)(hn,{})}),(0,$.jsx)(xt,{value:`preferences`,children:(0,$.jsx)(vn,{})}),(0,$.jsx)(xt,{value:`credentials`,children:(0,$.jsx)(Wt,{})}),(0,$.jsxs)(xt,{value:`notifications`,children:[(0,$.jsx)(yn,{pushAvailable:i.data?.push??!1}),(0,$.jsx)(et,{emailAvailable:i.data?.email??!1})]})]})}function vn(){let e=pe(),[t,n]=lt(Y.weekStart),[r,i]=lt(Y.sidebar),{preference:a}=ut();return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`section`,{className:`[&>.setting-row:last-child]:border-b-0`,children:[(0,$.jsx)(q,{title:h(`settings.preferences.behavior`)}),(0,$.jsx)(X,{title:h(`common.language.label`),description:h(`settings.preferences.languageDescription`),children:(0,$.jsxs)(J,{label:h(`common.language.label`),labelHidden:!0,className:`mb-0 w-44`,value:a,onValueChange:e=>void mt(c.parse(e)).catch(be),children:[(0,$.jsx)(N,{value:`system`,children:h(`common.language.system`)}),l.map(e=>(0,$.jsx)(N,{value:e,lang:e,children:te[e].name},e))]})}),(0,$.jsx)(X,{title:h(`settings.preferences.weekStart`),description:h(`settings.preferences.weekStartDescription`),children:(0,$.jsxs)(J,{label:h(`settings.preferences.weekStart`),labelHidden:!0,className:`mb-0 w-44`,value:t,onValueChange:e=>n(Y.weekStart.schema.parse(e)),children:[(0,$.jsx)(N,{value:`language`,children:h(`settings.preferences.weekStartLanguage`)}),(0,$.jsx)(N,{value:`sunday`,children:d(new Date(2023,0,1),{weekday:`long`})}),(0,$.jsx)(N,{value:`monday`,children:d(new Date(2023,0,2),{weekday:`long`})}),(0,$.jsx)(N,{value:`saturday`,children:d(new Date(2023,0,7),{weekday:`long`})})]})}),(0,$.jsx)(X,{title:h(`settings.preferences.sidebar`),description:h(`settings.preferences.sidebarDescription`),children:(0,$.jsxs)(J,{label:h(`settings.preferences.sidebar`),labelHidden:!0,className:`mb-0 w-44`,value:r,onValueChange:e=>i(Y.sidebar.schema.parse(e)),children:[(0,$.jsx)(N,{value:`last`,children:h(`settings.preferences.sidebarLast`)}),(0,$.jsx)(N,{value:`expanded`,children:h(`settings.preferences.sidebarExpanded`)}),(0,$.jsx)(N,{value:`collapsed`,children:h(`settings.preferences.sidebarCollapsed`)})]})})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(q,{title:h(`settings.preferences.ticketLists`)}),(0,$.jsx)(`div`,{className:`grid max-w-sm gap-3`,children:(0,$.jsx)(ot,{})})]}),(0,$.jsx)(`section`,{className:`[&>.setting-row:last-child]:border-b-0`,children:(0,$.jsx)(X,{title:h(`settings.preferences.reset`),description:h(`settings.preferences.resetDescription`),children:(0,$.jsx)(K,{variant:`outline`,onClick:()=>{kt(e.id,Object.values(Y)),P.success(h(`settings.preferences.resetDone`))},children:h(`settings.preferences.reset`)})})})]})}function yn({pushAvailable:e}){let n=Te(),r=O.notificationPreferences(),i=x(r),a=I({mutationFn:e=>O.setNotificationPreferences(e),networkMode:`always`,retry:!1,onSuccess:e=>n.setQueryData(r.queryKey,e)}),o=a.isPending?a.variables:i.data,c=e=>{o&&a.mutate({...o,...e})};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`section`,{className:`[&>.setting-row:last-child]:border-b-0`,children:[(0,$.jsx)(q,{title:h(`settings.notifications.title`)}),(0,$.jsx)(k,{error:i.error??a.error}),i.isPending?(0,$.jsx)(F,{}):o&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(X,{title:h(`settings.notifications.inbox`),description:h(`settings.notifications.inboxDescription`),children:(0,$.jsx)(jt,{"aria-label":h(`settings.notifications.inboxSwitch`),checked:o.inApp,disabled:a.isPending,onCheckedChange:e=>c({inApp:e})})}),(0,$.jsx)(X,{title:h(`settings.notifications.push`),description:h(e?`settings.notifications.pushDescription`:`settings.notifications.pushUnavailable`),children:(0,$.jsx)(jt,{"aria-label":h(`settings.notifications.pushSwitch`),checked:o.push,disabled:a.isPending||!e,onCheckedChange:e=>c({push:e})})})]})]}),o&&(0,$.jsxs)(`section`,{className:`[&>.setting-row:last-child]:border-b-0`,children:[(0,$.jsx)(q,{title:h(`settings.notifications.categories`)}),v.map(e=>{let t=wt[e];return(0,$.jsx)(X,{compact:!0,title:(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,$.jsx)(t,{"aria-hidden":!0,className:`size-4 text-muted-foreground`}),s[e]]}),children:(0,$.jsx)(jt,{"aria-label":h(`settings.notifications.categorySwitch`,{label:s[e]}),checked:o.categories[e],disabled:a.isPending,onCheckedChange:t=>c({categories:{...o.categories,[e]:t}})})},e)}),(0,$.jsx)(X,{title:h(`settings.notifications.reminder`),description:h(`settings.notifications.reminderDescription`),children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(bn,{value:o.reminderLead.amount,disabled:a.isPending||!o.categories.due_soon,onCommit:e=>c({reminderLead:{...o.reminderLead,amount:e}})},o.reminderLead.amount),(0,$.jsx)(J,{label:h(`settings.notifications.reminderUnit`),labelHidden:!0,className:`mb-0 w-32`,value:o.reminderLead.unit,disabled:a.isPending||!o.categories.due_soon,onValueChange:e=>c({reminderLead:{...o.reminderLead,unit:t.parse(e)}}),children:f.map(e=>(0,$.jsx)(N,{value:e,children:h(`settings.notifications.unit.${e}`)},e))})]})})]})]})}function bn({value:e,disabled:t,onCommit:n}){let[r,i]=(0,Q.useState)(String(e)),a=()=>{let t=Number(r);Number.isInteger(t)&&t>=1&&t<=999?t!==e&&n(t):i(String(e))};return(0,$.jsx)(V,{label:h(`settings.notifications.reminderAmount`),labelHidden:!0,type:`number`,inputMode:`numeric`,min:1,max:999,className:`w-20`,value:r,disabled:t,onChange:e=>i(e.currentTarget.value),onBlur:a,onKeyDown:e=>{e.key===`Enter`&&a()}})}export{_n as AccountSettings};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/visual-editor-CpdMRn3e.js","assets/rolldown-runtime-COiEfhsA.js","assets/default-DqsN66dq.js","assets/preload-helper-BLdHbfdN.js","assets/core-jXc03Sty.js","assets/en-EnSRisMz.js","assets/search-Cvetr1OK.js","assets/toDate-B3HYxwtT.js","assets/forms-DbfnnPg_.js","assets/index-nltuyQtq.js","assets/item-HmFuRZet.js","assets/Trans-CE4EAAY1.js","assets/CompositeItem-Dotj8JZL.js","assets/en-US-DKYSujv3.js","assets/index-BAnwOrh1.css","assets/highlight-B4K3yEEh.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{F as t,I as n,It as r,L as i,Ln as a,Lt as o,Nn as s,U as c,Vn as l,at as u,i as d,jn as f,kn as p,mn as m,o as h,r as g,wn as ee}from"./default-DqsN66dq.js";import{$ as _,$a as v,$n as y,A as te,E as ne,F as b,Fa as x,Fi as S,Ga as C,Gi as w,Ha as re,Hi as T,I as E,Ia as D,Ii as ie,J as O,Ja as k,Lt as A,M as j,Mi as ae,Ni as oe,Ot as se,P as M,Pa as N,Pi as P,Q as ce,R as le,Ri as ue,U as de,Va as fe,Wa as F,X as I,Y as pe,Z as L,Za as R,Zi as me,_r as z,_t as he,ar as ge,bt as _e,ca as ve,ct as ye,dt as B,ea as V,et as H,ft as be,gi as xe,gr as Se,gt as Ce,hr as U,it as W,j as G,k as we,ko as Te,lr as K,mi as q,ot as J,ra as Ee,st as De,ut as Oe,vr as ke,vt as Ae,xt as Y,yt as je}from"./search-Cvetr1OK.js";import{t as Me}from"./preload-helper-BLdHbfdN.js";import{a as Ne,d as Pe,g as Fe,i as Ie,n as Le,o as Re,r as ze,s as Be,t as Ve}from"./item-HmFuRZet.js";import{i as He,n as Ue,r as We}from"./CompositeItem-Dotj8JZL.js";import{t as Ge}from"./corner-left-up-O4OsTW-L.js";import{t as Ke}from"./rotate-ccw-CB36Zu3L.js";import{t as qe}from"./sliders-horizontal-dmqWngxy.js";import{t as Je}from"./upload-D1x_ib3B.js";import{r as Ye,t as X}from"./forms-DbfnnPg_.js";import{$t as Xe,At as Ze,Ct as Qe,J as $e,Mt as et,Ot as tt,Z as nt,_ as rt,bt as it,cn as at,d as ot,dn as st,dt as ct,et as lt,fn as ut,g as dt,gt as ft,h as pt,it as mt,kt as ht,m as gt,on as _t,sn as vt,tt as Z}from"./index-nltuyQtq.js";import{t as yt}from"./switch-BtScTpP9.js";var bt={name:`bold`,size:24,node:[[`path`,{d:`M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8`,key:`mg9rjx`}]]};bt.node;var xt=R(bt),St={name:`bot`,size:24,node:[[`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`}]]};St.node;var Ct=R(St),wt={name:`heading`,size:24,node:[[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M6 20V4`,key:`1w1bmo`}],[`path`,{d:`M18 20V4`,key:`o2hl4u`}]]};wt.node;var Tt=R(wt),Et={name:`italic`,size:24,node:[[`line`,{x1:`19`,x2:`10`,y1:`4`,y2:`4`,key:`15jd3p`}],[`line`,{x1:`14`,x2:`5`,y1:`20`,y2:`20`,key:`bu0au3`}],[`line`,{x1:`15`,x2:`9`,y1:`4`,y2:`20`,key:`uljnxc`}]]};Et.node;var Dt=R(Et),Ot={name:`link`,size:24,node:[[`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`,key:`1cjeqo`}],[`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`,key:`19qd67`}]]};Ot.node;var kt=R(Ot),At={name:`list-ordered`,size:24,node:[[`path`,{d:`M11 5h10`,key:`1cz7ny`}],[`path`,{d:`M11 12h10`,key:`1438ji`}],[`path`,{d:`M11 19h10`,key:`11t30w`}],[`path`,{d:`M4 4h1v5`,key:`10yrso`}],[`path`,{d:`M4 9h2`,key:`r1h2o0`}],[`path`,{d:`M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02`,key:`xtkcd5`}]]};At.node;var jt=R(At),Mt={name:`list`,size:24,node:[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]};Mt.node;var Nt=R(Mt),Pt={name:`minimize-2`,size:24,node:[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]};Pt.node;var Ft=R(Pt),It={name:`paperclip`,size:24,node:[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]};It.node;var Lt=R(It),Rt={name:`square-code`,size:24,node:[[`path`,{d:`m10 9-3 3 3 3`,key:`1oro0q`}],[`path`,{d:`m14 15 3-3-3-3`,key:`bz13h7`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]],aliases:[`code-square`]};Rt.node;var zt=R(Rt),Q=e(l(),1),$=g(),Bt=(0,Q.lazy)(()=>Me(()=>import(`./visual-editor-CpdMRn3e.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]))),Vt={heading:Tt,bold:xt,italic:Dt,link:kt,list:Nt,"list-ordered":jt,"list-checks":vt,"square-code":zt},Ht=e=>Vt[a[e]];function Ut(e,t){let n=/(?:^|[\s([{])@([^\s@[\]()]{0,40})$/.exec(e.slice(0,t));return n?.[1]===void 0?null:{from:t-n[1].length-1,query:n[1]}}var Wt=(e,t)=>e.filter(e=>`${e.name} ${e.email}`.toLowerCase().includes(t.toLowerCase())).slice(0,8),Gt=e=>({key:e.userId,content:(0,$.jsx)(ve,{name:e.name,email:e.email,image:e.image})}),Kt=e=>u(e.name,e.userId);function qt(e){let[t,n]=(0,Q.useState)(``),r=e.includes(t)?t:e[0];return{active:r,setHighlight:n,handleKey:(t,i,a)=>{if(!r||t.isComposing)return!1;let o={ArrowDown:1,ArrowUp:-1}[t.key];if(!o&&![`Enter`,`Tab`,`Escape`].includes(t.key))return!1;t.preventDefault();let s=e.indexOf(r);return o?n(e[(s+o+e.length)%e.length]??``):t.key===`Escape`?a():i(r),!0}}}function Jt({id:e,label:t,open:n,anchor:r,options:i,active:a,onHighlight:o,onChoose:s,onDismiss:c}){return(0,$.jsx)(b,{open:n,onOpenChange:e=>{e||c()},children:(0,$.jsx)(E,{anchor:r,align:`start`,initialFocus:!1,finalFocus:!1,className:`w-[min(20rem,calc(100vw-2rem))] p-1`,children:(0,$.jsx)(`div`,{role:`listbox`,id:e,"aria-label":t,children:i.map(t=>(0,$.jsx)(`div`,{role:`option`,id:`${e}-${t.key}`,"aria-selected":t.key===a,"data-selected":t.key===a||void 0,className:M,onMouseDown:e=>e.preventDefault(),onPointerMove:()=>o(t.key),onClick:()=>s(t.key),children:t.content},t.key))})})})}function Yt(e,t,n){let[r,i]=(0,Q.useState)(0),a=(0,Q.useRef)(null),o=async e=>{if(t&&e.length){i(t=>t+e.length);for(let r of e)try{n(ae(await t(r)))}catch(e){be(e)}finally{i(e=>e-1)}}},s=(0,$.jsx)(`input`,{ref:a,type:`file`,multiple:!0,hidden:!0,"aria-label":m(`detail.markdown.insertFileInto`,{label:e}),onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,o(t)}});return{uploading:r>0,send:o,pick:()=>a.current?.click(),input:s}}function Xt({label:e,flush:t,onApply:n,pressed:r,upload:i,children:a}){return(0,$.jsxs)(Se,{align:`block-start`,role:`toolbar`,"aria-label":m(`detail.markdown.formatting`,{label:e}),className:x(`gap-0.5 overflow-x-auto border-b py-1 pl-1 text-foreground [scrollbar-width:none] max-md:gap-0 max-md:px-0`,t&&`px-0`),onKeyDown:e=>{let t=[...e.currentTarget.querySelectorAll(`button`)],n=t.findIndex(e=>e===document.activeElement),r={ArrowRight:1,ArrowLeft:-1}[e.key],i=e.key===`Home`?t[0]:e.key===`End`?t.at(-1):r&&t.at((n+r)%t.length);i&&(e.preventDefault(),i.focus())},children:[S.map((e,t)=>{let i=P[e],a=Ht(e);return(0,$.jsx)(I,{label:i.label,...`shortcut`in i?{shortcut:i.shortcut}:{},...r?{"aria-pressed":r(e)}:{},size:`icon-sm`,tabIndex:t===0?0:-1,className:`text-muted-foreground hover:text-foreground aria-pressed:bg-muted aria-pressed:text-foreground`,onClick:()=>n(e),children:(0,$.jsx)(a,{})},e)}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(I,{label:i.uploading?m(`detail.resource.uploading`):m(`detail.markdown.insertFile`),size:`icon-sm`,tabIndex:-1,disabled:i.uploading,className:`text-muted-foreground hover:text-foreground`,onClick:i.pick,children:i.uploading?(0,$.jsx)(_e,{}):(0,$.jsx)(Lt,{})}),i.input]}),a]})}function Zt(e){return e?.files.length?[...e.files]:[]}function Qt({label:e,value:t,onChange:n,placeholder:r,rows:i=5,variant:a=`compact`,maxLength:o=1e5,required:s=!1,footer:c,mentions:l,onUpload:u}){let d=(0,Q.useId)(),f=(0,Q.useRef)(null),[p,h]=Qe(it.editor),[g,ee]=(0,Q.useState)(!1),[y,te]=(0,Q.useState)(!1),ne=g?`preview`:p===`visual`&&!y?`visual`:`write`,b=v({...w.query(`list_members`,{projectId:l??``}),enabled:!!l}),[S,C]=(0,Q.useState)(0),[re,T]=(0,Q.useState)(null),E=l?Ut(t,S):null,D=Wt(b.data??[],E?.query??``),O=qt(D.map(e=>e.userId)),k=!!E&&E.from!==re&&D.length>0,A=`${d}-mentions`,j=e=>{let t=f.current;t&&(t.focus(),t.setSelectionRange(e.from,e.to),document.execCommand(`insertText`,!1,e.text)||(t.setRangeText(e.text),n(t.value)),t.setSelectionRange(e.start,e.end),C(e.end))},ae=e=>{let t=f.current;t&&j(oe(t.value,t.selectionStart,t.selectionEnd,e))},se=e=>{let t=D.find(t=>t.userId===e);if(!E||!t)return;let n=`${Kt(t)} `,r=E.from+n.length;j({from:E.from,to:S,text:n,start:r,end:r})},M=Yt(e,u,e=>{let t=f.current;if(!t)return;let n=t.selectionEnd+e.length;j({from:t.selectionStart,to:t.selectionEnd,text:e,start:n,end:n})}),N=(e,t)=>{let n=u?Zt(t):[];n.length&&(e.preventDefault(),M.send(n))},P=(0,Q.useCallback)(()=>te(!0),[]),le=a===`document`?`rounded-none border-0 bg-transparent dark:bg-transparent has-[[data-slot=input-group-control]:focus-visible]:ring-0`:void 0,ue=c&&(0,$.jsx)(Se,{align:`block-end`,className:`justify-end border-t py-2`,children:c});return(0,$.jsx)(ge,{className:x(`mb-6 [&_[data-slot=tabs-list]]:shrink-0 [&_[data-slot=tabs-trigger]]:text-xs`,a===`compact`&&`[&_textarea]:field-sizing-fixed [&_textarea]:max-h-[28rem] [&_.ProseMirror]:max-h-[28rem] [&_.ProseMirror]:overflow-y-auto`,a===`document`&&`border-t pt-5 has-[[data-slot=input-group-control]:focus]:border-t-primary has-[[data-slot=input-group-control]:focus]:[&_[data-slot=field-label]]:text-primary`),"data-variant":a,"aria-label":m(`detail.markdown.editor`,{label:e}),children:(0,$.jsxs)(gt,{value:ne,onValueChange:e=>{ee(e===`preview`),(e===`write`||e===`visual`)&&(h(e),te(!1))},children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,$.jsx)(K,{htmlFor:d,children:e}),(0,$.jsxs)(dt,{"aria-label":m(`detail.markdown.editor`,{label:e}),variant:`line`,children:[(0,$.jsx)(rt,{value:`write`,children:m(`detail.markdown.write`)}),(0,$.jsx)(rt,{value:`visual`,children:m(`detail.markdown.visual`)}),(0,$.jsx)(rt,{value:`preview`,children:m(`detail.markdown.preview`)})]})]}),(0,$.jsxs)(pt,{value:`write`,children:[y&&p===`visual`&&(0,$.jsx)(`p`,{role:`status`,className:`mb-2 text-xs text-muted-foreground`,children:m(`detail.markdown.unsupported`)}),(0,$.jsxs)(U,{className:le,children:[(0,$.jsx)(Xt,{label:e,flush:a===`document`,onApply:ae,...u?{upload:M}:{}}),(0,$.jsx)(z,{ref:f,id:d,className:a===`document`?`field-sizing-content max-h-none resize-y px-1 py-3 text-base md:text-base leading-7 caret-primary`:void 0,style:a===`document`?{minHeight:`${i}lh`}:void 0,value:t,onChange:e=>{C(e.target.selectionStart),n(e.target.value)},onSelect:e=>C(e.currentTarget.selectionStart),onPaste:e=>N(e,e.clipboardData),onDragOver:e=>{u&&e.dataTransfer.types.includes(`Files`)&&e.preventDefault()},onDrop:e=>N(e,e.dataTransfer),...l&&{"aria-autocomplete":`list`,"aria-controls":k?A:void 0,"aria-activedescendant":k&&O.active?`${A}-${O.active}`:void 0},onKeyDown:e=>{if(k&&O.handleKey(e.nativeEvent,se,()=>T(E.from))){e.stopPropagation();return}let t=ie(e);!t||t===`link`&&e.currentTarget.selectionStart===e.currentTarget.selectionEnd||(e.preventDefault(),e.stopPropagation(),ae(t))},placeholder:r,rows:i,maxLength:o,required:s}),l&&(0,$.jsx)(Jt,{id:A,label:m(`detail.markdown.mention`),open:k,anchor:f,options:D.map(Gt),active:O.active,onHighlight:O.setHighlight,onChoose:se,onDismiss:()=>{E&&T(E.from)}}),ue]})]}),(0,$.jsx)(pt,{value:`visual`,children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(ce,{}),children:(0,$.jsx)(Bt,{id:d,label:e,value:t,onChange:n,placeholder:r??``,rows:i,maxLength:o,flush:a===`document`,groupClassName:le,footer:ue,...l?{members:b.data??[]}:{},...u?{onUpload:u}:{},onUnsupported:P})})}),(0,$.jsxs)(pt,{value:`preview`,children:[(0,$.jsx)(`div`,{className:x(`min-h-28 rounded-lg border bg-muted/20 p-4`,a===`document`&&`rounded-none border-0 bg-transparent px-1 py-3 text-base leading-7`),children:t?(0,$.jsx)(_,{children:t}):(0,$.jsx)(`p`,{className:`m-0 text-sm text-muted-foreground`,children:m(`detail.markdown.nothingToPreview`)})}),c&&(0,$.jsx)(`div`,{className:`mt-2 flex justify-end`,children:c})]})]})})}function $t({projectId:e,label:t,value:n,onChange:r,exclude:i=[],allowClear:a=!0,variant:o=`field`,placeholder:c=m(`ticket.picker.placeholder`)}){let l=(0,Q.useId)(),[u,d]=(0,Q.useState)(!1),[f,p]=(0,Q.useState)(``),h=v({...w.query(`list_tickets`,{projectId:e,q:f,archived:`include`,limit:30}),enabled:u}),g=v({...w.query(`get_ticket`,{projectId:e,ticketId:n??``}),enabled:!!n&&s().safeParse(n).success}),ee=h.data?.items.filter(e=>!i.includes(e.id))??[],_=g.data?.ticket??h.data?.items.find(e=>e.id===n),y=(0,$.jsxs)(b,{open:u,onOpenChange:e=>{d(e),e&&p(``)},children:[(0,$.jsxs)(le,{id:l,render:(0,$.jsx)(q,{variant:o===`pill`?`ghost`:`outline`,size:o===`pill`?`sm`:`default`,role:`combobox`,"aria-label":t,className:o===`pill`?`h-7 max-w-64 min-w-0 border border-transparent px-2 font-normal hover:border-border`:`h-auto min-h-8 w-full justify-between whitespace-normal text-left font-normal`}),children:[o===`pill`&&(0,$.jsx)(Ge,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{className:o===`pill`?`min-w-0 truncate`:`min-w-0 break-words`,children:_?o===`pill`?_.key:`${_.key} · ${_.title}`:n?m(`ticket.picker.loading`):c}),o!==`pill`&&(0,$.jsx)(He,{className:`ml-2 size-3.5 shrink-0 text-muted-foreground`})]}),(0,$.jsx)(E,{align:`start`,className:`w-[min(420px,var(--available-width))] p-0`,children:(0,$.jsxs)(ne,{shouldFilter:!1,children:[(0,$.jsx)(te,{"aria-label":m(`ticket.picker.searchLabel`,{label:t}),placeholder:m(`ticket.picker.searchPlaceholder`),value:f,onValueChange:p}),(0,$.jsxs)(j,{children:[a&&(0,$.jsx)(we,{children:(0,$.jsxs)(G,{value:`none`,onSelect:()=>{r(null),d(!1)},children:[m(`ticket.picker.noParent`),!n&&(0,$.jsx)(k,{className:`ml-auto`})]})}),h.isPending?(0,$.jsx)(`div`,{role:`status`,className:`px-4 py-6 text-sm text-muted-foreground`,children:m(`ticket.picker.searching`)}):ee.length?(0,$.jsx)(we,{children:ee.map(e=>(0,$.jsxs)(G,{value:e.id,className:`items-start py-2`,onSelect:()=>{r(e.id),d(!1)},children:[(0,$.jsxs)(`span`,{className:`min-w-0`,children:[(0,$.jsx)(`span`,{className:`mb-1 block font-mono text-[11px] text-muted-foreground`,children:e.key}),(0,$.jsx)(`span`,{dir:`auto`,className:`block break-words whitespace-normal`,children:e.title})]}),n===e.id&&(0,$.jsx)(k,{className:`ml-auto shrink-0`})]},e.id))}):(0,$.jsx)(`div`,{role:`status`,className:`px-4 py-6 text-center text-sm text-muted-foreground`,children:m(`ticket.picker.empty`)}),(0,$.jsx)(O,{error:h.error})]})]})})]});return o===`pill`?(0,$.jsxs)($.Fragment,{children:[y,(0,$.jsx)(O,{error:g.error})]}):(0,$.jsxs)(ge,{className:Oe,children:[(0,$.jsx)(K,{htmlFor:l,children:t}),y,(0,$.jsx)(O,{error:g.error})]})}var en=xe(`flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1`,{variants:{orientation:{horizontal:`*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0`,vertical:`flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0`}},defaultVariants:{orientation:`horizontal`}});function tn({className:e,orientation:t,...n}){return(0,$.jsx)(`div`,{role:`group`,"data-slot":`button-group`,"data-orientation":t,className:x(en({orientation:t}),e),...n})}function nn({icon:e,href:t,label:n,download:r=!1,compact:i=!1,badges:a,details:o,meta:s,metaId:c,actions:l}){return(0,$.jsxs)(Ve,{role:`listitem`,size:i?`xs`:`default`,className:x(`rounded-none border-x-0 border-t-0 border-b-border px-0 animate-in fade-in-0 duration-200 last:border-b-0`,!i&&`items-start py-4`),children:[(0,$.jsx)(Re,{variant:i?`default`:`icon`,children:e}),(0,$.jsxs)(ze,{className:x(`min-w-0`,i?`gap-0`:`gap-1.5`),children:[(0,$.jsxs)(Be,{className:x(`line-clamp-none max-w-full wrap-anywhere`,i&&`text-xs font-normal`),children:[(0,$.jsxs)(`a`,{href:t,"aria-describedby":c,...r?{download:!0,className:`hover:text-primary`}:{target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline`},children:[n,!r&&(0,$.jsx)(ut,{className:`size-3 shrink-0`,"aria-hidden":`true`})]}),a]}),o,s&&(0,$.jsx)(Ie,{id:c,className:x(`m-0`,i?`text-[11px]`:`text-xs`),children:s})]}),l&&(0,$.jsx)(Le,{children:l})]})}function rn(e){if(e.size>1e7)throw Error(m(`detail.attachment.tooLarge`))}var an=async e=>({name:e.name,contentType:e.type||`application/octet-stream`,data:await ue(e)});function on(e,t){let n=V(`upload_attachment`),r=V(`stage_upload`);return async i=>{rn(i);let a=await an(i),o=`ticketId`in t?await n.mutateAsync({projectId:e,ticketId:t.ticketId,...a}):await r.mutateAsync({projectId:e,...a});return`onStaged`in t&&t.onStaged(o.id),{url:h(e,o.id),name:o.name,contentType:o.contentType}}}function sn({ticket:e}){let t=v(w.query(`list_attachments`,{projectId:e.projectId,ticketId:e.id})),n=V(`upload_attachment`),r=V(`delete_attachment`),i=Ee(e.projectId),a=(0,Q.useRef)(null),[o,s]=(0,Q.useState)(),[c,l]=(0,Q.useState)(!1),[u,d]=(0,Q.useState)(!1);async function f(t){if(t.length){s(void 0),d(!0);try{t.forEach(rn);for(let r of t)await n.mutateAsync({projectId:e.projectId,ticketId:e.id,...await an(r)});N.success(m(`detail.attachment.attached`,{count:t.length}))}catch(e){s(e)}finally{d(!1)}}}return(0,$.jsxs)(`section`,{onDragOver:e=>{i.canWrite&&(e.preventDefault(),l(!0))},onDragLeave:()=>l(!1),onDrop:e=>{e.preventDefault(),l(!1),i.canWrite&&f(Array.from(e.dataTransfer.files))},className:x(`rounded-lg transition-colors`,c&&`bg-primary/5 ring-2 ring-primary/40 ring-offset-4 ring-offset-background`),children:[(0,$.jsx)(J,{compact:!0,title:m(`detail.attachment.heading`),action:i.canWrite&&(0,$.jsx)(I,{label:m(u?`detail.resource.uploading`:`detail.attachment.attach`),size:`icon-sm`,disabled:u,onClick:()=>a.current?.click(),children:u?(0,$.jsx)(_e,{}):(0,$.jsx)(Je,{})})}),!t.isPending&&!t.data?.length&&(0,$.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:i.canWrite?m(`detail.attachment.emptyWritable`):m(`detail.attachment.empty`)}),(0,$.jsx)(Ne,{className:`gap-0`,children:t.data?.map(t=>(0,$.jsx)(nn,{compact:!0,download:!0,icon:(0,$.jsx)(st,{className:`size-4 text-muted-foreground`}),href:h(e.projectId,t.id),label:t.name,meta:B(t.size),metaId:`attachment-size-${t.id}`,actions:i.canWrite&&(0,$.jsx)(de,{label:m(`detail.attachment.remove`),icon:(0,$.jsx)(Ue,{}),description:m(`detail.resource.removeConfirm`,{name:t.name}),onConfirm:()=>r.mutateAsync({projectId:e.projectId,attachmentId:t.id})})},t.id))}),(0,$.jsx)(ke,{ref:a,type:`file`,multiple:!0,className:`hidden`,"aria-label":m(`detail.attachment.fileInput`),disabled:u,onChange:e=>{let t=Array.from(e.currentTarget.files??[]);e.currentTarget.value=``,f(t)}}),(0,$.jsx)(O,{error:o??t.error??r.error})]})}var cn={passed:C,failed:re,pending:fe,reported:F};function ln({ticket:e}){let r=Ee(e.projectId),a=v(w.query(`list_evidence`,{projectId:e.projectId,ticketId:e.id})),o=V(`add_evidence`),[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)();return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(J,{title:m(`detail.section.evidence`),description:m(`detail.evidence.description`),action:r.canWrite&&(0,$.jsx)(I,{label:m(`detail.evidence.add`),onClick:()=>{o.reset(),u(void 0),c(!0)},children:(0,$.jsx)(Fe,{})})}),!a.isPending&&!a.data?.length&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:m(`detail.evidence.empty`)}),(0,$.jsx)(Ne,{className:`gap-0`,children:a.data?.map(t=>{let r=cn[t.outcome]??F;return(0,$.jsx)(nn,{icon:(0,$.jsx)(r,{className:x(t.outcome===`passed`&&`text-[var(--success)]`,t.outcome===`failed`&&`text-destructive`)}),href:t.url,label:t.title,badges:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Y,{variant:`outline`,className:`ml-2`,children:n[t.kind]}),(0,$.jsx)(Y,{variant:`outline`,className:x(`ml-1`,t.outcome===`passed`&&`text-[var(--success)]`,t.outcome===`failed`&&`text-destructive`),"data-outcome":t.outcome,children:i[t.outcome]})]}),details:(0,$.jsxs)($.Fragment,{children:[t.commit&&(0,$.jsx)(`code`,{className:`w-fit rounded bg-muted px-1.5 py-0.5 font-mono text-[11px] break-all`,children:t.commit}),t.note&&(0,$.jsx)(_,{children:t.note})]}),meta:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(T,{projectId:e.projectId,actorId:t.actorId}),` ·`,` `,(0,$.jsx)(W,{value:t.createdAt})]})},t.id)})}),(0,$.jsx)(H,{title:m(`detail.evidence.add`),open:s,onOpenChange:c,busy:o.isPending,children:(0,$.jsxs)(`form`,{onSubmit:n=>{n.preventDefault();let r=new FormData(n.currentTarget);o.mutateAsync({projectId:e.projectId,ticketId:e.id,kind:t.shape.kind.parse(r.get(`kind`)),title:X(r,`title`),url:X(r,`url`),commit:X(r,`commit`)||null,outcome:t.shape.outcome.parse(r.get(`outcome`)),note:X(r,`note`)}).then(()=>{c(!1),N.success(m(`detail.evidence.added`))}).catch(u)},children:[(0,$.jsx)(L,{label:m(`detail.field.title`),name:`title`,required:!0,maxLength:200}),(0,$.jsx)(L,{label:m(`detail.field.url`),name:`url`,type:`url`,required:!0}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 gap-x-5 sm:grid-cols-2`,children:[(0,$.jsx)(De,{label:m(`detail.evidence.kindLabel`),name:`kind`,children:t.shape.kind.options.map(e=>(0,$.jsx)(A,{value:e,children:n[e]},e))}),(0,$.jsx)(De,{label:m(`detail.evidence.outcomeLabel`),name:`outcome`,children:t.shape.outcome.unwrap().options.map(e=>(0,$.jsx)(A,{value:e,children:i[e]},e))})]}),(0,$.jsx)(L,{label:m(`detail.evidence.commit`),name:`commit`,pattern:`[a-fA-F0-9]{40,64}`}),(0,$.jsx)(ye,{label:m(`detail.evidence.note`),name:`note`,maxLength:2e4}),(0,$.jsx)(pe,{error:l??o.error,pending:o.isPending,submitLabel:m(`detail.evidence.add`),onCancel:()=>c(!1)})]})}),(0,$.jsx)(O,{error:a.error})]})}function un({ticket:e}){let t=Ee(e.projectId),n=v(w.query(`list_resources`,{projectId:e.projectId,ticketId:e.id})),i=V(`add_resource`),a=V(`update_resource`),s=V(`delete_resource`),[c,l]=(0,Q.useState)(),[u,d]=(0,Q.useState)(!1),[f,p]=(0,Q.useState)(),h=i.isPending||a.isPending,g=e=>{p(void 0),l(e),d(!0)};return(0,$.jsxs)(`section`,{"aria-label":m(`detail.link.heading`),children:[(0,$.jsx)(J,{compact:!0,title:m(`detail.link.heading`),action:t.canWrite&&(0,$.jsx)(I,{label:m(`detail.link.add`),size:`icon-sm`,onClick:()=>g(),children:(0,$.jsx)(Fe,{})})}),!n.isPending&&!n.data?.length&&(0,$.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:m(`detail.link.empty`)}),(0,$.jsx)(Ne,{className:`gap-0`,children:n.data?.map(n=>(0,$.jsx)(nn,{compact:!0,icon:(0,$.jsx)(at,{className:`size-4 text-muted-foreground`}),href:n.url,label:n.title||n.url,meta:n.provider?(0,$.jsxs)(`span`,{className:`inline-flex flex-wrap gap-1`,children:[(0,$.jsx)(Y,{variant:`outline`,children:n.provider}),(0,$.jsx)(Y,{variant:`outline`,className:n.remoteState?void 0:`text-muted-foreground`,children:o(n)})]}):n.title&&r(n.url),actions:t.canWrite&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(I,{size:`icon-sm`,label:m(`detail.link.edit`),onClick:()=>g(n),children:(0,$.jsx)(We,{})}),(0,$.jsx)(de,{label:m(`detail.link.remove`),icon:(0,$.jsx)(Ue,{}),description:m(`detail.resource.removeConfirm`,{name:n.title||n.url}),onConfirm:()=>s.mutateAsync({projectId:e.projectId,resourceId:n.id,expectedVersion:n.version})})]})},n.id))}),(0,$.jsx)(H,{title:m(c?`detail.link.edit`:`detail.link.add`),open:u,onOpenChange:d,busy:h,children:(0,$.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.currentTarget),r={url:X(n,`url`),title:X(n,`title`)};p(void 0),(c?a.mutateAsync({projectId:e.projectId,resourceId:c.id,expectedVersion:c.version,...r}):i.mutateAsync({projectId:e.projectId,ticketId:e.id,...r})).then(()=>d(!1)).catch(p)},children:[(0,$.jsx)(L,{label:m(`detail.field.url`),name:`url`,type:`url`,required:!0,autoFocus:!0,defaultValue:c?.url}),(0,$.jsx)(L,{label:m(`detail.field.title`),name:`title`,maxLength:200,defaultValue:c?.title}),(0,$.jsx)(pe,{error:f,pending:h,submitLabel:m(c?`detail.link.save`:`detail.link.add`),onCancel:()=>d(!1)})]})}),(0,$.jsx)(O,{error:n.error})]})}function dn({ticket:e}){let[t,n]=(0,Q.useState)(0),r=v(w.query(`list_activity`,{projectId:e.projectId,ticketId:e.id,offset:t}));return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{children:m(`detail.section.activity`)}),(0,$.jsx)(O,{error:r.error}),(0,$.jsx)(`ol`,{className:`m-0 list-none p-0`,children:r.data?.items.map(t=>(0,$.jsxs)(`li`,{className:`relative flex flex-col gap-0.5 border-l py-2.5 pl-5 text-xs before:absolute before:top-4 before:-left-[3px] before:size-[5px] before:rounded-full before:bg-muted-foreground/50`,children:[(0,$.jsx)(`span`,{children:c(t)}),(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[(0,$.jsx)(T,{projectId:e.projectId,actorId:t.actorId}),` ·`,` `,(0,$.jsx)(W,{value:t.createdAt})]})]},t.id))}),((r.data?.total??0)>50||t>0)&&(0,$.jsxs)(tn,{className:`mt-5 justify-end`,children:[(0,$.jsx)(q,{size:`sm`,disabled:!t,onClick:()=>n(Math.max(0,t-50)),children:m(`detail.activity.previous`)}),(0,$.jsx)(q,{size:`sm`,disabled:t+50>=(r.data?.total??0),onClick:()=>n(t+50),children:m(`detail.activity.next`)})]})]})}var fn=`h-7 max-w-64 min-w-0 border border-transparent px-2 font-normal hover:border-border aria-pressed:border-border aria-pressed:bg-muted`;function pn({projectId:e,ticket:t,initial:n,onSaved:r}){let i=Ce(),a=`kanvil:${me().id}:draft:${e}:${t?.id??`new:${n?.parentId??``}`}`,[o,s]=(0,Q.useState)(()=>{let e=ht(t);return n?{...e,fields:{...e.fields,...n}}:e}),[c,l]=(0,Q.useState)(()=>{try{let e=et.safeParse(JSON.parse(localStorage.getItem(a)??`null`));if(e.success)return e.data}catch{}return o}),u=(0,Q.useRef)(c);function h(e){u.current=e,l(e)}let g=`kanvil:composer-expanded`,[_,v]=(0,Q.useState)(()=>{try{return localStorage.getItem(g)===`1`}catch{return!1}});function te(){v(e=>{try{localStorage.setItem(g,e?`0`:`1`)}catch{}return!e})}let[ne,S]=(0,Q.useState)(()=>!!c.fields.acceptanceCriteria),[C,re]=(0,Q.useState)(),[T,ie]=(0,Q.useState)(),[k,A]=(0,Q.useState)(!1),[j,ae]=(0,Q.useState)(!1),[oe,M]=(0,Q.useState)(),P=V(`create_ticket`),ce=V(`update_ticket`),ue=V(`discard_upload`),de=Te(),fe=(0,Q.useRef)(null),F=(0,Q.useRef)(!1),I=(0,Q.useRef)(0),[pe,R]=(0,Q.useState)(!1);function z(e){h(e),M(void 0);try{localStorage.setItem(a,JSON.stringify(e)),ie(void 0),A(!0)}catch{ie(Error(m(`detail.editor.storageUnavailable`))),A(!1)}}function ge(){try{localStorage.removeItem(a)}catch{}ve(u.current.uploads),h(o),A(!1)}function ve(e){for(let t of e)ue.mutateAsync({projectId:W,uploadId:t}).catch(()=>{})}let B=e=>z({...u.current,fields:{...u.current.fields,...e}}),H=(e,t)=>B({[e]:t}),xe=(e,t)=>H(`customFields`,{...u.current.fields.customFields,[e]:t});async function Se(t){let n=++I.current;z({...u.current,projectId:t===e?void 0:t,fields:{...u.current.fields,parentId:null,stateId:null,customFields:{}}}),R(!0);let r=[];try{r=await de.ensureQueryData(w.query(`list_members`,{projectId:t}))}finally{if(n===I.current){let e=u.current,{assigneeId:t}=e.fields;t&&!r.some(e=>e.userId===t)&&z({...e,fields:{...e.fields,assigneeId:null}}),R(!1)}}}let U=c.fields,W=c.projectId??e,G=!!t&&c.version!==t.version,we=JSON.stringify(c.fields)!==JSON.stringify(o.fields)||c.projectId!==o.projectId,K=P.isPending||ce.isPending,J=K||G||pe,Ee=U.automationReady||U.scopes.length>0||!!U.holdReason,De=on(W,t?{ticketId:t.id}:{onStaged:e=>z({...u.current,uploads:[...u.current.uploads,e]})});async function Oe(n){if(n.preventDefault(),J||F.current)return;let o=Ze(U),l=c.uploads.filter(e=>U.description.includes(e)||U.acceptanceCriteria.includes(e));F.current=!0,i?.(!0);try{let n=t?await ce.mutateAsync({projectId:e,ticketId:t.id,expectedVersion:c.version??t.version,changes:o}):await P.mutateAsync({projectId:W,...o,uploads:l}).catch(e=>{throw ke(e),e});t||ve(c.uploads.filter(e=>!l.includes(e)));try{localStorage.removeItem(a)}catch{}if(t||!j)return N.success(m(t?`detail.editor.saved`:`detail.editor.created`,{key:n.key})),r(n);let i=u.current.fields,d=e=>i[e]===U[e]?``:i[e],f={...u.current,uploads:u.current.uploads.filter(e=>!c.uploads.includes(e)),fields:{...i,title:d(`title`),description:d(`description`),acceptanceCriteria:d(`acceptanceCriteria`)}};s({...f,fields:{...f.fields,title:``,description:``,acceptanceCriteria:``}}),f.fields.title||f.fields.description||f.fields.acceptanceCriteria?z(f):(h(f),A(!1)),S(!!f.fields.acceptanceCriteria),M(n.key),fe.current?.focus()}finally{F.current=!1,i?.(!1)}}function ke(e){let t=e instanceof d&&p({uploads:ee(f())}).safeParse(e.details).data?.uploads;t&&z({...u.current,uploads:u.current.uploads.filter(e=>!t.includes(e))})}let Y=K||c.uploads.length>0,Me=(0,$.jsxs)(`div`,{className:`-mt-3 flex flex-wrap items-center gap-1`,"aria-label":m(`detail.editor.properties`),children:[!t&&(0,$.jsx)(nt,{value:W,disabled:Y,onChange:e=>void Se(e).catch(be)}),(0,$.jsx)(Z,{property:`status`,projectId:W,value:ct(U),onChange:e=>B(mt(e))}),(0,$.jsx)(Z,{property:`priority`,projectId:W,value:U.priority,onChange:e=>H(`priority`,e)}),(0,$.jsx)(Z,{property:`assignee`,projectId:W,value:U.assigneeId,onChange:e=>H(`assigneeId`,e)}),(0,$.jsx)(Z,{property:`kind`,projectId:W,value:U.kind,onChange:e=>H(`kind`,e)}),(0,$.jsx)(Z,{property:`difficulty`,projectId:W,value:U.difficulty,onChange:e=>H(`difficulty`,e)}),(0,$.jsx)(lt,{value:U.labels,onChange:e=>H(`labels`,e)}),(0,$.jsx)(ft,{variant:`pill`,value:U,onChange:B}),(0,$.jsx)($e,{variant:`pill`,projectId:W,values:U.customFields,isNew:!t,onChange:xe}),(0,$.jsx)($t,{variant:`pill`,label:m(`detail.field.parentTicket`),placeholder:m(`detail.field.parent`),projectId:W,value:U.parentId,onChange:e=>H(`parentId`,e),exclude:t?[t.id]:[]}),(0,$.jsxs)(ot,{size:`sm`,className:x(fn,`gap-1.5`),pressed:U.automationReady,onPressedChange:e=>H(`automationReady`,e),"aria-label":m(`detail.editor.readyForAgents`),title:m(`detail.editor.readyForAgentsHelp`),children:[(0,$.jsx)(Ct,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),U.automationReady?m(`detail.editor.readyForAgents`):m(`detail.editor.agents`)]}),(0,$.jsxs)(b,{children:[(0,$.jsx)(le,{render:(0,$.jsx)(q,{variant:`ghost`,size:`icon-sm`,className:x(`size-7 border border-transparent hover:border-border`,Ee&&`text-primary`),"aria-label":m(`detail.editor.moreProperties`)}),children:(0,$.jsx)(qe,{className:`size-3.5`})}),(0,$.jsxs)(E,{align:`start`,className:`w-[min(24rem,calc(100vw-2rem))] p-4`,children:[(0,$.jsx)(tt,{label:m(`detail.field.scopes`),kind:`scope`,value:U.scopes,onChange:e=>H(`scopes`,e)}),(0,$.jsx)(L,{label:m(`detail.field.holdReason`),value:U.holdReason??``,maxLength:2e3,placeholder:m(`detail.editor.holdPlaceholder`),onChange:e=>H(`holdReason`,e.target.value||null)}),(0,$.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:m(`detail.editor.claimsNote`)})]})]})]}),Ne=(0,$.jsxs)(`form`,{onSubmit:e=>{re(void 0),Oe(e).catch(re)},onKeyDown:Ye,className:`ticket-composer flex min-h-0 flex-1 flex-col`,"data-expanded":_,children:[(0,$.jsx)(q,{variant:`ghost`,size:`icon-sm`,className:`absolute top-2 right-11 hidden sm:inline-flex`,"aria-label":m(_?`detail.editor.restoreSize`:`detail.editor.expand`),"aria-pressed":_,disabled:K,onClick:te,children:_?(0,$.jsx)(Ft,{}):(0,$.jsx)(_t,{})}),(0,$.jsxs)(`div`,{className:x(`min-h-0 flex-1 overflow-y-auto overscroll-contain`,_&&`lg:grid lg:grid-cols-[minmax(0,1fr)_320px] lg:items-start`),children:[(0,$.jsxs)(`div`,{className:`mx-auto flex w-full max-w-4xl flex-col gap-4 px-5 py-5 sm:px-8`,children:[G&&(0,$.jsxs)(he,{className:`w-auto`,children:[(0,$.jsx)(Xe,{}),(0,$.jsx)(je,{children:m(`detail.editor.staleTitle`)}),(0,$.jsxs)(Ae,{children:[m(`detail.editor.staleDescription`,{version:c.version}),(0,$.jsx)(q,{size:`sm`,className:`mt-2`,onClick:()=>z(ht(t)),children:m(`detail.editor.discardAndReload`)})]})]}),(0,$.jsx)(O,{error:C??P.error??ce.error??T}),(0,$.jsx)(`div`,{className:`[&_[data-slot=field-label]]:sr-only`,children:(0,$.jsx)(ye,{label:m(`detail.field.title`),rows:1,value:U.title,onChange:e=>H(`title`,e.target.value),required:!0,maxLength:500,autoFocus:!0,ref:fe,placeholder:m(`detail.editor.titlePlaceholder`),className:`field-sizing-content min-h-10 resize-none border-0 bg-transparent px-0 py-1 text-xl! font-semibold leading-snug shadow-none caret-primary focus-visible:ring-0 dark:bg-transparent`})}),!_&&Me,(0,$.jsx)(Qt,{label:m(`detail.field.description`),value:U.description,onChange:e=>H(`description`,e),rows:8,variant:`document`,placeholder:m(`detail.editor.descriptionPlaceholder`),onUpload:De}),ne?(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(Qt,{label:m(`detail.field.acceptanceCriteria`),value:U.acceptanceCriteria,onChange:e=>H(`acceptanceCriteria`,e),rows:4,variant:`document`,maxLength:5e4,placeholder:m(`detail.editor.criteriaPlaceholder`),onUpload:De}),!U.acceptanceCriteria&&(0,$.jsx)(q,{variant:`ghost`,size:`icon-xs`,className:`absolute top-5 right-24 text-muted-foreground`,"aria-label":m(`detail.editor.removeCriteria`),onClick:()=>S(!1),children:(0,$.jsx)(D,{})})]}):(0,$.jsxs)(q,{variant:`ghost`,size:`sm`,className:`w-fit text-muted-foreground`,onClick:()=>S(!0),children:[(0,$.jsx)(vt,{}),m(`detail.editor.addCriteria`)]})]}),_&&(0,$.jsxs)(`aside`,{className:`border-t bg-muted/20 p-5 lg:sticky lg:top-0 lg:min-h-full lg:border-t-0 lg:border-l`,"aria-label":m(`detail.editor.properties`),children:[(0,$.jsxs)(`div`,{className:`space-y-1`,children:[!t&&(0,$.jsx)(nt,{variant:`row`,value:W,disabled:Y,onChange:e=>void Se(e).catch(be)}),(0,$.jsx)(Z,{variant:`row`,property:`status`,projectId:W,value:ct(U),onChange:e=>B(mt(e))}),(0,$.jsx)(Z,{variant:`row`,property:`priority`,projectId:W,value:U.priority,onChange:e=>H(`priority`,e)}),(0,$.jsx)(Z,{variant:`row`,property:`assignee`,projectId:W,value:U.assigneeId,onChange:e=>H(`assigneeId`,e)}),(0,$.jsx)(Z,{variant:`row`,property:`kind`,projectId:W,value:U.kind,onChange:e=>H(`kind`,e)}),(0,$.jsx)(Z,{variant:`row`,property:`difficulty`,projectId:W,value:U.difficulty,onChange:e=>H(`difficulty`,e)}),(0,$.jsx)(ft,{variant:`row`,value:U,onChange:B}),(0,$.jsx)($e,{variant:`row`,projectId:W,values:U.customFields,isNew:!t,onChange:xe}),(0,$.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:m(`detail.editor.agents`)}),(0,$.jsxs)(ot,{size:`sm`,className:x(fn,`h-7 justify-start gap-1.5`),pressed:U.automationReady,onPressedChange:e=>H(`automationReady`,e),"aria-label":m(`detail.editor.readyForAgents`),children:[(0,$.jsx)(Ct,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),U.automationReady?m(`detail.editor.readyForAgents`):m(`detail.editor.notReady`)]})]})]}),(0,$.jsxs)(`div`,{className:`mt-6 border-t pt-5`,children:[(0,$.jsx)(tt,{label:m(`detail.field.labels`),value:U.labels,onChange:e=>H(`labels`,e)}),(0,$.jsx)($t,{label:m(`detail.field.parentTicket`),projectId:W,value:U.parentId,onChange:e=>H(`parentId`,e),exclude:t?[t.id]:[]}),(0,$.jsx)(tt,{label:m(`detail.field.scopes`),kind:`scope`,value:U.scopes,onChange:e=>H(`scopes`,e)}),(0,$.jsx)(L,{label:m(`detail.field.holdReason`),value:U.holdReason??``,maxLength:2e3,placeholder:m(`detail.editor.holdPlaceholder`),onChange:e=>H(`holdReason`,e.target.value||null)})]})]})]}),(0,$.jsxs)(`footer`,{className:`z-10 flex shrink-0 flex-wrap items-center justify-between gap-3 border-t bg-muted/40 px-5 py-3`,children:[(0,$.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,role:`status`,children:[oe?m(`detail.editor.created`,{key:oe}):k?m(`detail.editor.savedLocally`):T?m(`detail.editor.notSavedLocally`):``,we&&!G&&(0,$.jsxs)(q,{variant:`ghost`,size:`xs`,disabled:K,onClick:ge,children:[(0,$.jsx)(Ke,{}),m(`detail.editor.discardDraft`)]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[!t&&(0,$.jsxs)(`label`,{className:`mr-2 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(yt,{size:`sm`,checked:j,disabled:K,onCheckedChange:ae}),m(`detail.editor.createMore`)]}),(0,$.jsx)(se,{render:(0,$.jsx)(q,{disabled:K}),children:m(`common.action.cancel`)}),(0,$.jsxs)(q,{type:`submit`,variant:`default`,disabled:J,children:[K?(0,$.jsx)(_e,{}):null,m(K?`common.state.saving`:t?`detail.editor.save`:`detail.editor.create`),!K&&(0,$.jsx)(y,{"aria-hidden":`true`,className:`ml-1 hidden border-transparent bg-primary-foreground/20 text-primary-foreground shadow-none sm:inline-flex`,children:`⌘↵`})]})]})]})]});return(0,$.jsx)(Pe,{projectId:W,children:Ne})}export{pn as TicketEditor,Lt as _,on as a,Xt as c,Zt as d,Ht as f,qt as g,Yt as h,un as i,Qt as l,Gt as m,sn as n,tn as o,Wt as p,ln as r,$t as s,dn as t,Jt as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$t as t,B as n,Ct as r,Gt as i,Kt as a,R as o,S as s,V as c,Vn as l,Zt as u,_ as d,an as f,g as p,j as m,k as h,ln as g,mn as _,qt as v,r as y,tt as b,v as ee,wt as x,y as S,z as C}from"./default-DqsN66dq.js";import{$a as te,A as w,E as T,F as E,Fa as ne,Gi as re,H as ie,Hi as ae,I as D,Ia as O,J as k,L as A,Lt as j,M,O as N,R as P,X as oe,Za as F,Zi as se,_ as I,ar as L,at as ce,d as R,fr as le,g as z,h as B,j as V,lr as H,m as ue,mi as U,p as de,r as fe,st as W,ut as G,v as pe}from"./search-Cvetr1OK.js";import{l as me}from"./item-HmFuRZet.js";import{i as he}from"./CompositeItem-Dotj8JZL.js";import{t as ge}from"./sliders-horizontal-dmqWngxy.js";import{$ as _e,Ct as K,X as ve,bt as q,ft as ye,l as be,u as J}from"./index-nltuyQtq.js";var xe={name:`columns-3`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]],aliases:[`panels-left-right`]};xe.node;var Se=F(xe),Y=e(l(),1),X=y();function Ce({projectId:e,search:c,onSearch:l,onReset:f,view:g,actions:y,archivedFilter:S=!0}){let[C,w]=(0,Y.useState)(!1),T=se(),ie=te({...re.query(`list_members`,{projectId:e??``}),enabled:!!e}),k=te({...re.query(`list_ticket_labels`,{projectId:e??``,archived:S?c.archived:`include`}),enabled:C&&!!e}),M=ye(e),N=t(c),F=N.length+[c.due,S&&c.archived!==`exclude`].filter(Boolean).length,I=e=>l({...c,...e,offset:0}),L=(e,t,r)=>l(R.parse({...c,[e]:void 0,[n(e,`none`)]:void 0,...r.length?{[n(e,t)]:r}:{},offset:0})),z=e??``,B={status:v.map(e=>({value:e,text:a[e],node:(0,X.jsx)(_e,{property:`status`,value:e,projectId:z})})),priority:r.map(e=>({value:e,text:x[e],node:(0,X.jsx)(_e,{property:`priority`,value:e,projectId:z})})),label:(k.data??[]).map(e=>({value:e.name,text:e.name,node:(0,X.jsx)(me,{tag:e.name,className:`h-auto max-w-full`}),count:e.count})),assigneeId:[{value:T.id,text:_(`ticket.filter.me`)},{value:`none`,text:_(`common.state.unassigned`)},...(ie.data??[]).filter(e=>e.userId!==T.id).map(e=>({value:e.userId,text:e.name,keywords:[e.email]}))],customField:(M.data??[]).flatMap(e=>we(e).map(t=>({value:p(e.id,t),text:ee(e,t),node:(0,X.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,X.jsx)(`span`,{dir:`auto`,className:`truncate text-muted-foreground`,children:e.name}),e.options.some(e=>e.id===t)?(0,X.jsx)(ve,{field:e,value:t}):d(e,t)]})})))},V={status:a,priority:x,kind:b,difficulty:h,label:{},assigneeId:Object.fromEntries(B.assigneeId.map(e=>[e.value,e.text])),customField:Object.fromEntries(B.customField.map(e=>[e.value,e.text]))},H=(e,t)=>e===`label`?(0,X.jsx)(me,{tag:t}):e===`assigneeId`&&!V.assigneeId[t]?(0,X.jsx)(ae,{projectId:z,actorId:t}):V[e][t]??t;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`ticket-list-controls mb-0 flex min-h-12 min-w-0 items-center gap-1 border-b py-1 @max-[850px]:[&>[data-slot]]:px-2`,children:[(0,X.jsx)(`div`,{className:`mr-auto min-w-0 flex-1`,children:g}),(0,X.jsx)(ce,{label:_(`ticket.filter.searchTickets`),placeholder:_(`ticket.filter.searchTicketsPlaceholder`),shortcut:`/`,value:c.q??``,onChange:e=>I({q:e}),className:ne(`shrink-0`,c.q&&`[&_[data-slot=button]]:text-primary`)}),e&&(0,X.jsxs)(E,{open:C,onOpenChange:w,children:[(0,X.jsxs)(P,{render:(0,X.jsx)(oe,{label:F?_(`ticket.filter.filtersActive`,{active:F}):_(`ticket.filter.filters`),className:ne(`relative`,F>0&&`text-primary`)}),children:[(0,X.jsx)(ge,{}),F>0&&(0,X.jsx)(`span`,{"aria-hidden":`true`,className:`absolute -top-0.5 -right-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] leading-none text-primary-foreground tabular-nums`,children:F})]}),(0,X.jsxs)(D,{align:`end`,className:`w-[min(20rem,calc(100vw-2rem))] p-4`,children:[(0,X.jsx)(A,{children:_(`ticket.filter.filters`)}),(0,X.jsxs)(`div`,{className:`grid grid-cols-1`,children:[[`status`,`priority`,`label`].map(e=>(0,X.jsx)(Q,{field:e,search:c,choices:B[e],onChange:L,loading:e===`label`&&k.isPending,error:e===`label`?k.error:null},e)),(0,X.jsxs)(W,{label:_(`ticket.filter.due`),value:c.due??``,onValueChange:e=>I({due:e?u.shape.due.unwrap().parse(e):void 0}),children:[(0,X.jsx)(j,{value:``,children:_(`ticket.filter.anyDue`)}),Object.entries(m).map(([e,t])=>(0,X.jsx)(j,{value:e,children:t},e))]}),(0,X.jsx)(Q,{field:`assigneeId`,search:c,choices:B.assigneeId,onChange:L}),!!B.customField.length&&(0,X.jsx)(Q,{field:`customField`,search:c,choices:B.customField,onChange:L}),S&&(0,X.jsxs)(W,{label:_(`ticket.filter.archived`),value:c.archived,onValueChange:e=>I({archived:u.shape.archived.parse(e)}),children:[(0,X.jsx)(j,{value:`exclude`,children:_(`ticket.filter.hideArchived`)}),(0,X.jsx)(j,{value:`include`,children:_(`ticket.filter.includeArchived`)}),(0,X.jsx)(j,{value:`only`,children:_(`ticket.filter.archivedOnly`)})]})]}),(0,X.jsx)(U,{variant:`ghost`,onClick:()=>{l(R.parse({sort:c.sort})),w(!1)},children:_(`ticket.filter.reset`)})]})]}),(0,X.jsxs)(E,{children:[(0,X.jsx)(P,{render:(0,X.jsx)(oe,{label:_(`ticket.display.title`)}),children:(0,X.jsx)(Se,{})}),(0,X.jsxs)(D,{align:`end`,className:`w-[min(19rem,calc(100vw-2rem))] gap-3 p-4`,children:[(0,X.jsx)(A,{children:_(`ticket.display.title`)}),(0,X.jsx)(W,{label:_(`ticket.display.orderBy`),value:c.sort,onValueChange:e=>I({sort:u.shape.sort.parse(e),order:void 0}),children:Object.entries(i).filter(([t])=>e||t!==`manual`).map(([e,t])=>(0,X.jsx)(j,{value:e,children:t},e))}),(0,X.jsx)($,{label:_(`ticket.display.direction`),value:c.order??s[c.sort],onChange:e=>I({order:u.shape.order.parse(e)}),options:[[`asc`,_(`ticket.display.ascending`)],[`desc`,_(`ticket.display.descending`)]]}),(0,X.jsx)(Te,{work:!e,fields:M.data??[]}),(0,X.jsx)(le,{}),(0,X.jsx)(U,{variant:`ghost`,onClick:f,children:_(`ticket.display.reset`)})]})]}),y]}),(c.q||F>0)&&(0,X.jsxs)(`div`,{className:`active-filters mb-4 flex flex-wrap items-center gap-2 animate-in fade-in-0 slide-in-from-top-1 duration-150 [&_[data-slot=button]]:h-7 [&_[data-slot=button]]:text-xs`,"aria-label":_(`ticket.filter.active`),children:[c.q&&(0,X.jsxs)(U,{variant:`secondary`,size:`sm`,onClick:()=>I({q:void 0}),children:[_(`ticket.filter.searchChip`,{query:c.q}),(0,X.jsx)(O,{className:`size-3`})]}),N.map(({field:e,operator:t,values:r})=>(0,X.jsxs)(U,{variant:`secondary`,size:`sm`,onClick:()=>L(e,t,[]),children:[_(t===`none`?`ticket.filter.chipNone`:`ticket.filter.chipAny`,{field:o[e]}),` `,r.map((t,n)=>(0,X.jsxs)(`span`,{className:`inline-flex items-center`,children:[H(e,t),e!==`label`&&n<r.length-1&&`,`]},t)),(0,X.jsx)(O,{className:`size-3`})]},n(e,t))),c.due&&(0,X.jsxs)(U,{variant:`secondary`,size:`sm`,onClick:()=>I({due:void 0}),children:[m[c.due],(0,X.jsx)(O,{className:`size-3`})]}),S&&c.archived!==`exclude`&&(0,X.jsxs)(U,{variant:`secondary`,size:`sm`,onClick:()=>I({archived:`exclude`}),children:[c.archived===`only`?_(`ticket.filter.archivedOnly`):_(`ticket.filter.includingArchived`),(0,X.jsx)(O,{className:`size-3`})]}),(0,X.jsx)(U,{variant:`ghost`,size:`sm`,onClick:()=>l(R.parse({sort:c.sort})),children:_(`ticket.filter.clear`)})]})]})}var Z=g(C,e=>({any:_(`ticket.filter.anyValue.${e}`),search:_(`ticket.filter.searchValues.${e}`)}));function we(e){return[...e.type===`checkbox`?[S.checked]:e.options.map(e=>e.id),S.empty]}function Q({field:e,search:t,choices:r,onChange:i,loading:a=!1,error:s=null}){let[l,u]=(0,Y.useState)(!1),[d,p]=(0,Y.useState)(`any`),m=o[e],h=c(t[n(e,`none`)]),g=c(t[e]),v=h.length?`none`:g.length?`any`:d,y=v===`none`?h:g,b=y.map(e=>r.find(t=>t.value===e)?.text??e);return(0,X.jsxs)(L,{className:G,children:[(0,X.jsx)(H,{children:m}),(0,X.jsxs)(E,{open:l,onOpenChange:u,children:[(0,X.jsxs)(P,{render:(0,X.jsx)(U,{variant:`outline`,role:`combobox`,"aria-label":m,"aria-expanded":l,className:`h-8 w-full justify-between font-normal`}),children:[(0,X.jsx)(`span`,{className:`truncate`,children:b.length?v===`none`?_(`ticket.filter.notValues`,{values:f(b)}):f(b):Z[e].any}),(0,X.jsx)(he,{className:`shrink-0`})]}),(0,X.jsxs)(D,{align:`start`,className:`w-[min(20rem,calc(100vw-3rem))] p-0`,children:[(0,X.jsxs)(be,{"aria-label":_(`ticket.filter.match`,{label:m}),value:[v],onValueChange:t=>{let n=t[0];(n===`any`||n===`none`)&&(p(n),y.length&&i(e,n,y))},variant:`outline`,size:`sm`,spacing:0,className:`w-full p-2 pb-0 *:flex-1`,children:[(0,X.jsx)(J,{value:`any`,children:_(`ticket.filter.is`)}),(0,X.jsx)(J,{value:`none`,children:_(`ticket.filter.isNot`)})]}),(0,X.jsxs)(T,{children:[(0,X.jsx)(w,{"aria-label":Z[e].search,placeholder:_(`ticket.filter.searchPlaceholder`,{search:Z[e].search})}),(0,X.jsxs)(M,{children:[(0,X.jsx)(V,{value:Z[e].any,"data-checked":!y.length,"aria-checked":!y.length,onSelect:()=>{i(e,v,[]),u(!1)},children:Z[e].any}),r.map(t=>{let n=y.includes(t.value);return(0,X.jsxs)(V,{value:`${e}:${t.value}`,keywords:[t.text,...t.keywords??[]],"data-checked":n,"aria-checked":n,"aria-label":t.text,onSelect:()=>i(e,v,n?y.filter(e=>e!==t.value):[...y,t.value]),children:[t.node??(0,X.jsx)(`span`,{className:`truncate`,children:t.text}),t.count!==void 0&&(0,X.jsx)(`span`,{className:`ml-auto text-xs text-muted-foreground tabular-nums`,children:t.count})]},t.value)}),(0,X.jsx)(N,{children:_(a?`common.state.loading`:`ticket.property.noMatches`)})]})]}),(0,X.jsx)(k,{error:s})]})]})]})}function Te({work:e=!1,fields:t=[]}){let[n,r]=K(q.grouping),[i,a]=K(q.layout),[o,s]=K(q.backgrounds),[c,l]=K(q.workGrouping),[u,d]=K(q.density),[f,p]=K(q.labelDisplay),[m,h]=K(q.columns);return(0,X.jsxs)(X.Fragment,{children:[e?(0,X.jsx)($,{label:_(`ticket.display.groupBy`),value:c,onChange:e=>l(pe.parse(e)),options:[[`due`,_(`ticket.display.dueDate`)],[`project`,_(`ticket.project.label`)],[`none`,_(`common.state.none`)]]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)($,{label:_(`ticket.display.layout`),value:i,onChange:e=>a(I.parse(e)),options:[[`list`,_(`ticket.display.list`)],[`board`,_(`ticket.display.board`)],[`calendar`,_(`ticket.schedule.calendar`)],[`timeline`,_(`ticket.schedule.timeline`)]]}),i===`list`&&(0,X.jsx)($,{label:_(`ticket.display.groupBy`),value:n,onChange:e=>r(B.parse(e)),options:[[`status`,_(`ticket.property.status`)],[`none`,_(`common.state.none`)]]}),(0,X.jsx)($,{label:_(`ticket.display.backgrounds`),value:o,onChange:e=>s(q.backgrounds.schema.parse(e)),options:[[`show`,_(`ticket.display.show`)],[`hide`,_(`ticket.display.hide`)]]})]}),(0,X.jsx)(le,{}),(0,X.jsx)($,{label:_(`ticket.display.rowSpacing`),value:u,onChange:e=>d(ue.parse(e)),options:[[`compact`,_(`ticket.display.compact`)],[`comfortable`,_(`ticket.display.comfortable`)]]}),(0,X.jsx)($,{label:_(`ticket.display.labelDisplay`),value:f,onChange:e=>p(z.parse(e)),options:[[`compact`,_(`ticket.display.compactPreview`)],[`all`,_(`ticket.display.allLabels`)]]}),(0,X.jsxs)(`fieldset`,{children:[(0,X.jsx)(`legend`,{className:`mb-2 text-xs font-medium text-muted-foreground`,children:_(`ticket.display.properties`)}),(0,X.jsx)(`div`,{className:`grid grid-cols-2 gap-x-3`,children:[...Object.entries(de).map(([e,t])=>[e,t,!0]),...t.map(e=>[fe(e.id),e.name,!1])].map(([e,t,n])=>(0,X.jsx)(ie,{label:t,checked:m[e]??n,onCheckedChange:t=>h({...m,[e]:t})},e))})]})]})}function $({label:e,value:t,onChange:n,options:r}){return(0,X.jsxs)(L,{className:G,children:[(0,X.jsx)(H,{children:e}),(0,X.jsx)(be,{"aria-label":e,value:[t],onValueChange:e=>{let t=e[0];typeof t==`string`&&n(t)},variant:`outline`,size:`sm`,spacing:0,className:`w-full *:flex-1`,children:r.map(([e,t])=>(0,X.jsx)(J,{value:e,"aria-label":t,children:t},e))})]})}export{Ce as n,Te as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={common:{status:{backlog:`Bekleme listesi`,todo:`Yapılacak`,in_progress:`Devam ediyor`,in_review:`İncelemede`,done:`Tamamlandı`,cancelled:`İptal edildi`},priority:{urgent:`Acil`,high:`Yüksek`,medium:`Orta`,low:`Düşük`,none:`Öncelik yok`},kind:{feature:`Özellik`,bug:`Hata`,chore:`Rutin iş`,research:`Araştırma`,documentation:`Dokümantasyon`},difficulty:{low:`Düşük`,med:`Orta`,high:`Yüksek`,none:`Zorluk yok`},role:{reader:`Salt okunur`,writer:`Düzenleyebilir`,admin:`Yönetici`},permission:{ticket:{write:{label:`Talepleri düzenleme`,description:`Talep oluşturma, düzenleme, taşıma, üstlenme ve yorumlama; proje oluşturma`},delete:{label:`Talepleri silme`,description:`Talepleri kalıcı olarak silme`}},project:{manage:{label:`Projeleri yönetme`,description:`Proje ayrıntıları, iş akışı, etiketler, alanlar, entegrasyonlar ve yaşam döngüsü`}},member:{manage:{label:`Üyeleri yönetme`,description:`Üye ekleme, değiştirme ve kaldırma`}},invitation:{manage:{label:`Davetleri yönetme`,description:`Kişileri e-postayla davet etme`}},sharing:{manage:{label:`Paylaşımı yönetme`,description:`Herkese açık salt okunur bağlantılar ve takvim akışları`}},workspace:{manage:{label:`Çalışma alanını yönetme`,description:`Çalışma alanı ayrıntıları, paylaşılan etiketler ve roller`}}},customFieldType:{text:`Metin`,number:`Sayı`,date:`Tarih`,checkbox:`Onay kutusu`,select:`Seçim`,multiselect:`Çoklu seçim`},customField:{removedOption:`Kaldırılmış seçenek`,checked:`Evet`},filterField:{status:`Durum`,priority:`Öncelik`,kind:`Tür`,difficulty:`Zorluk`,label:`Etiket`,assigneeId:`Atanan`,customField:`Alan`},sort:{priority:`Öncelik`,updated:`Son güncellenen`,created:`Son oluşturulan`,title:`Başlık`,labels:`Etiketler`,due:`Bitiş tarihi`,start:`Başlangıç tarihi`,number:`Talep numarası`,status:`Durum`,difficulty:`Zorluk`,kind:`Tür`,assignee:`Atanan`,manual:`Elle`},due:{overdue:`Gecikmiş`,today:`Bugün bitiyor`,week:`Bu hafta bitiyor`,scheduled:`Bitiş tarihi var`,none:`Bitiş tarihi yok`},relation:{blocks:{outgoing:`Engelliyor`,incoming:`Engelleyen`},related:{outgoing:`İlişkili`,incoming:`İlişkili`},duplicate:{outgoing:`Kopyası`,incoming:`Kopyası olan`},causes:{outgoing:`Neden oluyor`,incoming:`Nedeni`},clones:{outgoing:`Klonluyor`,incoming:`Klonlayan`},implements:{outgoing:`Uyguluyor`,incoming:`Uygulayan`},reviews:{outgoing:`İnceliyor`,incoming:`İnceleyen`}},remoteKind:{branch:`Dal`,pull_request:`Pull request`,issue:`Konu`},notificationCategory:{assignment:`Atamalar`,status:`Durum değişiklikleri`,comment:`Yorumlar`,mention:`Bahsetmeler`,update:`Diğer güncellemeler`,due_soon:`Yakında bitiyor`,overdue:`Gecikmiş`},destinationEvent:{created:`Yeni talepler`},deliveryKind:{email:`E-posta`,webhook:`Webhook`},change:{pull_request:{name:`Pull request`,opened:`Pull request açıldı`,draft:`Taslak pull request`,merged:`Pull request birleştirildi`,closed:`Pull request birleştirilmeden kapatıldı`},merge_request:{name:`Merge request`,opened:`Merge request açıldı`,draft:`Taslak merge request`,merged:`Merge request birleştirildi`,closed:`Merge request birleştirilmeden kapatıldı`},branchCreated:`Dal oluşturuldu`},issueLinkState:{active:`Eşitleniyor`,paused:`Duraklatıldı`,review:`İnceleme gerekiyor`,creating:`Konu oluşturuluyor`,unknown:`Oluşturma doğrulanmadı`},importStatus:{previewed:`İçe aktarmaya hazır`,running:`İçe aktarılıyor`,completed:`İçe aktarıldı`,failed:`Başarısız`,cancelled:`İptal edildi`},importProvider:{linear:{project:`Ekip`,setup:`Linear’da Settings › Security & access altında kişisel bir API anahtarı oluşturun; okuma erişimi yeterlidir.`},jira:{project:`Proje`,setup:`Jira Cloud, hesap e-postanız ve id.atlassian.com adresinden alınan bir API belirteciyle oturum açar; Data Center ve Server kişisel erişim belirteci kullanır. Projeye göz atma erişimi yeterlidir.`},trello:{project:`Pano`,setup:`trello.com/power-ups/admin adresinde yönettiğiniz bir Power-Up’ın API anahtarını ve onun için oluşturulmuş bir belirteci kullanın; okuma erişimi yeterlidir.`},plane:{project:`Proje`,setup:`Plane’de Profile settings › Personal access tokens altında kişisel bir erişim belirteci oluşturun. Plane Cloud API adresi: https://api.plane.so; çalışma alanı URL anahtarı, web adresinin ilk bölümüdür.`},planka:{project:`Pano`,setup:`Panoyu açabilen bir PLANKA hesabıyla oturum açın; Kanvil’in açtığı oturum okuma bitince sona erer. PLANKA 2 yöneticileri bunun yerine API anahtarı verebilir.`},kaneo:{project:`Proje`,setup:`Kaneo’da Settings › Account › Developer altında bir API anahtarı oluşturun.`}},plankaSignIn:{password:`Kullanıcı adı ve parola`,api_key:`API anahtarı`},jiraEdition:{cloud:`Cloud`,data_center:`Data Center veya Server`},event:{time_entry:{created:`Zaman kaydı oluşturuldu`,updated:`Zaman kaydı güncellendi`,deleted:`Zaman kaydı silindi`},label:{created:`Etiket oluşturuldu`,updated:`Etiket güncellendi`,deleted:`Etiket silindi`},workflow:{created:`İş akışı durumu eklendi`,updated:`İş akışı durumu değişti`,deleted:`İş akışı durumu kaldırıldı`},custom_field:{created:`Alan oluşturuldu`,updated:`Alan güncellendi`,deleted:`Alan silindi`},ticket:{created:`Talep oluşturuldu`,updated:`Talep güncellendi`,deleted:`Talep silindi`,moved:`Başka bir projeden taşındı`,moved_away:`Başka bir projeye taşındı`,due_soon:`Yakında bitiyor`,overdue:`Gecikmiş`,claimed:`İş üstlenildi`},claim:{renewed:`Üstlenme yenilendi`,released:`Üstlenme bırakıldı`,recovered:`Üstlenme geri alındı`},comment:{created:`Yorum eklendi`,updated:`Yorum düzenlendi`,deleted:`Yorum silindi`},relation:{added:`İlişki eklendi`,removed:`İlişki kaldırıldı`},attachment:{created:`Dosya eklendi`,deleted:`Dosya kaldırıldı`},evidence:{added:`Kanıt eklendi`},resource:{added:`Bağlantı eklendi`,updated:`Bağlantı düzenlendi`,removed:`Bağlantı kaldırıldı`},calendar_feed:{created:`Takvim akışı oluşturuldu`,revoked:`Takvim akışı iptal edildi`},project:{created:`Proje oluşturuldu`,updated:`Proje güncellendi`,archived:`Proje arşivlendi`,restored:`Proje geri yüklendi`,transferred:`Proje başka bir çalışma alanına taşındı`,deleted:`Proje silindi`},membership:{updated:`Proje erişimi değişti`},workspace:{owner_changed:`Çalışma alanı sahibi değişti`},role:{created:`Rol oluşturuldu`,updated:`Rol değişti`,deleted:`Rol silindi`},invitation:{updated:`Davet değişti`},destination:{created:`Hedef eklendi`,updated:`Hedef değişti`,deleted:`Hedef kaldırıldı`},repository:{connected:`Depo bağlandı`,updated:`Depo bağlantısı değişti`,disconnected:`Depo bağlantısı kesildi`,received:`Depo webhook’u alındı`},issue_link:{updated:`Konu eşitlemesi değişti`}},error:{network:`Kanvil’e ulaşılamadı. Bağlantınızı kontrol edip yeniden deneyin.`,fallback:`İstek tamamlanamadı`,input:`Girdi`,code:{unauthorized:`Devam etmek için oturum açın.`,session_required:`Bu işlem için oturum açılmış bir hesap kullanın.`,account_disabled:`Bu hesap devre dışı.`,forbidden:`Bunu yapma izniniz yok.`,insufficient_scope:`Bu kimlik bilgisi bu işleme izin vermiyor.`,workspace_scope_required:`Bu işlem için çalışma alanı erişimi olan bir hesap kullanın.`,invalid_origin:`Bu kaynağa izin verilmiyor.`,not_found:`Bu öğe bulunamadı veya görme yetkiniz yok.`,version_conflict:`Yüklediğinizden beri bu değişti. Yeniden yükleyip tekrar deneyin.`,time_entry_conflict:`Bu kullanıcının bu bilette zaten devam eden bir zaman kaydı var.`,claim_conflict:`Bu talebi başka bir çalışan üstlenmiş.`,idempotency_conflict:`Bu istek başka bir değişiklik için zaten kullanıldı.`,project_archived:`Değiştirmeden önce arşivlenmiş projeyi geri yükleyin.`,rate_limited:`Kısa sürede çok fazla değişiklik. Bekleyip yeniden deneyin.`,snapshot_required:`Canlı akış geride kaldı. Devam etmek için yeniden yükleyin.`,request_failed:`İstek tamamlanamadı`}},action:{add:`Ekle`,apply:`Uygula`,back:`Geri`,cancel:`İptal`,clear:`Temizle`,close:`Kapat`,confirm:`Onayla`,continue:`Devam et`,copy:`Kopyala`,create:`Oluştur`,delete:`Sil`,done:`Bitti`,edit:`Düzenle`,open:`Aç`,remove:`Kaldır`,rename:`Yeniden adlandır`,reset:`Sıfırla`,retry:`Yeniden dene`,save:`Kaydet`,search:`Ara`},state:{copied:`Kopyalandı`,loading:`Yükleniyor…`,saved:`Kaydedildi`,saving:`Kaydediliyor…`,none:`Yok`,unassigned:`Atanmamış`},evidenceKind:{pull_request:`Pull request`,test:`Test`,review:`İnceleme`,deployment:`Dağıtım`,device:`Cihaz`,other:`Diğer`},evidenceOutcome:{reported:`Bildirildi`,pending:`Beklemede`,passed:`Başarılı`,failed:`Başarısız`},readinessReason:{project_archived:`Proje arşivlenmiş`,not_open:`Talep bir Yapılacak durumunda olmalı ve arşivlenmemiş olmalı`,not_enabled:`Ajan çalışması etkinleştirilmemiş`,missing_description:`Açıklama ekleyin`,missing_acceptance_criteria:`Kabul kriterleri ekleyin`,missing_difficulty:`Bir zorluk seçin`,duplicate:`Bu talep kopya olarak işaretlenmiş`,claim_recovery_required:`Sahipliği geri almadan önce önceki çalışanın durduğunu onaylayın`,claimed:`Üstlenen: {{worker}}`,dependency:`{{key}} tamamlanmadı`},person:{deleted:`Silinmiş hesap`,former:`Eski üye`},signIn:{codeTitle:`Kodla oturum aç`,resetTitle:`Parolayı sıfırla`,codeSent:`{{email}} adresinin bir hesabı varsa kod yolda. Kodun süresi 10 dakika içinde dolar.`,code:`Kod`,newPassword:`Yeni parola`,sendCode:`Kodu e-postayla gönder`,back:`Oturum açmaya dön`,resend:`Kodu yeniden gönder`,resent:`Kod yeniden gönderildi`,emailCode:`Oturum açma kodunu e-postayla gönder`,forgot:`Parolanızı mı unuttunuz?`,resetDone:`Parola sıfırlandı. Yeni parolayla oturum açın.`,resetDoneTitle:`Parola sıfırlandı`,resetDoneBody:`Yeni parolayla oturum açın.`,invalidCode:`Bu kod yanlış, kullanılmış veya süresi dolmuş. Geçerli bir kod almak için yeniden gönderin.`,localPassword:`Yerel parola`},language:{label:`Dil`,system:`Sistem varsayılanı`}},shell:{ui:{showValue:`{{label, lowercase}} göster`,hideValue:`{{label, lowercase}} gizle`,previousPage:`Önceki {{noun}}`,nextPage:`Sonraki {{noun}}`,pageRange:`{{from}}–{{to}} / {{total}}`,priority:`{{label}} öncelik`,working:`Çalışıyor…`,searchPlaceholder:`Ara…`,clearValue:`{{label, lowercase}} temizle`,copyValue:`{{label, lowercase}} kopyala`,copied:`{{value}} kopyalandı`},documentTitle:`{{name}} · Kanvil`,openKanvil:`Kanvil’i aç`,page:{home:`Ana sayfa`,myWork:`İşlerim`,inbox:`Gelen kutusu`,search:`Arama`,settings:`Ayarlar`,planning:`Planlama`,ticket:`Talep`,tickets:`Talepler`,projects:`Projeler`},connection:{restored:`Bağlantı yeniden kuruldu`,lost:`Bağlantı koptu`,reconnecting:`Yeniden bağlanılıyor…`,reload:`Yeniden yükle`,signIn:`Yeniden bağlanmak için oturum açın`},app:{skipToContent:`İçeriğe geç`,assigned:`Size atananlar`,openCount_one:`{{count, number}} açık`,openCount_other:`{{count, number}} açık`,noAssigned:`Size atanmış açık talep yok`,allInMyWork_one:`İşlerim’deki {{count, number}} talebin tümü`,allInMyWork_other:`İşlerim’deki {{count, number}} talebin tümü`,openMyWork:`İşlerim’i aç`,recentActivity:`Son etkinlik`,noActivity:`Henüz etkinlik yok`,searchProjects:`Projelerde ara`,projectCount_one:`{{count, number}} proje`,projectCount_other:`{{count, number}} proje`,noMatchingProjects:`Eşleşen proje yok`,clearSearch:`Aramayı temizle`,noWorkspaces:`Henüz çalışma alanı yok`,noActiveProjects:`Etkin proje yok`,noProjects:`Henüz proje yok`,archivedProjects:`Arşivlenmiş projeler`,archived:`Arşivlendi`,noOpenTickets:`Açık talep yok`,overdueCount_one:`{{count, number}} gecikmiş`,overdueCount_other:`{{count, number}} gecikmiş`,percentDone:`{{percent}} tamamlandı`,nextDue:`sonraki bitiş <time/>`,projectSettingsFor:`{{name}} proje ayarları`,pageNotFound:`Sayfa bulunamadı`,openHome:`Ana sayfayı aç`,tryAgain:`Tekrar dene`,adminRequired:`Sunucu yöneticisi erişimi gerekiyor`,projectNotFound:`Proje bulunamadı`,noWorkspaceSelected:`Çalışma alanı seçilmedi`},auth:{signIn:`Oturum aç`,createOwner:`Sahip hesabınızı oluşturun`,ownerHint:`İlk hesap bu sunucuyu yönetir.`,invitedHint:`Daveti kabul etmek için davet edilen e-posta adresiyle oturum açın.`,signInWith:`{{provider}} ile oturum aç`,useEmail:`E-posta ve parola kullan`,or:`veya`,name:`Ad`,setupToken:`Kurulum belirteci`,setupTokenHint:`Sunucu yapılandırmanızdaki KANVIL_SETUP_TOKEN değerini kullanın.`,email:`E-posta`,password:`Parola`,signingIn:`Oturum açılıyor…`,createAccount:`Hesap oluştur`,consent:{expired:`Yetkilendirme isteğinin süresi doldu. İstemcinizi yeniden bağlayın.`,title:`{{client}} yetkilendir`,titleUnnamed:`İstemciyi yetkilendir`,subtitle:`Bu istemci hesabınız adına erişim istiyor. Proje izinleri yine geçerlidir.`,deny:`Reddet`,allow:`Erişime izin ver`},invitation:{unavailable:`Davet kullanılamıyor`,join:`{{workspace}} alanına katıl`,invited:`Davet edilen`,from:`Gönderen`,access:`Erişim`,removedProjects:`Kaldırılan projeler`,wholeWorkspace:`Tüm çalışma alanı`,expires:`Bitiş`,expired:`Bu davetin süresi doldu. Bir çalışma alanı yöneticisinden yeni davet isteyin.`,revoked:`Bu davet iptal edildi. Bir çalışma alanı yöneticisinden yeni davet isteyin.`,accepted:`Bu davet zaten kabul edildi. Bir çalışma alanı yöneticisinden yeni davet isteyin.`,wrongAccount:`<account>{{current}}</account> olarak oturum açtınız. Kabul etmek için {{invited}} olarak oturum açın.`,signOut:`Oturumu kapat`,joined:`{{workspace}} alanına katıldınız`,accept:`Daveti kabul et`},callback:{cancelled:`Oturum açma iptal edildi. Hazır olduğunuzda tekrar deneyin.`,linkedElsewhere:`Bu kimlik zaten başka bir Kanvil hesabına bağlı. Farklı bir kimlik kullanın veya yöneticinize başvurun.`,notLinked:`Bu kimlik bir Kanvil hesabına bağlı değil. Yerel hesabınızla oturum açıp Ayarlar’dan bağlayın.`,expired:`Oturum açma isteğinin süresi doldu veya doğrulanamadı. Bu ekrandan tekrar deneyin.`,emailMismatch:`Kimlik sağlayıcının e-postası bağlanamadı. Yöneticinize başvurun.`,failed:`Oturum açma tamamlanamadı. Tekrar deneyin veya yöneticinize başvurun.`}},you:`Siz`,inbox:{markAllRead:`Tümünü okundu işaretle`,clearRead:`Okunanları temizle`,cleared_one:`{{count, number}} okunmuş bildirim temizlendi`,cleared_other:`{{count, number}} okunmuş bildirim temizlendi`,unread:`Okunmamış`,mentions:`Bahsetmeler`,all:`Tüm bildirimler`,noUnread:`Okunmamış bildirim yok`,noMentions:`Bahsetme yok`,noNotifications:`Bildirim yok`,markUnread:`Okunmadı işaretle`,markRead:`Okundu işaretle`,dismiss:`Kapat`},search:{field:`Çalışma alanında ara`,placeholder:`Talep, proje, yorum, etkinlik ara…`,tab:{all:`Tümü`,project:`Projeler`,ticket:`Talepler`,comment:`Yorumlar`,activity:`Etkinlik`},indexing:`Harici arama güncelleniyor; talep eşleşmeleri PostgreSQL’den geliyor.`,empty:`Talep, proje, yorum ve etkinliklerde arayın`,noResults:`“{{query}}” için sonuç yok`,results:`Arama sonuçları`,pages:`Arama sayfaları`,previous:`Önceki`,next:`Sonraki`,type:{project:`Proje`,ticket:`Talep`,comment:`Yorum`,activity:`Etkinlik`}},column:{key:`Talep`,labels:`Etiketler`,scopes:`Kapsamlar`,status:`Durum`,priority:`Öncelik`,difficulty:`Zorluk`,kind:`Tür`,assigneeId:`Atanan`,startAt:`Başlangıç`,dueAt:`Bitiş`,createdAt:`Oluşturma`,updatedAt:`Güncelleme`},public:{notShared:`Bu proje paylaşılmıyor`,notSharedHint:`Bağlantı kapatıldı veya hiç var olmadı. Üyeler oturum açarak okuyabilir.`,noTickets:`Talep yok`,ticketUnavailable:`Talep kullanılamıyor`,backToTickets:`Taleplere dön`,description:`Açıklama`,noDescription:`_Açıklama yok_`,acceptanceCriteria:`Kabul kriterleri`,noAcceptanceCriteria:`_Kabul kriteri yok_`,ticketProperties:`Talep özellikleri`,properties:`Özellikler`,status:`Durum`,priority:`Öncelik`,kind:`Tür`,difficulty:`Zorluk`,startDate:`Başlangıç tarihi`,dueDate:`Bitiş tarihi`,labels:`Etiketler`,scopes:`Kapsamlar`,created:`Oluşturulma`,updated:`Güncellenme`,relationships:`İlişkiler`,parent:`Üst`,child:`Alt`},sidebar:{workspace:`Çalışma alanı`,unread_one:`{{count, number}} okunmamış`,unread_other:`{{count, number}} okunmamış`,userSettings:`Kullanıcı ayarları`,administration:`Yönetim`,signOut:`Oturumu kapat`,projectSettings:`Proje ayarları`},workspace:{new:`Yeni çalışma alanı`,name:`Çalışma alanı adı`,key:`Çalışma alanı anahtarı`,create:`Çalışma alanı oluştur`,workspaces:`Çalışma alanları`,switch:`Çalışma alanı değiştir`,settings:`Çalışma alanı ayarları`},palette:{open:`Git…`,title:`Git`,description:`Proje, talep, sayfa veya işlem bulun`,placeholder:`Talep, proje, sayfa, işlem ara…`,searching:`Aranıyor…`,noResults:`Sonuç yok`,jumpTo:`Atla`,openKey:`{{key}} talebini {{project}} içinde aç`,resultsIn:`{{workspace}} içindeki sonuçlar`,results:`Sonuçlar`,seeAll_one:`{{count, number}} sonucun tümünü gör`,seeAll_other:`{{count, number}} sonucun tümünü gör`,actions:`İşlemler`,pages:`Sayfalar`,newTicketIn:`{{project}} içinde yeni talep`,myTicketsIn:`{{project}} içindeki taleplerim`,lightMode:`Açık moda geç`,darkMode:`Koyu moda geç`,keywords:{jump:`{{query}} atla aç git jump open`,allResults:`tüm sonuçlar {{query}}`,newTicket:`yeni talep oluştur`,myTickets:`taleplerim bana atanan`,lightMode:`açık moda geç tema görünüm`,darkMode:`koyu moda geç tema görünüm`,help:`klavye kısayolları yardım`,home:`ana sayfa genel bakış tüm projeler`,myWork:`işlerim atanan talepler`,search:`ara yorumlar etkinlik projeler talepler`,inbox:`gelen kutusu bildirimler`,settings:`ayarlar {{scope}} {{label}}`}},actionCategory:{general:`Genel`,ticketList:`Talep listesi`,inbox:`Gelen kutusu`,ticket:`Talep`,search:`Arama`,markdown:`Markdown`},action:{palette:`Her yere git`,help:`Klavye kısayolları`,sidebar:`Kenar çubuğunu aç/kapat`,newTicket:`Yeni talep`,search:`Taleplerde ara`,highlight:`Sonraki veya önceki talebi vurgula`,open:`Vurgulanan talebi aç`,preview:`Vurgulanan talebi listenin yanında önizle`,select:`Vurgulanan talebi seç`,properties:`Vurgulanan talebin durumunu, önceliğini veya atananını belirle`,inboxHighlight:`Sonraki veya önceki bildirimi vurgula`,inboxOpen:`Vurgulanan bildirimin talebini Gelen kutusunun yanında oku`,inboxRead:`Vurgulanan bildirimi okundu veya okunmadı işaretle`,inboxDismiss:`Vurgulanan bildirimi kapat`,step:`Sonraki veya önceki talebi aç`,edit:`Talebi düzenle`,save:`Talebi veya yorumu kaydet`,results:`Arama sonuçları arasında gezin`,insertBlock:`Görsel düzenleyicide tablo, diyagram, dosya veya başka bir blok ekle`},move:{top:{label:`Vurgulanan talebi en üste taşı`,menu:`En üste taşı`},up:{label:`Vurgulanan talebi yukarı taşı`,menu:`Yukarı taşı`},down:{label:`Vurgulanan talebi aşağı taşı`,menu:`Aşağı taşı`},bottom:{label:`Vurgulanan talebi en alta taşı`,menu:`En alta taşı`},previous:{label:`Vurgulanan talebi önceki duruma taşı`,menu:`Önceki duruma taşı`},next:{label:`Vurgulanan talebi sonraki duruma taşı`,menu:`Sonraki duruma taşı`}},copy:{link:{label:`Bağlantıyı kopyala`,copied:`Talep bağlantısı`},keyAndTitle:{label:`Anahtarı ve başlığı kopyala`,copied:`Talep`},title:{label:`Başlığı kopyala`,copied:`Başlık`},markdown:{label:`Markdown olarak kopyala`,copied:`Markdown`},branch:{label:`Dal adını kopyala`,copied:`Dal adı`}},settingsNav:{account:`Hesap`,settings:`Ayarlar`,workspace:`Çalışma alanı`,workspaceSettings:`Çalışma alanı ayarları`,projects:`Projeler`,projectSettings:`Proje ayarları`,administration:`Yönetim`,section:{profile:`Profil ve güvenlik`,appearance:`Görünüm`,preferences:`Tercihler`,credentials:`API anahtarları`,notifications:`Bildirimler`,general:`Genel`,members:`Üyeler`,roles:`Roller`,labels:`Etiketler`,workflow:`İş akışı`,fields:`Alanlar`,integrations:`Entegrasyonlar`,calendar:`Takvim akışları`,storage:`Dosya depolama`,search:`Arama`,events:`Olay teslimi`,users:`Kullanıcılar`,workspaces:`Çalışma alanları`,authentication:`Kimlik doğrulama`}},browser:{copyFailed:`Kopyalama başarısız. Metni seçip elle kopyalayın.`,readFailed:`Dosya okunamadı`,encodeFailed:`Dosya kodlanamadı`,imageTooBig:`10 MB’tan küçük bir görsel seçin.`,cannotResize:`Bu tarayıcı görseli yeniden boyutlandıramıyor.`,prepareFailed:`Görsel hazırlanamadı.`,stillTooLarge:`Bu görsel yeniden boyutlandırıldıktan sonra da çok büyük. Daha basit bir görsel seçin.`},primitive:{close:`Kapat`,more:`Daha fazla`,breadcrumb:`içerik haritası`,sidebar:`Kenar çubuğu`,sidebarDescription:`Mobil kenar çubuğunu gösterir.`,toggleSidebar:`Kenar çubuğunu aç/kapat`,resizeSidebar:`Kenar çubuğunu yeniden boyutlandır`,expandSidebar:`Kenar çubuğunu genişlet`,commandTitle:`Komut paleti`,commandDescription:`Çalıştırılacak komutu arayın…`}},ticket:{list:{manageViews:`Görünümleri yönet`,selectSection:`{{section}} taleplerini seç`,expandSection:`{{section}} taleplerini genişlet`,collapseSection:`{{section}} taleplerini daralt`,sectionTickets:`{{section}} talepleri`,later:`Daha sonra`,selectAll:`Görüntülenen tüm talepleri seç`,selectTicket:`Seç: {{key}}`,title:`Başlık`,all:`Tümü`,planned:`Planlanan`,archived:`Arşivlenen`,allTickets:`Tüm talepler`,customView:`Özel görünüm`,sectionCount:`{{n, number}} {{section}}`,planning:`{{project}} planlaması`,collection:`{{source}} ({{sections}})`,moved:`{{key}} taşındı`,movedTo:`{{key}}, {{status}} durumuna taşındı`,movedAbove:`{{key}}, {{neighbor}} talebinin üstüne taşındı`,movedBelow:`{{key}}, {{neighbor}} talebinin altına taşındı`,movedToAbove:`{{key}}, {{status}} durumunda {{neighbor}} talebinin üstüne taşındı`,movedToBelow:`{{key}}, {{status}} durumunda {{neighbor}} talebinin altına taşındı`,emptyFiltered:`Eşleşen talep yok`,emptyPlanning:`Planlanan veya arşivlenen bir şey yok`,emptyProject:`Henüz talep yok`,emptyWork:`Size atanmış açık talep yok`,createFirst:`İlk talebi oluştur`,activeWork:`Etkin işler`,views:`Talep görünümleri`,saveCurrentView:`Geçerli görünümü kaydet`,deleteView:`{{name}} görünümünü sil`,deleteViewConfirm:`{{name}} kayıtlı görünümlerden kaldırılsın mı? Talepler değişmeden kalır.`,planningLink:`Planlama`,newTicketShortcut:`Yeni talep ({{shortcut}})`,saveView:`Görünümü kaydet`,viewSaved:`Görünüm kaydedildi`,viewName:`Görünüm adı`,retry:`Talepleri yeniden yükle`,board:`Talep panosu`,tickets:`Talepler`,resizeColumn:`{{column}} sütununu yeniden boyutlandır`,count_one:`{{count, number}} talep`,count_other:`{{count, number}} talep`,scheduledCount_one:`{{count, number}} zamanlanmış talep`,scheduledCount_other:`{{count, number}} zamanlanmış talep`},move:{destination:`Hedef`,projectPlaceholder:`Projeye taşı…`,blockers:`Taşımadan önce çözün`,submit:`Talebi taşı`,pending:`Taşınıyor…`},picker:{placeholder:`Bir talep seçin`,loading:`Talep yükleniyor…`,searchLabel:`{{label, lowercase}} ara`,searchPlaceholder:`Başlık veya anahtarla ara…`,noParent:`Üst talep yok`,searching:`Aranıyor…`,empty:`Talep bulunamadı`},property:{status:`Durum`,priority:`Öncelik`,kind:`Tür`,difficulty:`Zorluk`,assignee:`Atanan`,you:`{{name}} (siz)`,assignTo:`Ata…`,set:`{{label}} belirle…`,search:`{{label, lowercase}} ara`,noMatches:`Eşleşme yok`},field:{mixed:`Karışık`,unchecked:`Hayır`,noValue:`Değer yok`},project:{label:`Proje`,placeholder:`Projede oluştur…`,search:`Projelerde ara`},tags:{labels:`Etiketler`,scopes:`Kapsamlar`,summary:`{{label}}: {{tags}}`,edit:`{{label}} düzenle`,editValues:`{{label}} düzenle: {{tags}}`,editMixed:`{{label}} düzenle: karışık`,mixed:`Karışık {{label, lowercase}}`,none:`{{label}} yok`,mixedNote:`Seçili taleplerin {{label, lowercase}} farklı.`,clear:`{{label}} temizle`,replace:`{{label}} değiştir`},tagInput:{remove:`Kaldır: {{label}} {{tag}}`,addAnother:`Başka ekle…`,add:`{{label}} ekle…`,choose:`{{label}} seç`,chooseLabels:`Etiket seç`,searchPlaceholder:`Etiket ara…`,searchLabel:`Proje etiketlerinde ara`,empty:`Eşleşen etiket yok`},link:{previewUnavailable:`Önizleme kullanılamıyor`},userPicker:{label:`Hesap`,placeholder:`Bir hesap seçin`,searchPlaceholder:`Ad veya e-posta ara…`,searchLabel:`Hesaplarda ara`,useEmail:`{{email}} kullan`,emptyAnyAccount:`Bir üye arayın veya mevcut bir hesabın e-postasını girin.`,empty:`Eşleşen üye yok`},date:{placeholder:`Bir tarih seçin`,clear:`{{label}} temizle`,start:`Başlangıç tarihi`,startShort:`Başlangıç`,noStart:`Başlangıç tarihi yok`,due:`Bitiş tarihi`,dueShort:`Bitiş`,noDue:`Bitiş tarihi yok`},filter:{add:`Filtre ekle`,me:`Ben`,searchTickets:`Taleplerde ara`,searchTicketsPlaceholder:`Taleplerde ara…`,filters:`Filtreler`,filtersActive:`Filtreler ({{active, number}})`,due:`Bitiş`,anyDue:`Herhangi bir bitiş tarihi`,archived:`Arşivlenen`,hideArchived:`Arşivlenenleri gizle`,includeArchived:`Arşivlenenleri dahil et`,archivedOnly:`Yalnızca arşivlenenler`,includingArchived:`Arşivlenenler dahil`,reset:`Filtreleri sıfırla`,clear:`Filtreleri temizle`,active:`Etkin talep filtreleri`,searchChip:`Arama: {{query}}`,chipAny:`{{field}}:`,chipNone:`{{field}} şu değil:`,notValues:`{{values}} değil`,match:`{{label}} eşleşmesi`,is:`Eşittir`,isNot:`Eşit değildir`,searchPlaceholder:`{{search}}…`,anyValue:{status:`Tüm durumlar`,priority:`Tüm öncelikler`,kind:`Tüm türler`,difficulty:`Tüm zorluklar`,label:`Tüm etiketler`,assigneeId:`Herkes`,customField:`Herhangi bir alan değeri`},searchValues:{status:`Durum ara`,priority:`Öncelik ara`,kind:`Tür ara`,difficulty:`Zorluk ara`,label:`Etiket ara`,assigneeId:`Kişi ara`,customField:`Alan ara`}},display:{title:`Görünüm`,orderBy:`Sıralama`,direction:`Yön`,ascending:`Artan`,descending:`Azalan`,reset:`Görünümü sıfırla`,groupBy:`Gruplama`,dueDate:`Bitiş tarihi`,layout:`Düzen`,list:`Liste`,board:`Pano`,backgrounds:`Proje arka planları`,show:`Göster`,hide:`Gizle`,rowSpacing:`Satır aralığı`,compact:`Sıkı`,comfortable:`Rahat`,labelDisplay:`Etiket gösterimi`,compactPreview:`Kısa önizleme`,allLabels:`Tüm etiketler`,properties:`Özellikler`},selection:{region:`Seçili talepler`,clear:`Seçimi temizle`,selected_one:`{{count, number}} seçili`,selected_other:`{{count, number}} seçili`,selectedOf_one:`{{count, number}} / {{total}}<wide> seçili</wide>`,selectedOf_other:`{{count, number}} / {{total}}<wide> seçili</wide>`,applied_one:`{{label}}, {{count, number}} talebe uygulandı`,applied_other:`{{label}}, {{count, number}} talebe uygulandı`,partlyApplied_one:`{{count, number}} talebin {{done, number}} tanesine uygulandı`,partlyApplied_other:`{{count, number}} talebin {{done, number}} tanesine uygulandı`,mixedDue:`Karışık bitiş tarihleri`,fields:`Alanlar`,more:`Diğer işlemler`,moveTo:`{{status}} durumuna taşı`,restoreChange:`Geri yükleme`,restore:`Seçilenleri geri yükle`,archive:`Seçilenleri arşivle`,delete:`Seçilenleri sil`,deleteLimit:`Tek seferde en fazla {{limit, number}} silin`,archiveConfirm_one:`{{collection}} içinden {{count, number}} talep arşivlensin mi?`,archiveConfirm_other:`{{collection}} içinden {{count, number}} talep arşivlensin mi?`,deleteConfirm_one:`{{collection}} içinden {{count, number}} talep yorumları, ilişkileri ve ekleriyle birlikte kalıcı olarak silinsin mi? Seçim dışındaki alt talepler üst taleplerini kaybeder.`,deleteConfirm_other:`{{collection}} içinden {{count, number}} talep yorumları, ilişkileri ve ekleriyle birlikte kalıcı olarak silinsin mi? Seçim dışındaki alt talepler üst taleplerini kaybeder.`,deleted_one:`{{count, number}} talep silindi`,deleted_other:`{{count, number}} talep silindi`},menu:{copied:`{{label}} kopyalandı`,open:`Talebi aç`,preview:`Önizle`,newTab:`Yeni sekmede aç`,edit:`Talebi düzenle`,editTitle:`Düzenle: {{key}}`,duplicate:`Talebi çoğalt`,created:`{{key}} oluşturuldu`,move:`Taşı`,moveToProject:`Projeye taşı…`,moveTitle:`Taşı: {{key}}`,moved:`{{key}} olarak taşındı`,follow:`Talebi takip et`,unfollow:`Talebi takipten çık`,archive:`Talebi arşivle`,unarchive:`Talebi arşivden çıkar`,delete:`Talebi sil`,deleteConfirm:`{{key}}, yorumları, ilişkileri ve ekleriyle birlikte kalıcı olarak silinsin mi?`,openProject:`Projeyi aç`,projectLink:`Proje bağlantısı`,copyLink:`Bağlantıyı kopyala`,newTicket:`Yeni talep`,projectSettings:`Proje ayarları`,manageAccount:`Hesabı yönet`,email:`E-posta`,copyEmail:`E-postayı kopyala`},schedule:{range:`{{from}} – {{to}}`,calendar:`Takvim`,timeline:`Zaman çizelgesi`,today:`Bugün`,previousMonth:`Önceki ay`,nextMonth:`Sonraki ay`,previousWeeks:`Önceki iki hafta`,nextWeeks:`Sonraki iki hafta`,emptyWeeks:`Bu haftalarda planlanmış bir şey yok`,monthTickets:`{{title}} talepleri`,showDay_one:`{{day}} tarihindeki {{count, number}} talebin tümünü göster`,showDay_other:`{{day}} tarihindeki {{count, number}} talebin tümünü göster`,more_one:`{{count, number}} daha`,more_other:`{{count, number}} daha`,ticketColumn:`Talep`,scheduledTickets:`Zamanlanmış talepler`},copy:{description:`Açıklama`,acceptanceCriteria:`Kabul kriterleri`}},detail:{field:{title:`Başlık`,description:`Açıklama`,acceptanceCriteria:`Kabul kriterleri`,parent:`Üst`,parentTicket:`Üst talep`,labels:`Etiketler`,scopes:`Kapsamlar`,holdReason:`Bekletme nedeni`,url:`URL`},page:{preview:`Talep önizlemesi`,unavailable:`Talep kullanılamıyor`,noProject:`Bağlantı, talebin projesini belirtmiyor.`,gone:`Bu talep silindi veya artık erişiminiz yok.`,closePreview:`Önizlemeyi kapat`,openFullPage:`Tam sayfada aç`,backToTickets:`Taleplere dön`,tickets:`Talepler`,previousTicket:`Önceki talep`,previousTicketShortcut:`Önceki talep (K)`,nextTicket:`Sonraki talep`,nextTicketShortcut:`Sonraki talep (J)`,position:`{{position, number}} / {{total, number}}`,subscribe:`Abone ol`,unsubscribe:`Abonelikten çık`,subscribed:`Güncellemelere abone olundu`,unsubscribed:`Abonelikten çıkıldı`,archive:`Talebi arşivle`,unarchive:`Talebi arşivden çıkar`,archivedToast:`Talep arşivlendi`,unarchivedToast:`Talep arşivden çıkarıldı`,archived:`Arşivlendi`,edit:`Talebi düzenle`,editShortcut:`Talebi düzenle (E)`,editTitle:`Düzenle: {{key}}`,actions:`Talep işlemleri`,copyKey:`Talep anahtarını kopyala`,keyCopied:`{{key}} kopyalandı`,noDescription:`_Açıklama yok_`,noAcceptanceCriteria:`_Kabul kriteri yok_`,coordination:`Talep koordinasyonu`,properties:`Özellikler`,created:`Oluşturulma`,updated:`Güncellenme`},section:{discussion:`Tartışma`,evidence:`Kanıt`,activity:`Etkinlik`},readiness:{heading:`Ajan hazırlığı`,ready:`Üstlenmeye hazır`,notReady:`Üstlenmeye hazır değil`,hold:`Bekletme: {{reason}}`,claimedUntil:`<strong>{{worker}}</strong> tarafından {{date}} tarihine kadar üstlenildi.`},claim:{release:`Üstlenmemi bırak`,releaseDescription:`Çalışanınız yazmayı bıraktıktan sonra sahiplik bırakılsın mı?`,recover:`Süresi dolmuş üstlenmeyi geri al`,recoverHelp:`Önce çalışanın durduğunu doğrulayın.`,reason:`Geri alma nedeni`,confirmed:`Çalışanın durduğunu doğruladım`,submit:`Sahipliği geri al`},editor:{storageUnavailable:`Bu tarayıcı taslağınızı kaydedemiyor. Kaydedene kadar düzenleyiciyi açık tutun.`,saved:`{{key}} kaydedildi`,created:`{{key}} oluşturuldu`,properties:`Talep özellikleri`,readyForAgents:`Ajanlar için hazır`,readyForAgentsHelp:`Gereksinimler, engeller ve sahiplik izin verdiğinde ajanlar bu talebi üstlenebilir`,agents:`Ajanlar`,notReady:`Hazır değil`,moreProperties:`Diğer özellikler`,holdPlaceholder:`İş neden beklemeli?`,claimsNote:`Üstlenmeler yine gereksinimlere, engellere ve mevcut sahipliğe bağlıdır.`,restoreSize:`Düzenleyici boyutunu geri yükle`,expand:`Düzenleyiciyi genişlet`,staleTitle:`Bu talep değişti.`,staleDescription:`Taslağınız hâlâ {{version}} sürümünü kullanıyor; kaydetmek için güncel sürüm gerekecek.`,discardAndReload:`Taslağı at ve yeniden yükle`,titlePlaceholder:`Talep başlığı`,descriptionPlaceholder:`Bağlam, gereksinimler veya yeniden üretme adımları ekleyin…`,criteriaPlaceholder:`- [ ] Bunun tamamlandığını ne gösterecek?`,removeCriteria:`Kabul kriterlerini kaldır`,addCriteria:`Kabul kriterleri ekle`,savedLocally:`Taslak bu cihaza kaydedildi`,notSavedLocally:`Taslak kaydedilemedi`,discardDraft:`Taslağı at`,createMore:`Daha fazla oluştur`,save:`Talebi kaydet`,create:`Talep oluştur`},resource:{removeConfirm:`{{name}} kaldırılsın mı?`,uploading:`Yükleniyor…`},attachment:{heading:`Ekler`,tooLarge:`Her biri en fazla 10 MB olan dosyalar seçin.`,attached_one:`Dosya eklendi`,attached_other:`{{count, number}} dosya eklendi`,attach:`Dosya ekle`,emptyWritable:`Ek yok. Dosyaları buraya bırakın.`,empty:`Ek yok`,remove:`Eki kaldır`,fileInput:`Dosya (en fazla 10 MB)`},evidence:{description:`Bu talep üzerinde çalışan kişilerin ve entegrasyonların bildirdiği bağlantılar ve sonuçlar.`,add:`Kanıt ekle`,empty:`Eklenmiş kanıt yok`,added:`Kanıt eklendi`,kindLabel:`Tür`,outcomeLabel:`Bildirilen sonuç`,commit:`Commit (tam hash)`,note:`Not`},link:{heading:`Bağlantılar`,add:`Bağlantı ekle`,edit:`Bağlantıyı düzenle`,save:`Bağlantıyı kaydet`,remove:`Bağlantıyı kaldır`,empty:`Bağlantı yok`,stateUnknown:`Durum bilinmiyor`,remote:`{{kind}} · {{state}}`,remoteState:{open:`Açık`,closed:`Kapalı`,merged:`Birleştirildi`,draft:`Taslak`,active:`Etkin`,deleted:`Silindi`}},activity:{previous:`Önceki etkinlik`,next:`Sonraki etkinlik`},relations:{heading:`İlişkiler`,add:`İlişki ekle`,linkExisting:`Mevcut talebi bağla`,newChild:`Yeni alt talep`,newChildTitle:`{{key}} için yeni alt talep`,children:`Alt talepler <count>{{done, number}}/{{total, number}}</count>`,previousChildren:`Önceki alt talepler`,nextChildren:`Sonraki alt talepler`,empty:`İlişki yok`,type:`İlişki`,ticket:`Talep`,statusOf:`{{key}} durumu`,assigneeOf:`{{key}} atananı`,remove:{blocks:`Engelleme ilişkisini kaldır`,related:`İlişkili bağını kaldır`,duplicate:`Kopya ilişkisini kaldır`,causes:`Neden olma ilişkisini kaldır`,clones:`Klonlama ilişkisini kaldır`,implements:`Uygulama ilişkisini kaldır`,reviews:`İnceleme ilişkisini kaldır`}},discussion:{empty:`Henüz yorum yok`,previous:`Önceki yorumlar`,next:`Sonraki yorumlar`,comment:`Yorum yap`,placeholder:`Bir yorum yazın…`,posting:`Gönderiliyor…`,edited:`Düzenlendi`,edit:`Yorumu düzenle`,delete:`Yorumu sil`,deleteConfirm:`Bu yorum kalıcı olarak silinsin mi?`},markdown:{format:{heading:`Başlık`,bold:`Kalın`,italic:`İtalik`,link:`Bağlantı`,linkHelp:`Seçili metne bağlantı ver`,bullets:`Madde işaretli liste`,numbers:`Numaralı liste`,tasks:`Kontrol listesi`,code:`Kod bloğu`},formatting:`{{label}} biçimlendirmesi`,editor:`{{label}} düzenleyicisi`,insertFile:`Dosya ekle`,insertFileInto:`{{label}} alanına dosya ekle`,write:`Yaz`,visual:`Görsel`,preview:`Önizleme`,unsupported:`Bu metin, görsel düzenleyicinin koruyamayacağı Markdown kullanıyor (ör. HTML veya dipnotlar).`,nothingToPreview:`Önizlenecek bir şey yok`,mention:`Bir üyeden bahset`,insertBlock:`Blok ekle`,block:{quote:`Alıntı`,table:`Tablo`,diagram:`Diyagram`,divider:`Ayırıcı`,file:`Dosya`},table:{addRow:`Satır ekle`,addColumn:`Sütun ekle`,deleteRow:`Satırı sil`,deleteColumn:`Sütunu sil`,deleteTable:`Tabloyu sil`},linkAddress:`Bağlantı adresi`,diagram:`Diyagram`,diagramFailed:`Bu diyagram çizilemedi: {{error}}`,diagramSource:`Diyagram kaynağı`}},settings:{account:{title:`Ayarlar`,security:`Oturum açma ve güvenlik`,localPassword:`Yerel parola`,localPasswordDescription:`Parolanızı değiştirmek diğer oturumlarınızı kapatır.`,changePassword:`Parolayı değiştir`,oidcLinked:`Aynı hesapta oturum açmak için bu kimlik sağlayıcıyı kullanın.`,oidcUnlinked:`Bu sağlayıcı üzerinden oturum açmadan önce hesabınızı bağlayın.`,linked:`Bağlı`,link:`{{name}} bağla`,currentPassword:`Mevcut parola`,newPassword:`Yeni parola`,confirmPassword:`Yeni parolayı onaylayın`,passwordMismatch:`Yeni parolalar eşleşmiyor.`,passwordUpdated:`Parola güncellendi. Diğer oturumlar kapatıldı.`},preferences:{behavior:`Davranış`,languageDescription:`Oturum açma sayfası dahil bu tarayıcıda geçerlidir.`,weekStart:`Hafta başlangıcı`,weekStartDescription:`Tüm tarih seçicilerde geçerlidir.`,weekStartLanguage:`Dil varsayılanı`,sidebar:`Açılışta kenar çubuğu`,sidebarDescription:`Kanvil bir sonraki açılışında geçerli olur.`,sidebarLast:`Son bırakıldığı gibi`,sidebarExpanded:`Genişletilmiş`,sidebarCollapsed:`Daraltılmış`,ticketLists:`Talep listeleri`,reset:`Tercihleri sıfırla`,resetDescription:`Bu tarayıcıdaki seçimleri varsayılanlarına döndürür.`,resetDone:`Tercihler sıfırlandı`},notifications:{title:`Bildirimler`,inbox:`Gelen kutusu`,inboxDescription:`Takip ettiğiniz taleplerin güncellemeleri Kanvil’de görünür.`,inboxSwitch:`Gelen kutusunda abone olunan talep güncellemeleri`,push:`Anlık bildirimler`,pushDescription:`Güncellemeleri kaydettiğiniz cihazlara gönderin.`,pushUnavailable:`Bu sunucuda anlık bildirim teslimi etkin değil.`,pushSwitch:`Kayıtlı cihazlarda anlık bildirimler`,categories:`Kategoriler`,categorySwitch:`{{label}} bildirimleri`,reminder:`Bitiş yaklaşıyor hatırlatıcısı`,reminderDescription:`Takip edilen talebin bitiş tarihinden ne kadar önce.`,reminderUnit:`Hatırlatıcı birimi`,reminderAmount:`Hatırlatıcı miktarı`,unit:{minutes:`Dakika`,hours:`Saat`,days:`Gün`,weeks:`Hafta`}},layout:{nav:`Ayarlar`,section:`Ayarlar bölümü`,nested:`{{parent}} · {{child}}`,name:`Ad`,description:`Açıklama`,descriptionPlaceholder:`Açıklama ekleyin`,noDescription:`Açıklama yok`,stale:`Bu başka bir yerde değişti. İptal edip yeniden başlayın.`},profile:{title:`Profil`,displayName:`Görünen ad`,edit:`Profili düzenle`,changePhoto:`Fotoğrafı değiştir`,removePhoto:`Fotoğrafı kaldır`,photoFile:`Profil fotoğrafı dosyası`,photoUpdated:`Fotoğraf güncellendi`,photoRemoved:`Fotoğraf kaldırıldı`,saved:`Profil kaydedildi`},credentials:{global:`Genel`,globalDescription:`Gelecekte erişim kazanacaklarınız dahil hesabınızın erişebildiği tüm projelere ve çalışma alanlarına erişin.`,title:`API anahtarları`,description:`Betikleri, entegrasyonları ve ajanları iptal edebileceğiniz erişimle bağlayın.`,create:`API anahtarı oluştur`,creating:`Oluşturuluyor…`,created:`API anahtarı oluşturuldu`,name:`Ad`,access:`Erişim`,projects:`Projeler`,expires:`Bitiş`,actions:`İşlemler`,unavailableProject:`Kullanılamayan proje`,untitled:`Adsız anahtar`,expired:`Süresi doldu`,disabled:`Devre dışı`,custom:`Özel`,noProjects:`Proje erişimi yok`,never:`Hiçbir zaman`,revoke:`API anahtarını iptal et`,revokeNamed:`{{name}} iptal edilsin mi? Bunu kullanan bağlantılar erişimini hemen kaybeder.`,revokeUnnamed:`Bu API anahtarı iptal edilsin mi? Bunu kullanan bağlantılar erişimini hemen kaybeder.`,empty:`API anahtarı yok`,emptyDescription:`Bir betik, entegrasyon veya ajanın projelerinize erişmesi gerektiğinde bir anahtar oluşturun.`,copyNow:`Bu anahtarı şimdi kopyalayın. Bir daha göremeyeceksiniz.`,newKey:`Yeni API anahtarı`,copy:`API anahtarını kopyala`,noProjectTitle:`Önce bir proje seçin`,noProjectDescription:`API anahtarlarının en az bir projeye erişimi olmalıdır.`,goToProjects:`Projelere git`,keyName:`Anahtar adı`,keyNamePlaceholder:`ör. Sürüm otomasyonu`,projectAccess:`Proje erişimi`,findProject:`Proje bul`,projectDescription:`{{key}} · {{workspace}}`,workspace:`Çalışma alanı`,noMatches:`Eşleşen proje yok`,roleLimit:`Mevcut proje rolünüz bu anahtarın yapabileceklerini yine sınırlar.`,accessLevel:`Erişim düzeyi`,preset:{read:`Salt okunur`,write:`Okuma ve yazma`,automation:`Okuma, yazma ve iş üstlenme`,custom:`Özel izinler`},permission:{intake:{name:`Rapor gönder`,description:`Yalnızca karantinadaki biletleri oluşturur ve onlara dosya ekler. Biletleri okuyamaz veya düzenleyemez. Tek başına kullanın.`},read:{name:`Talepleri okuma`,description:`Projeleri, talepleri, yorumları ve ekleri görüntüleme.`},write:{name:`Talepleri düzenleme`,description:`Talep, yorum ve ek oluşturma ve güncelleme.`},claim:{name:`İş üstlenme`,description:`Talep sahipliğini üstlenme, yenileme ve bırakma.`},admin:{name:`Projeleri ve çalışma alanlarını yönet`,description:`Rolünüzün izin verdiği proje ve çalışma alanı ayarlarını ve üyeliklerini değiştirin.`}},expiry:{7:`7 gün`,30:`30 gün`,90:`90 gün`,365:`1 yıl`,custom:`Özel tarih`,never:`Süresiz`},expiresOn:`Bitiş tarihi`,neverDescription:`Anahtar siz silene kadar çalışır.`},calendarFeeds:{title:`Takvim akışları`,new:`Yeni takvim akışı`,created:`Takvim akışı oluşturuldu`,create:`Akış oluştur`,adminOnly:`Takvim akışlarını proje yöneticileri paylaşır ve iptal eder.`,labels:`Etiketler`,everyLabel:`Tüm etiketler`,stopped:`· Durduruldu: oluşturan kişinin artık erişimi yok`,revoke:`İptal et: {{name}}`,revokeDescription:`{{name}} akışına abone olan takvimler hemen güncellenmeyi bırakır. Talepler değişmeden kalır.`,revoked:`Takvim akışı iptal edildi`,empty:`Takvim akışı yok`,copyNow:`Bu bağlantıyı şimdi bir takvim uygulamasına kopyalayın. Yalnızca bir kez gösterilir ve bağlantıya sahip olan herkes paylaşılan talepleri okuyabilir.`,link:`Akış bağlantısı`,name:`Akış adı`,onlyLabels:`Yalnızca bu etiketlere sahip talepler`,explanation:`Akış, başlangıç veya bitiş tarihi olan açık ve arşivlenmemiş talepleri {{zone}} saat diliminde tüm gün etkinlikleri olarak listeler. Bağlantıya sahip olan herkes anahtarlarını, başlıklarını, durumlarını, önceliklerini ve tarihlerini görür.`},project:{title:`Proje ayarları`,edit:`Projeyi düzenle`,copyPrefix:`Talep önekini kopyala`,saved:`Proje kaydedildi`,noOpenTickets:`Açık talep yok`,openTickets_one:`{{count, number}} açık talep`,openTickets_other:`{{count, number}} açık talep`,overdueTickets_one:`· {{count, number}} gecikmiş`,overdueTickets_other:`· {{count, number}} gecikmiş`,created:`· Oluşturulma: <time/>`,access:`Proje erişimi`,accessWorkspace:`Çalışma alanı üyeleri erişimi çalışma alanı rollerinden devralır.`,accessPrivate:`Bu projeyi yalnızca eklediğiniz üyeler ve çalışma alanı yöneticileri görebilir.`,accessUpdated:`Proje erişimi güncellendi`,visibility:{workspace:`Çalışma alanındaki herkes`,private:`Yalnızca proje üyeleri`},workspace:`Çalışma alanı`,workspaceSettings:`Çalışma alanı ayarları`,prefix:`Talep öneki`,prefixDescription:`Önceki önekler ve talep anahtarları değişiklikten sonra da çalışır.`,changePrefix:`Öneki değiştir`,changePrefixTitle:`Talep önekini değiştir`,changePrefixDescription:`{{name}} içindeki her talep yeni öneki alır ve numarasını korur.`,changing:`Değiştiriliyor…`,prefixChanged:`Talepler artık {{key}} kullanıyor`,publicLink:`Herkese açık bağlantı`,publicDisclosure:`Bağlantıya sahip olan herkes bu projedeki arşivlenmemiş her talebin başlığını, açıklamasını, kabul kriterlerini, durumunu, önceliğini, türünü, zorluğunu, etiketlerini, kapsamlarını, tarihlerini ve diğer taleplere bağlantılarını okuyabilir. Kişiler, yorumlar, etkinlik, ekler, kanıtlar ve üstlenmeler gizli kalır.`,publicOn:`Herkese açık bağlantı açık`,publicOff:`Herkese açık bağlantı kapalı`,off:`Kapalı`,copyPublicLink:`Herkese açık bağlantıyı kopyala`,openPublic:`Herkese açık görünümü aç`,stopSharing:`Paylaşımı durdur`,share:`Herkese açık paylaş`,background:`Arka plan`,backgroundDescription:`Bu projenin talep listesinin ve panosunun arkasında gösterilir.`,backgroundUpdated:`Arka plan güncellendi`,backgroundRemoved:`Arka plan kaldırıldı`,currentBackground:`Mevcut arka plan`,uploading:`Yükleniyor…`,replace:`Değiştir`,upload:`Görsel yükle`,backgroundFile:`Proje arka plan dosyası`},tickets_one:`{{count, number}} talep`,tickets_other:`{{count, number}} talep`,moveUp:`{{name}} yukarı taşı`,moveDown:`{{name}} aşağı taşı`,workflow:{title:`İş akışı`,new:`Yeni durum`,edit:`Durumu düzenle`,editNamed:`{{name}} durumunu düzenle`,deleteNamed:`{{name}} durumunu sil`,onlyState:`{{name}}, tek {{category}} durumu`,saved:`Durum kaydedildi`,name:`Durum adı`,category:`Kategori`,color:`Durum rengi`,categoryChange:`Talepleri {{status}} durumuna geçer.`,save:`Durumu kaydet`,delete:`Durumu sil`,deleteTitle:`Sil: {{name}}`,deleted:`Durum silindi`,reassign_one:`{{count, number}} talebi şuraya taşı:`,reassign_other:`{{count, number}} talebi şuraya taşı:`},labels:{title:`Etiketler`,search:`Etiketlerde ara`,new:`Yeni etiket`,edit:`Etiketi düzenle`,workspace:`Çalışma alanı`,editNamed:`{{name}} etiketini düzenle`,deleteNamed:`{{name}} etiketini sil`,deleteUsed_one:`{{name}}, arşivlenmiş talepler dahil {{count, number}} talepten kaldırılsın mı? Bu etiketi kullanan kayıtlı görünümlerin etiket filtresi kaldırılır.`,deleteUsed_other:`{{name}}, arşivlenmiş talepler dahil {{count, number}} talepten kaldırılsın mı? Bu etiketi kullanan kayıtlı görünümlerin etiket filtresi kaldırılır.`,deleteUsedShared_one:`{{name}}, arşivlenmiş talepler dahil tüm projelerdeki {{count, number}} talepten kaldırılsın mı? Bu etiketi kullanan kayıtlı görünümlerin etiket filtresi kaldırılır.`,deleteUsedShared_other:`{{name}}, arşivlenmiş talepler dahil tüm projelerdeki {{count, number}} talepten kaldırılsın mı? Bu etiketi kullanan kayıtlı görünümlerin etiket filtresi kaldırılır.`,deleteUnused:`Kullanılmayan {{name}} etiketi silinsin mi? Bunu kullanan kayıtlı görünümlerin etiket filtresi kaldırılır.`,deleted:`Etiket silindi`,noMatches:`Eşleşen etiket yok`,empty:`Henüz etiket yok`,saved:`Etiket kaydedildi`,name:`Etiket adı`,color:`Etiket rengi`,rename:`Yeniden adlandırma bu etiketi taleplerde ve kayıtlı görünümlerde günceller.`,renameShared:`Yeniden adlandırma bu etiketi tüm projelerdeki taleplerde ve kayıtlı görünümlerde günceller.`,adopt:`Proje etiketlerini benimse`,adoptDescription:`{{projects}} içinde tanımlı. Talepleri etiketi korur ve bu rengi alır.`,save:`Etiketi kaydet`},fields:{title:`Alanlar`,new:`Yeni alan`,edit:`Alanı düzenle`,editNamed:`{{name}} alanını düzenle`,deleteNamed:`{{name}} alanını sil`,deleteUsed_one:`{{name}} silinsin ve değerleri arşivlenmiş talepler dahil {{count, number}} talepten kaldırılsın mı? Kayıtlı görünümler bu alandaki filtrelerini kaybeder.`,deleteUsed_other:`{{name}} silinsin ve değerleri arşivlenmiş talepler dahil {{count, number}} talepten kaldırılsın mı? Kayıtlı görünümler bu alandaki filtrelerini kaybeder.`,deleteUnused:`Kullanılmayan {{name}} alanı silinsin mi? Kayıtlı görünümler bu alandaki filtrelerini kaybeder.`,deleted:`Alan silindi`,empty:`Henüz alan yok`,saved:`Alan kaydedildi`,required:`Zorunlu`,requiredDescription:`Yeni talepler bir değer gerektirir.`,defaultValue:`Varsayılan: {{value}}`,default:`Varsayılan`,name:`Alan adı`,type:`Tür`,options:`Seçenekler`,option:`Seçenek {{number}}`,optionInline:`seçenek {{number}}`,optionColor:`{{name}} rengi`,removeOption:`Kaldır: {{name}}`,addOption:`Seçenek ekle`,reassign:`{{name}} olan talepler`,clearValue:`Değeri temizle`,moveTo:`{{name}} seçeneğine taşı`,save:`Alanı kaydet`},lifecycle:{archivedToast:`Proje arşivlendi`,restoredToast:`Proje geri yüklendi`,archivedNotice:`Arşivlenme: <time/> · salt okunur`,restore:`Geri yükle`,archive:`Arşivle`,archivedDescription:`Arşivlenme: <time/>. Talepleri salt okunurdur ve listelerde, aramada, İşlerim’de, takvim akışlarında ve ajan kuyruklarında yer almaz.`,archiveDescription:`Projeyi listelerden, aramadan, İşlerim’den, takvim akışlarından ve ajan kuyruklarından gizler ve taleplerini salt okunur yapar. Geçmiş korunur.`,archiveProject:`Projeyi arşivle`,archiveConfirm:`{{name}}, geri yüklenene kadar proje listelerinden ve ajan kuyruklarından çıkar. Üstlenilmiş talepler önce bırakılmalıdır.`,blocker:`{{message}}: {{tickets}}`,row:{tickets:`Talepler`,losesAccess:`Erişimi kaybeder`,gainsAccess:`Erişim kazanır`,labelsCopied:`Kopyalanan etiketler`,labelsMerged:`Birleştirilen etiketler`,followsRemoved:`Kaldırılan takipler`,invitations:`Davetler`,comments:`Yorumlar`,files:`Dosyalar`,kept:`Korunan`,projects:`Projeler`,members:`Üyeler`,sharedLabels:`Paylaşılan etiketler`,signIn:`Oturum açma`,sessions:`Oturumlar`,credentials:`Kimlik bilgileri`,devices:`Cihazlar`,access:`Erişim`,claims:`Üstlenmeler`,imports:`İçe aktarmalar`,profile:`Profil`},transferTickets_one:`{{count, number}}, anahtarlarını ve bağlantılarını koruyarak`,transferTickets_other:`{{count, number}}, anahtarlarını ve bağlantılarını koruyarak`,noOne:`Kimse`,transferInvitations_one:`{{count, number}} bekleyen davetten proje çıkarılır`,transferInvitations_other:`{{count, number}} bekleyen davetten proje çıkarılır`,files_one:`{{count, number}} · {{size}}`,files_other:`{{count, number}} · {{size}}`,keptProject_one:`{{count, number}} etkinlik kaydı ve {{key}} öneki`,keptProject_other:`{{count, number}} etkinlik kaydı ve {{key}} öneki`,keptWorkspace_one:`{{count, number}} etkinlik kaydı ve {{slug}} URL anahtarı`,keptWorkspace_other:`{{count, number}} etkinlik kaydı ve {{slug}} URL anahtarı`,archivedProject:`arşivlendi`,membersLoseAccess_one:`{{count, number}} kişi erişimi kaybeder; hesabı kalır`,membersLoseAccess_other:`{{count, number}} kişi erişimi kaybeder; hesapları kalır`,pendingInvitations_one:`{{count, number}} bekleyen`,pendingInvitations_other:`{{count, number}} bekleyen`,move:`Taşı`,moveTitle:`Taşı: {{name}}`,moved:`{{name}} alanına taşındı`,movedUnnamed:`Çalışma alanına taşındı`,destination:`Hedef çalışma alanı`,moveProject:`Projeyi taşı`,moving:`Taşınıyor…`,export:`Dışa aktar`,exportDescription:`Talepler; iş akışı, alanlar, etiketler, ilişkiler, yorumlar, kanıtlar ve bağlantılarıyla birlikte sürümlü JSON olarak. Ekler ve etkinlik geçmişi burada kalır.`,exporting:`Dışa aktarılıyor…`,exportJson:`JSON olarak dışa aktar`,delete:`Sil`,deleteTitle:`Sil: {{name}}`,deleted:`{{name}} silindi`,typeToConfirm:`Onaylamak için {{value}} yazın`,deleting:`Siliniyor…`,deleteProject:`Projeyi sil`,deleteProjectDescription:`Talepleri, yorumları ve dosyaları kalıcı olarak kaldırır. Etkinlik geçmişi kalır ve {{key}} asla yeniden kullanılmaz.`,signInAgain:`Yeniden oturum aç`,deleteWorkspace:`Çalışma alanını sil`,deleteWorkspaceDescription:`Çalışma alanındaki her projeyi talepleri, yorumları ve dosyalarıyla birlikte kalıcı olarak siler ve üyelerini kaldırır. Hesaplar ve etkinlik geçmişi kalır.`,noSignInMethods:`Bağlı oturum açma yöntemi yok`,sessions_one:`{{count, number}} oturum kapatıldı`,sessions_other:`{{count, number}} oturum kapatıldı`,credentials_one:`{{count, number}} API anahtarı veya uygulama bağlantısı iptal edildi`,credentials_other:`{{count, number}} API anahtarı veya uygulama bağlantısı iptal edildi`,devices_one:`{{count, number}} cihaz veya bildirim kanalı kaldırıldı`,devices_other:`{{count, number}} cihaz veya bildirim kanalı kaldırıldı`,workspaceCount_one:`{{count, number}} çalışma alanı`,workspaceCount_other:`{{count, number}} çalışma alanı`,directProjectCount_one:`{{count, number}} doğrudan proje`,directProjectCount_other:`{{count, number}} doğrudan proje`,accessWorkspaces:`{{workspaces}} kaldırıldı`,accessBoth:`{{workspaces}} ve {{projects}} kaldırıldı`,claims_one:`{{count, number}} üstlenme bırakıldı`,claims_other:`{{count, number}} üstlenme bırakıldı`,imports_one:`{{count, number}} içe aktarma iptal edildi`,imports_other:`{{count, number}} içe aktarma iptal edildi`,profileErased:`Ad, e-posta ve fotoğraf silindi`,commentCount_one:`{{count, number}} yorum`,commentCount_other:`{{count, number}} yorum`,activityCount_one:`{{count, number}} etkinlik kaydı`,activityCount_other:`{{count, number}} etkinlik kaydı`,keptAccount:`{{tickets}}, {{comments}} ve {{events}} “{{name}}” olarak gösterilir`,deleteAccount:`Hesabı sil`,deleteOwnAccount:`Oturum açma bilgilerinizi, oturumlarınızı, anahtarlarınızı, cihazlarınızı, üyeliklerinizi ve kişisel bilgilerinizi kalıcı olarak kaldırır. Talepler, yorumlar ve etkinlik kalır ve “{{name}}” olarak gösterilir.`,deleteOtherAccount:`Bu hesabın oturum açma bilgilerini, oturumlarını, anahtarlarını, cihazlarını, üyeliklerini ve kişisel bilgilerini kalıcı olarak kaldırır. Talepler, yorumlar ve etkinlik kalır ve “{{name}}” olarak gösterilir.`},icon:{change:`Simgeyi değiştir`,title:`Proje simgesi`,library:`Simge kitaplığı`,upload:`Görsel yükle`,search:`Simgelerde ara`,searchPlaceholder:`Simge ara…`,color:`Simge rengi`,choose:`Seç: {{name}}`,noMatches:`Eşleşen simge yok`,showMore:`Daha fazla simge göster`,uploading:`Yükleniyor…`,chooseImage:`Görsel seç`,formats:`PNG, JPEG veya WebP · en fazla 10 MB`,file:`Proje simgesi dosyası`,reset:`Simgeyi sıfırla`},createProject:{title:`Yeni proje`,inWorkspace:`Çalışma alanı: {{name}}`,everyoneLabel:`Bu çalışma alanındaki herkes`,name:`Proje adı`,namePlaceholder:`Mobil uygulama`,create:`Proje oluştur`},workspace:{title:`Çalışma alanı ayarları`,owner:`Sahip`,noOwner:`Sahip yok. Bir sunucu yöneticisi atayabilir.`,transfer:`Sahipliği devret`,transferring:`Devrediliyor…`,transferred:`{{workspace}} artık {{name}} kişisine ait`,newOwner:`Yeni sahip`,noEligible:`Sahiplik etkin bir çalışma alanı yöneticisine geçer. Önce başka bir üyeyi yönetici yapın.`,chosenCan:`{{name}} daha sonra çalışma alanını devredebilir veya silebilir.`,newOwnerCan:`Yeni sahip çalışma alanını devredebilir veya silebilir.`,ownerStays:`{{name}} yönetici olarak kalır.`,unavailable:`Çalışma alanı kullanılamıyor`,backToProjects:`Projelere dön`,name:`Çalışma alanı adı`,edit:`Çalışma alanını düzenle`,copyKey:`Çalışma alanı anahtarını kopyala`,saved:`Çalışma alanı kaydedildi`,projects:`Projeler`,projectCount_one:`Bu çalışma alanında erişebildiğiniz {{count, number}} proje.`,projectCount_other:`Bu çalışma alanında erişebildiğiniz {{count, number}} proje.`,viewProjects:`Projeleri görüntüle`,members:`Üyeler`,membersDescription:`Çalışma alanı rolleri, çalışma alanı erişimi kullanan projelerde geçerlidir.`,manageMembers:`Üyeleri yönet`},members:{title:`Üyeler`,customRole:`Özel rol`,search:`Üyelerde ara`,searchPlaceholder:`Ad veya e-posta…`,add:`Üye ekle`,added:`Üye eklendi`,workspaceAccess:`Çalışma alanı erişimi`,owner:`Sahip`,roleFor:`Rol: {{name}}`,useWorkspaceAccess:`Çalışma alanı erişimini kullan`,remove:`Üyeyi kaldır`,removeFromWorkspace:`{{name}} bu çalışma alanından ve tüm projelerinden kaldırılsın mı?`,restoreAccess:`{{name}} için {{role}} çalışma alanı erişimi geri yüklensin mi?`,removeFromProject:`{{name}} kişisinin proje erişimi kaldırılsın mı?`,noMatches:`Eşleşen üye yok`,empty:`Üye yok`,projectRole:`Proje rolü`,workspaceRole:`Çalışma alanı rolü`},invitations:{title:`Davetler`,invite:`E-postayla davet et`,removedProjects:`Kaldırılan projeler`,wholeWorkspace:`Tüm çalışma alanı`,selectedProjects:`Seçili projeler`,expired:`Süresi doldu`,expires:`Bitiş: <time/>`,resend:`Daveti yeniden gönder: {{email}}`,revoke:`Daveti iptal et`,revokeDescription:`{{email}} adresine gönderilen bağlantı çalışmayı bırakacak.`,revoked:`Davet iptal edildi`,empty:`Bekleyen davet yok`,email:`E-posta`,role:`Rol`,access:`Erişim`,projects:`Projeler`,noProjects:`Bu çalışma alanında proje yok.`,linkExpires:`Bağlantı bitişi`,inDays_one:`{{count, number}} gün içinde`,inDays_other:`{{count, number}} gün içinde`,submit:`Davet et`,link:`Davet bağlantısı`,copyLink:`Davet bağlantısını kopyala`,emailed:`{{email}} adresine e-postayla gönderildi. Bağlantı o adres için bir kez çalışır.`,notEmailed:`Bu sunucuda e-posta yapılandırılmamış. Bu bağlantıyı {{email}} adresine gönderin; o adres için bir kez çalışır.`,notEmailedUnknown:`Bu sunucuda e-posta yapılandırılmamış. Bu bağlantıyı alıcıya gönderin; o adres için bir kez çalışır.`},workspaces:{title:`Çalışma alanları`,search:`Çalışma alanlarında ara`,searchPlaceholder:`Ad veya URL anahtarı…`,noMatches:`Eşleşen çalışma alanı yok`,empty:`Çalışma alanı yok`,workspace:`Çalışma alanı`,administrators:`Yöneticiler`,members:`Üyeler`,projects:`Projeler`,created:`Oluşturulma`,actions:`İşlemler`,noAdministrator:`Yönetici yok`,manage:`Yönet: {{name}}`,pagerNoun:`çalışma alanları`,private:`Özel`,noProjects:`Proje yok`},roles:{title:`Roller`,new:`Yeni rol`,edit:`Rolü düzenle`,builtIn:`Yerleşik`,readOnly:`Okuma dışında işlem yok`,memberships_one:`{{count, number}} üyelik`,memberships_other:`{{count, number}} üyelik`,editNamed:`{{name}} rolünü düzenle`,deleteNamed:`{{name}} rolünü sil`,deleteUnused:`Kullanılmayan {{name}} rolü silinsin mi?`,deleted:`Rol silindi`,empty:`Rol yok`,saved:`Rol kaydedildi`,name:`Rol adı`,actions:`İşlemler`,everyoneReads:`Her üye erişebildiği projeleri okuyabilir.`,changesApply_one:`Değişiklikler bu role sahip {{count, number}} üyeliğe hemen uygulanır.`,changesApply_other:`Değişiklikler bu role sahip {{count, number}} üyeliğe hemen uygulanır.`,save:`Rolü kaydet`,delete:`Rolü sil`,reassignDescription_one:`{{count, number}} üyelik {{name}} rolüne sahip. Taşınacakları rolü seçin.`,reassignDescription_other:`{{count, number}} üyelik {{name}} rolüne sahip. Taşınacakları rolü seçin.`,moveTo:`Üyeleri şu role taşı`},theme:{mode:{light:`Açık`,dark:`Koyu`,system:`Sistem`},aligned:`Eşleşik`,hexColor:`Altı haneli bir hex rengi kullanın`,contrast:{light:`Açık temanın metin kontrastını en az 4.5:1 yapın.`,dark:`Koyu temanın metin kontrastını en az 4.5:1 yapın.`},fileTooLarge:`Tema dosyaları 100 KB’tan küçük olmalıdır.`,tooMany:`En fazla 50 özel tema tutun.`},appearance:{colorScheme:`Renk şeması`,theme:`Tema`,themes:`Temalar`,colorTheme:`Renk teması`,search:`Temalarda ara`,searchPlaceholder:`Tema ara…`,create:`Tema oluştur`,add:`Tema ekle`,importFile:`Tema dosyasını içe aktar`,useMode:{light:`{{name}} açık modunu kullan`,dark:`{{name}} koyu modunu kullan`},modeOnly:{light:`Yalnızca açık modda kullan`,dark:`Yalnızca koyu modda kullan`},copyName:`{{name}} kopyası`,duplicate:`Çoğalt: {{name}}`,edit:`Düzenle: {{name}}`,export:`Dışa aktar: {{name}}`,delete:`Sil: {{name}}`,deleteDescription:`{{name}} bu tarayıcıdan kaldırılsın mı? Bunu kullanan açık veya koyu görünümler temel temanıza döner.`,noMatches:`Eşleşen tema yok`,customTheme:`Özel tema`,name:`Tema adı`,paletteColor:`{{mode}} {{color, lowercase}}`,color:{background:`Arka plan`,foreground:`Metin`,sidebar:`Kenar çubuğu`,primary:`Vurgu`,primaryForeground:`Vurgu metni`},save:`Temayı kaydet`},color:{swatch:`{{color}} {{label, lowercase}}`,removeCustom:`{{hex}} rengini özel renklerden kaldır`,custom:`Özel renk`,default:`varsayılan`,red:`kırmızı`,orange:`turuncu`,amber:`kehribar`,yellow:`sarı`,lime:`limon yeşili`,green:`yeşil`,emerald:`zümrüt`,teal:`deniz mavisi`,cyan:`camgöbeği`,sky:`gök mavisi`,blue:`mavi`,indigo:`çivit`,violet:`menekşe`,purple:`mor`,fuchsia:`fuşya`,pink:`pembe`,rose:`gül`,gray:`gri`}},admin:{instance:{title:`Yönetim`,heading:`Sunucu`,edit:`Sunucuyu düzenle`,name:`Ad`,description:`Açıklama`,noDescription:`Açıklama yok`,version:`Uygulama sürümü`,publicUrl:`Herkese açık URL`,provider:{local:`Yerel PostgreSQL depolama`,s3:`S3 uyumlu nesne depolama`,postgres:`Yerleşik PostgreSQL`,elasticsearch:`Elasticsearch uyumlu arama`},section:{storage:`Dosya depolama`,search:`Talep arama`,events:`Olay teslimi`},viewConfiguration:`Yapılandırmayı görüntüle`,configure:{storage:`Depolamayı yapılandır`,search:`Aramayı yapılandır`,events:`Olay teslimini yapılandır`},providerTitle:`Sağlayıcı`,deploymentManaged:`Dağıtım tarafından yönetiliyor`,instanceManaged:`Sunucu tarafından yönetiliyor`,transfers:`Aktarımlar`,indexStatus:`Dizin durumu`,connection:`Bağlantı`,transfersS3:`Dosyalar yerel olarak kaydedildikten sonra nesne depolamaya taşınır.`,transfersLocal:`Yeni dosyalar PostgreSQL’de saklanır.`,searchBuiltIn:`Arama doğrudan PostgreSQL’de çalışır.`,searchIndexed:`Talep değişiklikleri arka planda dizinlenir.`,eventsConnection:`Bildirimler tüketicileri uyandırır; PostgreSQL yeniden oynatma geçmişini tutar.`,builtIn:`Yerleşik`,connected:`Bağlı`,upToDate:`Güncel`,status:{ready:`hazır`,transferring:`aktarılıyor`,indexing:`dizinleniyor`,connecting:`bağlanıyor`,unavailable:`kullanılamıyor`},pendingTransfers:`Bekleyen aktarımlar`,pendingRemain:`Bu dosyalar aktarım tamamlanana kadar PostgreSQL’den erişilebilir kalır.`,noPending:`Aktarım bekleyen dosya yok.`,bucket:`Bucket`,storageEndpoint:`Depolama uç noktası`,backup:`Yedekleme`,backupBuckets:`PostgreSQL’i ve başvurulan her nesne depolama bucket’ını yedekleyin.`,backupDatabase:`Dosya içerikleri PostgreSQL yedeğinize dahildir.`,fallback:`Yedek çözüm`,fallbackDescription:`Harici dizin geride veya çevrimdışıyken PostgreSQL araması kullanılabilir.`,searchEndpoint:`Arama uç noktası`,index:`Dizin`,delivery:`Teslim`,deliveryDescription:`Kalıcı olaylar ve yeniden oynatma PostgreSQL’de kalır. İsteğe bağlı bir aracı uyandırmaları dağıtır.`,brokerEndpoint:`Aracı uç noktası`,exchange:`Exchange`},configure:{storageTitle:`Dosya depolamayı yapılandır`,searchTitle:`Talep aramayı yapılandır`,eventsTitle:`Olay teslimini yapılandır`,saved:`Sunucu ayarları kaydedildi`,instanceName:`Sunucu adı`,instanceDescription:`Sunucu açıklaması`,publicUrlSource:`Herkese açık URL, dağıtımınızdaki KANVIL_URL ile belirlenir.`,storageIntro:`Ekler ve profil fotoğrafları bu sağlayıcıyı kullanır. Mevcut dosyalar özgün depolama konumlarını korur.`,storageProvider:`Depolama sağlayıcı`,localDescription:`Dosya içerikleri yerel veritabanında saklanır ve PostgreSQL yedeklerine dahil edilir.`,s3Endpoint:`S3 uç noktası`,s3EndpointHint:`Amazon S3 için uç noktayı boş bırakın.`,region:`Bölge`,prefix:`Nesne anahtarı öneki`,accessKeyId:`Erişim anahtarı kimliği`,secretAccessKey:`Gizli erişim anahtarı`,savedSecret:`Kaydedildi. Korumak için boş bırakın.`,deploymentCredentials:`Belirtilmezse dağıtım kimlik bilgileri`,pathStyle:`Yol stili bucket URL’leri kullan`,storageVerified:`Depolama bağlantısı doğrulandı`,testStorage:`Depolama bağlantısını test et`,filesWaiting_one:`{{count, number}} dosya aktarım bekliyor. Bekleyen dosyalar PostgreSQL’den okunabilir kalır.`,filesWaiting_other:`{{count, number}} dosya aktarım bekliyor. Bekleyen dosyalar PostgreSQL’den okunabilir kalır.`,transfersComplete:`Tüm dosya aktarımları tamamlandı.`,storageDeployment:`Depolama, KANVIL_STORAGE_PROVIDER ve S3_* dağıtım değişkenleriyle yapılandırılır.`,locations:`Mevcut depolama konumları`,locationFiles_one:`{{count, number}} dosya`,locationFiles_other:`{{count, number}} dosya`,cleanUp:`Kullanılmayan dosyaları temizle`,cleanUpConfirm:`Başvurulmayan dosyalar ve bir günden eski başarısız yüklemeler kaldırılsın mı? Taleplere veya profillere ekli dosyalar korunur.`,cleanUpNote:`Temizlik otomatik olarak da çalışır. S3 nesneleri, veritabanı yedeğinin yanında bir bucket yedeği gerektirir.`,searchProvider:`Arama sağlayıcı`,searchBuiltIn:`Yerleşik PostgreSQL araması`,indexName:`Kanvil dizin adı`,searchAuthentication:`Arama kimlik doğrulaması`,noAuthentication:`Kimlik doğrulama yok`,apiKey:`API anahtarı`,basic:`Kullanıcı adı ve parola`,searchApiKey:`Arama API anahtarı`,optional:`İsteğe bağlı`,searchUsername:`Arama kullanıcı adı`,searchPassword:`Arama parolası`,searchVerified:`Arama bağlantısı doğrulandı`,testSearch:`Arama bağlantısını test et`,rebuildQueued:`Arama yeniden oluşturma sıraya alındı`,rebuild:`Dizini yeniden oluştur`,searchNote:`İzinler ve filtreler için PostgreSQL yetkili kaynak olarak kalır. Harici dizin güncellenirken veya kullanılamazken arama PostgreSQL’e geri döner.`,brokerProvider:`Olay teslimi sağlayıcı`,brokerBuiltIn:`Yerleşik PostgreSQL bildirimleri`,rabbitUrl:`RabbitMQ bağlantı URL’si`,savedBrokerEndpoint:`Kayıtlı aracı uç noktası`,rabbitExchange:`RabbitMQ exchange`,brokerVerified:`RabbitMQ teslimi doğrulandı`,testBroker:`Aracı bağlantısını test et`,brokerNote:`RabbitMQ, işlenmiş olay uyandırmalarını Kanvil sunucularına dağıtır ve arka plan çalışanlarını uyandırır. PostgreSQL kalıcı olayları ve bekleyen işleri tutar, aracı kullanılamadığında uyandırmaları kendisi iletir.`,brokerDeployment:`Olay teslimi, KANVIL_BROKER_PROVIDER ve RABBITMQ_* dağıtım değişkenleriyle yapılandırılır.`,save:`Sunucu ayarlarını kaydet`},authentication:{title:`Kimlik doğrulama`,saved:`Kimlik doğrulama kaydedildi`,emailPassword:`E-posta ve parolayla oturum açma`,emailPasswordDescription:`E-postayla gönderilen oturum açma kodlarını ve parola sıfırlamayı içerir.`,ssoProvision:`SSO’dan kullanıcıları otomatik oluştur`,ssoProvisionDescription:`Yeni SSO kullanıcılarının davet edilene kadar çalışma alanı veya proje erişimi yoktur.`,registration:`Herkese açık e-posta kaydı`,registrationClosed:`Kapalı`,identityProvider:`Kimlik sağlayıcı`,notConfigured:`Yapılandırılmadı`,linkedProviders:`Bağlı hesap sağlayıcıları`,linkedProvidersDescription:`Yalnızca kendilerini bağlamış hesaplarda oturum açar; asla hesap oluşturmaz.`,save:`Kimlik doğrulamayı kaydet`,discoveryUrl:`OIDC keşif URL’si`,clientId:`OIDC istemci kimliği`,oidcSetup:`Dağıtımınızda OIDC_DISCOVERY_URL, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET ve OIDC_NAME değerlerini ya da GITHUB_, GOOGLE_ veya DISCORD_ için bir CLIENT_ID ve CLIENT_SECRET çiftini yapılandırıp Kanvil’i yeniden başlatın. Sağlayıcı gizli anahtarları tarayıcıya asla gönderilmez.`,consumers:`Tüketici arayüzleri`,mcpEndpoint:`MCP uç noktası`,eventFeed:`Gerçek zamanlı olay akışı`,openApi:`Open API belirtimi`},users:{title:`Kullanıcılar`,search:`Kullanıcılarda ara`,searchPlaceholder:`Ad veya e-posta…`,new:`Yeni kullanıcı`,roleFilter:`Sunucu rolü filtresi`,allRoles:`Tüm roller`,administrators:`Yöneticiler`,users:`Kullanıcılar`,statusFilter:`Hesap durumu filtresi`,allAccounts:`Tüm hesaplar`,active:`Etkin`,disabled:`Devre dışı`,noMatches:`Eşleşen kullanıcı yok`,empty:`Kullanıcı yok`,user:`Kullanıcı`,role:`Rol`,status:`Durum`,joined:`Katılma`,actions:`İşlemler`,administrator:`Yönetici`,manage:`Yönet: {{name}}`,pagerNoun:`kullanıcılar`,create:`Hesap oluştur`,creating:`Oluşturuluyor…`,created:`{{email}} oluşturuldu`,name:`Ad`,email:`E-posta`,initialPassword:`İlk parola`,instanceRole:`Sunucu rolü`},account:{details:`Hesap ayrıntıları`,joined:`Katılma: {{date}}`,edit:`Hesabı düzenle`,instanceRole:`Sunucu rolü`,adminDescription:`Her çalışma alanını, hesabı ve dağıtım ayarını yönetebilir.`,userDescription:`Erişimi çalışma alanı ve proje rolleri belirler.`,changeRole:`Rolü değiştir`,changeRoleTitle:`Sunucu rolünü değiştir`,signInMethods:`Oturum açma yöntemleri`,setPassword:`Yerel parola belirle`,activeSessions:`Etkin oturumlar`,sessions_one:`{{count, number}} oturum`,sessions_other:`{{count, number}} oturum`,revokeSessions:`Oturumları iptal et`,revokeConfirm:`{{name}} tüm cihazlarda oturumdan çıkarılsın mı? API anahtarları etkin kalır.`,sessionsRevoked:`Oturumlar iptal edildi`,access:`Hesap erişimi`,accessDisabled:`Oturum açma ve API erişimi devre dışı.`,accessPreserved:`Bir hesabı devre dışı bırakmak talepleri ve etkinlik geçmişini korur.`,enable:`Hesabı etkinleştir`,disable:`Hesabı devre dışı bırak`,enableConfirm:`{{name}} için oturum açma geri yüklensin mi?`,disableConfirm:`{{name}} için oturum açma ve API erişimi devre dışı bırakılsın ve oturumları iptal edilsin mi?`,enabled:`Hesap etkinleştirildi`,disabledToast:`Hesap devre dışı bırakıldı`,updateFailed:`Hesap güncellenemedi`,workspaces:`Çalışma alanları`,addToWorkspace:`Çalışma alanına ekle`,noWorkspaces:`Çalışma alanı üyeliği yok`,projectAccess:`Doğrudan proje erişimi`,updated:`Hesap güncellendi`,roleUpdated:`Sunucu rolü güncellendi`,workspaceAdded:`Çalışma alanı erişimi eklendi`,passwordMismatch:`Yeni parolalar eşleşmiyor.`,passwordSet:`Yerel parola belirlendi ve oturumlar iptal edildi`,name:`Ad`,email:`E-posta`,user:`Kullanıcı`,administrator:`Yönetici`,adminsNote:`Yöneticiler tüm çalışma alanlarını, kullanıcıları ve sunucu ayarlarını yönetebilir.`,workspace:`Çalışma alanı`,workspaceRole:`Çalışma alanı rolü`,newPassword:`Yeni parola`,confirmPassword:`Yeni parolayı onaylayın`,passwordNote:`Bu, yerel bir parola belirler ve kullanıcıyı tüm cihazlarda oturumdan çıkarır.`,save:`Değişiklikleri kaydet`},delivery:{field:{address:`E-posta adresi`,server:`Sunucu`,topic:`Konu başlığı`,accessToken:`Erişim belirteci`,applicationToken:`Uygulama belirteci`,endpointUrl:`Uç nokta URL’si`,signingSecret:`İmzalama gizli anahtarı`,incomingWebhookUrl:`Gelen webhook URL’si`,webhookUrl:`Webhook URL’si`,channel:`Kanal`,botToken:`Bot belirteci`,chatId:`Sohbet kimliği`,chatIdPlaceholder:`-1001234567890 veya @channel`,topicId:`Konu başlığı kimliği`,optional:`{{label}} (isteğe bağlı)`,removeSaved:`Kayıtlı {{label, lowercase}} kaldır`,savedSecret:`Kaydedildi · korumak için boş bırakın`},failure:{blockedAddress:`Bu adrese izin verilmiyor`,redirectBlocked:`Uç nokta yönlendirme yaptı`,dnsError:`Ana makine bulunamadı`,networkError:`Bağlanılamadı`,timeout:`Zaman aşımı`,invalidEndpoint:`Geçersiz uç nokta`,emailUnavailable:`Bu sunucuda e-posta yapılandırılmamış`,smtpError:`Posta sunucusu kullanılamıyor`,accessRevoked:`Bağlayan yöneticinin erişimi kalktı; yeniden bağlayın`,repositoryMismatch:`Bir teslimat başka bir depodan geldi`,http:`HTTP {{status}} ile reddedildi`,smtp:`Posta sunucusu {{code}} yanıtı verdi`},health:{delivery:{done:`Teslim edildi <time/>`,pending:`Gönderiliyor…`,none:`Henüz bir şey gönderilmedi`,failed:`{{reason}}`},access:{done:`Erişim kontrol edildi <time/>`,pending:`Erişim kontrol ediliyor…`,none:`Erişim kontrol edilmedi`,failed:`Erişim kontrolü: {{reason}}`},retrying:`yeniden deneniyor`},paused:`Duraklatıldı`,failing:`Başarısız oluyor`,sendTest:`Test gönder: {{name}}`,testQueued:`Test sıraya alındı`,resume:`Sürdür: {{name}}`,pause:`Duraklat: {{name}}`,edit:`Düzenle: {{name}}`,disconnect:`Bağlantıyı kes: {{name}}`,disconnected:`{{name}} bağlantısı kesildi`,name:`Ad`,type:`Tür`,channels:`Kanallar`,addChannel:`Kanal ekle`,noChannels:`Kanal yok`,editChannel:`Kanalı düzenle`,channelSaved:`Kanal kaydedildi`,channelRemoval:`{{name}} bağlantısı kesilsin mi? Ayarları ve sıradaki bildirimleri silinir.`,sendFrom:`Bildirimlerin kaynağı`,routeOff:`Hiçbiri`,routeAll:`Tüm projeler`,routeSelected:`Seçili projeler`,saveChannel:`Kanalı kaydet`,adminsOnly:`Entegrasyonları proje yöneticileri yönetir`,destinations:`Hedefler`,addDestination:`Hedef ekle`,noDestinations:`Hedef yok`,editDestination:`Hedefi düzenle`,destinationSaved:`Hedef kaydedildi`,destinationRemoval:`{{name}} bağlantısı kesilsin mi? Ayarları ve sıradaki mesajları silinir.`,send:`Gönder`,saveDestination:`Hedefi kaydet`},repository:{setup:{github:`Belirtecin depo okuma erişimine, konulara yorum yapmak veya eşitlemek için de konu ve pull request yazma erişimine ihtiyacı vardır. Bu deponun satırından kopyalanan URL, application/json içerik türü, bu gizli anahtar ve Branch or tag creation, Branch or tag deletion, Issues, Issue comments ve Pull requests olaylarıyla bir GitHub webhook’u ekleyin.`,gitea:`Belirtecin read:repository kapsamına, konulara yorum yapmak veya eşitlemek için de write:issue kapsamına ihtiyacı vardır. Bu deponun satırından kopyalanan URL, application/json içerik türü, bu gizli anahtar ve Create, Delete, Issues, Issue Label, Issue Comment ve Pull Request olaylarıyla bir Gitea webhook’u ekleyin.`,gitlab:`Belirtecin read_api kapsamına, konulara yorum yapmak veya eşitlemek için de api kapsamına ihtiyacı vardır. Bu deponun satırından kopyalanan URL, bu gizli belirteç ve Push, Issues, Comments ve Merge request olaylarıyla bir GitLab webhook’u ekleyin.`},noWebhook:`Webhook alınmadı`,webhookReceived:`Webhook alındı <time/>`,saved:`Depo kaydedildi`,title:`Depolar`,connect:`Depo bağla`,empty:`Depo yok`,checkAccess:`Erişimi kontrol et: {{repository}}`,accessQueued:`Erişim kontrolü sıraya alındı`,copyWebhook:`Webhook URL’sini kopyala: {{repository}}`,issueSync:`Konu eşitleme: {{repository}}`,removal:`{{repository}} bağlantısı kesilsin mi? Webhook’u hemen çalışmayı bırakır. Eklediği bağlantılar taleplerinde kalır.`,edit:`Depoyu düzenle`,host:`Ana makine`,serverUrl:`Sunucu URL’si`,serverUrlOptional:`Sunucu URL’si (isteğe bağlı)`,repository:`{{host}} deposu`,nestedPlaceholder:`group/project`,placeholder:`owner/repository`,accessToken:`Erişim belirteci`,webhookSecret:`Webhook gizli anahtarı`,savedSecret:`Kaydedildi · korumak için boş bırakın`,commentOnLink:{pull_request:`Yeni bağlanan konulara ve pull request’lere yorum yap`,merge_request:`Yeni bağlanan konulara ve merge request’lere yorum yap`},moveTickets:`Bağlı talepleri taşı`,noMove:`Taşıma yok`,save:`Depoyu kaydet`},issueSync:{reason:{labels:`Eşitleme etiketleri değişti`,conflict:`Her iki tarafta da değişti`,changedWhilePaused:`Depo duraklatılmışken konu değişti`,unverified:`Ana makinenin yanıtı değişikliği doğrulamadı`,claimConflict:`Talep üstlenilmiş`,invalidContent:`Konu, bir talebin izin verdiğinden uzun`},issuesSyncing_one:`{{count, number}} konu eşitleniyor`,issuesSyncing_other:`{{count, number}} konu eşitleniyor`,linksStopped_one:`{{count, number}} bağlantı durdu`,linksStopped_other:`{{count, number}} bağlantı durdu`,match:`Eşleşme`,matchAny:`Bu etiketlerden herhangi biri`,matchAll:`Bu etiketlerin tümü`,preview:{matching:`Eşitlemeye devam`,export:`Oluşturulacak yeni konular`,pause:`Duraklatılacak bağlantılar`,review:`İncelenecek bağlantılar`},applied:`Konu eşitleme uygulandı`,title:`Konu eşitleme · {{repository}}`,outbound:`Kanvil → {{host}}`,exportTickets:`Talepleri konu olarak dışa aktar`,exportDescription:`Açık talepler için yeni bir konu açılır; başlık, açıklama, durum ve yeni yorumlar eşit kalır.`,ticketLabels:`Yalnızca bu etiketlere sahip talepler`,everyTicket:`Tüm açık talepler`,inbound:`{{host}} → Kanvil`,importIssues:`Konuları talep olarak içe aktar`,importDescription:`Açık konular, {{host}} bir sonraki bildiriminde içe aktarılır.`,issueLabels:`Yalnızca bu etiketlere sahip konular`,everyIssue:`Tüm açık konular`,previewLabel:`Önizleme`,previewAction:`Önizle`,stopped:`Durmuş bağlantılar · {{repository}}`,review:`İncele`,linkRemoved:`Bağlantı kaldırıldı`,resumed:`Eşitleme sürdürüldü`,open:`Açık`,closed:`Kapalı`,reviewTitle:`İncele: {{key}}`,mayExist:`{{host}} üzerinde bu konu zaten olabilir; yeniden oluşturmadan önce kontrol edin.`,comparison:`Karşılaştırma`,field:{title:`başlık`,description:`açıklama`,state:`durum`},notReported:`Bildirilmedi`,unlink:`Bağlantıyı kaldır`,keepHost:`{{host}} sürümünü koru`,keepKanvil:`Kanvil sürümünü koru`,createAgain:`Konuyu yeniden oluştur`,unlinkTicket:`Bağlantıyı kaldır: {{key}}`,unlinkConfirm:`{{key}} eşitlemesi durdurulsun mu? Talep ve konu kalır.`},import:{count:{tickets:`Talepler`,workflow:`İş akışı durumları`,fields:`Özel alanlar`,labels:`Etiketler`,relations:`İlişkiler`,comments:`Yorumlar`,evidence:`Kanıtlar`,links:`Bağlantılar`},notExport:`Bu dosya bir Kanvil talep dışa aktarımı değil.`,progress_one:`{{status}} · {{count, number}} kaydın {{done, number}} tanesi`,progress_other:`{{status}} · {{count, number}} kaydın {{done, number}} tanesi`,progressFailed_one:`{{status}} · {{count, number}} kaydın {{done, number}} tanesi · {{failed, number}} başarısız`,progressFailed_other:`{{status}} · {{count, number}} kaydın {{done, number}} tanesi · {{failed, number}} başarısız`,title:`İçe aktar`,description:`Bir Kanvil talep dışa aktarımından veya başka bir takip aracından proje oluşturur: Linear, Jira, Trello, Plane, PLANKA veya Kaneo.`,action:`Proje içe aktar`,detailsOf:`{{name}} ayrıntıları`,details:`Ayrıntılar`,exportFile:`Kanvil dışa aktarma dosyası`,source:`Kaynak`,file:`Dışa aktarma dosyası`,jiraEdition:`Jira sürümü`,siteUrl:`Site URL’si`,accountEmail:`Hesap e-postası`,apiKey:`API anahtarı`,apiToken:`API belirteci`,personalToken:`Kişisel erişim belirteci`,token:`Belirteç`,apiUrl:`API URL’si`,workspaceSlug:`Çalışma alanı URL anahtarı`,signInWith:`Oturum açma yöntemi`,username:`Kullanıcı adı veya e-posta`,password:`Parola`,checkConnection:`Bağlantı bilgilerini kontrol edin`,noProjects:`Bu kimlik bilgileri hiçbir {{label, lowercase}} okuyamıyor.`,includeComments:`Yorumları dahil et`,projectName:`Proje adı`,start:`İçe aktar`,connect:`Bağlan`,preview:`Önizle`,starting:`Başlatılıyor…`,connecting:`Bağlanılıyor…`,checking:`Kontrol ediliyor…`,matched:`Eşleşen kişiler`,unmatched:`Eşleşmeyen kişiler`,previewLabel:`İçe aktarma önizlemesi`,errorPrefix:`Hata: `,notePrefix:`Not: `,progressLabel:`İçe aktarma ilerlemesi`,notImported:`İçe aktarılmayan kayıtlar`,stop:`İçe aktarmayı durdur`,openProject:`Projeyi aç`}},native:{"navigation.projectButton":`{{project}} ⌄`,"navigation.recentProjects":`Son projeler`,"navigation.switchProject":`Çalışma alanını veya projeyi değiştir`,labelValue:`{{label}}: {{value}}`,ui:{dismiss:`Kapat`,loading:`Yükleniyor`},server:{url:`Sunucu URL’si`,connect:`Bağlan`,change:`Sunucuyu değiştir`,invalidOrigin:`Kanvil sunucunuzun yol veya kimlik bilgisi içermeyen HTTP ya da HTTPS kaynağını kullanın.`,httpsRequired:`Kanvil sunucunuza bağlanmak için HTTPS kullanın.`},login:{setupTitle:`Sahip hesabınızı oluşturun`,signIn:`Oturum aç`,signingIn:`Oturum açılıyor…`,createAccount:`Hesap oluştur`,signInWith:`{{provider}} ile oturum aç`,name:`Ad`,setupToken:`Kurulum belirteci`,email:`E-posta`,password:`Parola`},connection:{connecting:`bağlanıyor`,connected:`● Canlı`,offline:`Çevrimdışı · önbellekteki veriler`,closed:`kapalı`,signedOut:`Yeniden bağlanmak için oturum açın`},screen:{projects:`Projeler`,inbox:`Gelen kutusu`,settings:`Ayarlar`,tickets:`Talepler`,ticket:`Talep`,newTicket:`Yeni talep`,editTicket:`Talebi düzenle`},projects:{empty:`Henüz proje yok`,new:`Yeni proje`,name:`Proje adı`,prefix:`Talep öneki`,description:`Açıklama`,create:`Proje oluştur`},tickets:{options:`Liste seçenekleri`,expandAll:`Tüm bölümleri genişlet`,collapseAll:`Tüm bölümleri daralt`,select:`Biletleri seç`,search:`Taleplerde ara`,searchPlaceholder:`Başlık, açıklama veya anahtar`,allStatuses:`Tüm durumlar`,empty:`Eşleşen talep yok`,count:`{{shown}} / {{total}}`},ticket:{priority:`{{priority}} öncelik`,noDifficulty:`Belirtilmemiş zorluk`,version:`v{{version}}`,starts:`Başlangıç: {{date}}`,due:`Bitiş: {{date}}`},editor:{stale:`Bu talep değişti. Kayıtlı taslağınız hâlâ {{version}} sürümünü kullanıyor.`,discardDraft:`Taslağı at ve yeniden yükle`,title:`Başlık`,noDifficulty:`Belirtilmemiş`,labels:`Etiketler (virgülle ayrılmış)`,scopes:`Kapsamlar (virgülle ayrılmış)`,editMarkdown:`Markdown’ı düzenle`,previewMarkdown:`Markdown’ı önizle`,description:`Açıklama (Markdown)`,acceptanceCriteria:`Kabul kriterleri (Markdown)`,parent:`Üst talep kimliği`,automationReady:`Gereksinimler ve bağımlılıklar izin verdiğinde ajanlar için hazır`,holdReason:`Bekletme nedeni`,draftSaved:`Taslak bu cihaza kaydedildi`,save:`Talebi kaydet`},detail:{archived:`Arşivlendi`,subscribe:`Abone ol`,unsubscribe:`Abonelikten çık`,share:`Paylaş`,description:`Açıklama`,noDescription:`_Açıklama yok_`,acceptanceCriteria:`Kabul kriterleri`,noAcceptanceCriteria:`_Kabul kriteri yok_`,fields:`Alanlar`,archive:{action:`Talebi arşivle`,title:`Talep arşivlensin mi?`,message:`Bu talep etkin listelerden ve ajan uygunluğundan çıkarılsın mı?`},unarchive:{action:`Talebi arşivden çıkar`,title:`Talep arşivden çıkarılsın mı?`,message:`Bu talep etkin listelere geri yüklensin mi?`}},readiness:{title:`Ajan hazırlığı`,ready:`Üstlenmeye hazır`,notReady:`Üstlenmeye hazır değil`,hold:`Bekletme: {{reason}}`,claimed:`{{worker}} tarafından {{time}} saatine kadar üstlenildi.`,release:{action:`Üstlenmemi bırak`,title:`Üstlenme bırakılsın mı?`,message:`Sahipliği bırakmadan önce çalışanınızı durdurun.`,confirm:`Bırak`},recover:{action:`Süresi dolmuş üstlenmeyi geri al`,explanation:`Önce çalışanın durduğunu doğrulayın.`,reason:`Geri alma nedeni`,confirm:`Çalışan durdu · geri al`}},relations:{title:`İlişkiler`,parent:`Üst · {{key}} · {{title}}`,openParent:`Üst talebi aç`,children:`Alt talepler`,previousChildren:`Önceki alt talepler`,nextChildren:`Sonraki alt talepler`,remove:`İlişkiyi kaldır`,removeTitle:`İlişki kaldırılsın mı?`,add:`İlişki ekle`,find:`Talep bul`,type:`İlişki`,ticket:`Talep`,choose:`Bir talep seçin`},discussion:{title:`Tartışma`,previous:`Önceki yorumlar`,next:`Sonraki yorumlar`,field:`Yorum (Markdown)`,submit:`Yorum yap`,you:`Siz`,edit:`Yorumu düzenle`,editField:`Yorum`,delete:`Yorumu sil`,deleteTitle:`Yorum silinsin mi?`,deleteMessage:`Bu yorum kalıcı olarak kaldırılsın mı?`,save:`Yorumu kaydet`},attachments:{title:`Ekler`,item:`{{name}} · {{size}} kB`,remove:`Kaldır: {{name}}`,removeTitle:`Ek kaldırılsın mı?`,working:`Çalışıyor…`,add:`Ek ekle`,tooLarge:`En fazla 10 MB boyutunda bir dosya seçin.`,sharingUnavailable:`Bu cihazda dosya paylaşımı kullanılamıyor.`},evidence:{title:`Kanıt`,explanation:`Sonuçlar, gönderen hesaplar tarafından bildirilir.`,add:`Kanıt ekle`,name:`Başlık`,url:`URL`,outcome:`Bildirilen sonuç`,commit:`Commit (tam hash)`,note:`Not`,save:`Kanıtı kaydet`},activity:{title:`Etkinlik`,previous:`Önceki etkinlik`,next:`Sonraki etkinlik`},inbox:{read:`Okundu`,markAllRead:`Tümünü okundu işaretle`,empty:`Bildirim yok`},notifications:{title:`Bildirimler`,inApp:`Gelen kutusunda abone olunan talep güncellemeleri`,push:`Anlık bildirimler`,enableDevice:`Bu cihazda anlık bildirimleri etkinleştir`,disableDevice:`Bu cihazda anlık bildirimleri devre dışı bırak`,unconfigured:`Bu derleme, anlık bildirimler için bir Expo proje kimliği ve imzalama yapılandırması gerektirir.`,noProjectId:`Bu derleme, anlık bildirimler için bir Expo proje kimliği gerektirir.`,permissionDenied:`Anlık bildirimleri etkinleştirmek için cihaz ayarlarından bildirimlere izin verin.`,channel:`Talep güncellemeleri`},settings:{password:{title:`Yerel parola`,current:`Mevcut parola`,new:`Yeni parola`,change:`Parolayı değiştir`,updated:`Parola güncellendi; diğer oturumlar iptal edildi`},oidc:{linked:`Hesap bağlandı`,explanation:`Bu sağlayıcıyla oturum açmadan önce bu hesabı bağlayın.`,link:`{{provider}} bağla`},signOut:{action:`Oturumu kapat`,title:`Oturum kapatılsın mı?`,message:`Bu hesabın önbellekteki talepleri ve taslakları bu cihazdan kaldırılacak.`},changeServer:{title:`Sunucu değiştirilsin mi?`,message:`Oturum kapatılsın ve bu hesabın yerel önbelleği ve taslakları temizlensin mi?`}}}};export{e as default};
|