@maudecode/kanvil 0.2.1 → 0.4.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.
Files changed (301) hide show
  1. package/apps/server/.env.example +19 -0
  2. package/apps/server/dist/auth-Cuo7ECLh.mjs +7770 -0
  3. package/apps/server/dist/client.mjs +884 -0
  4. package/apps/server/dist/{config-CbNqtJEj.mjs → config-DtNfVSnB.mjs} +28 -133
  5. package/apps/server/dist/index.mjs +2503 -295
  6. package/apps/server/dist/instance-CCeXRJ6m.mjs +133 -0
  7. package/apps/server/dist/migrate.mjs +1 -1
  8. package/apps/server/dist/recover.mjs +5 -4
  9. package/apps/server/dist/src-tQ82UI8k.mjs +4818 -0
  10. package/apps/server/drizzle/0014_inbox_dismissal.sql +1 -0
  11. package/apps/server/drizzle/0015_notification_categories.sql +14 -0
  12. package/apps/server/drizzle/0016_ticket_resources.sql +19 -0
  13. package/apps/server/drizzle/0017_project_backgrounds.sql +3 -0
  14. package/apps/server/drizzle/0018_delivery_outbox.sql +65 -0
  15. package/apps/server/drizzle/0019_retire_push_deliveries.sql +1 -0
  16. package/apps/server/drizzle/0020_calendar_feeds.sql +16 -0
  17. package/apps/server/drizzle/0021_staged_uploads.sql +14 -0
  18. package/apps/server/drizzle/0022_manual_order.sql +6 -0
  19. package/apps/server/drizzle/0023_workspace_invitations.sql +22 -0
  20. package/apps/server/drizzle/0024_workflow_states.sql +39 -0
  21. package/apps/server/drizzle/0025_workspace_labels.sql +10 -0
  22. package/apps/server/drizzle/0026_public_read.sql +1 -0
  23. package/apps/server/drizzle/0027_custom_fields.sql +16 -0
  24. package/apps/server/drizzle/0028_project_lifecycle.sql +11 -0
  25. package/apps/server/drizzle/0029_ticket_relocation.sql +16 -0
  26. package/apps/server/drizzle/0030_repository_connections.sql +39 -0
  27. package/apps/server/drizzle/0031_repository_providers.sql +3 -0
  28. package/apps/server/drizzle/0032_workspace_ownership.sql +11 -0
  29. package/apps/server/drizzle/0033_import_runs.sql +38 -0
  30. package/apps/server/drizzle/0034_issue_sync.sql +38 -0
  31. package/apps/server/drizzle/0035_account_deletion.sql +9 -0
  32. package/apps/server/drizzle/0036_workspace_roles.sql +16 -0
  33. package/apps/server/drizzle/0037_email_code_owner.sql +14 -0
  34. package/apps/server/drizzle/0038_time_entries.sql +19 -0
  35. package/apps/server/drizzle/meta/0014_snapshot.json +4246 -0
  36. package/apps/server/drizzle/meta/0015_snapshot.json +4297 -0
  37. package/apps/server/drizzle/meta/0016_snapshot.json +4443 -0
  38. package/apps/server/drizzle/meta/0017_snapshot.json +4468 -0
  39. package/apps/server/drizzle/meta/0018_snapshot.json +4948 -0
  40. package/apps/server/drizzle/meta/0019_snapshot.json +4826 -0
  41. package/apps/server/drizzle/meta/0020_snapshot.json +4947 -0
  42. package/apps/server/drizzle/meta/0021_snapshot.json +5059 -0
  43. package/apps/server/drizzle/meta/0022_snapshot.json +5094 -0
  44. package/apps/server/drizzle/meta/0023_snapshot.json +5267 -0
  45. package/apps/server/drizzle/meta/0024_snapshot.json +5405 -0
  46. package/apps/server/drizzle/meta/0025_snapshot.json +5474 -0
  47. package/apps/server/drizzle/meta/0026_snapshot.json +5481 -0
  48. package/apps/server/drizzle/meta/0027_snapshot.json +5605 -0
  49. package/apps/server/drizzle/meta/0028_snapshot.json +5699 -0
  50. package/apps/server/drizzle/meta/0029_snapshot.json +5809 -0
  51. package/apps/server/drizzle/meta/0030_snapshot.json +6066 -0
  52. package/apps/server/drizzle/meta/0031_snapshot.json +6074 -0
  53. package/apps/server/drizzle/meta/0032_snapshot.json +6100 -0
  54. package/apps/server/drizzle/meta/0033_snapshot.json +6406 -0
  55. package/apps/server/drizzle/meta/0034_snapshot.json +6698 -0
  56. package/apps/server/drizzle/meta/0035_snapshot.json +6704 -0
  57. package/apps/server/drizzle/meta/0036_snapshot.json +6825 -0
  58. package/apps/server/drizzle/meta/0037_snapshot.json +6825 -0
  59. package/apps/server/drizzle/meta/0038_snapshot.json +6998 -0
  60. package/apps/server/drizzle/meta/_journal.json +175 -0
  61. package/apps/web/dist/assets/CompositeItem-DgnfVvrF.js +1 -0
  62. package/apps/web/dist/assets/Trans-f2VYVS9z.js +1 -0
  63. package/apps/web/dist/assets/abnfDiagram-WEYOIA3C-DTOx8N4B.js +1 -0
  64. package/apps/web/dist/assets/admin-settings-DBZL4siY.js +1 -0
  65. package/apps/web/dist/assets/arc-Y1ARJVZ4.js +1 -0
  66. package/apps/web/dist/assets/architecture-WOLXFQ4H-DlC3p5z3.js +1 -0
  67. package/apps/web/dist/assets/architectureDiagram-ZHVYKT53-DooN3Z58.js +36 -0
  68. package/apps/web/dist/assets/archive-restore-CGuLxoHC.js +1 -0
  69. package/apps/web/dist/assets/array-BifhSqXX.js +1 -0
  70. package/apps/web/dist/assets/az-AZ-DesqXNg5.js +1 -0
  71. package/apps/web/dist/assets/az-BE5iqNIE.js +1 -0
  72. package/apps/web/dist/assets/az-D-kj4lmf.js +1 -0
  73. package/apps/web/dist/assets/blockDiagram-RJAE7QA3-CD5AgY4U.js +140 -0
  74. package/apps/web/dist/assets/c4Diagram-XDPPPE54-CTDOcLuN.js +38 -0
  75. package/apps/web/dist/assets/channel-BhHvU4I-.js +1 -0
  76. package/apps/web/dist/assets/chunk-2E7WHVMD-D9qnBqTV.js +88 -0
  77. package/apps/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  78. package/apps/web/dist/assets/chunk-4EMNKR2T-Kz5JiJ85.js +1 -0
  79. package/apps/web/dist/assets/chunk-55XCU76K-DnKiFpYM.js +1 -0
  80. package/apps/web/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  81. package/apps/web/dist/assets/chunk-7S6XSTFO-CpdNd6Ke.js +2 -0
  82. package/apps/web/dist/assets/chunk-AQDTSKZB-CpyuSWt8.js +72 -0
  83. package/apps/web/dist/assets/chunk-DSNLSHJZ-DTC3y9rb.js +129 -0
  84. package/apps/web/dist/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  85. package/apps/web/dist/assets/chunk-HAGFOTED-Bv8PrMYK.js +62 -0
  86. package/apps/web/dist/assets/chunk-HNE4Q36P-CDDJ_yRa.js +1 -0
  87. package/apps/web/dist/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  88. package/apps/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  89. package/apps/web/dist/assets/chunk-NGNAAXSQ-C2Wy9Xmz.js +136 -0
  90. package/apps/web/dist/assets/chunk-NQOKRVIF-lNtnsWHS.js +213 -0
  91. package/apps/web/dist/assets/chunk-UHW7PFBP-D79ptlTN.js +1 -0
  92. package/apps/web/dist/assets/chunk-VQ5W62QI-B8hWFCiM.js +1 -0
  93. package/apps/web/dist/assets/chunk-WQQL4CDK-DAGuWzS3.js +10 -0
  94. package/apps/web/dist/assets/chunk-XXDRQBXY-CnbRkih_.js +1 -0
  95. package/apps/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  96. package/apps/web/dist/assets/chunk-YZO67HFG-C0ptzlKO.js +1 -0
  97. package/apps/web/dist/assets/chunk-ZAUX2LTX-ah8U5xoJ.js +1 -0
  98. package/apps/web/dist/assets/chunk-ZCHMQSOR-DYqATOIZ.js +2 -0
  99. package/apps/web/dist/assets/classDiagram-v2-4MYWR3UA-DYytA-ua.js +217 -0
  100. package/apps/web/dist/assets/core-jXc03Sty.js +1 -0
  101. package/apps/web/dist/assets/corner-left-up-BCro--Gl.js +1 -0
  102. package/apps/web/dist/assets/cose-bilkent-JH36ORCC-lWVj4msc.js +1 -0
  103. package/apps/web/dist/assets/cynefin-EF2NZ3EQ-Xy6e6m1E.js +1 -0
  104. package/apps/web/dist/assets/cynefinDiagram-WF24UDRP-BYarZJSm.js +62 -0
  105. package/apps/web/dist/assets/cytoscape.esm-BegBNzOV.js +321 -0
  106. package/apps/web/dist/assets/dagre-NK4GIZVX-WLvvUY1o.js +4 -0
  107. package/apps/web/dist/assets/de-DAv77-wP.js +1 -0
  108. package/apps/web/dist/assets/de-DE-BIGY9SNm.js +1 -0
  109. package/apps/web/dist/assets/de-DLGjUGf_.js +1 -0
  110. package/apps/web/dist/assets/default-BgvtI7HK.js +56 -0
  111. package/apps/web/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  112. package/apps/web/dist/assets/delivery-settings-CZOtb4X8.js +1 -0
  113. package/apps/web/dist/assets/diagram-CBK3MWTC-D6PtxkLg.js +24 -0
  114. package/apps/web/dist/assets/diagram-I5XIIV2D-DTOKQwIY.js +24 -0
  115. package/apps/web/dist/assets/diagram-ODIL2UCW-BmERt0Xu.js +30 -0
  116. package/apps/web/dist/assets/diagram-PFBEJUXE-WDUe08eD.js +3 -0
  117. package/apps/web/dist/assets/diagram-RJA3I4VV-B2K-NLGG.js +41 -0
  118. package/apps/web/dist/assets/diagram-TYUNFSNR-BLf7PpV7.js +200 -0
  119. package/apps/web/dist/assets/dist-CumnGVmJ.js +1 -0
  120. package/apps/web/dist/assets/ebnfDiagram-V4P3TTPT-DwBUQs9p.js +1 -0
  121. package/apps/web/dist/assets/el-CG6Xy42v.js +1 -0
  122. package/apps/web/dist/assets/el-D2ypddWn.js +1 -0
  123. package/apps/web/dist/assets/el-GR-D2TjImt0.js +1 -0
  124. package/apps/web/dist/assets/elk-QONTBCTQ-AuT8PinL.js +27 -0
  125. package/apps/web/dist/assets/ellipsis-ZJM26JNS.js +1 -0
  126. package/apps/web/dist/assets/en-EnSRisMz.js +1 -0
  127. package/apps/web/dist/assets/en-US-DKYSujv3.js +1 -0
  128. package/apps/web/dist/assets/erDiagram-KYQIGQAA-h--u4Eo6.js +99 -0
  129. package/apps/web/dist/assets/es-B_49BMhR.js +1 -0
  130. package/apps/web/dist/assets/es-Bbj5WuMM.js +1 -0
  131. package/apps/web/dist/assets/es-ES-C_fRqLGU.js +1 -0
  132. package/apps/web/dist/assets/eventmodeling-K75KTNOO-CW4hDt1j.js +1 -0
  133. package/apps/web/dist/assets/flowDiagram-IUGLLWBU-BGUscnNP.js +1 -0
  134. package/apps/web/dist/assets/forms-C3pNy-qY.js +1 -0
  135. package/apps/web/dist/assets/fr-B-WmPGZD.js +1 -0
  136. package/apps/web/dist/assets/fr-CjuIKc1o.js +1 -0
  137. package/apps/web/dist/assets/fr-FR-_tnQsn4j.js +1 -0
  138. package/apps/web/dist/assets/ganttDiagram-R7GPNTJY-CB3lsQvj.js +292 -0
  139. package/apps/web/dist/assets/gitGraph-VSP46ZUC-Hu-kvdCR.js +1 -0
  140. package/apps/web/dist/assets/gitGraphDiagram-PDYL7XHY-DCuY3C1Q.js +106 -0
  141. package/apps/web/dist/assets/graphlib-DS17s2tU.js +1 -0
  142. package/apps/web/dist/assets/hi-BVVrZ-zZ.js +1 -0
  143. package/apps/web/dist/assets/hi-DvoDcUpL.js +1 -0
  144. package/apps/web/dist/assets/hi-IN-CcmFsZYy.js +1 -0
  145. package/apps/web/dist/assets/highlight-CKyEM4jx.js +5 -0
  146. package/apps/web/dist/assets/id-BhNWOQnp.js +1 -0
  147. package/apps/web/dist/assets/id-CPASBZ2r.js +1 -0
  148. package/apps/web/dist/assets/id-ID-C59tC61D.js +1 -0
  149. package/apps/web/dist/assets/index-BIuqxnJn.js +17 -0
  150. package/apps/web/dist/assets/index-DyQNFS69.css +2 -0
  151. package/apps/web/dist/assets/info-OHQRW6UA-Cc8VwTsk.js +1 -0
  152. package/apps/web/dist/assets/infoDiagram-MVDRKAX5-KIMOx55J.js +2 -0
  153. package/apps/web/dist/assets/init-C-OQMol4.js +1 -0
  154. package/apps/web/dist/assets/invitations-D5unaga2.js +1 -0
  155. package/apps/web/dist/assets/isSameWeek-2ftYGvBT.js +1 -0
  156. package/apps/web/dist/assets/ishikawaDiagram-HPEHV2GE-CAou726L.js +70 -0
  157. package/apps/web/dist/assets/it-Cav3_-xd.js +1 -0
  158. package/apps/web/dist/assets/it-Cd7u97Jd.js +1 -0
  159. package/apps/web/dist/assets/it-IT-BAP5O3gK.js +1 -0
  160. package/apps/web/dist/assets/item-Cj8xpMLk.js +1 -0
  161. package/apps/web/dist/assets/ja-DTmZE0Qe.js +1 -0
  162. package/apps/web/dist/assets/ja-JP-vQa7mEdh.js +1 -0
  163. package/apps/web/dist/assets/ja-LkOrjegp.js +1 -0
  164. package/apps/web/dist/assets/journeyDiagram-BOSHW7O7-YbJuPYDH.js +139 -0
  165. package/apps/web/dist/assets/kanban-definition-FNSA4HC5-nuRnm9y8.js +89 -0
  166. package/apps/web/dist/assets/katex-B_JcIwqj.js +257 -0
  167. package/apps/web/dist/assets/ko-BuYCMOUj.js +1 -0
  168. package/apps/web/dist/assets/ko-DPpXw683.js +1 -0
  169. package/apps/web/dist/assets/ko-KR-CXlpmX0-.js +1 -0
  170. package/apps/web/dist/assets/label-settings-B89Ehf78.js +1 -0
  171. package/apps/web/dist/assets/line-WsxZYwZr.js +1 -0
  172. package/apps/web/dist/assets/linear-C9iwaMOi.js +1 -0
  173. package/apps/web/dist/assets/lucide-DIlszs-T.js +1 -0
  174. package/apps/web/dist/assets/markdown-blocks-DSEA68s5.js +2 -0
  175. package/apps/web/dist/assets/member-directory-48yD01yN.js +1 -0
  176. package/apps/web/dist/assets/mermaid-parser.core-B5c-1CnP.js +7 -0
  177. package/apps/web/dist/assets/mermaid.core-vGVkgzA3.js +44 -0
  178. package/apps/web/dist/assets/mindmap-definition-6OY57UG3-uooJyUak.js +98 -0
  179. package/apps/web/dist/assets/mk-BZ2Rg2sU.js +1 -0
  180. package/apps/web/dist/assets/mk-CkaQRpqe.js +1 -0
  181. package/apps/web/dist/assets/mk-MK-BU5BLpXM.js +1 -0
  182. package/apps/web/dist/assets/nl-BtnPzRih.js +1 -0
  183. package/apps/web/dist/assets/nl-DiEjqOA8.js +1 -0
  184. package/apps/web/dist/assets/nl-NL-2aSpdZkg.js +1 -0
  185. package/apps/web/dist/assets/ordinal-BDEzSJ7C.js +1 -0
  186. package/apps/web/dist/assets/packet-JDAUHWVQ-WJpqlH1d.js +1 -0
  187. package/apps/web/dist/assets/path-fybaL0A-.js +1 -0
  188. package/apps/web/dist/assets/pegDiagram-ECIUJNBX-CUvajD93.js +1 -0
  189. package/apps/web/dist/assets/pie-XZMESJXO-DvandPby.js +1 -0
  190. package/apps/web/dist/assets/pieDiagram-GNMPY74T-CqxeyIaP.js +39 -0
  191. package/apps/web/dist/assets/pl-Beg8hEdK.js +1 -0
  192. package/apps/web/dist/assets/pl-CauoMfkf.js +1 -0
  193. package/apps/web/dist/assets/pl-PL-C5Wvnv7f.js +1 -0
  194. package/apps/web/dist/assets/preload-helper-BLdHbfdN.js +1 -0
  195. package/apps/web/dist/assets/project-lifecycle-CIAMJ-SX.js +1 -0
  196. package/apps/web/dist/assets/project-settings-C7lolDSl.js +1 -0
  197. package/apps/web/dist/assets/pt-BR-B4VZ35N_.js +1 -0
  198. package/apps/web/dist/assets/pt-BR-BpOhwoDW.js +1 -0
  199. package/apps/web/dist/assets/pt-BR-CVvI-ZB7.js +1 -0
  200. package/apps/web/dist/assets/public-project-DvvfaUd2.js +1 -0
  201. package/apps/web/dist/assets/quadrantDiagram-D57K4MC3-DFjNmaZc.js +7 -0
  202. package/apps/web/dist/assets/radar-ABXABTNO-CJhZF9j2.js +1 -0
  203. package/apps/web/dist/assets/railroad-I3PHUGI6-DZC10oBD.js +1 -0
  204. package/apps/web/dist/assets/railroad-abnf-LNEFI6M7-BUJF2n6u.js +1 -0
  205. package/apps/web/dist/assets/railroad-ebnf-DWYD2UWJ-CG7oB02K.js +1 -0
  206. package/apps/web/dist/assets/railroad-peg-JR7BVNR7-DBCZuZJY.js +1 -0
  207. package/apps/web/dist/assets/railroadDiagram-Y72NRBL7-CvN3poBq.js +1 -0
  208. package/apps/web/dist/assets/requirementDiagram-EQYSW5RA-BEItNirc.js +84 -0
  209. package/apps/web/dist/assets/rolldown-runtime-COiEfhsA.js +1 -0
  210. package/apps/web/dist/assets/rotate-ccw-GjVJPDML.js +1 -0
  211. package/apps/web/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  212. package/apps/web/dist/assets/ru-DOaRp00B.js +1 -0
  213. package/apps/web/dist/assets/ru-DjVJVHzv.js +1 -0
  214. package/apps/web/dist/assets/ru-RU-C7UUdGIh.js +1 -0
  215. package/apps/web/dist/assets/sankeyDiagram-SY24JHO5-DluLIjax.js +40 -0
  216. package/apps/web/dist/assets/search-ZaQmVnj1.js +85 -0
  217. package/apps/web/dist/assets/send-Dr9bXHhf.js +1 -0
  218. package/apps/web/dist/assets/sequenceDiagram-BLEHNHQU-ZcwnsNxK.js +169 -0
  219. package/apps/web/dist/assets/settings-DXvrVvyS.js +1 -0
  220. package/apps/web/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  221. package/apps/web/dist/assets/sliders-horizontal-C1t_zA7D.js +1 -0
  222. package/apps/web/dist/assets/src-BWF7jMDv.js +1 -0
  223. package/apps/web/dist/assets/stateDiagram-v2-A6IESKWZ-DD6vH3rM.js +291 -0
  224. package/apps/web/dist/assets/swimlanes-B3ENRKFQ-pX_qyO4X.js +1 -0
  225. package/apps/web/dist/assets/swimlanesDiagram-AYQRV4AK-CeVsLUsg.js +8 -0
  226. package/apps/web/dist/assets/switch-D-WTDajm.js +1 -0
  227. package/apps/web/dist/assets/table-BaRMFP84.js +1 -0
  228. package/apps/web/dist/assets/ticket-detail-CFJI4qoK.js +2 -0
  229. package/apps/web/dist/assets/ticket-editor-DL3nHG_q.js +2 -0
  230. package/apps/web/dist/assets/ticket-list-CDkweYGS.js +5 -0
  231. package/apps/web/dist/assets/ticket-list-controls-CmTgFQQ-.js +1 -0
  232. package/apps/web/dist/assets/timeline-definition-JXYKGLGB-DLBjAxKq.js +120 -0
  233. package/apps/web/dist/assets/toDate-B3HYxwtT.js +1 -0
  234. package/apps/web/dist/assets/tr-Ckc4TA71.js +1 -0
  235. package/apps/web/dist/assets/tr-DeYojjLx.js +1 -0
  236. package/apps/web/dist/assets/tr-TR-VVsL3uMp.js +1 -0
  237. package/apps/web/dist/assets/treeView-D4JQ5SDB-DsJ44q_q.js +1 -0
  238. package/apps/web/dist/assets/treemap-SAJKECNS-BmXoBpVL.js +1 -0
  239. package/apps/web/dist/assets/uk-B4ZvJ8xG.js +1 -0
  240. package/apps/web/dist/assets/uk-DACrfgCP.js +1 -0
  241. package/apps/web/dist/assets/uk-UA-DRpCbOps.js +1 -0
  242. package/apps/web/dist/assets/upload-BwGa8shS.js +1 -0
  243. package/apps/web/dist/assets/useQueries-sQEHjB0a.js +1 -0
  244. package/apps/web/dist/assets/usecaseDiagram-WPOLBNNX-eU2tr2si.js +328 -0
  245. package/apps/web/dist/assets/vennDiagram-Q3Y3IDCW-CoVTWGNg.js +34 -0
  246. package/apps/web/dist/assets/vi-CkqUo4w_.js +1 -0
  247. package/apps/web/dist/assets/vi-Dq2krfY8.js +1 -0
  248. package/apps/web/dist/assets/vi-VN-C0YFqq9j.js +1 -0
  249. package/apps/web/dist/assets/visual-editor-CBhwqTDu.js +208 -0
  250. package/apps/web/dist/assets/wardley-7MLQ67FV-C6mVVk98.js +1 -0
  251. package/apps/web/dist/assets/wardleyDiagram-IVAIDKWA-m3CeJc7a.js +78 -0
  252. package/apps/web/dist/assets/workspace-settings-DgLyieJN.js +1 -0
  253. package/apps/web/dist/assets/xychartDiagram-4URNHDU4-Dw6fLaip.js +7 -0
  254. package/apps/web/dist/assets/zh-CN-B7Rxc3Mp.js +1 -0
  255. package/apps/web/dist/assets/zh-CN-CC7ghLLr.js +1 -0
  256. package/apps/web/dist/assets/zh-CN-pcgTdR8c.js +1 -0
  257. package/apps/web/dist/assets/zh-TW-BlIRMi1C.js +1 -0
  258. package/apps/web/dist/assets/zh-TW-DymSXkFg.js +1 -0
  259. package/apps/web/dist/assets/zh-TW-awiwHjeM.js +1 -0
  260. package/apps/web/dist/index.html +14 -8
  261. package/bin/kanvil.mjs +3 -1
  262. package/compose.yml +12 -0
  263. package/docs/api.md +311 -10
  264. package/docs/cli.md +74 -0
  265. package/docs/infrastructure.md +2 -2
  266. package/docs/localization.md +25 -0
  267. package/docs/plan.md +34 -11
  268. package/docs/self-hosting.md +44 -5
  269. package/docs/themes.md +1 -1
  270. package/docs/verification.md +1 -1
  271. package/docs/workspaces.md +18 -2
  272. package/package.json +12 -8
  273. package/apps/server/dist/auth-I1XEr0d4.mjs +0 -2931
  274. package/apps/web/dist/assets/CompositeItem-BWPJ5Mol.js +0 -1
  275. package/apps/web/dist/assets/admin-settings-DZqkC6ju.js +0 -1
  276. package/apps/web/dist/assets/date-picker-6H_iwP6t.js +0 -1
  277. package/apps/web/dist/assets/ellipsis-BT172Uvu.js +0 -1
  278. package/apps/web/dist/assets/forms-B4Vg3CPz.js +0 -92
  279. package/apps/web/dist/assets/image-edit-trigger-DGmVtWLC.js +0 -1
  280. package/apps/web/dist/assets/index-C_a21taR.js +0 -50
  281. package/apps/web/dist/assets/index-DM-D_3Sv.css +0 -2
  282. package/apps/web/dist/assets/kbd-tTQGZxaK.js +0 -1
  283. package/apps/web/dist/assets/link-DoIP9KJ6.js +0 -2
  284. package/apps/web/dist/assets/list-order-Bzsrihyr.js +0 -1
  285. package/apps/web/dist/assets/lucide-U995NW8E.js +0 -1
  286. package/apps/web/dist/assets/member-directory-BiCE8DRq.js +0 -1
  287. package/apps/web/dist/assets/popover-BhzZ0U1d.js +0 -1
  288. package/apps/web/dist/assets/project-label-provider-9L7Uts3_.js +0 -1
  289. package/apps/web/dist/assets/project-settings-Q7Q9Reec.js +0 -1
  290. package/apps/web/dist/assets/rotate-ccw-sjyLwLLy.js +0 -1
  291. package/apps/web/dist/assets/settings-B6qD6q1J.js +0 -1
  292. package/apps/web/dist/assets/settings-layout-B-AwUIMu.js +0 -1
  293. package/apps/web/dist/assets/switch-D0nFHj6l.js +0 -1
  294. package/apps/web/dist/assets/table-CYZiwo9g.js +0 -1
  295. package/apps/web/dist/assets/ticket-detail-B-3vbHSB.js +0 -2
  296. package/apps/web/dist/assets/ticket-editor-C3d8TZIT.js +0 -1
  297. package/apps/web/dist/assets/ticket-list-LtGGOnwN.js +0 -5
  298. package/apps/web/dist/assets/ticket-tags-2rdmkcJV.js +0 -1
  299. package/apps/web/dist/assets/upload-DXPRzAaa.js +0 -1
  300. package/apps/web/dist/assets/useNavigate-DFohfUD3.js +0 -1
  301. package/apps/web/dist/assets/workspace-settings-D3tCm1vH.js +0 -1
