@maudecode/kanvil 0.1.0 → 0.2.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-BscXb1NQ.mjs → auth-I1XEr0d4.mjs} +272 -7
- package/apps/server/dist/{config-Qxr_7oqZ.mjs → config-CbNqtJEj.mjs} +8 -2
- package/apps/server/dist/index.mjs +22 -186
- package/apps/server/dist/migrate.mjs +1 -1
- package/apps/server/dist/recover.mjs +21 -6
- package/apps/server/drizzle/0013_authentication_policy.sql +2 -0
- package/apps/server/drizzle/meta/0013_snapshot.json +4240 -0
- package/apps/server/drizzle/meta/_journal.json +7 -0
- package/apps/web/dist/assets/{CompositeItem-D9KvUNiq.js → CompositeItem-BWPJ5Mol.js} +1 -1
- package/apps/web/dist/assets/admin-settings-DZqkC6ju.js +1 -0
- package/apps/web/dist/assets/{date-picker-lhXxKIlN.js → date-picker-6H_iwP6t.js} +1 -1
- package/apps/web/dist/assets/{ellipsis-CN74O_EP.js → ellipsis-BT172Uvu.js} +1 -1
- package/apps/web/dist/assets/{forms-456UbfIC.js → forms-B4Vg3CPz.js} +23 -23
- package/apps/web/dist/assets/image-edit-trigger-DGmVtWLC.js +1 -0
- package/apps/web/dist/assets/index-C_a21taR.js +50 -0
- package/apps/web/dist/assets/index-DM-D_3Sv.css +2 -0
- package/apps/web/dist/assets/kbd-tTQGZxaK.js +1 -0
- package/apps/web/dist/assets/link-DoIP9KJ6.js +2 -0
- package/apps/web/dist/assets/{list-order-1UoOT5nR.js → list-order-Bzsrihyr.js} +1 -1
- package/apps/web/dist/assets/member-directory-BiCE8DRq.js +1 -0
- package/apps/web/dist/assets/popover-BhzZ0U1d.js +1 -0
- package/apps/web/dist/assets/project-label-provider-9L7Uts3_.js +1 -0
- package/apps/web/dist/assets/project-settings-Q7Q9Reec.js +1 -0
- package/apps/web/dist/assets/{rotate-ccw-BLeWpuu1.js → rotate-ccw-sjyLwLLy.js} +1 -1
- package/apps/web/dist/assets/settings-B6qD6q1J.js +1 -0
- package/apps/web/dist/assets/settings-layout-B-AwUIMu.js +1 -0
- package/apps/web/dist/assets/switch-D0nFHj6l.js +1 -0
- package/apps/web/dist/assets/{table-BQbZG4BK.js → table-CYZiwo9g.js} +1 -1
- package/apps/web/dist/assets/ticket-detail-B-3vbHSB.js +2 -0
- package/apps/web/dist/assets/ticket-editor-C3d8TZIT.js +1 -0
- package/apps/web/dist/assets/ticket-list-LtGGOnwN.js +5 -0
- package/apps/web/dist/assets/ticket-tags-2rdmkcJV.js +1 -0
- package/apps/web/dist/assets/{upload-5Wg5ou_Z.js → upload-DXPRzAaa.js} +1 -1
- package/apps/web/dist/assets/useNavigate-DFohfUD3.js +1 -0
- package/apps/web/dist/assets/workspace-settings-D3tCm1vH.js +1 -0
- package/apps/web/dist/index.html +8 -4
- package/docs/api.md +4 -0
- package/docs/mobile.md +0 -2
- package/docs/releasing.md +3 -1
- package/docs/self-hosting.md +9 -1
- package/package.json +2 -1
- package/apps/web/dist/assets/admin-settings-B0u2-aAK.js +0 -1
- package/apps/web/dist/assets/camera-Cv5wKkKn.js +0 -1
- package/apps/web/dist/assets/index-CVzq9BMC.css +0 -2
- package/apps/web/dist/assets/index-Dt8wYIVA.js +0 -51
- package/apps/web/dist/assets/instance-BCNvOvYa.js +0 -1
- package/apps/web/dist/assets/member-directory-C81ugis6.js +0 -1
- package/apps/web/dist/assets/popover-BWk65ByY.js +0 -1
- package/apps/web/dist/assets/project-settings-DnpVfVf5.js +0 -1
- package/apps/web/dist/assets/settings-DUXuOgWn.js +0 -1
- package/apps/web/dist/assets/settings-layout-xR4hrfte.js +0 -1
- package/apps/web/dist/assets/ticket-detail-B9M_eaVu.js +0 -2
- package/apps/web/dist/assets/ticket-editor-Chg1lDuU.js +0 -1
- package/apps/web/dist/assets/ticket-list-C8500tXj.js +0 -5
- package/apps/web/dist/assets/ticket-tags-cbwQ93Gt.js +0 -1
- package/apps/web/dist/assets/workspace-settings-Dte44Kkx.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Li as e,co as t,do as n,fo as r,io as i,no as a,oo as o,po as s,ro as c,so as l,to as u,uo as d}from"./forms-456UbfIC.js";var f={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};f.node;var p=e(f),m=r({protocol:/^https?$/}).refine(e=>!/^https?:\/\/[^/]*@/.test(e)&&!/[?#]/.test(e),`Use an HTTP(S) endpoint without embedded credentials`),h=t({endpoint:n([m,o(``)]).default(``),region:d().min(1).max(100).default(`us-east-1`),bucket:d().min(3).max(255),prefix:d().max(200).regex(/^[a-zA-Z0-9/_-]*$/).default(`kanvil/`),forcePathStyle:c().default(!0),accessKeyId:d().max(500).default(``),secretAccessKey:d().max(2e3).optional()}).strict(),g=u([`none`,`apiKey`,`basic`]),_=t({url:m,auth:g.optional(),index:d().regex(/^[a-z0-9][a-z0-9_-]{0,100}$/),apiKey:d().max(4e3).optional(),username:d().max(500).default(``),password:d().max(2e3).optional()}).strict(),v=i(`provider`,[t({provider:o(`local`)}).strict(),h.extend({provider:o(`s3`)})]),y=i(`provider`,[t({provider:o(`postgres`)}).strict(),_.extend({provider:o(`elasticsearch`)})]),b=t({url:r({protocol:/^amqps?$/}).max(4e3).optional(),exchange:d().min(1).max(200).regex(/^[a-zA-Z0-9_.-]+$/).refine(e=>!e.startsWith(`amq.`),`Use an application exchange`).default(`kanvil.events`)}).strict(),x=i(`provider`,[t({provider:o(`postgres`)}).strict(),b.extend({provider:o(`rabbitmq`)})]),S=t({expectedVersion:l().int().positive(),name:d().trim().min(1).max(100),description:d().max(500),storage:v,search:y,broker:x.optional()}).strict();t({name:d(),description:d()});var C=t({id:s(),version:l().int(),name:d(),description:d(),storage:t({provider:u([`local`,`s3`]),source:u([`deployment`,`admin`]),settings:h.omit({secretAccessKey:!0}).nullable(),secretConfigured:c(),pending:l().int(),status:u([`ready`,`transferring`,`unavailable`]),error:d().nullable()}),search:t({provider:u([`postgres`,`elasticsearch`]),source:u([`deployment`,`admin`]),settings:_.omit({apiKey:!0,password:!0}).nullable(),secretConfigured:c(),status:u([`builtin`,`indexing`,`ready`,`unavailable`]),cursor:d(),error:d().nullable()}),broker:t({provider:u([`postgres`,`rabbitmq`]),source:u([`deployment`,`admin`]),settings:t({endpoint:d(),exchange:d()}).nullable(),secretConfigured:c(),status:u([`builtin`,`connecting`,`ready`,`unavailable`]),error:d().nullable()}),deployment:t({url:d(),oidc:t({name:d(),discoveryUrl:d(),clientId:d()}).nullable(),push:c(),version:d()}),locations:a(t({id:s(),bucket:d(),endpoint:d(),prefix:d(),objects:l().int()}))});t({data:d().max(7e5),contentType:u([`image/png`,`image/jpeg`,`image/webp`])}).strict();var w=t({image:d().nullable()});export{p as a,g as i,S as n,w as r,C as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,Dn as t,Ka as n,Li as r,P as i,Pi as a,S as o,_a as s,ao as c,cr as l,d as u,et as d,f,g as p,ho as m,m as h,nn as g,on as _,p as v,rr as y,s as b,to as x,v as S,vo as C,w,wi as T}from"./forms-456UbfIC.js";import{t as E}from"./rotate-ccw-BLeWpuu1.js";import{d as D,h as O,i as k,m as A,n as j,nt as M,o as N,p as P,r as F,u as I,ut as L}from"./index-Dt8wYIVA.js";import{i as R,n as z,t as B}from"./popover-BWk65ByY.js";var V={name:`settings-2`,size:24,node:[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]};V.node;var H=r(V),U=C(m(),1),W=s();function G({people:e,value:n,onChange:r,disabled:i}){let[o,s]=(0,U.useState)(!1),[l,u]=(0,U.useState)(``),d=(0,U.useId)(),f=e.filter(e=>`${e.name} ${e.email}`.toLowerCase().includes(l.toLowerCase())),p=e.find(e=>e.email===n);function m(e){r(e),s(!1)}return(0,W.jsxs)(g,{className:`mb-4`,children:[(0,W.jsx)(_,{id:d,children:`Account`}),(0,W.jsxs)(B,{open:o,onOpenChange:s,children:[(0,W.jsxs)(R,{render:(0,W.jsx)(t,{role:`combobox`,"aria-labelledby":d,"aria-expanded":o,disabled:i,className:`h-auto min-h-10 w-full justify-between text-left`}),children:[p?.name??(n||`Choose an account`),(0,W.jsx)(L,{className:`ml-3 size-4 shrink-0`})]}),(0,W.jsx)(z,{className:`w-[min(24rem,calc(100vw-3rem))] p-0`,align:`start`,children:(0,W.jsxs)(I,{shouldFilter:!1,children:[(0,W.jsx)(P,{placeholder:`Search name or email…`,value:l,onValueChange:u,"aria-label":`Search accounts`}),(0,W.jsxs)(O,{children:[f.slice(0,50).map(e=>(0,W.jsxs)(A,{value:e.email,onSelect:()=>m(e.email),children:[(0,W.jsxs)(`div`,{className:`min-w-0`,children:[(0,W.jsx)(`span`,{className:`block truncate`,children:e.name}),(0,W.jsx)(`small`,{className:`break-all`,children:e.email})]}),n===e.email&&(0,W.jsx)(a,{className:`ml-auto`})]},e.userId)),c().safeParse(l.trim()).success&&!f.some(e=>e.email===l.trim())&&(0,W.jsxs)(A,{value:l.trim(),onSelect:()=>m(l.trim()),children:[`Use `,l.trim()]}),(0,W.jsx)(D,{children:`Search for a member or enter an existing account’s email.`})]})]})})]})]})}var K={reader:`Read only`,writer:`Can edit`,admin:`Admin`};function q({people:t,candidates:r=t,pending:a,loading:s,error:c,canAdmin:m,scope:g,onChange:_}){let[C,D]=(0,U.useState)(``),[O,A]=(0,U.useState)(!1),[P,I]=(0,U.useState)(``),[L,R]=(0,U.useState)(),z=t.filter(e=>`${e.name} ${e.email}`.toLowerCase().includes(C.toLowerCase()));async function B(e,t){R(void 0);try{await _(e,t)}catch(e){throw R(e),e}}return(0,W.jsxs)(`section`,{children:[(0,W.jsx)(e,{title:`Members`,action:(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center justify-end gap-2`,children:[(0,W.jsx)(o,{label:`Search members`,placeholder:`Name or email…`,value:C,onChange:D}),m&&(0,W.jsx)(h,{label:`Add member`,variant:`default`,onClick:()=>{R(void 0),I(``),A(!0)},children:(0,W.jsx)(T,{})})]})}),!O&&(0,W.jsx)(f,{error:L??c}),s?(0,W.jsx)(p,{}):z.length?(0,W.jsx)(N,{className:`gap-0`,children:z.map(e=>(0,W.jsxs)(j,{className:`member-row rounded-none border-x-0 border-t-0 border-b-border px-0 py-3`,children:[(0,W.jsxs)(k,{className:`min-w-0`,children:[(0,W.jsx)(y,{name:e.name,email:e.email,image:e.image}),g===`project`&&e.source===`workspace`&&(0,W.jsx)(i,{variant:`outline`,className:`mt-1.5 ml-11 w-fit font-normal`,children:`Workspace access`})]}),(0,W.jsxs)(F,{children:[(0,W.jsx)(w,{label:`Role for ${e.name}`,labelHidden:!0,className:`mb-0 w-36`,value:e.role,disabled:!m||a||g===`project`&&e.source===`workspace`&&e.role===`admin`,onValueChange:t=>{B(e.email,x(n).parse(t)).catch(()=>{})},children:n.map(e=>(0,W.jsx)(d,{value:e,children:K[e]},e))}),m&&(g===`workspace`||e.source!==`workspace`)&&(0,W.jsx)(b,{label:g===`project`&&e.inheritedRole?`Use workspace access`:`Remove member`,icon:g===`project`&&e.inheritedRole?(0,W.jsx)(E,{}):(0,W.jsx)(M,{}),danger:!(g===`project`&&e.inheritedRole),description:g===`workspace`?`Remove ${e.name} from this workspace and all of its projects?`:e.inheritedRole?`Restore ${K[e.inheritedRole]} workspace access for ${e.name}?`:`Remove ${e.name}'s project access?`,onConfirm:()=>B(e.email,null)})]})]},e.userId))}):(0,W.jsx)(u,{title:C?`No matching members`:`No members`,className:`py-10`}),(0,W.jsx)(S,{title:`Add member`,open:O,onOpenChange:A,busy:a,children:(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault();let t=new FormData(e.currentTarget);B(P,x(n).parse(t.get(`role`))).then(()=>{A(!1),l.success(`Member added`)}).catch(()=>{})},children:[(0,W.jsx)(G,{people:r,value:P,onChange:I,disabled:a}),(0,W.jsx)(w,{label:g===`project`?`Project role`:`Workspace role`,name:`role`,defaultValue:`writer`,children:n.map(e=>(0,W.jsx)(d,{value:e,children:K[e]},e))}),(0,W.jsx)(v,{error:L,pending:a,submitLabel:`Add member`,submitDisabled:!P,onCancel:()=>A(!1)})]})})]})}export{K as n,H as r,q as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{At as e,Bt as t,Cr as n,Dt as r,Et as i,Fr as a,Ft as o,Gt as s,It as c,Jt as l,Lt as u,Mt as d,Ot as f,Qt as p,Rr as m,Rt as h,St as g,Tr as _,Tt as v,Ur as y,Wt as b,Xt as x,Yr as S,Zt as C,_a as w,_i as T,_t as E,at as D,bt as O,ci as k,di as A,dt as j,gr as M,ho as N,ht as P,i as F,ii as I,ir as L,it as R,jt as z,kt as B,lt as V,mo as H,mt as ee,nt as U,oi as W,ot as te,qt as ne,r as re,rt as ie,tt as G,vo as K,vt as q,wr as ae,wt as J,xi as Y,xr as oe,xt as se,yr as ce,yt as X,zt as le}from"./forms-456UbfIC.js";var Z=K(N(),1),ue=Z.createContext(void 0);function Q(e){let t=Z.useContext(ue);if(t===void 0&&!e)throw Error(k(47));return t}var de=K(H(),1),fe={...X,disabled:e=>e.disabled,instantType:e=>e.instantType===`trigger-change`&&!X.open(e)?void 0:e.instantType,openMethod:e=>e.openMethod,openChangeReason:e=>e.openChangeReason,isPressOpenedByTrigger:(e,t)=>e.openChangeReason===`trigger-press`&&X.isOpenedByTrigger(e,t),isTouchPressOpen:(e,t)=>t&&e.openMethod===`touch`&&e.openChangeReason===`trigger-press`,hasTriggerFocusGuards:(e,t)=>X.isOpenedByTrigger(e,t)&&!e.focusManagerModal,modal:e=>e.modal,titleElementId:e=>e.titleElementId,descriptionElementId:e=>e.descriptionElementId,openOnHover:e=>e.openOnHover,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin},pe=class extends x{constructor(e,t,n){let r=new O;super(me(e,r,t,n),he(r),fe)}setOpen=(e,t)=>{let n=t.reason===I,r=t.reason===`trigger-press`&&t.event.detail===0,a=!e&&(t.reason===`escape-key`||t.reason==null),o=J(t),s=this.select(`activeTriggerId`);if(!e&&t.reason===`close-press`&&t.trigger==null&&s!=null&&(t.trigger=this.context.triggerElements.getById(s)??this.select(`activeTriggerElement`)??void 0),this.context.onOpenChange?.(e,t),t.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(e,t);let c=()=>{let n=i(this.state,e,t.trigger,o());n.openChangeReason=t.reason,this.update(n)};n?(this.context.stickIfOpen=!0,this.context.stickIfOpenTimeout.start(500,()=>{this.context.stickIfOpen=!1}),de.flushSync(c)):c();let l;r?l=`click`:a?l=`dismiss`:t.reason===`focus-out`&&(l=`focus`),this.set(`instantType`,l)}};function me(e,t,n,r=!1){let i={...q(t,n,r),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,openOnHover:!1,closeDelay:0,adaptiveOrigin:void 0,...e};return i.open&&e?.mounted===void 0&&(i.mounted=!0),i}function he(e){return{popupRef:Z.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:Z.createRef(),beforeTriggerFocusGuardRef:Z.createRef(),beforeContentFocusGuardRef:Z.createRef(),stickIfOpenTimeout:new L,stickIfOpen:!0,triggerElements:e}}var $=w(),ge=C(function({props:e}){let{children:t,open:n,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,modal:s=!1,handle:c,triggerId:l,defaultTriggerId:u=null}=e,d=ve(c,{modal:s,open:i,openProp:n,activeTriggerId:u,triggerIdProp:l});d.useControlledProp(`openProp`,n),d.useControlledProp(`triggerIdProp`,l);let p=d.useState(`open`),m=d.useState(`mounted`),h=d.useState(`payload`);d.useContextCallback(`onOpenChange`,a),d.useContextCallback(`onOpenChangeComplete`,o),z(d,p),r(d);let{forceUnmount:_}=f(p,d,()=>{d.context.stickIfOpen=!0,d.set(`openChangeReason`,null)});d.useSyncedValues({modal:s}),Z.useEffect(()=>{p||d.context.stickIfOpenTimeout.clear()},[d,p]),Z.useImperativeHandle(e.actionsRef,()=>({unmount:_,close:()=>d.setOpen(!1,W(S))}),[_,d]);let v=p||m||c!=null;return(0,$.jsxs)(ue.Provider,{value:d,children:[c&&(0,$.jsx)(g,{handle:c,store:d}),v&&(0,$.jsx)(ye,{store:d,modal:s}),typeof t==`function`?t({payload:h}):t]})});function _e(e){return Q(!0)?(0,$.jsx)(ge,{props:e}):(0,$.jsx)(le,{children:(0,$.jsx)(ge,{props:e})})}function ve(t,n){let r=e((e,t)=>new pe(n,e,t));return Z.useEffect(()=>r.context.stickIfOpenTimeout.disposeEffect(),[r]),r}function ye({store:e,modal:t}){let n=e.useState(`floatingRootContext`),r=o(n,{outsidePressEvent:{mouse:t===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}}),i=r.reference,a=r.floating;return B(e,{activeTriggerProps:i,inactiveTriggerProps:i,popupProps:a}),null}var be=p(function(e,t){let{render:n,className:r,style:i,disabled:o=!1,nativeButton:u=!0,handle:f,payload:p,openOnHover:h=!1,delay:g=300,closeDelay:v=0,id:y,...b}=e,x=Q(!0),S=E(f)??x;if(!S)throw Error(k(74));let C=m(y),w=S.useState(`isTriggerActive`,C),D=S.useState(`floatingRootContext`),O=S.useState(`isOpenedByTrigger`,C),M=S.useState(`triggerPopupId`,C),N=Z.useRef(null),{registerTrigger:P,isMountedByThisTrigger:F}=d(C,N,S,{payload:p,disabled:o,openOnHover:h,closeDelay:v}),I=S.useState(`isPressOpenedByTrigger`,C),L=S.useState(`isTouchPressOpen`,h),R=S.useState(`hasTriggerFocusGuards`,C),z=ee(D,{enabled:!o&&h&&!L,mouseOnly:!0,move:!1,handleClose:j(),restMs:g,delay:{close:v},triggerElementRef:N,isActiveTrigger:w,isClosing:()=>S.select(`transitionStatus`)===`ending`}),B=T(()=>S.context.stickIfOpen),H=c(D,{stickIfOpen:B}),U=V(()=>S.select(`open`),e=>{S.set(`openMethod`,e)}),W=S.useState(`triggerProps`,F),{getButtonProps:te,buttonRef:ne}=a({disabled:o,native:u}),ie={open(e){return I?ae.open(e):_.open(e)}},{handlePreFocusGuardFocus:G,handleFocusTargetFocus:K}=re(S,N),q=A(`button`,e,{state:{disabled:o,open:O},ref:[ne,t,P,N],props:[H.reference,z,W,U,{[s]:``,id:C,"aria-haspopup":`dialog`,"aria-expanded":O,"aria-controls":M},b,te],stateAttributesMapping:ie}),J=(0,$.jsx)(Z.Fragment,{children:q},C);return R?(0,$.jsxs)(Z.Fragment,{children:[(0,$.jsx)(l,{ref:S.context.beforeTriggerFocusGuardRef,onFocus:G}),J,(0,$.jsx)(l,{ref:S.context.triggerFocusTargetRef,onFocus:K})]}):J}),xe=Z.createContext(void 0);function Se(){let e=Z.useContext(xe);if(e===void 0)throw Error(k(45));return e}var Ce=Z.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return Q().useState(`mounted`)||n?(0,$.jsx)(xe.Provider,{value:n,children:(0,$.jsx)(b,{ref:t,...r})}):null}),we=Z.createContext(void 0);function Te(){let e=Z.useContext(we);if(!e)throw Error(k(46));return e}var Ee=Z.forwardRef(function(e,n){let{render:r,className:i,style:a,anchor:o,positionMethod:s,side:c,align:l,sideOffset:u,alignOffset:d,collisionBoundary:f=`clipping-ancestors`,collisionPadding:p,arrowPadding:m,sticky:g,disableAnchorTracking:_=!1,collisionAvoidance:v=ne,...y}=e,b=Q(),x=Se(),S=t(),C=b.useState(`floatingRootContext`),w=b.useState(`mounted`),T=b.useState(`open`),E=b.useState(`openChangeReason`),O=b.useState(`activeTriggerElement`),k=b.useState(`modal`),A=b.useState(`openMethod`),j=b.useState(`positionerElement`),M=b.useState(`instantType`),N=b.useState(`transitionStatus`),P=b.useState(`adaptiveOrigin`),I=te({anchor:o,floatingRootContext:C,positionMethod:s,mounted:w,side:c,sideOffset:u,align:l,alignOffset:d,arrowPadding:m,collisionBoundary:f,collisionPadding:p,sticky:g,disableAnchorTracking:_,keepMounted:x,nodeId:S,collisionAvoidance:v,adaptiveOrigin:P}),L=C.useState(`domReferenceElement`);F({store:b,domReference:L,positionerElement:j,open:T});let R=k===!0&&E!==`trigger-hover`;U(T&&R,A===`touch`,j,O);let z=b.useStateSetter(`positionerElement`),B={open:T,side:I.side,align:I.align,anchorHidden:I.anchorHidden,instant:M},V=ie(e,B,{styles:I.positionerStyles,transitionStatus:N,props:y,refs:[n,z],hidden:!w,inert:!T});return(0,$.jsxs)(we.Provider,{value:I,children:[w&&R&&(0,$.jsx)(D,{inert:oe(!T),cutout:O}),(0,$.jsx)(h,{id:S,children:V})]})}),De=Z.createContext(void 0);function Oe(){let[e,t]=Z.useState(0),n=T(()=>(t(e=>e+1),()=>{t(e=>Math.max(0,e-1))}));return{context:Z.useMemo(()=>({register:n}),[n]),hasClosePart:e>0}}var ke=Z.forwardRef(function(e,t){let{render:r,className:i,style:a,initialFocus:o,finalFocus:s,...c}=e,l=Q(),d=Te(),f=G(!0)!=null,{context:p,hasClosePart:m}=Oe(),h=l.useState(`open`),g=l.useState(`openMethod`),_=l.useState(`instantType`),b=l.useState(`transitionStatus`),x=l.useState(`popupProps`),S=l.useState(`titleElementId`),C=l.useState(`descriptionElementId`),w=l.useState(`modal`),T=l.useState(`mounted`),E=l.useState(`openChangeReason`),D=l.useState(`activeTriggerElement`),O=l.useState(`floatingRootContext`),k=O.useState(`floatingId`),j=l.useState(`disabled`),N=l.useState(`openOnHover`),F=l.useState(`closeDelay`);ce({open:h,ref:l.context.popupRef,onComplete(){h&&l.context.onOpenChangeComplete?.(!0)}}),P(O,{enabled:N&&!j,closeDelay:F});let I=o===void 0?v(l.context.popupRef):o,L=w!==!1&&m;l.useSyncedValue(`focusManagerModal`,L);let z=l.useStateSetter(`popupElement`),B={open:h,side:d.side,align:d.align,instant:_,transitionStatus:b},V=A(`div`,e,{state:B,ref:[t,l.context.popupRef,z],props:[x,{id:k,role:`dialog`,...se,"aria-labelledby":S,"aria-describedby":C,onKeyDown(e){f&&M.has(e.key)&&e.stopPropagation()}},R(b),c],stateAttributesMapping:n});return(0,$.jsx)(u,{context:O,openInteractionType:g,modal:L,disabled:!T||E===`trigger-hover`,initialFocus:I,returnFocus:s,restoreFocus:`popup`,getInsideElements:()=>[l.context.beforeTriggerFocusGuardRef.current],previousFocusableElement:y(D)?D:void 0,nextFocusableElement:l.context.triggerFocusTargetRef,beforeContentFocusGuardRef:l.context.beforeContentFocusGuardRef,children:(0,$.jsx)(De.Provider,{value:p,children:V})})}),Ae=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=Q(),s=m(a.id);return o.useSyncedValueWithCleanup(`titleElementId`,s),A(`h2`,e,{ref:t,props:[{id:s},a]})});function je({...e}){return(0,$.jsx)(_e,{"data-slot":`popover`,...e})}function Me({...e}){return(0,$.jsx)(be,{"data-slot":`popover-trigger`,...e})}function Ne({className:e,align:t=`center`,alignOffset:n=0,side:r=`bottom`,sideOffset:i=4,...a}){return(0,$.jsx)(Ce,{children:(0,$.jsx)(Ee,{align:t,alignOffset:n,side:r,sideOffset:i,className:`isolate z-50`,children:(0,$.jsx)(ke,{"data-slot":`popover-content`,className:Y(`z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground border border-border/70 shadow-float outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...a})})})}function Pe({className:e,...t}){return(0,$.jsx)(Ae,{"data-slot":`popover-title`,className:Y(`font-medium`,e),...t})}export{Me as i,Ne as n,Pe as r,je as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,Dn as t,Gn as n,Li as r,Na as i,Nn as a,O as o,P as s,Qn as c,S as l,Si as u,Ua as d,Zn as f,_a as p,c as m,cr as h,d as g,dr as _,er as v,et as y,f as b,fr as x,g as S,h as C,hn as ee,ho as w,lr as T,m as E,p as D,s as O,ur as k,v as A,vo as j,w as M,wi as N,x as te,xi as P,y as F,zi as I}from"./forms-456UbfIC.js";import{t as L}from"./camera-Cv5wKkKn.js";import{t as ne}from"./rotate-ccw-BLeWpuu1.js";import{r as re,t as ie}from"./member-directory-C81ugis6.js";import{$ as ae,X as R,Z as z,at as B,gt as V,ht as H,mt as U,nt as W,z as G}from"./index-Dt8wYIVA.js";import{n as K,r as q,t as oe}from"./settings-layout-xR4hrfte.js";import{t as J}from"./ticket-tags-cbwQ93Gt.js";var Y={name:`tags`,size:24,node:[[`path`,{d:`M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z`,key:`16rjxf`}],[`path`,{d:`M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193`,key:`178nd4`}],[`circle`,{cx:`10.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`12ikhr`}]]};Y.node;var se=r(Y),X=p();function Z({value:e,label:n,selected:r,disabled:i,onSelect:a}){let o=H(e);return(0,X.jsx)(t,{disabled:i,variant:r?`secondary`:`ghost`,size:`icon`,"aria-label":`${e} ${n.toLowerCase()}`,"aria-pressed":r,className:o.className,style:o.style,onClick:a,children:(0,X.jsx)(`span`,{className:`size-3 rounded-full bg-current`})})}function Q({label:e,value:r,onChange:a,disabled:s=!1,custom:c=!1}){let l=I({...n.query(`list_label_colors`,{}),enabled:c,staleTime:0}),p=f(`remove_label_color`),m=l.data?.map(e=>e.value)??[],h=i(r)&&!m.includes(r)?[r,...m]:m,g=e=>a(e);return(0,X.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center gap-2`,role:`group`,"aria-label":e,children:[d.map(t=>(0,X.jsx)(Z,{value:t,label:e,selected:r===t,disabled:s,onSelect:()=>g(t)},t)),c&&(0,X.jsxs)(X.Fragment,{children:[h.length>0&&(0,X.jsx)(`span`,{className:`mx-1 h-5 w-px bg-border`,"aria-hidden":`true`}),h.map(n=>(0,X.jsxs)(`span`,{className:`group/swatch relative`,children:[(0,X.jsx)(Z,{value:n,label:e,selected:r===n,disabled:s,onSelect:()=>g(n)}),m.includes(n)&&(0,X.jsx)(t,{variant:`secondary`,size:`icon-xs`,"aria-label":`Remove ${n} from custom colors`,disabled:s||p.isPending,className:`absolute -top-1 -right-1 size-4 rounded-full border opacity-0 shadow-sm transition-opacity group-hover/swatch:opacity-100 focus-visible:opacity-100 max-md:opacity-100`,onClick:()=>{p.mutateAsync({value:n}).catch(o)},children:(0,X.jsx)(u,{className:`size-2.5`})})]},n)),(0,X.jsxs)(`label`,{className:P(`relative inline-flex size-8 cursor-pointer items-center justify-center rounded-md border border-dashed text-muted-foreground transition-colors hover:border-foreground/40 hover:text-foreground focus-within:ring-2 focus-within:ring-ring`,s&&`pointer-events-none opacity-50`),title:`Custom color`,children:[(0,X.jsx)(N,{className:`size-4`,"aria-hidden":`true`}),(0,X.jsx)(`input`,{type:`color`,"aria-label":`Custom color`,disabled:s,value:i(r)?r:`#6366f1`,onChange:e=>g(e.target.value.toLowerCase()),className:`absolute inset-0 size-full cursor-pointer opacity-0`})]})]})]})}var $=j(w(),1);function ce({project:e,disabled:n=!1}){let[r,i]=(0,$.useState)(!1),[o,s]=(0,$.useState)(``),[c,u]=(0,$.useState)(96),[d,p]=(0,$.useState)(e.iconColor),[m,h]=(0,$.useState)(),[g,v]=(0,$.useState)(!1),y=f(`set_project_icon`),C=z(r),w=(0,$.useRef)(null),E=g||y.isPending,D=Object.keys(C.data?.icons??{}).filter(e=>e.includes(o.trim().toLowerCase().replaceAll(` `,`-`)));async function O(t){h(void 0);try{await y.mutateAsync({projectId:e.id,expectedVersion:e.version,icon:t}),i(!1)}catch(e){h(e)}}return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`button`,{type:`button`,"aria-label":`Change icon`,title:`Change icon`,disabled:n,onClick:()=>{y.reset(),h(void 0),p(e.iconColor),s(``),u(96),i(!0)},className:`group/icon relative shrink-0 rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-default`,children:[(0,X.jsx)(R,{project:e,className:`size-16 rounded-xl bg-muted/50 p-1.5`}),!n&&(0,X.jsx)(`span`,{"aria-hidden":`true`,className:`absolute inset-0 flex items-center justify-center rounded-xl bg-background/80 text-foreground opacity-0 transition-opacity group-hover/icon:opacity-100 group-focus-visible/icon:opacity-100`,children:(0,X.jsx)(L,{className:`size-5`})})]}),(0,X.jsxs)(A,{title:`Project icon`,open:r,onOpenChange:i,busy:E,children:[(0,X.jsxs)(T,{defaultValue:`library`,children:[(0,X.jsxs)(_,{variant:`line`,children:[(0,X.jsx)(x,{value:`library`,children:`Icon library`}),(0,X.jsx)(x,{value:`upload`,children:`Upload image`})]}),(0,X.jsxs)(k,{value:`library`,children:[(0,X.jsx)(l,{label:`Search icons`,placeholder:`Search icons…`,defaultOpen:!0,value:o,onChange:e=>{s(e),u(96)},className:`my-3`}),(0,X.jsx)(Q,{label:`Icon color`,value:d,onChange:p,disabled:E}),C.isPending?(0,X.jsx)(S,{}):(0,X.jsxs)(`div`,{className:`max-h-80 overflow-y-auto overscroll-contain`,children:[(0,X.jsx)(`div`,{className:`grid grid-cols-5 gap-1 sm:grid-cols-8`,children:D.slice(0,c).map(n=>{let r=C.data?.icons[n];return r&&(0,X.jsx)(t,{variant:n===e.iconName?`secondary`:`ghost`,className:`aspect-square h-auto min-h-11 ${V[d]}`,disabled:E,"aria-label":`Choose ${n.replaceAll(`-`,` `)}`,title:n.replaceAll(`-`,` `),onClick:()=>{O({kind:`library`,name:n,color:d})},children:(0,X.jsx)(U,{icon:{...r,width:24,height:24},className:`size-6`})},n)})}),D.length===0&&(0,X.jsx)(`p`,{className:`py-8 text-center text-muted-foreground`,children:`No matching icons`}),D.length>c&&(0,X.jsx)(t,{className:`mt-3 w-full`,onClick:()=>u(e=>e+96),children:`Show more icons`})]})]}),(0,X.jsx)(k,{value:`upload`,children:(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-5 py-10`,children:[(0,X.jsx)(R,{project:e,className:`size-20`}),(0,X.jsxs)(t,{disabled:E,onClick:()=>w.current?.click(),children:[(0,X.jsx)(L,{}),E?`Uploading…`:`Choose image`]}),(0,X.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:`PNG, JPEG, or WebP · up to 10 MB`})]})})]}),(0,X.jsx)(ee,{ref:w,type:`file`,accept:`image/png,image/jpeg,image/webp`,className:`hidden`,"aria-label":`Project icon file`,onChange:e=>{let t=e.currentTarget.files?.[0];e.currentTarget.value=``,t&&(v(!0),h(void 0),a(t,{fit:`contain`,format:`image/png`}).then(e=>O({kind:`image`,...e})).catch(h).finally(()=>v(!1)))}}),(0,X.jsx)(b,{error:m??C.error}),(0,X.jsxs)(F,{children:[(0,X.jsxs)(t,{disabled:E,onClick:()=>{O(null)},children:[(0,X.jsx)(ne,{}),`Reset icon`]}),(0,X.jsx)(t,{disabled:E,onClick:()=>i(!1),children:`Cancel`})]})]})]})}function le({projectId:t,canAdmin:r}){let i=I(n.query(`list_project_labels`,{projectId:t})),a=f(`create_project_label`),o=f(`update_project_label`),s=f(`delete_project_label`),[c,u]=(0,$.useState)(``),[d,p]=(0,$.useState)(null),m=a.isPending||o.isPending,_=i.data?.filter(e=>e.name.toLowerCase().includes(c.trim().toLowerCase()))??[];function v(e){a.reset(),o.reset(),p({label:e,name:e?.name??``,color:e?.color??`gray`})}return(0,X.jsxs)(`section`,{children:[(0,X.jsx)(e,{title:`Labels`,action:(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center justify-end gap-2`,children:[!!i.data?.length&&(0,X.jsx)(l,{label:`Search labels`,value:c,onChange:u}),r&&(0,X.jsx)(E,{label:`New label`,variant:`default`,onClick:()=>v(null),children:(0,X.jsx)(N,{})})]})}),(0,X.jsx)(b,{error:i.error}),i.isPending?(0,X.jsx)(S,{}):_.length?_.map(e=>(0,X.jsxs)(K,{compact:!0,title:(0,X.jsx)(J,{tag:e.name,color:e.color,className:`h-auto max-w-full border-0 bg-transparent px-0 text-[13px] font-normal`}),children:[(0,X.jsxs)(G,{to:`/projects/$projectId`,params:{projectId:t},search:{label:e.name},className:`text-xs whitespace-nowrap text-muted-foreground tabular-nums hover:text-foreground`,children:[e.count,` `,e.count===1?`ticket`:`tickets`]}),r&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(E,{label:`Edit label ${e.name}`,onClick:()=>v(e),children:(0,X.jsx)(B,{})}),(0,X.jsx)(O,{label:`Delete label ${e.name}`,icon:(0,X.jsx)(W,{}),danger:!0,description:e.count?`Remove ${e.name} from ${e.count} ${e.count===1?`ticket`:`tickets`}, including archived tickets? Saved views using this label will have their label filter removed.`:`Delete the unused label ${e.name}? Saved views using it will have their label filter removed.`,onConfirm:async()=>{await s.mutateAsync({projectId:t,labelId:e.id,expectedVersion:e.version}),h.success(`Label deleted`)}})]})]},e.id)):!i.error&&(0,X.jsx)(g,{title:c?`No matching labels`:`No labels yet`}),(0,X.jsx)(A,{title:d?.label?`Edit label`:`New label`,open:!!d,onOpenChange:e=>{e||p(null)},busy:m,children:d&&(0,X.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),(d.label?o.mutateAsync({projectId:t,labelId:d.label.id,expectedVersion:d.label.version,name:d.name,color:d.color}):a.mutateAsync({projectId:t,name:d.name,color:d.color})).then(()=>{p(null),h.success(`Label saved`)}).catch(()=>{})},children:[(0,X.jsx)(C,{label:`Label name`,value:d.name,onChange:e=>p({...d,name:e.target.value}),maxLength:40,required:!0,autoFocus:!0}),(0,X.jsx)(Q,{label:`Label color`,value:d.color,onChange:e=>p({...d,color:e}),disabled:m,custom:!0}),!!d.name.trim()&&(0,X.jsx)(`div`,{className:`mb-4`,children:(0,X.jsx)(J,{tag:d.name.trim(),color:d.color})}),d.label&&d.name.trim()!==d.label.name&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Renaming updates this label on tickets and in saved views.`}),(0,X.jsx)(D,{error:a.error??o.error,pending:m,submitLabel:`Save label`,submitDisabled:!d.name.trim(),onCancel:()=>p(null)})]})})]})}var ue=[{id:`general`,label:`General`,icon:re},{id:`members`,label:`Members`,icon:ae},{id:`labels`,label:`Labels`,icon:se}];function de({project:e,section:r,onSectionChange:i}){let a=f(`update_project`),l=f(`set_member`),u=c(e.id),d=v(),p=I(n.query(`list_members`,{projectId:e.id})),g=I({...n.query(`list_workspace_members`,{workspaceId:e.workspaceId}),enabled:!!d.active?.role});return(0,X.jsx)(X.Fragment,{children:(0,X.jsxs)(q,{title:`Project settings`,value:r,onChange:i,sections:ue,children:[(0,X.jsxs)(k,{value:`general`,children:[(0,X.jsx)(`section`,{children:(0,X.jsx)(oe,{name:e.name,description:e.description,canEdit:u.canAdmin,version:e.version,pending:a.isPending,error:a.error,editLabel:`Edit project`,media:(0,X.jsx)(ce,{project:e,disabled:!u.canAdmin}),badges:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(s,{variant:`secondary`,className:`ml-0.5 font-mono text-[10px] font-normal`,children:e.key}),(0,X.jsx)(m,{label:`Copy ticket prefix`,value:e.key,size:`icon-xs`})]}),onSave:t=>a.mutateAsync({projectId:e.id,expectedVersion:e.version,name:t.name,description:t.description}).then(()=>h.success(`Project saved`)),children:(0,X.jsxs)(`p`,{className:`mb-0 text-xs tabular-nums`,children:[(0,X.jsxs)(G,{to:`/projects/$projectId`,params:{projectId:e.id},className:`text-muted-foreground hover:text-foreground`,children:[e.openTickets===0?`No open tickets`:`${e.openTickets} open ${e.openTickets===1?`ticket`:`tickets`}`,e.overdueTickets>0&&(0,X.jsxs)(`span`,{className:`text-(--warning)`,children:[` · `,e.overdueTickets,` overdue`]})]}),` · Created `,(0,X.jsx)(te,{value:e.createdAt})]})})}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(K,{title:`Project access`,description:e.visibility===`workspace`?`Workspace members inherit access from their workspace role.`:`Only members you add and workspace administrators can see this project.`,children:(0,X.jsxs)(M,{label:`Project access`,labelHidden:!0,className:`mb-0 w-56`,value:e.visibility,disabled:!u.canAdmin||a.isPending,onValueChange:t=>{let n=t===`private`?`private`:`workspace`;n!==e.visibility&&a.mutateAsync({projectId:e.id,expectedVersion:e.version,name:e.name,description:e.description,visibility:n}).then(()=>h.success(`Project access updated`)).catch(o)},children:[(0,X.jsx)(y,{value:`workspace`,children:`Everyone in the workspace`}),(0,X.jsx)(y,{value:`private`,children:`Only project members`})]})}),(0,X.jsx)(K,{title:`Workspace`,description:d.active?.name,children:d.active?.role&&(0,X.jsx)(t,{render:(0,X.jsx)(G,{to:`/workspaces/$workspaceId/settings`,params:{workspaceId:e.workspaceId}}),children:`Workspace settings`})})]})]}),(0,X.jsx)(k,{value:`members`,children:(0,X.jsx)(ie,{people:p.data??[],candidates:g.data??p.data??[],pending:l.isPending,loading:p.isPending,error:p.error,canAdmin:u.canAdmin,scope:`project`,onChange:(t,n)=>l.mutateAsync({projectId:e.id,email:t,role:n})})}),(0,X.jsx)(k,{value:`labels`,children:(0,X.jsx)(le,{projectId:e.id,canAdmin:u.canAdmin})})]})})}export{de as ProjectSettings};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$r as e,$t as t,Aa as n,C as r,Cn as i,Dn as a,Dr as o,Ei as s,En as c,Er as l,Fr as u,Gn as d,I as f,Ir as p,Jn as m,Kn as h,L as g,Li as _,Ma as v,Mn as y,Nn as b,P as x,Pi as S,Pr as C,Ra as w,Ri as T,Rr as ee,S as E,Sa as D,Sn as te,Tn as ne,Yn as O,_a as re,_i as k,_n as ie,_r as ae,bi as oe,bn as se,ci as A,cn as j,co as M,cr as N,d as P,di as F,dn as I,en as L,et as R,f as z,g as B,ga as V,gi as ce,gn as le,h as H,hi as U,hn as W,ho as G,in as K,m as q,mi as ue,mr as de,nn as fe,no as J,nr as pe,o as me,oi as he,on as ge,p as _e,qa as ve,rn as ye,s as be,sn as xe,t as Se,tn as Ce,to as we,tr as Te,uo as Ee,ur as De,ut as Oe,v as ke,vn as Ae,vo as je,vr as Me,w as Ne,wi as Pe,wn as Fe,xa as Ie,xi as Y,xn as Le,yi as Re,yn as ze,yr as Be,z as Ve,zi as He}from"./forms-456UbfIC.js";import{n as Ue,t as We}from"./date-picker-lhXxKIlN.js";import{t as Ge}from"./camera-Cv5wKkKn.js";import{t as Ke}from"./CompositeItem-D9KvUNiq.js";import{a as qe,r as Je}from"./instance-BCNvOvYa.js";import{t as Ye}from"./upload-5Wg5ou_Z.js";import{G as Xe,J as Ze,K as Qe,W as $e,Y as et,at as tt,dt as nt,et as rt,nt as it,ot as at,q as ot,rt as st,z as ct}from"./index-Dt8wYIVA.js";import{n as lt,r as ut,t as dt}from"./settings-layout-xR4hrfte.js";import{a as ft,i as X,n as pt,o as mt,r as Z,t as ht}from"./table-BQbZG4BK.js";var gt={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};gt.node;var _t=_(gt),vt={name:`palette`,size:24,node:[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]};vt.node;var yt=_(vt),Q=je(G(),1),bt=Q.createContext(void 0);function xt(e=!1){let t=Q.useContext(bt);if(!t&&!e)throw Error(A(86));return t}Object.keys(ne);function St(e,t){return e.matches(`:disabled`)?!1:!t||e.form===t||e.form===null&&!e.hasAttribute(`form`)}var Ct=Q.createContext(void 0);function wt(){let e=Q.useContext(Ct);if(e===void 0)throw Error(A(63));return e}var Tt=`data-checked`,Et=`data-unchecked`,Dt={...c,checked(e){return e?{[Tt]:``}:{[Et]:``}}},$=re(),Ot=Q.forwardRef(function(t,n){let{checked:r,className:a,defaultChecked:o,"aria-labelledby":s,form:c,id:l,inputRef:d,name:f,nativeButton:m=!1,onCheckedChange:h,readOnly:g=!1,required:_=!1,disabled:v=!1,render:y,uncheckedValue:b,value:x,style:S,...C}=t,{clearErrors:w}=i(),{state:T,setTouched:E,setDirty:D,validityData:ne,setFilled:O,validationMode:re,disabled:k,name:ae,validation:A}=Fe(),{labelId:j}=te(),M=k||v,N=ae??f,P=Q.useRef(null),I=ce(P,d,A.inputRef),R=Q.useRef(null),z=Ae(M,R),B=ee(),V=se({id:l}),H=m?void 0:V,[U,W]=oe({controlled:r,default:!!o,name:`Switch`,state:`checked`});ie(R,B,U,void 0,!M,f),Re(()=>{O(U)},[U,O]),le(U,()=>{w(N),D(U!==ne.initialValue),A.change(U)});let{getButtonProps:G,buttonRef:K}=u({disabled:M,native:m}),q=Le(s,j,P,!m,H,C[`aria-label`]),de={id:m?V:B,role:`switch`,"aria-checked":U,"aria-readonly":g||void 0,"aria-required":_||void 0,"aria-labelledby":q,onFocus(){z(!0)},onBlur(){let e=P.current;e&&!M&&(E(!0),z(!1),re===`onBlur`&&A.commit(e.checked))},onClick(e){if(g||M)return;e.preventDefault();let t=P.current;t&&p(t,e)}},fe={...A.getValidationProps(M),checked:U,disabled:M,form:c,id:H,name:N,required:_,style:N?Ce:L,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,ref:I,onChange(t){if(t.nativeEvent.defaultPrevented)return;if(g){t.preventDefault();return}let n=t.currentTarget.checked,r=he(e,t.nativeEvent);h?.(n,r),!r.isCanceled&&W(n)},onClick(e){e.stopPropagation()},onFocus(){R.current?.focus()},...x===void 0?ue:{value:x}},J=Q.useMemo(()=>({...T,checked:U,disabled:M,readOnly:g,required:_}),[T,U,M,g,_]),pe=F(`span`,t,{state:J,ref:[n,R,K],props:[de,C,G,e=>A.getValidationProps(M,e)],stateAttributesMapping:Dt});return(0,$.jsxs)(Ct.Provider,{value:J,children:[pe,!U&&N&&b!==void 0&&(0,$.jsx)(`input`,{type:`hidden`,form:c,name:N,value:b,disabled:M}),(0,$.jsx)(`input`,{...fe,suppressHydrationWarning:!0})]})}),kt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,o=wt();return F(`span`,e,{state:o,ref:t,stateAttributesMapping:Dt,props:a})});function At({className:e,size:t=`default`,...n}){return(0,$.jsx)(Ot,{"data-slot":`switch`,"data-size":t,className:Y(`peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 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 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50`,e),...n,children:(0,$.jsx)(kt,{"data-slot":`switch-thumb`,className:`pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground`})})}var jt={read:{name:`Read tickets`,description:`View projects, tickets, comments, and attachments.`},write:{name:`Edit tickets`,description:`Create and update tickets, comments, and attachments.`},claim:{name:`Claim work`,description:`Claim, renew, and release ticket ownership.`},admin:{name:`Manage projects`,description:`Change project settings and membership where your role allows it.`}};function Mt(e){try{return JSON.parse(e??`null`)}catch{return null}}function Nt(e){return{permissions:M({kanvil:J(we(ve))}).safeParse(Mt(e.permissions)).data?.kanvil??[],projectIds:M({projectIds:J(Ee())}).safeParse(Mt(e.metadata)).data?.projectIds??[]}}function Pt(){let e=V(),t=m(),[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(null),[u]=(0,Q.useState)(Date.now),f=He({queryKey:[`kanvil`,`credentials`],queryFn:()=>d.request(`/api/v1/credentials`,D)});function p(){a(!1),l(null)}return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(r,{title:`API keys`,description:`Connect scripts, integrations, and agents with access you can revoke.`,action:(0,$.jsx)(q,{label:`Create API key`,variant:`default`,disabled:t.isPending,onClick:()=>a(!0),children:(0,$.jsx)(Pe,{})})}),(0,$.jsx)(z,{error:f.error??t.error}),f.isPending?(0,$.jsx)(B,{}):f.data?.length?(0,$.jsxs)(ht,{"aria-label":`API keys`,mobileLayout:`rows`,children:[(0,$.jsx)(ft,{children:(0,$.jsxs)(mt,{children:[(0,$.jsx)(X,{children:`Name`}),(0,$.jsx)(X,{children:`Access`}),(0,$.jsx)(X,{children:`Projects`}),(0,$.jsx)(X,{children:`Expires`}),(0,$.jsx)(X,{children:(0,$.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,$.jsx)(pt,{children:f.data.map(r=>{let i=Nt(r),a=!!r.expiresAt&&new Date(r.expiresAt).getTime()<=u,o=i.projectIds.map(e=>t.data?.find(t=>t.id===e)?.name??`Unavailable project`);return(0,$.jsxs)(mt,{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)(qe,{className:`size-4`})}),(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`strong`,{className:`block wrap-anywhere font-medium`,children:r.name||`Untitled key`}),(0,$.jsxs)(`code`,{className:`text-xs text-muted-foreground`,children:[r.start,`…`]})]}),(a||!r.enabled)&&(0,$.jsx)(x,{variant:`secondary`,children:a?`Expired`:`Disabled`})]})}),(0,$.jsx)(Z,{"data-label":`Access`,className:`max-w-72 whitespace-normal`,children:(0,$.jsx)(`span`,{className:`text-sm`,children:i.permissions.length===1&&i.permissions[0]===`read`?`Read only`:i.permissions.map(e=>jt[e].name).join(`, `)||`Custom`})}),(0,$.jsx)(Z,{"data-label":`Projects`,className:`max-w-64 whitespace-normal`,children:o.join(`, `)||`No project access`}),(0,$.jsx)(Z,{"data-label":`Expires`,className:`whitespace-nowrap text-muted-foreground`,children:r.expiresAt?n(r.expiresAt):`Never`}),(0,$.jsx)(Z,{children:(0,$.jsx)(be,{label:`Revoke API key`,icon:(0,$.jsx)(it,{}),danger:!0,description:`Revoke ${r.name??`this API key`}? Connections using it will immediately lose access.`,onConfirm:async()=>{await d.request(`/api/v1/credentials/${encodeURIComponent(r.id)}`,w,{method:`DELETE`}),await e.invalidateQueries({queryKey:[`kanvil`,`credentials`]})}})})]},r.id)})})]}):(0,$.jsx)(P,{title:`No API keys`,icon:qe,className:`py-16`,children:(0,$.jsx)(`p`,{className:`mb-0 max-w-sm text-center text-sm text-muted-foreground`,children:`Create a key when a script, integration, or agent needs access to your projects.`})}),(0,$.jsx)(ke,{busy:o,title:c?`API key created`:`Create API key`,open:i,onOpenChange:e=>{e||p()},children:c?(0,$.jsx)(Ft,{value:c,onDone:p}):(0,$.jsx)(Lt,{pending:o,setPending:s,projects:t.data??[],loading:t.isPending,onCancel:p,onCreated:async t=>{l(t),await e.invalidateQueries({queryKey:[`kanvil`,`credentials`]})}})})]})}function Ft({value:e,onDone:t}){let[n,r]=(0,Q.useState)(!1),[i,o]=(0,Q.useState)();return(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`p`,{children:`Copy this key now. You won’t be able to see it again.`}),(0,$.jsx)(H,{label:`New API key`,value:e.key,readOnly:!0,className:`font-mono text-xs`,onFocus:e=>e.target.select()}),(0,$.jsx)(z,{error:i}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,$.jsxs)(a,{onClick:()=>{y(e.key).then(()=>r(!0)).catch(o)},children:[n?(0,$.jsx)(S,{}):(0,$.jsx)(s,{}),n?`Copied`:`Copy API key`]}),(0,$.jsx)(a,{variant:`default`,onClick:t,children:`Done`})]})]})}function It({scope:e,checked:n,onChange:r}){let i=(0,Q.useId)(),a=jt[e];return(0,$.jsxs)(fe,{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)(t,{id:i,checked:n,onCheckedChange:r}),(0,$.jsxs)(ye,{children:[(0,$.jsx)(ge,{htmlFor:i,children:a.name}),(0,$.jsx)(K,{children:a.description})]})]})}function Lt({projects:e,loading:t,onCreated:n,onCancel:r,pending:i,setPending:o}){let s=Te(),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}}),[f,p]=(0,Q.useState)(e.length===1&&e[0]?[e[0].id]:[]),[m,h]=(0,Q.useState)([`read`]),[g,_]=(0,Q.useState)(()=>{let e=new Date;return e.setDate(e.getDate()+90),e}),[v,y]=(0,Q.useState)(),[b,x]=(0,Q.useState)(`read`),[S,C]=(0,Q.useState)(``),w=e.filter(e=>`${e.name} ${e.key} ${c.get(e.workspaceId)??``}`.toLowerCase().includes(S.toLowerCase()));async function T(e){e.preventDefault(),o(!0),y(void 0);try{await n(await d.request(`/api/v1/credentials`,Ie,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:new FormData(e.currentTarget).get(`name`),projectIds:f,scopes:m,expiresIn:Ue(g)})}))}catch(e){y(e)}finally{o(!1)}}return t?(0,$.jsx)(B,{}):e.length?(0,$.jsx)(`form`,{onSubmit:e=>{T(e)},children:(0,$.jsxs)(j,{disabled:i,children:[(0,$.jsx)(H,{label:`Key name`,name:`name`,required:!0,maxLength:100,placeholder:`e.g. Release automation`,autoFocus:!0}),(0,$.jsxs)(j,{className:`gap-2`,children:[(0,$.jsx)(xe,{variant:`label`,children:`Project access`}),e.length>6&&(0,$.jsx)(E,{label:`Find project`,value:S,onChange:C,className:`mb-2`}),(0,$.jsxs)(`div`,{className:`max-h-44 overflow-y-auto rounded-md border px-3 py-1`,children:[w.map(e=>(0,$.jsx)(me,{label:e.name,description:`${e.key} · ${c.get(e.workspaceId)??`Workspace`}`,checked:f.includes(e.id),onCheckedChange:t=>p(n=>t?[...n,e.id]:n.filter(t=>t!==e.id))},e.id)),w.length===0&&(0,$.jsx)(`p`,{className:`my-4 text-sm text-muted-foreground`,children:`No matching projects`})]}),(0,$.jsx)(K,{children:`Your existing project role still limits what this key can do.`})]}),(0,$.jsxs)(Ne,{label:`Access level`,value:b,onValueChange:e=>{let t=e??`read`;x(t),t!==`custom`&&h(t===`read`?[`read`]:t===`write`?[`read`,`write`]:[`read`,`write`,`claim`])},children:[(0,$.jsx)(R,{value:`read`,children:`Read only`}),(0,$.jsx)(R,{value:`write`,children:`Read and write`}),(0,$.jsx)(R,{value:`automation`,children:`Read, write, and claim work`}),(0,$.jsx)(R,{value:`custom`,children:`Custom permissions`})]}),b===`custom`&&(0,$.jsx)(j,{className:`gap-0`,children:ve.map(e=>(0,$.jsx)(It,{scope:e,checked:m.includes(e),onChange:t=>h(n=>t?[...n,e]:n.filter(t=>t!==e))},e))}),(0,$.jsx)(We,{label:`Expires on`,value:g,onChange:e=>{e&&_(e)},bounds:{from:l,to:u}}),(0,$.jsx)(_e,{error:v,pending:i,submitLabel:`Create API key`,pendingLabel:`Creating…`,submitDisabled:!f.length||!m.length,onCancel:r})]})}):(0,$.jsxs)(P,{title:`Choose a project first`,className:`py-8`,children:[(0,$.jsx)(`p`,{children:`API keys need access to at least one project.`}),(0,$.jsx)(a,{render:(0,$.jsx)(ct,{to:`/`}),children:`Go to projects`})]})}function Rt(){let e=V(),t=O(),n=h.useSession(),i=(0,Q.useRef)(null),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(),[u,f]=(0,Q.useState)(),[p,m]=(0,Q.useState)(``);async function g(){await Promise.all([n.refetch(),e.invalidateQueries({queryKey:[`kanvil`]})])}async function _(e){s(!0),l(void 0),m(``);try{await d.request(`/api/v1/profile/photo`,Je,e?{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(await b(e))}:{method:`DELETE`}),await g(),m(e?`Photo updated`:`Photo removed`)}catch(e){l(e)}finally{s(!1)}}return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(r,{title:`Profile`}),(0,$.jsx)(dt,{name:t.name,nameLabel:`Display name`,withDescription:!1,canEdit:!0,pending:o,error:u,editLabel:`Edit profile`,media:(0,$.jsx)(pe,{name:t.name,image:t.image,className:`size-16 text-xl`}),onSave:async({name:e})=>{f(void 0),s(!0);try{let t=await h.updateUser({name:e});if(t.error)throw Error(t.error.message);await g(),m(`Profile saved`)}catch(e){throw f(e),e}finally{s(!1)}},children:(0,$.jsx)(`p`,{className:`mb-0 text-sm break-all text-muted-foreground`,children:t.email})}),(0,$.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center gap-2`,children:[(0,$.jsxs)(a,{disabled:o,onClick:()=>i.current?.click(),children:[(0,$.jsx)(Ge,{}),`Change photo`]}),t.image&&(0,$.jsxs)(a,{variant:`ghost`,disabled:o,onClick:()=>{_()},children:[(0,$.jsx)(it,{}),`Remove photo`]}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`PNG, JPEG, or WebP`})]}),(0,$.jsx)(W,{ref:i,type:`file`,accept:`image/png,image/jpeg,image/webp`,className:`hidden`,"aria-label":`Profile photo file`,onChange:e=>{let t=e.currentTarget.files?.[0];t&&_(t),e.currentTarget.value=``}}),(0,$.jsx)(z,{error:c}),p&&(0,$.jsx)(`p`,{role:`status`,className:`mt-4 mb-0 text-sm text-muted-foreground`,children:p})]})}function zt({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 Bt({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:Y(`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:Y(`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)(zt,{palette:e.light,clip:`url(#${i}-light)`}),(0,$.jsx)(zt,{palette:e.dark,clip:`url(#${i}-dark)`})]}):(0,$.jsx)(zt,{palette:e[t]})]})}var Vt=`data-checked`,Ht=`data-unchecked`,Ut={checked(e){return e?{[Vt]:``}:{[Ht]:``}},...l,...c},Wt=Q.createContext(void 0);function Gt(){return Q.useContext(Wt)}var Kt=Q.createContext(void 0);function qt(){let e=Q.useContext(Kt);if(e===void 0)throw Error(A(52));return e}var Jt=Q.forwardRef(function(t,n){let{render:r,className:i,disabled:a=!1,readOnly:o=!1,required:s=!1,"aria-labelledby":c,value:l,inputRef:d,nativeButton:f=!1,id:m,style:h,...g}=t,_=Gt(),{disabled:v,readOnly:y,required:b,form:x,checkedValue:S,touched:w=!1,validation:T,name:E,setCheckedValue:D=U,setTouched:ne=U,registerInputRef:O=U}=_??{},{setTouched:re,setFilled:k,state:ie,disabled:ae}=Fe(),oe=ze(),{labelId:A,getDescriptionProps:j}=te(),M=ae||oe.disabled||v||a,N=y||o,P=b||s,I=x,R=_?S===l:l===``,z=Q.useRef(null),B=Ae(M,z),V=Q.useRef(null),le=T?.registerInput,H=Q.useCallback(e=>le?.(e,{controlRef:z,value:void 0}),[le]),W=ce(d,V,O,H);Re(()=>{V.current?.checked&&k(!0)},[k]),Re(()=>{V.current&&O(M&&R?null:V.current)},[R,M,O]);let G=ee(),K=se({id:m}),q=f?void 0:K,de={role:`radio`,"aria-checked":R,"aria-labelledby":Le(c,A,V,!f,q,g[`aria-label`]),[C]:R?``:void 0,id:f?K:G,onKeyDown(e){e.key===`Enter`&&e.preventDefault()},onClick(e){if(e.defaultPrevented||M||N)return;e.preventDefault();let t=V.current;t&&p(t,e)},onFocus(e){B(!0),!(e.defaultPrevented||M||N||!w)&&(V.current?.click(),ne(!1))},onBlur(){_||B(!1)}},{getButtonProps:fe,buttonRef:J}=u({disabled:M,native:f,composite:!1}),pe={type:`radio`,ref:W,form:I,id:q,name:E,tabIndex:-1,style:E?Ce:L,"aria-hidden":!0,...l===void 0?ue:{value:Oe(l)},disabled:M,checked:R,required:P,readOnly:N,onChange(t){if(t.nativeEvent.defaultPrevented||M||N||l===void 0)return;let n=he(e,t.nativeEvent);D(l,n),!n.isCanceled&&re(!0)},onClick(e){e.stopPropagation()},onFocus(){z.current?.focus()}},me=Q.useMemo(()=>({...ie,required:P,disabled:M,readOnly:N,checked:R}),[ie,M,N,R,P]),ge=me,_e=_!==void 0,ve=[n,z,J],ye=[de,g,fe,j,T?e=>T.getValidationProps(M,e):ue],be=F(`span`,t,{enabled:!_e,state:me,ref:ve,props:ye,stateAttributesMapping:Ut});return(0,$.jsxs)(Kt.Provider,{value:ge,children:[_e?(0,$.jsx)(Ke,{tag:`span`,render:r,className:i,style:h,state:me,refs:ve,props:ye,stateAttributesMapping:Ut}):be,(0,$.jsx)(`input`,{...pe,suppressHydrationWarning:!0})]})}),Yt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=qt(),c=s.checked,{mounted:l,transitionStatus:u,setMounted:d}=Me(c),f={...s,transitionStatus:u},p=Q.useRef(null),m=a||l,h=F(`span`,e,{ref:[t,p],state:f,props:o,stateAttributesMapping:Ut});return Be({batch:!0,enabled:!c,open:c,ref:p,onComplete(){c||d(!1)}}),m?h:null}),Xt=[ae],Zt=Q.forwardRef(function(e,t){let{render:n,className:r,disabled:a,readOnly:s,required:l,onValueChange:u,value:d,defaultValue:f,form:p,name:m,inputRef:h,id:g,style:_,...v}=e,{setTouched:y,setFocused:b,validationMode:x,name:S,disabled:C,state:w,validation:T,setDirty:E,setFilled:D,validityData:ne}=Fe(),{labelId:O}=te(),{clearErrors:re,elementRef:ae}=i(),se=xt(!0),A=C||a,j=S??m,M=ee(g),[N,P]=oe({controlled:d,default:f,name:`RadioGroup`,state:`value`}),[F,I]=Q.useState(!1),L=k((e,t)=>{u?.(e,t),!t.isCanceled&&P(e)}),R=T.getInputControl,z=Q.useMemo(()=>({get current(){return R()}}),[R]),B=Q.useRef(null),V=Q.useRef(null),H=ce(B,h),U=Q.useRef(H),W=k(e=>{(B.current!==e||U.current!==H)&&(U.current=H,H?.(e))});Re(()=>{W(B.current)},[H,W]);let G=k(e=>{if(e){if(!e.disabled){V.current||=e;let t=B.current;(e.checked||t==null||t.disabled)&&W(e)}return()=>{V.current===e&&(V.current=null),B.current===e&&W(null)}}}),K=k(()=>{let e=ae.current;if(!e)return N??null;for(let t of T.registeredInputs.keys())if(t.checked&&St(t,e))return N??null;return null});ie(z,M,N??null,K,!A,m),le(N,()=>{re(j),E(N!==ne.initialValue),D(N!=null),T.change(N);let e=V.current;N==null&&e&&!e.disabled&&W(e)});let q=O??se?.legendId,ue={...w,disabled:A??!1,required:l??!1,readOnly:s??!1},fe=Q.useMemo(()=>({checkedValue:N,disabled:A,form:p,validation:T,name:j,readOnly:s,registerInputRef:G,required:l,setCheckedValue:L,setTouched:I,touched:F}),[N,A,p,T,j,s,G,l,L,I,F]),J={id:g,role:`radiogroup`,"aria-required":l||void 0,"aria-disabled":A||void 0,"aria-readonly":s||void 0,"aria-labelledby":q,onBlur(e){o(e.currentTarget,e.relatedTarget)||(I(!1),y(!0),b(!1),x===`onBlur`&&T.commit(N))},onKeyDownCapture(e){e.key.startsWith(`Arrow`)&&I(!0)}};return(0,$.jsx)(Wt.Provider,{value:fe,children:(0,$.jsx)(de,{render:n,className:r,style:_,state:ue,props:[J,v,e=>T.getValidationProps(A??!1,e)],refs:[t],stateAttributesMapping:c,enableHomeAndEndKeys:!1,modifierKeys:Xt})})});function Qt({className:e,...t}){return(0,$.jsx)(Zt,{"data-slot":`radio-group`,className:Y(`grid w-full gap-2`,e),...t})}function $t({className:e,...t}){return(0,$.jsx)(Jt,{"data-slot":`radio-group-item`,className:Y(`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)(Yt,{"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 en=[`system`,`light`,`dark`];function tn(e){let t=URL.createObjectURL(new Blob([ot([e])],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`${e.id}.kanvil-theme.json`,n.click(),setTimeout(()=>URL.revokeObjectURL(t),1e3)}function nn({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)($t,{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),o=t===`light`?st:at;return(0,$.jsxs)(f,{children:[(0,$.jsxs)(Ve,{render:(0,$.jsx)(a,{variant:`ghost`,"aria-label":`Use ${e.name} ${t} mode`,"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)(Bt,{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)(o,{className:`size-3`})})]})]}),(0,$.jsxs)(g,{children:[`Use for `,t,` mode only`]})]},t)})}),(0,$.jsxs)(`div`,{className:`pointer-events-none relative flex items-center gap-2 px-3 pb-3 pt-2`,children:[(0,$.jsx)(I,{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 rn=e=>e.toLocaleLowerCase().normalize(`NFD`).replace(/\p{Diacritic}/gu,``);function an(){let e=Xe(),t=(0,Q.useRef)(null),[n,r]=(0,Q.useState)(null),[i,a]=(0,Q.useState)(``),[o,c]=(0,Q.useState)(),l={...e.selected,light:e.lightTheme.light,dark:e.darkTheme.dark};function u(e){r({...e,id:`custom-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`,name:`${e.name} copy`})}let d=e.themes.filter(e=>rn(e.name).includes(rn(i)));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:`Color scheme`}),(0,$.jsx)(Qt,{value:e.mode,onValueChange:t=>e.setMode(we(en).parse(t)),"aria-label":`Theme`,className:`grid grid-cols-3 gap-3`,children:en.map(t=>(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)($t,{id:`mode-${t}`,value:t,className:`peer absolute inset-0 z-10 size-full aspect-auto rounded-xl opacity-0`}),(0,$.jsxs)(I,{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)(Bt,{theme:l,mode:t,className:`h-[8.75rem]`}),(0,$.jsx)(`span`,{className:`pb-1`,children:$e[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:`Themes`}),(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center justify-end gap-1`,children:[(0,$.jsx)(E,{label:`Search themes`,placeholder:`Search themes…`,value:i,onChange:a}),(0,$.jsx)(q,{label:`Create theme`,size:`icon-sm`,onClick:()=>u(l),children:(0,$.jsx)(Pe,{})}),(0,$.jsx)(q,{label:`Add theme`,size:`icon-sm`,onClick:()=>t.current?.click(),children:(0,$.jsx)(Ye,{})})]})]}),(0,$.jsx)(W,{ref:t,type:`file`,accept:`application/json,.json`,className:`hidden`,"aria-label":`Import theme file`,onChange:t=>{let n=t.currentTarget.files?.[0];n&&(c(void 0),n.text().then(t=>e.importThemes(Qe(t))).catch(c),t.currentTarget.value=``)}}),(0,$.jsx)(z,{error:o}),(0,$.jsx)(Qt,{"aria-label":`Color theme`,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)(nn,{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)(q,{label:`Duplicate ${t.name}`,className:`size-6`,onClick:()=>u(t),children:(0,$.jsx)(s,{})}),t.id.startsWith(`custom-`)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(q,{label:`Edit ${t.name}`,className:`size-6`,onClick:()=>r(t),children:(0,$.jsx)(tt,{})}),(0,$.jsx)(q,{label:`Export ${t.name}`,className:`size-6`,onClick:()=>tn(t),children:(0,$.jsx)(_t,{})}),(0,$.jsx)(be,{label:`Delete ${t.name}`,description:`Remove ${t.name} from this browser? Light or dark appearances using it will fall back to your base theme.`,danger:!0,icon:(0,$.jsx)(it,{}),onConfirm:async()=>e.remove(t.id)})]})]})},t.id))}),d.length===0&&(0,$.jsx)(`p`,{role:`status`,className:`mt-4`,children:`No matching themes`})]}),(0,$.jsx)(ke,{title:`Custom theme`,open:!!n,onOpenChange:e=>{e||r(null)},children:n&&(0,$.jsx)(sn,{initial:n,onSaved:t=>{e.save(t),a(``),r(null)}})})]})}var on={background:`Background`,foreground:`Text`,sidebar:`Sidebar`,primary:`Accent`,primaryForeground:`Accent text`};function sn({initial:e,onSaved:t}){let[n,r]=(0,Q.useState)(e),[i,o]=(0,Q.useState)();return(0,$.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),o(void 0);try{t(et(n))}catch(e){o(e)}},children:[(0,$.jsx)(H,{label:`Theme 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:$e[e]}),(0,$.jsx)(Bt,{theme:n,mode:e}),(0,$.jsx)(`div`,{className:`mt-4 space-y-3`,children:Ze.keyof().options.map(t=>(0,$.jsx)(H,{label:`${$e[e]} ${on[t].toLowerCase()}`,type:`color`,value:n[e][t],onChange:i=>r({...n,[e]:{...n[e],[t]:i.target.value}})},t))})]},e))}),(0,$.jsx)(z,{error:i}),(0,$.jsx)(a,{type:`submit`,variant:`default`,className:`mt-4`,children:`Save theme`})]})}var cn=[{id:`account`,label:`Profile & security`,icon:rt},{id:`appearance`,label:`Appearance`,icon:yt},{id:`credentials`,label:`API keys`,icon:qe},{id:`notifications`,label:`Notifications`,icon:nt}];function ln({section:e,onSectionChange:t}){let n=He({queryKey:[`info`],queryFn:()=>d.request(`/api/v1/info`,v)}),i=He({queryKey:[`accounts`],queryFn:async()=>{let e=await h.listAccounts();if(e.error)throw Error(e.error.message);return e.data}}),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(),[u,f]=(0,Q.useState)(!1);async function p(e){e.preventDefault(),l(void 0);let t=new FormData(e.currentTarget);if(t.get(`next`)!==t.get(`confirm`))l(Error(`The new passwords do not match.`));else{f(!0);try{let e=await h.changePassword({currentPassword:Se(t,`current`),newPassword:Se(t,`next`),revokeOtherSessions:!0});if(e.error)throw Error(e.error.message);s(!1),N.success(`Password updated. Other sessions signed out.`)}catch(e){l(e)}finally{f(!1)}}}return(0,$.jsxs)(ut,{title:`Settings`,value:e,onChange:t,sections:cn,children:[(0,$.jsxs)(De,{value:`account`,children:[(0,$.jsx)(Rt,{}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(r,{title:`Sign-in & security`}),(0,$.jsx)(lt,{title:`Local password`,description:`Changing your password signs out your other sessions.`,children:(0,$.jsx)(a,{onClick:()=>{l(void 0),s(!0)},children:`Change password`})}),n.data?.oidc&&(0,$.jsx)(lt,{title:n.data.oidc.name,description:i.data?.some(e=>e.providerId===`oidc`)?`Use this identity provider to sign in to the same account.`:`Link your account before signing in through this provider.`,children:i.data?.some(e=>e.providerId===`oidc`)?(0,$.jsx)(x,{variant:`secondary`,children:`Linked`}):(0,$.jsxs)(a,{disabled:u,onClick:()=>{f(!0),l(void 0),h.linkSocial({provider:`oidc`,callbackURL:window.location.href}).then(e=>{if(e.error)throw Error(e.error.message)}).catch(l).finally(()=>f(!1))},children:[`Link `,n.data.oidc.name]})}),!o&&(0,$.jsx)(z,{error:c}),(0,$.jsx)(z,{error:i.error??n.error})]}),(0,$.jsx)(ke,{title:`Change password`,open:o,onOpenChange:s,busy:u,children:(0,$.jsxs)(`form`,{onSubmit:e=>{p(e)},children:[(0,$.jsx)(H,{label:`Current password`,name:`current`,type:`password`,autoComplete:`current-password`,required:!0}),(0,$.jsx)(H,{label:`New password`,name:`next`,type:`password`,autoComplete:`new-password`,required:!0,minLength:12,maxLength:128}),(0,$.jsx)(H,{label:`Confirm new password`,name:`confirm`,type:`password`,autoComplete:`new-password`,required:!0,minLength:12,maxLength:128}),(0,$.jsx)(_e,{error:c,pending:u,submitLabel:`Change password`,onCancel:()=>s(!1)})]})})]}),(0,$.jsx)(De,{value:`appearance`,children:(0,$.jsx)(an,{})}),(0,$.jsx)(De,{value:`credentials`,children:(0,$.jsx)(Pt,{})}),(0,$.jsx)(De,{value:`notifications`,children:(0,$.jsx)(un,{pushAvailable:n.data?.push??!1})})]})}function un({pushAvailable:e}){let t=V(),n=d.notificationPreferences(),i=He(n),a=T({mutationFn:d.setNotificationPreferences,networkMode:`always`,retry:!1,onSuccess:e=>t.setQueryData(n.queryKey,e)});return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(r,{title:`Notifications`}),(0,$.jsx)(z,{error:i.error??a.error}),i.isPending?(0,$.jsx)(B,{}):i.data&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(lt,{title:`Inbox`,description:`Updates to tickets you follow appear in Kanvil.`,children:(0,$.jsx)(At,{"aria-label":`Subscribed ticket updates in Inbox`,checked:a.isPending?a.variables.inApp:i.data.inApp,disabled:a.isPending,onCheckedChange:e=>a.mutate({...i.data,inApp:e})})}),(0,$.jsx)(lt,{title:`Push notifications`,description:e?`Send updates to devices you’ve registered.`:`Push delivery is not enabled on this instance.`,children:(0,$.jsx)(At,{"aria-label":`Push notifications on registered devices`,checked:a.isPending?a.variables.push??!1:i.data.push,disabled:a.isPending||!e,onCheckedChange:e=>a.mutate({inApp:i.data?.inApp??!0,push:e})})})]})]})}export{ln as AccountSettings};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Dn as e,T as t,_a as n,b as r,dr as i,et as a,f as o,fr as s,h as c,ho as l,lr as u,m as d,n as f,vo as p,w as m,xi as h}from"./forms-456UbfIC.js";import{a as g,at as _,c as v,i as y,n as b,r as x,w as S}from"./index-Dt8wYIVA.js";var C=p(l(),1),w=n();function T({title:e,value:t,onChange:n,sections:o,children:c}){let l=S(1024);return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(r,{title:e}),(0,w.jsxs)(u,{orientation:l?`horizontal`:`vertical`,value:t,onValueChange:e=>n(String(e)),className:`grid min-w-0 items-start grid-cols-1 gap-5 lg:grid-cols-[160px_minmax(0,1fr)] lg:gap-9`,children:[l&&(0,w.jsx)(m,{label:`${e} section`,labelHidden:!0,className:`mb-0`,value:t,onValueChange:e=>{e&&n(e)},children:o.map(e=>(0,w.jsxs)(a,{value:e.id,children:[(0,w.jsx)(e.icon,{className:`size-4`}),e.label]},e.id))}),(0,w.jsx)(i,{hidden:l,variant:`line`,"aria-label":`${e} sections`,className:l?`hidden`:`h-fit! w-full self-start flex-col items-stretch justify-start p-0`,children:o.map(e=>(0,w.jsxs)(s,{value:e.id,className:`h-8 flex-none justify-start gap-2 px-3 text-left lg:w-full`,children:[(0,w.jsx)(e.icon,{}),e.label]},e.id))}),(0,w.jsx)(`div`,{className:`settings @container mx-0 max-w-5xl min-w-0 [&_form]:max-w-none [&_p]:text-sm [&_p]:text-muted-foreground [&_section]:border-t [&_section]:py-5 [&_section:first-child]:border-0 [&_section:first-child]:pt-0 [&>[data-slot=tabs-content]>section:first-child]:border-0 [&>[data-slot=tabs-content]>section:first-child]:pt-0`,children:c})]})]})}function E({title:e,description:t,children:n,compact:r=!1}){return(0,w.jsxs)(b,{className:h(`setting-row rounded-none border-x-0 border-t-0 border-b-border px-0`,r?`flex-nowrap py-2`:`py-3.5 @max-[28rem]:flex-col @max-[28rem]:items-stretch`),children:[(0,w.jsxs)(y,{className:r?`min-w-0 gap-0.5`:void 0,children:[(0,w.jsx)(v,{className:r?`line-clamp-none max-w-full`:void 0,children:e}),t&&(0,w.jsx)(g,{className:h(`line-clamp-none max-w-xl whitespace-normal`,r&&`m-0 text-xs`),children:t})]}),n&&(0,w.jsx)(x,{className:r?`shrink-0`:`@max-[28rem]:justify-start`,children:n})]})}function D({name:n,description:r,nameLabel:i=`Name`,withDescription:a=!0,canEdit:s,version:l,onSave:u,pending:p=!1,error:m,editLabel:g=`Edit`,media:v,badges:y,children:b}){let[x,S]=(0,C.useState)(null),T=x!==null&&x.version!==l,E=()=>S(null);return(0,w.jsxs)(`div`,{className:`flex flex-wrap items-start gap-5`,children:[v,x?(0,w.jsxs)(`form`,{className:`min-w-0 flex-1 basis-60 [&_[data-slot=field-label]]:sr-only`,onKeyDown:f,onSubmit:e=>{e.preventDefault(),u({name:x.name,description:x.description}).then(E).catch(()=>{})},children:[(0,w.jsx)(c,{label:i,value:x.name,onChange:e=>S({...x,name:e.target.value}),onKeyDown:e=>{e.key===`Escape`&&E()},required:!0,maxLength:120,autoFocus:!0,className:`text-base font-semibold`}),a&&(0,w.jsx)(t,{label:`Description`,value:x.description,onChange:e=>S({...x,description:e.target.value}),onKeyDown:e=>{e.key===`Escape`&&E()},maxLength:5e3,rows:3,placeholder:`Add a description`,className:`field-sizing-content`}),T&&(0,w.jsx)(`p`,{role:`alert`,className:`mt-2 mb-0 text-xs`,children:`This changed elsewhere. Cancel and start again.`}),(0,w.jsxs)(`div`,{className:`mt-3 flex items-center gap-2`,children:[(0,w.jsx)(e,{type:`submit`,variant:`default`,size:`sm`,disabled:p||T,children:p?`Saving…`:`Save`}),(0,w.jsx)(e,{size:`sm`,disabled:p,onClick:E,children:`Cancel`})]}),(0,w.jsx)(o,{error:m})]}):(0,w.jsxs)(`div`,{className:`min-w-0 flex-1 basis-60`,children:[(0,w.jsxs)(`h2`,{className:`mb-1 flex flex-wrap items-center gap-1.5 text-base`,children:[n,y]}),a&&(0,w.jsx)(`p`,{className:h(`max-w-xl whitespace-pre-wrap`,b?`mb-2`:`mb-0`),children:r||`No description`}),b]}),s&&!x&&(0,w.jsx)(d,{label:g,disabled:p,onClick:()=>S({name:n,description:r??``,version:l}),children:(0,w.jsx)(_,{})})]})}export{E as n,T as r,D as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ticket-editor-Chg1lDuU.js","assets/forms-456UbfIC.js","assets/date-picker-lhXxKIlN.js","assets/CompositeItem-D9KvUNiq.js","assets/popover-BWk65ByY.js","assets/rotate-ccw-BLeWpuu1.js","assets/index-Dt8wYIVA.js","assets/index-CVzq9BMC.css","assets/ticket-tags-cbwQ93Gt.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{Aa as e,Ai as t,An as n,At as r,B as i,Ba as a,Bt as o,C as s,Cr as c,Ct as l,Di as u,Dn as d,Dt as f,E as p,Ft as m,Ga as h,Gn as g,Hn as _,Hr as v,Li as y,Mi as b,Mn as x,Mt as S,N as C,Ni as ee,O as w,Oa as T,Oi as E,Ot as D,P as O,Pi as k,Qn as A,Qt as j,Rr as M,Rt as te,St as ne,T as re,Tr as ie,Wa as ae,Xt as oe,Yn as se,Yr as ce,Zn as N,Zt as le,_ as P,_a as ue,_t as de,b as fe,bt as pe,ci as F,cr as I,d as me,di as he,dr as ge,dt as _e,et as ve,f as L,fr as ye,g as be,gt as xe,h as Se,hn as Ce,ho as we,ht as Te,it as Ee,ji as De,jn as Oe,ka as ke,kt as Ae,lr as je,m as R,mt as Me,n as Ne,o as Pe,oi as Fe,ot as Ie,p as z,pr as Le,qt as Re,rt as ze,s as B,t as V,ur as Be,v as H,va as Ve,vo as He,vt as Ue,w as We,wi as Ge,x as U,xi as W,xt as Ke,yi as qe,yr as Je,yt as Ye,zi as G,zt as Xe}from"./forms-456UbfIC.js";import{r as Ze,t as Qe}from"./date-picker-lhXxKIlN.js";import{t as $e}from"./ellipsis-CN74O_EP.js";import{t as et}from"./upload-5Wg5ou_Z.js";import{B as tt,M as nt,P as rt,Q as it,R as at,a as ot,at as st,c as ct,ct as lt,dt as ut,ft as dt,i as K,j as ft,k as pt,l as mt,lt as ht,n as q,nt as gt,o as J,pt as _t,r as vt,s as yt,st as bt,z as xt}from"./index-Dt8wYIVA.js";import{t as St}from"./ticket-tags-cbwQ93Gt.js";import{TicketEditor as Ct,c as wt,n as Tt,o as Et,r as Y,s as Dt,u as Ot}from"./ticket-editor-Chg1lDuU.js";import{t as kt}from"./list-order-1UoOT5nR.js";var At={name:`archive-restore`,size:24,node:[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h2`,key:`tvwodi`}],[`path`,{d:`M20 8v11a2 2 0 0 1-2 2h-2`,key:`1gkqxj`}],[`path`,{d:`m9 15 3-3 3 3`,key:`1pd0qc`}],[`path`,{d:`M12 12v9`,key:`192myk`}]]};At.node;var jt=y(At),Mt={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};Mt.node;var Nt=y(Mt),Pt={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};Pt.node;var Ft=y(Pt),It={name:`git-branch-plus`,size:24,node:[[`path`,{d:`M6 3v12`,key:`qpgusn`}],[`path`,{d:`M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z`,key:`1d02ji`}],[`path`,{d:`M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z`,key:`chk6ph`}],[`path`,{d:`M15 6a9 9 0 0 0-9 9`,key:`or332x`}],[`path`,{d:`M18 15v6`,key:`9wciyi`}],[`path`,{d:`M21 18h-6`,key:`139f0c`}]]};It.node;var Lt=y(It),Rt={name:`send`,size:24,node:[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]};Rt.node;var zt=y(Rt),Bt={name:`unlink`,size:24,node:[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]};Bt.node;var Vt=y(Bt);function X(e,t,n,r){return{left:e,top:t,right:n,bottom:r,x:e,y:t,width:n-e,height:r-t}}function Ht(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}}function Ut(e){let t=[],n,r=1/0,i=1/0,a=-1/0,o=-1/0;for(let s of Array.from(e).sort((e,t)=>e.top-t.top)){if(r=Math.min(r,s.left),i=Math.min(i,s.top),a=Math.max(a,s.right),o=Math.max(o,s.bottom),!n||s.top-n.top>n.height/2)t.push(Ht(s));else{let e=t[t.length-1];e.left=Math.min(e.left,s.left),e.right=Math.max(e.right,s.right),e.bottom=Math.max(e.bottom,s.bottom),e.width=e.right-e.left,e.height=e.bottom-e.top}n=s}return{lines:t,fallback:X(r,i,a,o)}}function Wt(e,t,n){return e.findIndex(e=>t>e.left-2&&t<e.right+2&&n>e.top-2&&n<e.bottom+2)}function Gt(e){return X(e.left,e.top,e.right,e.bottom)}function Kt(e,t,n){let{lines:r}=Ut(e.getClientRects());if(r.length<2)return;let i=Wt(r,t,n);return{x:t,y:n,lineIndex:i===-1?void 0:i,element:e}}function qt(e,t,n){let{lines:r,fallback:i}=Ut(e.getClientRects());if(r.length<2)return null;let a=n?.x,o=n?.y,s=t[0];if(n?.lineIndex!=null&&r[n.lineIndex])return Gt(r[n.lineIndex]);if(a!=null&&o!=null){let e=Wt(r,a,o);if(e!==-1)return Gt(r[e])}if(r.length===2&&r[0].left>r[1].right&&a!=null&&o!=null)return i;if(s===`t`||s===`b`){let e=r[0],t=r[r.length-1],n=s===`t`?e:t;return X(n.left,e.top,n.right,t.bottom)}let c=s===`l`,l=r[0].left,u=r[0].right,d=c?1/0:-1/0,f=r[0],p=r[0];for(let e of r){l=Math.min(l,e.left),u=Math.max(u,e.right);let t=c?e.left:e.right;c&&t<d||!c&&t>d?(d=t,f=e,p=e):t===d&&(p=e)}return X(l,f.top,u,p.bottom)}function Jt(e){return`contextElement`in e&&e.contextElement?e.contextElement:v(e)?e:void 0}function Yt(e,t){function n(t){Xt(e,t.currentTarget,t.clientX,t.clientY)}function r(e){t||n(e)}return{onFocus(){e.current=void 0},onMouseEnter:r,onMouseMove:r}}function Xt(e,t,n,r){let i=Kt(t,n,r);return e.current=i,i}function Zt(e){return{name:`inline`,async fn(t){let n=t.elements.reference;if(typeof n?.getClientRects!=`function`)return{};let r=Jt(n),i=e.current,a=i?.element===n||i?.element===r?i:void 0,o=qt(n,t.placement,a);if(!o||typeof t.platform.getElementRects!=`function`)return{};let s=await t.platform.getElementRects({reference:{contextElement:r,getBoundingClientRect(){return o}},floating:t.elements.floating,strategy:t.strategy});return t.rects.reference.x===s.reference.x&&t.rects.reference.y===s.reference.y&&t.rects.reference.width===s.reference.width&&t.rects.reference.height===s.reference.height?{}:{reset:{rects:s}}}}}var Z=He(we(),1),Qt=Z.createContext(void 0);function Q(e){let t=Z.useContext(Qt);if(t===void 0&&!e)throw Error(F(50));return t}var $t={...Ye,instantType:e=>e.instantType,adaptiveOrigin:e=>e.adaptiveOrigin,closeDelay:e=>e.closeDelay},en=class extends oe{constructor(e,t,n){let r=new pe;super(tn(e,r,t,n),nn(r),$t)}setOpen=(e,t)=>{let{inlineRectCoordsRef:n}=this.context;l(this,e,t,{onBeforeDispatch(){let r=t.event;e&&t.reason===`trigger-hover`&&t.trigger&&`clientX`in r&&`clientY`in r&&n.current?.element!==t.trigger&&Xt(n,t.trigger,r.clientX,r.clientY)}})}};function tn(e,t,n,r=!1){return{...Ue(t,n,r),instantType:void 0,adaptiveOrigin:void 0,closeDelay:300,...e}}function nn(e){return{popupRef:Z.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e,inlineRectCoordsRef:{current:void 0}}}var $=ue();function rn(e){let{open:t,defaultOpen:n=!1,onOpenChange:i,onOpenChangeComplete:a,actionsRef:o,handle:s,triggerId:c,defaultTriggerId:l=null,children:u}=e,d=r((e,r)=>new en({open:n,openProp:t,activeTriggerId:l,triggerIdProp:c},e,r));d.useControlledProp(`openProp`,t),d.useControlledProp(`triggerIdProp`,c),d.useContextCallback(`onOpenChange`,i),d.useContextCallback(`onOpenChangeComplete`,a);let p=d.useState(`open`),m=d.useState(`activeTriggerId`),h=d.useState(`mounted`),g=d.useState(`payload`);f(d,{closeOnActiveTriggerUnmount:!0});let{forceUnmount:_}=D(p,d,()=>{d.context.inlineRectCoordsRef.current=void 0});qe(()=>{p&&(m??d.set(`payload`,void 0))},[d,m,p]),Z.useImperativeHandle(o,()=>({unmount:_,close:()=>d.setOpen(!1,Fe(ce))}),[_,d]);let v=p||h||s!=null;return(0,$.jsxs)(Qt.Provider,{value:d,children:[s&&(0,$.jsx)(ne,{handle:s,store:d}),v&&(0,$.jsx)(an,{store:d}),typeof u==`function`?u({payload:g}):u]})}function an({store:e}){let t=e.useState(`floatingRootContext`),n=m(t);return Ae(e,{activeTriggerProps:n.reference,inactiveTriggerProps:n.trigger,popupProps:n.floating}),null}var on=le(function(e){return Q(!0)?(0,$.jsx)(rn,{...e}):(0,$.jsx)(Xe,{children:(0,$.jsx)(rn,{...e})})}),sn=Z.createContext(void 0);function cn(){let e=Z.useContext(sn);if(e===void 0)throw Error(F(48));return e}var ln=Z.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return Q().useState(`mounted`)||n?(0,$.jsx)(sn.Provider,{value:n,children:(0,$.jsx)(i,{ref:t,...r})}):null}),un=j(function(e,t){let{render:n,className:r,delay:i,closeDelay:a,id:o,payload:s,handle:c,style:l,...u}=e,d=Q(!0),f=de(c)??d;if(!f)throw Error(F(89));let p=M(o),m=f.useState(`isTriggerActive`,p),h=f.useState(`isOpenedByTrigger`,p),g=f.useState(`floatingRootContext`),_=f.context.inlineRectCoordsRef,v=Z.useRef(null),y=i??600,b=a??300,{registerTrigger:x,isMountedByThisTrigger:C}=S(p,v,f,{payload:s,closeDelay:b}),ee=Me(g,{mouseOnly:!0,move:!1,handleClose:_e(),delay:()=>({open:y,close:b}),triggerElementRef:v,isActiveTrigger:m,isClosing:()=>f.select(`transitionStatus`)===`ending`}),w=xe(g,{delay:y}),T={open:h},E=f.useState(`triggerProps`,C),D=Yt(_,h);return he(`a`,e,{state:T,ref:[t,x,v],props:[ee,w.reference,E,D,{id:p},u],stateAttributesMapping:ie})}),dn=Z.createContext(void 0);function fn(){let e=Z.useContext(dn);if(e===void 0)throw Error(F(49));return e}var pn=Z.forwardRef(function(e,t){let{render:n,className:r,anchor:i,positionMethod:a=`absolute`,side:s=`bottom`,align:c=`center`,sideOffset:l=0,alignOffset:u=0,collisionBoundary:d=`clipping-ancestors`,collisionPadding:f=5,arrowPadding:p=5,sticky:m=!1,disableAnchorTracking:h=!1,collisionAvoidance:g=Re,style:_,...v}=e,y=Q(),b=cn(),x=o(),S=y.useState(`open`),C=y.useState(`mounted`),ee=y.useState(`floatingRootContext`),w=y.useState(`instantType`),T=y.useState(`transitionStatus`),E=y.useState(`adaptiveOrigin`),D=y.context.inlineRectCoordsRef,O=Ie({anchor:i,floatingRootContext:ee,positionMethod:a,mounted:C,side:s,sideOffset:l,align:c,alignOffset:u,arrowPadding:p,collisionBoundary:d,collisionPadding:f,sticky:m,disableAnchorTracking:h,keepMounted:b,nodeId:x,collisionAvoidance:g,adaptiveOrigin:E,inline:Zt(D)}),k=O.update;qe(()=>{S&&C&&k()},[S,C,k]);let A={open:S,side:O.side,align:O.align,anchorHidden:O.anchorHidden,instant:w},j=ze(e,A,{styles:O.positionerStyles,transitionStatus:T,props:v,refs:[t,y.useStateSetter(`positionerElement`)],hidden:!C,inert:!S});return(0,$.jsx)(dn.Provider,{value:O,children:(0,$.jsx)(te,{id:x,children:j})})}),mn=Z.forwardRef(function(e,t){let{className:n,render:r,style:i,...a}=e,o=Q(),{side:s,align:l}=fn(),u=o.useState(`open`),d=o.useState(`instantType`),f=o.useState(`transitionStatus`),p=o.useState(`popupProps`),m=o.useState(`floatingRootContext`),h=o.useState(`closeDelay`);return Je({open:u,ref:o.context.popupRef,onComplete(){u&&o.context.onOpenChangeComplete?.(!0)}}),Te(m,{closeDelay:h}),he(`div`,e,{state:{open:u,side:s,align:l,instant:d,transitionStatus:f},ref:[t,o.context.popupRef,o.useStateSetter(`popupElement`)],props:[Ke,p,Ee(f),a],stateAttributesMapping:c})});function hn({...e}){return(0,$.jsx)(on,{"data-slot":`hover-card`,...e})}function gn({...e}){return(0,$.jsx)(un,{"data-slot":`hover-card-trigger`,...e})}function _n({className:e,side:t=`bottom`,sideOffset:n=4,align:r=`center`,alignOffset:i=4,...a}){return(0,$.jsx)(ln,{"data-slot":`hover-card-portal`,children:(0,$.jsx)(pn,{align:r,alignOffset:i,side:t,sideOffset:n,className:`isolate z-50`,children:(0,$.jsx)(mn,{"data-slot":`hover-card-content`,className:W(`z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground border border-border/70 shadow-float outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...a})})})}function vn({projectId:e,ticketId:t,ticket:n,className:r,children:i}){let[a,o]=(0,Z.useState)(!1),s=G({...g.query(`get_ticket`,{projectId:e,ticketId:t}),enabled:a}),c=s.data?.ticket;return(0,$.jsxs)(hn,{open:a,onOpenChange:o,children:[(0,$.jsx)(gn,{delay:400,render:(0,$.jsx)(xt,{to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:e,ticketId:t},className:W(`ticket-link text-foreground hover:text-primary`,r)}),children:i??(n?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:n.key}),` · `,n.title]}):t)}),(0,$.jsx)(_n,{align:`start`,className:`w-80`,children:c?(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(`span`,{className:`font-mono`,children:c.key}),(0,$.jsx)(p,{property:`status`,value:c.status}),(0,$.jsx)(p,{property:`priority`,value:c.priority,iconOnly:!0})]}),(0,$.jsx)(`p`,{className:`m-0 text-[13px] leading-5 font-medium wrap-anywhere`,children:c.title}),c.labels.length>0&&(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:c.labels.map(e=>(0,$.jsx)(St,{tag:e},e))})]}):(0,$.jsx)(`p`,{className:`m-0 text-xs text-muted-foreground`,children:s.error?`Preview unavailable`:`Loading…`})})]})}var yn=(0,Z.lazy)(()=>it(()=>import(`./ticket-editor-Chg1lDuU.js`).then(e=>({default:e.TicketEditor})),__vite__mapDeps([0,1,2,3,4,5,6,7,8])));function bn({ticket:e}){let t=A(e.projectId),n=G(g.query(`list_relations`,{projectId:e.projectId,ticketId:e.id})),[r,i]=(0,Z.useState)(!1),[o,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(null),[f,m]=(0,Z.useState)(0),[_,v]=(0,Z.useState)(),y=G({...g.query(`get_ticket`,{projectId:e.projectId,ticketId:e.parentId??e.id}),enabled:!!e.parentId}),b=G(g.query(`list_tickets`,{projectId:e.projectId,parentId:e.id,archived:`include`,limit:20,offset:f})),x=N(`add_relation`),S=N(`remove_relation`);return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(s,{compact:!0,title:`Relationships`,action:t.canWrite&&(0,$.jsxs)(ft,{children:[(0,$.jsx)(at,{render:(0,$.jsx)(R,{label:`Add relationship`}),children:(0,$.jsx)(Ge,{})}),(0,$.jsxs)(nt,{align:`end`,className:`w-48`,children:[(0,$.jsxs)(rt,{onClick:()=>{x.reset(),v(void 0),u(null),i(!0)},children:[(0,$.jsx)(Vt,{}),`Link existing ticket`]}),(0,$.jsxs)(rt,{onClick:()=>c(!0),children:[(0,$.jsx)(Lt,{}),`New child ticket`]})]})]})}),e.parentId&&(0,$.jsxs)(q,{size:`xs`,className:`px-0`,children:[(0,$.jsx)(Ot,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,$.jsxs)(K,{className:`min-w-0`,children:[(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Parent`}),(0,$.jsx)(vn,{projectId:e.projectId,ticketId:e.parentId,ticket:y.data?.ticket})]})]}),b.data&&(b.data.total>0||f>0)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`h3`,{className:`mt-3 mb-1 text-xs text-muted-foreground`,children:[`Child tickets`,` `,(0,$.jsxs)(`span`,{className:`tabular-nums`,children:[b.data.items.filter(e=>e.status===`done`).length,`/`,b.data.total]})]}),(0,$.jsx)(J,{className:`gap-0`,children:b.data.items.map(t=>(0,$.jsxs)(q,{size:`xs`,className:`px-0`,children:[(0,$.jsx)(p,{property:`status`,value:t.status,iconOnly:!0}),(0,$.jsx)(K,{className:`min-w-0`,children:(0,$.jsx)(vn,{projectId:e.projectId,ticketId:t.id,ticket:t})})]},t.id))}),(b.data.total>20||f>0)&&(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,$.jsx)(d,{size:`sm`,disabled:!f,onClick:()=>m(Math.max(0,f-20)),children:`Previous children`}),(0,$.jsx)(d,{size:`sm`,disabled:f+20>=b.data.total,onClick:()=>m(f+20),children:`Next children`})]})]}),(0,$.jsx)(J,{className:`gap-0`,children:n.data?.map(n=>{let r=h(n,e.id);return(0,$.jsxs)(q,{size:`xs`,className:`px-0`,children:[(0,$.jsxs)(K,{className:`min-w-0 gap-0`,children:[(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r.label}),(0,$.jsx)(vn,{projectId:e.projectId,ticketId:r.id,children:r.title})]}),t.canWrite&&(0,$.jsx)(vt,{children:(0,$.jsx)(R,{size:`icon-sm`,label:`Remove ${n.type} relationship`,onClick:()=>S.mutate({projectId:e.projectId,relationId:n.id}),children:(0,$.jsx)(Vt,{})})})]},n.id)})}),!e.parentId&&!b.data?.total&&n.data?.length===0&&(0,$.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:`No relationships`}),(0,$.jsx)(H,{title:`Add relationship`,open:r,onOpenChange:i,busy:x.isPending,children:(0,$.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.currentTarget);l&&(v(void 0),x.mutateAsync({projectId:e.projectId,ticketId:e.id,targetId:l,...a(n.get(`type`))}).then(()=>i(!1)).catch(v))},children:[(0,$.jsx)(We,{label:`Relationship`,name:`type`,children:ae.map(e=>(0,$.jsx)(ve,{value:e.value,children:e.label},e.value))}),(0,$.jsx)(Dt,{projectId:e.projectId,label:`Ticket`,value:l,onChange:u,exclude:[e.id],allowClear:!1}),(0,$.jsx)(z,{error:_??x.error,pending:x.isPending,submitLabel:`Add relationship`,submitDisabled:!l,onCancel:()=>i(!1)})]})}),(0,$.jsx)(H,{size:`composer`,title:`New child of ${e.key}`,open:o,onOpenChange:c,children:o&&(0,$.jsx)(Z.Suspense,{fallback:(0,$.jsx)(be,{}),children:(0,$.jsx)(yn,{projectId:e.projectId,initial:{parentId:e.id,labels:e.labels,scopes:e.scopes},onSaved:()=>c(!1)})})}),(0,$.jsx)(L,{error:n.error??S.error??y.error??b.error})]})}var xn=Le(`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 Sn({className:e,orientation:t,...n}){return(0,$.jsx)(`div`,{role:`group`,"data-slot":`button-group`,"data-orientation":t,className:W(xn({orientation:t}),e),...n})}function Cn({ticket:e}){let[t,n]=(0,Z.useState)(0),[r,i]=(0,Z.useState)(``),a=G(g.query(`list_comments`,{projectId:e.projectId,ticketId:e.id,offset:t})),o=N(`add_comment`),s=A(e.projectId);return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(L,{error:a.error??o.error}),a.data?.total===0&&(0,$.jsx)(me,{title:`No comments yet`,icon:bt,className:`py-8`}),(0,$.jsx)(`div`,{className:`divide-y`,children:a.data?.items.map(e=>(0,$.jsx)(wn,{comment:e},e.id))}),((a.data?.total??0)>50||t>0)&&(0,$.jsxs)(Sn,{className:`mt-5 justify-end`,children:[(0,$.jsx)(d,{size:`sm`,disabled:!t,onClick:()=>n(Math.max(0,t-50)),children:`Previous comments`}),(0,$.jsx)(d,{size:`sm`,disabled:t+50>=(a.data?.total??0),onClick:()=>n(t+50),children:`Next comments`})]}),s.canWrite&&(0,$.jsx)(`form`,{onKeyDown:Ne,className:`mt-6`,onSubmit:t=>{t.preventDefault(),o.mutateAsync({projectId:e.projectId,ticketId:e.id,body:r}).then(()=>i(e=>e===r?``:e)).catch(()=>{})},children:(0,$.jsx)(wt,{label:`Comment`,value:r,onChange:i,rows:3,required:!0,maxLength:5e4,placeholder:`Write a comment…`,footer:(0,$.jsxs)(d,{type:`submit`,variant:`default`,disabled:o.isPending||!r.trim(),children:[o.isPending?(0,$.jsx)(C,{}):(0,$.jsx)(zt,{}),o.isPending?`Posting…`:`Comment`,(0,$.jsx)(mt,{"aria-hidden":`true`,className:`ml-1 hidden border-transparent bg-primary-foreground/20 text-primary-foreground shadow-none sm:inline-flex`,children:`⌘↵`})]})})})]})}function wn({comment:e}){let t=se(),n=A(e.projectId),r=N(`update_comment`),i=N(`delete_comment`),[a,o]=(0,Z.useState)(!1),[s,c]=(0,Z.useState)(e.body),[l,u]=(0,Z.useState)(e.version),f=e.actorId===t.id;return(0,$.jsxs)(`article`,{className:`group/comment relative py-4 animate-in fade-in-0 duration-200`,children:[(0,$.jsxs)(`div`,{className:`mb-3 flex min-h-8 flex-wrap items-center gap-x-3 gap-y-1 pr-20 text-xs text-muted-foreground`,children:[(0,$.jsx)(`strong`,{className:`text-foreground`,children:(0,$.jsx)(_,{projectId:e.projectId,actorId:e.actorId,avatar:!0})}),(0,$.jsx)(U,{value:e.createdAt}),e.updatedAt!==e.createdAt&&(0,$.jsx)(`span`,{children:`Edited`})]}),a?(0,$.jsx)(`form`,{onKeyDown:Ne,onSubmit:t=>{t.preventDefault(),r.mutateAsync({projectId:e.projectId,commentId:e.id,expectedVersion:l,body:s}).then(()=>o(!1)).catch(()=>{})},children:(0,$.jsx)(wt,{label:`Edit comment`,value:s,onChange:c,rows:4,required:!0,maxLength:5e4,footer:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(d,{size:`sm`,disabled:r.isPending,onClick:()=>o(!1),children:`Cancel`}),(0,$.jsxs)(d,{type:`submit`,size:`sm`,variant:`default`,disabled:r.isPending||!s.trim(),children:[r.isPending?(0,$.jsx)(C,{}):null,`Save`]})]})})}):(0,$.jsx)(P,{children:e.body}),!a&&n.canWrite&&(f||t.admin)&&(0,$.jsxs)(`div`,{className:`absolute top-3 right-0 flex items-center gap-1 opacity-0 transition-opacity group-hover/comment:opacity-100 focus-within:opacity-100 max-md:opacity-100`,children:[(0,$.jsx)(R,{label:`Edit comment`,size:`icon-sm`,onClick:()=>{c(e.body),u(e.version),o(!0)},children:(0,$.jsx)(st,{})}),(0,$.jsx)(B,{label:`Delete comment`,icon:(0,$.jsx)(gt,{}),danger:!0,description:`Permanently delete this comment?`,onConfirm:()=>i.mutateAsync({projectId:e.projectId,commentId:e.id,expectedVersion:e.version})})]}),(0,$.jsx)(L,{error:r.error})]})}var Tn=new Intl.NumberFormat(void 0,{style:`unit`,unit:`kilobyte`,maximumFractionDigits:1});function En({ticket:e}){let t=G(g.query(`list_attachments`,{projectId:e.projectId,ticketId:e.id})),n=N(`upload_attachment`),r=N(`delete_attachment`),i=A(e.projectId),a=(0,Z.useRef)(null),[o,c]=(0,Z.useState)(),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(!1);async function p(t){if(t.length){c(void 0),f(!0);try{if(t.some(e=>e.size>1e7))throw Error(`Choose files no larger than 10 MB each.`);for(let r of t)await n.mutateAsync({projectId:e.projectId,ticketId:e.id,name:r.name,contentType:r.type||`application/octet-stream`,data:await Oe(r)});I.success(t.length===1?`File attached`:`${t.length} files attached`)}catch(e){c(e)}finally{f(!1)}}}return(0,$.jsxs)(`section`,{onDragOver:e=>{i.canWrite&&(e.preventDefault(),u(!0))},onDragLeave:()=>u(!1),onDrop:e=>{e.preventDefault(),u(!1),i.canWrite&&p(Array.from(e.dataTransfer.files))},className:W(`rounded-lg transition-colors`,l&&`bg-primary/5 ring-2 ring-primary/40 ring-offset-4 ring-offset-background`),children:[(0,$.jsx)(s,{compact:!0,title:`Attachments`,action:i.canWrite&&(0,$.jsx)(R,{label:d?`Uploading…`:`Attach file`,size:`icon-sm`,disabled:d,onClick:()=>a.current?.click(),children:d?(0,$.jsx)(C,{}):(0,$.jsx)(et,{})})}),!t.isPending&&!t.data?.length&&(0,$.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:i.canWrite?`No attachments. Drop files here.`:`No attachments`}),(0,$.jsx)(J,{className:`gap-0`,children:t.data?.map(t=>(0,$.jsxs)(q,{size:`xs`,className:`rounded-none border-x-0 border-t-0 border-b-border px-0 animate-in fade-in-0 duration-200`,children:[(0,$.jsx)(yt,{children:(0,$.jsx)(Ft,{className:`size-4 text-muted-foreground`})}),(0,$.jsxs)(K,{className:`min-w-0 gap-0`,children:[(0,$.jsx)(ct,{className:`line-clamp-none max-w-full text-xs font-normal wrap-anywhere`,children:(0,$.jsx)(`a`,{className:`hover:text-primary`,href:`/api/v1/projects/${e.projectId}/attachments/${t.id}/content`,"aria-label":t.name,"aria-describedby":`attachment-size-${t.id}`,download:!0,children:t.name})}),(0,$.jsx)(ot,{id:`attachment-size-${t.id}`,className:`m-0 text-[11px]`,children:Tn.format(t.size/1e3)})]}),i.canWrite&&(0,$.jsx)(vt,{children:(0,$.jsx)(B,{label:`Remove attachment`,icon:(0,$.jsx)(gt,{}),description:`Remove ${t.name}?`,onConfirm:()=>r.mutateAsync({projectId:e.projectId,attachmentId:t.id})})})]},t.id))}),(0,$.jsx)(Ce,{ref:a,type:`file`,multiple:!0,className:`hidden`,"aria-label":`File (up to 10 MB)`,disabled:d,onChange:e=>{let t=Array.from(e.currentTarget.files??[]);e.currentTarget.value=``,p(t)}}),(0,$.jsx)(L,{error:o??t.error??r.error})]})}var Dn={passed:De,failed:E,pending:u,reported:t};function On({ticket:e}){let n=A(e.projectId),r=G(g.query(`list_evidence`,{projectId:e.projectId,ticketId:e.id})),i=N(`add_evidence`),[a,o]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)();return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(s,{title:`Evidence`,description:`Links and outcomes reported by the people and integrations working on this ticket.`,action:n.canWrite&&(0,$.jsx)(R,{label:`Add evidence`,onClick:()=>{i.reset(),l(void 0),o(!0)},children:(0,$.jsx)(Ge,{})})}),!r.isPending&&!r.data?.length&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No evidence attached`}),(0,$.jsx)(J,{className:`gap-0 divide-y`,children:r.data?.map(n=>{let r=Dn[n.outcome]??t;return(0,$.jsxs)(q,{className:`items-start rounded-none px-0 py-4`,children:[(0,$.jsx)(yt,{variant:`icon`,children:(0,$.jsx)(r,{className:W(n.outcome===`passed`&&`text-[var(--success)]`,n.outcome===`failed`&&`text-destructive`)})}),(0,$.jsxs)(K,{className:`min-w-0 gap-1.5`,children:[(0,$.jsxs)(ct,{className:`line-clamp-none max-w-full wrap-anywhere`,children:[(0,$.jsxs)(`a`,{href:n.url,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline`,children:[n.title,(0,$.jsx)(ht,{className:`size-3`,"aria-hidden":`true`})]}),(0,$.jsx)(O,{variant:`outline`,className:`ml-2 capitalize`,children:n.kind}),(0,$.jsx)(O,{variant:`outline`,className:W(`ml-1 capitalize`,n.outcome===`passed`&&`text-[var(--success)]`,n.outcome===`failed`&&`text-destructive`),"data-outcome":n.outcome,children:n.outcome})]}),n.commit&&(0,$.jsx)(`code`,{className:`w-fit rounded bg-muted px-1.5 py-0.5 font-mono text-[11px] break-all`,children:n.commit}),n.note&&(0,$.jsx)(P,{children:n.note}),(0,$.jsxs)(ot,{className:`m-0 text-xs`,children:[(0,$.jsx)(_,{projectId:e.projectId,actorId:n.actorId}),` ·`,` `,(0,$.jsx)(U,{value:n.createdAt})]})]})]},n.id)})}),(0,$.jsx)(H,{title:`Add evidence`,open:a,onOpenChange:o,busy:i.isPending,children:(0,$.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.currentTarget);i.mutateAsync({projectId:e.projectId,ticketId:e.id,kind:T.shape.kind.parse(n.get(`kind`)),title:V(n,`title`),url:V(n,`url`),commit:V(n,`commit`)||null,outcome:T.shape.outcome.parse(n.get(`outcome`)),note:V(n,`note`)}).then(()=>{o(!1),I.success(`Evidence added`)}).catch(l)},children:[(0,$.jsx)(Se,{label:`Title`,name:`title`,required:!0,maxLength:200}),(0,$.jsx)(Se,{label:`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)(We,{label:`Kind`,name:`kind`,children:T.shape.kind.options.map(e=>(0,$.jsx)(ve,{value:e,children:(0,$.jsx)(`span`,{className:`capitalize`,children:e})},e))}),(0,$.jsx)(We,{label:`Reported outcome`,name:`outcome`,children:[`reported`,`pending`,`passed`,`failed`].map(e=>(0,$.jsx)(ve,{value:e,children:(0,$.jsx)(`span`,{className:`capitalize`,children:e})},e))})]}),(0,$.jsx)(Se,{label:`Commit (full hash)`,name:`commit`,pattern:`[a-fA-F0-9]{40,64}`}),(0,$.jsx)(re,{label:`Note`,name:`note`,maxLength:2e4}),(0,$.jsx)(z,{error:c??i.error,pending:i.isPending,submitLabel:`Add evidence`,onCancel:()=>o(!1)})]})}),(0,$.jsx)(L,{error:r.error})]})}function kn({ticket:e}){let[t,n]=(0,Z.useState)(0),r=G(g.query(`list_activity`,{projectId:e.projectId,ticketId:e.id,offset:t}));return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{children:`Activity`}),(0,$.jsx)(L,{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:ke(t)}),(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[(0,$.jsx)(_,{projectId:e.projectId,actorId:t.actorId}),` ·`,` `,(0,$.jsx)(U,{value:t.createdAt})]})]},t.id))}),((r.data?.total??0)>50||t>0)&&(0,$.jsxs)(Sn,{className:`mt-5 justify-end`,children:[(0,$.jsx)(d,{size:`sm`,disabled:!t,onClick:()=>n(Math.max(0,t-50)),children:`Previous activity`}),(0,$.jsx)(d,{size:`sm`,disabled:t+50>=(r.data?.total??0),onClick:()=>n(t+50),children:`Next activity`})]})]})}function An({projectId:t,ticketId:r}){let i=A(t),a=G(g.query(`get_ticket`,{projectId:t,ticketId:r})),o=N(`set_subscription`),[s,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(!1),f=tt(),[m]=(0,Z.useState)(()=>kt(t)),h=m.indexOf(r),v=e=>{let n=h<0?void 0:m[h+e];n&&f({to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:t,ticketId:n}})};n(`j`,()=>v(1),{enabled:!s}),n(`k`,()=>v(-1),{enabled:!s});let y=a.data?.ticket,{change:S,pending:T}=Et(y??{id:r,projectId:t,version:1});if(n(`e`,()=>{i.canWrite&&c(!0)},{enabled:!!y&&!s}),a.isPending)return(0,$.jsx)(be,{});if(!a.data||!y)return a.error instanceof Ve&&a.error.status===404?(0,$.jsxs)(me,{title:`Ticket unavailable`,children:[(0,$.jsx)(`p`,{children:`This ticket was deleted or you no longer have access.`}),(0,$.jsx)(d,{render:(0,$.jsx)(xt,{to:`/projects/$projectId`,params:{projectId:t}}),children:`Back to tickets`})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(L,{error:a.error}),(0,$.jsx)(d,{onClick:()=>{a.refetch()},children:`Retry`})]});let{readiness:E,claim:D,canReleaseClaim:O,subscribed:j}=a.data,M=i.canWrite&&!T;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`article`,{className:`ticket-detail grid w-full grid-cols-[minmax(0,1fr)_280px] gap-x-10 animate-in fade-in-0 duration-200 @max-[850px]:flex @max-[850px]:flex-col [&_section]:border-t [&_section]:py-5`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(fe,{title:(0,$.jsxs)(d,{variant:`ghost`,size:`sm`,className:`-ml-2 text-muted-foreground`,render:(0,$.jsx)(xt,{to:`/projects/$projectId`,params:{projectId:t}}),children:[(0,$.jsx)(Nt,{}),`Tickets`]}),children:(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[h>=0&&(0,$.jsxs)(`div`,{className:`mr-1 flex items-center gap-0.5 text-xs text-muted-foreground tabular-nums`,children:[(0,$.jsx)(R,{label:`Previous ticket`,title:`Previous ticket (K)`,disabled:h===0,onClick:()=>v(-1),children:(0,$.jsx)(b,{})}),(0,$.jsxs)(`span`,{children:[h+1,` / `,m.length]}),(0,$.jsx)(R,{label:`Next ticket`,title:`Next ticket (J)`,disabled:h===m.length-1,onClick:()=>v(1),children:(0,$.jsx)(ee,{})})]}),(0,$.jsx)(R,{label:j?`Unsubscribe`:`Subscribe`,disabled:o.isPending,onClick:()=>{o.mutateAsync({projectId:t,ticketId:y.id,enabled:!j}).then(()=>I.success(j?`Unsubscribed`:`Subscribed to updates`)).catch(w)},children:j?(0,$.jsx)(dt,{}):(0,$.jsx)(ut,{})}),(0,$.jsx)(R,{label:`Copy link`,onClick:()=>{x(new URL(`/projects/${t}/tickets/${y.id}`,location.origin).href).then(()=>I.success(`Link copied`)).catch(w)},children:(0,$.jsx)(lt,{})}),(0,$.jsx)(R,{label:y.archived?`Unarchive ticket`:`Archive ticket`,disabled:!M,onClick:()=>{S({archived:!y.archived}).then(e=>{e&&I.success(y.archived?`Ticket unarchived`:`Ticket archived`)})},children:y.archived?(0,$.jsx)(jt,{}):(0,$.jsx)(_t,{})}),(0,$.jsx)(R,{label:`Edit ticket`,title:`Edit ticket (E)`,disabled:!i.canWrite,onClick:()=>c(!0),children:(0,$.jsx)(st,{})}),(0,$.jsx)(pt,{ticket:y,variant:`dropdown`,onEdit:()=>c(!0),children:(0,$.jsx)(d,{variant:`ghost`,size:`icon`,"aria-label":`Ticket actions`,children:(0,$.jsx)($e,{})})})]})}),(0,$.jsx)(pt,{ticket:y,onEdit:()=>c(!0),children:(0,$.jsxs)(`header`,{className:`ticket-heading`,children:[(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-muted-foreground`,children:[(0,$.jsxs)(d,{variant:`ghost`,size:`xs`,className:`-ml-2 gap-1.5 font-mono text-xs text-muted-foreground`,title:`Copy ticket key`,onClick:()=>{x(y.key).then(()=>{u(!0),setTimeout(()=>u(!1),1500),I.success(`${y.key} copied`)}).catch(w)},children:[y.key,l&&(0,$.jsx)(k,{className:`size-3 text-[var(--success)]`})]}),(0,$.jsx)(p,{property:`status`,value:y.status}),y.archived&&(0,$.jsx)(`strong`,{children:`Archived`}),T&&(0,$.jsx)(C,{className:`size-3.5 text-muted-foreground`})]}),(0,$.jsx)(`h1`,{className:`mt-4 mb-6 max-w-4xl text-2xl leading-snug font-semibold tracking-tight`,children:y.title})]})}),(0,$.jsxs)(`div`,{className:`min-w-0 [&>section:first-child]:border-0 [&>section:first-child]:pt-0`,children:[(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{children:`Description`}),(0,$.jsx)(P,{children:y.description||`_No description_`})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{children:`Acceptance criteria`}),(0,$.jsx)(P,{children:y.acceptanceCriteria||`_No acceptance criteria_`})]})]}),(0,$.jsxs)(je,{defaultValue:`discussion`,className:`mt-8 min-w-0 [&_[data-slot=tabs-content]>section]:border-0 [&_[data-slot=tabs-content]>section]:pt-0`,children:[(0,$.jsxs)(ge,{variant:`line`,className:`mb-5`,children:[(0,$.jsx)(ye,{value:`discussion`,children:`Discussion`}),(0,$.jsx)(ye,{value:`evidence`,children:`Evidence`}),(0,$.jsx)(ye,{value:`activity`,children:`Activity`})]}),(0,$.jsx)(Be,{value:`discussion`,className:`animate-in fade-in-0 duration-150`,children:(0,$.jsx)(Cn,{ticket:y})}),(0,$.jsx)(Be,{value:`evidence`,className:`animate-in fade-in-0 duration-150`,children:(0,$.jsx)(On,{ticket:y})}),(0,$.jsx)(Be,{value:`activity`,className:`animate-in fade-in-0 duration-150`,children:(0,$.jsx)(kn,{ticket:y})})]}),(0,$.jsx)(L,{error:a.error})]}),(0,$.jsxs)(`aside`,{className:`min-w-0 border-l pl-5 @max-[850px]:border-l-0 @max-[850px]:pl-0 [&>section:first-child]:border-0 [&>section:first-child]:pt-0 @max-[850px]:[&>section:first-child]:border-t @max-[850px]:[&>section:first-child]:pt-6 [&_h2]:text-xs [&_h2]:font-medium [&_h2]:text-muted-foreground [&_p]:text-xs [&_ul]:mb-4 [&_ul]:list-disc [&_ul]:pl-4 [&_ul]:text-xs [&_ul]:leading-relaxed [&_ul]:text-muted-foreground`,"aria-label":`Ticket coordination`,children:[(0,$.jsxs)(`section`,{"aria-label":`Properties`,className:`ticket-properties`,children:[(0,$.jsx)(Y,{variant:`row`,property:`status`,projectId:t,value:y.status,disabled:!M,onChange:e=>void S({status:e})}),(0,$.jsx)(Y,{variant:`row`,property:`priority`,projectId:t,value:y.priority,disabled:!M,onChange:e=>void S({priority:e})}),(0,$.jsx)(Y,{variant:`row`,property:`assignee`,projectId:t,value:y.assigneeId,disabled:!M,onChange:e=>void S({assignee:e})}),(0,$.jsx)(Y,{variant:`row`,property:`kind`,projectId:t,value:y.kind,disabled:!M,onChange:e=>void S({kind:e})}),(0,$.jsx)(Y,{variant:`row`,property:`difficulty`,projectId:t,value:y.difficulty,disabled:!M,onChange:e=>void S({difficulty:e})}),(0,$.jsx)(Qe,{variant:`row`,label:`Due date`,placeholder:`No due date`,value:y.dueAt?new Date(y.dueAt):null,disabled:!M,onChange:e=>void S({dueAt:e?Ze(e):null})}),(0,$.jsx)(Tt,{variant:`row`,value:y.labels,disabled:!M,onChange:e=>void S({labels:e})}),(y.scopes.length>0||i.canWrite)&&(0,$.jsx)(Tt,{variant:`row`,kind:`scope`,value:y.scopes,disabled:!M,onChange:e=>void S({scopes:e})}),(0,$.jsxs)(`dl`,{className:`mt-4 grid grid-cols-[80px_minmax(0,1fr)] gap-x-2 gap-y-1.5 border-t pt-4 text-xs [&_dd]:m-0 [&_dd]:min-w-0 [&_dd]:wrap-anywhere [&_dt]:text-muted-foreground`,children:[(0,$.jsx)(`dt`,{children:`Created`}),(0,$.jsxs)(`dd`,{children:[(0,$.jsx)(_,{projectId:t,actorId:y.createdBy}),` · `,(0,$.jsx)(U,{value:y.createdAt})]}),(0,$.jsx)(`dt`,{children:`Updated`}),(0,$.jsx)(`dd`,{children:(0,$.jsx)(U,{value:y.updatedAt})})]})]}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h2`,{children:`Agent readiness`}),(0,$.jsx)(`p`,{className:E.ready?`text-[var(--success)]`:`text-muted-foreground`,children:E.ready?`Ready to claim`:`Not ready to claim`}),(0,$.jsx)(`ul`,{children:E.reasons.map((e,t)=>(0,$.jsx)(`li`,{children:e.message},`${e.code}:${t}`))}),y.holdReason&&(0,$.jsxs)(`p`,{children:[`Hold: `,y.holdReason]}),D&&(0,$.jsxs)(`p`,{children:[`Claimed by `,(0,$.jsx)(`strong`,{children:D.workerId}),` until `,e(D.expiresAt),`.`]}),D&&(0,$.jsx)(jn,{ticket:y,claim:D,canRelease:O,canRecover:i.canAdmin&&E.reasons.some(e=>e.code===`claim_recovery_required`)})]}),(0,$.jsx)(bn,{ticket:y},y.id),(0,$.jsx)(En,{ticket:y})]})]}),(0,$.jsx)(H,{size:`composer`,title:`Edit ${y.key}`,open:s,onOpenChange:c,children:s&&(0,$.jsx)(Ct,{projectId:t,ticket:y,onSaved:()=>c(!1)})})]})}function jn({ticket:e,claim:t,canRelease:n,canRecover:r}){let i=N(`release_claim`),a=N(`recover_claim`),[o,s]=(0,Z.useState)(``),[c,l]=(0,Z.useState)(!1);return(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[n&&(0,$.jsx)(B,{label:`Release my claim`,description:`Release ownership after your worker has stopped writing?`,onConfirm:()=>i.mutateAsync({projectId:e.projectId,ticketId:e.id,claimId:t.id})}),r&&(0,$.jsx)(H,{title:`Recover expired claim`,trigger:`Recover expired claim`,children:(0,$.jsxs)(`form`,{onSubmit:n=>{n.preventDefault(),c&&a.mutate({projectId:e.projectId,ticketId:e.id,claimId:t.id,reason:o,confirmedStopped:!0})},children:[(0,$.jsx)(`p`,{children:`Recovery requires project administrator access and an expired claim. Stop the worker first.`}),(0,$.jsx)(re,{label:`Recovery reason`,required:!0,minLength:10,maxLength:2e3,value:o,onChange:e=>s(e.target.value)}),(0,$.jsx)(Pe,{label:`I have confirmed the worker has stopped`,checked:c,onCheckedChange:e=>l(e)}),(0,$.jsx)(z,{error:a.error,pending:!c,submitLabel:`Recover ownership`,submitDisabled:a.isPending})]})})]})}export{An as TicketDetail};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,D as t,Da as n,Dn as r,E as i,Fa as a,Gn as o,H as s,Ha as c,Li as l,M as u,N as d,O as f,Pi as p,Si as m,T as h,Ta as g,Va as _,Xa as v,Ya as y,Yn as b,Za as x,Zn as S,_ as ee,_a as C,an as te,co as w,cr as ne,dr as T,f as E,fn as D,fr as re,ga as O,h as ie,hn as k,ho as A,j as ae,k as oe,lr as j,mn as se,n as ce,nn as M,nr as N,on as P,pn as le,po as F,so as ue,uo as I,ur as L,vo as de,wa as fe,wi as pe,xi as R,za as me,zi as z}from"./forms-456UbfIC.js";import{r as he,t as ge}from"./date-picker-lhXxKIlN.js";import{t as _e}from"./rotate-ccw-BLeWpuu1.js";import{d as ve,f as ye,h as B,l as be,m as V,p as H,t as xe,tt as Se,u as U,ut as Ce,v as we}from"./index-Dt8wYIVA.js";import{i as W,n as G,t as K}from"./popover-BWk65ByY.js";import{t as q}from"./ticket-tags-cbwQ93Gt.js";var Te={name:`book-open`,size:24,node:[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]};Te.node;var Ee=l(Te),De={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`}]]};De.node;var Oe=l(De),ke={name:`bug`,size:24,node:[[`path`,{d:`M12 20v-9`,key:`1qisl0`}],[`path`,{d:`M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z`,key:`uouzyp`}],[`path`,{d:`M14.12 3.88 16 2`,key:`qol33r`}],[`path`,{d:`M21 21a4 4 0 0 0-3.81-4`,key:`1b0z45`}],[`path`,{d:`M21 5a4 4 0 0 1-3.55 3.97`,key:`5cxbf6`}],[`path`,{d:`M22 13h-4`,key:`1jl80f`}],[`path`,{d:`M3 21a4 4 0 0 1 3.81-4`,key:`1fjd4g`}],[`path`,{d:`M3 5a4 4 0 0 0 3.55 3.97`,key:`1d7oge`}],[`path`,{d:`M6 13H2`,key:`82j7cp`}],[`path`,{d:`m8 2 1.88 1.88`,key:`fmnt4t`}],[`path`,{d:`M9 7.13V6a3 3 0 1 1 6 0v1.13`,key:`1vgav8`}]]};ke.node;var Ae=l(ke),je={name:`circle-user-round`,size:24,node:[[`path`,{d:`M17.925 20.056a6 6 0 0 0-11.851.001`,key:`z69sun`}],[`circle`,{cx:`12`,cy:`11`,r:`4`,key:`1gt34v`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]],aliases:[`user-circle-2`]};je.node;var Me=l(je),Ne={name:`corner-left-up`,size:24,node:[[`path`,{d:`M14 9 9 4 4 9`,key:`1af5af`}],[`path`,{d:`M20 20h-7a4 4 0 0 1-4-4V4`,key:`1blwi3`}]]};Ne.node;var Pe=l(Ne),Fe={name:`flask-conical`,size:24,node:[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]};Fe.node;var Ie=l(Fe),Le={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};Le.node;var Re=l(Le),ze={name:`maximize-2`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]};ze.node;var Be=l(ze),Ve={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`}]]};Ve.node;var He=l(Ve),Ue={name:`sliders-horizontal`,size:24,node:[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]};Ue.node;var We=l(Ue),Ge={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]};Ge.node;var Ke=l(Ge),qe={name:`tag`,size:24,node:[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]};qe.node;var Je=l(qe),Ye={name:`wrench`,size:24,node:[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]};Ye.node;var Xe=l(Ye),Ze=me.create_ticket.input.omit({projectId:!0,requestId:!0}).extend({title:I().default(``)}).parse({}),Qe=w({fields:x.extend({title:I().max(500),parentId:I().nullable(),dueAt:g.nullable().default(null)}),version:ue().int().positive().optional()});function $e(e){return e?{fields:x.strip().parse(e),version:e.version}:{fields:Ze}}var et=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),J=de(A(),1),Y=C();function X({label:e,value:t,onChange:n,placeholder:r,rows:i=5,variant:a=`compact`,maxLength:o=1e5,required:s=!1,footer:c}){let l=(0,J.useId)(),[u,d]=(0,J.useState)(`write`);return(0,Y.jsx)(M,{className:R(`mb-6 [&_[data-slot=tabs-list]]:shrink-0 [&_[data-slot=tabs-trigger]]:text-xs`,a===`compact`&&`[&_textarea]:field-sizing-fixed [&_textarea]:max-h-[28rem]`,a===`document`&&`border-t pt-5 has-[textarea:focus]:border-t-primary has-[textarea:focus]:[&_[data-slot=field-label]]:text-primary`),"data-variant":a,"aria-label":`${e} editor`,children:(0,Y.jsxs)(j,{value:u,onValueChange:e=>d(String(e)),children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsx)(P,{htmlFor:l,children:e}),(0,Y.jsxs)(T,{"aria-label":`${e} editor`,variant:`line`,children:[(0,Y.jsx)(re,{value:`write`,children:`Write`}),(0,Y.jsx)(re,{value:`preview`,children:`Preview`})]})]}),(0,Y.jsx)(L,{value:`write`,children:(0,Y.jsxs)(D,{className:a===`document`?`rounded-none border-0 bg-transparent dark:bg-transparent has-[[data-slot=input-group-control]:focus-visible]:ring-0`:void 0,children:[(0,Y.jsx)(se,{id:l,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=>n(e.target.value),placeholder:r,rows:i,maxLength:o,required:s}),c&&(0,Y.jsx)(le,{align:`block-end`,className:`justify-end border-t py-2`,children:c})]})}),(0,Y.jsxs)(L,{value:`preview`,children:[(0,Y.jsx)(`div`,{className:R(`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,Y.jsx)(ee,{children:t}):(0,Y.jsx)(`p`,{className:`m-0 text-sm text-muted-foreground`,children:`Nothing to preview`})}),c&&(0,Y.jsx)(`div`,{className:`mt-2 flex justify-end`,children:c})]})]})})}function Z({projectId:e,label:n,value:i,onChange:a,exclude:s=[],allowClear:c=!0,variant:l=`field`,placeholder:u=`Choose a ticket`}){let d=(0,J.useId)(),[f,m]=(0,J.useState)(!1),[h,g]=(0,J.useState)(``),_=z({...o.query(`list_tickets`,{projectId:e,q:h,archived:`include`,limit:30}),enabled:f}),v=z({...o.query(`get_ticket`,{projectId:e,ticketId:i??``}),enabled:!!i&&F().safeParse(i).success}),y=_.data?.items.filter(e=>!s.includes(e.id))??[],b=v.data?.ticket??_.data?.items.find(e=>e.id===i),x=(0,Y.jsxs)(K,{open:f,onOpenChange:e=>{m(e),e&&g(``)},children:[(0,Y.jsxs)(W,{id:d,render:(0,Y.jsx)(r,{variant:l===`pill`?`ghost`:`outline`,size:l===`pill`?`sm`:`default`,role:`combobox`,"aria-label":n,className:l===`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:[l===`pill`&&(0,Y.jsx)(Pe,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:l===`pill`?`min-w-0 truncate`:`min-w-0 break-words`,children:b?l===`pill`?b.key:`${b.key} · ${b.title}`:i?`Loading ticket…`:u}),l!==`pill`&&(0,Y.jsx)(Ce,{className:`ml-2 size-3.5 shrink-0 text-muted-foreground`})]}),(0,Y.jsx)(G,{align:`start`,className:`w-[min(420px,var(--available-width))] p-0`,children:(0,Y.jsxs)(U,{shouldFilter:!1,children:[(0,Y.jsx)(H,{"aria-label":`Search ${n.toLowerCase()}`,placeholder:`Search by title or key…`,value:h,onValueChange:g}),(0,Y.jsxs)(B,{children:[c&&(0,Y.jsx)(ye,{children:(0,Y.jsxs)(V,{value:`none`,onSelect:()=>{a(null),m(!1)},children:[`No parent`,!i&&(0,Y.jsx)(p,{className:`ml-auto`})]})}),_.isPending?(0,Y.jsx)(`div`,{role:`status`,className:`px-4 py-6 text-sm text-muted-foreground`,children:`Searching…`}):y.length?(0,Y.jsx)(ye,{children:y.map(e=>(0,Y.jsxs)(V,{value:e.id,className:`items-start py-2`,onSelect:()=>{a(e.id),m(!1)},children:[(0,Y.jsxs)(`span`,{className:`min-w-0`,children:[(0,Y.jsx)(`span`,{className:`mb-1 block font-mono text-[11px] text-muted-foreground`,children:e.key}),(0,Y.jsx)(`span`,{className:`block break-words whitespace-normal`,children:e.title})]}),i===e.id&&(0,Y.jsx)(p,{className:`ml-auto shrink-0`})]},e.id))}):(0,Y.jsx)(`div`,{role:`status`,className:`px-4 py-6 text-center text-sm text-muted-foreground`,children:`No tickets found`}),(0,Y.jsx)(E,{error:_.error})]})]})})]});return l===`pill`?(0,Y.jsxs)(Y.Fragment,{children:[x,(0,Y.jsx)(E,{error:v.error})]}):(0,Y.jsxs)(M,{className:t,children:[(0,Y.jsx)(P,{htmlFor:d,children:n}),x,(0,Y.jsx)(E,{error:v.error})]})}function Q({label:e,value:i,onChange:a,kind:o=`label`}){let s=xe(),[c,l]=(0,J.useState)(!1),u=(0,J.useId)(),[d,f]=(0,J.useState)(``),[p,h]=(0,J.useState)();function g(e=d){e.trim()&&_(et(e))}function _(e){try{a(x.shape.labels.parse([...new Set([...i,...e])])),f(``),h(void 0)}catch(e){h(e)}}return(0,Y.jsxs)(M,{className:t,children:[(0,Y.jsx)(P,{htmlFor:u,children:e}),(0,Y.jsxs)(`div`,{className:`flex min-h-9 flex-wrap items-center gap-1.5 rounded-lg border border-input px-2 py-1 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50`,children:[i.map(t=>(0,Y.jsxs)(q,{tag:t,kind:o,className:`max-w-full gap-1 pr-0.5`,children:[(0,Y.jsx)(`span`,{className:`break-words whitespace-normal`,children:t}),(0,Y.jsx)(r,{size:`icon`,variant:`ghost`,className:`size-7 md:size-5`,"aria-label":`Remove ${e.toLowerCase()} ${t}`,onClick:()=>a(i.filter(e=>e!==t)),children:(0,Y.jsx)(m,{className:`size-3`})})]},t)),(0,Y.jsx)(k,{id:u,value:d,placeholder:i.length?`Add another…`:`Add ${e.toLowerCase()}…`,className:`h-7 min-w-20 flex-1 border-0 bg-transparent px-1 shadow-none focus-visible:ring-0 dark:bg-transparent`,onChange:e=>f(e.target.value),onBlur:()=>g(),onPaste:e=>{let t=e.clipboardData.getData(`text`);t.includes(`,`)&&(e.preventDefault(),f(t),g(t))},onKeyDown:e=>{e.nativeEvent.isComposing||(e.key===`Enter`||e.key===`,`?(e.preventDefault(),g()):e.key===`Backspace`&&!d&&a(i.slice(0,-1)))}}),o===`label`&&!!s.length&&(0,Y.jsxs)(K,{open:c,onOpenChange:l,children:[(0,Y.jsx)(W,{render:(0,Y.jsx)(r,{variant:`ghost`,size:`icon`,"aria-label":`Choose labels`}),children:(0,Y.jsx)(pe,{})}),(0,Y.jsx)(G,{align:`end`,className:`w-[min(20rem,calc(100vw-2rem))] p-0`,children:(0,Y.jsxs)(U,{children:[(0,Y.jsx)(H,{placeholder:`Search labels…`,"aria-label":`Search project labels`}),(0,Y.jsxs)(B,{children:[s.filter(e=>!i.includes(e.name)).map(e=>(0,Y.jsx)(V,{value:e.name,onSelect:()=>{_([e.name]),l(!1)},children:(0,Y.jsx)(q,{tag:e.name,color:e.color})},e.id)),(0,Y.jsx)(ve,{children:`No matching labels`})]})]})})]})]}),!!p&&(0,Y.jsx)(te,{children:n(p)})]})}var tt={status:`Status`,priority:`Priority`,kind:`Kind`,difficulty:`Difficulty`,assignee:`Assignee`},nt={feature:`Feature`,bug:`Bug`,chore:`Chore`,research:`Research`,documentation:`Documentation`},rt={feature:Ke,bug:Ae,chore:Xe,research:Ie,documentation:Ee},it={low:`Low`,med:`Medium`,high:`High`};function at({level:e,className:t}){let n=e===`low`?1:e===`med`?2:e===`high`?3:0;return(0,Y.jsx)(`svg`,{viewBox:`0 0 16 16`,className:R(`size-4 shrink-0`,t),"aria-hidden":`true`,children:[6,10,14].map((e,t)=>(0,Y.jsx)(`rect`,{x:1.5+t*5,y:15-e,width:3.5,height:e,rx:1,fill:`currentColor`,opacity:t<n?1:.2},e))})}function ot({projectId:e,iconOnly:t=!1,...n}){let r=b(),a=z({...o.query(`list_members`,{projectId:e}),enabled:n.property===`assignee`&&!!n.value});switch(n.property){case`status`:return(0,Y.jsx)(i,{property:`status`,value:n.value,iconOnly:t});case`priority`:return(0,Y.jsx)(i,{property:`priority`,value:n.value,iconOnly:t});case`kind`:{let e=rt[n.value];return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,Y.jsx)(e,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),!t&&nt[n.value]]})}case`difficulty`:{let e=n.value;return(0,Y.jsxs)(`span`,{className:R(`inline-flex items-center gap-1.5`,!e&&`text-muted-foreground`),children:[(0,Y.jsx)(at,{level:e,className:R(e&&`text-foreground`)}),!t&&(e?it[e]:`No difficulty`)]})}default:{let e=n.value;if(!e)return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-muted-foreground`,children:[(0,Y.jsx)(Me,{className:`size-3.5`,"aria-hidden":`true`}),!t&&`Unassigned`]});let i=a.data?.find(t=>t.userId===e),o=e===r.id?r.name:i?.name??`Former member`,s=e===r.id?r.image:i?.image;return(0,Y.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5`,title:o,children:[(0,Y.jsx)(N,{name:o,image:s,className:`size-4 text-[8px]`}),!t&&(0,Y.jsx)(`span`,{className:`truncate`,children:e===r.id?`${o} (you)`:o})]})}}}var st={status:()=>v.map(e=>({value:e,label:y[e]})),priority:()=>_.map(e=>({value:e,label:c[e]})),kind:()=>a.map(e=>({value:e,label:nt[e]})),difficulty:()=>[{value:null,label:`No difficulty`},...fe.map(e=>({value:e,label:it[e]}))],assignee:e=>[{value:null,label:`Unassigned`},...e.map(e=>({value:e.userId,label:e.name,keywords:[e.email]}))]};function ct(e,t,n){let r=z({...o.query(`list_members`,{projectId:t}),enabled:n&&e===`assignee`});return st[e](r.data??[])}function lt(e,t){return{status:e=>({property:`status`,value:e}),priority:e=>({property:`priority`,value:e}),kind:e=>({property:`kind`,value:e}),difficulty:e=>({property:`difficulty`,value:e}),assignee:e=>({property:`assignee`,value:e})}[e](t)}function $({property:e,value:t,onChange:n,projectId:i,disabled:a=!1,variant:o=`pill`,iconOnly:s=!1,align:c=`start`,className:l,children:u}){let[d,f]=(0,J.useState)(!1),m=ct(e,i,d||e!==`assignee`),h=tt[e],g=(0,Y.jsx)(W,{disabled:a,render:(0,Y.jsx)(r,{variant:`ghost`,size:o===`cell`?`xs`:`sm`,role:`combobox`,"aria-label":h,"aria-expanded":d,className:R(`max-w-full min-w-0 justify-start font-normal`,o===`cell`&&`-mx-1.5 h-6 px-1.5`,o===`row`&&`h-7 w-full px-2`,o===`pill`&&`h-7 border border-transparent px-2 hover:border-border`,l)}),children:u??(0,Y.jsx)(ot,{...lt(e,t),projectId:i,iconOnly:s})});return(0,Y.jsxs)(K,{open:d,onOpenChange:f,children:[o===`row`?(0,Y.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:h}),g]}):g,(0,Y.jsx)(G,{align:c,className:`w-60 p-0`,children:(0,Y.jsxs)(U,{children:[(0,Y.jsx)(H,{placeholder:`${e===`assignee`?`Assign to`:`Set ${h.toLowerCase()}`}…`,"aria-label":`Search ${h.toLowerCase()}`,autoFocus:!0,onKeyDown:e=>{let r=/^[1-9]$/.test(e.key)?m[Number(e.key)-1]:void 0;!r||e.currentTarget.value||m.length>9||(e.preventDefault(),f(!1),r.value!==t&&n(r.value))}}),(0,Y.jsxs)(B,{children:[m.map((r,a)=>(0,Y.jsxs)(V,{value:r.label,keywords:r.keywords??[],onSelect:()=>{f(!1),r.value!==t&&n(r.value)},children:[(0,Y.jsx)(ot,{...lt(e,r.value),projectId:i}),m.length<=9&&(0,Y.jsx)(`kbd`,{className:`ml-auto text-[10px] text-muted-foreground`,"aria-hidden":`true`,children:a+1}),r.value===t&&(0,Y.jsx)(p,{className:m.length<=9?``:`ml-auto`})]},String(r.value))),(0,Y.jsx)(ve,{children:`No matches`})]})]})})]})}function ut(e){let t=S(`update_ticket`),n=O();return{pending:t.isPending,change:r=>{let{assignee:i,...a}=r,s={...a,...i===void 0?{}:{assigneeId:i}};return n.setQueriesData({queryKey:o.query(`list_tickets`,{projectId:e.projectId}).queryKey.slice(0,3)},t=>t&&{...t,items:t.items.map(t=>t.id===e.id?{...t,...s}:t)}),n.setQueriesData({queryKey:o.query(`get_ticket`,{projectId:e.projectId,ticketId:e.id}).queryKey},e=>e&&{...e,ticket:{...e.ticket,...s}}),t.mutateAsync({projectId:e.projectId,ticketId:e.id,expectedVersion:e.version,changes:s}).catch(e=>{n.invalidateQueries({queryKey:[`kanvil`]}),f(e)})}}}function dt({kind:e=`label`,value:t,onChange:n,variant:i=`pill`,disabled:a=!1,className:o}){let s=e===`label`?`Labels`:`Scopes`,c=i===`pill`?t.slice(0,3):t,l=t.length-c.length,u=(0,Y.jsxs)(W,{disabled:a,render:(0,Y.jsx)(r,{variant:`ghost`,size:`sm`,className:R(`max-w-full min-w-0 justify-start font-normal`,i===`pill`&&`h-7 max-w-96 border border-transparent px-2 hover:border-border`,i===`row`&&`h-auto min-h-7 w-full px-2 py-1`,o),"aria-label":t.length?`Edit ${s.toLowerCase()}: ${t.join(`, `)}`:`Edit ${s.toLowerCase()}`}),children:[i===`pill`&&(0,Y.jsx)(Je,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),t.length===0?(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:i===`pill`?s:`No ${s.toLowerCase()}`}):(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-wrap items-center gap-1`,children:[c.map(t=>(0,Y.jsx)(q,{tag:t,kind:e,className:`max-w-28`,children:(0,Y.jsx)(`span`,{className:`truncate`,children:t})},t)),l>0&&(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`+`,l]})]})]});return(0,Y.jsxs)(K,{children:[i===`row`?(0,Y.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-start gap-2`,children:[(0,Y.jsx)(`span`,{className:`pt-1.5 text-xs text-muted-foreground`,children:s}),u]}):u,(0,Y.jsx)(G,{align:`start`,className:`w-[min(24rem,calc(100vw-2rem))] p-3`,children:(0,Y.jsx)(Q,{label:s,kind:e,value:t,onChange:n})})]})}var ft=`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 pt({projectId:t,ticket:n,initial:i,onSaved:a}){let o=oe(),c=`kanvil:${b().id}:draft:${t}:${n?.id??`new:${i?.parentId??``}`}`,[l]=(0,J.useState)(()=>{let e=$e(n);return i?{...e,fields:{...e.fields,...i}}:e}),[f,p]=(0,J.useState)(()=>{try{let e=Qe.safeParse(JSON.parse(localStorage.getItem(c)??`null`));if(e.success)return e.data}catch{}return l}),g=`kanvil:composer-expanded`,[_,v]=(0,J.useState)(()=>{try{return localStorage.getItem(g)===`1`}catch{return!1}});function y(){v(e=>{try{localStorage.setItem(g,e?`0`:`1`)}catch{}return!e})}let[ee,C]=(0,J.useState)(()=>!!f.fields.acceptanceCriteria),[te,w]=(0,J.useState)(),[T,D]=(0,J.useState)(),[re,O]=(0,J.useState)(!1),k=S(`create_ticket`),A=S(`update_ticket`);function j(e){p(e);try{localStorage.setItem(c,JSON.stringify(e)),D(void 0),O(!0)}catch{D(Error(`This browser cannot save your draft. Keep the editor open until you save.`)),O(!1)}}function se(){try{localStorage.removeItem(c)}catch{}p(l),O(!1)}let M=(e,t)=>j({...f,fields:{...f.fields,[e]:t}}),N=f.fields,P=!!n&&f.version!==n.version,le=JSON.stringify(f.fields)!==JSON.stringify(l.fields),F=k.isPending||A.isPending,ue=N.automationReady||N.scopes.length>0||!!N.holdReason;async function I(e){if(e.preventDefault(),P||F)return;let r=x.parse(N);o?.(!0);try{let e=n?await A.mutateAsync({projectId:t,ticketId:n.id,expectedVersion:f.version??n.version,changes:r}):await k.mutateAsync({projectId:t,...r});try{localStorage.removeItem(c)}catch{}ne.success(n?`${e.key} saved`:`${e.key} created`),a(e)}finally{o?.(!1)}}let L=(0,Y.jsxs)(`div`,{className:`-mt-3 flex flex-wrap items-center gap-1`,"aria-label":`Ticket properties`,children:[(0,Y.jsx)($,{property:`status`,projectId:t,value:N.status,onChange:e=>M(`status`,e)}),(0,Y.jsx)($,{property:`priority`,projectId:t,value:N.priority,onChange:e=>M(`priority`,e)}),(0,Y.jsx)($,{property:`assignee`,projectId:t,value:N.assigneeId,onChange:e=>M(`assigneeId`,e)}),(0,Y.jsx)($,{property:`kind`,projectId:t,value:N.kind,onChange:e=>M(`kind`,e)}),(0,Y.jsx)($,{property:`difficulty`,projectId:t,value:N.difficulty,onChange:e=>M(`difficulty`,e)}),(0,Y.jsx)(dt,{value:N.labels,onChange:e=>M(`labels`,e)}),(0,Y.jsx)(ge,{variant:`pill`,label:`Due date`,placeholder:`Due`,value:N.dueAt?new Date(N.dueAt):null,onChange:e=>M(`dueAt`,e?he(e):null)}),(0,Y.jsx)(Z,{variant:`pill`,label:`Parent ticket`,placeholder:`Parent`,projectId:t,value:N.parentId,onChange:e=>M(`parentId`,e),exclude:n?[n.id]:[]}),(0,Y.jsxs)(we,{size:`sm`,className:R(ft,`gap-1.5`),pressed:N.automationReady,onPressedChange:e=>M(`automationReady`,e),"aria-label":`Ready for agents`,title:`Agents may claim this ticket once requirements, blockers, and ownership allow it`,children:[(0,Y.jsx)(Oe,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),N.automationReady?`Ready for agents`:`Agents`]}),(0,Y.jsxs)(K,{children:[(0,Y.jsx)(W,{render:(0,Y.jsx)(r,{variant:`ghost`,size:`icon-sm`,className:R(`size-7 border border-transparent hover:border-border`,ue&&`text-primary`),"aria-label":`More properties`}),children:(0,Y.jsx)(We,{className:`size-3.5`})}),(0,Y.jsxs)(G,{align:`start`,className:`w-[min(24rem,calc(100vw-2rem))] p-4`,children:[(0,Y.jsx)(Q,{label:`Scopes`,kind:`scope`,value:N.scopes,onChange:e=>M(`scopes`,e)}),(0,Y.jsx)(ie,{label:`Hold reason`,value:N.holdReason??``,maxLength:2e3,placeholder:`Why should work wait?`,onChange:e=>M(`holdReason`,e.target.value||null)}),(0,Y.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:`Claims still depend on requirements, blockers, and current ownership.`})]})]})]});return(0,Y.jsxs)(`form`,{onSubmit:e=>{w(void 0),I(e).catch(w)},onKeyDown:ce,className:`ticket-composer flex min-h-0 flex-1 flex-col`,"data-expanded":_,children:[(0,Y.jsx)(r,{variant:`ghost`,size:`icon-sm`,className:`absolute top-2 right-11 hidden sm:inline-flex`,"aria-label":_?`Restore composer size`:`Expand composer`,"aria-pressed":_,disabled:F,onClick:y,children:_?(0,Y.jsx)(He,{}):(0,Y.jsx)(Be,{})}),(0,Y.jsxs)(`div`,{className:R(`min-h-0 flex-1 overflow-y-auto overscroll-contain`,_&&`lg:grid lg:grid-cols-[minmax(0,1fr)_320px] lg:items-start`),children:[(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-4xl flex-col gap-4 px-5 py-5 sm:px-8`,children:[P&&(0,Y.jsxs)(e,{className:`w-auto`,children:[(0,Y.jsx)(Se,{}),(0,Y.jsx)(u,{children:`This ticket changed.`}),(0,Y.jsxs)(ae,{children:[`Your draft still uses version `,f.version,`; saving will require the current version.`,(0,Y.jsx)(r,{size:`sm`,className:`mt-2`,onClick:()=>j($e(n)),children:`Discard draft and reload`})]})]}),(0,Y.jsx)(E,{error:te??k.error??A.error??T}),(0,Y.jsx)(`div`,{className:`[&_[data-slot=field-label]]:sr-only`,children:(0,Y.jsx)(h,{label:`Title`,rows:1,value:N.title,onChange:e=>M(`title`,e.target.value),required:!0,maxLength:500,autoFocus:!0,placeholder:`Ticket title`,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`})}),!_&&L,(0,Y.jsx)(X,{label:`Description`,value:N.description,onChange:e=>M(`description`,e),rows:8,variant:`document`,placeholder:`Add context, requirements, or a reproduction…`}),ee?(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(X,{label:`Acceptance criteria`,value:N.acceptanceCriteria,onChange:e=>M(`acceptanceCriteria`,e),rows:4,variant:`document`,maxLength:5e4,placeholder:`- [ ] What will show that this is complete?`}),!N.acceptanceCriteria&&(0,Y.jsx)(r,{variant:`ghost`,size:`icon-xs`,className:`absolute top-5 right-24 text-muted-foreground`,"aria-label":`Remove acceptance criteria`,onClick:()=>C(!1),children:(0,Y.jsx)(m,{})})]}):(0,Y.jsxs)(r,{variant:`ghost`,size:`sm`,className:`w-fit text-muted-foreground`,onClick:()=>C(!0),children:[(0,Y.jsx)(Re,{}),`Add acceptance criteria`]})]}),_&&(0,Y.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":`Ticket properties`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)($,{variant:`row`,property:`status`,projectId:t,value:N.status,onChange:e=>M(`status`,e)}),(0,Y.jsx)($,{variant:`row`,property:`priority`,projectId:t,value:N.priority,onChange:e=>M(`priority`,e)}),(0,Y.jsx)($,{variant:`row`,property:`assignee`,projectId:t,value:N.assigneeId,onChange:e=>M(`assigneeId`,e)}),(0,Y.jsx)($,{variant:`row`,property:`kind`,projectId:t,value:N.kind,onChange:e=>M(`kind`,e)}),(0,Y.jsx)($,{variant:`row`,property:`difficulty`,projectId:t,value:N.difficulty,onChange:e=>M(`difficulty`,e)}),(0,Y.jsx)(ge,{variant:`row`,label:`Due date`,placeholder:`No due date`,value:N.dueAt?new Date(N.dueAt):null,onChange:e=>M(`dueAt`,e?he(e):null)}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Agents`}),(0,Y.jsxs)(we,{size:`sm`,className:R(ft,`h-7 justify-start gap-1.5`),pressed:N.automationReady,onPressedChange:e=>M(`automationReady`,e),"aria-label":`Ready for agents`,children:[(0,Y.jsx)(Oe,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),N.automationReady?`Ready for agents`:`Not ready`]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-6 border-t pt-5`,children:[(0,Y.jsx)(Q,{label:`Labels`,value:N.labels,onChange:e=>M(`labels`,e)}),(0,Y.jsx)(Z,{label:`Parent ticket`,projectId:t,value:N.parentId,onChange:e=>M(`parentId`,e),exclude:n?[n.id]:[]}),(0,Y.jsx)(Q,{label:`Scopes`,kind:`scope`,value:N.scopes,onChange:e=>M(`scopes`,e)}),(0,Y.jsx)(ie,{label:`Hold reason`,value:N.holdReason??``,maxLength:2e3,placeholder:`Why should work wait?`,onChange:e=>M(`holdReason`,e.target.value||null)})]})]})]}),(0,Y.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,Y.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,role:`status`,children:[re?`Draft saved on this device`:T?`Draft could not be saved`:``,le&&!P&&(0,Y.jsxs)(r,{variant:`ghost`,size:`xs`,disabled:F,onClick:se,children:[(0,Y.jsx)(_e,{}),`Discard draft`]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(s,{render:(0,Y.jsx)(r,{disabled:F}),children:`Cancel`}),(0,Y.jsxs)(r,{type:`submit`,variant:`default`,disabled:F||P,children:[F?(0,Y.jsx)(d,{}):null,F?`Saving…`:n?`Save ticket`:`Create ticket`,!F&&(0,Y.jsx)(be,{"aria-hidden":`true`,className:`ml-1 hidden border-transparent bg-primary-foreground/20 text-primary-foreground shadow-none sm:inline-flex`,children:`⌘↵`})]})]})]})]})}export{pt as TicketEditor,tt as a,X as c,lt as i,We as l,dt as n,ut as o,$ as r,Z as s,ot as t,Pe as u};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{$i as e,An as t,Bi as n,Ca as r,D as i,Dn as a,E as o,Ea as s,Fi as c,Gi as l,Gn as u,Hi as d,Hn as f,Ii as p,Ja as m,Ji as h,Ki as g,Li as _,N as v,Ni as y,O as b,Pi as x,Qa as S,Qn as ee,S as te,Si as C,Ui as ne,Va as w,Vi as re,Wi as ie,Xa as ae,Xi as T,Ya as oe,Yn as se,Zn as ce,_a as le,ba as ue,ca as E,cr as D,d as de,et as O,f as fe,fa as k,g as pe,ga as A,h as me,ho as he,ln as ge,lo as _e,m as ve,nn as j,o as M,on as ye,p as be,ro as xe,s as Se,ta as Ce,to as we,u as N,ua as Te,uo as Ee,v as De,vo as Oe,w as P,wi as ke,x as Ae,xi as je,zi as Me}from"./forms-456UbfIC.js";import{B as Ne,D as Pe,E as Fe,F as Ie,H as Le,I as Re,L as ze,M as Be,N as Ve,O as He,P as Ue,R as We,T as Ge,U as Ke,V as qe,_ as Je,d as Ye,g as Xe,h as Ze,j as Qe,k as $e,m as et,nt as tt,p as nt,pt as F,u as rt,ut as I,z as it}from"./index-Dt8wYIVA.js";import{i as L,n as R,r as z,t as at}from"./popover-BWk65ByY.js";import{a as ot,i as st,n as ct,o as lt,r as ut,t as dt}from"./table-BQbZG4BK.js";import{n as ft,t as B}from"./ticket-tags-cbwQ93Gt.js";import{TicketEditor as pt,a as mt,i as ht,l as gt,o as V,r as _t,t as vt}from"./ticket-editor-Chg1lDuU.js";import{n as yt}from"./list-order-1UoOT5nR.js";function bt(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}var xt=class extends Ce{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#m(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(t,n){this.#n=t,this.#r=n,e.batch(()=>{let e=this.#i,t=this.#p(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!k(e,n)});(o||s)&&(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(bt(e,n).forEach(e=>{e.destroy()}),bt(n,e).forEach(e=>{e.subscribe(t=>{this.#m(e,t)})})),this.#h()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#p(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){let n=new Set;return t.map((r,i)=>{let a=e[i];return r.defaultedQueryOptions.notifyOnChangeProps?a:r.observer.trackResult(a,e=>{n.has(e)||(n.add(e),t.forEach(t=>{t.observer.trackProp(e)}))})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=Te(this.#a,t(e))),this.#a}return e}#f(){return!this.#r?.combine||this.#i.some((e,t)=>e.options.suspense&&this.#t[t]?.data===void 0)}#p(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new T(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#m(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=this.#t.slice(),this.#t[n]=t,this.#h())}#h(){if(this.hasListeners()){let t=this.#f(),n=this.#a,r=t?n:this.#d(this.#u(this.#t,this.#l),this.#r?.combine);(t||n!==r)&&e.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},H=Oe(he(),1);function St({queries:t,...r},i){let a=A(i),o=h(),s=g(),c=r.subscribed!==!1,u=H.useMemo(()=>t.map(e=>{let t=a.defaultQueryOptions(e);return t._optimisticResults=o?`isRestoring`:c?`optimistic`:void 0,t}),[t,a,o,c]);u.forEach(e=>{n(e);let t=a.getQueryCache().get(e.queryHash);ne(e,s,t)}),l(s);let[f]=H.useState(()=>new xt(a,u,r)),[p,m,_]=f.getOptimisticResult(u,r.combine),v=!o&&c;H.useSyncExternalStore(H.useCallback(t=>v?f.subscribe(e.batchCalls(t)):E,[f,v]),()=>f.getCurrentResult(),()=>f.getCurrentResult()),H.useEffect(()=>{f.setQueries(u,r)},[u,r,f]);let y=p.some((e,t)=>d(u[t],e))?p.flatMap((e,t)=>{let n=u[t];if(n&&d(n,e)){let e=new T(a,n);return re(n,e,s)}return[]}):[];if(y.length>0)throw Promise.all(y);let b=p.find((e,t)=>{let n=u[t];return n&&ie({result:e,errorResetBoundary:s,throwOnError:n.throwOnError,query:a.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(b)throw b.error;return m(_())}var Ct={name:`bookmark-plus`,size:24,node:[[`path`,{d:`M12 7v6`,key:`lw1j43`}],[`path`,{d:`M15 10H9`,key:`o6yqo3`}],[`path`,{d:`M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z`,key:`oz39mx`}]]};Ct.node;var wt=_(Ct),Tt={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`]};Tt.node;var Et=_(Tt);function Dt(e,t){if(Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(let[n,r]of e)if(!t.has(n)||!Object.is(r,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();let n=Ot(e);if(n.length!==Ot(t).length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!Object.is(e[n[r]],t[n[r]]))return!1;return!0}function Ot(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}function kt(e){return At(e)||typeof e==`function`||jt(e)}function At(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function jt(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function Mt(e,t){return e==null?null:kt(e)?H.createElement(e,t):e}function Nt(e){if(`cell`in e&&e.cell){let t=e.cell,n=t.column.columnDef,r=t,i=n;return r.getIsAggregated?.()?Mt(i.aggregatedCell??n.cell,t.getContext()):r.getIsPlaceholder?.()?null:Mt(n.cell,t.getContext())}return`header`in e&&e.header?Mt(e.header.column.columnDef.header,e.header.getContext()):`footer`in e&&e.footer?Mt(e.footer.column.columnDef.footer,e.footer.getContext()):null}function Pt(e){let t=qe(e.source,e.selector,{compare:Dt});return typeof e.children==`function`?e.children(t):e.children}function Ft(e){let t=e;return Object.defineProperty(e,"state",{get(){return e.get()}}),`set`in e&&(t.setState=e.set.bind(e)),t}function It(e){let{createAtom:t,batch:n}=e,r=t(0);return{createOptionsStore:!1,wrapExternalAtoms:!1,addSubscription:()=>{throw Error(`Feature not supported in current reactivity implementation`)},unmount:()=>{throw Error(`Feature not supported in current reactivity implementation`)},schedule:e.schedule??(e=>queueMicrotask(e)),batch:n,untrack:e=>e(),createReadonlyAtom:(e,n)=>{let i=n?.compare??Object.is,a=!1,o,s=()=>{let t=e();return(!a||!i(o,t))&&(o=t,a=!0),o},c=t(()=>(r.get(),s()),{compare:i});return{get:s,subscribe:c.subscribe.bind(c)}},createWritableAtom:(e,n)=>t(e,{compare:n?.compare}),commit:()=>{r.set(e=>e+1)}}}function Lt(e,t=Object.is){let n=!1,r;return{get:e.get,markCommitted:e=>{r=e,n=!0},subscribe:i=>e.subscribe(e=>{(!n||!t(r,e))&&i(e)})}}function Rt(){return It({createAtom:Ke,batch:Le})}function zt(e,t){return typeof e==`function`?e(t):e}function U(e){if(Array.isArray(e))return e.map(U);if(e&&typeof e==`object`){let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return e;let n=t===null?W():{},r=Object.keys(e);for(let t=0;t<r.length;t++){let i=r[t];Object.defineProperty(n,i,{configurable:!0,enumerable:!0,value:U(e[i]),writable:!0})}return n}return e}function Bt(e,t){let n=Object.keys(t),r=e;for(let e=0;e<n.length;e++){let i=n[e];!i.startsWith(`_memo_`)&&i!==`_cellsCache`&&(r[i]=t[i])}return e}function W(){return Object.create(null)}function Vt(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Ht(e,t){return n=>{(t.options.atoms?.[e]??t.baseAtoms[e]).set(e=>zt(n,e))}}function Ut(e){if(typeof e!=`object`||!e)return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Wt(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var Gt=3;function Kt(e,t){return qt(e,t,Gt)}function qt(e,t,n){if(Object.is(e,t))return!0;if(n<=0||!Ut(e)||!Ut(t)||(Array.isArray(e)||Array.isArray(t))&&(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length))return!1;let r=Wt(e),i=Wt(t);if(r.length!==i.length)return!1;let a=e,o=t;for(let e=0;e<r.length;e++){let i=r[e];if(!Object.prototype.propertyIsEnumerable.call(t,i)||!qt(a[i],o[i],n-1))return!1}return!0}function Jt(e,t,n,r=Kt){let i=`on${t.charAt(0).toUpperCase()}${t.slice(1)}Change`,a=e.options[i];a&&a(e=>{let t=zt(n,e);return r(e,t)?e:t})}function Yt(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i.length&&r(i)})};return r(e),n}var Xt=({fn:e,memoDeps:t,onAfterCompare:n,onAfterUpdate:r,onBeforeCompare:i,onBeforeUpdate:a})=>{let o=[],s;return c=>{i?.();let l=t?.(c),u=!l||l.length!==o?.length;if(!u&&l){for(let e=0;e<l.length;e++)if(l[e]!==o[e]){u=!0;break}}return n?.(u),u&&(o=l,a?.(),s=e(...l??[]),r?.(s)),s}};function Zt(e){let t=!1;return()=>{t?e():t=!0}}function Qt({feature:e,fnName:t,objectId:n,onAfterUpdate:r,table:i,...a}){let o={onAfterUpdate:r?()=>{let{schedule:e,untrack:t}=i._reactivity;e(()=>t(()=>r()))}:void 0};return Xt({...a,...o})}function $t(e,t=`_`){let[n,r]=e.replace(t,` `).split(` `);return{fnKey:r,fnName:`${n}.${r}`,parentName:n}}function G(e,t,n){for(let[r,{fn:i,memoDeps:a}]of Object.entries(n)){let{fnKey:n,fnName:o}=$t(r);t[n]=a?Qt({memoDeps:a,fn:i,fnName:o,table:t,feature:e}):i}}function K(e,t,n,r){for(let[i,{fn:a,memoDeps:o}]of Object.entries(r)){let{fnKey:r,fnName:s}=$t(i);if(o){let i=`_memo_${r}`;t[r]=function(...t){if(!this[i]){let t=this;this[i]=Qt({memoDeps:e=>o(t,e),fn:(...e)=>a(t,...e),fnName:s,objectId:t.id,table:n,feature:e})}return this[i](...t)}}else t[r]=function(...e){return a(this,...e)}}}function q(e,t,n,...r){return e[t]?.(...r)??n(e,...r)}function en(e){return e.row.getValue(e.column.id)}function tn(e){return e.getValue()??e.table.options.renderFallbackValue}function nn(e){return{table:e.table,column:e.column,row:e.row,cell:e,getValue:()=>e.getValue(),renderValue:()=>e.renderValue()}}var rn={assignCellPrototype:(e,t)=>{K(`coreCellsFeature`,e,t,{cell_getValue:{fn:e=>en(e)},cell_renderValue:{fn:e=>tn(e)},cell_getContext:{fn:e=>nn(e),memoDeps:e=>[e]}})}};function an(e){if(!e._columnPrototype){e._columnPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignColumnPrototype?.(e._columnPrototype,e)}return e._columnPrototype}function on(e,t,n,r){let i={...e.getDefaultColumnDef(),...t},a=i.accessorKey,o=a===void 0?void 0:String(a),s=i.id??o?.replaceAll(`.`,`_`)??(typeof i.header==`string`?i.header:void 0),c;if(i.accessorFn)c=i.accessorFn;else if(a!==void 0){if(typeof a==`string`&&a.includes(`.`)){let e=a.split(`.`);c=t=>{let n=t;for(let t=0;t<e.length;t++){let r=e[t];n=n?.[r]}return n}}else c=e=>e[i.accessorKey]}if(!s)throw Error();let l=an(e),u=Object.create(l);u.accessorFn=c,u.columnDef=i,u.columns=[],u.depth=n,u.id=`${String(s)}`,u.parent=r;let d=e._columnInstanceInitFns;for(let e=0;e<d.length;e++)d[e](u);return u}function sn(e){return e.getIsVisible?.()??!0}function cn(e){return e.getVisibleLeafColumns?.()??e.getAllLeafColumns()}function ln(e,t){let n=e,r=t;return n.getOrderColumnsFn?.()(r)??n._orderGroupedColumns?.(r)??t}function un(e,t,n,r){return e._orderByColumnPinning?.(t,n,r)??t}function J(e,t){return e.getPinnedVisibleLeafColumns?.(t)??(t&&t!==`center`?[]:cn(e))}function dn(e,t){return e._expandRows?.(t)??t}function fn(e){e.autoResetExpanded?.()}function pn(e){e.autoResetPageIndex?.()}function mn(e){e.autoResetSorting?.()}function hn(e){e.autoResetCellSelection?.()}function gn(e){return[e,...e.columns.flatMap(e=>e.getFlatColumns())]}function _n(e){if(e.columns.length){let t=e.columns.flatMap(e=>e.getLeafColumns());return ln(e.table,t)}return[e]}function vn(e){return{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>e.renderValue()?.toString?.()??null,...Object.values(e._features).reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef?.()),{}),...e.options.defaultColumn}}function yn(e,t,n,r=0){let i=Array(t.length);for(let a=0;a<t.length;a++){if(!(a in t))continue;let o=t[a],s=on(e,o,r,n),c=o;s.columns=c.columns?yn(e,c.columns,s,r+1):[],i[a]=s}return i}function bn(e){return yn(e,e.options.columns)}function xn(e){return e.getAllColumns().flatMap(e=>e.getFlatColumns())}function Sn(e){let t=W(),n=e.getAllFlatColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function Cn(e){return ln(e,e.getAllColumns().flatMap(e=>e.getLeafColumns()))}function wn(e){let t=W(),n=e.getAllLeafColumns();for(let e=0;e<n.length;e++){let r=n[e];t[r.id]=r}return t}function Tn(e,t){return e.getAllFlatColumnsById()[t]}var En={assignColumnPrototype:(e,t)=>{K(`coreColumnsFeature`,e,t,{column_getFlatColumns:{fn:e=>gn(e),memoDeps:e=>[e.table.options.columns]},column_getLeafColumns:{fn:e=>_n(e),memoDeps:e=>[e.table.atoms.columnOrder?.get(),e.table.atoms.grouping?.get(),e.table.options.columns,e.table.options.groupedColumnMode]}})},constructTableAPIs:e=>{G(`coreColumnsFeature`,e,{table_getDefaultColumnDef:{fn:()=>vn(e),memoDeps:()=>[e.options.defaultColumn]},table_getAllColumns:{fn:()=>bn(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumns:{fn:()=>xn(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumnsById:{fn:()=>Sn(e),memoDeps:()=>[e.options.columns]},table_getAllLeafColumns:{fn:()=>Cn(e),memoDeps:()=>[e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getAllLeafColumnsById:{fn:()=>wn(e),memoDeps:()=>[e.getAllLeafColumns()]},table_getColumn:{fn:t=>Tn(e,t)}})}};function Dn(e){if(!e._headerPrototype){e._headerPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignHeaderPrototype?.(e._headerPrototype,e)}return e._headerPrototype}function On(e,t,n){let r=Dn(e),i=Object.create(r);i.colSpan=0,i.column=t,i.depth=n.depth,i.headerGroup=null,i.id=n.id??t.id,i.index=n.index,i.isPlaceholder=!!n.isPlaceholder,i.placeholderId=n.placeholderId,i.rowSpan=0,i.subHeaders=[];let a=e._headerInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function kn(e,t=1){let n=t;for(let r=0;r<e.length;r++){let i=e[r];sn(i)&&i.columns.length&&(n=Math.max(n,kn(i.columns,t+1)))}return n}function An(e,t){return e?`${e}_${t}`:String(t)}function jn(e,t,n,r){let i=e??``;return t&&(i=i?`${i}_${t}`:String(t)),n&&(i=i?`${i}_${n}`:n),r&&(i=i?`${i}_${r}`:r),i}function Mn(e,t){let n=0;for(let r=0;r<e.length;r++)e[r].column===t&&n++;return n}function Nn(e,t,n,r,i,a){let o={depth:t,id:An(r,t),headers:[]},s=[];for(let i=0;i<e.length;i++){if(!(i in e))continue;let a=e[i],c=s[s.length-1],l=a.column.depth===o.depth,u,d=!1;if(l&&a.column.parent?u=a.column.parent:(u=a.column,d=!0),c&&c.column===u)c.subHeaders.push(a);else{let e=On(n,u,{id:jn(r,t,u.id,a.id),isPlaceholder:d,placeholderId:d?String(Mn(s,u)):void 0,depth:t,index:s.length});e.subHeaders.push(a),s.push(e)}o.headers.push(a),a.headerGroup=o}for(let e=0;e<a.length;e++)a[e](o);i.push(o),t>0&&Nn(s,t-1,n,r,i,a)}function Pn(e){for(let t=0;t<e.length;t++){let n=e[t];if(!sn(n.column))continue;let r=0;if(n.subHeaders.length){Pn(n.subHeaders);for(let e=0;e<n.subHeaders.length;e++){let t=n.subHeaders[e];sn(t.column)&&(r+=t.colSpan)}}else r=1;if(n.colSpan=r,n.isPlaceholder&&n.subHeaders.length===1&&n.subHeaders[0].column===n.column){let e=1,t=n.subHeaders[0];for(;t;)t.rowSpan=0,e++,t=t.subHeaders.length===1&&t.subHeaders[0].column===n.column?t.subHeaders[0]:void 0;n.rowSpan=e}else n.rowSpan=1}}function Fn(e,t,n,r){let i=kn(e),a=[],o=n._headerGroupInstanceInitFns,s=Array(t.length);for(let e=0;e<t.length;e++)e in t&&(s[e]=On(n,t[e],{depth:i,index:e}));return Nn(s,i-1,n,r,a,o),a.reverse(),Pn(a[0]?.headers??[]),a}function In(e,t){for(let n=0;n<e.subHeaders.length;n++)In(e.subHeaders[n],t);t.push(e)}function Ln(e){let t=[];return In(e,t),t}function Rn(e){return{column:e.column,header:e,table:e.column.table}}function zn(e){return Fn(e.getAllColumns(),un(e,cn(e),e=>e.id),e)}function Bn(e){return[...e.getHeaderGroups()].reverse()}function Vn(e){let t=e.getHeaderGroups(),n=[];for(let e=0;e<t.length;e++){let r=t[e].headers;for(let e=0;e<r.length;e++)n.push(r[e])}return n}function Hn(e){let t=e.getHeaderGroups()[0]?.headers??[],n=[];for(let e=0;e<t.length;e++){let r=t[e].getLeafHeaders();for(let e=0;e<r.length;e++)n.push(r[e])}return n}var Un={assignHeaderPrototype:(e,t)=>{K(`coreHeadersFeature`,e,t,{header_getLeafHeaders:{fn:e=>Ln(e),memoDeps:e=>[e.column.table.options.columns]},header_getContext:{fn:e=>Rn(e),memoDeps:e=>[e.column.table.options.columns]}})},constructTableAPIs:e=>{G(`coreHeadersFeature`,e,{table_getHeaderGroups:{fn:()=>zn(e),memoDeps:()=>[e.options.columns,e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.atoms.columnPinning?.get(),e.atoms.columnVisibility?.get(),e.options.groupedColumnMode]},table_getFooterGroups:{fn:()=>Bn(e),memoDeps:()=>[e.getHeaderGroups()]},table_getFlatHeaders:{fn:()=>Vn(e),memoDeps:()=>[e.getHeaderGroups()]},table_getLeafHeaders:{fn:()=>Hn(e),memoDeps:()=>[e.getHeaderGroups()]}})}};function Wn(e){if(!e._rowPrototype){e._rowPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignRowPrototype?.(e._rowPrototype,e)}return e._rowPrototype}var Gn=(e,t,n,r,i,a,o)=>{let s=Wn(e),c=Object.create(s);c._displayIndexCache=-1,c._uniqueValuesCache=W(),c._valuesCache=W(),c.depth=i,c.id=t,c.index=r,c.original=n,c.parentId=o,c.subRows=a??[];let l=e._rowInstanceInitFns;for(let e=0;e<l.length;e++)l[e](c);return c};function Kn(){return e=>Qt({feature:`coreRowModelsFeature`,table:e,fnName:`table.getCoreRowModel`,memoDeps:()=>[e.options.data],fn:()=>Jn(e,e.options.data),onAfterUpdate:Zt(()=>{fn(e),pn(e),mn(e),hn(e)})})}function qn(e,t,n,r=0,i){let a=[];for(let o=0;o<n.length;o++){let s=n[o],c=Gn(e,e.getRowId(s,o,i),s,o,r,void 0,i?.id);t.flatRows.push(c),t.rowsById[c.id]=c,a.push(c),e.options.getSubRows&&(c.originalSubRows=e.options.getSubRows(s,o),c.originalSubRows?.length&&(c.subRows=qn(e,t,c.originalSubRows,r+1,c)))}return a}function Jn(e,t){let n={rows:[],flatRows:[],rowsById:W()};return n.rows=qn(e,n,t),n}function Yn(e){return e._rowModels.coreRowModel||(e._rowModels.coreRowModel=e.options.features.coreRowModel?.(e)??Kn()(e)),e._rowModels.coreRowModel()}function Xn(e){return e.getCoreRowModel()}function Zn(e){return e._rowModels.filteredRowModel||(e._rowModels.filteredRowModel=e.options.features.filteredRowModel?.(e)),e.options.manualFiltering||!e._rowModels.filteredRowModel?e.getPreFilteredRowModel():e._rowModels.filteredRowModel()}function Qn(e){return e.getFilteredRowModel()}function $n(e){return e._rowModels.groupedRowModel||(e._rowModels.groupedRowModel=e.options.features.groupedRowModel?.(e)),e.options.manualGrouping||!e._rowModels.groupedRowModel?e.getPreGroupedRowModel():e._rowModels.groupedRowModel()}function er(e){return e.getGroupedRowModel()}function tr(e){return e._rowModels.sortedRowModel||(e._rowModels.sortedRowModel=e.options.features.sortedRowModel?.(e)),e.options.manualSorting||!e._rowModels.sortedRowModel?e.getPreSortedRowModel():e._rowModels.sortedRowModel()}function nr(e){return e.getSortedRowModel()}function rr(e){return e._rowModels.expandedRowModel||(e._rowModels.expandedRowModel=e.options.features.expandedRowModel?.(e)),e.options.manualExpanding||!e._rowModels.expandedRowModel?e.getPreExpandedRowModel():e._rowModels.expandedRowModel()}function ir(e){return e.getExpandedRowModel()}function ar(e){return e._rowModels.paginatedRowModel||(e._rowModels.paginatedRowModel=e.options.features.paginatedRowModel?.(e)),e.options.manualPagination||!e._rowModels.paginatedRowModel?e.getPrePaginatedRowModel():e._rowModels.paginatedRowModel()}function or(e){return e.getPaginatedRowModel()}var sr={constructTableAPIs:e=>{G(`coreRowModelsFeature`,e,{table_getCoreRowModel:{fn:()=>Yn(e)},table_getPreFilteredRowModel:{fn:()=>Xn(e)},table_getFilteredRowModel:{fn:()=>Zn(e)},table_getPreGroupedRowModel:{fn:()=>Qn(e)},table_getGroupedRowModel:{fn:()=>$n(e)},table_getPreSortedRowModel:{fn:()=>er(e)},table_getSortedRowModel:{fn:()=>tr(e)},table_getPreExpandedRowModel:{fn:()=>nr(e)},table_getExpandedRowModel:{fn:()=>rr(e)},table_getPrePaginatedRowModel:{fn:()=>ir(e)},table_getPaginatedRowModel:{fn:()=>ar(e)},table_getRowModel:{fn:()=>or(e)}})}};function cr(e){if(!e._cellPrototype){e._cellPrototype={table:e};let t=Object.values(e._features);for(let n=0;n<t.length;n++)t[n].assignCellPrototype?.(e._cellPrototype,e)}return e._cellPrototype}function lr(e,t,n){let r=cr(n),i=Object.create(r);i.column=e,i.id=`${t.id}_${e.id}`,i.row=t;let a=n._cellInstanceInitFns;for(let e=0;e<a.length;e++)a[e](i);return i}function ur(e){let t=e.table.getRowsInDisplayOrder(),n=e._displayIndexCache;return t[n]===e?n:-1}function dr(e){let t=e.getPrePaginatedRowModel(),n=e.options.paginateExpandedRows===!1?dn(e,t).rows:t.rows;for(let e=0;e<n.length;e++)n[e]._displayIndexCache=e;return n}function fr(e,t){if(Vt(e._valuesCache,t))return e._valuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return e._valuesCache[t]=n.accessorFn(e.original,e.index),e._valuesCache[t]}function pr(e,t){if(Vt(e._uniqueValuesCache,t))return e._uniqueValuesCache[t];let n=e.table.getColumn(t);if(n?.accessorFn)return n.columnDef.getUniqueValues?(e._uniqueValuesCache[t]=n.columnDef.getUniqueValues(e.original,e.index),e._uniqueValuesCache[t]):(e._uniqueValuesCache[t]=[e.getValue(t)],e._uniqueValuesCache[t])}function mr(e,t){return e.getValue(t)??e.table.options.renderFallbackValue}function hr(e){return Yt(e.subRows,e=>e.subRows)}function gr(e){let t=e.getCoreRowModel().flatRows,n=0;for(let e=0;e<t.length;e++)n=Math.max(n,t[e].depth);return n}function _r(e){if(e.parentId)return e.table.getCoreRowModel().rowsById[e.parentId]??e.table.getRow(e.parentId,!0)}function vr(e){let t=[],n=e;for(;;){let e=n.getParentRow();if(!e)break;t.push(e),n=e}return t.reverse()}function yr(e){let t=e.table.getAllLeafColumns(),n=e._cellsCache;n||=e._cellsCache=new WeakMap;let r=Array(t.length);for(let i=0;i<t.length;i++){let a=t[i],o=n.get(a);o||(o=lr(a,e,e.table),n.set(a,o)),r[i]=o}return r}function br(e){let t=W(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];t[r.column.id]=r}return t}function xr(e,t,n,r){return t.options.getRowId?.(e,n,r)??(r?`${r.id}.${n}`:String(n))}function Sr(e,t,n){let r=(n?e.getPrePaginatedRowModel():e.getRowModel()).rowsById[t];if(!r&&(r=e.getCoreRowModel().rowsById[t],!r))throw Error();return r}var Cr={assignRowPrototype:(e,t)=>{K(`coreRowsFeature`,e,t,{row_getDisplayIndex:{fn:e=>ur(e)},row_getAllCellsByColumnId:{fn:e=>br(e),memoDeps:e=>[e.getAllCells()]},row_getAllCells:{fn:e=>yr(e),memoDeps:e=>[e.table.getAllLeafColumns()]},row_getLeafRows:{fn:e=>hr(e),memoDeps:e=>[e.subRows]},row_getParentRow:{fn:e=>_r(e)},row_getParentRows:{fn:e=>vr(e)},row_getUniqueValues:{fn:(e,t)=>pr(e,t)},row_getValue:{fn:(e,t)=>fr(e,t)},row_renderValue:{fn:(e,t)=>mr(e,t)}})},constructTableAPIs:e=>{G(`coreRowsFeature`,e,{table_getRowsInDisplayOrder:{fn:()=>dr(e),memoDeps:()=>[e.getPrePaginatedRowModel().rows,e.options.paginateExpandedRows,e.options.paginateExpandedRows===!1?e.atoms.expanded?.get():void 0]},table_getRowId:{fn:(t,n,r)=>xr(t,e,n,r)},table_getRow:{fn:(t,n)=>Sr(e,t,n)},table_getMaxSubRowDepth:{fn:()=>gr(e),memoDeps:()=>[e.getCoreRowModel()]}})}};function wr(e,t,n=(e,t)=>e===t){let r=t===void 0?e.options.state:t;e._reactivity.batch(()=>{if(r)for(let t in r){let i=e.baseAtoms[t];if(!i)continue;let a=r[t],o=a===void 0?e.initialState[t]:a;n(e._reactivity.untrack(()=>i.get()),o)||i.set(()=>o)}})}function Tr(e,t,n=(e,t)=>e===t){e._reactivity.batch(()=>{wr(e,t,n),e._reactivity.commit?.()})}function Er(e){let t=U(e.initialState);e._reactivity.batch(()=>{let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];e.baseAtoms[i].set(t[i])}});let n=Object.values(e._features);for(let t=0;t<n.length;t++)n[t].resetTableInstanceData?.(e)}function Dr(e,t){let{features:n,atoms:r,initialState:i}=e.options;if(!e.options.mergeOptions)return{...e.options,...t,features:n,atoms:r,initialState:i};let a=e.options.mergeOptions(e.options,t),o={...Object.getOwnPropertyDescriptors(a)};return Object.defineProperties(Object.create(Object.getPrototypeOf(a)),{...o,features:{value:n,enumerable:!0,configurable:!0,writable:!0},atoms:{value:r,enumerable:!0,configurable:!0,writable:!0},initialState:{value:i,enumerable:!0,configurable:!0,writable:!0}})}function Or(e,t,n){let r=Dr(e,zt(t,e.options));e.optionsStore?e.optionsStore.set(()=>r):e.options=r,n?.syncExternalState!==!1&&Tr(e,r.state??null)}var kr={coreCellsFeature:rn,coreColumnsFeature:En,coreHeadersFeature:Un,coreRowModelsFeature:sr,coreRowsFeature:Cr,coreTablesFeature:{constructTableAPIs:e=>{G(`coreTablesFeature`,e,{table_reset:{fn:()=>Er(e)},table_setOptions:{fn:t=>Or(e,t)}})}}};function Ar(e){return e}function jr(e,t={}){return Object.values(e).forEach(e=>{t=e.getInitialState?.(t)??t}),U(t)}function Mr(e){let t=e.features.coreReactivityFeature,{aggregationFns:n,columnMeta:r,coreRowModel:i,expandedRowModel:a,facetedMinMaxValues:o,facetedRowModel:s,facetedUniqueValues:c,filterFns:l,filterMeta:u,filteredRowModel:d,groupedRowModel:f,paginatedRowModel:p,sortFns:m,sortedRowModel:h,tableMeta:g,..._}=e.features,v={_cellInstanceInitFns:[],_columnInstanceInitFns:[],_features:{...kr,..._},_headerGroupInstanceInitFns:[],_headerInstanceInitFns:[],_reactivity:t,_rowInstanceInitFns:[],_rowModelFns:{aggregationFns:n,filterFns:l,sortFns:m},_rowModels:{},atoms:{},baseAtoms:{}},y=Object.values(v._features),b={...y.reduce((e,t)=>Object.assign(e,t.getDefaultTableOptions?.(v)),{}),...e};if(t.wrapExternalAtoms&&b.atoms)for(let[e,n]of Object.entries(b.atoms)){let r=n,i=t.createWritableAtom(r.get(),{debugName:`externalAtom/${e}`});b.atoms[e]=i;let a=!1,o=r.subscribe(e=>{a||i.set(e)}),s=i.subscribe(e=>{a=!0,r.set(e),a=!1});t.addSubscription(o),t.addSubscription(s)}t.createOptionsStore?(v.optionsStore=t.createWritableAtom(b,{debugName:`table/optionsStore`}),Object.defineProperty(v,"options",{configurable:!0,enumerable:!0,get(){return v.optionsStore.get()},set(e){v.optionsStore.set(()=>e)}})):v.options=b,v.initialState=jr(v._features,v.options.initialState);let x=Object.keys(v.initialState);for(let e=0;e<x.length;e++){let n=x[e];v.baseAtoms[n]=t.createWritableAtom(v.initialState[n],{debugName:`table/baseAtoms/${n}`}),v.atoms[n]=t.createReadonlyAtom(()=>{let e=v.options,t=e.atoms?.[n],r=t?t.get():v.baseAtoms[n].get();if(t)return r;let i=e.state;if(i&&Vt(i,n)){let e=i[n];return e===void 0?v.initialState[n]:e}return r},{debugName:`table/atoms/${n}`})}wr(v),v.store=Ft(t.createReadonlyAtom(()=>{let e={};for(let t=0;t<x.length;t++){let n=x[t];e[n]=v.atoms[n].get()}return e},{compare:Dt,debugName:`table/store`}));for(let e=0;e<y.length;e++){let t=y[e];t.initTableInstanceData?.(v),t.initCellInstanceData&&v._cellInstanceInitFns.push(t.initCellInstanceData.bind(t)),t.initColumnInstanceData&&v._columnInstanceInitFns.push(t.initColumnInstanceData.bind(t)),t.initHeaderGroupInstanceData&&v._headerGroupInstanceInitFns.push(t.initHeaderGroupInstanceData.bind(t)),t.initHeaderInstanceData&&v._headerInstanceInitFns.push(t.initHeaderInstanceData.bind(t)),t.initRowInstanceData&&v._rowInstanceInitFns.push(t.initRowInstanceData.bind(t)),t.constructTableAPIs?.(v)}return v}function Nr(){return W()}function Pr(){return{size:150,minSize:20,maxSize:2**53-1}}function Fr(e){let t=Pr(),n=e.table.atoms.columnSizing?.get(),r=n&&Vt(n,e.id)?n[e.id]:void 0;return Math.min(Math.max(e.columnDef.minSize??t.minSize,r??e.columnDef.size??t.size),e.columnDef.maxSize??t.maxSize)}function Ir(e){let t=W(),n=W(),r=Array(e.length),i=0;for(let n=0;n<e.length;n++){let a=e[n],o=q(a,`getSize`,Fr);r[n]=o,t[a.id]=i,i+=o}let a=0;for(let t=e.length-1;t>=0;t--)n[e[t].id]=a,a+=r[t];return{starts:t,afters:n}}function Lr(e){return{all:Ir(J(e)),center:Ir(J(e,`center`)),start:Ir(J(e,`start`)),end:Ir(J(e,`end`))}}function Rr(e){return e===`start`?`start`:e===`end`?`end`:e===`center`?`center`:`all`}function zr(e,t){return q(e.table,`getColumnOffsets`,Lr)[Rr(t)].starts[e.id]??0}function Br(e,t){return q(e.table,`getColumnOffsets`,Lr)[Rr(t)].afters[e.id]??0}function Vr(e){Gr(e.table,t=>{let n=W(),r=Object.keys(t);for(let i=0;i<r.length;i++){let a=r[i];a!==e.id&&(n[a]=t[a])}return n})}function Hr(e){if(!e.subHeaders.length)return Fr(e.column);let t=0;for(let n=0;n<e.subHeaders.length;n++)t+=Hr(e.subHeaders[n]);return t}function Ur(e){return Hr(e)}function Wr(e){if(e.index>0){let t=e.headerGroup?.headers[e.index-1];if(t)return q(t,`getStart`,Wr)+q(t,`getSize`,Ur)}return 0}function Gr(e,t){e.options.onColumnSizingChange?.(t)}function Kr(e,t){Gr(e,t?W():Object.assign(W(),U(e.initialState.columnSizing??{})))}function qr(e){let t=0;for(let n=0;n<e.length;n++)t+=q(e[n],`getSize`,Fr);return t}function Jr(e){return e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+Ur(t),0)??0}function Yr(e){return qr(J(e,`start`))}function Xr(e){return qr(J(e,`center`))}function Zr(e){return qr(J(e,`end`))}function Qr(){return{startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}}function $r(e){return(e.columnDef.enableResizing??!0)&&(e.table.options.enableColumnResizing??!0)}function ei(e){return e.table.atoms.columnResizing?.get()?.isResizingColumn===e.id}function ti(e,t){let n=e.table.getColumn(e.column.id),r=$r(n);return i=>{if(!r||oi(i)&&i.touches.length>1)return;let a=Ur(e),o=e.getLeafHeaders().map(e=>[e.column.id,Fr(e.column)]),s=oi(i)?Math.round(i.touches[0].clientX):i.clientX,c=W(),l=(e,t)=>{if(typeof t!=`number`)return;let r=n.table,i=r.options.columnResizeMode===`onChange`||e===`end`;r._reactivity.batch(()=>{ni(r,e=>{let n=r.options.columnResizeDirection===`rtl`?-1:1,a=(t-(e.startOffset??0))*n,o=e.startSize??0,s=Math.max(o>0?a/o:0,-.999999);if(i){let t=e.columnSizingStart;for(let e=0;e<t.length;e++){let n=t[e],r=n[1];c[n[0]]=Math.round(Math.max(r>0?r+r*s:a/t.length,0)*100)/100}}return{...e,deltaOffset:a,deltaPercentage:s}}),i&&Gr(r,e=>Object.assign(W(),e,c))})},u=null,d=!1,f,p=()=>{d?(d=!1,l(`move`,f),u=requestAnimationFrame(p)):u=null},m=e=>{f=e,typeof requestAnimationFrame==`function`?u===null?(l(`move`,e),u=requestAnimationFrame(p)):d=!0:l(`move`,e)},h=e=>{u!==null&&(cancelAnimationFrame(u),u=null,d=!1),n.table._reactivity.batch(()=>{l(`end`,e??f),ni(n.table,e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))})},g=t||(typeof document<`u`?document:null),_={moveHandler:e=>m(e.clientX),upHandler:e=>{g?.removeEventListener(`mousemove`,_.moveHandler),g?.removeEventListener(`mouseup`,_.upHandler),h(e.clientX)}},v={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),m(e.touches[0].clientX),!1),upHandler:e=>{y(),e.cancelable&&(e.preventDefault(),e.stopPropagation()),h(e.touches[0]?.clientX)},cancelHandler:()=>{y(),h()}},y=()=>{g?.removeEventListener(`touchmove`,v.moveHandler),g?.removeEventListener(`touchend`,v.upHandler),g?.removeEventListener(`touchcancel`,v.cancelHandler)},b=ai()?{passive:!1}:!1;oi(i)?(g?.addEventListener(`touchmove`,v.moveHandler,b),g?.addEventListener(`touchend`,v.upHandler,b),g?.addEventListener(`touchcancel`,v.cancelHandler,b)):(g?.addEventListener(`mousemove`,_.moveHandler,b),g?.addEventListener(`mouseup`,_.upHandler,b)),ni(n.table,e=>({...e,startOffset:s,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:o,isResizingColumn:n.id}))}}function ni(e,t){e.options.onColumnResizingChange?.(t)}function ri(e,t){ni(e,t?Qr():U(e.initialState.columnResizing??Qr()))}var ii=null;function ai(){if(typeof ii==`boolean`)return ii;let e=!1;try{let t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener(`test`,n,t),window.removeEventListener(`test`,n)}catch{e=!1}return ii=e,ii}function oi(e){return e.type===`touchstart`}var si={getInitialState:e=>({columnResizing:Qr(),...e}),getDefaultTableOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnResizingChange:Ht(`columnResizing`,e)}),assignColumnPrototype:(e,t)=>{K(`columnResizingFeature`,e,t,{column_getCanResize:{fn:e=>$r(e)},column_getIsResizing:{fn:e=>ei(e)}})},assignHeaderPrototype:(e,t)=>{K(`columnResizingFeature`,e,t,{header_getResizeHandler:{fn:(e,t)=>ti(e,t)}})},constructTableAPIs:e=>{G(`columnResizingFeature`,e,{table_setColumnResizing:{fn:t=>ni(e,t)},table_resetHeaderSizeInfo:{fn:t=>ri(e,t)}})}},ci={getInitialState:e=>({columnSizing:Nr(),...e}),getDefaultColumnDef:()=>Pr(),getDefaultTableOptions:e=>({onColumnSizingChange:Ht(`columnSizing`,e)}),assignColumnPrototype:(e,t)=>{K(`columnSizingFeature`,e,t,{column_getSize:{fn:e=>Fr(e),memoDeps:e=>[t.options.columns,t.atoms.columnSizing?.get()?.[e.id]]},column_getStart:{fn:(e,t)=>zr(e,t)},column_getAfter:{fn:(e,t)=>Br(e,t)},column_resetSize:{fn:e=>Vr(e)}})},assignHeaderPrototype:(e,t)=>{K(`columnSizingFeature`,e,t,{header_getSize:{fn:e=>Ur(e),memoDeps:e=>[t.options.columns,e.column.columns.length>0?t.atoms.columnSizing?.get():t.atoms.columnSizing?.get()?.[e.column.id]]},header_getStart:{fn:e=>Wr(e),memoDeps:()=>[t.options.columns,t.atoms.columnSizing?.get(),t.atoms.columnOrder?.get(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get(),t.atoms.grouping?.get(),t.options.groupedColumnMode]}})},constructTableAPIs:e=>{G(`columnSizingFeature`,e,{table_getColumnOffsets:{fn:()=>Lr(e),memoDeps:()=>[e.options.columns,e.atoms.columnSizing?.get(),e.atoms.columnOrder?.get(),e.atoms.columnPinning?.get(),e.atoms.columnVisibility?.get(),e.atoms.grouping?.get(),e.options.groupedColumnMode]},table_setColumnSizing:{fn:t=>Gr(e,t)},table_resetColumnSizing:{fn:t=>Kr(e,t)},table_getTotalSize:{fn:()=>Jr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]},table_getStartTotalSize:{fn:()=>Yr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]},table_getCenterTotalSize:{fn:()=>Xr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]},table_getEndTotalSize:{fn:()=>Zr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]}})}};function li(){return W()}function ui(e,t){di(e)&&_i(e.table,n=>{let r=Object.assign(W(),n),i=t??!q(e,`getIsVisible`,Y),a=e.getLeafColumns();for(let e=0;e<a.length;e++){let t=a[e];di(t)&&(r[t.id]=i)}return r})}function Y(e){let t=e.table.atoms.columnVisibility?.get();if(!t)return!0;let n=e.columns;return n.length?n.some(e=>q(e,`getIsVisible`,Y)):(Vt(t,e.id)?t[e.id]:void 0)??!0}function di(e){return(e.columnDef.enableHiding??!0)&&(e.table.options.enableHiding??!0)}function fi(e){return t=>{ui(e,t.target.checked)}}function pi(e){let t=e.getAllCells(),n=[];for(let e=0;e<t.length;e++){let r=t[e];q(r.column,`getIsVisible`,Y)&&n.push(r)}return un(e.table,n,e=>e.column.id,()=>q(e,`getVisibleCellsByColumnId`,mi))}function mi(e){let t=W(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];q(r.column,`getIsVisible`,Y)&&(t[r.column.id]=r)}return t}function hi(e){return e.getAllFlatColumns().filter(e=>q(e,`getIsVisible`,Y))}function gi(e){return e.getAllLeafColumns().filter(e=>q(e,`getIsVisible`,Y))}function _i(e,t){Jt(e,`columnVisibility`,t)}function vi(e,t){_i(e,t?W():Object.assign(W(),U(e.initialState.columnVisibility??{})))}function yi(e,t){t??=!bi(e);let n=W(),r=e.getAllLeafColumns();for(let e=0;e<r.length;e++){let i=r[e];n[i.id]=t||!di(i)}_i(e,n)}function bi(e){return!e.getAllLeafColumns().some(e=>!q(e,`getIsVisible`,Y))}function xi(e){return e.getAllLeafColumns().some(e=>q(e,`getIsVisible`,Y))}function Si(e){return t=>{yi(e,t.target.checked)}}var Ci={getInitialState:e=>({columnVisibility:li(),...e}),getDefaultTableOptions:e=>({onColumnVisibilityChange:Ht(`columnVisibility`,e)}),assignColumnPrototype:(e,t)=>{K(`columnVisibilityFeature`,e,t,{column_getIsVisible:{fn:e=>Y(e),memoDeps:e=>[t.options.columns,t.atoms.columnVisibility?.get(),e.columns]},column_getCanHide:{fn:e=>di(e)},column_getToggleVisibilityHandler:{fn:e=>fi(e)},column_toggleVisibility:{fn:(e,t)=>ui(e,t)}})},assignRowPrototype:(e,t)=>{K(`columnVisibilityFeature`,e,t,{row_getVisibleCells:{fn:e=>pi(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get()]},row_getVisibleCellsByColumnId:{fn:e=>mi(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnVisibility?.get()]}})},constructTableAPIs:e=>{G(`columnVisibilityFeature`,e,{table_getVisibleFlatColumns:{fn:()=>hi(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getVisibleLeafColumns:{fn:()=>gi(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_setColumnVisibility:{fn:t=>_i(e,t)},table_resetColumnVisibility:{fn:t=>vi(e,t)},table_toggleAllColumnsVisible:{fn:t=>yi(e,t)},table_getIsAllColumnsVisible:{fn:()=>bi(e)},table_getIsSomeColumnsVisible:{fn:()=>xi(e)},table_getToggleAllColumnsVisibilityHandler:{fn:()=>Si(e)}})}};function wi(){return W()}function X(e,t){e.options.onRowSelectionChange?.(t)}function Ti(e,t){e._lastSelectedRowId=null,X(e,t?W():Object.assign(W(),U(e.initialState.rowSelection??{})))}function Ei(e,t,n){e._lastSelectedRowId=null,X(e,r=>{if(t=t===void 0?!q(e,`getIsAllRowsSelected`,Ni):t,n?.deselectAll&&!t)return W();let i=Object.assign(W(),r),a=e.getPreGroupedRowModel().flatRows;if(t){let e=new Map;a.forEach(t=>{qi(t,e)&&(i[t.id]=!0)})}else a.forEach(e=>{Z(e)&&delete i[e.id]});return i})}function Di(e,t,n){e._lastSelectedRowId=null,X(e,r=>{let i=t===void 0?!q(e,`getIsAllPageRowsSelected`,Pi):t;if(n?.deselectAll&&!i)return W();let a=Object.assign(W(),r);return e.getRowModel().rows.forEach(t=>{Ki(a,t.id,i,!0,e,!0)}),a})}function Oi(e){return e.getCoreRowModel()}function ki(e){let t=e.getCoreRowModel();return q(e,`getIsSomeRowsSelected`,Fi)?Xi(t,e):{rows:[],flatRows:[],rowsById:W()}}function Ai(e){let t=e.getFilteredRowModel();return q(e,`getIsSomeRowsSelected`,Fi)?Xi(t,e):{rows:[],flatRows:[],rowsById:W()}}function ji(e){let t=e.getSortedRowModel();return q(e,`getIsSomeRowsSelected`,Fi)?Xi(t,e):{rows:[],flatRows:[],rowsById:W()}}function Mi(e){return Object.keys(e.atoms.rowSelection?.get()??{})}function Ni(e){let t=e.getFilteredRowModel().flatRows,n=e.atoms.rowSelection?.get()??{},r=!!(t.length&&Object.keys(n).length);if(r){let e=new Map;t.some(t=>!Zi(t,n)&&qi(t,e))&&(r=!1)}return r}function Pi(e){let t=e.getPaginatedRowModel().flatRows,n=e.atoms.rowSelection?.get()??{},r=new Map,i=!1;for(let e=0;e<t.length;e++){let a=t[e];if(Zi(a,n))!i&&qi(a,r)&&(i=!0);else if(qi(a,r))return!1}return i}function Fi(e){return q(e,`getSelectedRowIds`,Mi).length>0}function Ii(e){return e.getPaginatedRowModel().flatRows.filter(e=>Z(e)).some(e=>Bi(e)||q(e,`getIsSomeSelected`,Vi))}function Li(e){return t=>{Ei(e,t.target.checked)}}function Ri(e){return t=>{Di(e,t.target.checked)}}function zi(e,t,n){let r=Bi(e);X(e.table,i=>{t=t===void 0?!r:t;let a=Object.assign(W(),i);return Ki(a,e.id,t,(n?.selectChildren??!0)&&Q(e),e.table),!t&&n?.deselectParents&&Ji(a,e),a})}function Bi(e){return Zi(e,e.table.atoms.rowSelection?.get()??{})}function Vi(e){return Qi(e)===`some`}function Hi(e){return Qi(e)===`all`}function Z(e){let t=e.table.options;return typeof t.enableRowSelection==`function`?t.enableRowSelection(e):t.enableRowSelection??!0}function Ui(e){let t=e.table.options;return typeof t.enableSubRowSelection==`function`?t.enableSubRowSelection(e):t.enableSubRowSelection??!0}function Q(e){let t=e.table.options;return typeof t.enableMultiRowSelection==`function`?t.enableMultiRowSelection(e):t.enableMultiRowSelection??!0}function Wi(e,t){let n=Z(e);return r=>{if(!n)return;let i=r,a=e.table,o=i.target.checked,s=a._lastSelectedRowId;(!(a.options.enableRowRangeSelection!==!1&&s!==null&&Q(e)&&(a.options.isRowRangeSelectionEvent?.(r)??!1))||!Gi(e,s,o,t))&&zi(e,o,t),a._lastSelectedRowId=e.id}}function Gi(e,t,n,r){let i=r?.selectChildren??!0,a=e.table,o=a.getRowsInDisplayOrder(),s=a.getPrePaginatedRowModel().rowsById[t]??a.getCoreRowModel().rowsById[t];if(!s)return!1;let c=s.getDisplayIndex(),l=e.getDisplayIndex(),u=o[c],d=o[l];if(c<0||l<0||c>=o.length||l>=o.length||u?.id!==s.id||d?.id!==e.id||!Q(s)||!Q(e))return!1;let f=Math.min(c,l),p=Math.max(c,l);return X(a,e=>{let t=Object.assign(W(),e);for(let e=f;e<=p;e++){let s=o[e];Z(s)&&Q(s)&&(Ki(t,s.id,n,i,a),!n&&r?.deselectParents&&Ji(t,s))}return t}),!0}function Ki(e,t,n,r,i,a){let o=i.getRow(t,!0);n?(Q(o)||Object.keys(e).forEach(t=>delete e[t]),Z(o)&&(e[t]=!0)):(!a||Z(o))&&delete e[t],r&&o.subRows.length&&Ui(o)&&o.subRows.forEach(t=>Ki(e,t.id,n,r,i,a))}function qi(e,t){if(!Z(e))return!1;let n=e.table;if(n.options.enableSubRowSelection===!0)return!0;let r=e.parentId;if(r===void 0)return!0;let i=t.get(r);if(i!==void 0)return i;let a=n.getCoreRowModel().rowsById,o=[],s=!0,c=r;for(;c!==void 0;){let e=t.get(c);if(e!==void 0){s=e;break}o.push(c);let r=a[c]??n.getRow(c,!0);if(!Ui(r)){s=!1;break}c=r.parentId}return o.forEach(e=>t.set(e,s)),s}function Ji(e,t){let n=t.table.getCoreRowModel().rowsById,r=t.parentId;for(;r!==void 0;)delete e[r],r=(n[r]??t.table.getRow(r,!0)).parentId}function Yi(e,t,n,r){let i=[];for(let a=0;a<e.length;a++){let o=e[a],s=Zi(o,t);if(s&&(n.push(o),r[o.id]=o),o.subRows.length){let e=Yi(o.subRows,t,n,r);if(s){let t=Object.create(Object.getPrototypeOf(o));Bt(t,o),t.subRows=e,i.push(t)}}else s&&i.push(o)}return i}function Xi(e,t){let n=[],r=W(),i=t.atoms.rowSelection?.get()??{};return{rows:Yi(e.rows,i,n,r),flatRows:n,rowsById:r}}function Zi(e,t){return!!(Vt(t,e.id)&&t[e.id])}function Qi(e){if(!e.subRows.length)return!1;let t=e.table.atoms.rowSelection?.get()??{},n=!1,r=!0,i=!1;for(let a=0;a<e.subRows.length;a++){let o=e.subRows[a];if(n&&!r)break;if(Z(o)&&(i=!0,Zi(o,t)?n=!0:r=!1),o.subRows.length){let e=Qi(o);e===`all`?(n=!0,i=!0):e===`some`?(n=!0,r=!1,i=!0):r=!1}}return i?r?`all`:n?`some`:!1:!1}var $i={initTableInstanceData:e=>{e._lastSelectedRowId=null},resetTableInstanceData:e=>{e._lastSelectedRowId=null},getInitialState:e=>({rowSelection:wi(),...e}),getDefaultTableOptions:e=>({onRowSelectionChange:Ht(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableRowRangeSelection:!0,enableSubRowSelection:!0,isRowRangeSelectionEvent:e=>{let t=e;return!!(t.shiftKey||t.nativeEvent?.shiftKey)}}),assignRowPrototype:(e,t)=>{K(`rowSelectionFeature`,e,t,{row_toggleSelected:{fn:(e,t,n)=>zi(e,t,n)},row_getIsSelected:{fn:e=>Bi(e)},row_getIsSomeSelected:{fn:e=>Vi(e),memoDeps:e=>[e.subRows,e.table.atoms.rowSelection?.get(),e.table.options.enableRowSelection]},row_getIsAllSubRowsSelected:{fn:e=>Hi(e),memoDeps:e=>[e.subRows,e.table.atoms.rowSelection?.get(),e.table.options.enableRowSelection]},row_getCanSelect:{fn:e=>Z(e)},row_getCanSelectSubRows:{fn:e=>Ui(e)},row_getCanMultiSelect:{fn:e=>Q(e)},row_getToggleSelectedHandler:{fn:(e,t)=>Wi(e,t)}})},constructTableAPIs:e=>{G(`rowSelectionFeature`,e,{table_setRowSelection:{fn:t=>X(e,t)},table_resetRowSelection:{fn:t=>Ti(e,t)},table_toggleAllRowsSelected:{fn:(t,n)=>Ei(e,t,n)},table_toggleAllPageRowsSelected:{fn:(t,n)=>Di(e,t,n)},table_getPreSelectedRowModel:{fn:()=>Oi(e)},table_getSelectedRowModel:{fn:()=>ki(e),memoDeps:()=>[e.atoms.rowSelection?.get(),e.getCoreRowModel()]},table_getFilteredSelectedRowModel:{fn:()=>Ai(e),memoDeps:()=>[e.atoms.rowSelection?.get(),e.getFilteredRowModel()]},table_getGroupedSelectedRowModel:{fn:()=>ji(e),memoDeps:()=>[e.atoms.rowSelection?.get(),e.getSortedRowModel()]},table_getSelectedRowIds:{fn:()=>Mi(e),memoDeps:()=>[e.atoms.rowSelection?.get()]},table_getIsAllRowsSelected:{fn:()=>Ni(e),memoDeps:()=>[e.atoms.rowSelection?.get(),e.getFilteredRowModel(),e.options.enableRowSelection,e.options.enableSubRowSelection]},table_getIsAllPageRowsSelected:{fn:()=>Pi(e),memoDeps:()=>[e.atoms.rowSelection?.get(),e.getPaginatedRowModel(),e.options.enableRowSelection,e.options.enableSubRowSelection]},table_getIsSomeRowsSelected:{fn:()=>Fi(e),memoDeps:()=>[e.atoms.rowSelection?.get()]},table_getIsSomePageRowsSelected:{fn:()=>Ii(e),memoDeps:()=>[e.atoms.rowSelection?.get(),e.getPaginatedRowModel(),e.options.enableRowSelection]},table_getToggleAllRowsSelectedHandler:{fn:()=>Li(e)},table_getToggleAllPageRowsSelectedHandler:{fn:()=>Ri(e)}})}},ea=typeof window>`u`?H.useEffect:H.useLayoutEffect;function ta(e,t){let[{table:n,rootSource:r}]=(0,H.useState)(()=>{let t=Mr({...e,features:{coreReactivityFeature:Rt(),...e.features}});return t.Subscribe=(e=>Pt({...e,source:e.source??t.store})),t.FlexRender=Nt,{table:t,rootSource:Lt(t.store,Dt)}}),i=n;Or(i,t=>({...t,...e}),{syncExternalState:!1});let a=i.options.state,o=r.get(),s=qe(r,t,{compare:Dt});return ea(()=>{r.markCommitted(o),Tr(i,a??null,Dt)}),(0,H.useMemo)(()=>({...n,options:e,state:s}),[n,e,s])}var $=le();function na({projectId:e,search:t,onSearch:n,columns:c,onColumnChange:l,onReset:d,density:p,onDensityChange:h,labelDisplay:g,onLabelDisplayChange:_,grouping:v,onGroupingChange:y,view:b,actions:ee}){let[ne,re]=(0,H.useState)(!1),[ie,T]=(0,H.useState)(!1),ce=se(),le=Me(u.query(`list_members`,{projectId:e})),ue=Me({...u.query(`list_ticket_labels`,{projectId:e,archived:t.archived}),enabled:ne}),E=[t.status,t.priority,t.assigneeId,t.label,t.due,t.archived!==`exclude`].filter(Boolean).length,D=e=>n({...t,...e,offset:0});return(0,$.jsxs)($.Fragment,{children:[(0,$.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,$.jsx)(`div`,{className:`mr-auto min-w-0 flex-1`,children:b}),(0,$.jsx)(te,{label:`Search tickets`,placeholder:`Search tickets…`,shortcut:`/`,value:t.q??``,onChange:e=>D({q:e}),className:je(`shrink-0`,t.q&&`[&_[data-slot=button]]:text-primary`)}),(0,$.jsxs)(at,{open:ne,onOpenChange:re,children:[(0,$.jsxs)(L,{render:(0,$.jsx)(ve,{label:`Filters${E?` (${E})`:``}`,className:je(`relative`,E>0&&`text-primary`)}),children:[(0,$.jsx)(gt,{}),E>0&&(0,$.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:E})]}),(0,$.jsxs)(R,{align:`end`,className:`w-[min(20rem,calc(100vw-2rem))] p-4`,children:[(0,$.jsx)(z,{children:`Filters`}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1`,children:[(0,$.jsxs)(P,{label:`Status`,value:t.status??``,onValueChange:e=>D({status:e?we(ae).parse(e):void 0}),children:[(0,$.jsx)(O,{value:``,children:`All statuses`}),ae.map(e=>(0,$.jsx)(O,{value:e,children:oe[e]},e))]}),(0,$.jsxs)(P,{label:`Priority`,value:t.priority??``,onValueChange:e=>D({priority:e?we(w).parse(e):void 0}),children:[(0,$.jsx)(O,{value:``,children:`All priorities`}),w.map(e=>(0,$.jsx)(O,{value:e,children:(0,$.jsx)(o,{property:`priority`,value:e})},e))]}),(0,$.jsxs)(j,{className:i,children:[(0,$.jsx)(ye,{children:`Label`}),(0,$.jsxs)(at,{open:ie,onOpenChange:T,children:[(0,$.jsxs)(L,{render:(0,$.jsx)(a,{variant:`outline`,role:`combobox`,"aria-label":`Label`,"aria-expanded":ie,className:`w-full justify-between`}),children:[(0,$.jsx)(`span`,{className:`truncate`,children:t.label??`All labels`}),(0,$.jsx)(I,{className:`shrink-0`})]}),(0,$.jsxs)(R,{align:`start`,className:`w-[min(20rem,calc(100vw-3rem))] p-0`,children:[(0,$.jsxs)(rt,{children:[(0,$.jsx)(nt,{"aria-label":`Search labels`,placeholder:`Search labels…`}),(0,$.jsxs)(Ze,{children:[(0,$.jsxs)(et,{value:`All labels`,onSelect:()=>{D({label:void 0}),T(!1)},children:[`All labels`,!t.label&&(0,$.jsx)(x,{className:`ml-auto`})]}),ue.data?.map(e=>(0,$.jsxs)(et,{value:`label:${e.name}`,keywords:[e.name],onSelect:()=>{D({label:e.name}),T(!1)},children:[(0,$.jsx)(B,{tag:e.name,className:`h-auto max-w-full`}),(0,$.jsx)(`span`,{className:`ml-auto text-xs text-muted-foreground`,children:e.count}),t.label===e.name&&(0,$.jsx)(x,{})]},e.name)),(0,$.jsx)(Ye,{children:ue.isPending?`Loading labels…`:`No matching labels`})]})]}),(0,$.jsx)(fe,{error:ue.error})]})]})]}),(0,$.jsxs)(P,{label:`Due`,value:t.due??``,onValueChange:e=>D({due:e?S.shape.due.unwrap().parse(e):void 0}),children:[(0,$.jsx)(O,{value:``,children:`Any due date`}),Object.entries(s).map(([e,t])=>(0,$.jsx)(O,{value:e,children:t},e))]}),(0,$.jsxs)(P,{label:`Assignee`,value:t.assigneeId??`any`,onValueChange:e=>D({assigneeId:e===`any`?void 0:S.shape.assigneeId.parse(e)}),children:[(0,$.jsx)(O,{value:`any`,children:`Anyone`}),(0,$.jsx)(O,{value:ce.id,children:`Me`}),(0,$.jsx)(O,{value:`none`,children:`Unassigned`}),(le.data??[]).filter(e=>e.userId!==ce.id).map(e=>(0,$.jsx)(O,{value:e.userId,children:e.name},e.userId))]}),(0,$.jsxs)(P,{label:`Archived`,value:t.archived,onValueChange:e=>D({archived:S.shape.archived.parse(e)}),children:[(0,$.jsx)(O,{value:`exclude`,children:`Hide archived`}),(0,$.jsx)(O,{value:`include`,children:`Include archived`}),(0,$.jsx)(O,{value:`only`,children:`Archived only`})]})]}),(0,$.jsx)(a,{variant:`ghost`,onClick:()=>{n(Ge.parse({sort:t.sort})),re(!1)},children:`Reset filters`})]})]}),(0,$.jsxs)(at,{children:[(0,$.jsx)(L,{render:(0,$.jsx)(ve,{label:`Display`}),children:(0,$.jsx)(Et,{})}),(0,$.jsxs)(R,{align:`end`,className:`w-[min(19rem,calc(100vw-2rem))] gap-3 p-4`,children:[(0,$.jsx)(z,{children:`Display`}),(0,$.jsx)(P,{label:`Order by`,value:t.sort,onValueChange:e=>D({sort:S.shape.sort.parse(e),order:void 0}),children:Object.entries(m).map(([e,t])=>(0,$.jsx)(O,{value:e,children:t},e))}),(0,$.jsx)(ra,{label:`Direction`,value:t.order??r[t.sort],onChange:e=>D({order:S.shape.order.parse(e)}),options:[[`asc`,`Ascending`],[`desc`,`Descending`]]}),(0,$.jsx)(ra,{label:`Group by`,value:v,onChange:e=>y(Pe.parse(e)),options:[[`status`,`Status`],[`none`,`None`]]}),(0,$.jsx)(ge,{}),(0,$.jsx)(ra,{label:`Row spacing`,value:p,onChange:e=>h(Fe.parse(e)),options:[[`compact`,`Compact`],[`comfortable`,`Comfortable`]]}),(0,$.jsx)(ra,{label:`Label display`,value:g,onChange:e=>_(He.parse(e)),options:[[`compact`,`Compact preview`],[`all`,`All labels`]]}),(0,$.jsxs)(`fieldset`,{children:[(0,$.jsx)(`legend`,{className:`mb-2 text-xs font-medium text-muted-foreground`,children:`Properties`}),(0,$.jsx)(`div`,{className:`grid grid-cols-2 gap-x-3`,children:c.map(e=>(0,$.jsx)(M,{label:e.label,checked:e.visible,onCheckedChange:t=>l(e.id,t)},e.id))})]}),(0,$.jsx)(ge,{}),(0,$.jsx)(a,{variant:`ghost`,onClick:d,children:`Reset display`})]})]}),ee]}),(t.q||E>0)&&(0,$.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":`Active ticket filters`,children:[t.q&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({q:void 0}),children:[`Search: `,t.q,(0,$.jsx)(C,{className:`size-3`})]}),t.status&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({status:void 0}),children:[oe[t.status],(0,$.jsx)(C,{className:`size-3`})]}),t.priority&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({priority:void 0}),children:[(0,$.jsx)(o,{property:`priority`,value:t.priority}),` priority`,(0,$.jsx)(C,{className:`size-3`})]}),t.assigneeId&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({assigneeId:void 0}),children:[t.assigneeId===`none`?`Unassigned`:t.assigneeId===ce.id?`Assigned to me`:(0,$.jsxs)($.Fragment,{children:[`Assignee: `,(0,$.jsx)(f,{projectId:e,actorId:t.assigneeId})]}),(0,$.jsx)(C,{className:`size-3`})]}),t.label&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({label:void 0}),children:[`Label: `,(0,$.jsx)(B,{tag:t.label}),(0,$.jsx)(C,{className:`size-3`})]}),t.due&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({due:void 0}),children:[s[t.due],(0,$.jsx)(C,{className:`size-3`})]}),t.archived!==`exclude`&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>D({archived:`exclude`}),children:[t.archived===`only`?`Archived only`:`Including archived`,(0,$.jsx)(C,{className:`size-3`})]}),(0,$.jsx)(a,{variant:`ghost`,size:`sm`,onClick:()=>n(Ge.parse({sort:t.sort})),children:`Clear filters`})]})]})}function ra({label:e,value:t,onChange:n,options:r}){return(0,$.jsxs)(j,{className:i,children:[(0,$.jsx)(ye,{children:e}),(0,$.jsx)(Xe,{"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,$.jsx)(Je,{value:e,"aria-label":t,children:t},e))})]})}function ia({selected:e,onClear:t}){let n=ce(`bulk_update_tickets`),r=e[0]?.projectId;if(!r)return null;function i(i,a){n.mutateAsync({projectId:r,tickets:e.map(e=>({ticketId:e.id,expectedVersion:e.version})),changes:i}).then(()=>{D.success(`${a} applied to ${e.length} tickets`),t()}).catch(b)}let a=(t,a,o)=>(0,$.jsx)(_t,{property:t,projectId:r,value:a(e[0]),disabled:n.isPending,align:`end`,onChange:e=>i(o(e),mt[t]),children:mt[t]});return(0,$.jsx)(`div`,{className:`pointer-events-none fixed right-4 bottom-4 z-40 w-[100cqw] max-w-none md:right-10`,children:(0,$.jsxs)(`div`,{className:`pointer-events-auto mx-auto flex w-fit max-w-full flex-wrap items-center justify-center gap-1 rounded-xl border bg-popover p-1.5 text-popover-foreground shadow-lg animate-in fade-in-0 slide-in-from-bottom-4 duration-200`,role:`region`,"aria-label":`Selected tickets`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1 pr-1`,children:[(0,$.jsx)(ve,{label:`Clear selection`,size:`icon-sm`,disabled:n.isPending,onClick:t,children:(0,$.jsx)(C,{})}),(0,$.jsxs)(`span`,{className:`text-xs font-medium whitespace-nowrap tabular-nums`,role:`status`,children:[e.length,` selected`]}),n.isPending&&(0,$.jsx)(v,{className:`size-3.5`})]}),(0,$.jsx)(ge,{orientation:`vertical`,className:`hidden h-5! sm:block`}),a(`status`,e=>e.status,e=>({status:e})),a(`priority`,e=>e.priority,e=>({priority:e})),a(`assignee`,e=>e.assigneeId,e=>({assigneeId:e})),a(`kind`,e=>e.kind,e=>({kind:e})),(0,$.jsx)(ge,{orientation:`vertical`,className:`hidden h-5! sm:block`}),(0,$.jsx)(Se,{label:`Archive selected`,disabled:n.isPending,icon:(0,$.jsx)(F,{}),description:`Archive ${e.length} selected tickets?`,onConfirm:async()=>{await n.mutateAsync({projectId:r,tickets:e.map(e=>({ticketId:e.id,expectedVersion:e.version})),changes:{archived:!0}}),t()}})]})})}var aa=Ar({columnSizingFeature:ci,columnResizingFeature:si,rowSelectionFeature:$i,columnVisibilityFeature:Ci}),oa=100,sa={kind:!1,scopes:!1,assigneeId:!1,createdAt:!1,updatedAt:!1};function ca({status:e,count:t,collapsed:n,onToggle:r}){return(0,$.jsx)(`div`,{className:`flex items-center`,children:(0,$.jsxs)(a,{variant:`ghost`,className:`flex-1 justify-start gap-2 rounded-none px-3`,"aria-label":`${n?`Expand`:`Collapse`} ${oe[e]} tickets`,"aria-expanded":!n,onClick:r,children:[(0,$.jsx)(y,{className:je(`size-3 transition-transform duration-200`,n&&`-rotate-90`)}),(0,$.jsx)(o,{property:`status`,value:e}),(0,$.jsx)(`span`,{className:`text-xs tabular-nums text-muted-foreground`,children:t})]})})}function la(e,t,n){try{let r=t.safeParse(localStorage.getItem(e));return r.success?r.data:n}catch{return n}}function ua({ticket:e,property:t,value:n,iconOnly:r=!1}){let i=ee(e.projectId),{change:a,pending:o}=V(e);return i.canWrite?(0,$.jsx)(_t,{variant:`cell`,property:t,value:n,projectId:e.projectId,iconOnly:r,disabled:o,onChange:e=>void a({[t]:e})}):(0,$.jsx)(vt,{...ht(t,n),projectId:e.projectId,iconOnly:r})}var da=[{id:`select`,size:44,enableResizing:!1,enableHiding:!1,header:({table:e})=>(0,$.jsx)(M,{label:`Select all displayed tickets`,className:`sr-checkbox`,checked:e.getIsAllRowsSelected(),indeterminate:e.getIsSomeRowsSelected()&&!e.getIsAllRowsSelected(),onCheckedChange:t=>e.toggleAllRowsSelected(t)}),cell:({row:e})=>(0,$.jsx)(M,{label:`Select ${e.original.key}`,className:`sr-checkbox`,checked:e.getIsSelected(),onCheckedChange:t=>e.toggleSelected(t)})},{accessorKey:`key`,header:`Ticket`,size:100,minSize:90},{accessorKey:`title`,header:`Title`,size:400,enableHiding:!1,minSize:200,cell:({row:e})=>(0,$.jsx)(it,{className:`ticket-title block text-[13px] leading-5 font-normal whitespace-normal wrap-anywhere text-foreground hover:text-primary`,to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:e.original.projectId,ticketId:e.original.id},children:e.original.title})},...[`labels`,`scopes`].map(e=>({accessorKey:e,header:e===`labels`?`Labels`:`Scopes`,size:180,minSize:120,cell:({row:t})=>(0,$.jsx)(ft,{tags:t.original[e],label:e===`labels`?`Labels`:`Scopes`,variant:e===`labels`?`secondary`:`outline`})})),{accessorKey:`status`,header:`Status`,size:115,minSize:105,cell:({row:e})=>(0,$.jsx)(ua,{ticket:e.original,property:`status`,value:e.original.status})},{accessorKey:`priority`,header:`Priority`,size:72,minSize:64,cell:({row:e})=>(0,$.jsx)(ua,{ticket:e.original,property:`priority`,value:e.original.priority,iconOnly:!0})},{accessorKey:`difficulty`,header:`Difficulty`,size:90,minSize:85,cell:({row:e})=>(0,$.jsx)(ua,{ticket:e.original,property:`difficulty`,value:e.original.difficulty})},{accessorKey:`kind`,header:`Kind`,size:110,cell:({row:e})=>(0,$.jsx)(ua,{ticket:e.original,property:`kind`,value:e.original.kind})},{accessorKey:`assigneeId`,header:`Assignee`,size:160,cell:({row:e})=>(0,$.jsx)(ua,{ticket:e.original,property:`assignee`,value:e.original.assigneeId})},{accessorKey:`dueAt`,header:`Due`,size:100,minSize:90,cell:({row:e})=>(0,$.jsx)(N,{value:e.original.dueAt,open:!ue.some(t=>t===e.original.status)})},...[`createdAt`,`updatedAt`].map(e=>({accessorKey:e,header:e===`createdAt`?`Created`:`Updated`,size:130,cell:({row:t})=>(0,$.jsx)(Ae,{value:t.original[e],className:`text-muted-foreground`})}))],fa={key:`number`,title:`title`,labels:`labels`,status:`status`,priority:`priority`,difficulty:`difficulty`,kind:`kind`,assigneeId:`assignee`,dueAt:`due`,createdAt:`created`,updatedAt:`updated`},pa=e=>e??`all`,ma=`a, button, input, label, [role=checkbox], [role=combobox], [role=menu]`,ha=`min-w-full table-fixed @min-[1051px]:w-(--table-width)`;function ga({leaves:e}){return(0,$.jsx)(`colgroup`,{children:e.map(e=>(0,$.jsx)(`col`,{"data-column":e.id,style:{width:e.getSize()}},e.id))})}function _a({project:e,search:n,onSearch:i}){let o=ee(e.id),s=se(),l=Ne(),d=`kanvil:${s.id}:ticket-columns`,f=`kanvil:${s.id}:ticket-density`,m=`kanvil:${s.id}:ticket-label-display`,h=`kanvil:${s.id}:ticket-grouping`,[g,_]=(0,H.useState)(()=>la(m,He,`compact`)),[v,b]=(0,H.useState)(()=>la(h,Pe,`status`)),[x,te]=(0,H.useState)(()=>la(f,Fe,`compact`)),[C,ne]=(0,H.useState)(()=>{try{return{...sa,..._e(Ee(),xe()).parse(JSON.parse(localStorage.getItem(d)??`{}`))}}catch{return sa}});(0,H.useEffect)(()=>{try{localStorage.setItem(d,JSON.stringify(C)),localStorage.setItem(f,x),localStorage.setItem(m,g),localStorage.setItem(h,v)}catch{}},[d,C,f,x,m,g,h,v]);let w=JSON.stringify({...n,offset:0,grouping:v}),[re,ie]=(0,H.useState)({filterKey:w,pages:{}}),[T,le]=(0,H.useState)(()=>new Set),ue=re.filterKey===w?re.pages:{},E=v===`status`?ae.filter(e=>!n.status||e===n.status):[void 0],O=E.flatMap(e=>Array.from({length:ue[pa(e)]??1},(t,n)=>({status:e,offset:n*oa}))),k=St({queries:O.map(({status:t,offset:r})=>u.query(`list_tickets`,{projectId:e.id,...n,status:t??n.status,offset:r,limit:oa}))}),A=E.map(e=>({status:e,data:{items:O.flatMap((t,n)=>t.status===e?k[n]?.data?.items??[]:[]),total:k[O.findIndex(t=>t.status===e)]?.data?.total??0}})),he=Object.fromEntries(A.map(e=>[pa(e.status),Math.max(1,Math.ceil(e.data.total/oa))])),ge=E.some(e=>(ue[pa(e)]??1)<(he[pa(e)]??1));ge&&ie({filterKey:w,pages:he});let j=new Map;for(let e of A)for(let t of e.data?.items??[]){let e=j.get(t.id);(!e||t.version>e.version)&&j.set(t.id,t)}let M=ge||k.some(e=>e.isPending),ye=[...j.keys()].join(`
|
|
2
|
-
`),[Ce,we]=(0,H.useState)({filterKey:w,ids:null,fresh:new Set});if(Ce.filterKey!==w)we({filterKey:w,ids:null,fresh:new Set});else if(Ce.ids===null)M||we({filterKey:w,ids:ye,fresh:new Set});else if(Ce.ids!==ye){let e=new Set(Ce.ids.split(`
|
|
3
|
-
`));we({filterKey:w,ids:ye,fresh:new Set([...j.keys()].filter(t=>!e.has(t)))})}let N={isPending:M,error:k.find(e=>e.error)?.error,data:{items:[...j.values()].filter(e=>v===`none`||!T.has(e.status)),total:A.reduce((e,t)=>e+(t.data?.total??0),0)}},Te=Me(u.query(`list_views`,{projectId:e.id})),Oe=ce(`save_view`),P=ce(`delete_view`),[Ae,Le]=(0,H.useState)(!1),[Ke,qe]=(0,H.useState)(``),[Je,Ye]=(0,H.useState)(!1),[Xe,Ze]=(0,H.useState)(null),et=S.parse(Object.fromEntries(Object.entries(n).filter(([e])=>e!==`offset`))),nt=JSON.stringify(et)===JSON.stringify(S.parse({})),F=Te.data?.find(e=>JSON.stringify(et)===JSON.stringify(S.parse(e.filters))),rt=F?.name??(nt?`All tickets`:`Custom view`),I=ta({features:aa,columns:da,data:N.data?.items??[],getRowId:e=>e.id,columnResizeMode:`onChange`,enableRowSelection:o.canWrite,state:{columnVisibility:{...C,title:!0,select:o.canWrite}},onColumnVisibilityChange:ne}),it=I.getSelectedRowModel().rows.map(e=>e.original),L=A.filter(e=>e.data.total>0).flatMap(({status:e})=>e&&T.has(e)?[]:I.getRowModel().rows.filter(t=>!e||t.original.status===e).map(e=>e.id)),R=L.join(`
|
|
4
|
-
`);(0,H.useEffect)(()=>{M||yt(e.id,R?R.split(`
|
|
5
|
-
`):[])},[M,e.id,R]);let[z,at]=(0,H.useState)(null);(0,H.useEffect)(()=>{z&&document.querySelector(`tr[data-id="${CSS.escape(z)}"]`)?.scrollIntoView({block:`nearest`})},[z]);let ft=e=>{if(!L.length)return;let t=z?L.indexOf(z):-1,n=t<0?e>0?0:L.length-1:Math.min(L.length-1,Math.max(0,t+e));at(L[n]??null)},B={enabled:!Ae},mt={...B,guard:e=>!(e.target instanceof Element&&e.target.closest(ma)&&!e.target.closest(`tr[data-active=true]`))};t(`j`,()=>ft(1),B),t(`ArrowDown`,()=>ft(1),mt),t(`k`,()=>ft(-1),B),t(`ArrowUp`,()=>ft(-1),mt),t(`Enter`,()=>{let e=z?j.get(z):void 0;e&&l({to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:e.projectId,ticketId:e.id}})},mt),t(`x`,()=>{z&&o.canWrite&&I.getRowModel().rowsById[z]?.toggleSelected()},B);let ht=e=>{z&&document.querySelector(`tr[data-id="${CSS.escape(z)}"] td[data-column="${e}"] [role=combobox]`)?.click()};t(`s`,()=>ht(`status`),B),t(`p`,()=>ht(`priority`),B),t(`a`,()=>ht(`assigneeId`),B);let gt=e=>{I.resetRowSelection(),le(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},V=e=>{I.resetRowSelection(),ie({filterKey:JSON.stringify({...e,offset:0,grouping:v}),pages:{}}),i(e)};t(`c`,()=>{o.canWrite&&Le(!0)},{enabled:!Ae});let _t=(e,t)=>{t.defaultPrevented||t.target instanceof Node&&t.currentTarget.contains(t.target)&&(t.target instanceof Element&&t.target.closest(ma)||window.getSelection()?.toString()||l({to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:e.projectId,ticketId:e.id}}))};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(na,{projectId:e.id,search:n,onSearch:V,view:(0,$.jsxs)(Qe,{children:[(0,$.jsxs)(We,{render:(0,$.jsx)(a,{variant:`ghost`,"aria-label":`Ticket views`,title:rt,className:`max-w-full min-w-0 justify-start`}),children:[(0,$.jsx)(`span`,{className:`truncate`,children:rt}),(0,$.jsx)(y,{className:`size-3 shrink-0`})]}),(0,$.jsxs)(Be,{align:`start`,className:`max-h-[70dvh] w-60 overflow-y-auto`,children:[(0,$.jsx)(Ve,{children:(0,$.jsx)(Ie,{value:F?.id??(nt?`all`:`custom`),onValueChange:e=>{let t=Te.data?.find(t=>t.id===e);e===`all`?V(Ge.parse({})):t&&V({...t.filters,offset:0})},children:[{id:`all`,name:`All tickets`},...Te.data??[]].map(e=>(0,$.jsx)(Re,{value:e.id,closeOnClick:!0,children:e.name},e.id))})}),(0,$.jsx)(ze,{}),(0,$.jsxs)(Ve,{children:[o.canWrite&&(0,$.jsx)(Ue,{onClick:()=>I.toggleAllRowsSelected(!I.getIsAllRowsSelected()),children:I.getIsAllRowsSelected()?`Clear selection`:`Select all displayed tickets`}),(0,$.jsxs)(Ue,{onClick:()=>Ye(!0),children:[(0,$.jsx)(wt,{}),`Save current view`]}),F&&(0,$.jsxs)(Ue,{onClick:()=>Ze(F),children:[(0,$.jsx)(tt,{}),`Delete view `,F.name]})]})]})]}),actions:(0,$.jsx)(ve,{label:`New ticket`,title:`New ticket (C)`,variant:`default`,disabled:!o.canWrite,onClick:()=>Le(!0),children:(0,$.jsx)(ke,{})}),density:x,onDensityChange:te,labelDisplay:g,onLabelDisplayChange:_,grouping:v,onGroupingChange:b,columns:I.getAllLeafColumns().filter(e=>e.getCanHide()).map(e=>({id:e.id,label:String(e.columnDef.header),visible:e.getIsVisible()})),onColumnChange:(e,t)=>I.getColumn(e)?.toggleVisibility(t),onReset:()=>{ne(sa),te(`compact`),_(`compact`),b(`status`),V({...n,sort:`priority`,order:void 0,offset:0})}}),(0,$.jsx)(De,{title:`Save view`,open:Je,onOpenChange:Ye,busy:Oe.isPending,children:(0,$.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),Oe.mutateAsync({projectId:e.id,name:Ke,filters:S.parse(Object.fromEntries(Object.entries(n).filter(([e])=>e!==`offset`)))}).then(()=>{Ye(!1),qe(``),D.success(`View saved`)}).catch(()=>{})},children:[(0,$.jsx)(me,{label:`View name`,required:!0,maxLength:80,value:Ke,onChange:e=>qe(e.target.value)}),(0,$.jsx)(be,{error:Oe.error,pending:Oe.isPending,submitLabel:`Save view`,onCancel:()=>Ye(!1)})]})}),Xe&&(0,$.jsx)(Se,{label:`Delete view ${Xe.name}`,description:`Remove ${Xe.name} from saved views? Tickets stay unchanged.`,trigger:!1,open:!0,onOpenChange:e=>{e||Ze(null)},onConfirm:async()=>{await P.mutateAsync({projectId:e.id,viewId:Xe.id}),Ze(null)}}),(0,$.jsx)(fe,{error:N.error??P.error}),it.length>0&&(0,$.jsx)(ia,{selected:it,onClear:()=>I.resetRowSelection()}),N.isPending?(0,$.jsx)(pe,{}):N.error?(0,$.jsx)(a,{disabled:k.some(e=>e.isFetching),onClick:()=>{for(let e of k)e.error&&e.refetch()},children:`Retry loading tickets`}):(0,$.jsxs)(`div`,{className:`table-scroll min-h-0 min-w-0 flex-1 overflow-auto overscroll-contain [&_[data-slot=table-container]]:overflow-visible`,children:[(0,$.jsxs)(`div`,{role:`table`,"aria-label":`Tickets`,className:`ticket-table data-[density=comfortable]:[&_[data-priority]_svg]:size-5! data-[density=comfortable]:[&_[data-slot=badge]]:h-6 data-[density=comfortable]:[&_[data-slot=badge]]:px-2 data-[density=comfortable]:[&_[data-slot=badge]]:text-xs data-[density=comfortable]:[&_.status]:text-sm data-[density=comfortable]:[&_[data-slot=checkbox]]:size-5 data-[density=comfortable]:[&_.ticket-title]:text-[15px] data-[density=comfortable]:[&_.ticket-title]:leading-6 data-[density=comfortable]:[&_td]:text-sm data-[density=comfortable]:[&_td_svg]:size-4 data-[density=comfortable]:[&_td[data-column=key]]:text-xs`,"data-density":x,"data-label-display":g,style:{"--table-width":`${I.getTotalSize()}px`},children:[(0,$.jsx)(`div`,{className:`sticky top-0 z-20 bg-background`,children:(0,$.jsxs)(dt,{role:`presentation`,className:ha,children:[(0,$.jsx)(ga,{leaves:I.getVisibleLeafColumns()}),(0,$.jsx)(ot,{role:`rowgroup`,children:I.getHeaderGroups().map(e=>(0,$.jsx)(lt,{role:`row`,className:`hover:bg-transparent`,children:e.headers.map(e=>{let t=fa[e.column.id],i=t!==void 0&&n.sort===t,o=i?n.order??r[t]:void 0;return(0,$.jsxs)(st,{role:`columnheader`,scope:`col`,"data-column":e.column.id,"aria-sort":o===`asc`?`ascending`:o===`desc`?`descending`:void 0,className:je(`relative h-8 bg-transparent px-3 text-[10.5px] font-medium tracking-[0.08em] text-muted-foreground uppercase`,t&&`p-0`),style:{width:e.getSize()},children:[t?(0,$.jsxs)(a,{variant:`ghost`,className:je(`h-8 w-full justify-start gap-1 rounded-none px-3 text-[10.5px] font-medium tracking-[0.08em] text-muted-foreground uppercase hover:text-foreground`,i&&`text-foreground`),onClick:()=>V({...n,sort:t,order:i?o===`asc`?`desc`:`asc`:void 0,offset:0}),children:[(0,$.jsx)(I.FlexRender,{header:e}),o===`asc`&&(0,$.jsx)(c,{className:`size-3`}),o===`desc`&&(0,$.jsx)(p,{className:`size-3`})]}):(0,$.jsx)(I.FlexRender,{header:e}),e.column.getCanResize()&&(0,$.jsx)(a,{variant:`ghost`,className:`resizer absolute top-2 right-0 bottom-2 h-auto w-2 min-w-0 cursor-col-resize touch-none rounded-none border-r bg-transparent p-0 hover:border-primary hover:bg-transparent`,"aria-label":`Resize ${e.id} column`,onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onKeyDown:t=>{(t.key===`ArrowLeft`||t.key===`ArrowRight`)&&(t.preventDefault(),I.setColumnSizing(n=>({...n,[e.column.id]:Math.max(e.column.columnDef.minSize??60,e.column.getSize()+(t.key===`ArrowRight`?20:-20))})))}})]},e.id)})},e.id))})]})}),A.filter(e=>e.data&&e.data.total>0).map(({status:e,data:t})=>(0,$.jsxs)(dt,{role:`presentation`,className:ha,children:[(0,$.jsx)(ga,{leaves:I.getVisibleLeafColumns()}),(0,$.jsxs)(ct,{role:`rowgroup`,"aria-label":e?`${oe[e]} tickets`:`Tickets`,children:[e&&(0,$.jsx)(lt,{className:`ticket-status-heading hover:bg-transparent`,"data-status":e,children:(0,$.jsx)(st,{scope:`rowgroup`,className:`sticky top-8 z-10 border-b bg-[color-mix(in_oklab,var(--muted)_50%,var(--background))] p-0`,colSpan:I.getAllLeafColumns().filter(e=>e.getIsVisible()).length,children:(0,$.jsx)(ca,{status:e,count:t.total,collapsed:T.has(e),onToggle:()=>gt(e)})})}),(!e||!T.has(e))&&I.getRowModel().rows.filter(t=>!e||t.original.status===e).map(e=>(0,$.jsx)($e,{ticket:e.original,children:(0,$.jsx)(lt,{className:`ticket-row cursor-pointer data-[fresh=true]:animate-row-in data-[selected=true]:bg-primary/5 data-[active=true]:bg-muted/60 data-[active=true]:[&>td:first-child]:shadow-[inset_2px_0_0_var(--primary)]`,role:`row`,"data-id":e.id,"data-selected":e.getIsSelected(),"data-active":z===e.id||void 0,"data-fresh":Ce.fresh.has(e.id)||void 0,onClick:t=>_t(e.original,t),children:e.getVisibleCells().map(e=>(0,$.jsx)(ut,{className:je(`px-3 py-2 align-middle text-xs whitespace-normal in-data-[density=comfortable]:py-4`,e.column.id===`key`&&`font-mono text-[11px] text-muted-foreground`),role:`cell`,"data-column":e.column.id,"data-label":typeof e.column.columnDef.header==`string`?e.column.columnDef.header:void 0,children:(0,$.jsx)(I.FlexRender,{cell:e})},e.id))})},e.id))]})]},pa(e)))]}),!N.error&&N.data.total===0&&(0,$.jsx)(de,{title:nt&&!n.q?`No tickets yet`:`No matching tickets`,children:nt?o.canWrite&&(0,$.jsxs)(a,{variant:`default`,onClick:()=>Le(!0),children:[(0,$.jsx)(ke,{}),`Create the first ticket`]}):(0,$.jsx)(a,{onClick:()=>V(Ge.parse({})),children:`Clear filters`})})]}),!N.isPending&&!N.error&&(0,$.jsxs)(`footer`,{className:`shrink-0 py-2 text-xs text-muted-foreground`,children:[N.data.total,` tickets`]}),(0,$.jsx)(De,{size:`composer`,title:`New ticket`,open:Ae,onOpenChange:Le,children:Ae&&(0,$.jsx)(pt,{projectId:e.id,onSaved:()=>Le(!1)})})]})}export{_a as TicketList};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Dn as e,P as t,_a as n,xi as r}from"./forms-456UbfIC.js";import{ht as i,t as a}from"./index-Dt8wYIVA.js";import{i as o,n as s,r as c,t as l}from"./popover-BWk65ByY.js";var u=n();function d({tag:e,kind:n=`label`,color:o,children:s,...c}){let l=a(),d=n===`label`?o??l.find(t=>t.name===e)?.color??`gray`:void 0;return(0,u.jsxs)(t,{variant:n===`label`?`secondary`:`outline`,...c,"data-label-color":d,children:[d&&(0,u.jsx)(`span`,{"aria-hidden":`true`,className:r(`size-1.5 shrink-0 rounded-full bg-current`,i(d).className),style:i(d).style}),s??(0,u.jsx)(`span`,{className:`min-w-0 break-words whitespace-normal`,children:e})]})}function f({tags:n,label:r,variant:i}){return n.length?(0,u.jsxs)(l,{children:[(0,u.jsxs)(o,{render:(0,u.jsx)(e,{variant:`ghost`,className:`ticket-tags-trigger h-auto max-w-full min-w-0 justify-start gap-1 p-0 hover:bg-transparent`,"aria-label":`${r}: ${n.join(`, `)}`}),children:[n.map((e,t)=>(0,u.jsx)(d,{tag:e,kind:i===`secondary`?`label`:`scope`,variant:i,className:`ticket-tag min-w-0 max-w-28 shrink data-[preview-extra]:hidden`,"data-secondary":t===1||void 0,"data-preview-extra":t>1||void 0,children:(0,u.jsx)(`span`,{className:`truncate`,children:e})},e)),n.length>1&&(0,u.jsxs)(t,{variant:`outline`,className:`ticket-tags-overflow shrink-0 data-[wide-overflow=false]:hidden`,"data-wide-overflow":n.length>2,children:[(0,u.jsxs)(`span`,{className:`ticket-tags-count-wide`,children:[`+`,n.length-2]}),(0,u.jsxs)(`span`,{className:`ticket-tags-count-narrow`,children:[`+`,n.length-1]})]})]}),(0,u.jsxs)(s,{align:`start`,className:`w-[min(22rem,calc(100vw-2rem))] p-3`,children:[(0,u.jsx)(c,{children:r}),(0,u.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:n.map(e=>(0,u.jsx)(d,{tag:e,kind:i===`secondary`?`label`:`scope`,variant:i,className:`h-auto max-w-full whitespace-normal break-words`},e))})]})]}):null}export{f as n,d as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Dn as e,Gn as t,Jn as n,P as r,Zn as i,_a as a,c as o,cr as s,d as c,f as l,g as u,tr as d,ur as f,zi as p}from"./forms-456UbfIC.js";import{r as m,t as h}from"./member-directory-C81ugis6.js";import{$ as g,z as _}from"./index-Dt8wYIVA.js";import{n as v,r as y,t as b}from"./settings-layout-xR4hrfte.js";var x=a(),S=[{id:`general`,label:`General`,icon:m},{id:`members`,label:`Members`,icon:g}];function C({workspaceId:a,section:m,onSectionChange:g}){let C=d(),w=n(),T=C.data?.find(e=>e.id===a),E=p({...t.query(`list_workspace_members`,{workspaceId:a}),enabled:!!T?.role}),D=i(`update_workspace`),O=i(`set_workspace_member`);if(C.isPending)return(0,x.jsx)(u,{});if(!T?.role)return(0,x.jsxs)(c,{title:`Workspace unavailable`,children:[(0,x.jsx)(l,{error:C.error}),(0,x.jsx)(e,{render:(0,x.jsx)(_,{to:`/`}),children:`Back to projects`})]});let k=T.role===`admin`,A=w.data?.filter(e=>e.workspaceId===T.id).length??0;return(0,x.jsx)(x.Fragment,{children:(0,x.jsxs)(y,{title:`Workspace settings`,value:m,onChange:g,sections:S,children:[(0,x.jsxs)(f,{value:`general`,children:[(0,x.jsx)(`section`,{children:(0,x.jsx)(b,{name:T.name,description:T.description,nameLabel:`Workspace name`,canEdit:k,version:T.version,pending:D.isPending,error:D.error,editLabel:`Edit workspace`,badges:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(r,{variant:`secondary`,className:`ml-0.5 font-mono text-[10px] font-normal`,children:T.slug}),(0,x.jsx)(o,{label:`Copy workspace key`,value:T.slug,size:`icon-xs`})]}),onSave:e=>D.mutateAsync({workspaceId:a,expectedVersion:T.version,name:e.name,description:e.description}).then(()=>s.success(`Workspace saved`))})}),(0,x.jsxs)(`section`,{children:[(0,x.jsx)(v,{title:`Projects`,description:`${A} ${A===1?`project`:`projects`} you can access in this workspace.`,children:(0,x.jsx)(e,{render:(0,x.jsx)(_,{to:`/`}),children:`View projects`})}),(0,x.jsx)(v,{title:`Members`,description:`Workspace roles apply to projects that use workspace access.`,children:(0,x.jsx)(e,{onClick:()=>g(`members`),children:`Manage members`})})]})]}),(0,x.jsx)(f,{value:`members`,children:(0,x.jsx)(h,{people:E.data??[],pending:O.isPending,loading:E.isPending,error:E.error,canAdmin:k,scope:`workspace`,onChange:(e,t)=>O.mutateAsync({workspaceId:a,email:e,role:t})})})]})})}export{C as WorkspaceSettings};
|