@@ -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,co as l,cr as u,d,et as f,f as p,g as m,go as h,m as g,nn as _,on as v,p as y,rr as b,s as x,v as S,w as C,wi as w,yo as T}from"./forms-B4Vg3CPz.js";import{y as E}from"./link-DoIP9KJ6.js";import{t as D}from"./rotate-ccw-sjyLwLLy.js";import{a as O,c as k,d as A,f as j,l as M,n as N,nt as P,p as F,r as I,t as L}from"./index-C_a21taR.js";import{i as R,n as z,t as B}from"./popover-BhzZ0U1d.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=T(h(),1),W=s();function G({people:e,value:n,onChange:r,disabled:i}){let[o,s]=(0,U.useState)(!1),[c,u]=(0,U.useState)(``),d=(0,U.useId)(),f=e.filter(e=>`${e.name} ${e.email}`.toLowerCase().includes(c.toLowerCase())),p=e.find(e=>e.email===n);function m(e){r(e),s(!1)}return(0,W.jsxs)(_,{className:`mb-4`,children:[(0,W.jsx)(v,{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)(P,{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)(k,{shouldFilter:!1,children:[(0,W.jsx)(A,{placeholder:`Search name or email…`,value:c,onValueChange:u,"aria-label":`Search accounts`}),(0,W.jsxs)(F,{children:[f.slice(0,50).map(e=>(0,W.jsxs)(j,{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)),l().safeParse(c.trim()).success&&!f.some(e=>e.email===c.trim())&&(0,W.jsxs)(j,{value:c.trim(),onSelect:()=>m(c.trim()),children:[`Use `,c.trim()]}),(0,W.jsx)(M,{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:l,canAdmin:h,scope:_,onChange:v}){let[T,k]=(0,U.useState)(``),[A,j]=(0,U.useState)(!1),[M,P]=(0,U.useState)(``),[F,R]=(0,U.useState)(),z=t.filter(e=>`${e.name} ${e.email}`.toLowerCase().includes(T.toLowerCase()));async function B(e,t){R(void 0);try{await v(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:T,onChange:k}),h&&(0,W.jsx)(g,{label:`Add member`,variant:`default`,onClick:()=>{R(void 0),P(``),j(!0)},children:(0,W.jsx)(w,{})})]})}),!A&&(0,W.jsx)(p,{error:F??l}),s?(0,W.jsx)(m,{}):z.length?(0,W.jsx)(O,{className:`gap-0`,children:z.map(e=>(0,W.jsxs)(L,{className:`member-row rounded-none border-x-0 border-t-0 border-b-border px-0 py-3`,children:[(0,W.jsxs)(I,{className:`min-w-0`,children:[(0,W.jsx)(b,{name:e.name,email:e.email,image:e.image}),_===`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)(N,{children:[(0,W.jsx)(C,{label:`Role for ${e.name}`,labelHidden:!0,className:`mb-0 w-36`,value:e.role,disabled:!h||a||_===`project`&&e.source===`workspace`&&e.role===`admin`,onValueChange:t=>{B(e.email,c(n).parse(t)).catch(()=>{})},children:n.map(e=>(0,W.jsx)(f,{value:e,children:K[e]},e))}),h&&(_===`workspace`||e.source!==`workspace`)&&(0,W.jsx)(x,{label:_===`project`&&e.inheritedRole?`Use workspace access`:`Remove member`,icon:_===`project`&&e.inheritedRole?(0,W.jsx)(D,{}):(0,W.jsx)(E,{}),danger:!(_===`project`&&e.inheritedRole),description:_===`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)(d,{title:T?`No matching members`:`No members`,className:`py-10`}),(0,W.jsx)(S,{title:`Add member`,open:A,onOpenChange:j,busy:a,children:(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault();let t=new FormData(e.currentTarget);B(M,c(n).parse(t.get(`role`))).then(()=>{j(!1),u.success(`Member added`)}).catch(()=>{})},children:[(0,W.jsx)(G,{people:r,value:M,onChange:P,disabled:a}),(0,W.jsx)(C,{label:_===`project`?`Project role`:`Workspace role`,name:`role`,defaultValue:`writer`,children:n.map(e=>(0,W.jsx)(f,{value:e,children:K[e]},e))}),(0,W.jsx)(y,{error:F,pending:a,submitLabel:`Add member`,submitDisabled:!M,onCancel:()=>j(!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,go as M,gr as N,ho as P,ht as F,i as I,ii as L,ir as R,it as z,jt as B,kt as V,lt as ee,mt as te,nt as H,oi as U,ot as ne,qt as re,r as ie,rt as W,tt as G,vt as K,wr as ae,wt as q,xi as J,xr as oe,xt as se,yo as Y,yr as ce,yt as X,zt as le}from"./forms-B4Vg3CPz.js";var Z=Y(M(),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=Y(P(),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===L,r=t.reason===`trigger-press`&&t.event.detail===0,a=!e&&(t.reason===`escape-key`||t.reason==null),o=q(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={...K(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 R,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),B(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,U(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 V(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=te(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),V=c(D,{stickIfOpen:B}),H=ee(()=>S.select(`open`),e=>{S.set(`openMethod`,e)}),U=S.useState(`triggerProps`,F),{getButtonProps:ne,buttonRef:re}=a({disabled:o,native:u}),W={open(e){return I?ae.open(e):_.open(e)}},{handlePreFocusGuardFocus:G,handleFocusTargetFocus:K}=ie(S,N),q=A(`button`,e,{state:{disabled:o,open:O},ref:[re,t,P,N],props:[V.reference,z,U,H,{[s]:``,id:C,"aria-haspopup":`dialog`,"aria-expanded":O,"aria-controls":M},b,ne],stateAttributesMapping:W}),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=re,...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`),F=ne({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`);I({store:b,domReference:L,positionerElement:j,open:T});let R=k===!0&&E!==`trigger-hover`;H(T&&R,A===`touch`,j,O);let z=b.useStateSetter(`positionerElement`),B={open:T,side:F.side,align:F.align,anchorHidden:F.anchorHidden,instant:M},V=W(e,B,{styles:F.positionerStyles,transitionStatus:N,props:y,refs:[n,z],hidden:!w,inert:!T});return(0,$.jsxs)(we.Provider,{value:F,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`),M=l.useState(`openOnHover`),P=l.useState(`closeDelay`);ce({open:h,ref:l.context.popupRef,onComplete(){h&&l.context.onOpenChangeComplete?.(!0)}}),F(O,{enabled:M&&!j,closeDelay:P});let I=o===void 0?v(l.context.popupRef):o,L=w!==!1&&m;l.useSyncedValue(`focusManagerModal`,L);let R=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,R],props:[x,{id:k,role:`dialog`,...se,"aria-labelledby":S,"aria-describedby":C,onKeyDown(e){f&&N.has(e.key)&&e.stopPropagation()}},z(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:J(`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:J(`font-medium`,e),...t})}export{Me as i,Ne as n,Pe as r,je as t};
@@ -1 +0,0 @@
1
- import{Gn as e,Pa as t,_a as n,go as r,yo as i,zi as a}from"./forms-B4Vg3CPz.js";var o={default:`text-primary`,red:`text-red-500`,orange:`text-orange-500`,amber:`text-amber-500`,yellow:`text-yellow-600 dark:text-yellow-400`,lime:`text-lime-600 dark:text-lime-400`,green:`text-green-600 dark:text-green-400`,emerald:`text-emerald-600 dark:text-emerald-400`,teal:`text-teal-600 dark:text-teal-400`,cyan:`text-cyan-600 dark:text-cyan-400`,sky:`text-sky-500`,blue:`text-blue-500`,indigo:`text-indigo-500`,violet:`text-violet-500`,purple:`text-purple-500`,fuchsia:`text-fuchsia-500`,pink:`text-pink-500`,rose:`text-rose-500`,gray:`text-muted-foreground`};function s(e){return t(e)?{className:o[e]}:{style:{color:e}}}var c=i(r(),1),l=n(),u=(0,c.createContext)([]),d=()=>(0,c.useContext)(u);function f({projectId:t,children:n}){let r=a({...e.query(`list_project_labels`,{projectId:t??``}),enabled:!!t});return(0,l.jsx)(u,{value:r.data??[],children:n})}export{o as i,d as n,s as r,f 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,go as C,h as w,hn as ee,lr as te,m as T,p as E,s as D,ur as O,v as k,w as A,wi as j,x as M,xi as N,y as P,yo as ne,zi as F}from"./forms-B4Vg3CPz.js";import{i as re,r as ie}from"./project-label-provider-9L7Uts3_.js";import{n as ae,t as I}from"./image-edit-trigger-DGmVtWLC.js";import{b as L,t as R,y as z}from"./link-DoIP9KJ6.js";import{t as B}from"./rotate-ccw-sjyLwLLy.js";import{r as V,t as H}from"./member-directory-BiCE8DRq.js";import{K as U,Y as W,at as G,q as K}from"./index-C_a21taR.js";import{n as q,r as oe,t as se}from"./settings-layout-B-AwUIMu.js";import{t as J}from"./ticket-tags-2rdmkcJV.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 ce=r(Y),X=p();function Z({value:e,label:n,selected:r,disabled:i,onSelect:a}){let o=ie(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=F({...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:N(`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)(j,{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 $=ne(C(),1);function le({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=K(r),w=(0,$.useRef)(null),T=g||y.isPending,E=Object.keys(C.data?.icons??{}).filter(e=>e.includes(o.trim().toLowerCase().replaceAll(` `,`-`)));async function D(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.jsx)(I,{label:`Change icon`,disabled:n,onClick:()=>{y.reset(),h(void 0),p(e.iconColor),s(``),u(96),i(!0)},children:(0,X.jsx)(U,{project:e,className:`size-16 rounded-xl bg-muted/50 p-1.5`})}),(0,X.jsxs)(k,{title:`Project icon`,open:r,onOpenChange:i,busy:T,children:[(0,X.jsxs)(te,{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)(O,{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:T}),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:E.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 ${re[d]}`,disabled:T,"aria-label":`Choose ${n.replaceAll(`-`,` `)}`,title:n.replaceAll(`-`,` `),onClick:()=>{D({kind:`library`,name:n,color:d})},children:(0,X.jsx)(G,{icon:{...r,width:24,height:24},className:`size-6`})},n)})}),E.length===0&&(0,X.jsx)(`p`,{className:`py-8 text-center text-muted-foreground`,children:`No matching icons`}),E.length>c&&(0,X.jsx)(t,{className:`mt-3 w-full`,onClick:()=>u(e=>e+96),children:`Show more icons`})]})]}),(0,X.jsx)(O,{value:`upload`,children:(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-5 py-10`,children:[(0,X.jsx)(U,{project:e,className:`size-20`}),(0,X.jsxs)(t,{disabled:T,onClick:()=>w.current?.click(),children:[(0,X.jsx)(ae,{}),T?`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=>D({kind:`image`,...e})).catch(h).finally(()=>v(!1)))}}),(0,X.jsx)(b,{error:m??C.error}),(0,X.jsxs)(P,{children:[(0,X.jsxs)(t,{disabled:T,onClick:()=>{D(null)},children:[(0,X.jsx)(B,{}),`Reset icon`]}),(0,X.jsx)(t,{disabled:T,onClick:()=>i(!1),children:`Cancel`})]})]})]})}function ue({projectId:t,canAdmin:r}){let i=F(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)(T,{label:`New label`,variant:`default`,onClick:()=>v(null),children:(0,X.jsx)(j,{})})]})}),(0,X.jsx)(b,{error:i.error}),i.isPending?(0,X.jsx)(S,{}):_.length?_.map(e=>(0,X.jsxs)(q,{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)(R,{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)(T,{label:`Edit label ${e.name}`,onClick:()=>v(e),children:(0,X.jsx)(L,{})}),(0,X.jsx)(D,{label:`Delete label ${e.name}`,icon:(0,X.jsx)(z,{}),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)(k,{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)(w,{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)(E,{error:a.error??o.error,pending:m,submitLabel:`Save label`,submitDisabled:!d.name.trim(),onCancel:()=>p(null)})]})})]})}var de=[{id:`general`,label:`General`,icon:V},{id:`members`,label:`Members`,icon:W},{id:`labels`,label:`Labels`,icon:ce}];function fe({project:e,section:r,onSectionChange:i}){let a=f(`update_project`),l=f(`set_member`),u=c(e.id),d=v(),p=F(n.query(`list_members`,{projectId:e.id})),g=F({...n.query(`list_workspace_members`,{workspaceId:e.workspaceId}),enabled:!!d.active?.role});return(0,X.jsx)(X.Fragment,{children:(0,X.jsxs)(oe,{title:`Project settings`,value:r,onChange:i,sections:de,children:[(0,X.jsxs)(O,{value:`general`,children:[(0,X.jsx)(`section`,{children:(0,X.jsx)(se,{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)(le,{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)(R,{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)(M,{value:e.createdAt})]})})}),(0,X.jsxs)(`section`,{children:[(0,X.jsx)(q,{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)(A,{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)(q,{title:`Workspace`,description:d.active?.name,children:d.active?.role&&(0,X.jsx)(t,{render:(0,X.jsx)(R,{to:`/workspaces/$workspaceId/settings`,params:{workspaceId:e.workspaceId}}),children:`Workspace settings`})})]})]}),(0,X.jsx)(O,{value:`members`,children:(0,X.jsx)(H,{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)(O,{value:`labels`,children:(0,X.jsx)(ue,{projectId:e.id,canAdmin:u.canAdmin})})]})})}export{fe as ProjectSettings};
@@ -1 +0,0 @@
1
- import{Li as e}from"./forms-B4Vg3CPz.js";var t={name:`rotate-ccw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]};t.node;var n=e(t);export{n as t};
@@ -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 ee,Ra as C,Ri as w,Rr as te,S as T,Sa as ne,Sn as re,Tn as ie,Yn as E,_a as ae,_i as D,_n as oe,_r as se,ao as ce,bi as le,bn as O,ci as k,cn as A,cr as j,d as M,di as N,dn as P,do as F,en as ue,et as I,f as L,g as R,ga as z,gi as de,gn as fe,go as pe,h as B,hi as V,hn as H,in as U,m as W,mi as me,mr as he,nn as ge,nr as _e,o as G,oi as ve,on as ye,oo as K,p as q,po as be,qa as xe,rn as Se,s as Ce,sn as we,t as Te,tn as Ee,to as De,tr as Oe,ur as J,ut as ke,v as Ae,vn 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,yo as Be,yr as Ve,z as He,zi as Ue}from"./forms-B4Vg3CPz.js";import{n as We,r as Ge}from"./useNavigate-DFohfUD3.js";import{n as Ke,t as qe}from"./date-picker-6H_iwP6t.js";import{t as Je}from"./image-edit-trigger-DGmVtWLC.js";import{t as Ye}from"./CompositeItem-BWPJ5Mol.js";import{n as Xe,t as Ze}from"./switch-D0nFHj6l.js";import{b as Qe,t as $e,y as et}from"./link-DoIP9KJ6.js";import{t as tt}from"./upload-DXPRzAaa.js";import{B as nt,G as rt,H as it,Q as at,S as ot,U as st,V as ct,W as lt,X as ut}from"./index-C_a21taR.js";import{n as dt,r as ft,t as pt}from"./settings-layout-B-AwUIMu.js";import{a as mt,i as X,n as ht,o as gt,r as Z,t as _t}from"./table-CYZiwo9g.js";var vt={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`}]]};vt.node;var yt=_(vt),bt={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`}]]};bt.node;var xt=_(bt),Q=Be(pe(),1),St=Q.createContext(void 0);function Ct(e=!1){let t=Q.useContext(St);if(!t&&!e)throw Error(k(86));return t}Object.keys(ie);function wt(e,t){return e.matches(`:disabled`)?!1:!t||e.form===t||e.form===null&&!e.hasAttribute(`form`)}var $=ae(),Tt={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 Et(e){try{return JSON.parse(e??`null`)}catch{return null}}function Dt(e){return{permissions:F({kanvil:K(ce(xe))}).safeParse(Et(e.permissions)).data?.kanvil??[],projectIds:F({projectIds:K(be())}).safeParse(Et(e.metadata)).data?.projectIds??[]}}function Ot(){let e=z(),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=Ue({queryKey:[`kanvil`,`credentials`],queryFn:()=>d.request(`/api/v1/credentials`,ne)});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)(W,{label:`Create API key`,variant:`default`,disabled:t.isPending,onClick:()=>a(!0),children:(0,$.jsx)(Pe,{})})}),(0,$.jsx)(L,{error:f.error??t.error}),f.isPending?(0,$.jsx)(R,{}):f.data?.length?(0,$.jsxs)(_t,{"aria-label":`API keys`,mobileLayout:`rows`,children:[(0,$.jsx)(mt,{children:(0,$.jsxs)(gt,{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)(ht,{children:f.data.map(r=>{let i=Dt(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)(gt,{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)(Xe,{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=>Tt[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)(Ce,{label:`Revoke API key`,icon:(0,$.jsx)(et,{}),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)}`,C,{method:`DELETE`}),await e.invalidateQueries({queryKey:[`kanvil`,`credentials`]})}})})]},r.id)})})]}):(0,$.jsx)(M,{title:`No API keys`,icon:Xe,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)(Ae,{busy:o,title:c?`API key created`:`Create API key`,open:i,onOpenChange:e=>{e||p()},children:c?(0,$.jsx)(kt,{value:c,onDone:p}):(0,$.jsx)(jt,{pending:o,setPending:s,projects:t.data??[],loading:t.isPending,onCancel:p,onCreated:async t=>{l(t),await e.invalidateQueries({queryKey:[`kanvil`,`credentials`]})}})})]})}function kt({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)(B,{label:`New API key`,value:e.key,readOnly:!0,className:`font-mono text-xs`,onFocus:e=>e.target.select()}),(0,$.jsx)(L,{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 At({scope:e,checked:n,onChange:r}){let i=(0,Q.useId)(),a=Tt[e];return(0,$.jsxs)(ge,{orientation:`horizontal`,className:`border-b py-3 last:border-0 [&_[data-slot=field-description]]:m-0 [&_[data-slot=field-description]]:text-xs`,children:[(0,$.jsx)(t,{id:i,checked:n,onCheckedChange:r}),(0,$.jsxs)(Se,{children:[(0,$.jsx)(ye,{htmlFor:i,children:a.name}),(0,$.jsx)(U,{children:a.description})]})]})}function jt({projects:e,loading:t,onCreated:n,onCancel:r,pending:i,setPending:o}){let s=Oe(),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,ee]=(0,Q.useState)(``),C=e.filter(e=>`${e.name} ${e.key} ${c.get(e.workspaceId)??``}`.toLowerCase().includes(S.toLowerCase()));async function w(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:Ke(g)})}))}catch(e){y(e)}finally{o(!1)}}return t?(0,$.jsx)(R,{}):e.length?(0,$.jsx)(`form`,{onSubmit:e=>{w(e)},children:(0,$.jsxs)(A,{disabled:i,children:[(0,$.jsx)(B,{label:`Key name`,name:`name`,required:!0,maxLength:100,placeholder:`e.g. Release automation`,autoFocus:!0}),(0,$.jsxs)(A,{className:`gap-2`,children:[(0,$.jsx)(we,{variant:`label`,children:`Project access`}),e.length>6&&(0,$.jsx)(T,{label:`Find project`,value:S,onChange:ee,className:`mb-2`}),(0,$.jsxs)(`div`,{className:`max-h-44 overflow-y-auto rounded-md border px-3 py-1`,children:[C.map(e=>(0,$.jsx)(G,{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)),C.length===0&&(0,$.jsx)(`p`,{className:`my-4 text-sm text-muted-foreground`,children:`No matching projects`})]}),(0,$.jsx)(U,{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)(I,{value:`read`,children:`Read only`}),(0,$.jsx)(I,{value:`write`,children:`Read and write`}),(0,$.jsx)(I,{value:`automation`,children:`Read, write, and claim work`}),(0,$.jsx)(I,{value:`custom`,children:`Custom permissions`})]}),b===`custom`&&(0,$.jsx)(A,{className:`gap-0`,children:xe.map(e=>(0,$.jsx)(At,{scope:e,checked:m.includes(e),onChange:t=>h(n=>t?[...n,e]:n.filter(t=>t!==e))},e))}),(0,$.jsx)(qe,{label:`Expires on`,value:g,onChange:e=>{e&&_(e)},bounds:{from:l,to:u}}),(0,$.jsx)(q,{error:v,pending:i,submitLabel:`Create API key`,pendingLabel:`Creating…`,submitDisabled:!f.length||!m.length,onCancel:r})]})}):(0,$.jsxs)(M,{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)($e,{to:`/`}),children:`Go to projects`})]})}function Mt(){let e=z(),t=E(),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`,De,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)(pt,{name:t.name,nameLabel:`Display name`,withDescription:!1,canEdit:!0,pending:o,error:u,editLabel:`Edit profile`,media:(0,$.jsx)(Je,{label:`Change photo`,round:!0,disabled:o,onClick:()=>i.current?.click(),children:(0,$.jsx)(_e,{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})}),t.image&&(0,$.jsxs)(a,{className:`mt-5`,variant:`ghost`,disabled:o,onClick:()=>{_()},children:[(0,$.jsx)(et,{}),`Remove photo`]}),(0,$.jsx)(H,{ref:i,type:`file`,disabled:o,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)(L,{error:c}),p&&(0,$.jsx)(`p`,{role:`status`,className:`mt-4 mb-0 text-sm text-muted-foreground`,children:p})]})}function Nt({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 Pt({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)(Nt,{palette:e.light,clip:`url(#${i}-light)`}),(0,$.jsx)(Nt,{palette:e.dark,clip:`url(#${i}-dark)`})]}):(0,$.jsx)(Nt,{palette:e[t]})]})}var Ft=`data-checked`,It=`data-unchecked`,Lt={checked(e){return e?{[Ft]:``}:{[It]:``}},...l,...c},Rt=Q.createContext(void 0);function zt(){return Q.useContext(Rt)}var Bt=Q.createContext(void 0);function Vt(){let e=Q.useContext(Bt);if(e===void 0)throw Error(k(52));return e}var Ht=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,_=zt(),{disabled:v,readOnly:y,required:b,form:x,checkedValue:S,touched:C=!1,validation:w,name:T,setCheckedValue:ne=V,setTouched:ie=V,registerInputRef:E=V}=_??{},{setTouched:ae,setFilled:D,state:oe,disabled:se}=Fe(),ce=ze(),{labelId:le,getDescriptionProps:k}=re(),A=se||ce.disabled||v||a,j=y||o,M=b||s,P=x,F=_?S===l:l===``,I=Q.useRef(null),L=je(A,I),R=Q.useRef(null),z=w?.registerInput,fe=Q.useCallback(e=>z?.(e,{controlRef:I,value:void 0}),[z]),pe=de(d,R,E,fe);Re(()=>{R.current?.checked&&D(!0)},[D]),Re(()=>{R.current&&E(A&&F?null:R.current)},[F,A,E]);let B=te(),H=O({id:m}),U=f?void 0:H,W={role:`radio`,"aria-checked":F,"aria-labelledby":Le(c,le,R,!f,U,g[`aria-label`]),[ee]:F?``:void 0,id:f?H:B,onKeyDown(e){e.key===`Enter`&&e.preventDefault()},onClick(e){if(e.defaultPrevented||A||j)return;e.preventDefault();let t=R.current;t&&p(t,e)},onFocus(e){L(!0),!(e.defaultPrevented||A||j||!C)&&(R.current?.click(),ie(!1))},onBlur(){_||L(!1)}},{getButtonProps:he,buttonRef:ge}=u({disabled:A,native:f,composite:!1}),_e={type:`radio`,ref:pe,form:P,id:U,name:T,tabIndex:-1,style:T?Ee:ue,"aria-hidden":!0,...l===void 0?me:{value:ke(l)},disabled:A,checked:F,required:M,readOnly:j,onChange(t){if(t.nativeEvent.defaultPrevented||A||j||l===void 0)return;let n=ve(e,t.nativeEvent);ne(l,n),!n.isCanceled&&ae(!0)},onClick(e){e.stopPropagation()},onFocus(){I.current?.focus()}},G=Q.useMemo(()=>({...oe,required:M,disabled:A,readOnly:j,checked:F}),[oe,A,j,F,M]),ye=G,K=_!==void 0,q=[n,I,ge],be=[W,g,he,k,w?e=>w.getValidationProps(A,e):me],xe=N(`span`,t,{enabled:!K,state:G,ref:q,props:be,stateAttributesMapping:Lt});return(0,$.jsxs)(Bt.Provider,{value:ye,children:[K?(0,$.jsx)(Ye,{tag:`span`,render:r,className:i,style:h,state:G,refs:q,props:be,stateAttributesMapping:Lt}):xe,(0,$.jsx)(`input`,{..._e,suppressHydrationWarning:!0})]})}),Ut=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=Vt(),c=s.checked,{mounted:l,transitionStatus:u,setMounted:d}=Me(c),f={...s,transitionStatus:u},p=Q.useRef(null),m=a||l,h=N(`span`,e,{ref:[t,p],state:f,props:o,stateAttributesMapping:Lt});return Ve({batch:!0,enabled:!c,open:c,ref:p,onComplete(){c||d(!1)}}),m?h:null}),Wt=[se],Gt=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:ee,state:C,validation:w,setDirty:T,setFilled:ne,validityData:ie}=Fe(),{labelId:E}=re(),{clearErrors:ae,elementRef:se}=i(),ce=Ct(!0),O=ee||a,k=S??m,A=te(g),[j,M]=le({controlled:d,default:f,name:`RadioGroup`,state:`value`}),[N,P]=Q.useState(!1),F=D((e,t)=>{u?.(e,t),!t.isCanceled&&M(e)}),ue=w.getInputControl,I=Q.useMemo(()=>({get current(){return ue()}}),[ue]),L=Q.useRef(null),R=Q.useRef(null),z=de(L,h),pe=Q.useRef(z),B=D(e=>{(L.current!==e||pe.current!==z)&&(pe.current=z,z?.(e))});Re(()=>{B(L.current)},[z,B]);let V=D(e=>{if(e){if(!e.disabled){R.current||=e;let t=L.current;(e.checked||t==null||t.disabled)&&B(e)}return()=>{R.current===e&&(R.current=null),L.current===e&&B(null)}}}),H=D(()=>{let e=se.current;if(!e)return j??null;for(let t of w.registeredInputs.keys())if(t.checked&&wt(t,e))return j??null;return null});oe(I,A,j??null,H,!O,m),fe(j,()=>{ae(k),T(j!==ie.initialValue),ne(j!=null),w.change(j);let e=R.current;j==null&&e&&!e.disabled&&B(e)});let U=E??ce?.legendId,W={...C,disabled:O??!1,required:l??!1,readOnly:s??!1},me=Q.useMemo(()=>({checkedValue:j,disabled:O,form:p,validation:w,name:k,readOnly:s,registerInputRef:V,required:l,setCheckedValue:F,setTouched:P,touched:N}),[j,O,p,w,k,s,V,l,F,P,N]),ge={id:g,role:`radiogroup`,"aria-required":l||void 0,"aria-disabled":O||void 0,"aria-readonly":s||void 0,"aria-labelledby":U,onBlur(e){o(e.currentTarget,e.relatedTarget)||(P(!1),y(!0),b(!1),x===`onBlur`&&w.commit(j))},onKeyDownCapture(e){e.key.startsWith(`Arrow`)&&P(!0)}};return(0,$.jsx)(Rt.Provider,{value:me,children:(0,$.jsx)(he,{render:n,className:r,style:_,state:W,props:[ge,v,e=>w.getValidationProps(O??!1,e)],refs:[t],stateAttributesMapping:c,enableHomeAndEndKeys:!1,modifierKeys:Wt})})});function Kt({className:e,...t}){return(0,$.jsx)(Gt,{"data-slot":`radio-group`,className:Y(`grid w-full gap-2`,e),...t})}function qt({className:e,...t}){return(0,$.jsx)(Ht,{"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)(Ut,{"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 Jt=[`system`,`light`,`dark`];function Yt(e){let t=URL.createObjectURL(new Blob([st([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 Xt({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)(qt,{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`?ut:at;return(0,$.jsxs)(f,{children:[(0,$.jsxs)(He,{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)(Pt,{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)(P,{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 Zt=e=>e.toLocaleLowerCase().normalize(`NFD`).replace(/\p{Diacritic}/gu,``);function Qt(){let e=ct(),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=>Zt(e.name).includes(Zt(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)(Kt,{value:e.mode,onValueChange:t=>e.setMode(ce(Jt).parse(t)),"aria-label":`Theme`,className:`grid grid-cols-3 gap-3`,children:Jt.map(t=>(0,$.jsxs)(`div`,{className:`relative`,children:[(0,$.jsx)(qt,{id:`mode-${t}`,value:t,className:`peer absolute inset-0 z-10 size-full aspect-auto rounded-xl opacity-0`}),(0,$.jsxs)(P,{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)(Pt,{theme:l,mode:t,className:`h-[8.75rem]`}),(0,$.jsx)(`span`,{className:`pb-1`,children:nt[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)(T,{label:`Search themes`,placeholder:`Search themes…`,value:i,onChange:a}),(0,$.jsx)(W,{label:`Create theme`,size:`icon-sm`,onClick:()=>u(l),children:(0,$.jsx)(Pe,{})}),(0,$.jsx)(W,{label:`Add theme`,size:`icon-sm`,onClick:()=>t.current?.click(),children:(0,$.jsx)(tt,{})})]})]}),(0,$.jsx)(H,{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(it(t))).catch(c),t.currentTarget.value=``)}}),(0,$.jsx)(L,{error:o}),(0,$.jsx)(Kt,{"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)(Xt,{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)(W,{label:`Duplicate ${t.name}`,className:`size-6`,onClick:()=>u(t),children:(0,$.jsx)(s,{})}),t.id.startsWith(`custom-`)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(W,{label:`Edit ${t.name}`,className:`size-6`,onClick:()=>r(t),children:(0,$.jsx)(Qe,{})}),(0,$.jsx)(W,{label:`Export ${t.name}`,className:`size-6`,onClick:()=>Yt(t),children:(0,$.jsx)(yt,{})}),(0,$.jsx)(Ce,{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)(et,{}),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)(Ae,{title:`Custom theme`,open:!!n,onOpenChange:e=>{e||r(null)},children:n&&(0,$.jsx)(en,{initial:n,onSaved:t=>{e.save(t),a(``),r(null)}})})]})}var $t={background:`Background`,foreground:`Text`,sidebar:`Sidebar`,primary:`Accent`,primaryForeground:`Accent text`};function en({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(rt(n))}catch(e){o(e)}},children:[(0,$.jsx)(B,{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:nt[e]}),(0,$.jsx)(Pt,{theme:n,mode:e}),(0,$.jsx)(`div`,{className:`mt-4 space-y-3`,children:lt.keyof().options.map(t=>(0,$.jsx)(B,{label:`${nt[e]} ${$t[t].toLowerCase()}`,type:`color`,value:n[e][t],onChange:i=>r({...n,[e]:{...n[e],[t]:i.target.value}})},t))})]},e))}),(0,$.jsx)(L,{error:i}),(0,$.jsx)(a,{type:`submit`,variant:`default`,className:`mt-4`,children:`Save theme`})]})}var tn=[{id:`account`,label:`Profile & security`,icon:We},{id:`appearance`,label:`Appearance`,icon:xt},{id:`credentials`,label:`API keys`,icon:Xe},{id:`notifications`,label:`Notifications`,icon:Ge}];function nn({section:e,onSectionChange:t}){let[n,i]=ot(),o=Ue({queryKey:[`info`],queryFn:()=>d.request(`/api/v1/info`,v)}),s=Ue({queryKey:[`accounts`],refetchOnMount:`always`,queryFn:async()=>{let e=await h.listAccounts();if(e.error)throw Error(e.error.message);return e.data}}),[c,l]=(0,Q.useState)(!1),[u,f]=(0,Q.useState)(!1);async function p(e){e.preventDefault(),i(void 0);let t=new FormData(e.currentTarget);if(t.get(`next`)!==t.get(`confirm`))i(Error(`The new passwords do not match.`));else{f(!0);try{let e=await h.changePassword({currentPassword:Te(t,`current`),newPassword:Te(t,`next`),revokeOtherSessions:!0});if(e.error)throw Error(e.error.message);l(!1),j.success(`Password updated. Other sessions signed out.`)}catch(e){i(e)}finally{f(!1)}}}return(0,$.jsxs)(ft,{title:`Settings`,value:e,onChange:t,sections:tn,children:[(0,$.jsxs)(J,{value:`account`,children:[(0,$.jsx)(Mt,{}),(0,$.jsxs)(`section`,{children:[(0,$.jsx)(r,{title:`Sign-in & security`}),(0,$.jsx)(dt,{title:`Local password`,description:`Changing your password signs out your other sessions.`,children:(0,$.jsx)(a,{onClick:()=>{i(void 0),l(!0)},children:`Change password`})}),o.data?.oidc&&(0,$.jsx)(dt,{title:o.data.oidc.name,description:s.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:s.data?.some(e=>e.providerId===`oidc`)?(0,$.jsx)(x,{variant:`secondary`,children:`Linked`}):(0,$.jsxs)(a,{disabled:u,onClick:()=>{f(!0),i(void 0),h.linkSocial({provider:`oidc`,callbackURL:`${window.location.origin}/settings?section=account`,errorCallbackURL:`${window.location.origin}/settings?section=account`}).then(e=>{if(e.error)throw Error(e.error.message)}).catch(i).finally(()=>f(!1))},children:[`Link `,o.data.oidc.name]})}),!c&&(0,$.jsx)(L,{error:n}),(0,$.jsx)(L,{error:s.error??o.error})]}),(0,$.jsx)(Ae,{title:`Change password`,open:c,onOpenChange:l,busy:u,children:(0,$.jsxs)(`form`,{onSubmit:e=>{p(e)},children:[(0,$.jsx)(B,{label:`Current password`,name:`current`,type:`password`,autoComplete:`current-password`,required:!0}),(0,$.jsx)(B,{label:`New password`,name:`next`,type:`password`,autoComplete:`new-password`,required:!0,minLength:12,maxLength:128}),(0,$.jsx)(B,{label:`Confirm new password`,name:`confirm`,type:`password`,autoComplete:`new-password`,required:!0,minLength:12,maxLength:128}),(0,$.jsx)(q,{error:n,pending:u,submitLabel:`Change password`,onCancel:()=>l(!1)})]})})]}),(0,$.jsx)(J,{value:`appearance`,children:(0,$.jsx)(Qt,{})}),(0,$.jsx)(J,{value:`credentials`,children:(0,$.jsx)(Ot,{})}),(0,$.jsx)(J,{value:`notifications`,children:(0,$.jsx)(rn,{pushAvailable:o.data?.push??!1})})]})}function rn({pushAvailable:e}){let t=z(),n=d.notificationPreferences(),i=Ue(n),a=w({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)(L,{error:i.error??a.error}),i.isPending?(0,$.jsx)(R,{}):i.data&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(dt,{title:`Inbox`,description:`Updates to tickets you follow appear in Kanvil.`,children:(0,$.jsx)(Ze,{"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)(dt,{title:`Push notifications`,description:e?`Send updates to devices you’ve registered.`:`Push delivery is not enabled on this instance.`,children:(0,$.jsx)(Ze,{"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{nn 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,go as c,h as l,lr as u,m as d,n as f,w as p,xi as m,yo as h}from"./forms-B4Vg3CPz.js";import{b as g}from"./link-DoIP9KJ6.js";import{i as _,n as v,r as y,s as b,t as x,x as S}from"./index-C_a21taR.js";var C=h(c(),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)(p,{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)(x,{className:m(`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)(b,{className:r?`line-clamp-none max-w-full`:void 0,children:e}),t&&(0,w.jsx)(_,{className:m(`line-clamp-none max-w-xl whitespace-normal`,r&&`m-0 text-xs`),children:t})]}),n&&(0,w.jsx)(v,{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:c,onSave:u,pending:p=!1,error:h,editLabel:_=`Edit`,media:v,badges:y,children:b}){let[x,S]=(0,C.useState)(null),T=x!==null&&x.version!==c,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)(l,{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:h})]}):(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:m(`max-w-xl whitespace-pre-wrap`,b?`mb-2`:`mb-0`),children:r||`No description`}),b]}),s&&!x&&(0,w.jsx)(d,{label:_,disabled:p,onClick:()=>S({name:n,description:r??``,version:c}),children:(0,w.jsx)(g,{})})]})}export{E as n,T as r,D as t};
@@ -1 +0,0 @@
1
- import{$r as e,Cn as t,En as n,Fr as r,Ir as ee,Li as i,Rr as a,Sn as o,_a as s,_n as te,bi as c,bn as l,ci as u,di as d,en as ne,gi as re,gn as ie,go as f,mi as ae,oi as oe,tn as se,vn as ce,wn as le,xi as p,xn as m,yi as h,yo as g}from"./forms-B4Vg3CPz.js";var _={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`}]]};_.node;var v=i(_),y=g(f(),1),b=y.createContext(void 0);function x(){let e=y.useContext(b);if(e===void 0)throw Error(u(63));return e}var S=`data-checked`,C=`data-unchecked`,w={...n,checked(e){return e?{[S]:``}:{[C]:``}}},T=s(),E=y.forwardRef(function(n,i){let{checked:s,className:u,defaultChecked:f,"aria-labelledby":p,form:g,id:_,inputRef:v,name:x,nativeButton:S=!1,onCheckedChange:C,readOnly:E=!1,required:D=!1,disabled:O=!1,render:ue,uncheckedValue:k,value:A,style:de,...j}=n,{clearErrors:M}=t(),{state:N,setTouched:P,setDirty:F,validityData:I,setFilled:L,validationMode:R,disabled:z,name:B,validation:V}=le(),{labelId:H}=o(),U=z||O,W=B??x,G=y.useRef(null),fe=re(G,v,V.inputRef),K=y.useRef(null),q=ce(U,K),J=a(),Y=l({id:_}),X=S?void 0:Y,[Z,pe]=c({controlled:s,default:!!f,name:`Switch`,state:`checked`});te(K,J,Z,void 0,!U,x),h(()=>{L(Z)},[Z,L]),ie(Z,()=>{M(W),F(Z!==I.initialValue),V.change(Z)});let{getButtonProps:me,buttonRef:he}=r({disabled:U,native:S}),ge=m(p,H,G,!S,X,j[`aria-label`]),_e={id:S?Y:J,role:`switch`,"aria-checked":Z,"aria-readonly":E||void 0,"aria-required":D||void 0,"aria-labelledby":ge,onFocus(){q(!0)},onBlur(){let e=G.current;e&&!U&&(P(!0),q(!1),R===`onBlur`&&V.commit(e.checked))},onClick(e){if(E||U)return;e.preventDefault();let t=G.current;t&&ee(t,e)}},Q={...V.getValidationProps(U),checked:Z,disabled:U,form:g,id:X,name:W,required:D,style:W?se:ne,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,ref:fe,onChange(t){if(t.nativeEvent.defaultPrevented)return;if(E){t.preventDefault();return}let n=t.currentTarget.checked,r=oe(e,t.nativeEvent);C?.(n,r),!r.isCanceled&&pe(n)},onClick(e){e.stopPropagation()},onFocus(){K.current?.focus()},...A===void 0?ae:{value:A}},$=y.useMemo(()=>({...N,checked:Z,disabled:U,readOnly:E,required:D}),[N,Z,U,E,D]),ve=d(`span`,n,{state:$,ref:[i,K,he],props:[_e,j,me,e=>V.getValidationProps(U,e)],stateAttributesMapping:w});return(0,T.jsxs)(b.Provider,{value:$,children:[ve,!Z&&W&&k!==void 0&&(0,T.jsx)(`input`,{type:`hidden`,form:g,name:W,value:k,disabled:U}),(0,T.jsx)(`input`,{...Q,suppressHydrationWarning:!0})]})}),D=y.forwardRef(function(e,t){let{render:n,className:r,style:ee,...i}=e,a=x();return d(`span`,e,{state:a,ref:t,stateAttributesMapping:w,props:i})});function O({className:e,size:t=`default`,...n}){return(0,T.jsx)(E,{"data-slot":`switch`,"data-size":t,className:p(`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,T.jsx)(D,{"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`})})}export{v as n,O as t};
@@ -1 +0,0 @@
1
- import{_a as e,go as t,xi as n}from"./forms-B4Vg3CPz.js";t();var r=e();function i({className:e,mobileLayout:t=`scroll`,...i}){return(0,r.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,r.jsx)(`table`,{"data-slot":`table`,role:`table`,"data-mobile-layout":t,className:n(`w-full caption-bottom text-sm`,e),...i})})}function a({className:e,...t}){return(0,r.jsx)(`thead`,{role:`rowgroup`,"data-slot":`table-header`,className:n(`[&_tr]:border-b`,e),...t})}function o({className:e,...t}){return(0,r.jsx)(`tbody`,{role:`rowgroup`,"data-slot":`table-body`,className:n(`[&_tr:last-child]:border-0`,e),...t})}function s({className:e,...t}){return(0,r.jsx)(`tr`,{role:`row`,"data-slot":`table-row`,className:n(`border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted`,e),...t})}function c({className:e,...t}){return(0,r.jsx)(`th`,{role:`columnheader`,"data-slot":`table-head`,className:n(`h-8 px-3 text-left align-middle text-xs font-normal whitespace-nowrap text-muted-foreground [&:has([role=checkbox])]:pr-0 text-[10.5px] font-medium tracking-[0.08em] uppercase`,e),...t})}function l({className:e,...t}){return(0,r.jsx)(`td`,{role:`cell`,"data-slot":`table-cell`,className:n(`px-3 py-2 align-middle text-[13px] whitespace-nowrap [&:has([role=checkbox])]:pr-0`,e),...t})}export{a,c as i,o as n,s as o,l as r,i as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ticket-editor-C3d8TZIT.js","assets/forms-B4Vg3CPz.js","assets/project-label-provider-9L7Uts3_.js","assets/date-picker-6H_iwP6t.js","assets/CompositeItem-BWPJ5Mol.js","assets/popover-BhzZ0U1d.js","assets/rotate-ccw-sjyLwLLy.js","assets/kbd-tTQGZxaK.js","assets/index-C_a21taR.js","assets/useNavigate-DFohfUD3.js","assets/link-DoIP9KJ6.js","assets/index-DM-D_3Sv.css","assets/ticket-tags-2rdmkcJV.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 te,Qn as k,Qt as A,Rr as j,Rt as ne,St as re,T as ie,Tr as ae,Wa as oe,Xt as se,Yn as ce,Yr as le,Zn as M,Zt as ue,_ as N,_a as de,_t as fe,b as pe,bt as me,ci as P,cr as F,d as he,di as ge,dr as _e,dt as ve,et as I,f as L,fr as ye,g as be,go as xe,gt as Se,h as Ce,hn 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 Le,pr as Re,qt as ze,rt as Be,s as z,t as B,ur as Ve,v as V,va as He,vt as Ue,w as We,wi as Ge,x as H,xi as U,xt as Ke,yi as qe,yo as Je,yr as Ye,yt as Xe,zi as W,zt as Ze}from"./forms-B4Vg3CPz.js";import{r as Qe,t as $e}from"./useNavigate-DFohfUD3.js";import{r as et,t as tt}from"./date-picker-6H_iwP6t.js";import{t as nt}from"./ellipsis-BT172Uvu.js";import{b as rt,t as it,y as at}from"./link-DoIP9KJ6.js";import{t as ot}from"./kbd-tTQGZxaK.js";import{t as st}from"./upload-DXPRzAaa.js";import{$ as ct,A as lt,D as ut,I as dt,J as ft,M as pt,a as G,et as mt,i as ht,it as gt,k as _t,n as vt,o as yt,r as K,rt as bt,s as xt,t as q,tt as St}from"./index-C_a21taR.js";import{t as Ct}from"./ticket-tags-2rdmkcJV.js";import{TicketEditor as wt,c as Tt,n as Et,o as Dt,r as J,s as Ot,u as kt}from"./ticket-editor-C3d8TZIT.js";import{t as At}from"./list-order-Bzsrihyr.js";var jt={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`}]]};jt.node;var Mt=y(jt),Nt={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};Nt.node;var Pt=y(Nt),Ft={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`}]]};Ft.node;var It=y(Ft),Lt={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`}]]};Lt.node;var Rt=y(Lt),zt={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`}]]};zt.node;var Bt=y(zt),Vt={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`}]]};Vt.node;var Ht=y(Vt);function Y(e,t,n,r){return{left:e,top:t,right:n,bottom:r,x:e,y:t,width:n-e,height:r-t}}function Ut(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}}function Wt(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(Ut(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:Y(r,i,a,o)}}function Gt(e,t,n){return e.findIndex(e=>t>e.left-2&&t<e.right+2&&n>e.top-2&&n<e.bottom+2)}function Kt(e){return Y(e.left,e.top,e.right,e.bottom)}function qt(e,t,n){let{lines:r}=Wt(e.getClientRects());if(r.length<2)return;let i=Gt(r,t,n);return{x:t,y:n,lineIndex:i===-1?void 0:i,element:e}}function Jt(e,t,n){let{lines:r,fallback:i}=Wt(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 Kt(r[n.lineIndex]);if(a!=null&&o!=null){let e=Gt(r,a,o);if(e!==-1)return Kt(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 Y(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 Y(l,f.top,u,p.bottom)}function Yt(e){return`contextElement`in e&&e.contextElement?e.contextElement:v(e)?e:void 0}function Xt(e,t){function n(t){Zt(e,t.currentTarget,t.clientX,t.clientY)}function r(e){t||n(e)}return{onFocus(){e.current=void 0},onMouseEnter:r,onMouseMove:r}}function Zt(e,t,n,r){let i=qt(t,n,r);return e.current=i,i}function Qt(e){return{name:`inline`,async fn(t){let n=t.elements.reference;if(typeof n?.getClientRects!=`function`)return{};let r=Yt(n),i=e.current,a=i?.element===n||i?.element===r?i:void 0,o=Jt(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 X=Je(xe(),1),$t=X.createContext(void 0);function Z(e){let t=X.useContext($t);if(t===void 0&&!e)throw Error(P(50));return t}var en={...Xe,instantType:e=>e.instantType,adaptiveOrigin:e=>e.adaptiveOrigin,closeDelay:e=>e.closeDelay},tn=class extends se{constructor(e,t,n){let r=new me;super(nn(e,r,t,n),rn(r),en)}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&&Zt(n,t.trigger,r.clientX,r.clientY)}})}};function nn(e,t,n,r=!1){return{...Ue(t,n,r),instantType:void 0,adaptiveOrigin:void 0,closeDelay:300,...e}}function rn(e){return{popupRef:X.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e,inlineRectCoordsRef:{current:void 0}}}var Q=de();function an(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 tn({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]),X.useImperativeHandle(o,()=>({unmount:_,close:()=>d.setOpen(!1,Fe(le))}),[_,d]);let v=p||h||s!=null;return(0,Q.jsxs)($t.Provider,{value:d,children:[s&&(0,Q.jsx)(re,{handle:s,store:d}),v&&(0,Q.jsx)(on,{store:d}),typeof u==`function`?u({payload:g}):u]})}function on({store:e}){let t=e.useState(`floatingRootContext`),n=m(t);return Ae(e,{activeTriggerProps:n.reference,inactiveTriggerProps:n.trigger,popupProps:n.floating}),null}var sn=ue(function(e){return Z(!0)?(0,Q.jsx)(an,{...e}):(0,Q.jsx)(Ze,{children:(0,Q.jsx)(an,{...e})})}),cn=X.createContext(void 0);function ln(){let e=X.useContext(cn);if(e===void 0)throw Error(P(48));return e}var un=X.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return Z().useState(`mounted`)||n?(0,Q.jsx)(cn.Provider,{value:n,children:(0,Q.jsx)(i,{ref:t,...r})}):null}),dn=A(function(e,t){let{render:n,className:r,delay:i,closeDelay:a,id:o,payload:s,handle:c,style:l,...u}=e,d=Z(!0),f=fe(c)??d;if(!f)throw Error(P(89));let p=j(o),m=f.useState(`isTriggerActive`,p),h=f.useState(`isOpenedByTrigger`,p),g=f.useState(`floatingRootContext`),_=f.context.inlineRectCoordsRef,v=X.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:ve(),delay:()=>({open:y,close:b}),triggerElementRef:v,isActiveTrigger:m,isClosing:()=>f.select(`transitionStatus`)===`ending`}),w=Se(g,{delay:y}),T={open:h},E=f.useState(`triggerProps`,C),D=Xt(_,h);return ge(`a`,e,{state:T,ref:[t,x,v],props:[ee,w.reference,E,D,{id:p},u],stateAttributesMapping:ae})}),fn=X.createContext(void 0);function pn(){let e=X.useContext(fn);if(e===void 0)throw Error(P(49));return e}var mn=X.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=ze,style:_,...v}=e,y=Z(),b=ln(),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:Qt(D)}),te=O.update;qe(()=>{S&&C&&te()},[S,C,te]);let k={open:S,side:O.side,align:O.align,anchorHidden:O.anchorHidden,instant:w},A=Be(e,k,{styles:O.positionerStyles,transitionStatus:T,props:v,refs:[t,y.useStateSetter(`positionerElement`)],hidden:!C,inert:!S});return(0,Q.jsx)(fn.Provider,{value:O,children:(0,Q.jsx)(ne,{id:x,children:A})})}),hn=X.forwardRef(function(e,t){let{className:n,render:r,style:i,...a}=e,o=Z(),{side:s,align:l}=pn(),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 Ye({open:u,ref:o.context.popupRef,onComplete(){u&&o.context.onOpenChangeComplete?.(!0)}}),Te(m,{closeDelay:h}),ge(`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 gn({...e}){return(0,Q.jsx)(sn,{"data-slot":`hover-card`,...e})}function _n({...e}){return(0,Q.jsx)(dn,{"data-slot":`hover-card-trigger`,...e})}function vn({className:e,side:t=`bottom`,sideOffset:n=4,align:r=`center`,alignOffset:i=4,...a}){return(0,Q.jsx)(un,{"data-slot":`hover-card-portal`,children:(0,Q.jsx)(mn,{align:r,alignOffset:i,side:t,sideOffset:n,className:`isolate z-50`,children:(0,Q.jsx)(hn,{"data-slot":`hover-card-content`,className:U(`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 $({projectId:e,ticketId:t,ticket:n,className:r,children:i}){let[a,o]=(0,X.useState)(!1),s=W({...g.query(`get_ticket`,{projectId:e,ticketId:t}),enabled:a}),c=s.data?.ticket;return(0,Q.jsxs)(gn,{open:a,onOpenChange:o,children:[(0,Q.jsx)(_n,{delay:400,render:(0,Q.jsx)(it,{to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:e,ticketId:t},className:U(`ticket-link text-foreground hover:text-primary`,r)}),children:i??(n?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:n.key}),` · `,n.title]}):t)}),(0,Q.jsx)(vn,{align:`start`,className:`w-80`,children:c?(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,Q.jsx)(`span`,{className:`font-mono`,children:c.key}),(0,Q.jsx)(p,{property:`status`,value:c.status}),(0,Q.jsx)(p,{property:`priority`,value:c.priority,iconOnly:!0})]}),(0,Q.jsx)(`p`,{className:`m-0 text-[13px] leading-5 font-medium wrap-anywhere`,children:c.title}),c.labels.length>0&&(0,Q.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:c.labels.map(e=>(0,Q.jsx)(Ct,{tag:e},e))})]}):(0,Q.jsx)(`p`,{className:`m-0 text-xs text-muted-foreground`,children:s.error?`Preview unavailable`:`Loading…`})})]})}var yn=(0,X.lazy)(()=>ft(()=>import(`./ticket-editor-C3d8TZIT.js`).then(e=>({default:e.TicketEditor})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])));function bn({ticket:e}){let t=k(e.projectId),n=W(g.query(`list_relations`,{projectId:e.projectId,ticketId:e.id})),[r,i]=(0,X.useState)(!1),[o,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(null),[f,m]=(0,X.useState)(0),[_,v]=(0,X.useState)(),y=W({...g.query(`get_ticket`,{projectId:e.projectId,ticketId:e.parentId??e.id}),enabled:!!e.parentId}),b=W(g.query(`list_tickets`,{projectId:e.projectId,parentId:e.id,archived:`include`,limit:20,offset:f})),x=M(`add_relation`),S=M(`remove_relation`);return(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(s,{compact:!0,title:`Relationships`,action:t.canWrite&&(0,Q.jsxs)(_t,{children:[(0,Q.jsx)(dt,{render:(0,Q.jsx)(R,{label:`Add relationship`}),children:(0,Q.jsx)(Ge,{})}),(0,Q.jsxs)(lt,{align:`end`,className:`w-48`,children:[(0,Q.jsxs)(pt,{onClick:()=>{x.reset(),v(void 0),u(null),i(!0)},children:[(0,Q.jsx)(Ht,{}),`Link existing ticket`]}),(0,Q.jsxs)(pt,{onClick:()=>c(!0),children:[(0,Q.jsx)(Rt,{}),`New child ticket`]})]})]})}),e.parentId&&(0,Q.jsxs)(q,{size:`xs`,className:`px-0`,children:[(0,Q.jsx)(kt,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,Q.jsxs)(K,{className:`min-w-0`,children:[(0,Q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Parent`}),(0,Q.jsx)($,{projectId:e.projectId,ticketId:e.parentId,ticket:y.data?.ticket})]})]}),b.data&&(b.data.total>0||f>0)&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`h3`,{className:`mt-3 mb-1 text-xs text-muted-foreground`,children:[`Child tickets`,` `,(0,Q.jsxs)(`span`,{className:`tabular-nums`,children:[b.data.items.filter(e=>e.status===`done`).length,`/`,b.data.total]})]}),(0,Q.jsx)(G,{className:`gap-0`,children:b.data.items.map(t=>(0,Q.jsxs)(q,{size:`xs`,className:`px-0`,children:[(0,Q.jsx)(p,{property:`status`,value:t.status,iconOnly:!0}),(0,Q.jsx)(K,{className:`min-w-0`,children:(0,Q.jsx)($,{projectId:e.projectId,ticketId:t.id,ticket:t})})]},t.id))}),(b.data.total>20||f>0)&&(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Q.jsx)(d,{size:`sm`,disabled:!f,onClick:()=>m(Math.max(0,f-20)),children:`Previous children`}),(0,Q.jsx)(d,{size:`sm`,disabled:f+20>=b.data.total,onClick:()=>m(f+20),children:`Next children`})]})]}),(0,Q.jsx)(G,{className:`gap-0`,children:n.data?.map(n=>{let r=h(n,e.id);return(0,Q.jsxs)(q,{size:`xs`,className:`px-0`,children:[(0,Q.jsxs)(K,{className:`min-w-0 gap-0`,children:[(0,Q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r.label}),(0,Q.jsx)($,{projectId:e.projectId,ticketId:r.id,children:r.title})]}),t.canWrite&&(0,Q.jsx)(vt,{children:(0,Q.jsx)(R,{size:`icon-sm`,label:`Remove ${n.type} relationship`,onClick:()=>S.mutate({projectId:e.projectId,relationId:n.id}),children:(0,Q.jsx)(Ht,{})})})]},n.id)})}),!e.parentId&&!b.data?.total&&n.data?.length===0&&(0,Q.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:`No relationships`}),(0,Q.jsx)(V,{title:`Add relationship`,open:r,onOpenChange:i,busy:x.isPending,children:(0,Q.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,Q.jsx)(We,{label:`Relationship`,name:`type`,children:oe.map(e=>(0,Q.jsx)(I,{value:e.value,children:e.label},e.value))}),(0,Q.jsx)(Ot,{projectId:e.projectId,label:`Ticket`,value:l,onChange:u,exclude:[e.id],allowClear:!1}),(0,Q.jsx)(Le,{error:_??x.error,pending:x.isPending,submitLabel:`Add relationship`,submitDisabled:!l,onCancel:()=>i(!1)})]})}),(0,Q.jsx)(V,{size:`composer`,title:`New child of ${e.key}`,open:o,onOpenChange:c,children:o&&(0,Q.jsx)(X.Suspense,{fallback:(0,Q.jsx)(be,{}),children:(0,Q.jsx)(yn,{projectId:e.projectId,initial:{parentId:e.id,labels:e.labels,scopes:e.scopes},onSaved:()=>c(!1)})})}),(0,Q.jsx)(L,{error:n.error??S.error??y.error??b.error})]})}var xn=Re(`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,Q.jsx)(`div`,{role:`group`,"data-slot":`button-group`,"data-orientation":t,className:U(xn({orientation:t}),e),...n})}function Cn({ticket:e}){let[t,n]=(0,X.useState)(0),[r,i]=(0,X.useState)(``),a=W(g.query(`list_comments`,{projectId:e.projectId,ticketId:e.id,offset:t})),o=M(`add_comment`),s=k(e.projectId);return(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(L,{error:a.error??o.error}),a.data?.total===0&&(0,Q.jsx)(he,{title:`No comments yet`,icon:ct,className:`py-8`}),(0,Q.jsx)(`div`,{className:`divide-y`,children:a.data?.items.map(e=>(0,Q.jsx)(wn,{comment:e},e.id))}),((a.data?.total??0)>50||t>0)&&(0,Q.jsxs)(Sn,{className:`mt-5 justify-end`,children:[(0,Q.jsx)(d,{size:`sm`,disabled:!t,onClick:()=>n(Math.max(0,t-50)),children:`Previous comments`}),(0,Q.jsx)(d,{size:`sm`,disabled:t+50>=(a.data?.total??0),onClick:()=>n(t+50),children:`Next comments`})]}),s.canWrite&&(0,Q.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,Q.jsx)(Tt,{label:`Comment`,value:r,onChange:i,rows:3,required:!0,maxLength:5e4,placeholder:`Write a comment…`,footer:(0,Q.jsxs)(d,{type:`submit`,variant:`default`,disabled:o.isPending||!r.trim(),children:[o.isPending?(0,Q.jsx)(C,{}):(0,Q.jsx)(Bt,{}),o.isPending?`Posting…`:`Comment`,(0,Q.jsx)(ot,{"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=ce(),n=k(e.projectId),r=M(`update_comment`),i=M(`delete_comment`),[a,o]=(0,X.useState)(!1),[s,c]=(0,X.useState)(e.body),[l,u]=(0,X.useState)(e.version),f=e.actorId===t.id;return(0,Q.jsxs)(`article`,{className:`group/comment relative py-4 animate-in fade-in-0 duration-200`,children:[(0,Q.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,Q.jsx)(`strong`,{className:`text-foreground`,children:(0,Q.jsx)(_,{projectId:e.projectId,actorId:e.actorId,avatar:!0})}),(0,Q.jsx)(H,{value:e.createdAt}),e.updatedAt!==e.createdAt&&(0,Q.jsx)(`span`,{children:`Edited`})]}),a?(0,Q.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,Q.jsx)(Tt,{label:`Edit comment`,value:s,onChange:c,rows:4,required:!0,maxLength:5e4,footer:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(d,{size:`sm`,disabled:r.isPending,onClick:()=>o(!1),children:`Cancel`}),(0,Q.jsxs)(d,{type:`submit`,size:`sm`,variant:`default`,disabled:r.isPending||!s.trim(),children:[r.isPending?(0,Q.jsx)(C,{}):null,`Save`]})]})})}):(0,Q.jsx)(N,{children:e.body}),!a&&n.canWrite&&(f||t.admin)&&(0,Q.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,Q.jsx)(R,{label:`Edit comment`,size:`icon-sm`,onClick:()=>{c(e.body),u(e.version),o(!0)},children:(0,Q.jsx)(rt,{})}),(0,Q.jsx)(z,{label:`Delete comment`,icon:(0,Q.jsx)(at,{}),danger:!0,description:`Permanently delete this comment?`,onConfirm:()=>i.mutateAsync({projectId:e.projectId,commentId:e.id,expectedVersion:e.version})})]}),(0,Q.jsx)(L,{error:r.error})]})}var Tn=new Intl.NumberFormat(void 0,{style:`unit`,unit:`kilobyte`,maximumFractionDigits:1});function En({ticket:e}){let t=W(g.query(`list_attachments`,{projectId:e.projectId,ticketId:e.id})),n=M(`upload_attachment`),r=M(`delete_attachment`),i=k(e.projectId),a=(0,X.useRef)(null),[o,c]=(0,X.useState)(),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.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)});F.success(t.length===1?`File attached`:`${t.length} files attached`)}catch(e){c(e)}finally{f(!1)}}}return(0,Q.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:U(`rounded-lg transition-colors`,l&&`bg-primary/5 ring-2 ring-primary/40 ring-offset-4 ring-offset-background`),children:[(0,Q.jsx)(s,{compact:!0,title:`Attachments`,action:i.canWrite&&(0,Q.jsx)(R,{label:d?`Uploading…`:`Attach file`,size:`icon-sm`,disabled:d,onClick:()=>a.current?.click(),children:d?(0,Q.jsx)(C,{}):(0,Q.jsx)(st,{})})}),!t.isPending&&!t.data?.length&&(0,Q.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:i.canWrite?`No attachments. Drop files here.`:`No attachments`}),(0,Q.jsx)(G,{className:`gap-0`,children:t.data?.map(t=>(0,Q.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,Q.jsx)(yt,{children:(0,Q.jsx)(It,{className:`size-4 text-muted-foreground`})}),(0,Q.jsxs)(K,{className:`min-w-0 gap-0`,children:[(0,Q.jsx)(xt,{className:`line-clamp-none max-w-full text-xs font-normal wrap-anywhere`,children:(0,Q.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,Q.jsx)(ht,{id:`attachment-size-${t.id}`,className:`m-0 text-[11px]`,children:Tn.format(t.size/1e3)})]}),i.canWrite&&(0,Q.jsx)(vt,{children:(0,Q.jsx)(z,{label:`Remove attachment`,icon:(0,Q.jsx)(at,{}),description:`Remove ${t.name}?`,onConfirm:()=>r.mutateAsync({projectId:e.projectId,attachmentId:t.id})})})]},t.id))}),(0,Q.jsx)(we,{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,Q.jsx)(L,{error:o??t.error??r.error})]})}var Dn={passed:De,failed:E,pending:u,reported:t};function On({ticket:e}){let n=k(e.projectId),r=W(g.query(`list_evidence`,{projectId:e.projectId,ticketId:e.id})),i=M(`add_evidence`),[a,o]=(0,X.useState)(!1),[c,l]=(0,X.useState)();return(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(s,{title:`Evidence`,description:`Links and outcomes reported by the people and integrations working on this ticket.`,action:n.canWrite&&(0,Q.jsx)(R,{label:`Add evidence`,onClick:()=>{i.reset(),l(void 0),o(!0)},children:(0,Q.jsx)(Ge,{})})}),!r.isPending&&!r.data?.length&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No evidence attached`}),(0,Q.jsx)(G,{className:`gap-0 divide-y`,children:r.data?.map(n=>{let r=Dn[n.outcome]??t;return(0,Q.jsxs)(q,{className:`items-start rounded-none px-0 py-4`,children:[(0,Q.jsx)(yt,{variant:`icon`,children:(0,Q.jsx)(r,{className:U(n.outcome===`passed`&&`text-[var(--success)]`,n.outcome===`failed`&&`text-destructive`)})}),(0,Q.jsxs)(K,{className:`min-w-0 gap-1.5`,children:[(0,Q.jsxs)(xt,{className:`line-clamp-none max-w-full wrap-anywhere`,children:[(0,Q.jsxs)(`a`,{href:n.url,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline`,children:[n.title,(0,Q.jsx)(St,{className:`size-3`,"aria-hidden":`true`})]}),(0,Q.jsx)(O,{variant:`outline`,className:`ml-2 capitalize`,children:n.kind}),(0,Q.jsx)(O,{variant:`outline`,className:U(`ml-1 capitalize`,n.outcome===`passed`&&`text-[var(--success)]`,n.outcome===`failed`&&`text-destructive`),"data-outcome":n.outcome,children:n.outcome})]}),n.commit&&(0,Q.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,Q.jsx)(N,{children:n.note}),(0,Q.jsxs)(ht,{className:`m-0 text-xs`,children:[(0,Q.jsx)(_,{projectId:e.projectId,actorId:n.actorId}),` ·`,` `,(0,Q.jsx)(H,{value:n.createdAt})]})]})]},n.id)})}),(0,Q.jsx)(V,{title:`Add evidence`,open:a,onOpenChange:o,busy:i.isPending,children:(0,Q.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:B(n,`title`),url:B(n,`url`),commit:B(n,`commit`)||null,outcome:T.shape.outcome.parse(n.get(`outcome`)),note:B(n,`note`)}).then(()=>{o(!1),F.success(`Evidence added`)}).catch(l)},children:[(0,Q.jsx)(Ce,{label:`Title`,name:`title`,required:!0,maxLength:200}),(0,Q.jsx)(Ce,{label:`URL`,name:`url`,type:`url`,required:!0}),(0,Q.jsxs)(`div`,{className:`grid grid-cols-1 gap-x-5 sm:grid-cols-2`,children:[(0,Q.jsx)(We,{label:`Kind`,name:`kind`,children:T.shape.kind.options.map(e=>(0,Q.jsx)(I,{value:e,children:(0,Q.jsx)(`span`,{className:`capitalize`,children:e})},e))}),(0,Q.jsx)(We,{label:`Reported outcome`,name:`outcome`,children:[`reported`,`pending`,`passed`,`failed`].map(e=>(0,Q.jsx)(I,{value:e,children:(0,Q.jsx)(`span`,{className:`capitalize`,children:e})},e))})]}),(0,Q.jsx)(Ce,{label:`Commit (full hash)`,name:`commit`,pattern:`[a-fA-F0-9]{40,64}`}),(0,Q.jsx)(ie,{label:`Note`,name:`note`,maxLength:2e4}),(0,Q.jsx)(Le,{error:c??i.error,pending:i.isPending,submitLabel:`Add evidence`,onCancel:()=>o(!1)})]})}),(0,Q.jsx)(L,{error:r.error})]})}function kn({ticket:e}){let[t,n]=(0,X.useState)(0),r=W(g.query(`list_activity`,{projectId:e.projectId,ticketId:e.id,offset:t}));return(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h2`,{children:`Activity`}),(0,Q.jsx)(L,{error:r.error}),(0,Q.jsx)(`ol`,{className:`m-0 list-none p-0`,children:r.data?.items.map(t=>(0,Q.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,Q.jsx)(`span`,{children:ke(t)}),(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[(0,Q.jsx)(_,{projectId:e.projectId,actorId:t.actorId}),` ·`,` `,(0,Q.jsx)(H,{value:t.createdAt})]})]},t.id))}),((r.data?.total??0)>50||t>0)&&(0,Q.jsxs)(Sn,{className:`mt-5 justify-end`,children:[(0,Q.jsx)(d,{size:`sm`,disabled:!t,onClick:()=>n(Math.max(0,t-50)),children:`Previous activity`}),(0,Q.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=k(t),a=W(g.query(`get_ticket`,{projectId:t,ticketId:r})),o=M(`set_subscription`),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(!1),f=$e(),[m]=(0,X.useState)(()=>At(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}=Dt(y??{id:r,projectId:t,version:1});if(n(`e`,()=>{i.canWrite&&c(!0)},{enabled:!!y&&!s}),a.isPending)return(0,Q.jsx)(be,{});if(!a.data||!y)return a.error instanceof He&&a.error.status===404?(0,Q.jsxs)(he,{title:`Ticket unavailable`,children:[(0,Q.jsx)(`p`,{children:`This ticket was deleted or you no longer have access.`}),(0,Q.jsx)(d,{render:(0,Q.jsx)(it,{to:`/projects/$projectId`,params:{projectId:t}}),children:`Back to tickets`})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(L,{error:a.error}),(0,Q.jsx)(d,{onClick:()=>{a.refetch()},children:`Retry`})]});let{readiness:E,claim:D,canReleaseClaim:O,subscribed:A}=a.data,j=i.canWrite&&!T;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.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,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(pe,{title:(0,Q.jsxs)(d,{variant:`ghost`,size:`sm`,className:`-ml-2 text-muted-foreground`,render:(0,Q.jsx)(it,{to:`/projects/$projectId`,params:{projectId:t}}),children:[(0,Q.jsx)(Pt,{}),`Tickets`]}),children:(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[h>=0&&(0,Q.jsxs)(`div`,{className:`mr-1 flex items-center gap-0.5 text-xs text-muted-foreground tabular-nums`,children:[(0,Q.jsx)(R,{label:`Previous ticket`,title:`Previous ticket (K)`,disabled:h===0,onClick:()=>v(-1),children:(0,Q.jsx)(b,{})}),(0,Q.jsxs)(`span`,{children:[h+1,` / `,m.length]}),(0,Q.jsx)(R,{label:`Next ticket`,title:`Next ticket (J)`,disabled:h===m.length-1,onClick:()=>v(1),children:(0,Q.jsx)(ee,{})})]}),(0,Q.jsx)(R,{label:A?`Unsubscribe`:`Subscribe`,disabled:o.isPending,onClick:()=>{o.mutateAsync({projectId:t,ticketId:y.id,enabled:!A}).then(()=>F.success(A?`Unsubscribed`:`Subscribed to updates`)).catch(w)},children:A?(0,Q.jsx)(bt,{}):(0,Q.jsx)(Qe,{})}),(0,Q.jsx)(R,{label:`Copy link`,onClick:()=>{x(new URL(`/projects/${t}/tickets/${y.id}`,location.origin).href).then(()=>F.success(`Link copied`)).catch(w)},children:(0,Q.jsx)(mt,{})}),(0,Q.jsx)(R,{label:y.archived?`Unarchive ticket`:`Archive ticket`,disabled:!j,onClick:()=>{S({archived:!y.archived}).then(e=>{e&&F.success(y.archived?`Ticket unarchived`:`Ticket archived`)})},children:y.archived?(0,Q.jsx)(Mt,{}):(0,Q.jsx)(gt,{})}),(0,Q.jsx)(R,{label:`Edit ticket`,title:`Edit ticket (E)`,disabled:!i.canWrite,onClick:()=>c(!0),children:(0,Q.jsx)(rt,{})}),(0,Q.jsx)(ut,{ticket:y,variant:`dropdown`,onEdit:()=>c(!0),children:(0,Q.jsx)(d,{variant:`ghost`,size:`icon`,"aria-label":`Ticket actions`,children:(0,Q.jsx)(nt,{})})})]})}),(0,Q.jsx)(ut,{ticket:y,onEdit:()=>c(!0),children:(0,Q.jsxs)(`header`,{className:`ticket-heading`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-muted-foreground`,children:[(0,Q.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),F.success(`${y.key} copied`)}).catch(w)},children:[y.key,l&&(0,Q.jsx)(te,{className:`size-3 text-[var(--success)]`})]}),(0,Q.jsx)(p,{property:`status`,value:y.status}),y.archived&&(0,Q.jsx)(`strong`,{children:`Archived`}),T&&(0,Q.jsx)(C,{className:`size-3.5 text-muted-foreground`})]}),(0,Q.jsx)(`h1`,{className:`mt-4 mb-6 max-w-4xl text-2xl leading-snug font-semibold tracking-tight`,children:y.title})]})}),(0,Q.jsxs)(`div`,{className:`min-w-0 [&>section:first-child]:border-0 [&>section:first-child]:pt-0`,children:[(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h2`,{children:`Description`}),(0,Q.jsx)(N,{children:y.description||`_No description_`})]}),(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h2`,{children:`Acceptance criteria`}),(0,Q.jsx)(N,{children:y.acceptanceCriteria||`_No acceptance criteria_`})]})]}),(0,Q.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,Q.jsxs)(_e,{variant:`line`,className:`mb-5`,children:[(0,Q.jsx)(ye,{value:`discussion`,children:`Discussion`}),(0,Q.jsx)(ye,{value:`evidence`,children:`Evidence`}),(0,Q.jsx)(ye,{value:`activity`,children:`Activity`})]}),(0,Q.jsx)(Ve,{value:`discussion`,className:`animate-in fade-in-0 duration-150`,children:(0,Q.jsx)(Cn,{ticket:y})}),(0,Q.jsx)(Ve,{value:`evidence`,className:`animate-in fade-in-0 duration-150`,children:(0,Q.jsx)(On,{ticket:y})}),(0,Q.jsx)(Ve,{value:`activity`,className:`animate-in fade-in-0 duration-150`,children:(0,Q.jsx)(kn,{ticket:y})})]}),(0,Q.jsx)(L,{error:a.error})]}),(0,Q.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,Q.jsxs)(`section`,{"aria-label":`Properties`,className:`ticket-properties`,children:[(0,Q.jsx)(J,{variant:`row`,property:`status`,projectId:t,value:y.status,disabled:!j,onChange:e=>void S({status:e})}),(0,Q.jsx)(J,{variant:`row`,property:`priority`,projectId:t,value:y.priority,disabled:!j,onChange:e=>void S({priority:e})}),(0,Q.jsx)(J,{variant:`row`,property:`assignee`,projectId:t,value:y.assigneeId,disabled:!j,onChange:e=>void S({assignee:e})}),(0,Q.jsx)(J,{variant:`row`,property:`kind`,projectId:t,value:y.kind,disabled:!j,onChange:e=>void S({kind:e})}),(0,Q.jsx)(J,{variant:`row`,property:`difficulty`,projectId:t,value:y.difficulty,disabled:!j,onChange:e=>void S({difficulty:e})}),(0,Q.jsx)(tt,{variant:`row`,label:`Due date`,placeholder:`No due date`,value:y.dueAt?new Date(y.dueAt):null,disabled:!j,onChange:e=>void S({dueAt:e?et(e):null})}),(0,Q.jsx)(Et,{variant:`row`,value:y.labels,disabled:!j,onChange:e=>void S({labels:e})}),(y.scopes.length>0||i.canWrite)&&(0,Q.jsx)(Et,{variant:`row`,kind:`scope`,value:y.scopes,disabled:!j,onChange:e=>void S({scopes:e})}),(0,Q.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,Q.jsx)(`dt`,{children:`Created`}),(0,Q.jsxs)(`dd`,{children:[(0,Q.jsx)(_,{projectId:t,actorId:y.createdBy}),` · `,(0,Q.jsx)(H,{value:y.createdAt})]}),(0,Q.jsx)(`dt`,{children:`Updated`}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(H,{value:y.updatedAt})})]})]}),(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h2`,{children:`Agent readiness`}),(0,Q.jsx)(`p`,{className:E.ready?`text-[var(--success)]`:`text-muted-foreground`,children:E.ready?`Ready to claim`:`Not ready to claim`}),(0,Q.jsx)(`ul`,{children:E.reasons.map((e,t)=>(0,Q.jsx)(`li`,{children:e.message},`${e.code}:${t}`))}),y.holdReason&&(0,Q.jsxs)(`p`,{children:[`Hold: `,y.holdReason]}),D&&(0,Q.jsxs)(`p`,{children:[`Claimed by `,(0,Q.jsx)(`strong`,{children:D.workerId}),` until `,e(D.expiresAt),`.`]}),D&&(0,Q.jsx)(jn,{ticket:y,claim:D,canRelease:O,canRecover:i.canAdmin&&E.reasons.some(e=>e.code===`claim_recovery_required`)})]}),(0,Q.jsx)(bn,{ticket:y},y.id),(0,Q.jsx)(En,{ticket:y})]})]}),(0,Q.jsx)(V,{size:`composer`,title:`Edit ${y.key}`,open:s,onOpenChange:c,children:s&&(0,Q.jsx)(wt,{projectId:t,ticket:y,onSaved:()=>c(!1)})})]})}function jn({ticket:e,claim:t,canRelease:n,canRecover:r}){let i=M(`release_claim`),a=M(`recover_claim`),[o,s]=(0,X.useState)(``),[c,l]=(0,X.useState)(!1);return(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[n&&(0,Q.jsx)(z,{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,Q.jsx)(V,{title:`Recover expired claim`,trigger:`Recover expired claim`,children:(0,Q.jsxs)(`form`,{onSubmit:n=>{n.preventDefault(),c&&a.mutate({projectId:e.projectId,ticketId:e.id,claimId:t.id,reason:o,confirmedStopped:!0})},children:[(0,Q.jsx)(`p`,{children:`Recovery requires project administrator access and an expired claim. Stop the worker first.`}),(0,Q.jsx)(ie,{label:`Recovery reason`,required:!0,minLength:10,maxLength:2e3,value:o,onChange:e=>s(e.target.value)}),(0,Q.jsx)(Pe,{label:`I have confirmed the worker has stopped`,checked:c,onCheckedChange:e=>l(e)}),(0,Q.jsx)(Le,{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,cr as ne,do as re,dr as w,f as T,fn as E,fr as D,ga as O,go as k,h as ie,hn as A,j as ae,k as oe,lr as j,mn as se,mo as M,n as ce,nn as N,nr as P,on as F,pn as I,po as L,uo as le,ur as R,wa as ue,wi as de,xi as z,yo as fe,za as pe,zi as B}from"./forms-B4Vg3CPz.js";import{n as me}from"./project-label-provider-9L7Uts3_.js";import{r as he,t as ge}from"./date-picker-6H_iwP6t.js";import{t as _e}from"./rotate-ccw-sjyLwLLy.js";import{r as ve,s as ye,t as be}from"./kbd-tTQGZxaK.js";import{c as V,d as H,f as U,l as xe,nt as Se,p as W,u as Ce}from"./index-C_a21taR.js";import{i as G,n as K,t as q}from"./popover-BhzZ0U1d.js";import{t as J}from"./ticket-tags-2rdmkcJV.js";var we={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`}]]};we.node;var Te=l(we),Ee={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`}]]};Ee.node;var De=l(Ee),Oe={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`}]]};Oe.node;var ke=l(Oe),Ae={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`]};Ae.node;var je=l(Ae),Me={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`}]]};Me.node;var Ne=l(Me),Pe={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`}]]};Pe.node;var Fe=l(Pe),Ie={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`}]]};Ie.node;var Le=l(Ie),Re={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`}]]};Re.node;var ze=l(Re),Be={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`}]]};Be.node;var Ve=l(Be),He={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`}]]};He.node;var Ue=l(He),We={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`]};We.node;var Ge=l(We),Ke={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`}]]};Ke.node;var qe=l(Ke),Je={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`}]]};Je.node;var Ye=l(Je),Xe=pe.create_ticket.input.omit({projectId:!0,requestId:!0}).extend({title:L().default(``)}).parse({}),Ze=re({fields:x.extend({title:L().max(500),parentId:L().nullable(),dueAt:g.nullable().default(null)}),version:le().int().positive().optional()});function Qe(e){return e?{fields:x.strip().parse(e),version:e.version}:{fields:Xe}}var $e=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),Y=fe(k(),1),X=C();function Z({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,Y.useId)(),[u,d]=(0,Y.useState)(`write`);return(0,X.jsx)(N,{className:z(`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,X.jsxs)(j,{value:u,onValueChange:e=>d(String(e)),children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(F,{htmlFor:l,children:e}),(0,X.jsxs)(w,{"aria-label":`${e} editor`,variant:`line`,children:[(0,X.jsx)(D,{value:`write`,children:`Write`}),(0,X.jsx)(D,{value:`preview`,children:`Preview`})]})]}),(0,X.jsx)(R,{value:`write`,children:(0,X.jsxs)(E,{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,X.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,X.jsx)(I,{align:`block-end`,className:`justify-end border-t py-2`,children:c})]})}),(0,X.jsxs)(R,{value:`preview`,children:[(0,X.jsx)(`div`,{className:z(`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,X.jsx)(ee,{children:t}):(0,X.jsx)(`p`,{className:`m-0 text-sm text-muted-foreground`,children:`Nothing to preview`})}),c&&(0,X.jsx)(`div`,{className:`mt-2 flex justify-end`,children:c})]})]})})}function et({projectId:e,label:n,value:i,onChange:a,exclude:s=[],allowClear:c=!0,variant:l=`field`,placeholder:u=`Choose a ticket`}){let d=(0,Y.useId)(),[f,m]=(0,Y.useState)(!1),[h,g]=(0,Y.useState)(``),_=B({...o.query(`list_tickets`,{projectId:e,q:h,archived:`include`,limit:30}),enabled:f}),v=B({...o.query(`get_ticket`,{projectId:e,ticketId:i??``}),enabled:!!i&&M().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,X.jsxs)(q,{open:f,onOpenChange:e=>{m(e),e&&g(``)},children:[(0,X.jsxs)(G,{id:d,render:(0,X.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,X.jsx)(Ne,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,X.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,X.jsx)(Se,{className:`ml-2 size-3.5 shrink-0 text-muted-foreground`})]}),(0,X.jsx)(K,{align:`start`,className:`w-[min(420px,var(--available-width))] p-0`,children:(0,X.jsxs)(V,{shouldFilter:!1,children:[(0,X.jsx)(H,{"aria-label":`Search ${n.toLowerCase()}`,placeholder:`Search by title or key…`,value:h,onValueChange:g}),(0,X.jsxs)(W,{children:[c&&(0,X.jsx)(Ce,{children:(0,X.jsxs)(U,{value:`none`,onSelect:()=>{a(null),m(!1)},children:[`No parent`,!i&&(0,X.jsx)(p,{className:`ml-auto`})]})}),_.isPending?(0,X.jsx)(`div`,{role:`status`,className:`px-4 py-6 text-sm text-muted-foreground`,children:`Searching…`}):y.length?(0,X.jsx)(Ce,{children:y.map(e=>(0,X.jsxs)(U,{value:e.id,className:`items-start py-2`,onSelect:()=>{a(e.id),m(!1)},children:[(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsx)(`span`,{className:`mb-1 block font-mono text-[11px] text-muted-foreground`,children:e.key}),(0,X.jsx)(`span`,{className:`block break-words whitespace-normal`,children:e.title})]}),i===e.id&&(0,X.jsx)(p,{className:`ml-auto shrink-0`})]},e.id))}):(0,X.jsx)(`div`,{role:`status`,className:`px-4 py-6 text-center text-sm text-muted-foreground`,children:`No tickets found`}),(0,X.jsx)(T,{error:_.error})]})]})})]});return l===`pill`?(0,X.jsxs)(X.Fragment,{children:[x,(0,X.jsx)(T,{error:v.error})]}):(0,X.jsxs)(N,{className:t,children:[(0,X.jsx)(F,{htmlFor:d,children:n}),x,(0,X.jsx)(T,{error:v.error})]})}function Q({label:e,value:i,onChange:a,kind:o=`label`}){let s=me(),[c,l]=(0,Y.useState)(!1),u=(0,Y.useId)(),[d,f]=(0,Y.useState)(``),[p,h]=(0,Y.useState)();function g(e=d){e.trim()&&_($e(e))}function _(e){try{a(x.shape.labels.parse([...new Set([...i,...e])])),f(``),h(void 0)}catch(e){h(e)}}return(0,X.jsxs)(N,{className:t,children:[(0,X.jsx)(F,{htmlFor:u,children:e}),(0,X.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,X.jsxs)(J,{tag:t,kind:o,className:`max-w-full gap-1 pr-0.5`,children:[(0,X.jsx)(`span`,{className:`break-words whitespace-normal`,children:t}),(0,X.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,X.jsx)(m,{className:`size-3`})})]},t)),(0,X.jsx)(A,{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,X.jsxs)(q,{open:c,onOpenChange:l,children:[(0,X.jsx)(G,{render:(0,X.jsx)(r,{variant:`ghost`,size:`icon`,"aria-label":`Choose labels`}),children:(0,X.jsx)(de,{})}),(0,X.jsx)(K,{align:`end`,className:`w-[min(20rem,calc(100vw-2rem))] p-0`,children:(0,X.jsxs)(V,{children:[(0,X.jsx)(H,{placeholder:`Search labels…`,"aria-label":`Search project labels`}),(0,X.jsxs)(W,{children:[s.filter(e=>!i.includes(e.name)).map(e=>(0,X.jsx)(U,{value:e.name,onSelect:()=>{_([e.name]),l(!1)},children:(0,X.jsx)(J,{tag:e.name,color:e.color})},e.id)),(0,X.jsx)(xe,{children:`No matching labels`})]})]})})]})]}),!!p&&(0,X.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:Ge,bug:ke,chore:Ye,research:Fe,documentation:Te},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,X.jsx)(`svg`,{viewBox:`0 0 16 16`,className:z(`size-4 shrink-0`,t),"aria-hidden":`true`,children:[6,10,14].map((e,t)=>(0,X.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=B({...o.query(`list_members`,{projectId:e}),enabled:n.property===`assignee`&&!!n.value});switch(n.property){case`status`:return(0,X.jsx)(i,{property:`status`,value:n.value,iconOnly:t});case`priority`:return(0,X.jsx)(i,{property:`priority`,value:n.value,iconOnly:t});case`kind`:{let e=rt[n.value];return(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,X.jsx)(e,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),!t&&nt[n.value]]})}case`difficulty`:{let e=n.value;return(0,X.jsxs)(`span`,{className:z(`inline-flex items-center gap-1.5`,!e&&`text-muted-foreground`),children:[(0,X.jsx)(at,{level:e,className:z(e&&`text-foreground`)}),!t&&(e?it[e]:`No difficulty`)]})}default:{let e=n.value;if(!e)return(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-muted-foreground`,children:[(0,X.jsx)(je,{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,X.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5`,title:o,children:[(0,X.jsx)(P,{name:o,image:s,className:`size-4 text-[8px]`}),!t&&(0,X.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`},...ue.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=B({...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,Y.useState)(!1),m=ct(e,i,d||e!==`assignee`),h=tt[e],g=(0,X.jsx)(G,{disabled:a,render:(0,X.jsx)(r,{variant:`ghost`,size:o===`cell`?`xs`:`sm`,role:`combobox`,"aria-label":h,"aria-expanded":d,className:z(`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,X.jsx)(ot,{...lt(e,t),projectId:i,iconOnly:s})});return(0,X.jsxs)(q,{open:d,onOpenChange:f,children:[o===`row`?(0,X.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:h}),g]}):g,(0,X.jsx)(K,{align:c,className:`w-60 p-0`,children:(0,X.jsxs)(V,{children:[(0,X.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,X.jsxs)(W,{children:[m.map((r,a)=>(0,X.jsxs)(U,{value:r.label,keywords:r.keywords??[],onSelect:()=>{f(!1),r.value!==t&&n(r.value)},children:[(0,X.jsx)(ot,{...lt(e,r.value),projectId:i}),m.length<=9&&(0,X.jsx)(`kbd`,{className:`ml-auto text-[10px] text-muted-foreground`,"aria-hidden":`true`,children:a+1}),r.value===t&&(0,X.jsx)(p,{className:m.length<=9?``:`ml-auto`})]},String(r.value))),(0,X.jsx)(xe,{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,X.jsxs)(G,{disabled:a,render:(0,X.jsx)(r,{variant:`ghost`,size:`sm`,className:z(`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,X.jsx)(qe,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),t.length===0?(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:i===`pill`?s:`No ${s.toLowerCase()}`}):(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-wrap items-center gap-1`,children:[c.map(t=>(0,X.jsx)(J,{tag:t,kind:e,className:`max-w-28`,children:(0,X.jsx)(`span`,{className:`truncate`,children:t})},t)),l>0&&(0,X.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`+`,l]})]})]});return(0,X.jsxs)(q,{children:[i===`row`?(0,X.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-start gap-2`,children:[(0,X.jsx)(`span`,{className:`pt-1.5 text-xs text-muted-foreground`,children:s}),u]}):u,(0,X.jsx)(K,{align:`start`,className:`w-[min(24rem,calc(100vw-2rem))] p-3`,children:(0,X.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,Y.useState)(()=>{let e=Qe(n);return i?{...e,fields:{...e.fields,...i}}:e}),[f,p]=(0,Y.useState)(()=>{try{let e=Ze.safeParse(JSON.parse(localStorage.getItem(c)??`null`));if(e.success)return e.data}catch{}return l}),g=`kanvil:composer-expanded`,[_,v]=(0,Y.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,Y.useState)(()=>!!f.fields.acceptanceCriteria),[te,re]=(0,Y.useState)(),[w,E]=(0,Y.useState)(),[D,O]=(0,Y.useState)(!1),k=S(`create_ticket`),A=S(`update_ticket`);function j(e){p(e);try{localStorage.setItem(c,JSON.stringify(e)),E(void 0),O(!0)}catch{E(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,F=JSON.stringify(f.fields)!==JSON.stringify(l.fields),I=k.isPending||A.isPending,L=N.automationReady||N.scopes.length>0||!!N.holdReason;async function le(e){if(e.preventDefault(),P||I)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 R=(0,X.jsxs)(`div`,{className:`-mt-3 flex flex-wrap items-center gap-1`,"aria-label":`Ticket properties`,children:[(0,X.jsx)($,{property:`status`,projectId:t,value:N.status,onChange:e=>M(`status`,e)}),(0,X.jsx)($,{property:`priority`,projectId:t,value:N.priority,onChange:e=>M(`priority`,e)}),(0,X.jsx)($,{property:`assignee`,projectId:t,value:N.assigneeId,onChange:e=>M(`assigneeId`,e)}),(0,X.jsx)($,{property:`kind`,projectId:t,value:N.kind,onChange:e=>M(`kind`,e)}),(0,X.jsx)($,{property:`difficulty`,projectId:t,value:N.difficulty,onChange:e=>M(`difficulty`,e)}),(0,X.jsx)(dt,{value:N.labels,onChange:e=>M(`labels`,e)}),(0,X.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,X.jsx)(et,{variant:`pill`,label:`Parent ticket`,placeholder:`Parent`,projectId:t,value:N.parentId,onChange:e=>M(`parentId`,e),exclude:n?[n.id]:[]}),(0,X.jsxs)(ve,{size:`sm`,className:z(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,X.jsx)(De,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),N.automationReady?`Ready for agents`:`Agents`]}),(0,X.jsxs)(q,{children:[(0,X.jsx)(G,{render:(0,X.jsx)(r,{variant:`ghost`,size:`icon-sm`,className:z(`size-7 border border-transparent hover:border-border`,L&&`text-primary`),"aria-label":`More properties`}),children:(0,X.jsx)(Ue,{className:`size-3.5`})}),(0,X.jsxs)(K,{align:`start`,className:`w-[min(24rem,calc(100vw-2rem))] p-4`,children:[(0,X.jsx)(Q,{label:`Scopes`,kind:`scope`,value:N.scopes,onChange:e=>M(`scopes`,e)}),(0,X.jsx)(ie,{label:`Hold reason`,value:N.holdReason??``,maxLength:2e3,placeholder:`Why should work wait?`,onChange:e=>M(`holdReason`,e.target.value||null)}),(0,X.jsx)(`p`,{className:`mb-0 text-xs text-muted-foreground`,children:`Claims still depend on requirements, blockers, and current ownership.`})]})]})]});return(0,X.jsxs)(`form`,{onSubmit:e=>{re(void 0),le(e).catch(re)},onKeyDown:ce,className:`ticket-composer flex min-h-0 flex-1 flex-col`,"data-expanded":_,children:[(0,X.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:I,onClick:y,children:_?(0,X.jsx)(Ve,{}):(0,X.jsx)(ze,{})}),(0,X.jsxs)(`div`,{className:z(`min-h-0 flex-1 overflow-y-auto overscroll-contain`,_&&`lg:grid lg:grid-cols-[minmax(0,1fr)_320px] lg:items-start`),children:[(0,X.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,X.jsxs)(e,{className:`w-auto`,children:[(0,X.jsx)(ye,{}),(0,X.jsx)(u,{children:`This ticket changed.`}),(0,X.jsxs)(ae,{children:[`Your draft still uses version `,f.version,`; saving will require the current version.`,(0,X.jsx)(r,{size:`sm`,className:`mt-2`,onClick:()=>j(Qe(n)),children:`Discard draft and reload`})]})]}),(0,X.jsx)(T,{error:te??k.error??A.error??w}),(0,X.jsx)(`div`,{className:`[&_[data-slot=field-label]]:sr-only`,children:(0,X.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`})}),!_&&R,(0,X.jsx)(Z,{label:`Description`,value:N.description,onChange:e=>M(`description`,e),rows:8,variant:`document`,placeholder:`Add context, requirements, or a reproduction…`}),ee?(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(Z,{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,X.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,X.jsx)(m,{})})]}):(0,X.jsxs)(r,{variant:`ghost`,size:`sm`,className:`w-fit text-muted-foreground`,onClick:()=>C(!0),children:[(0,X.jsx)(Le,{}),`Add acceptance criteria`]})]}),_&&(0,X.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,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)($,{variant:`row`,property:`status`,projectId:t,value:N.status,onChange:e=>M(`status`,e)}),(0,X.jsx)($,{variant:`row`,property:`priority`,projectId:t,value:N.priority,onChange:e=>M(`priority`,e)}),(0,X.jsx)($,{variant:`row`,property:`assignee`,projectId:t,value:N.assigneeId,onChange:e=>M(`assigneeId`,e)}),(0,X.jsx)($,{variant:`row`,property:`kind`,projectId:t,value:N.kind,onChange:e=>M(`kind`,e)}),(0,X.jsx)($,{variant:`row`,property:`difficulty`,projectId:t,value:N.difficulty,onChange:e=>M(`difficulty`,e)}),(0,X.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,X.jsxs)(`div`,{className:`grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Agents`}),(0,X.jsxs)(ve,{size:`sm`,className:z(ft,`h-7 justify-start gap-1.5`),pressed:N.automationReady,onPressedChange:e=>M(`automationReady`,e),"aria-label":`Ready for agents`,children:[(0,X.jsx)(De,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`}),N.automationReady?`Ready for agents`:`Not ready`]})]})]}),(0,X.jsxs)(`div`,{className:`mt-6 border-t pt-5`,children:[(0,X.jsx)(Q,{label:`Labels`,value:N.labels,onChange:e=>M(`labels`,e)}),(0,X.jsx)(et,{label:`Parent ticket`,projectId:t,value:N.parentId,onChange:e=>M(`parentId`,e),exclude:n?[n.id]:[]}),(0,X.jsx)(Q,{label:`Scopes`,kind:`scope`,value:N.scopes,onChange:e=>M(`scopes`,e)}),(0,X.jsx)(ie,{label:`Hold reason`,value:N.holdReason??``,maxLength:2e3,placeholder:`Why should work wait?`,onChange:e=>M(`holdReason`,e.target.value||null)})]})]})]}),(0,X.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,X.jsxs)(`span`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,role:`status`,children:[D?`Draft saved on this device`:w?`Draft could not be saved`:``,F&&!P&&(0,X.jsxs)(r,{variant:`ghost`,size:`xs`,disabled:I,onClick:se,children:[(0,X.jsx)(_e,{}),`Discard draft`]})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(s,{render:(0,X.jsx)(r,{disabled:I}),children:`Cancel`}),(0,X.jsxs)(r,{type:`submit`,variant:`default`,disabled:I||P,children:[I?(0,X.jsx)(d,{}):null,I?`Saving…`:n?`Save ticket`:`Create ticket`,!I&&(0,X.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,Z as c,lt as i,Ue as l,dt as n,ut as o,$ as r,et as s,ot as t,Ne 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 E,_a as ce,ao as le,ba as D,ca as O,cr as k,d as ue,et as A,f as de,fa as j,fo as fe,g as pe,ga as me,go as he,h as ge,ln as M,m as _e,nn as ve,o as ye,on as N,p as be,po as xe,s as Se,so as Ce,ta as we,u as P,ua as Te,v as Ee,w as F,wi as De,x as Oe,xi as I,yo as ke,zi as Ae}from"./forms-B4Vg3CPz.js";import{t as je}from"./useNavigate-DFohfUD3.js";import{t as Me,y as Ne}from"./link-DoIP9KJ6.js";import{A as Pe,C as Fe,D as Ie,E as Le,F as Re,I as ze,L as Be,M as Ve,N as He,P as Ue,R as We,T as Ge,c as Ke,d as qe,f as Je,h as Ye,it as Xe,j as Ze,k as Qe,l as $e,m as et,nt as tt,p as L,w as nt,z as rt}from"./index-C_a21taR.js";import{i as R,n as it,r as z,t as at}from"./popover-BhzZ0U1d.js";import{a as ot,i as st,n as ct,o as lt,r as ut,t as dt}from"./table-CYZiwo9g.js";import{n as ft,t as B}from"./ticket-tags-2rdmkcJV.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-C3d8TZIT.js";import{n as yt}from"./list-order-Bzsrihyr.js";function bt(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}var xt=class extends we{#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||!j(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=ke(he(),1);function St({queries:t,...r},i){let a=me(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)):O,[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=Be(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:rt,batch:We})}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 G(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Vt(e,t){return n=>{(t.options.atoms?.[e]??t.baseAtoms[e]).set(e=>zt(n,e))}}function Ht(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 Ut(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}var Wt=3;function Gt(e,t){return Kt(e,t,Wt)}function Kt(e,t,n){if(Object.is(e,t))return!0;if(n<=0||!Ht(e)||!Ht(t)||(Array.isArray(e)||Array.isArray(t))&&(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length))return!1;let r=Ut(e),i=Ut(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)||!Kt(a[i],o[i],n-1))return!1}return!0}function qt(e,t,n,r=Gt){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 Jt(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 Yt=({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 Xt(e){let t=!1;return()=>{t?e():t=!0}}function Zt({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 Yt({...a,...o})}function Qt(e,t=`_`){let[n,r]=e.replace(t,` `).split(` `);return{fnKey:r,fnName:`${n}.${r}`,parentName:n}}function K(e,t,n){for(let[r,{fn:i,memoDeps:a}]of Object.entries(n)){let{fnKey:n,fnName:o}=Qt(r);t[n]=a?Zt({memoDeps:a,fn:i,fnName:o,table:t,feature:e}):i}}function q(e,t,n,r){for(let[i,{fn:a,memoDeps:o}]of Object.entries(r)){let{fnKey:r,fnName:s}=Qt(i);if(o){let i=`_memo_${r}`;t[r]=function(...t){if(!this[i]){let t=this;this[i]=Zt({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 J(e,t,n,...r){return e[t]?.(...r)??n(e,...r)}function $t(e){return e.row.getValue(e.column.id)}function en(e){return e.getValue()??e.table.options.renderFallbackValue}function tn(e){return{table:e.table,column:e.column,row:e.row,cell:e,getValue:()=>e.getValue(),renderValue:()=>e.renderValue()}}var nn={assignCellPrototype:(e,t)=>{q(`coreCellsFeature`,e,t,{cell_getValue:{fn:e=>$t(e)},cell_renderValue:{fn:e=>en(e)},cell_getContext:{fn:e=>tn(e),memoDeps:e=>[e]}})}};function rn(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 an(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=rn(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 on(e){return e.getIsVisible?.()??!0}function sn(e){return e.getVisibleLeafColumns?.()??e.getAllLeafColumns()}function cn(e,t){let n=e,r=t;return n.getOrderColumnsFn?.()(r)??n._orderGroupedColumns?.(r)??t}function ln(e,t,n,r){return e._orderByColumnPinning?.(t,n,r)??t}function Y(e,t){return e.getPinnedVisibleLeafColumns?.(t)??(t&&t!==`center`?[]:sn(e))}function un(e,t){return e._expandRows?.(t)??t}function dn(e){e.autoResetExpanded?.()}function fn(e){e.autoResetPageIndex?.()}function pn(e){e.autoResetSorting?.()}function mn(e){e.autoResetCellSelection?.()}function hn(e){return[e,...e.columns.flatMap(e=>e.getFlatColumns())]}function gn(e){if(e.columns.length){let t=e.columns.flatMap(e=>e.getLeafColumns());return cn(e.table,t)}return[e]}function _n(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 vn(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=an(e,o,r,n),c=o;s.columns=c.columns?vn(e,c.columns,s,r+1):[],i[a]=s}return i}function yn(e){return vn(e,e.options.columns)}function bn(e){return e.getAllColumns().flatMap(e=>e.getFlatColumns())}function xn(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 Sn(e){return cn(e,e.getAllColumns().flatMap(e=>e.getLeafColumns()))}function Cn(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 wn(e,t){return e.getAllFlatColumnsById()[t]}var Tn={assignColumnPrototype:(e,t)=>{q(`coreColumnsFeature`,e,t,{column_getFlatColumns:{fn:e=>hn(e),memoDeps:e=>[e.table.options.columns]},column_getLeafColumns:{fn:e=>gn(e),memoDeps:e=>[e.table.atoms.columnOrder?.get(),e.table.atoms.grouping?.get(),e.table.options.columns,e.table.options.groupedColumnMode]}})},constructTableAPIs:e=>{K(`coreColumnsFeature`,e,{table_getDefaultColumnDef:{fn:()=>_n(e),memoDeps:()=>[e.options.defaultColumn]},table_getAllColumns:{fn:()=>yn(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumns:{fn:()=>bn(e),memoDeps:()=>[e.options.columns]},table_getAllFlatColumnsById:{fn:()=>xn(e),memoDeps:()=>[e.options.columns]},table_getAllLeafColumns:{fn:()=>Sn(e),memoDeps:()=>[e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getAllLeafColumnsById:{fn:()=>Cn(e),memoDeps:()=>[e.getAllLeafColumns()]},table_getColumn:{fn:t=>wn(e,t)}})}};function En(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 Dn(e,t,n){let r=En(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 On(e,t=1){let n=t;for(let r=0;r<e.length;r++){let i=e[r];on(i)&&i.columns.length&&(n=Math.max(n,On(i.columns,t+1)))}return n}function kn(e,t){return e?`${e}_${t}`:String(t)}function An(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 jn(e,t){let n=0;for(let r=0;r<e.length;r++)e[r].column===t&&n++;return n}function Mn(e,t,n,r,i,a){let o={depth:t,id:kn(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=Dn(n,u,{id:An(r,t,u.id,a.id),isPlaceholder:d,placeholderId:d?String(jn(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&&Mn(s,t-1,n,r,i,a)}function Nn(e){for(let t=0;t<e.length;t++){let n=e[t];if(!on(n.column))continue;let r=0;if(n.subHeaders.length){Nn(n.subHeaders);for(let e=0;e<n.subHeaders.length;e++){let t=n.subHeaders[e];on(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 Pn(e,t,n,r){let i=On(e),a=[],o=n._headerGroupInstanceInitFns,s=Array(t.length);for(let e=0;e<t.length;e++)e in t&&(s[e]=Dn(n,t[e],{depth:i,index:e}));return Mn(s,i-1,n,r,a,o),a.reverse(),Nn(a[0]?.headers??[]),a}function Fn(e,t){for(let n=0;n<e.subHeaders.length;n++)Fn(e.subHeaders[n],t);t.push(e)}function In(e){let t=[];return Fn(e,t),t}function Ln(e){return{column:e.column,header:e,table:e.column.table}}function Rn(e){return Pn(e.getAllColumns(),ln(e,sn(e),e=>e.id),e)}function zn(e){return[...e.getHeaderGroups()].reverse()}function Bn(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 Vn(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 Hn={assignHeaderPrototype:(e,t)=>{q(`coreHeadersFeature`,e,t,{header_getLeafHeaders:{fn:e=>In(e),memoDeps:e=>[e.column.table.options.columns]},header_getContext:{fn:e=>Ln(e),memoDeps:e=>[e.column.table.options.columns]}})},constructTableAPIs:e=>{K(`coreHeadersFeature`,e,{table_getHeaderGroups:{fn:()=>Rn(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:()=>zn(e),memoDeps:()=>[e.getHeaderGroups()]},table_getFlatHeaders:{fn:()=>Bn(e),memoDeps:()=>[e.getHeaderGroups()]},table_getLeafHeaders:{fn:()=>Vn(e),memoDeps:()=>[e.getHeaderGroups()]}})}};function Un(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 Wn=(e,t,n,r,i,a,o)=>{let s=Un(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 Gn(){return e=>Zt({feature:`coreRowModelsFeature`,table:e,fnName:`table.getCoreRowModel`,memoDeps:()=>[e.options.data],fn:()=>qn(e,e.options.data),onAfterUpdate:Xt(()=>{dn(e),fn(e),pn(e),mn(e)})})}function Kn(e,t,n,r=0,i){let a=[];for(let o=0;o<n.length;o++){let s=n[o],c=Wn(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=Kn(e,t,c.originalSubRows,r+1,c)))}return a}function qn(e,t){let n={rows:[],flatRows:[],rowsById:W()};return n.rows=Kn(e,n,t),n}function Jn(e){return e._rowModels.coreRowModel||(e._rowModels.coreRowModel=e.options.features.coreRowModel?.(e)??Gn()(e)),e._rowModels.coreRowModel()}function Yn(e){return e.getCoreRowModel()}function Xn(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 Zn(e){return e.getFilteredRowModel()}function Qn(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 $n(e){return e.getGroupedRowModel()}function er(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 tr(e){return e.getSortedRowModel()}function nr(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 rr(e){return e.getExpandedRowModel()}function ir(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 ar(e){return e.getPaginatedRowModel()}var or={constructTableAPIs:e=>{K(`coreRowModelsFeature`,e,{table_getCoreRowModel:{fn:()=>Jn(e)},table_getPreFilteredRowModel:{fn:()=>Yn(e)},table_getFilteredRowModel:{fn:()=>Xn(e)},table_getPreGroupedRowModel:{fn:()=>Zn(e)},table_getGroupedRowModel:{fn:()=>Qn(e)},table_getPreSortedRowModel:{fn:()=>$n(e)},table_getSortedRowModel:{fn:()=>er(e)},table_getPreExpandedRowModel:{fn:()=>tr(e)},table_getExpandedRowModel:{fn:()=>nr(e)},table_getPrePaginatedRowModel:{fn:()=>rr(e)},table_getPaginatedRowModel:{fn:()=>ir(e)},table_getRowModel:{fn:()=>ar(e)}})}};function sr(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 cr(e,t,n){let r=sr(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 lr(e){let t=e.table.getRowsInDisplayOrder(),n=e._displayIndexCache;return t[n]===e?n:-1}function ur(e){let t=e.getPrePaginatedRowModel(),n=e.options.paginateExpandedRows===!1?un(e,t).rows:t.rows;for(let e=0;e<n.length;e++)n[e]._displayIndexCache=e;return n}function dr(e,t){if(G(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 fr(e,t){if(G(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 pr(e,t){return e.getValue(t)??e.table.options.renderFallbackValue}function mr(e){return Jt(e.subRows,e=>e.subRows)}function hr(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 gr(e){if(e.parentId)return e.table.getCoreRowModel().rowsById[e.parentId]??e.table.getRow(e.parentId,!0)}function _r(e){let t=[],n=e;for(;;){let e=n.getParentRow();if(!e)break;t.push(e),n=e}return t.reverse()}function vr(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=cr(a,e,e.table),n.set(a,o)),r[i]=o}return r}function yr(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 br(e,t,n,r){return t.options.getRowId?.(e,n,r)??(r?`${r.id}.${n}`:String(n))}function xr(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 Sr={assignRowPrototype:(e,t)=>{q(`coreRowsFeature`,e,t,{row_getDisplayIndex:{fn:e=>lr(e)},row_getAllCellsByColumnId:{fn:e=>yr(e),memoDeps:e=>[e.getAllCells()]},row_getAllCells:{fn:e=>vr(e),memoDeps:e=>[e.table.getAllLeafColumns()]},row_getLeafRows:{fn:e=>mr(e),memoDeps:e=>[e.subRows]},row_getParentRow:{fn:e=>gr(e)},row_getParentRows:{fn:e=>_r(e)},row_getUniqueValues:{fn:(e,t)=>fr(e,t)},row_getValue:{fn:(e,t)=>dr(e,t)},row_renderValue:{fn:(e,t)=>pr(e,t)}})},constructTableAPIs:e=>{K(`coreRowsFeature`,e,{table_getRowsInDisplayOrder:{fn:()=>ur(e),memoDeps:()=>[e.getPrePaginatedRowModel().rows,e.options.paginateExpandedRows,e.options.paginateExpandedRows===!1?e.atoms.expanded?.get():void 0]},table_getRowId:{fn:(t,n,r)=>br(t,e,n,r)},table_getRow:{fn:(t,n)=>xr(e,t,n)},table_getMaxSubRowDepth:{fn:()=>hr(e),memoDeps:()=>[e.getCoreRowModel()]}})}};function Cr(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 wr(e,t,n=(e,t)=>e===t){e._reactivity.batch(()=>{Cr(e,t,n),e._reactivity.commit?.()})}function Tr(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 Er(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 Dr(e,t,n){let r=Er(e,zt(t,e.options));e.optionsStore?e.optionsStore.set(()=>r):e.options=r,n?.syncExternalState!==!1&&wr(e,r.state??null)}var Or={coreCellsFeature:nn,coreColumnsFeature:Tn,coreHeadersFeature:Hn,coreRowModelsFeature:or,coreRowsFeature:Sr,coreTablesFeature:{constructTableAPIs:e=>{K(`coreTablesFeature`,e,{table_reset:{fn:()=>Tr(e)},table_setOptions:{fn:t=>Dr(e,t)}})}}};function kr(e){return e}function Ar(e,t={}){return Object.values(e).forEach(e=>{t=e.getInitialState?.(t)??t}),U(t)}function jr(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:{...Or,..._},_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=Ar(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&&G(i,n)){let e=i[n];return e===void 0?v.initialState[n]:e}return r},{debugName:`table/atoms/${n}`})}Cr(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 Mr(){return W()}function Nr(){return{size:150,minSize:20,maxSize:2**53-1}}function Pr(e){let t=Nr(),n=e.table.atoms.columnSizing?.get(),r=n&&G(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 Fr(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=J(a,`getSize`,Pr);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 Ir(e){return{all:Fr(Y(e)),center:Fr(Y(e,`center`)),start:Fr(Y(e,`start`)),end:Fr(Y(e,`end`))}}function Lr(e){return e===`start`?`start`:e===`end`?`end`:e===`center`?`center`:`all`}function Rr(e,t){return J(e.table,`getColumnOffsets`,Ir)[Lr(t)].starts[e.id]??0}function zr(e,t){return J(e.table,`getColumnOffsets`,Ir)[Lr(t)].afters[e.id]??0}function Br(e){Wr(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 Vr(e){if(!e.subHeaders.length)return Pr(e.column);let t=0;for(let n=0;n<e.subHeaders.length;n++)t+=Vr(e.subHeaders[n]);return t}function Hr(e){return Vr(e)}function Ur(e){if(e.index>0){let t=e.headerGroup?.headers[e.index-1];if(t)return J(t,`getStart`,Ur)+J(t,`getSize`,Hr)}return 0}function Wr(e,t){e.options.onColumnSizingChange?.(t)}function Gr(e,t){Wr(e,t?W():Object.assign(W(),U(e.initialState.columnSizing??{})))}function Kr(e){let t=0;for(let n=0;n<e.length;n++)t+=J(e[n],`getSize`,Pr);return t}function qr(e){return e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+Hr(t),0)??0}function Jr(e){return Kr(Y(e,`start`))}function Yr(e){return Kr(Y(e,`center`))}function Xr(e){return Kr(Y(e,`end`))}function Zr(){return{startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}}function Qr(e){return(e.columnDef.enableResizing??!0)&&(e.table.options.enableColumnResizing??!0)}function $r(e){return e.table.atoms.columnResizing?.get()?.isResizingColumn===e.id}function ei(e,t){let n=e.table.getColumn(e.column.id),r=Qr(n);return i=>{if(!r||ai(i)&&i.touches.length>1)return;let a=Hr(e),o=e.getLeafHeaders().map(e=>[e.column.id,Pr(e.column)]),s=ai(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(()=>{ti(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&&Wr(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),ti(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=ii()?{passive:!1}:!1;ai(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)),ti(n.table,e=>({...e,startOffset:s,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:o,isResizingColumn:n.id}))}}function ti(e,t){e.options.onColumnResizingChange?.(t)}function ni(e,t){ti(e,t?Zr():U(e.initialState.columnResizing??Zr()))}var ri=null;function ii(){if(typeof ri==`boolean`)return ri;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 ri=e,ri}function ai(e){return e.type===`touchstart`}var oi={getInitialState:e=>({columnResizing:Zr(),...e}),getDefaultTableOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnResizingChange:Vt(`columnResizing`,e)}),assignColumnPrototype:(e,t)=>{q(`columnResizingFeature`,e,t,{column_getCanResize:{fn:e=>Qr(e)},column_getIsResizing:{fn:e=>$r(e)}})},assignHeaderPrototype:(e,t)=>{q(`columnResizingFeature`,e,t,{header_getResizeHandler:{fn:(e,t)=>ei(e,t)}})},constructTableAPIs:e=>{K(`columnResizingFeature`,e,{table_setColumnResizing:{fn:t=>ti(e,t)},table_resetHeaderSizeInfo:{fn:t=>ni(e,t)}})}},si={getInitialState:e=>({columnSizing:Mr(),...e}),getDefaultColumnDef:()=>Nr(),getDefaultTableOptions:e=>({onColumnSizingChange:Vt(`columnSizing`,e)}),assignColumnPrototype:(e,t)=>{q(`columnSizingFeature`,e,t,{column_getSize:{fn:e=>Pr(e),memoDeps:e=>[t.options.columns,t.atoms.columnSizing?.get()?.[e.id]]},column_getStart:{fn:(e,t)=>Rr(e,t)},column_getAfter:{fn:(e,t)=>zr(e,t)},column_resetSize:{fn:e=>Br(e)}})},assignHeaderPrototype:(e,t)=>{q(`columnSizingFeature`,e,t,{header_getSize:{fn:e=>Hr(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=>Ur(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=>{K(`columnSizingFeature`,e,{table_getColumnOffsets:{fn:()=>Ir(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=>Wr(e,t)},table_resetColumnSizing:{fn:t=>Gr(e,t)},table_getTotalSize:{fn:()=>qr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]},table_getStartTotalSize:{fn:()=>Jr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]},table_getCenterTotalSize:{fn:()=>Yr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]},table_getEndTotalSize:{fn:()=>Xr(e),memoDeps:()=>[e.atoms.columnSizing?.get(),e.getHeaderGroups()]}})}};function ci(){return W()}function li(e,t){ui(e)&&gi(e.table,n=>{let r=Object.assign(W(),n),i=t??!J(e,`getIsVisible`,X),a=e.getLeafColumns();for(let e=0;e<a.length;e++){let t=a[e];ui(t)&&(r[t.id]=i)}return r})}function X(e){let t=e.table.atoms.columnVisibility?.get();if(!t)return!0;let n=e.columns;return n.length?n.some(e=>J(e,`getIsVisible`,X)):(G(t,e.id)?t[e.id]:void 0)??!0}function ui(e){return(e.columnDef.enableHiding??!0)&&(e.table.options.enableHiding??!0)}function di(e){return t=>{li(e,t.target.checked)}}function fi(e){let t=e.getAllCells(),n=[];for(let e=0;e<t.length;e++){let r=t[e];J(r.column,`getIsVisible`,X)&&n.push(r)}return ln(e.table,n,e=>e.column.id,()=>J(e,`getVisibleCellsByColumnId`,pi))}function pi(e){let t=W(),n=e.getAllCells();for(let e=0;e<n.length;e++){let r=n[e];J(r.column,`getIsVisible`,X)&&(t[r.column.id]=r)}return t}function mi(e){return e.getAllFlatColumns().filter(e=>J(e,`getIsVisible`,X))}function hi(e){return e.getAllLeafColumns().filter(e=>J(e,`getIsVisible`,X))}function gi(e,t){qt(e,`columnVisibility`,t)}function _i(e,t){gi(e,t?W():Object.assign(W(),U(e.initialState.columnVisibility??{})))}function vi(e,t){t??=!yi(e);let n=W(),r=e.getAllLeafColumns();for(let e=0;e<r.length;e++){let i=r[e];n[i.id]=t||!ui(i)}gi(e,n)}function yi(e){return!e.getAllLeafColumns().some(e=>!J(e,`getIsVisible`,X))}function bi(e){return e.getAllLeafColumns().some(e=>J(e,`getIsVisible`,X))}function xi(e){return t=>{vi(e,t.target.checked)}}var Si={getInitialState:e=>({columnVisibility:ci(),...e}),getDefaultTableOptions:e=>({onColumnVisibilityChange:Vt(`columnVisibility`,e)}),assignColumnPrototype:(e,t)=>{q(`columnVisibilityFeature`,e,t,{column_getIsVisible:{fn:e=>X(e),memoDeps:e=>[t.options.columns,t.atoms.columnVisibility?.get(),e.columns]},column_getCanHide:{fn:e=>ui(e)},column_getToggleVisibilityHandler:{fn:e=>di(e)},column_toggleVisibility:{fn:(e,t)=>li(e,t)}})},assignRowPrototype:(e,t)=>{q(`columnVisibilityFeature`,e,t,{row_getVisibleCells:{fn:e=>fi(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnPinning?.get(),t.atoms.columnVisibility?.get()]},row_getVisibleCellsByColumnId:{fn:e=>pi(e),memoDeps:e=>[e.getAllCells(),t.atoms.columnVisibility?.get()]}})},constructTableAPIs:e=>{K(`columnVisibilityFeature`,e,{table_getVisibleFlatColumns:{fn:()=>mi(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_getVisibleLeafColumns:{fn:()=>hi(e),memoDeps:()=>[e.atoms.columnVisibility?.get(),e.atoms.columnOrder?.get(),e.atoms.grouping?.get(),e.options.columns,e.options.groupedColumnMode]},table_setColumnVisibility:{fn:t=>gi(e,t)},table_resetColumnVisibility:{fn:t=>_i(e,t)},table_toggleAllColumnsVisible:{fn:t=>vi(e,t)},table_getIsAllColumnsVisible:{fn:()=>yi(e)},table_getIsSomeColumnsVisible:{fn:()=>bi(e)},table_getToggleAllColumnsVisibilityHandler:{fn:()=>xi(e)}})}};function Ci(){return W()}function wi(e,t){e.options.onRowSelectionChange?.(t)}function Ti(e,t){e._lastSelectedRowId=null,wi(e,t?W():Object.assign(W(),U(e.initialState.rowSelection??{})))}function Ei(e,t,n){e._lastSelectedRowId=null,wi(e,r=>{if(t=t===void 0?!J(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,wi(e,r=>{let i=t===void 0?!J(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 J(e,`getIsSomeRowsSelected`,Fi)?Xi(t,e):{rows:[],flatRows:[],rowsById:W()}}function Ai(e){let t=e.getFilteredRowModel();return J(e,`getIsSomeRowsSelected`,Fi)?Xi(t,e):{rows:[],flatRows:[],rowsById:W()}}function ji(e){let t=e.getSortedRowModel();return J(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 J(e,`getSelectedRowIds`,Mi).length>0}function Ii(e){return e.getPaginatedRowModel().flatRows.filter(e=>Z(e)).some(e=>Bi(e)||J(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);wi(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 wi(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!!(G(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:Ci(),...e}),getDefaultTableOptions:e=>({onRowSelectionChange:Vt(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableRowRangeSelection:!0,enableSubRowSelection:!0,isRowRangeSelectionEvent:e=>{let t=e;return!!(t.shiftKey||t.nativeEvent?.shiftKey)}}),assignRowPrototype:(e,t)=>{q(`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=>{K(`rowSelectionFeature`,e,{table_setRowSelection:{fn:t=>wi(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=jr({...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;Dr(i,t=>({...t,...e}),{syncExternalState:!1});let a=i.options.state,o=r.get(),s=Be(r,t,{compare:Dt});return ea(()=>{r.markCommitted(o),wr(i,a??null,Dt)}),(0,H.useMemo)(()=>({...n,options:e,state:s}),[n,e,s])}var $=ce();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),E=se(),ce=Ae(u.query(`list_members`,{projectId:e})),D=Ae({...u.query(`list_ticket_labels`,{projectId:e,archived:t.archived}),enabled:ne}),O=[t.status,t.priority,t.assigneeId,t.label,t.due,t.archived!==`exclude`].filter(Boolean).length,k=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=>k({q:e}),className:I(`shrink-0`,t.q&&`[&_[data-slot=button]]:text-primary`)}),(0,$.jsxs)(at,{open:ne,onOpenChange:re,children:[(0,$.jsxs)(R,{render:(0,$.jsx)(_e,{label:`Filters${O?` (${O})`:``}`,className:I(`relative`,O>0&&`text-primary`)}),children:[(0,$.jsx)(gt,{}),O>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:O})]}),(0,$.jsxs)(it,{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)(F,{label:`Status`,value:t.status??``,onValueChange:e=>k({status:e?le(ae).parse(e):void 0}),children:[(0,$.jsx)(A,{value:``,children:`All statuses`}),ae.map(e=>(0,$.jsx)(A,{value:e,children:oe[e]},e))]}),(0,$.jsxs)(F,{label:`Priority`,value:t.priority??``,onValueChange:e=>k({priority:e?le(w).parse(e):void 0}),children:[(0,$.jsx)(A,{value:``,children:`All priorities`}),w.map(e=>(0,$.jsx)(A,{value:e,children:(0,$.jsx)(o,{property:`priority`,value:e})},e))]}),(0,$.jsxs)(ve,{className:i,children:[(0,$.jsx)(N,{children:`Label`}),(0,$.jsxs)(at,{open:ie,onOpenChange:T,children:[(0,$.jsxs)(R,{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)(tt,{className:`shrink-0`})]}),(0,$.jsxs)(it,{align:`start`,className:`w-[min(20rem,calc(100vw-3rem))] p-0`,children:[(0,$.jsxs)(Ke,{children:[(0,$.jsx)(qe,{"aria-label":`Search labels`,placeholder:`Search labels…`}),(0,$.jsxs)(L,{children:[(0,$.jsxs)(Je,{value:`All labels`,onSelect:()=>{k({label:void 0}),T(!1)},children:[`All labels`,!t.label&&(0,$.jsx)(x,{className:`ml-auto`})]}),D.data?.map(e=>(0,$.jsxs)(Je,{value:`label:${e.name}`,keywords:[e.name],onSelect:()=>{k({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)($e,{children:D.isPending?`Loading labels…`:`No matching labels`})]})]}),(0,$.jsx)(de,{error:D.error})]})]})]}),(0,$.jsxs)(F,{label:`Due`,value:t.due??``,onValueChange:e=>k({due:e?S.shape.due.unwrap().parse(e):void 0}),children:[(0,$.jsx)(A,{value:``,children:`Any due date`}),Object.entries(s).map(([e,t])=>(0,$.jsx)(A,{value:e,children:t},e))]}),(0,$.jsxs)(F,{label:`Assignee`,value:t.assigneeId??`any`,onValueChange:e=>k({assigneeId:e===`any`?void 0:S.shape.assigneeId.parse(e)}),children:[(0,$.jsx)(A,{value:`any`,children:`Anyone`}),(0,$.jsx)(A,{value:E.id,children:`Me`}),(0,$.jsx)(A,{value:`none`,children:`Unassigned`}),(ce.data??[]).filter(e=>e.userId!==E.id).map(e=>(0,$.jsx)(A,{value:e.userId,children:e.name},e.userId))]}),(0,$.jsxs)(F,{label:`Archived`,value:t.archived,onValueChange:e=>k({archived:S.shape.archived.parse(e)}),children:[(0,$.jsx)(A,{value:`exclude`,children:`Hide archived`}),(0,$.jsx)(A,{value:`include`,children:`Include archived`}),(0,$.jsx)(A,{value:`only`,children:`Archived only`})]})]}),(0,$.jsx)(a,{variant:`ghost`,onClick:()=>{n(Fe.parse({sort:t.sort})),re(!1)},children:`Reset filters`})]})]}),(0,$.jsxs)(at,{children:[(0,$.jsx)(R,{render:(0,$.jsx)(_e,{label:`Display`}),children:(0,$.jsx)(Et,{})}),(0,$.jsxs)(it,{align:`end`,className:`w-[min(19rem,calc(100vw-2rem))] gap-3 p-4`,children:[(0,$.jsx)(z,{children:`Display`}),(0,$.jsx)(F,{label:`Order by`,value:t.sort,onValueChange:e=>k({sort:S.shape.sort.parse(e),order:void 0}),children:Object.entries(m).map(([e,t])=>(0,$.jsx)(A,{value:e,children:t},e))}),(0,$.jsx)(ra,{label:`Direction`,value:t.order??r[t.sort],onChange:e=>k({order:S.shape.order.parse(e)}),options:[[`asc`,`Ascending`],[`desc`,`Descending`]]}),(0,$.jsx)(ra,{label:`Group by`,value:v,onChange:e=>y(Ge.parse(e)),options:[[`status`,`Status`],[`none`,`None`]]}),(0,$.jsx)(M,{}),(0,$.jsx)(ra,{label:`Row spacing`,value:p,onChange:e=>h(nt.parse(e)),options:[[`compact`,`Compact`],[`comfortable`,`Comfortable`]]}),(0,$.jsx)(ra,{label:`Label display`,value:g,onChange:e=>_(Le.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)(ye,{label:e.label,checked:e.visible,onCheckedChange:t=>l(e.id,t)},e.id))})]}),(0,$.jsx)(M,{}),(0,$.jsx)(a,{variant:`ghost`,onClick:d,children:`Reset display`})]})]}),ee]}),(t.q||O>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:()=>k({q:void 0}),children:[`Search: `,t.q,(0,$.jsx)(C,{className:`size-3`})]}),t.status&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>k({status:void 0}),children:[oe[t.status],(0,$.jsx)(C,{className:`size-3`})]}),t.priority&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>k({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:()=>k({assigneeId:void 0}),children:[t.assigneeId===`none`?`Unassigned`:t.assigneeId===E.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:()=>k({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:()=>k({due:void 0}),children:[s[t.due],(0,$.jsx)(C,{className:`size-3`})]}),t.archived!==`exclude`&&(0,$.jsxs)(a,{variant:`secondary`,size:`sm`,onClick:()=>k({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(Fe.parse({sort:t.sort})),children:`Clear filters`})]})]})}function ra({label:e,value:t,onChange:n,options:r}){return(0,$.jsxs)(ve,{className:i,children:[(0,$.jsx)(N,{children:e}),(0,$.jsx)(et,{"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)(Ye,{value:e,"aria-label":t,children:t},e))})]})}function ia({selected:e,onClear:t}){let n=E(`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(()=>{k.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)(_e,{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)(M,{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)(M,{orientation:`vertical`,className:`hidden h-5! sm:block`}),(0,$.jsx)(Se,{label:`Archive selected`,disabled:n.isPending,icon:(0,$.jsx)(Xe,{}),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=kr({columnSizingFeature:si,columnResizingFeature:oi,rowSelectionFeature:$i,columnVisibilityFeature:Si}),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:I(`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)(ye,{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)(ye,{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)(Me,{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)(P,{value:e.original.dueAt,open:!D.some(t=>t===e.original.status)})},...[`createdAt`,`updatedAt`].map(e=>({accessorKey:e,header:e===`createdAt`?`Created`:`Updated`,size:130,cell:({row:t})=>(0,$.jsx)(Oe,{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=je(),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,Le,`compact`)),[v,b]=(0,H.useState)(()=>la(h,Ge,`status`)),[x,te]=(0,H.useState)(()=>la(f,nt,`compact`)),[C,ne]=(0,H.useState)(()=>{try{return{...sa,...fe(xe(),Ce()).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,ce]=(0,H.useState)(()=>new Set),le=re.filterKey===w?re.pages:{},D=v===`status`?ae.filter(e=>!n.status||e===n.status):[void 0],O=D.flatMap(e=>Array.from({length:le[pa(e)]??1},(t,n)=>({status:e,offset:n*oa}))),A=St({queries:O.map(({status:t,offset:r})=>u.query(`list_tickets`,{projectId:e.id,...n,status:t??n.status,offset:r,limit:oa}))}),j=D.map(e=>({status:e,data:{items:O.flatMap((t,n)=>t.status===e?A[n]?.data?.items??[]:[]),total:A[O.findIndex(t=>t.status===e)]?.data?.total??0}})),me=Object.fromEntries(j.map(e=>[pa(e.status),Math.max(1,Math.ceil(e.data.total/oa))])),he=D.some(e=>(le[pa(e)]??1)<(me[pa(e)]??1));he&&ie({filterKey:w,pages:me});let M=new Map;for(let e of j)for(let t of e.data?.items??[]){let e=M.get(t.id);(!e||t.version>e.version)&&M.set(t.id,t)}let ve=he||A.some(e=>e.isPending),ye=[...M.keys()].join(`
2
- `),[N,we]=(0,H.useState)({filterKey:w,ids:null,fresh:new Set});if(N.filterKey!==w)we({filterKey:w,ids:null,fresh:new Set});else if(N.ids===null)ve||we({filterKey:w,ids:ye,fresh:new Set});else if(N.ids!==ye){let e=new Set(N.ids.split(`
3
- `));we({filterKey:w,ids:ye,fresh:new Set([...M.keys()].filter(t=>!e.has(t)))})}let P={isPending:ve,error:A.find(e=>e.error)?.error,data:{items:[...M.values()].filter(e=>v===`none`||!T.has(e.status)),total:j.reduce((e,t)=>e+(t.data?.total??0),0)}},Te=Ae(u.query(`list_views`,{projectId:e.id})),F=E(`save_view`),Oe=E(`delete_view`),[ke,Me]=(0,H.useState)(!1),[Be,We]=(0,H.useState)(``),[Ke,qe]=(0,H.useState)(!1),[Je,Ye]=(0,H.useState)(null),Xe=S.parse(Object.fromEntries(Object.entries(n).filter(([e])=>e!==`offset`))),$e=JSON.stringify(Xe)===JSON.stringify(S.parse({})),et=Te.data?.find(e=>JSON.stringify(Xe)===JSON.stringify(S.parse(e.filters))),tt=et?.name??($e?`All tickets`:`Custom view`),L=ta({features:aa,columns:da,data:P.data?.items??[],getRowId:e=>e.id,columnResizeMode:`onChange`,enableRowSelection:o.canWrite,state:{columnVisibility:{...C,title:!0,select:o.canWrite}},onColumnVisibilityChange:ne}),rt=L.getSelectedRowModel().rows.map(e=>e.original),R=j.filter(e=>e.data.total>0).flatMap(({status:e})=>e&&T.has(e)?[]:L.getRowModel().rows.filter(t=>!e||t.original.status===e).map(e=>e.id)),it=R.join(`
4
- `);(0,H.useEffect)(()=>{ve||yt(e.id,it?it.split(`
5
- `):[])},[ve,e.id,it]);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(!R.length)return;let t=z?R.indexOf(z):-1,n=t<0?e>0?0:R.length-1:Math.min(R.length-1,Math.max(0,t+e));at(R[n]??null)},B={enabled:!ke},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?M.get(z):void 0;e&&l({to:`/projects/$projectId/tickets/$ticketId`,params:{projectId:e.projectId,ticketId:e.id}})},mt),t(`x`,()=>{z&&o.canWrite&&L.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=>{L.resetRowSelection(),ce(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},V=e=>{L.resetRowSelection(),ie({filterKey:JSON.stringify({...e,offset:0,grouping:v}),pages:{}}),i(e)};t(`c`,()=>{o.canWrite&&Me(!0)},{enabled:!ke});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)(ze,{render:(0,$.jsx)(a,{variant:`ghost`,"aria-label":`Ticket views`,title:tt,className:`max-w-full min-w-0 justify-start`}),children:[(0,$.jsx)(`span`,{className:`truncate`,children:tt}),(0,$.jsx)(y,{className:`size-3 shrink-0`})]}),(0,$.jsxs)(Pe,{align:`start`,className:`max-h-[70dvh] w-60 overflow-y-auto`,children:[(0,$.jsx)(Ze,{children:(0,$.jsx)(He,{value:et?.id??($e?`all`:`custom`),onValueChange:e=>{let t=Te.data?.find(t=>t.id===e);e===`all`?V(Fe.parse({})):t&&V({...t.filters,offset:0})},children:[{id:`all`,name:`All tickets`},...Te.data??[]].map(e=>(0,$.jsx)(Ue,{value:e.id,closeOnClick:!0,children:e.name},e.id))})}),(0,$.jsx)(Re,{}),(0,$.jsxs)(Ze,{children:[o.canWrite&&(0,$.jsx)(Ve,{onClick:()=>L.toggleAllRowsSelected(!L.getIsAllRowsSelected()),children:L.getIsAllRowsSelected()?`Clear selection`:`Select all displayed tickets`}),(0,$.jsxs)(Ve,{onClick:()=>qe(!0),children:[(0,$.jsx)(wt,{}),`Save current view`]}),et&&(0,$.jsxs)(Ve,{onClick:()=>Ye(et),children:[(0,$.jsx)(Ne,{}),`Delete view `,et.name]})]})]})]}),actions:(0,$.jsx)(_e,{label:`New ticket`,title:`New ticket (C)`,variant:`default`,disabled:!o.canWrite,onClick:()=>Me(!0),children:(0,$.jsx)(De,{})}),density:x,onDensityChange:te,labelDisplay:g,onLabelDisplayChange:_,grouping:v,onGroupingChange:b,columns:L.getAllLeafColumns().filter(e=>e.getCanHide()).map(e=>({id:e.id,label:String(e.columnDef.header),visible:e.getIsVisible()})),onColumnChange:(e,t)=>L.getColumn(e)?.toggleVisibility(t),onReset:()=>{ne(sa),te(`compact`),_(`compact`),b(`status`),V({...n,sort:`priority`,order:void 0,offset:0})}}),(0,$.jsx)(Ee,{title:`Save view`,open:Ke,onOpenChange:qe,busy:F.isPending,children:(0,$.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),F.mutateAsync({projectId:e.id,name:Be,filters:S.parse(Object.fromEntries(Object.entries(n).filter(([e])=>e!==`offset`)))}).then(()=>{qe(!1),We(``),k.success(`View saved`)}).catch(()=>{})},children:[(0,$.jsx)(ge,{label:`View name`,required:!0,maxLength:80,value:Be,onChange:e=>We(e.target.value)}),(0,$.jsx)(be,{error:F.error,pending:F.isPending,submitLabel:`Save view`,onCancel:()=>qe(!1)})]})}),Je&&(0,$.jsx)(Se,{label:`Delete view ${Je.name}`,description:`Remove ${Je.name} from saved views? Tickets stay unchanged.`,trigger:!1,open:!0,onOpenChange:e=>{e||Ye(null)},onConfirm:async()=>{await Oe.mutateAsync({projectId:e.id,viewId:Je.id}),Ye(null)}}),(0,$.jsx)(de,{error:P.error??Oe.error}),rt.length>0&&(0,$.jsx)(ia,{selected:rt,onClear:()=>L.resetRowSelection()}),P.isPending?(0,$.jsx)(pe,{}):P.error?(0,$.jsx)(a,{disabled:A.some(e=>e.isFetching),onClick:()=>{for(let e of A)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":`${L.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:L.getVisibleLeafColumns()}),(0,$.jsx)(ot,{role:`rowgroup`,children:L.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:I(`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:I(`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)(L.FlexRender,{header:e}),o===`asc`&&(0,$.jsx)(c,{className:`size-3`}),o===`desc`&&(0,$.jsx)(p,{className:`size-3`})]}):(0,$.jsx)(L.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(),L.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))})]})}),j.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:L.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:L.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))&&L.getRowModel().rows.filter(t=>!e||t.original.status===e).map(e=>(0,$.jsx)(Ie,{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":N.fresh.has(e.id)||void 0,onClick:t=>_t(e.original,t),children:e.getVisibleCells().map(e=>(0,$.jsx)(ut,{className:I(`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)(L.FlexRender,{cell:e})},e.id))})},e.id))]})]},pa(e)))]}),!P.error&&P.data.total===0&&(0,$.jsx)(ue,{title:$e&&!n.q?`No tickets yet`:`No matching tickets`,children:$e?o.canWrite&&(0,$.jsxs)(a,{variant:`default`,onClick:()=>Me(!0),children:[(0,$.jsx)(De,{}),`Create the first ticket`]}):(0,$.jsx)(a,{onClick:()=>V(Fe.parse({})),children:`Clear filters`})})]}),!P.isPending&&!P.error&&(0,$.jsxs)(`footer`,{className:`shrink-0 py-2 text-xs text-muted-foreground`,children:[P.data.total,` tickets`]}),(0,$.jsx)(Ee,{size:`composer`,title:`New ticket`,open:ke,onOpenChange:Me,children:ke&&(0,$.jsx)(pt,{projectId:e.id,onSaved:()=>Me(!1)})})]})}export{_a as TicketList};
@@ -1 +0,0 @@
1
- import{Dn as e,P as t,_a as n,xi as r}from"./forms-B4Vg3CPz.js";import{n as i,r as a}from"./project-label-provider-9L7Uts3_.js";import{i as o,n as s,r as c,t as l}from"./popover-BhzZ0U1d.js";var u=n();function d({tag:e,kind:n=`label`,color:o,children:s,...c}){let l=i(),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`,a(d).className),style:a(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{Li as e}from"./forms-B4Vg3CPz.js";var t={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};t.node;var n=e(t);export{n as t};
@@ -1 +0,0 @@
1
- import{Li as e,go as t,yo as n}from"./forms-B4Vg3CPz.js";import{i as r}from"./link-DoIP9KJ6.js";var i={name:`bell`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]};i.node;var a=e(i),o={name:`user-round`,size:24,node:[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]],aliases:[`user-2`]};o.node;var s=e(o),c=n(t(),1);function l(e){let t=r();return c.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}export{s as n,a as r,l 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-B4Vg3CPz.js";import{t as m}from"./link-DoIP9KJ6.js";import{r as h,t as g}from"./member-directory-BiCE8DRq.js";import{Y as _}from"./index-C_a21taR.js";import{n as v,r as y,t as b}from"./settings-layout-B-AwUIMu.js";var x=a(),S=[{id:`general`,label:`General`,icon:h},{id:`members`,label:`Members`,icon:_}];function C({workspaceId:a,section:h,onSectionChange:_}){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)(m,{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:h,onChange:_,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)(m,{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:()=>_(`members`),children:`Manage members`})})]})]}),(0,x.jsx)(f,{value:`members`,children:(0,x.jsx)(g,{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};