prefect 3.6.14.dev6__py3-none-any.whl → 3.6.14.dev7__py3-none-any.whl

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 (211) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/server/ui-v2/assets/{artifact-card-fXxwNG3f.js → artifact-card-9Cw_dMVb.js} +2 -2
  3. prefect/server/ui-v2/assets/{artifact-card-fXxwNG3f.js.map → artifact-card-9Cw_dMVb.js.map} +1 -1
  4. prefect/server/ui-v2/assets/{artifact._id-BIyzb0Jb.js → artifact._id-zuZ8P2RD.js} +2 -2
  5. prefect/server/ui-v2/assets/{artifact._id-BIyzb0Jb.js.map → artifact._id-zuZ8P2RD.js.map} +1 -1
  6. prefect/server/ui-v2/assets/{automation-wizard-bDZICLpV.js → automation-wizard-D7nVgckT.js} +2 -2
  7. prefect/server/ui-v2/assets/{automation-wizard-bDZICLpV.js.map → automation-wizard-D7nVgckT.js.map} +1 -1
  8. prefect/server/ui-v2/assets/{automation._id-CmDL_Eta.js → automation._id-BhEFaDc6.js} +2 -2
  9. prefect/server/ui-v2/assets/{automation._id-CmDL_Eta.js.map → automation._id-BhEFaDc6.js.map} +1 -1
  10. prefect/server/ui-v2/assets/{automation_._id.edit-DY7_SAuk.js → automation_._id.edit-CffnUlbj.js} +2 -2
  11. prefect/server/ui-v2/assets/{automation_._id.edit-DY7_SAuk.js.map → automation_._id.edit-CffnUlbj.js.map} +1 -1
  12. prefect/server/ui-v2/assets/{automations-header-CgxOgR53.js → automations-header-qb94agIp.js} +2 -2
  13. prefect/server/ui-v2/assets/{automations-header-CgxOgR53.js.map → automations-header-qb94agIp.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{base-job-template-form-section-DilLn1Ul.js → base-job-template-form-section-DdDSFAJa.js} +2 -2
  15. prefect/server/ui-v2/assets/{base-job-template-form-section-DilLn1Ul.js.map → base-job-template-form-section-DdDSFAJa.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{block-type-details-Cx4npO8Y.js → block-type-details-2rIqbqoZ.js} +2 -2
  17. prefect/server/ui-v2/assets/{block-type-details-Cx4npO8Y.js.map → block-type-details-2rIqbqoZ.js.map} +1 -1
  18. prefect/server/ui-v2/assets/block-type-logo-DV1pSkV0.js +2 -0
  19. prefect/server/ui-v2/assets/{block-type-logo-FrtMLMYr.js.map → block-type-logo-DV1pSkV0.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{block._id-CWi9g5N3.js → block._id-OeCbdPeL.js} +2 -2
  21. prefect/server/ui-v2/assets/{block._id-CWi9g5N3.js.map → block._id-OeCbdPeL.js.map} +1 -1
  22. prefect/server/ui-v2/assets/{block_._id.edit-wf0QVPUL.js → block_._id.edit-CD22VllN.js} +2 -2
  23. prefect/server/ui-v2/assets/{block_._id.edit-wf0QVPUL.js.map → block_._id.edit-CD22VllN.js.map} +1 -1
  24. prefect/server/ui-v2/assets/{catalog-Iv1gLDUd.js → catalog-Dj7lYV7b.js} +2 -2
  25. prefect/server/ui-v2/assets/{catalog-Iv1gLDUd.js.map → catalog-Dj7lYV7b.js.map} +1 -1
  26. prefect/server/ui-v2/assets/{catalog_._slug-DEHFXZzp.js → catalog_._slug-NLgWS8vG.js} +2 -2
  27. prefect/server/ui-v2/assets/{catalog_._slug-DEHFXZzp.js.map → catalog_._slug-NLgWS8vG.js.map} +1 -1
  28. prefect/server/ui-v2/assets/{catalog_._slug_.create-C-vFPUOy.js → catalog_._slug_.create-D0vc1Piy.js} +2 -2
  29. prefect/server/ui-v2/assets/{catalog_._slug_.create-C-vFPUOy.js.map → catalog_._slug_.create-D0vc1Piy.js.map} +1 -1
  30. prefect/server/ui-v2/assets/{collapsible-BlEqjqQu.js → collapsible-Dgk2Qvjj.js} +2 -2
  31. prefect/server/ui-v2/assets/{collapsible-BlEqjqQu.js.map → collapsible-Dgk2Qvjj.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{concurrency-limit._id-VfgyonlO.js → concurrency-limit._id-BZiyM0NT.js} +2 -2
  33. prefect/server/ui-v2/assets/{concurrency-limit._id-VfgyonlO.js.map → concurrency-limit._id-BZiyM0NT.js.map} +1 -1
  34. prefect/server/ui-v2/assets/{create-fSiDZ1kD.js → create-1j1-8yhV.js} +2 -2
  35. prefect/server/ui-v2/assets/{create-fSiDZ1kD.js.map → create-1j1-8yhV.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{create-CC32TiFK.js → create-H21iiYVl.js} +2 -2
  37. prefect/server/ui-v2/assets/{create-CC32TiFK.js.map → create-H21iiYVl.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{data-table-B2NqBPUR.js → data-table-DHlbTUL7.js} +2 -2
  39. prefect/server/ui-v2/assets/{data-table-B2NqBPUR.js.map → data-table-DHlbTUL7.js.map} +1 -1
  40. prefect/server/ui-v2/assets/delete-confirmation-dialog-B9-8JHV7.js +2 -0
  41. prefect/server/ui-v2/assets/{delete-confirmation-dialog-jlBI67Pk.js.map → delete-confirmation-dialog-B9-8JHV7.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{deployment-action-header-C203ndcC.js → deployment-action-header-DlD2GSJB.js} +2 -2
  43. prefect/server/ui-v2/assets/{deployment-action-header-C203ndcC.js.map → deployment-action-header-DlD2GSJB.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{deployment-form-DB4i73UE.js → deployment-form-CFcOIeIi.js} +3 -3
  45. prefect/server/ui-v2/assets/{deployment-form-DB4i73UE.js.map → deployment-form-CFcOIeIi.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{deployment-links-UZYTtmnK.js → deployment-links-DN2Oa0r1.js} +2 -2
  47. prefect/server/ui-v2/assets/{deployment-links-UZYTtmnK.js.map → deployment-links-DN2Oa0r1.js.map} +1 -1
  48. prefect/server/ui-v2/assets/{deployment._id-Drmf70gG.js → deployment._id-C8NPwIIQ.js} +2 -2
  49. prefect/server/ui-v2/assets/{deployment._id-Drmf70gG.js.map → deployment._id-C8NPwIIQ.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{deployment._id-Bk44iuUn.js → deployment._id-DsVQUPNp.js} +2 -2
  51. prefect/server/ui-v2/assets/{deployment._id-Bk44iuUn.js.map → deployment._id-DsVQUPNp.js.map} +1 -1
  52. prefect/server/ui-v2/assets/deployment_._id.duplicate-4uYFgdPg.js +2 -0
  53. prefect/server/ui-v2/assets/{deployment_._id.duplicate-aUHtHuNO.js.map → deployment_._id.duplicate-4uYFgdPg.js.map} +1 -1
  54. prefect/server/ui-v2/assets/deployment_._id.edit-Z859_W76.js +2 -0
  55. prefect/server/ui-v2/assets/{deployment_._id.edit-CPRKkA-W.js.map → deployment_._id.edit-Z859_W76.js.map} +1 -1
  56. prefect/server/ui-v2/assets/{deployment_._id.run-C8EGDJeT.js → deployment_._id.run-MW5q2SRM.js} +2 -2
  57. prefect/server/ui-v2/assets/{deployment_._id.run-C8EGDJeT.js.map → deployment_._id.run-MW5q2SRM.js.map} +1 -1
  58. prefect/server/ui-v2/assets/{dropdown-menu-CT6uZu-V.js → dropdown-menu-DF4QR3Cp.js} +2 -2
  59. prefect/server/ui-v2/assets/{dropdown-menu-CT6uZu-V.js.map → dropdown-menu-DF4QR3Cp.js.map} +1 -1
  60. prefect/server/ui-v2/assets/{event-resource-display-DmCKu0PD.js → event-resource-display-DR3zL_k_.js} +2 -2
  61. prefect/server/ui-v2/assets/{event-resource-display-DmCKu0PD.js.map → event-resource-display-DR3zL_k_.js.map} +1 -1
  62. prefect/server/ui-v2/assets/{event._eventDate._eventId-DqO9viGu.js → event._eventDate._eventId-DfU7SalU.js} +2 -2
  63. prefect/server/ui-v2/assets/{event._eventDate._eventId-DqO9viGu.js.map → event._eventDate._eventId-DfU7SalU.js.map} +1 -1
  64. prefect/server/ui-v2/assets/flow-run-graph-Bf9t75GK.js +2 -0
  65. prefect/server/ui-v2/assets/{flow-run-graph-CIvkp1kl.js.map → flow-run-graph-Bf9t75GK.js.map} +1 -1
  66. prefect/server/ui-v2/assets/flow-run._id-33WKPXsZ.js +4 -0
  67. prefect/server/ui-v2/assets/flow-run._id-33WKPXsZ.js.map +1 -0
  68. prefect/server/ui-v2/assets/{flow-run._id-xahYswsG.js → flow-run._id-DTsj_xO3.js} +2 -2
  69. prefect/server/ui-v2/assets/{flow-run._id-xahYswsG.js.map → flow-run._id-DTsj_xO3.js.map} +1 -1
  70. prefect/server/ui-v2/assets/{flow-run._id-DyUEsBSd.js → flow-run._id-RL0qeSLl.js} +2 -2
  71. prefect/server/ui-v2/assets/{flow-run._id-DyUEsBSd.js.map → flow-run._id-RL0qeSLl.js.map} +1 -1
  72. prefect/server/ui-v2/assets/{flow-runs-pagination--FfnMca3.js → flow-runs-pagination-Bfelp8UO.js} +2 -2
  73. prefect/server/ui-v2/assets/{flow-runs-pagination--FfnMca3.js.map → flow-runs-pagination-Bfelp8UO.js.map} +1 -1
  74. prefect/server/ui-v2/assets/{flow._id-C_ho4p55.js → flow._id-DuQ5AUjj.js} +2 -2
  75. prefect/server/ui-v2/assets/{flow._id-C_ho4p55.js.map → flow._id-DuQ5AUjj.js.map} +1 -1
  76. prefect/server/ui-v2/assets/{form-CxD6-5Qf.js → form-DHWphysD.js} +2 -2
  77. prefect/server/ui-v2/assets/{form-CxD6-5Qf.js.map → form-DHWphysD.js.map} +1 -1
  78. prefect/server/ui-v2/assets/{header-iN9gVtk7.js → header-B9SuuoZx.js} +2 -2
  79. prefect/server/ui-v2/assets/{header-iN9gVtk7.js.map → header-B9SuuoZx.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{header-CYjjmMrB.js → header-BK_NuSng.js} +2 -2
  81. prefect/server/ui-v2/assets/{header-CYjjmMrB.js.map → header-BK_NuSng.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{header-Cjet3B6Z.js → header-nu-ZKuen.js} +2 -2
  83. prefect/server/ui-v2/assets/{header-Cjet3B6Z.js.map → header-nu-ZKuen.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{index-CfMaY6sy.js → index-BCR-yD58.js} +2 -2
  85. prefect/server/ui-v2/assets/{index-CfMaY6sy.js.map → index-BCR-yD58.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{index-ltOkPb3X.js → index-BPXdHXTb.js} +2 -2
  87. prefect/server/ui-v2/assets/{index-ltOkPb3X.js.map → index-BPXdHXTb.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{index-CTeNzxT9.js → index-BqwU5GSv.js} +2 -2
  89. prefect/server/ui-v2/assets/{index-CTeNzxT9.js.map → index-BqwU5GSv.js.map} +1 -1
  90. prefect/server/ui-v2/assets/index-Br7MUvka.css +1 -0
  91. prefect/server/ui-v2/assets/{index-D-yYhKPg.js → index-C0MMjoUe.js} +2 -2
  92. prefect/server/ui-v2/assets/{index-D-yYhKPg.js.map → index-C0MMjoUe.js.map} +1 -1
  93. prefect/server/ui-v2/assets/{index-0opjCZAR.js → index-CPFMHkRh.js} +2 -2
  94. prefect/server/ui-v2/assets/{index-0opjCZAR.js.map → index-CPFMHkRh.js.map} +1 -1
  95. prefect/server/ui-v2/assets/{index-D8SbV2Tp.js → index-CYjH7t93.js} +2 -2
  96. prefect/server/ui-v2/assets/{index-D8SbV2Tp.js.map → index-CYjH7t93.js.map} +1 -1
  97. prefect/server/ui-v2/assets/{index-BF3HB5BS.js → index-Cj5ihRiw.js} +2 -2
  98. prefect/server/ui-v2/assets/{index-BF3HB5BS.js.map → index-Cj5ihRiw.js.map} +1 -1
  99. prefect/server/ui-v2/assets/{index-d9_i_klL.js → index-CqUa3fbN.js} +2 -2
  100. prefect/server/ui-v2/assets/{index-d9_i_klL.js.map → index-CqUa3fbN.js.map} +1 -1
  101. prefect/server/ui-v2/assets/{index-CSQa2wYx.js → index-DFS5GNpT.js} +2 -2
  102. prefect/server/ui-v2/assets/{index-CSQa2wYx.js.map → index-DFS5GNpT.js.map} +1 -1
  103. prefect/server/ui-v2/assets/{index-B5eJQPOP.js → index-DNuhJlQK.js} +2 -2
  104. prefect/server/ui-v2/assets/{index-B5eJQPOP.js.map → index-DNuhJlQK.js.map} +1 -1
  105. prefect/server/ui-v2/assets/{index-DQOPH4Rq.js → index-DSBmxhwG.js} +2 -2
  106. prefect/server/ui-v2/assets/{index-DQOPH4Rq.js.map → index-DSBmxhwG.js.map} +1 -1
  107. prefect/server/ui-v2/assets/{index-CT2kL3dS.js → index-DVsNA4UN.js} +2 -2
  108. prefect/server/ui-v2/assets/{index-CT2kL3dS.js.map → index-DVsNA4UN.js.map} +1 -1
  109. prefect/server/ui-v2/assets/{index-D4df3B9r.js → index-DWGx9irM.js} +2 -2
  110. prefect/server/ui-v2/assets/{index-D4df3B9r.js.map → index-DWGx9irM.js.map} +1 -1
  111. prefect/server/ui-v2/assets/{index-Cwd5Gvad.js → index-DcMpyvW7.js} +2 -2
  112. prefect/server/ui-v2/assets/{index-Cwd5Gvad.js.map → index-DcMpyvW7.js.map} +1 -1
  113. prefect/server/ui-v2/assets/{index-C2ayqOiQ.js → index-Dl_iSX0z.js} +2 -2
  114. prefect/server/ui-v2/assets/{index-C2ayqOiQ.js.map → index-Dl_iSX0z.js.map} +1 -1
  115. prefect/server/ui-v2/assets/{index-DI-aZXNg.js → index-DsK1RlS9.js} +2 -2
  116. prefect/server/ui-v2/assets/{index-DI-aZXNg.js.map → index-DsK1RlS9.js.map} +1 -1
  117. prefect/server/ui-v2/assets/{index-C3A0XavU.js → index-DtrQRjt_.js} +2 -2
  118. prefect/server/ui-v2/assets/{index-C3A0XavU.js.map → index-DtrQRjt_.js.map} +1 -1
  119. prefect/server/ui-v2/assets/{index-nxDkMXcY.js → index-_0OOjqn5.js} +13 -13
  120. prefect/server/ui-v2/assets/index-_0OOjqn5.js.map +1 -0
  121. prefect/server/ui-v2/assets/{index-BfXKkd3I.js → index-mj9GNKt7.js} +2 -2
  122. prefect/server/ui-v2/assets/{index-BfXKkd3I.js.map → index-mj9GNKt7.js.map} +1 -1
  123. prefect/server/ui-v2/assets/{index-D0ANIqVp.js → index-vRbn9rG4.js} +2 -2
  124. prefect/server/ui-v2/assets/{index-D0ANIqVp.js.map → index-vRbn9rG4.js.map} +1 -1
  125. prefect/server/ui-v2/assets/{json-input-BGfZindW.js → json-input-CMZiW5M2.js} +2 -2
  126. prefect/server/ui-v2/assets/{json-input-BGfZindW.js.map → json-input-CMZiW5M2.js.map} +1 -1
  127. prefect/server/ui-v2/assets/{key._key-mnO405kp.js → key._key-CdonPtNh.js} +2 -2
  128. prefect/server/ui-v2/assets/{key._key-mnO405kp.js.map → key._key-CdonPtNh.js.map} +1 -1
  129. prefect/server/ui-v2/assets/{lazy-markdown-CLclUkkd.js → lazy-markdown-CKcd9ksG.js} +2 -2
  130. prefect/server/ui-v2/assets/{lazy-markdown-CLclUkkd.js.map → lazy-markdown-CKcd9ksG.js.map} +1 -1
  131. prefect/server/ui-v2/assets/{login-ST_-h2GY.js → login-Dnd-tV90.js} +2 -2
  132. prefect/server/ui-v2/assets/{login-ST_-h2GY.js.map → login-Dnd-tV90.js.map} +1 -1
  133. prefect/server/ui-v2/assets/{markdown-input-DemuemAs.js → markdown-input-D6rfyTa_.js} +2 -2
  134. prefect/server/ui-v2/assets/{markdown-input-DemuemAs.js.map → markdown-input-D6rfyTa_.js.map} +1 -1
  135. prefect/server/ui-v2/assets/{python-example-snippet-BUllaeTS.js → python-example-snippet-eWuRXCxE.js} +3 -3
  136. prefect/server/ui-v2/assets/{python-example-snippet-BUllaeTS.js.map → python-example-snippet-eWuRXCxE.js.map} +1 -1
  137. prefect/server/ui-v2/assets/{python-input-DTpMdYLs.js → python-input-itfwkkBT.js} +2 -2
  138. prefect/server/ui-v2/assets/{python-input-DTpMdYLs.js.map → python-input-itfwkkBT.js.map} +1 -1
  139. prefect/server/ui-v2/assets/{radio-group-CJhtPDwC.js → radio-group-DeN-_krn.js} +2 -2
  140. prefect/server/ui-v2/assets/{radio-group-CJhtPDwC.js.map → radio-group-DeN-_krn.js.map} +1 -1
  141. prefect/server/ui-v2/assets/{route-error-state-D0wedcpP.js → route-error-state-tYzhKCqH.js} +2 -2
  142. prefect/server/ui-v2/assets/{route-error-state-D0wedcpP.js.map → route-error-state-tYzhKCqH.js.map} +1 -1
  143. prefect/server/ui-v2/assets/{schema-form-Cx-6swYW.js → schema-form-DDUzvjpL.js} +2 -2
  144. prefect/server/ui-v2/assets/{schema-form-Cx-6swYW.js.map → schema-form-DDUzvjpL.js.map} +1 -1
  145. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-CZkUje5U.js → schema-form-input-string-format-datetime-DrpJmvST.js} +4 -4
  146. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-CZkUje5U.js.map → schema-form-input-string-format-datetime-DrpJmvST.js.map} +1 -1
  147. prefect/server/ui-v2/assets/{settings-nHtCkknH.js → settings-OdrJDFrk.js} +2 -2
  148. prefect/server/ui-v2/assets/{settings-nHtCkknH.js.map → settings-OdrJDFrk.js.map} +1 -1
  149. prefect/server/ui-v2/assets/{sort-filter-QjOHFWPI.js → sort-filter-DaBGDmua.js} +2 -2
  150. prefect/server/ui-v2/assets/{sort-filter-QjOHFWPI.js.map → sort-filter-DaBGDmua.js.map} +1 -1
  151. prefect/server/ui-v2/assets/{table-Bx2Ol4j-.js → table-4GUC4YOD.js} +2 -2
  152. prefect/server/ui-v2/assets/{table-Bx2Ol4j-.js.map → table-4GUC4YOD.js.map} +1 -1
  153. prefect/server/ui-v2/assets/{tags-input-C7cxdTyV.js → tags-input-BvH9UY8h.js} +2 -2
  154. prefect/server/ui-v2/assets/{tags-input-C7cxdTyV.js.map → tags-input-BvH9UY8h.js.map} +1 -1
  155. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CG2F0Ufy.js → task-run-concurrency-limits-reset-dialog-CLZz3kwW.js} +2 -2
  156. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CG2F0Ufy.js.map → task-run-concurrency-limits-reset-dialog-CLZz3kwW.js.map} +1 -1
  157. prefect/server/ui-v2/assets/{task-run._id-CapS5wad.js → task-run._id-DHHzTQ9d.js} +2 -2
  158. prefect/server/ui-v2/assets/{task-run._id-CapS5wad.js.map → task-run._id-DHHzTQ9d.js.map} +1 -1
  159. prefect/server/ui-v2/assets/{task-run._id-CevQxX-E.js → task-run._id-DgXFfCuq.js} +2 -2
  160. prefect/server/ui-v2/assets/{task-run._id-CevQxX-E.js.map → task-run._id-DgXFfCuq.js.map} +1 -1
  161. prefect/server/ui-v2/assets/{task-runs-pagination-Dbwa2yPe.js → task-runs-pagination-fR9zqj38.js} +2 -2
  162. prefect/server/ui-v2/assets/{task-runs-pagination-Dbwa2yPe.js.map → task-runs-pagination-fR9zqj38.js.map} +1 -1
  163. prefect/server/ui-v2/assets/{textarea-vy4DM6KG.js → textarea-DL9UCBaB.js} +2 -2
  164. prefect/server/ui-v2/assets/{textarea-vy4DM6KG.js.map → textarea-DL9UCBaB.js.map} +1 -1
  165. prefect/server/ui-v2/assets/{timezone-select-DDUTUy-L.js → timezone-select-qBEoPcyO.js} +2 -2
  166. prefect/server/ui-v2/assets/{timezone-select-DDUTUy-L.js.map → timezone-select-qBEoPcyO.js.map} +1 -1
  167. prefect/server/ui-v2/assets/{toggle-group-Dx_fy9WJ.js → toggle-group-Cf-ZSSDP.js} +2 -2
  168. prefect/server/ui-v2/assets/{toggle-group-Dx_fy9WJ.js.map → toggle-group-Cf-ZSSDP.js.map} +1 -1
  169. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-ClQsotEa.js → use-delete-automation-confirmation-dialog-DRX9Kvie.js} +2 -2
  170. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-ClQsotEa.js.map → use-delete-automation-confirmation-dialog-DRX9Kvie.js.map} +1 -1
  171. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DM0Dy1PL.js → use-delete-block-document-confirmation-dialog-CogrfdiO.js} +2 -2
  172. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DM0Dy1PL.js.map → use-delete-block-document-confirmation-dialog-CogrfdiO.js.map} +1 -1
  173. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-UhMaQqzZ.js → use-flow-runs-selected-rows-CdMKKvm5.js} +2 -2
  174. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-UhMaQqzZ.js.map → use-flow-runs-selected-rows-CdMKKvm5.js.map} +1 -1
  175. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-P8C-ARMZ.js → use-get-artifacts-flow-task-runs-Be1qg-IF.js} +2 -2
  176. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-P8C-ARMZ.js.map → use-get-artifacts-flow-task-runs-Be1qg-IF.js.map} +1 -1
  177. prefect/server/ui-v2/assets/{use-quick-run-DT0VEa9Z.js → use-quick-run-DXDfXpvs.js} +2 -2
  178. prefect/server/ui-v2/assets/{use-quick-run-DT0VEa9Z.js.map → use-quick-run-DXDfXpvs.js.map} +1 -1
  179. prefect/server/ui-v2/assets/{use-state-favicon-DfEAuEQL.js → use-state-favicon-Dhkg1tqx.js} +2 -2
  180. prefect/server/ui-v2/assets/{use-state-favicon-DfEAuEQL.js.map → use-state-favicon-Dhkg1tqx.js.map} +1 -1
  181. prefect/server/ui-v2/assets/{use-stepper-1OG0a_eo.js → use-stepper-jTTsXpho.js} +2 -2
  182. prefect/server/ui-v2/assets/{use-stepper-1OG0a_eo.js.map → use-stepper-jTTsXpho.js.map} +1 -1
  183. prefect/server/ui-v2/assets/{utilities-DabzLyXd.js → utilities-CgJi7g2F.js} +2 -2
  184. prefect/server/ui-v2/assets/{utilities-DabzLyXd.js.map → utilities-CgJi7g2F.js.map} +1 -1
  185. prefect/server/ui-v2/assets/{work-pool-filter-CTTGgdIN.js → work-pool-filter-DLkRAAHz.js} +2 -2
  186. prefect/server/ui-v2/assets/{work-pool-filter-CTTGgdIN.js.map → work-pool-filter-DLkRAAHz.js.map} +1 -1
  187. prefect/server/ui-v2/assets/{work-pool-queue-toggle-B9KQxNdY.js → work-pool-queue-toggle-BFodtXQe.js} +2 -2
  188. prefect/server/ui-v2/assets/{work-pool-queue-toggle-B9KQxNdY.js.map → work-pool-queue-toggle-BFodtXQe.js.map} +1 -1
  189. prefect/server/ui-v2/assets/{work-pool._workPoolName-CGqG95Pv.js → work-pool._workPoolName-Bjh_bO5G.js} +2 -2
  190. prefect/server/ui-v2/assets/{work-pool._workPoolName-CGqG95Pv.js.map → work-pool._workPoolName-Bjh_bO5G.js.map} +1 -1
  191. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CcFrethu.js → work-pool_._workPoolName.edit-B-gnp5dc.js} +2 -2
  192. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CcFrethu.js.map → work-pool_._workPoolName.edit-B-gnp5dc.js.map} +1 -1
  193. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-CwPnpSI9.js → work-pool_._workPoolName.queue._workQueueName-C7aVwLhH.js} +2 -2
  194. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-CwPnpSI9.js.map → work-pool_._workPoolName.queue._workQueueName-C7aVwLhH.js.map} +1 -1
  195. prefect/server/ui-v2/assets/{work-queue-icon-text-Bix0rRM1.js → work-queue-icon-text-BK_qfkJJ.js} +2 -2
  196. prefect/server/ui-v2/assets/{work-queue-icon-text-Bix0rRM1.js.map → work-queue-icon-text-BK_qfkJJ.js.map} +1 -1
  197. prefect/server/ui-v2/index.html +2 -2
  198. {prefect-3.6.14.dev6.dist-info → prefect-3.6.14.dev7.dist-info}/METADATA +1 -1
  199. {prefect-3.6.14.dev6.dist-info → prefect-3.6.14.dev7.dist-info}/RECORD +202 -202
  200. prefect/server/ui-v2/assets/block-type-logo-FrtMLMYr.js +0 -2
  201. prefect/server/ui-v2/assets/delete-confirmation-dialog-jlBI67Pk.js +0 -2
  202. prefect/server/ui-v2/assets/deployment_._id.duplicate-aUHtHuNO.js +0 -2
  203. prefect/server/ui-v2/assets/deployment_._id.edit-CPRKkA-W.js +0 -2
  204. prefect/server/ui-v2/assets/flow-run-graph-CIvkp1kl.js +0 -2
  205. prefect/server/ui-v2/assets/flow-run._id-BT3wztDF.js +0 -4
  206. prefect/server/ui-v2/assets/flow-run._id-BT3wztDF.js.map +0 -1
  207. prefect/server/ui-v2/assets/index-CYc_PWA3.css +0 -1
  208. prefect/server/ui-v2/assets/index-nxDkMXcY.js.map +0 -1
  209. {prefect-3.6.14.dev6.dist-info → prefect-3.6.14.dev7.dist-info}/WHEEL +0 -0
  210. {prefect-3.6.14.dev6.dist-info → prefect-3.6.14.dev7.dist-info}/entry_points.txt +0 -0
  211. {prefect-3.6.14.dev6.dist-info → prefect-3.6.14.dev7.dist-info}/licenses/LICENSE +0 -0
@@ -1,2 +1,2 @@
1
- import{j as e,F as N,r as p,C as Q,G as W,D as X,B as Y,L as he}from"./vendor-tanstack-BcZfOOfy.js";import{q as d,I as k,y as v,bf as Z,G as ee,O as se,E as ne,t as ae,v as re,w as te,x as ce,D as oe,B as _,g as V,h as E,bg as xe,_ as G,$ as M,a0 as F,a1 as I,p as C,a3 as O,bh as P,bi as je,a2 as ge,bj as ye,bk as pe,bl as be,aw as Ce,ax as ve,ay as $,az as U}from"./index-nxDkMXcY.js";import{D as ie}from"./data-table-B2NqBPUR.js";import{D as fe,a as we,b as Le,c as Se,d as T}from"./dropdown-menu-CT6uZu-V.js";import{F as le,a as u,b as x,c as j,d as g,e as y}from"./form-CxD6-5Qf.js";import{a as de}from"./zod-Cuos7J7w.js";import{c as ue,o as z,n as L,s as h,b as ke,f as S,e as De}from"./vendor-forms-ClCIacbh.js";import{T as Re,a as Te,b as Ae}from"./task-run-concurrency-limits-reset-dialog-CG2F0Ufy.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BAN776s_.js";import"./vendor-date-wwuDAncJ.js";import"./table-Bx2Ol4j-.js";const Ne=({onEditRow:s,onDeleteRow:n,...a})=>{const r=i=>{navigator.clipboard.writeText(i),v.success("ID copied")},t=a.row.original;return e.jsxs(fe,{children:[e.jsx(we,{asChild:!0,children:e.jsxs(d,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(k,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(Le,{align:"end",children:[e.jsx(Se,{children:"Actions"}),e.jsx(T,{onClick:()=>r(t.id),children:"Copy ID"}),e.jsx(T,{onClick:()=>n(t),children:"Delete"}),e.jsx(T,{onClick:()=>s(t),children:"Edit"})]})]})},_e=s=>{const{updateGlobalConcurrencyLimit:n}=Z(),a=(i,c)=>{n({id_or_name:c,active:i},{onSuccess:()=>{v.success("Concurrency limit updated")},onError:o=>{const l=o.message||"Unknown error while updating active field.";console.error(l)}})},r=s.getValue(),t=s.row.original.id;return e.jsx(ee,{"aria-label":"toggle active",checked:r,onCheckedChange:i=>a(i,t)})},B=N("/concurrency-limits/"),b=Y(),Ve=({onEditRow:s,onDeleteRow:n})=>[b.accessor("name",{header:"Name"}),b.accessor("limit",{header:"Limit"}),b.accessor("active_slots",{header:"Active Slots"}),b.accessor("slot_decay_per_second",{header:"Slots Decay Per Second"}),b.accessor("active",{header:"Active",cell:_e}),b.display({id:"actions",cell:a=>e.jsx("div",{className:"flex flex-row justify-end",children:e.jsx(Ne,{...a,onEditRow:s,onDeleteRow:n})})})],Ee=({data:s,onEditRow:n,onDeleteRow:a})=>{const r=B.useNavigate(),{search:t}=B.useSearch(),i=p.useDeferredValue(t??""),c=p.useMemo(()=>s.filter(o=>o.name.toLowerCase().includes(i.toLowerCase())),[s,i]);return e.jsx(Ge,{data:c,onDeleteRow:a,onEditRow:n,searchValue:t,onSearchChange:o=>{r({to:".",search:l=>({...l,search:o})})}})};function Ge({data:s,onDeleteRow:n,onEditRow:a,onSearchChange:r,searchValue:t}){const i=Q({data:s,columns:Ve({onDeleteRow:n,onEditRow:a}),getCoreRowModel:X(),getPaginationRowModel:W()});return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(se,{className:"max-w-72",placeholder:"Search global concurrency limit",value:t,onChange:c=>r(c.target.value)}),e.jsx(ie,{table:i})]})}const Me=({onAdd:s})=>e.jsxs(ne,{children:[e.jsx(ae,{id:"AlignVerticalJustifyStart"}),e.jsx(re,{children:"Add a concurrency limit"}),e.jsx(te,{children:"Global concurrency limits can be applied to flow runs, task runs and any operation where you want to control concurrency."}),e.jsxs(ce,{children:[e.jsxs(d,{onClick:s,children:["Add Concurrency Limit ",e.jsx(k,{id:"Plus",className:"size-4 ml-2"})]}),e.jsx(oe,{id:"global-concurrency-guide"})]})]}),Fe=({onAdd:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(_,{children:e.jsx(V,{children:e.jsx(E,{className:"text-xl font-semibold",children:"Global Concurrency Limits"})})}),e.jsx(d,{onClick:s,size:"icon",className:"size-7",variant:"outline","aria-label":"add global concurrency limit",children:e.jsx(k,{id:"Plus",className:"size-4"})})]}),Ie=z({active:ke().default(!0),denied_slots:L().default(0).or(h()).pipe(S.number()),limit:L().default(0).or(h()).pipe(S.number()),name:h().min(2,{message:"Name must be at least 2 characters"}).default(""),slot_decay_per_second:L().default(0).or(h()).pipe(S.number()),active_slots:L().default(0).or(h()).pipe(S.number())}),A={active:!0,name:"",limit:0,slot_decay_per_second:0,denied_slots:0,active_slots:0},Oe=({limitToUpdate:s,onSubmit:n})=>{const{createGlobalConcurrencyLimit:a,status:r}=xe(),{updateGlobalConcurrencyLimit:t,status:i}=Z(),c=ue({resolver:de(Ie),defaultValues:A});return p.useEffect(()=>{if(s){const{active:l,name:D,limit:f,slot_decay_per_second:w,active_slots:me}=s;c.reset({active:l,name:D,limit:f,slot_decay_per_second:w,active_slots:me})}else c.reset(A)},[c,s]),{form:c,saveOrUpdate:l=>{const D=()=>{c.reset(A),n()};s?.id?t({id_or_name:s.id,...l},{onSuccess:()=>{v.success("Limit updated")},onError:f=>{const w=f.message||"Unknown error while updating limit.";c.setError("root",{message:w})},onSettled:D}):a(l,{onSuccess:()=>{v.success("Limit created")},onError:f=>{const w=f.message||"Unknown error while creating variable.";c.setError("root",{message:w})},onSettled:D})},isLoading:r==="pending"||i==="pending"}},H=({limitToUpdate:s,onOpenChange:n,onSubmit:a})=>{const{form:r,isLoading:t,saveOrUpdate:i}=Oe({limitToUpdate:s,onSubmit:a}),c=s?`Update ${s.name}`:"Add Concurrency Limit";return e.jsx(G,{open:!0,onOpenChange:n,children:e.jsxs(M,{"aria-describedby":void 0,children:[e.jsx(F,{children:e.jsx(I,{children:c})}),e.jsx(le,{...r,children:e.jsxs("form",{onSubmit:o=>{r.handleSubmit(i)(o)},className:"space-y-4",children:[e.jsx(u,{children:r.formState.errors.root?.message}),e.jsx(x,{control:r.control,name:"name",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Name"}),e.jsx(y,{children:e.jsx(C,{type:"text",autoComplete:"off",...o})}),e.jsx(u,{})]})}),e.jsx(x,{control:r.control,name:"limit",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Concurrency Limit"}),e.jsx(y,{children:e.jsx(C,{type:"number",...o})}),e.jsx(u,{})]})}),e.jsx(x,{control:r.control,name:"slot_decay_per_second",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Slot Decay Per Second"}),e.jsx(y,{children:e.jsx(C,{type:"number",...o})}),e.jsx(u,{})]})}),s&&e.jsx(x,{control:r.control,name:"active_slots",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Active Slots"}),e.jsx(y,{children:e.jsx(C,{type:"number",...o})}),e.jsx(u,{})]})}),e.jsx(x,{control:r.control,name:"active",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Active"}),e.jsx(y,{children:e.jsx(ee,{className:"block",checked:o.value,onCheckedChange:o.onChange})}),e.jsx(u,{})]})}),e.jsxs(O,{children:[e.jsx(P,{asChild:!0,children:e.jsx(d,{variant:"outline",children:"Close"})}),e.jsx(d,{type:"submit",loading:t,children:s?"Update":"Save"})]})]})})]})})},Pe=({limit:s,onOpenChange:n,onDelete:a})=>{const{deleteGlobalConcurrencyLimit:r,isPending:t}=je(),i=c=>{r(c,{onSuccess:()=>{v.success("Concurrency limit deleted")},onError:o=>{const l=o.message||"Unknown error while deleting concurrency limit.";console.error(l)},onSettled:a})};return e.jsx(G,{open:!0,onOpenChange:n,children:e.jsxs(M,{children:[e.jsx(F,{children:e.jsx(I,{children:"Delete Concurrency Limit"})}),e.jsxs(ge,{children:["Are you sure you want to delete ",s.name]}),e.jsxs(O,{children:[e.jsx(P,{asChild:!0,children:e.jsx(d,{variant:"outline",children:"Close"})}),e.jsx(d,{variant:"destructive",onClick:()=>i(s.id),loading:t,children:"Delete"})]})]})})},ze=({openDialog:s,onCloseDialog:n,onOpenChange:a})=>{const{dialog:r,data:t}=s;switch(r){case"create":return e.jsx(H,{onOpenChange:a,onSubmit:n});case"delete":return e.jsx(Pe,{limit:t,onOpenChange:a,onDelete:n});case"edit":return e.jsx(H,{onOpenChange:a,limitToUpdate:t,onSubmit:n});default:return null}},$e=()=>{const[s,n]=p.useState({dialog:null,data:void 0}),{data:a}=ye(),r=()=>n({dialog:"create",data:void 0}),t=l=>n({dialog:"edit",data:l}),i=l=>n({dialog:"delete",data:l}),c=()=>n({dialog:null,data:void 0}),o=l=>{l||c()};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(Fe,{onAdd:r}),a.length===0?e.jsx(Me,{onAdd:r}):e.jsx(Ee,{data:a,onEditRow:t,onDeleteRow:i}),e.jsx(ze,{openDialog:s,onCloseDialog:c,onOpenChange:o})]})},Ue=s=>{const a=s.getValue().length;return a===0?"None":a},Be=s=>{const n=s.getValue(),a=s.row.original.id;return e.jsx(he,{params:{id:a},to:"/concurrency-limits/concurrency-limit/$id",children:n})},q=N("/concurrency-limits/"),R=Y(),He=({onDeleteRow:s,onResetRow:n})=>[R.accessor("tag",{header:"Tag",cell:Be}),R.accessor("concurrency_limit",{header:"Slots"}),R.accessor("active_slots",{header:"Active Task Runs",cell:Ue}),R.display({id:"actions",cell:a=>{const r=a.row.original;return e.jsx("div",{className:"flex flex-row justify-end",children:e.jsx(Re,{id:r.id,onDelete:()=>s(r),onReset:()=>n(r)})})}})],qe=({data:s,onDeleteRow:n,onResetRow:a})=>{const r=q.useNavigate(),{search:t}=q.useSearch(),i=p.useDeferredValue(t??""),c=p.useMemo(()=>s.filter(o=>o.tag.toLowerCase().includes(i.toLowerCase())),[s,i]);return e.jsx(Je,{data:c,onDeleteRow:n,onResetRow:a,searchValue:t,onSearchChange:o=>{r({to:".",search:l=>({...l,search:o})})}})};function Je({data:s,onDeleteRow:n,onResetRow:a,onSearchChange:r,searchValue:t}){const i=Q({data:s,columns:He({onDeleteRow:n,onResetRow:a}),getCoreRowModel:X(),getPaginationRowModel:W()});return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(se,{className:"max-w-72",placeholder:"Search active task limit",value:t,onChange:c=>r(c.target.value)}),e.jsx(ie,{table:i})]})}const Ke=({onAdd:s})=>e.jsxs(ne,{children:[e.jsx(ae,{id:"CircleArrowOutUpRight"}),e.jsx(re,{children:"Add a concurrency limit for your task runs"}),e.jsx(te,{children:"Creating a limit allows you to limit the number of tasks running simultaneously with a given tag."}),e.jsxs(ce,{children:[e.jsxs(d,{onClick:s,children:["Add Concurrency Limit ",e.jsx(k,{id:"Plus",className:"size-4 ml-2"})]}),e.jsx(oe,{id:"task-concurrency-guide"})]})]}),Qe=({onAdd:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(_,{children:e.jsx(V,{children:e.jsx(E,{className:"text-xl font-semibold",children:"Task Run Concurrency Limits"})})}),e.jsx(d,{onClick:s,size:"icon",className:"size-7",variant:"outline","aria-label":"add task run concurrency limit",children:e.jsx(k,{id:"Plus",className:"size-4"})})]}),We=z({tag:h().min(1),concurrency_limit:L().default(0).or(h()).pipe(S.number())}),J={tag:"",concurrency_limit:0},Xe=({onOpenChange:s,onSubmit:n})=>{const{createTaskRunConcurrencyLimit:a,isPending:r}=pe(),t=ue({resolver:de(We),defaultValues:J}),i=c=>{a(c,{onSuccess:()=>{v.success("Concurrency limit added")},onError:o=>{const l=o.message||"Unknown error while updating limit.";t.setError("root",{message:l})},onSettled:()=>{t.reset(J),n()}})};return e.jsx(G,{open:!0,onOpenChange:s,children:e.jsxs(M,{"aria-describedby":void 0,children:[e.jsx(F,{children:e.jsx(I,{children:"Add Task Run Concurrency Limit"})}),e.jsx(le,{...t,children:e.jsxs("form",{onSubmit:c=>{t.handleSubmit(i)(c)},className:"space-y-4",children:[e.jsx(u,{children:t.formState.errors.root?.message}),e.jsx(x,{control:t.control,name:"tag",render:({field:c})=>e.jsxs(j,{children:[e.jsx(g,{children:"Tag"}),e.jsx(y,{children:e.jsx(C,{type:"text",autoComplete:"off",...c})}),e.jsx(u,{})]})}),e.jsx(x,{control:t.control,name:"concurrency_limit",render:({field:c})=>e.jsxs(j,{children:[e.jsx(g,{children:"Concurrency Limit"}),e.jsx(y,{children:e.jsx(C,{type:"number",...c})}),e.jsx(u,{})]})}),e.jsxs(O,{children:[e.jsx(P,{asChild:!0,children:e.jsx(d,{variant:"outline",children:"Close"})}),e.jsx(d,{type:"submit",loading:r,children:"Add"})]})]})})]})})},Ye=({openDialog:s,onCloseDialog:n,onOpenChange:a})=>{const{dialog:r,data:t}=s;switch(r){case"create":return e.jsx(Xe,{onOpenChange:a,onSubmit:n});case"reset":return e.jsx(Ae,{data:t,onOpenChange:a,onReset:n});case"delete":return e.jsx(Te,{data:t,onOpenChange:a,onDelete:n});default:return null}},Ze=()=>{const[s,n]=p.useState({dialog:null,data:void 0}),{data:a}=be(),r=()=>n({dialog:"create",data:void 0}),t=l=>n({dialog:"delete",data:l}),i=l=>n({dialog:"reset",data:l}),c=()=>n({dialog:null,data:void 0}),o=l=>{l||c()};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(Qe,{onAdd:r}),a.length===0?e.jsx(Ke,{onAdd:r}):e.jsx(qe,{data:a,onDeleteRow:t,onResetRow:i}),e.jsx(Ye,{openDialog:s,onCloseDialog:c,onOpenChange:o})]})},K=N("/concurrency-limits/"),m={global:{tabSearchValue:"global",displayValue:"Global"},"task-run":{tabSearchValue:"task-run",displayValue:"Task Run"}},es=({globalView:s,taskRunView:n})=>{const{tab:a}=K.useSearch(),r=K.useNavigate();return e.jsxs(Ce,{defaultValue:"Global",value:a,children:[e.jsxs(ve,{children:[e.jsx($,{value:m.global.tabSearchValue,onClick:()=>{r({to:"/concurrency-limits",search:{tab:m.global.tabSearchValue}})},children:m.global.displayValue}),e.jsx($,{value:m["task-run"].tabSearchValue,onClick:()=>{r({to:"/concurrency-limits",search:{tab:m["task-run"].tabSearchValue}})},children:m["task-run"].displayValue})]}),e.jsx(U,{value:m.global.tabSearchValue,children:s}),e.jsx(U,{value:m["task-run"].tabSearchValue,children:n})]})},ss=()=>e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(ns,{}),e.jsx(es,{globalView:e.jsx($e,{}),taskRunView:e.jsx(Ze,{})})]}),ns=()=>e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(_,{children:e.jsx(V,{children:e.jsx(E,{className:"text-xl font-semibold",children:"Concurrency"})})})});z({search:h().optional(),tab:De(["global","task-run"]).default("global")});const gs=ss;export{gs as component};
2
- //# sourceMappingURL=index-C2ayqOiQ.js.map
1
+ import{j as e,F as N,r as p,C as Q,G as W,D as X,B as Y,L as he}from"./vendor-tanstack-BcZfOOfy.js";import{q as d,I as k,y as v,bf as Z,G as ee,O as se,E as ne,t as ae,v as re,w as te,x as ce,D as oe,B as _,g as V,h as E,bg as xe,_ as G,$ as M,a0 as F,a1 as I,p as C,a3 as O,bh as P,bi as je,a2 as ge,bj as ye,bk as pe,bl as be,aw as Ce,ax as ve,ay as $,az as U}from"./index-_0OOjqn5.js";import{D as ie}from"./data-table-DHlbTUL7.js";import{D as fe,a as we,b as Le,c as Se,d as T}from"./dropdown-menu-DF4QR3Cp.js";import{F as le,a as u,b as x,c as j,d as g,e as y}from"./form-DHWphysD.js";import{a as de}from"./zod-Cuos7J7w.js";import{c as ue,o as z,n as L,s as h,b as ke,f as S,e as De}from"./vendor-forms-ClCIacbh.js";import{T as Re,a as Te,b as Ae}from"./task-run-concurrency-limits-reset-dialog-CLZz3kwW.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BAN776s_.js";import"./vendor-date-wwuDAncJ.js";import"./table-4GUC4YOD.js";const Ne=({onEditRow:s,onDeleteRow:n,...a})=>{const r=i=>{navigator.clipboard.writeText(i),v.success("ID copied")},t=a.row.original;return e.jsxs(fe,{children:[e.jsx(we,{asChild:!0,children:e.jsxs(d,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(k,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(Le,{align:"end",children:[e.jsx(Se,{children:"Actions"}),e.jsx(T,{onClick:()=>r(t.id),children:"Copy ID"}),e.jsx(T,{onClick:()=>n(t),children:"Delete"}),e.jsx(T,{onClick:()=>s(t),children:"Edit"})]})]})},_e=s=>{const{updateGlobalConcurrencyLimit:n}=Z(),a=(i,c)=>{n({id_or_name:c,active:i},{onSuccess:()=>{v.success("Concurrency limit updated")},onError:o=>{const l=o.message||"Unknown error while updating active field.";console.error(l)}})},r=s.getValue(),t=s.row.original.id;return e.jsx(ee,{"aria-label":"toggle active",checked:r,onCheckedChange:i=>a(i,t)})},B=N("/concurrency-limits/"),b=Y(),Ve=({onEditRow:s,onDeleteRow:n})=>[b.accessor("name",{header:"Name"}),b.accessor("limit",{header:"Limit"}),b.accessor("active_slots",{header:"Active Slots"}),b.accessor("slot_decay_per_second",{header:"Slots Decay Per Second"}),b.accessor("active",{header:"Active",cell:_e}),b.display({id:"actions",cell:a=>e.jsx("div",{className:"flex flex-row justify-end",children:e.jsx(Ne,{...a,onEditRow:s,onDeleteRow:n})})})],Ee=({data:s,onEditRow:n,onDeleteRow:a})=>{const r=B.useNavigate(),{search:t}=B.useSearch(),i=p.useDeferredValue(t??""),c=p.useMemo(()=>s.filter(o=>o.name.toLowerCase().includes(i.toLowerCase())),[s,i]);return e.jsx(Ge,{data:c,onDeleteRow:a,onEditRow:n,searchValue:t,onSearchChange:o=>{r({to:".",search:l=>({...l,search:o})})}})};function Ge({data:s,onDeleteRow:n,onEditRow:a,onSearchChange:r,searchValue:t}){const i=Q({data:s,columns:Ve({onDeleteRow:n,onEditRow:a}),getCoreRowModel:X(),getPaginationRowModel:W()});return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(se,{className:"max-w-72",placeholder:"Search global concurrency limit",value:t,onChange:c=>r(c.target.value)}),e.jsx(ie,{table:i})]})}const Me=({onAdd:s})=>e.jsxs(ne,{children:[e.jsx(ae,{id:"AlignVerticalJustifyStart"}),e.jsx(re,{children:"Add a concurrency limit"}),e.jsx(te,{children:"Global concurrency limits can be applied to flow runs, task runs and any operation where you want to control concurrency."}),e.jsxs(ce,{children:[e.jsxs(d,{onClick:s,children:["Add Concurrency Limit ",e.jsx(k,{id:"Plus",className:"size-4 ml-2"})]}),e.jsx(oe,{id:"global-concurrency-guide"})]})]}),Fe=({onAdd:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(_,{children:e.jsx(V,{children:e.jsx(E,{className:"text-xl font-semibold",children:"Global Concurrency Limits"})})}),e.jsx(d,{onClick:s,size:"icon",className:"size-7",variant:"outline","aria-label":"add global concurrency limit",children:e.jsx(k,{id:"Plus",className:"size-4"})})]}),Ie=z({active:ke().default(!0),denied_slots:L().default(0).or(h()).pipe(S.number()),limit:L().default(0).or(h()).pipe(S.number()),name:h().min(2,{message:"Name must be at least 2 characters"}).default(""),slot_decay_per_second:L().default(0).or(h()).pipe(S.number()),active_slots:L().default(0).or(h()).pipe(S.number())}),A={active:!0,name:"",limit:0,slot_decay_per_second:0,denied_slots:0,active_slots:0},Oe=({limitToUpdate:s,onSubmit:n})=>{const{createGlobalConcurrencyLimit:a,status:r}=xe(),{updateGlobalConcurrencyLimit:t,status:i}=Z(),c=ue({resolver:de(Ie),defaultValues:A});return p.useEffect(()=>{if(s){const{active:l,name:D,limit:f,slot_decay_per_second:w,active_slots:me}=s;c.reset({active:l,name:D,limit:f,slot_decay_per_second:w,active_slots:me})}else c.reset(A)},[c,s]),{form:c,saveOrUpdate:l=>{const D=()=>{c.reset(A),n()};s?.id?t({id_or_name:s.id,...l},{onSuccess:()=>{v.success("Limit updated")},onError:f=>{const w=f.message||"Unknown error while updating limit.";c.setError("root",{message:w})},onSettled:D}):a(l,{onSuccess:()=>{v.success("Limit created")},onError:f=>{const w=f.message||"Unknown error while creating variable.";c.setError("root",{message:w})},onSettled:D})},isLoading:r==="pending"||i==="pending"}},H=({limitToUpdate:s,onOpenChange:n,onSubmit:a})=>{const{form:r,isLoading:t,saveOrUpdate:i}=Oe({limitToUpdate:s,onSubmit:a}),c=s?`Update ${s.name}`:"Add Concurrency Limit";return e.jsx(G,{open:!0,onOpenChange:n,children:e.jsxs(M,{"aria-describedby":void 0,children:[e.jsx(F,{children:e.jsx(I,{children:c})}),e.jsx(le,{...r,children:e.jsxs("form",{onSubmit:o=>{r.handleSubmit(i)(o)},className:"space-y-4",children:[e.jsx(u,{children:r.formState.errors.root?.message}),e.jsx(x,{control:r.control,name:"name",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Name"}),e.jsx(y,{children:e.jsx(C,{type:"text",autoComplete:"off",...o})}),e.jsx(u,{})]})}),e.jsx(x,{control:r.control,name:"limit",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Concurrency Limit"}),e.jsx(y,{children:e.jsx(C,{type:"number",...o})}),e.jsx(u,{})]})}),e.jsx(x,{control:r.control,name:"slot_decay_per_second",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Slot Decay Per Second"}),e.jsx(y,{children:e.jsx(C,{type:"number",...o})}),e.jsx(u,{})]})}),s&&e.jsx(x,{control:r.control,name:"active_slots",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Active Slots"}),e.jsx(y,{children:e.jsx(C,{type:"number",...o})}),e.jsx(u,{})]})}),e.jsx(x,{control:r.control,name:"active",render:({field:o})=>e.jsxs(j,{children:[e.jsx(g,{children:"Active"}),e.jsx(y,{children:e.jsx(ee,{className:"block",checked:o.value,onCheckedChange:o.onChange})}),e.jsx(u,{})]})}),e.jsxs(O,{children:[e.jsx(P,{asChild:!0,children:e.jsx(d,{variant:"outline",children:"Close"})}),e.jsx(d,{type:"submit",loading:t,children:s?"Update":"Save"})]})]})})]})})},Pe=({limit:s,onOpenChange:n,onDelete:a})=>{const{deleteGlobalConcurrencyLimit:r,isPending:t}=je(),i=c=>{r(c,{onSuccess:()=>{v.success("Concurrency limit deleted")},onError:o=>{const l=o.message||"Unknown error while deleting concurrency limit.";console.error(l)},onSettled:a})};return e.jsx(G,{open:!0,onOpenChange:n,children:e.jsxs(M,{children:[e.jsx(F,{children:e.jsx(I,{children:"Delete Concurrency Limit"})}),e.jsxs(ge,{children:["Are you sure you want to delete ",s.name]}),e.jsxs(O,{children:[e.jsx(P,{asChild:!0,children:e.jsx(d,{variant:"outline",children:"Close"})}),e.jsx(d,{variant:"destructive",onClick:()=>i(s.id),loading:t,children:"Delete"})]})]})})},ze=({openDialog:s,onCloseDialog:n,onOpenChange:a})=>{const{dialog:r,data:t}=s;switch(r){case"create":return e.jsx(H,{onOpenChange:a,onSubmit:n});case"delete":return e.jsx(Pe,{limit:t,onOpenChange:a,onDelete:n});case"edit":return e.jsx(H,{onOpenChange:a,limitToUpdate:t,onSubmit:n});default:return null}},$e=()=>{const[s,n]=p.useState({dialog:null,data:void 0}),{data:a}=ye(),r=()=>n({dialog:"create",data:void 0}),t=l=>n({dialog:"edit",data:l}),i=l=>n({dialog:"delete",data:l}),c=()=>n({dialog:null,data:void 0}),o=l=>{l||c()};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(Fe,{onAdd:r}),a.length===0?e.jsx(Me,{onAdd:r}):e.jsx(Ee,{data:a,onEditRow:t,onDeleteRow:i}),e.jsx(ze,{openDialog:s,onCloseDialog:c,onOpenChange:o})]})},Ue=s=>{const a=s.getValue().length;return a===0?"None":a},Be=s=>{const n=s.getValue(),a=s.row.original.id;return e.jsx(he,{params:{id:a},to:"/concurrency-limits/concurrency-limit/$id",children:n})},q=N("/concurrency-limits/"),R=Y(),He=({onDeleteRow:s,onResetRow:n})=>[R.accessor("tag",{header:"Tag",cell:Be}),R.accessor("concurrency_limit",{header:"Slots"}),R.accessor("active_slots",{header:"Active Task Runs",cell:Ue}),R.display({id:"actions",cell:a=>{const r=a.row.original;return e.jsx("div",{className:"flex flex-row justify-end",children:e.jsx(Re,{id:r.id,onDelete:()=>s(r),onReset:()=>n(r)})})}})],qe=({data:s,onDeleteRow:n,onResetRow:a})=>{const r=q.useNavigate(),{search:t}=q.useSearch(),i=p.useDeferredValue(t??""),c=p.useMemo(()=>s.filter(o=>o.tag.toLowerCase().includes(i.toLowerCase())),[s,i]);return e.jsx(Je,{data:c,onDeleteRow:n,onResetRow:a,searchValue:t,onSearchChange:o=>{r({to:".",search:l=>({...l,search:o})})}})};function Je({data:s,onDeleteRow:n,onResetRow:a,onSearchChange:r,searchValue:t}){const i=Q({data:s,columns:He({onDeleteRow:n,onResetRow:a}),getCoreRowModel:X(),getPaginationRowModel:W()});return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(se,{className:"max-w-72",placeholder:"Search active task limit",value:t,onChange:c=>r(c.target.value)}),e.jsx(ie,{table:i})]})}const Ke=({onAdd:s})=>e.jsxs(ne,{children:[e.jsx(ae,{id:"CircleArrowOutUpRight"}),e.jsx(re,{children:"Add a concurrency limit for your task runs"}),e.jsx(te,{children:"Creating a limit allows you to limit the number of tasks running simultaneously with a given tag."}),e.jsxs(ce,{children:[e.jsxs(d,{onClick:s,children:["Add Concurrency Limit ",e.jsx(k,{id:"Plus",className:"size-4 ml-2"})]}),e.jsx(oe,{id:"task-concurrency-guide"})]})]}),Qe=({onAdd:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(_,{children:e.jsx(V,{children:e.jsx(E,{className:"text-xl font-semibold",children:"Task Run Concurrency Limits"})})}),e.jsx(d,{onClick:s,size:"icon",className:"size-7",variant:"outline","aria-label":"add task run concurrency limit",children:e.jsx(k,{id:"Plus",className:"size-4"})})]}),We=z({tag:h().min(1),concurrency_limit:L().default(0).or(h()).pipe(S.number())}),J={tag:"",concurrency_limit:0},Xe=({onOpenChange:s,onSubmit:n})=>{const{createTaskRunConcurrencyLimit:a,isPending:r}=pe(),t=ue({resolver:de(We),defaultValues:J}),i=c=>{a(c,{onSuccess:()=>{v.success("Concurrency limit added")},onError:o=>{const l=o.message||"Unknown error while updating limit.";t.setError("root",{message:l})},onSettled:()=>{t.reset(J),n()}})};return e.jsx(G,{open:!0,onOpenChange:s,children:e.jsxs(M,{"aria-describedby":void 0,children:[e.jsx(F,{children:e.jsx(I,{children:"Add Task Run Concurrency Limit"})}),e.jsx(le,{...t,children:e.jsxs("form",{onSubmit:c=>{t.handleSubmit(i)(c)},className:"space-y-4",children:[e.jsx(u,{children:t.formState.errors.root?.message}),e.jsx(x,{control:t.control,name:"tag",render:({field:c})=>e.jsxs(j,{children:[e.jsx(g,{children:"Tag"}),e.jsx(y,{children:e.jsx(C,{type:"text",autoComplete:"off",...c})}),e.jsx(u,{})]})}),e.jsx(x,{control:t.control,name:"concurrency_limit",render:({field:c})=>e.jsxs(j,{children:[e.jsx(g,{children:"Concurrency Limit"}),e.jsx(y,{children:e.jsx(C,{type:"number",...c})}),e.jsx(u,{})]})}),e.jsxs(O,{children:[e.jsx(P,{asChild:!0,children:e.jsx(d,{variant:"outline",children:"Close"})}),e.jsx(d,{type:"submit",loading:r,children:"Add"})]})]})})]})})},Ye=({openDialog:s,onCloseDialog:n,onOpenChange:a})=>{const{dialog:r,data:t}=s;switch(r){case"create":return e.jsx(Xe,{onOpenChange:a,onSubmit:n});case"reset":return e.jsx(Ae,{data:t,onOpenChange:a,onReset:n});case"delete":return e.jsx(Te,{data:t,onOpenChange:a,onDelete:n});default:return null}},Ze=()=>{const[s,n]=p.useState({dialog:null,data:void 0}),{data:a}=be(),r=()=>n({dialog:"create",data:void 0}),t=l=>n({dialog:"delete",data:l}),i=l=>n({dialog:"reset",data:l}),c=()=>n({dialog:null,data:void 0}),o=l=>{l||c()};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(Qe,{onAdd:r}),a.length===0?e.jsx(Ke,{onAdd:r}):e.jsx(qe,{data:a,onDeleteRow:t,onResetRow:i}),e.jsx(Ye,{openDialog:s,onCloseDialog:c,onOpenChange:o})]})},K=N("/concurrency-limits/"),m={global:{tabSearchValue:"global",displayValue:"Global"},"task-run":{tabSearchValue:"task-run",displayValue:"Task Run"}},es=({globalView:s,taskRunView:n})=>{const{tab:a}=K.useSearch(),r=K.useNavigate();return e.jsxs(Ce,{defaultValue:"Global",value:a,children:[e.jsxs(ve,{children:[e.jsx($,{value:m.global.tabSearchValue,onClick:()=>{r({to:"/concurrency-limits",search:{tab:m.global.tabSearchValue}})},children:m.global.displayValue}),e.jsx($,{value:m["task-run"].tabSearchValue,onClick:()=>{r({to:"/concurrency-limits",search:{tab:m["task-run"].tabSearchValue}})},children:m["task-run"].displayValue})]}),e.jsx(U,{value:m.global.tabSearchValue,children:s}),e.jsx(U,{value:m["task-run"].tabSearchValue,children:n})]})},ss=()=>e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(ns,{}),e.jsx(es,{globalView:e.jsx($e,{}),taskRunView:e.jsx(Ze,{})})]}),ns=()=>e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(_,{children:e.jsx(V,{children:e.jsx(E,{className:"text-xl font-semibold",children:"Concurrency"})})})});z({search:h().optional(),tab:De(["global","task-run"]).default("global")});const gs=ss;export{gs as component};
2
+ //# sourceMappingURL=index-Dl_iSX0z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-C2ayqOiQ.js","sources":["../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table/actions-cell.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table/active-cell.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table/global-concurrency-limits-data-table.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-empty-state/global-concurrency-limits-empty-state.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-header/global-concurrency-limits-header.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-create-or-edit-dialog/use-create-or-edit-global-concurrency-limit-form.ts","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-create-or-edit-dialog/global-concurrency-limits-create-or-edit-dialog.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-delete-dialog/global-concurrency-limits-delete-dialog.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-view/global-conccurency-limits-dialog.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-view/index.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table/active-task-runs-cell.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table/tag-cell.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table/task-run-concurrency-limits-data-table.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-empty-state/task-run-concurrency-limits-empty-state.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-header/task-run-concurrency-limits-header.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-create-dialog/task-run-concurrency-limits-create-dialog.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-view/task-run-concurrency-limit-dialog.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-view/index.tsx","../../src/components/concurrency/concurrency-limits-tabs.tsx","../../src/components/concurrency/concurrency-limits-page.tsx","../../src/routes/concurrency-limits/index.tsx?tsr-split=component"],"sourcesContent":["import type { CellContext } from \"@tanstack/react-table\";\nimport { toast } from \"sonner\";\nimport type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype ActionsCellProps = CellContext<GlobalConcurrencyLimit, unknown> & {\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n};\n\nexport const ActionsCell = ({\n\tonEditRow,\n\tonDeleteRow,\n\t...props\n}: ActionsCellProps) => {\n\tconst handleCopyId = (id: string) => {\n\t\tvoid navigator.clipboard.writeText(id);\n\t\ttoast.success(\"ID copied\");\n\t};\n\n\tconst row = props.row.original;\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button variant=\"outline\" className=\"size-8 p-0\">\n\t\t\t\t\t<span className=\"sr-only\">Open menu</span>\n\t\t\t\t\t<Icon id=\"MoreVertical\" className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t<DropdownMenuLabel>Actions</DropdownMenuLabel>\n\t\t\t\t<DropdownMenuItem onClick={() => handleCopyId(row.id)}>\n\t\t\t\t\tCopy ID\n\t\t\t\t</DropdownMenuItem>\n\t\t\t\t<DropdownMenuItem onClick={() => onDeleteRow(row)}>\n\t\t\t\t\tDelete\n\t\t\t\t</DropdownMenuItem>\n\t\t\t\t<DropdownMenuItem onClick={() => onEditRow(row)}>Edit</DropdownMenuItem>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n};\n","import type { CellContext } from \"@tanstack/react-table\";\nimport { toast } from \"sonner\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseUpdateGlobalConcurrencyLimit,\n} from \"@/api/global-concurrency-limits\";\nimport { Switch } from \"@/components/ui/switch\";\n\nexport const ActiveCell = (\n\tprops: CellContext<GlobalConcurrencyLimit, boolean>,\n) => {\n\tconst { updateGlobalConcurrencyLimit } = useUpdateGlobalConcurrencyLimit();\n\n\tconst handleCheckedChange = (checked: boolean, id: string) => {\n\t\tupdateGlobalConcurrencyLimit(\n\t\t\t{\n\t\t\t\tid_or_name: id,\n\t\t\t\tactive: checked,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Concurrency limit updated\");\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while updating active field.\";\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\tconst rowActive = props.getValue();\n\tconst rowId = props.row.original.id;\n\n\treturn (\n\t\t<Switch\n\t\t\taria-label=\"toggle active\"\n\t\t\tchecked={rowActive}\n\t\t\tonCheckedChange={(checked) => handleCheckedChange(checked, rowId)}\n\t\t/>\n\t);\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tgetPaginationRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useDeferredValue, useMemo } from \"react\";\nimport type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport { ActionsCell } from \"./actions-cell\";\nimport { ActiveCell } from \"./active-cell\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/\");\n\nconst columnHelper = createColumnHelper<GlobalConcurrencyLimit>();\n\nconst createColumns = ({\n\tonEditRow,\n\tonDeleteRow,\n}: {\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n}) => [\n\tcolumnHelper.accessor(\"name\", {\n\t\theader: \"Name\",\n\t}),\n\tcolumnHelper.accessor(\"limit\", {\n\t\theader: \"Limit\",\n\t}),\n\tcolumnHelper.accessor(\"active_slots\", {\n\t\theader: \"Active Slots\",\n\t}),\n\tcolumnHelper.accessor(\"slot_decay_per_second\", {\n\t\theader: \"Slots Decay Per Second\",\n\t}),\n\tcolumnHelper.accessor(\"active\", {\n\t\theader: \"Active\",\n\t\tcell: ActiveCell,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => (\n\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t<ActionsCell\n\t\t\t\t\t{...props}\n\t\t\t\t\tonEditRow={onEditRow}\n\t\t\t\t\tonDeleteRow={onDeleteRow}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t),\n\t}),\n];\n\ntype GlobalConcurrencyLimitsDataTableProps = {\n\tdata: Array<GlobalConcurrencyLimit>;\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n};\n\nexport const GlobalConcurrencyLimitsDataTable = ({\n\tdata,\n\tonEditRow,\n\tonDeleteRow,\n}: GlobalConcurrencyLimitsDataTableProps) => {\n\tconst navigate = routeApi.useNavigate();\n\tconst { search } = routeApi.useSearch();\n\tconst deferredSearch = useDeferredValue(search ?? \"\");\n\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((row) =>\n\t\t\trow.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\treturn (\n\t\t<Table\n\t\t\tdata={filteredData}\n\t\t\tonDeleteRow={onDeleteRow}\n\t\t\tonEditRow={onEditRow}\n\t\t\tsearchValue={search}\n\t\t\tonSearchChange={(value) =>\n\t\t\t\tvoid navigate({\n\t\t\t\t\tto: \".\",\n\t\t\t\t\tsearch: (prev) => ({ ...prev, search: value }),\n\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n};\n\ntype TableProps = {\n\tdata: Array<GlobalConcurrencyLimit>;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonSearchChange: (value: string) => void;\n\tsearchValue: string | undefined;\n};\n\nexport function Table({\n\tdata,\n\tonDeleteRow,\n\tonEditRow,\n\tonSearchChange,\n\tsearchValue,\n}: TableProps) {\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: createColumns({ onDeleteRow, onEditRow }),\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(), //load client-side pagination code\n\t});\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<SearchInput\n\t\t\t\tclassName=\"max-w-72\"\n\t\t\t\tplaceholder=\"Search global concurrency limit\"\n\t\t\t\tvalue={searchValue}\n\t\t\t\tonChange={(e) => onSearchChange(e.target.value)}\n\t\t\t/>\n\t\t\t<DataTable table={table} />\n\t\t</div>\n\t);\n}\n","import { Button } from \"@/components/ui/button\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype GlobalConcurrencyLimitsEmptyStateProps = {\n\tonAdd: () => void;\n};\nexport const GlobalConcurrencyLimitsEmptyState = ({\n\tonAdd,\n}: GlobalConcurrencyLimitsEmptyStateProps) => (\n\t<EmptyState>\n\t\t<EmptyStateIcon id=\"AlignVerticalJustifyStart\" />\n\t\t<EmptyStateTitle>Add a concurrency limit</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tGlobal concurrency limits can be applied to flow runs, task runs and any\n\t\t\toperation where you want to control concurrency.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<Button onClick={onAdd}>\n\t\t\t\tAdd Concurrency Limit <Icon id=\"Plus\" className=\"size-4 ml-2\" />\n\t\t\t</Button>\n\t\t\t<DocsLink id=\"global-concurrency-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype GlobalConcurrencyLimitsHeaderProps = {\n\tonAdd: () => void;\n};\n\nexport const GlobalConcurrencyLimitsHeader = ({\n\tonAdd,\n}: GlobalConcurrencyLimitsHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\tGlobal Concurrency Limits\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<Button\n\t\t\t\tonClick={onAdd}\n\t\t\t\tsize=\"icon\"\n\t\t\t\tclassName=\"size-7\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\taria-label=\"add global concurrency limit\"\n\t\t\t>\n\t\t\t\t<Icon id=\"Plus\" className=\"size-4\" />\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseCreateGlobalConcurrencyLimit,\n\tuseUpdateGlobalConcurrencyLimit,\n} from \"@/api/global-concurrency-limits\";\n\nconst formSchema = z.object({\n\tactive: z.boolean().default(true),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tdenied_slots: z.number().default(0).or(z.string()).pipe(z.coerce.number()),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tlimit: z.number().default(0).or(z.string()).pipe(z.coerce.number()),\n\tname: z\n\t\t.string()\n\t\t.min(2, { message: \"Name must be at least 2 characters\" })\n\t\t.default(\"\"),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tslot_decay_per_second: z\n\t\t.number()\n\t\t.default(0)\n\t\t.or(z.string())\n\t\t.pipe(z.coerce.number()),\n\t/** Additional fields post creation. Coerce to solve common issue of transforming a string number to a number type */\n\tactive_slots: z.number().default(0).or(z.string()).pipe(z.coerce.number()),\n});\n\nconst DEFAULT_VALUES = {\n\tactive: true,\n\tname: \"\",\n\tlimit: 0,\n\tslot_decay_per_second: 0,\n\tdenied_slots: 0,\n\tactive_slots: 0,\n} as const;\n\ntype UseCreateOrEditGlobalConcurrencyLimitFormOptions = {\n\t/** Limit to edit. Pass undefined if creating a new limit */\n\tlimitToUpdate: GlobalConcurrencyLimit | undefined;\n\t/** Callback after hitting Save or Update */\n\tonSubmit: () => void;\n};\n\nexport const useCreateOrEditGlobalConcurrencyLimitForm = ({\n\tlimitToUpdate,\n\tonSubmit,\n}: UseCreateOrEditGlobalConcurrencyLimitFormOptions) => {\n\tconst { createGlobalConcurrencyLimit, status: createStatus } =\n\t\tuseCreateGlobalConcurrencyLimit();\n\tconst { updateGlobalConcurrencyLimit, status: updateStatus } =\n\t\tuseUpdateGlobalConcurrencyLimit();\n\n\tconst form = useForm({\n\t\tresolver: zodResolver(formSchema),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\n\t// Sync form data with limit-to-edit data\n\tuseEffect(() => {\n\t\tif (limitToUpdate) {\n\t\t\tconst { active, name, limit, slot_decay_per_second, active_slots } =\n\t\t\t\tlimitToUpdate;\n\t\t\tform.reset({ active, name, limit, slot_decay_per_second, active_slots });\n\t\t} else {\n\t\t\tform.reset(DEFAULT_VALUES);\n\t\t}\n\t}, [form, limitToUpdate]);\n\n\tconst saveOrUpdate = (values: z.infer<typeof formSchema>) => {\n\t\tconst onSettled = () => {\n\t\t\tform.reset(DEFAULT_VALUES);\n\t\t\tonSubmit();\n\t\t};\n\n\t\tif (limitToUpdate?.id) {\n\t\t\tupdateGlobalConcurrencyLimit(\n\t\t\t\t{\n\t\t\t\t\tid_or_name: limitToUpdate.id,\n\t\t\t\t\t...values,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\ttoast.success(\"Limit updated\");\n\t\t\t\t\t},\n\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\terror.message || \"Unknown error while updating limit.\";\n\t\t\t\t\t\tform.setError(\"root\", { message });\n\t\t\t\t\t},\n\t\t\t\t\tonSettled,\n\t\t\t\t},\n\t\t\t);\n\t\t} else {\n\t\t\tcreateGlobalConcurrencyLimit(values, {\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Limit created\");\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while creating variable.\";\n\t\t\t\t\tform.setError(\"root\", {\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonSettled,\n\t\t\t});\n\t\t}\n\t};\n\n\treturn {\n\t\tform,\n\t\tsaveOrUpdate,\n\t\tisLoading: createStatus === \"pending\" || updateStatus === \"pending\",\n\t};\n};\n","import type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Switch } from \"@/components/ui/switch\";\n\nimport { useCreateOrEditGlobalConcurrencyLimitForm } from \"./use-create-or-edit-global-concurrency-limit-form\";\n\ntype GlobalConcurrencyLimitsCreateOrEditDialogProps = {\n\tlimitToUpdate?: GlobalConcurrencyLimit;\n\tonOpenChange: (open: boolean) => void;\n\tonSubmit: () => void;\n};\n\nexport const GlobalConcurrencyLimitsCreateOrEditDialog = ({\n\tlimitToUpdate,\n\tonOpenChange,\n\tonSubmit,\n}: GlobalConcurrencyLimitsCreateOrEditDialogProps) => {\n\tconst { form, isLoading, saveOrUpdate } =\n\t\tuseCreateOrEditGlobalConcurrencyLimitForm({\n\t\t\tlimitToUpdate,\n\t\t\tonSubmit,\n\t\t});\n\n\tconst dialogTitle = limitToUpdate\n\t\t? `Update ${limitToUpdate.name}`\n\t\t: \"Add Concurrency Limit\";\n\n\treturn (\n\t\t<Dialog open onOpenChange={onOpenChange}>\n\t\t\t<DialogContent aria-describedby={undefined}>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>{dialogTitle}</DialogTitle>\n\t\t\t\t</DialogHeader>\n\n\t\t\t\t<Form {...form}>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={(e) => void form.handleSubmit(saveOrUpdate)(e)}\n\t\t\t\t\t\tclassName=\"space-y-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormMessage>{form.formState.errors.root?.message}</FormMessage>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"text\" autoComplete=\"off\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"limit\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Concurrency Limit</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"slot_decay_per_second\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Slot Decay Per Second</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{limitToUpdate && (\n\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\t\tname=\"active_slots\"\n\t\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t\t<FormLabel>Active Slots</FormLabel>\n\t\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"active\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Active</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t\t\t\t\t\tchecked={field.value}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={field.onChange}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<DialogFooter>\n\t\t\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t\t\t<Button type=\"submit\" loading={isLoading}>\n\t\t\t\t\t\t\t\t{limitToUpdate ? \"Update\" : \"Save\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</DialogFooter>\n\t\t\t\t\t</form>\n\t\t\t\t</Form>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n};\n","import { toast } from \"sonner\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseDeleteGlobalConcurrencyLimit,\n} from \"@/api/global-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\n\ntype GlobalConcurrencyLimitsDeleteDialogProps = {\n\tlimit: GlobalConcurrencyLimit;\n\tonOpenChange: (open: boolean) => void;\n\tonDelete: () => void;\n};\n\nexport const GlobalConcurrencyLimitsDeleteDialog = ({\n\tlimit,\n\tonOpenChange,\n\tonDelete,\n}: GlobalConcurrencyLimitsDeleteDialogProps) => {\n\tconst { deleteGlobalConcurrencyLimit, isPending } =\n\t\tuseDeleteGlobalConcurrencyLimit();\n\n\tconst handleOnClick = (id: string) => {\n\t\tdeleteGlobalConcurrencyLimit(id, {\n\t\t\tonSuccess: () => {\n\t\t\t\ttoast.success(\"Concurrency limit deleted\");\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconst message =\n\t\t\t\t\terror.message || \"Unknown error while deleting concurrency limit.\";\n\t\t\t\tconsole.error(message);\n\t\t\t},\n\t\t\tonSettled: onDelete,\n\t\t});\n\t};\n\n\treturn (\n\t\t<Dialog open onOpenChange={onOpenChange}>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Delete Concurrency Limit</DialogTitle>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<DialogDescription>\n\t\t\t\t\tAre you sure you want to delete {limit.name}\n\t\t\t\t</DialogDescription>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={() => handleOnClick(limit.id)}\n\t\t\t\t\t\tloading={isPending}\n\t\t\t\t\t>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</Button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n};\n","import type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\n\nimport { GlobalConcurrencyLimitsCreateOrEditDialog } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-create-or-edit-dialog\";\nimport { GlobalConcurrencyLimitsDeleteDialog } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-delete-dialog\";\n\nexport type DialogState =\n\t| { dialog: null | \"create\"; data: undefined }\n\t| {\n\t\t\tdialog: \"delete\" | \"edit\";\n\t\t\tdata: GlobalConcurrencyLimit;\n\t };\n\nexport const GlobalConcurrencyLimitsDialog = ({\n\topenDialog,\n\tonCloseDialog,\n\tonOpenChange,\n}: {\n\topenDialog: DialogState;\n\tonOpenChange: (open: boolean) => void;\n\tonCloseDialog: () => void;\n}) => {\n\tconst { dialog, data } = openDialog;\n\tswitch (dialog) {\n\t\tcase \"create\":\n\t\t\treturn (\n\t\t\t\t<GlobalConcurrencyLimitsCreateOrEditDialog\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonSubmit={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"delete\":\n\t\t\treturn (\n\t\t\t\t<GlobalConcurrencyLimitsDeleteDialog\n\t\t\t\t\tlimit={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonDelete={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"edit\":\n\t\t\treturn (\n\t\t\t\t<GlobalConcurrencyLimitsCreateOrEditDialog\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tlimitToUpdate={data}\n\t\t\t\t\tonSubmit={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { useState } from \"react\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseListGlobalConcurrencyLimits,\n} from \"@/api/global-concurrency-limits\";\n\nimport { GlobalConcurrencyLimitsDataTable } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table\";\nimport { GlobalConcurrencyLimitsEmptyState } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-empty-state\";\nimport { GlobalConcurrencyLimitsHeader } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-header\";\n\nimport {\n\ttype DialogState,\n\tGlobalConcurrencyLimitsDialog,\n} from \"./global-conccurency-limits-dialog\";\n\nexport const GlobalConcurrencyLimitsView = () => {\n\tconst [openDialog, setOpenDialog] = useState<DialogState>({\n\t\tdialog: null,\n\t\tdata: undefined,\n\t});\n\n\tconst { data } = useListGlobalConcurrencyLimits();\n\n\tconst handleAddRow = () =>\n\t\tsetOpenDialog({ dialog: \"create\", data: undefined });\n\n\tconst handleEditRow = (data: GlobalConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"edit\", data });\n\n\tconst handleDeleteRow = (data: GlobalConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"delete\", data });\n\n\tconst handleCloseDialog = () =>\n\t\tsetOpenDialog({ dialog: null, data: undefined });\n\n\t// Because all modals will be rendered, only control the closing logic\n\tconst handleOpenChange = (open: boolean) => {\n\t\tif (!open) {\n\t\t\thandleCloseDialog();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<GlobalConcurrencyLimitsHeader onAdd={handleAddRow} />\n\t\t\t{data.length === 0 ? (\n\t\t\t\t<GlobalConcurrencyLimitsEmptyState onAdd={handleAddRow} />\n\t\t\t) : (\n\t\t\t\t<GlobalConcurrencyLimitsDataTable\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonEditRow={handleEditRow}\n\t\t\t\t\tonDeleteRow={handleDeleteRow}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<GlobalConcurrencyLimitsDialog\n\t\t\t\topenDialog={openDialog}\n\t\t\t\tonCloseDialog={handleCloseDialog}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import type { CellContext } from \"@tanstack/react-table\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\n\ntype ActiveTaskRunCellsProps = CellContext<\n\tTaskRunConcurrencyLimit,\n\tArray<string>\n>;\n\nexport const ActiveTaskRunCells = (props: ActiveTaskRunCellsProps) => {\n\tconst activeTaskRuns = props.getValue();\n\tconst numActiveTaskRuns = activeTaskRuns.length;\n\tif (numActiveTaskRuns === 0) {\n\t\treturn \"None\";\n\t}\n\treturn numActiveTaskRuns;\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\n\ntype TagCellProps = CellContext<TaskRunConcurrencyLimit, string>;\n\nexport const TagCell = (props: TagCellProps) => {\n\tconst tag = props.getValue();\n\tconst id = props.row.original.id;\n\treturn (\n\t\t<Link params={{ id }} to={\"/concurrency-limits/concurrency-limit/$id\"}>\n\t\t\t{tag}\n\t\t</Link>\n\t);\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tgetPaginationRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useDeferredValue, useMemo } from \"react\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsActionsMenu } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-actions-menu\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { SearchInput } from \"@/components/ui/input\";\n\nimport { ActiveTaskRunCells } from \"./active-task-runs-cell\";\nimport { TagCell } from \"./tag-cell\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/\");\nconst columnHelper = createColumnHelper<TaskRunConcurrencyLimit>();\n\nconst createColumns = ({\n\tonDeleteRow,\n\tonResetRow,\n}: {\n\tonDeleteRow: (row: TaskRunConcurrencyLimit) => void;\n\tonResetRow: (row: TaskRunConcurrencyLimit) => void;\n}) => [\n\tcolumnHelper.accessor(\"tag\", {\n\t\theader: \"Tag\",\n\t\tcell: TagCell,\n\t}),\n\tcolumnHelper.accessor(\"concurrency_limit\", {\n\t\theader: \"Slots\",\n\t}),\n\tcolumnHelper.accessor(\"active_slots\", {\n\t\theader: \"Active Task Runs\",\n\t\tcell: ActiveTaskRunCells,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => {\n\t\t\tconst row = props.row.original;\n\t\t\treturn (\n\t\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t\t<TaskRunConcurrencyLimitsActionsMenu\n\t\t\t\t\t\tid={row.id}\n\t\t\t\t\t\tonDelete={() => onDeleteRow(row)}\n\t\t\t\t\t\tonReset={() => onResetRow(row)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t}),\n];\n\ntype TaskRunConcurrencyLimitsDataTableProps = {\n\tdata: Array<TaskRunConcurrencyLimit>;\n\tonDeleteRow: (row: TaskRunConcurrencyLimit) => void;\n\tonResetRow: (row: TaskRunConcurrencyLimit) => void;\n};\n\nexport const TaskRunConcurrencyLimitsDataTable = ({\n\tdata,\n\tonDeleteRow,\n\tonResetRow,\n}: TaskRunConcurrencyLimitsDataTableProps) => {\n\tconst navigate = routeApi.useNavigate();\n\tconst { search } = routeApi.useSearch();\n\tconst deferredSearch = useDeferredValue(search ?? \"\");\n\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((row) =>\n\t\t\trow.tag.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\treturn (\n\t\t<Table\n\t\t\tdata={filteredData}\n\t\t\tonDeleteRow={onDeleteRow}\n\t\t\tonResetRow={onResetRow}\n\t\t\tsearchValue={search}\n\t\t\tonSearchChange={(value) =>\n\t\t\t\tvoid navigate({\n\t\t\t\t\tto: \".\",\n\t\t\t\t\tsearch: (prev) => ({ ...prev, search: value }),\n\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n};\n\ntype TableProps = {\n\tdata: Array<TaskRunConcurrencyLimit>;\n\tonDeleteRow: (row: TaskRunConcurrencyLimit) => void;\n\tonResetRow: (row: TaskRunConcurrencyLimit) => void;\n\tonSearchChange: (value: string) => void;\n\tsearchValue: string | undefined;\n};\n\nexport function Table({\n\tdata,\n\tonDeleteRow,\n\tonResetRow,\n\tonSearchChange,\n\tsearchValue,\n}: TableProps) {\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: createColumns({ onDeleteRow, onResetRow }),\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(), //load client-side pagination code\n\t});\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<SearchInput\n\t\t\t\tclassName=\"max-w-72\"\n\t\t\t\tplaceholder=\"Search active task limit\"\n\t\t\t\tvalue={searchValue}\n\t\t\t\tonChange={(e) => onSearchChange(e.target.value)}\n\t\t\t/>\n\t\t\t<DataTable table={table} />\n\t\t</div>\n\t);\n}\n","import { Button } from \"@/components/ui/button\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype TaskRunConcurrencyLimitsEmptyStateProps = {\n\tonAdd: () => void;\n};\nexport const TaskRunConcurrencyLimitsEmptyState = ({\n\tonAdd,\n}: TaskRunConcurrencyLimitsEmptyStateProps) => (\n\t<EmptyState>\n\t\t<EmptyStateIcon id=\"CircleArrowOutUpRight\" />\n\t\t<EmptyStateTitle>\n\t\t\tAdd a concurrency limit for your task runs\n\t\t</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tCreating a limit allows you to limit the number of tasks running\n\t\t\tsimultaneously with a given tag.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<Button onClick={onAdd}>\n\t\t\t\tAdd Concurrency Limit <Icon id=\"Plus\" className=\"size-4 ml-2\" />\n\t\t\t</Button>\n\t\t\t<DocsLink id=\"task-concurrency-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype TaskRunConcurrencyLimitsHeaderProps = {\n\tonAdd: () => void;\n};\n\nexport const TaskRunConcurrencyLimitsHeader = ({\n\tonAdd,\n}: TaskRunConcurrencyLimitsHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\tTask Run Concurrency Limits\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<Button\n\t\t\t\tonClick={onAdd}\n\t\t\t\tsize=\"icon\"\n\t\t\t\tclassName=\"size-7\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\taria-label=\"add task run concurrency limit\"\n\t\t\t>\n\t\t\t\t<Icon id=\"Plus\" className=\"size-4\" />\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { useCreateTaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\n\nconst formSchema = z.object({\n\ttag: z.string().min(1),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tconcurrency_limit: z\n\t\t.number()\n\t\t.default(0)\n\t\t.or(z.string())\n\t\t.pipe(z.coerce.number()),\n});\n\nconst DEFAULT_VALUES = {\n\ttag: \"\",\n\tconcurrency_limit: 0,\n} as const;\n\ntype TaskRunConcurrencyLimitsCreateDialogProps = {\n\tonOpenChange: (open: boolean) => void;\n\tonSubmit: () => void;\n};\n\nexport const TaskRunConcurrencyLimitsCreateDialog = ({\n\tonOpenChange,\n\tonSubmit,\n}: TaskRunConcurrencyLimitsCreateDialogProps) => {\n\tconst { createTaskRunConcurrencyLimit, isPending } =\n\t\tuseCreateTaskRunConcurrencyLimit();\n\n\tconst form = useForm({\n\t\tresolver: zodResolver(formSchema),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\n\tconst handleAddLimit = (values: z.infer<typeof formSchema>) => {\n\t\tcreateTaskRunConcurrencyLimit(values, {\n\t\t\tonSuccess: () => {\n\t\t\t\ttoast.success(\"Concurrency limit added\");\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconst message = error.message || \"Unknown error while updating limit.\";\n\t\t\t\tform.setError(\"root\", { message });\n\t\t\t},\n\t\t\tonSettled: () => {\n\t\t\t\tform.reset(DEFAULT_VALUES);\n\t\t\t\tonSubmit();\n\t\t\t},\n\t\t});\n\t};\n\n\treturn (\n\t\t<Dialog open onOpenChange={onOpenChange}>\n\t\t\t<DialogContent aria-describedby={undefined}>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Add Task Run Concurrency Limit</DialogTitle>\n\t\t\t\t</DialogHeader>\n\n\t\t\t\t<Form {...form}>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={(e) => void form.handleSubmit(handleAddLimit)(e)}\n\t\t\t\t\t\tclassName=\"space-y-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormMessage>{form.formState.errors.root?.message}</FormMessage>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"tag\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Tag</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"text\" autoComplete=\"off\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"concurrency_limit\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Concurrency Limit</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<DialogFooter>\n\t\t\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t\t\t<Button type=\"submit\" loading={isPending}>\n\t\t\t\t\t\t\t\tAdd\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</DialogFooter>\n\t\t\t\t\t</form>\n\t\t\t\t</Form>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n};\n","import type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsCreateDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-create-dialog\";\nimport { TaskRunConcurrencyLimitsDeleteDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-delete-dialog\";\nimport { TaskRunConcurrencyLimitsResetDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-reset-dialog\";\n\nexport type DialogState =\n\t| { dialog: null | \"create\"; data: undefined }\n\t| {\n\t\t\tdialog: \"reset\" | \"delete\";\n\t\t\tdata: TaskRunConcurrencyLimit;\n\t };\n\nexport const TaskRunConcurrencyLimitDialog = ({\n\topenDialog,\n\tonCloseDialog,\n\tonOpenChange,\n}: {\n\topenDialog: DialogState;\n\tonOpenChange: (open: boolean) => void;\n\tonCloseDialog: () => void;\n}) => {\n\tconst { dialog, data } = openDialog;\n\tswitch (dialog) {\n\t\tcase \"create\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsCreateDialog\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonSubmit={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"reset\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsResetDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonReset={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"delete\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsDeleteDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonDelete={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { useState } from \"react\";\nimport {\n\ttype TaskRunConcurrencyLimit,\n\tuseListTaskRunConcurrencyLimits,\n} from \"@/api/task-run-concurrency-limits\";\n\nimport { TaskRunConcurrencyLimitsDataTable } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table\";\nimport { TaskRunConcurrencyLimitsEmptyState } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-empty-state\";\nimport { TaskRunConcurrencyLimitsHeader } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-header\";\nimport {\n\ttype DialogState,\n\tTaskRunConcurrencyLimitDialog,\n} from \"./task-run-concurrency-limit-dialog\";\n\nexport const TaskRunConcurrencyLimitsView = () => {\n\tconst [openDialog, setOpenDialog] = useState<DialogState>({\n\t\tdialog: null,\n\t\tdata: undefined,\n\t});\n\n\tconst { data } = useListTaskRunConcurrencyLimits();\n\n\tconst handleAddRow = () =>\n\t\tsetOpenDialog({ dialog: \"create\", data: undefined });\n\n\tconst handleDeleteRow = (data: TaskRunConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"delete\", data });\n\n\tconst handleResetRow = (data: TaskRunConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"reset\", data });\n\n\tconst handleCloseDialog = () =>\n\t\tsetOpenDialog({ dialog: null, data: undefined });\n\n\t// Because all modals will be rendered, only control the closing logic\n\tconst handleOpenChange = (open: boolean) => {\n\t\tif (!open) {\n\t\t\thandleCloseDialog();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<TaskRunConcurrencyLimitsHeader onAdd={handleAddRow} />\n\t\t\t{data.length === 0 ? (\n\t\t\t\t<TaskRunConcurrencyLimitsEmptyState onAdd={handleAddRow} />\n\t\t\t) : (\n\t\t\t\t<TaskRunConcurrencyLimitsDataTable\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonDeleteRow={handleDeleteRow}\n\t\t\t\t\tonResetRow={handleResetRow}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<TaskRunConcurrencyLimitDialog\n\t\t\t\topenDialog={openDialog}\n\t\t\t\tonCloseDialog={handleCloseDialog}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport type { JSX } from \"react\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport type { TabOptions } from \"@/routes/concurrency-limits\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/\");\n\ntype TabOptionValues = {\n\t/** Value of search value in url */\n\ttabSearchValue: TabOptions;\n\t/** Display value for the UI */\n\tdisplayValue: string;\n};\n\n/** Maps url tab option to visual name */\nconst TAB_OPTIONS: Record<TabOptions, TabOptionValues> = {\n\tglobal: {\n\t\ttabSearchValue: \"global\",\n\t\tdisplayValue: \"Global\",\n\t},\n\t\"task-run\": {\n\t\ttabSearchValue: \"task-run\",\n\t\tdisplayValue: \"Task Run\",\n\t},\n} as const;\n\ntype ConcurrencyLimitsTabsProps = {\n\tglobalView: React.ReactNode;\n\ttaskRunView: React.ReactNode;\n};\n\n// TODO: Move Tabs for navigation to a generic styled component\n\nexport const ConcurrencyLimitsTabs = ({\n\tglobalView,\n\ttaskRunView,\n}: ConcurrencyLimitsTabsProps): JSX.Element => {\n\tconst { tab } = routeApi.useSearch();\n\tconst navigate = routeApi.useNavigate();\n\n\treturn (\n\t\t<Tabs defaultValue=\"Global\" value={tab}>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger\n\t\t\t\t\tvalue={TAB_OPTIONS.global.tabSearchValue}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/concurrency-limits\",\n\t\t\t\t\t\t\tsearch: {\n\t\t\t\t\t\t\t\ttab: TAB_OPTIONS.global.tabSearchValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{TAB_OPTIONS.global.displayValue}\n\t\t\t\t</TabsTrigger>\n\t\t\t\t<TabsTrigger\n\t\t\t\t\tvalue={TAB_OPTIONS[\"task-run\"].tabSearchValue}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/concurrency-limits\",\n\t\t\t\t\t\t\tsearch: {\n\t\t\t\t\t\t\t\ttab: TAB_OPTIONS[\"task-run\"].tabSearchValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{TAB_OPTIONS[\"task-run\"].displayValue}\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value={TAB_OPTIONS.global.tabSearchValue}>\n\t\t\t\t{globalView}\n\t\t\t</TabsContent>\n\t\t\t<TabsContent value={TAB_OPTIONS[\"task-run\"].tabSearchValue}>\n\t\t\t\t{taskRunView}\n\t\t\t</TabsContent>\n\t\t</Tabs>\n\t);\n};\n","import { GlobalConcurrencyLimitsView } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-view\";\nimport { TaskRunConcurrencyLimitsView } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-view\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\n\nimport { ConcurrencyLimitsTabs } from \"./concurrency-limits-tabs\";\n\nexport const ConcurrencyLimitsPage = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<ConcurrencyLimitTitle />\n\t\t\t<ConcurrencyLimitsTabs\n\t\t\t\tglobalView={<GlobalConcurrencyLimitsView />}\n\t\t\t\ttaskRunView={<TaskRunConcurrencyLimitsView />}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst ConcurrencyLimitTitle = () => (\n\t<div className=\"flex items-center gap-2\">\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\tConcurrency\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t</div>\n);\n","import { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListGlobalConcurrencyLimitsQuery } from \"@/api/global-concurrency-limits\";\nimport { buildListTaskRunConcurrencyLimitsQuery } from \"@/api/task-run-concurrency-limits\";\nimport { ConcurrencyLimitsPage } from \"@/components/concurrency/concurrency-limits-page\";\n\n/**\n * Schema for validating URL search parameters for the Concurrency Limits page.\n * @property {string} search used to filter data table\n * @property {'global' | 'task-run'} tab used designate which tab view to display\n */\nconst searchParams = z.object({\n\tsearch: z.string().optional(),\n\ttab: z.enum([\"global\", \"task-run\"]).default(\"global\"),\n});\n\nexport type TabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\"/concurrency-limits/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: ConcurrencyLimitsPage,\n\twrapInSuspense: true,\n\tloader: ({ context }) =>\n\t\tPromise.all([\n\t\t\tcontext.queryClient.ensureQueryData(\n\t\t\t\tbuildListGlobalConcurrencyLimitsQuery(),\n\t\t\t),\n\t\t\tcontext.queryClient.ensureQueryData(\n\t\t\t\tbuildListTaskRunConcurrencyLimitsQuery(),\n\t\t\t),\n\t\t]),\n});\n"],"names":["ActionsCell","onEditRow","onDeleteRow","props","handleCopyId","id","toast","row","DropdownMenu","jsx","DropdownMenuTrigger","jsxs","Button","Icon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuItem","ActiveCell","updateGlobalConcurrencyLimit","useUpdateGlobalConcurrencyLimit","handleCheckedChange","checked","error","message","rowActive","rowId","Switch","routeApi","getRouteApi","columnHelper","createColumnHelper","createColumns","GlobalConcurrencyLimitsDataTable","data","navigate","search","deferredSearch","useDeferredValue","filteredData","useMemo","Table","value","prev","onSearchChange","searchValue","table","useReactTable","getCoreRowModel","getPaginationRowModel","SearchInput","e","DataTable","GlobalConcurrencyLimitsEmptyState","onAdd","EmptyState","EmptyStateIcon","EmptyStateTitle","EmptyStateDescription","EmptyStateActions","DocsLink","GlobalConcurrencyLimitsHeader","Breadcrumb","BreadcrumbList","BreadcrumbItem","formSchema","z.object","z.boolean","z.number","z.string","z.coerce","DEFAULT_VALUES","useCreateOrEditGlobalConcurrencyLimitForm","limitToUpdate","onSubmit","createGlobalConcurrencyLimit","createStatus","useCreateGlobalConcurrencyLimit","updateStatus","form","useForm","zodResolver","useEffect","active","name","limit","slot_decay_per_second","active_slots","values","onSettled","GlobalConcurrencyLimitsCreateOrEditDialog","onOpenChange","isLoading","saveOrUpdate","dialogTitle","Dialog","DialogContent","DialogHeader","DialogTitle","Form","FormMessage","FormField","field","FormItem","FormLabel","FormControl","Input","DialogFooter","DialogTrigger","GlobalConcurrencyLimitsDeleteDialog","onDelete","deleteGlobalConcurrencyLimit","isPending","useDeleteGlobalConcurrencyLimit","handleOnClick","DialogDescription","GlobalConcurrencyLimitsDialog","openDialog","onCloseDialog","dialog","GlobalConcurrencyLimitsView","setOpenDialog","useState","useListGlobalConcurrencyLimits","handleAddRow","handleEditRow","handleDeleteRow","handleCloseDialog","handleOpenChange","open","ActiveTaskRunCells","numActiveTaskRuns","TagCell","tag","Link","onResetRow","TaskRunConcurrencyLimitsActionsMenu","TaskRunConcurrencyLimitsDataTable","TaskRunConcurrencyLimitsEmptyState","TaskRunConcurrencyLimitsHeader","TaskRunConcurrencyLimitsCreateDialog","createTaskRunConcurrencyLimit","useCreateTaskRunConcurrencyLimit","handleAddLimit","TaskRunConcurrencyLimitDialog","TaskRunConcurrencyLimitsResetDialog","TaskRunConcurrencyLimitsDeleteDialog","TaskRunConcurrencyLimitsView","useListTaskRunConcurrencyLimits","handleResetRow","TAB_OPTIONS","ConcurrencyLimitsTabs","globalView","taskRunView","tab","Tabs","TabsList","TabsTrigger","TabsContent","ConcurrencyLimitsPage","ConcurrencyLimitTitle","z","string","optional","default","SplitComponent"],"mappings":"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"}
1
+ {"version":3,"file":"index-Dl_iSX0z.js","sources":["../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table/actions-cell.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table/active-cell.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table/global-concurrency-limits-data-table.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-empty-state/global-concurrency-limits-empty-state.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-header/global-concurrency-limits-header.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-create-or-edit-dialog/use-create-or-edit-global-concurrency-limit-form.ts","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-create-or-edit-dialog/global-concurrency-limits-create-or-edit-dialog.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-delete-dialog/global-concurrency-limits-delete-dialog.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-view/global-conccurency-limits-dialog.tsx","../../src/components/concurrency/global-concurrency-limits/global-concurrency-limits-view/index.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table/active-task-runs-cell.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table/tag-cell.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table/task-run-concurrency-limits-data-table.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-empty-state/task-run-concurrency-limits-empty-state.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-header/task-run-concurrency-limits-header.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-create-dialog/task-run-concurrency-limits-create-dialog.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-view/task-run-concurrency-limit-dialog.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-view/index.tsx","../../src/components/concurrency/concurrency-limits-tabs.tsx","../../src/components/concurrency/concurrency-limits-page.tsx","../../src/routes/concurrency-limits/index.tsx?tsr-split=component"],"sourcesContent":["import type { CellContext } from \"@tanstack/react-table\";\nimport { toast } from \"sonner\";\nimport type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype ActionsCellProps = CellContext<GlobalConcurrencyLimit, unknown> & {\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n};\n\nexport const ActionsCell = ({\n\tonEditRow,\n\tonDeleteRow,\n\t...props\n}: ActionsCellProps) => {\n\tconst handleCopyId = (id: string) => {\n\t\tvoid navigator.clipboard.writeText(id);\n\t\ttoast.success(\"ID copied\");\n\t};\n\n\tconst row = props.row.original;\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button variant=\"outline\" className=\"size-8 p-0\">\n\t\t\t\t\t<span className=\"sr-only\">Open menu</span>\n\t\t\t\t\t<Icon id=\"MoreVertical\" className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t<DropdownMenuLabel>Actions</DropdownMenuLabel>\n\t\t\t\t<DropdownMenuItem onClick={() => handleCopyId(row.id)}>\n\t\t\t\t\tCopy ID\n\t\t\t\t</DropdownMenuItem>\n\t\t\t\t<DropdownMenuItem onClick={() => onDeleteRow(row)}>\n\t\t\t\t\tDelete\n\t\t\t\t</DropdownMenuItem>\n\t\t\t\t<DropdownMenuItem onClick={() => onEditRow(row)}>Edit</DropdownMenuItem>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n};\n","import type { CellContext } from \"@tanstack/react-table\";\nimport { toast } from \"sonner\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseUpdateGlobalConcurrencyLimit,\n} from \"@/api/global-concurrency-limits\";\nimport { Switch } from \"@/components/ui/switch\";\n\nexport const ActiveCell = (\n\tprops: CellContext<GlobalConcurrencyLimit, boolean>,\n) => {\n\tconst { updateGlobalConcurrencyLimit } = useUpdateGlobalConcurrencyLimit();\n\n\tconst handleCheckedChange = (checked: boolean, id: string) => {\n\t\tupdateGlobalConcurrencyLimit(\n\t\t\t{\n\t\t\t\tid_or_name: id,\n\t\t\t\tactive: checked,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Concurrency limit updated\");\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while updating active field.\";\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\tconst rowActive = props.getValue();\n\tconst rowId = props.row.original.id;\n\n\treturn (\n\t\t<Switch\n\t\t\taria-label=\"toggle active\"\n\t\t\tchecked={rowActive}\n\t\t\tonCheckedChange={(checked) => handleCheckedChange(checked, rowId)}\n\t\t/>\n\t);\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tgetPaginationRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useDeferredValue, useMemo } from \"react\";\nimport type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport { ActionsCell } from \"./actions-cell\";\nimport { ActiveCell } from \"./active-cell\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/\");\n\nconst columnHelper = createColumnHelper<GlobalConcurrencyLimit>();\n\nconst createColumns = ({\n\tonEditRow,\n\tonDeleteRow,\n}: {\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n}) => [\n\tcolumnHelper.accessor(\"name\", {\n\t\theader: \"Name\",\n\t}),\n\tcolumnHelper.accessor(\"limit\", {\n\t\theader: \"Limit\",\n\t}),\n\tcolumnHelper.accessor(\"active_slots\", {\n\t\theader: \"Active Slots\",\n\t}),\n\tcolumnHelper.accessor(\"slot_decay_per_second\", {\n\t\theader: \"Slots Decay Per Second\",\n\t}),\n\tcolumnHelper.accessor(\"active\", {\n\t\theader: \"Active\",\n\t\tcell: ActiveCell,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => (\n\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t<ActionsCell\n\t\t\t\t\t{...props}\n\t\t\t\t\tonEditRow={onEditRow}\n\t\t\t\t\tonDeleteRow={onDeleteRow}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t),\n\t}),\n];\n\ntype GlobalConcurrencyLimitsDataTableProps = {\n\tdata: Array<GlobalConcurrencyLimit>;\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n};\n\nexport const GlobalConcurrencyLimitsDataTable = ({\n\tdata,\n\tonEditRow,\n\tonDeleteRow,\n}: GlobalConcurrencyLimitsDataTableProps) => {\n\tconst navigate = routeApi.useNavigate();\n\tconst { search } = routeApi.useSearch();\n\tconst deferredSearch = useDeferredValue(search ?? \"\");\n\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((row) =>\n\t\t\trow.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\treturn (\n\t\t<Table\n\t\t\tdata={filteredData}\n\t\t\tonDeleteRow={onDeleteRow}\n\t\t\tonEditRow={onEditRow}\n\t\t\tsearchValue={search}\n\t\t\tonSearchChange={(value) =>\n\t\t\t\tvoid navigate({\n\t\t\t\t\tto: \".\",\n\t\t\t\t\tsearch: (prev) => ({ ...prev, search: value }),\n\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n};\n\ntype TableProps = {\n\tdata: Array<GlobalConcurrencyLimit>;\n\tonDeleteRow: (row: GlobalConcurrencyLimit) => void;\n\tonEditRow: (row: GlobalConcurrencyLimit) => void;\n\tonSearchChange: (value: string) => void;\n\tsearchValue: string | undefined;\n};\n\nexport function Table({\n\tdata,\n\tonDeleteRow,\n\tonEditRow,\n\tonSearchChange,\n\tsearchValue,\n}: TableProps) {\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: createColumns({ onDeleteRow, onEditRow }),\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(), //load client-side pagination code\n\t});\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<SearchInput\n\t\t\t\tclassName=\"max-w-72\"\n\t\t\t\tplaceholder=\"Search global concurrency limit\"\n\t\t\t\tvalue={searchValue}\n\t\t\t\tonChange={(e) => onSearchChange(e.target.value)}\n\t\t\t/>\n\t\t\t<DataTable table={table} />\n\t\t</div>\n\t);\n}\n","import { Button } from \"@/components/ui/button\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype GlobalConcurrencyLimitsEmptyStateProps = {\n\tonAdd: () => void;\n};\nexport const GlobalConcurrencyLimitsEmptyState = ({\n\tonAdd,\n}: GlobalConcurrencyLimitsEmptyStateProps) => (\n\t<EmptyState>\n\t\t<EmptyStateIcon id=\"AlignVerticalJustifyStart\" />\n\t\t<EmptyStateTitle>Add a concurrency limit</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tGlobal concurrency limits can be applied to flow runs, task runs and any\n\t\t\toperation where you want to control concurrency.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<Button onClick={onAdd}>\n\t\t\t\tAdd Concurrency Limit <Icon id=\"Plus\" className=\"size-4 ml-2\" />\n\t\t\t</Button>\n\t\t\t<DocsLink id=\"global-concurrency-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype GlobalConcurrencyLimitsHeaderProps = {\n\tonAdd: () => void;\n};\n\nexport const GlobalConcurrencyLimitsHeader = ({\n\tonAdd,\n}: GlobalConcurrencyLimitsHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\tGlobal Concurrency Limits\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<Button\n\t\t\t\tonClick={onAdd}\n\t\t\t\tsize=\"icon\"\n\t\t\t\tclassName=\"size-7\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\taria-label=\"add global concurrency limit\"\n\t\t\t>\n\t\t\t\t<Icon id=\"Plus\" className=\"size-4\" />\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseCreateGlobalConcurrencyLimit,\n\tuseUpdateGlobalConcurrencyLimit,\n} from \"@/api/global-concurrency-limits\";\n\nconst formSchema = z.object({\n\tactive: z.boolean().default(true),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tdenied_slots: z.number().default(0).or(z.string()).pipe(z.coerce.number()),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tlimit: z.number().default(0).or(z.string()).pipe(z.coerce.number()),\n\tname: z\n\t\t.string()\n\t\t.min(2, { message: \"Name must be at least 2 characters\" })\n\t\t.default(\"\"),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tslot_decay_per_second: z\n\t\t.number()\n\t\t.default(0)\n\t\t.or(z.string())\n\t\t.pipe(z.coerce.number()),\n\t/** Additional fields post creation. Coerce to solve common issue of transforming a string number to a number type */\n\tactive_slots: z.number().default(0).or(z.string()).pipe(z.coerce.number()),\n});\n\nconst DEFAULT_VALUES = {\n\tactive: true,\n\tname: \"\",\n\tlimit: 0,\n\tslot_decay_per_second: 0,\n\tdenied_slots: 0,\n\tactive_slots: 0,\n} as const;\n\ntype UseCreateOrEditGlobalConcurrencyLimitFormOptions = {\n\t/** Limit to edit. Pass undefined if creating a new limit */\n\tlimitToUpdate: GlobalConcurrencyLimit | undefined;\n\t/** Callback after hitting Save or Update */\n\tonSubmit: () => void;\n};\n\nexport const useCreateOrEditGlobalConcurrencyLimitForm = ({\n\tlimitToUpdate,\n\tonSubmit,\n}: UseCreateOrEditGlobalConcurrencyLimitFormOptions) => {\n\tconst { createGlobalConcurrencyLimit, status: createStatus } =\n\t\tuseCreateGlobalConcurrencyLimit();\n\tconst { updateGlobalConcurrencyLimit, status: updateStatus } =\n\t\tuseUpdateGlobalConcurrencyLimit();\n\n\tconst form = useForm({\n\t\tresolver: zodResolver(formSchema),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\n\t// Sync form data with limit-to-edit data\n\tuseEffect(() => {\n\t\tif (limitToUpdate) {\n\t\t\tconst { active, name, limit, slot_decay_per_second, active_slots } =\n\t\t\t\tlimitToUpdate;\n\t\t\tform.reset({ active, name, limit, slot_decay_per_second, active_slots });\n\t\t} else {\n\t\t\tform.reset(DEFAULT_VALUES);\n\t\t}\n\t}, [form, limitToUpdate]);\n\n\tconst saveOrUpdate = (values: z.infer<typeof formSchema>) => {\n\t\tconst onSettled = () => {\n\t\t\tform.reset(DEFAULT_VALUES);\n\t\t\tonSubmit();\n\t\t};\n\n\t\tif (limitToUpdate?.id) {\n\t\t\tupdateGlobalConcurrencyLimit(\n\t\t\t\t{\n\t\t\t\t\tid_or_name: limitToUpdate.id,\n\t\t\t\t\t...values,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\ttoast.success(\"Limit updated\");\n\t\t\t\t\t},\n\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\terror.message || \"Unknown error while updating limit.\";\n\t\t\t\t\t\tform.setError(\"root\", { message });\n\t\t\t\t\t},\n\t\t\t\t\tonSettled,\n\t\t\t\t},\n\t\t\t);\n\t\t} else {\n\t\t\tcreateGlobalConcurrencyLimit(values, {\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Limit created\");\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while creating variable.\";\n\t\t\t\t\tform.setError(\"root\", {\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonSettled,\n\t\t\t});\n\t\t}\n\t};\n\n\treturn {\n\t\tform,\n\t\tsaveOrUpdate,\n\t\tisLoading: createStatus === \"pending\" || updateStatus === \"pending\",\n\t};\n};\n","import type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Switch } from \"@/components/ui/switch\";\n\nimport { useCreateOrEditGlobalConcurrencyLimitForm } from \"./use-create-or-edit-global-concurrency-limit-form\";\n\ntype GlobalConcurrencyLimitsCreateOrEditDialogProps = {\n\tlimitToUpdate?: GlobalConcurrencyLimit;\n\tonOpenChange: (open: boolean) => void;\n\tonSubmit: () => void;\n};\n\nexport const GlobalConcurrencyLimitsCreateOrEditDialog = ({\n\tlimitToUpdate,\n\tonOpenChange,\n\tonSubmit,\n}: GlobalConcurrencyLimitsCreateOrEditDialogProps) => {\n\tconst { form, isLoading, saveOrUpdate } =\n\t\tuseCreateOrEditGlobalConcurrencyLimitForm({\n\t\t\tlimitToUpdate,\n\t\t\tonSubmit,\n\t\t});\n\n\tconst dialogTitle = limitToUpdate\n\t\t? `Update ${limitToUpdate.name}`\n\t\t: \"Add Concurrency Limit\";\n\n\treturn (\n\t\t<Dialog open onOpenChange={onOpenChange}>\n\t\t\t<DialogContent aria-describedby={undefined}>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>{dialogTitle}</DialogTitle>\n\t\t\t\t</DialogHeader>\n\n\t\t\t\t<Form {...form}>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={(e) => void form.handleSubmit(saveOrUpdate)(e)}\n\t\t\t\t\t\tclassName=\"space-y-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormMessage>{form.formState.errors.root?.message}</FormMessage>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"text\" autoComplete=\"off\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"limit\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Concurrency Limit</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"slot_decay_per_second\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Slot Decay Per Second</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{limitToUpdate && (\n\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\t\tname=\"active_slots\"\n\t\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t\t<FormLabel>Active Slots</FormLabel>\n\t\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"active\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Active</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t\t\t\t\t\tchecked={field.value}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={field.onChange}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<DialogFooter>\n\t\t\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t\t\t<Button type=\"submit\" loading={isLoading}>\n\t\t\t\t\t\t\t\t{limitToUpdate ? \"Update\" : \"Save\"}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</DialogFooter>\n\t\t\t\t\t</form>\n\t\t\t\t</Form>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n};\n","import { toast } from \"sonner\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseDeleteGlobalConcurrencyLimit,\n} from \"@/api/global-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\n\ntype GlobalConcurrencyLimitsDeleteDialogProps = {\n\tlimit: GlobalConcurrencyLimit;\n\tonOpenChange: (open: boolean) => void;\n\tonDelete: () => void;\n};\n\nexport const GlobalConcurrencyLimitsDeleteDialog = ({\n\tlimit,\n\tonOpenChange,\n\tonDelete,\n}: GlobalConcurrencyLimitsDeleteDialogProps) => {\n\tconst { deleteGlobalConcurrencyLimit, isPending } =\n\t\tuseDeleteGlobalConcurrencyLimit();\n\n\tconst handleOnClick = (id: string) => {\n\t\tdeleteGlobalConcurrencyLimit(id, {\n\t\t\tonSuccess: () => {\n\t\t\t\ttoast.success(\"Concurrency limit deleted\");\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconst message =\n\t\t\t\t\terror.message || \"Unknown error while deleting concurrency limit.\";\n\t\t\t\tconsole.error(message);\n\t\t\t},\n\t\t\tonSettled: onDelete,\n\t\t});\n\t};\n\n\treturn (\n\t\t<Dialog open onOpenChange={onOpenChange}>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Delete Concurrency Limit</DialogTitle>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<DialogDescription>\n\t\t\t\t\tAre you sure you want to delete {limit.name}\n\t\t\t\t</DialogDescription>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={() => handleOnClick(limit.id)}\n\t\t\t\t\t\tloading={isPending}\n\t\t\t\t\t>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</Button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n};\n","import type { GlobalConcurrencyLimit } from \"@/api/global-concurrency-limits\";\n\nimport { GlobalConcurrencyLimitsCreateOrEditDialog } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-create-or-edit-dialog\";\nimport { GlobalConcurrencyLimitsDeleteDialog } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-delete-dialog\";\n\nexport type DialogState =\n\t| { dialog: null | \"create\"; data: undefined }\n\t| {\n\t\t\tdialog: \"delete\" | \"edit\";\n\t\t\tdata: GlobalConcurrencyLimit;\n\t };\n\nexport const GlobalConcurrencyLimitsDialog = ({\n\topenDialog,\n\tonCloseDialog,\n\tonOpenChange,\n}: {\n\topenDialog: DialogState;\n\tonOpenChange: (open: boolean) => void;\n\tonCloseDialog: () => void;\n}) => {\n\tconst { dialog, data } = openDialog;\n\tswitch (dialog) {\n\t\tcase \"create\":\n\t\t\treturn (\n\t\t\t\t<GlobalConcurrencyLimitsCreateOrEditDialog\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonSubmit={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"delete\":\n\t\t\treturn (\n\t\t\t\t<GlobalConcurrencyLimitsDeleteDialog\n\t\t\t\t\tlimit={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonDelete={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"edit\":\n\t\t\treturn (\n\t\t\t\t<GlobalConcurrencyLimitsCreateOrEditDialog\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tlimitToUpdate={data}\n\t\t\t\t\tonSubmit={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { useState } from \"react\";\nimport {\n\ttype GlobalConcurrencyLimit,\n\tuseListGlobalConcurrencyLimits,\n} from \"@/api/global-concurrency-limits\";\n\nimport { GlobalConcurrencyLimitsDataTable } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-data-table\";\nimport { GlobalConcurrencyLimitsEmptyState } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-empty-state\";\nimport { GlobalConcurrencyLimitsHeader } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-header\";\n\nimport {\n\ttype DialogState,\n\tGlobalConcurrencyLimitsDialog,\n} from \"./global-conccurency-limits-dialog\";\n\nexport const GlobalConcurrencyLimitsView = () => {\n\tconst [openDialog, setOpenDialog] = useState<DialogState>({\n\t\tdialog: null,\n\t\tdata: undefined,\n\t});\n\n\tconst { data } = useListGlobalConcurrencyLimits();\n\n\tconst handleAddRow = () =>\n\t\tsetOpenDialog({ dialog: \"create\", data: undefined });\n\n\tconst handleEditRow = (data: GlobalConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"edit\", data });\n\n\tconst handleDeleteRow = (data: GlobalConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"delete\", data });\n\n\tconst handleCloseDialog = () =>\n\t\tsetOpenDialog({ dialog: null, data: undefined });\n\n\t// Because all modals will be rendered, only control the closing logic\n\tconst handleOpenChange = (open: boolean) => {\n\t\tif (!open) {\n\t\t\thandleCloseDialog();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<GlobalConcurrencyLimitsHeader onAdd={handleAddRow} />\n\t\t\t{data.length === 0 ? (\n\t\t\t\t<GlobalConcurrencyLimitsEmptyState onAdd={handleAddRow} />\n\t\t\t) : (\n\t\t\t\t<GlobalConcurrencyLimitsDataTable\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonEditRow={handleEditRow}\n\t\t\t\t\tonDeleteRow={handleDeleteRow}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<GlobalConcurrencyLimitsDialog\n\t\t\t\topenDialog={openDialog}\n\t\t\t\tonCloseDialog={handleCloseDialog}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import type { CellContext } from \"@tanstack/react-table\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\n\ntype ActiveTaskRunCellsProps = CellContext<\n\tTaskRunConcurrencyLimit,\n\tArray<string>\n>;\n\nexport const ActiveTaskRunCells = (props: ActiveTaskRunCellsProps) => {\n\tconst activeTaskRuns = props.getValue();\n\tconst numActiveTaskRuns = activeTaskRuns.length;\n\tif (numActiveTaskRuns === 0) {\n\t\treturn \"None\";\n\t}\n\treturn numActiveTaskRuns;\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\n\ntype TagCellProps = CellContext<TaskRunConcurrencyLimit, string>;\n\nexport const TagCell = (props: TagCellProps) => {\n\tconst tag = props.getValue();\n\tconst id = props.row.original.id;\n\treturn (\n\t\t<Link params={{ id }} to={\"/concurrency-limits/concurrency-limit/$id\"}>\n\t\t\t{tag}\n\t\t</Link>\n\t);\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tgetPaginationRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useDeferredValue, useMemo } from \"react\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsActionsMenu } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-actions-menu\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { SearchInput } from \"@/components/ui/input\";\n\nimport { ActiveTaskRunCells } from \"./active-task-runs-cell\";\nimport { TagCell } from \"./tag-cell\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/\");\nconst columnHelper = createColumnHelper<TaskRunConcurrencyLimit>();\n\nconst createColumns = ({\n\tonDeleteRow,\n\tonResetRow,\n}: {\n\tonDeleteRow: (row: TaskRunConcurrencyLimit) => void;\n\tonResetRow: (row: TaskRunConcurrencyLimit) => void;\n}) => [\n\tcolumnHelper.accessor(\"tag\", {\n\t\theader: \"Tag\",\n\t\tcell: TagCell,\n\t}),\n\tcolumnHelper.accessor(\"concurrency_limit\", {\n\t\theader: \"Slots\",\n\t}),\n\tcolumnHelper.accessor(\"active_slots\", {\n\t\theader: \"Active Task Runs\",\n\t\tcell: ActiveTaskRunCells,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => {\n\t\t\tconst row = props.row.original;\n\t\t\treturn (\n\t\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t\t<TaskRunConcurrencyLimitsActionsMenu\n\t\t\t\t\t\tid={row.id}\n\t\t\t\t\t\tonDelete={() => onDeleteRow(row)}\n\t\t\t\t\t\tonReset={() => onResetRow(row)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t}),\n];\n\ntype TaskRunConcurrencyLimitsDataTableProps = {\n\tdata: Array<TaskRunConcurrencyLimit>;\n\tonDeleteRow: (row: TaskRunConcurrencyLimit) => void;\n\tonResetRow: (row: TaskRunConcurrencyLimit) => void;\n};\n\nexport const TaskRunConcurrencyLimitsDataTable = ({\n\tdata,\n\tonDeleteRow,\n\tonResetRow,\n}: TaskRunConcurrencyLimitsDataTableProps) => {\n\tconst navigate = routeApi.useNavigate();\n\tconst { search } = routeApi.useSearch();\n\tconst deferredSearch = useDeferredValue(search ?? \"\");\n\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((row) =>\n\t\t\trow.tag.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\treturn (\n\t\t<Table\n\t\t\tdata={filteredData}\n\t\t\tonDeleteRow={onDeleteRow}\n\t\t\tonResetRow={onResetRow}\n\t\t\tsearchValue={search}\n\t\t\tonSearchChange={(value) =>\n\t\t\t\tvoid navigate({\n\t\t\t\t\tto: \".\",\n\t\t\t\t\tsearch: (prev) => ({ ...prev, search: value }),\n\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n};\n\ntype TableProps = {\n\tdata: Array<TaskRunConcurrencyLimit>;\n\tonDeleteRow: (row: TaskRunConcurrencyLimit) => void;\n\tonResetRow: (row: TaskRunConcurrencyLimit) => void;\n\tonSearchChange: (value: string) => void;\n\tsearchValue: string | undefined;\n};\n\nexport function Table({\n\tdata,\n\tonDeleteRow,\n\tonResetRow,\n\tonSearchChange,\n\tsearchValue,\n}: TableProps) {\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: createColumns({ onDeleteRow, onResetRow }),\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(), //load client-side pagination code\n\t});\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<SearchInput\n\t\t\t\tclassName=\"max-w-72\"\n\t\t\t\tplaceholder=\"Search active task limit\"\n\t\t\t\tvalue={searchValue}\n\t\t\t\tonChange={(e) => onSearchChange(e.target.value)}\n\t\t\t/>\n\t\t\t<DataTable table={table} />\n\t\t</div>\n\t);\n}\n","import { Button } from \"@/components/ui/button\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype TaskRunConcurrencyLimitsEmptyStateProps = {\n\tonAdd: () => void;\n};\nexport const TaskRunConcurrencyLimitsEmptyState = ({\n\tonAdd,\n}: TaskRunConcurrencyLimitsEmptyStateProps) => (\n\t<EmptyState>\n\t\t<EmptyStateIcon id=\"CircleArrowOutUpRight\" />\n\t\t<EmptyStateTitle>\n\t\t\tAdd a concurrency limit for your task runs\n\t\t</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tCreating a limit allows you to limit the number of tasks running\n\t\t\tsimultaneously with a given tag.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<Button onClick={onAdd}>\n\t\t\t\tAdd Concurrency Limit <Icon id=\"Plus\" className=\"size-4 ml-2\" />\n\t\t\t</Button>\n\t\t\t<DocsLink id=\"task-concurrency-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype TaskRunConcurrencyLimitsHeaderProps = {\n\tonAdd: () => void;\n};\n\nexport const TaskRunConcurrencyLimitsHeader = ({\n\tonAdd,\n}: TaskRunConcurrencyLimitsHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\tTask Run Concurrency Limits\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<Button\n\t\t\t\tonClick={onAdd}\n\t\t\t\tsize=\"icon\"\n\t\t\t\tclassName=\"size-7\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\taria-label=\"add task run concurrency limit\"\n\t\t\t>\n\t\t\t\t<Icon id=\"Plus\" className=\"size-4\" />\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { useCreateTaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\n\nconst formSchema = z.object({\n\ttag: z.string().min(1),\n\t/** Coerce to solve common issue of transforming a string number to a number type */\n\tconcurrency_limit: z\n\t\t.number()\n\t\t.default(0)\n\t\t.or(z.string())\n\t\t.pipe(z.coerce.number()),\n});\n\nconst DEFAULT_VALUES = {\n\ttag: \"\",\n\tconcurrency_limit: 0,\n} as const;\n\ntype TaskRunConcurrencyLimitsCreateDialogProps = {\n\tonOpenChange: (open: boolean) => void;\n\tonSubmit: () => void;\n};\n\nexport const TaskRunConcurrencyLimitsCreateDialog = ({\n\tonOpenChange,\n\tonSubmit,\n}: TaskRunConcurrencyLimitsCreateDialogProps) => {\n\tconst { createTaskRunConcurrencyLimit, isPending } =\n\t\tuseCreateTaskRunConcurrencyLimit();\n\n\tconst form = useForm({\n\t\tresolver: zodResolver(formSchema),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\n\tconst handleAddLimit = (values: z.infer<typeof formSchema>) => {\n\t\tcreateTaskRunConcurrencyLimit(values, {\n\t\t\tonSuccess: () => {\n\t\t\t\ttoast.success(\"Concurrency limit added\");\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tconst message = error.message || \"Unknown error while updating limit.\";\n\t\t\t\tform.setError(\"root\", { message });\n\t\t\t},\n\t\t\tonSettled: () => {\n\t\t\t\tform.reset(DEFAULT_VALUES);\n\t\t\t\tonSubmit();\n\t\t\t},\n\t\t});\n\t};\n\n\treturn (\n\t\t<Dialog open onOpenChange={onOpenChange}>\n\t\t\t<DialogContent aria-describedby={undefined}>\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Add Task Run Concurrency Limit</DialogTitle>\n\t\t\t\t</DialogHeader>\n\n\t\t\t\t<Form {...form}>\n\t\t\t\t\t<form\n\t\t\t\t\t\tonSubmit={(e) => void form.handleSubmit(handleAddLimit)(e)}\n\t\t\t\t\t\tclassName=\"space-y-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormMessage>{form.formState.errors.root?.message}</FormMessage>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"tag\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Tag</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"text\" autoComplete=\"off\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"concurrency_limit\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Concurrency Limit</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input type=\"number\" {...field} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<DialogFooter>\n\t\t\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t\t\t<Button variant=\"outline\">Close</Button>\n\t\t\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t\t\t<Button type=\"submit\" loading={isPending}>\n\t\t\t\t\t\t\t\tAdd\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</DialogFooter>\n\t\t\t\t\t</form>\n\t\t\t\t</Form>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n};\n","import type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsCreateDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-create-dialog\";\nimport { TaskRunConcurrencyLimitsDeleteDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-delete-dialog\";\nimport { TaskRunConcurrencyLimitsResetDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-reset-dialog\";\n\nexport type DialogState =\n\t| { dialog: null | \"create\"; data: undefined }\n\t| {\n\t\t\tdialog: \"reset\" | \"delete\";\n\t\t\tdata: TaskRunConcurrencyLimit;\n\t };\n\nexport const TaskRunConcurrencyLimitDialog = ({\n\topenDialog,\n\tonCloseDialog,\n\tonOpenChange,\n}: {\n\topenDialog: DialogState;\n\tonOpenChange: (open: boolean) => void;\n\tonCloseDialog: () => void;\n}) => {\n\tconst { dialog, data } = openDialog;\n\tswitch (dialog) {\n\t\tcase \"create\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsCreateDialog\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonSubmit={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"reset\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsResetDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonReset={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"delete\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsDeleteDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonDelete={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { useState } from \"react\";\nimport {\n\ttype TaskRunConcurrencyLimit,\n\tuseListTaskRunConcurrencyLimits,\n} from \"@/api/task-run-concurrency-limits\";\n\nimport { TaskRunConcurrencyLimitsDataTable } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-data-table\";\nimport { TaskRunConcurrencyLimitsEmptyState } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-empty-state\";\nimport { TaskRunConcurrencyLimitsHeader } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-header\";\nimport {\n\ttype DialogState,\n\tTaskRunConcurrencyLimitDialog,\n} from \"./task-run-concurrency-limit-dialog\";\n\nexport const TaskRunConcurrencyLimitsView = () => {\n\tconst [openDialog, setOpenDialog] = useState<DialogState>({\n\t\tdialog: null,\n\t\tdata: undefined,\n\t});\n\n\tconst { data } = useListTaskRunConcurrencyLimits();\n\n\tconst handleAddRow = () =>\n\t\tsetOpenDialog({ dialog: \"create\", data: undefined });\n\n\tconst handleDeleteRow = (data: TaskRunConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"delete\", data });\n\n\tconst handleResetRow = (data: TaskRunConcurrencyLimit) =>\n\t\tsetOpenDialog({ dialog: \"reset\", data });\n\n\tconst handleCloseDialog = () =>\n\t\tsetOpenDialog({ dialog: null, data: undefined });\n\n\t// Because all modals will be rendered, only control the closing logic\n\tconst handleOpenChange = (open: boolean) => {\n\t\tif (!open) {\n\t\t\thandleCloseDialog();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<TaskRunConcurrencyLimitsHeader onAdd={handleAddRow} />\n\t\t\t{data.length === 0 ? (\n\t\t\t\t<TaskRunConcurrencyLimitsEmptyState onAdd={handleAddRow} />\n\t\t\t) : (\n\t\t\t\t<TaskRunConcurrencyLimitsDataTable\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonDeleteRow={handleDeleteRow}\n\t\t\t\t\tonResetRow={handleResetRow}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<TaskRunConcurrencyLimitDialog\n\t\t\t\topenDialog={openDialog}\n\t\t\t\tonCloseDialog={handleCloseDialog}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport type { JSX } from \"react\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport type { TabOptions } from \"@/routes/concurrency-limits\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/\");\n\ntype TabOptionValues = {\n\t/** Value of search value in url */\n\ttabSearchValue: TabOptions;\n\t/** Display value for the UI */\n\tdisplayValue: string;\n};\n\n/** Maps url tab option to visual name */\nconst TAB_OPTIONS: Record<TabOptions, TabOptionValues> = {\n\tglobal: {\n\t\ttabSearchValue: \"global\",\n\t\tdisplayValue: \"Global\",\n\t},\n\t\"task-run\": {\n\t\ttabSearchValue: \"task-run\",\n\t\tdisplayValue: \"Task Run\",\n\t},\n} as const;\n\ntype ConcurrencyLimitsTabsProps = {\n\tglobalView: React.ReactNode;\n\ttaskRunView: React.ReactNode;\n};\n\n// TODO: Move Tabs for navigation to a generic styled component\n\nexport const ConcurrencyLimitsTabs = ({\n\tglobalView,\n\ttaskRunView,\n}: ConcurrencyLimitsTabsProps): JSX.Element => {\n\tconst { tab } = routeApi.useSearch();\n\tconst navigate = routeApi.useNavigate();\n\n\treturn (\n\t\t<Tabs defaultValue=\"Global\" value={tab}>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger\n\t\t\t\t\tvalue={TAB_OPTIONS.global.tabSearchValue}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/concurrency-limits\",\n\t\t\t\t\t\t\tsearch: {\n\t\t\t\t\t\t\t\ttab: TAB_OPTIONS.global.tabSearchValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{TAB_OPTIONS.global.displayValue}\n\t\t\t\t</TabsTrigger>\n\t\t\t\t<TabsTrigger\n\t\t\t\t\tvalue={TAB_OPTIONS[\"task-run\"].tabSearchValue}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/concurrency-limits\",\n\t\t\t\t\t\t\tsearch: {\n\t\t\t\t\t\t\t\ttab: TAB_OPTIONS[\"task-run\"].tabSearchValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{TAB_OPTIONS[\"task-run\"].displayValue}\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value={TAB_OPTIONS.global.tabSearchValue}>\n\t\t\t\t{globalView}\n\t\t\t</TabsContent>\n\t\t\t<TabsContent value={TAB_OPTIONS[\"task-run\"].tabSearchValue}>\n\t\t\t\t{taskRunView}\n\t\t\t</TabsContent>\n\t\t</Tabs>\n\t);\n};\n","import { GlobalConcurrencyLimitsView } from \"@/components/concurrency/global-concurrency-limits/global-concurrency-limits-view\";\nimport { TaskRunConcurrencyLimitsView } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-view\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\n\nimport { ConcurrencyLimitsTabs } from \"./concurrency-limits-tabs\";\n\nexport const ConcurrencyLimitsPage = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<ConcurrencyLimitTitle />\n\t\t\t<ConcurrencyLimitsTabs\n\t\t\t\tglobalView={<GlobalConcurrencyLimitsView />}\n\t\t\t\ttaskRunView={<TaskRunConcurrencyLimitsView />}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst ConcurrencyLimitTitle = () => (\n\t<div className=\"flex items-center gap-2\">\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\tConcurrency\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t</div>\n);\n","import { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListGlobalConcurrencyLimitsQuery } from \"@/api/global-concurrency-limits\";\nimport { buildListTaskRunConcurrencyLimitsQuery } from \"@/api/task-run-concurrency-limits\";\nimport { ConcurrencyLimitsPage } from \"@/components/concurrency/concurrency-limits-page\";\n\n/**\n * Schema for validating URL search parameters for the Concurrency Limits page.\n * @property {string} search used to filter data table\n * @property {'global' | 'task-run'} tab used designate which tab view to display\n */\nconst searchParams = z.object({\n\tsearch: z.string().optional(),\n\ttab: z.enum([\"global\", \"task-run\"]).default(\"global\"),\n});\n\nexport type TabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\"/concurrency-limits/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: ConcurrencyLimitsPage,\n\twrapInSuspense: true,\n\tloader: ({ context }) =>\n\t\tPromise.all([\n\t\t\tcontext.queryClient.ensureQueryData(\n\t\t\t\tbuildListGlobalConcurrencyLimitsQuery(),\n\t\t\t),\n\t\t\tcontext.queryClient.ensureQueryData(\n\t\t\t\tbuildListTaskRunConcurrencyLimitsQuery(),\n\t\t\t),\n\t\t]),\n});\n"],"names":["ActionsCell","onEditRow","onDeleteRow","props","handleCopyId","id","toast","row","DropdownMenu","jsx","DropdownMenuTrigger","jsxs","Button","Icon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuItem","ActiveCell","updateGlobalConcurrencyLimit","useUpdateGlobalConcurrencyLimit","handleCheckedChange","checked","error","message","rowActive","rowId","Switch","routeApi","getRouteApi","columnHelper","createColumnHelper","createColumns","GlobalConcurrencyLimitsDataTable","data","navigate","search","deferredSearch","useDeferredValue","filteredData","useMemo","Table","value","prev","onSearchChange","searchValue","table","useReactTable","getCoreRowModel","getPaginationRowModel","SearchInput","e","DataTable","GlobalConcurrencyLimitsEmptyState","onAdd","EmptyState","EmptyStateIcon","EmptyStateTitle","EmptyStateDescription","EmptyStateActions","DocsLink","GlobalConcurrencyLimitsHeader","Breadcrumb","BreadcrumbList","BreadcrumbItem","formSchema","z.object","z.boolean","z.number","z.string","z.coerce","DEFAULT_VALUES","useCreateOrEditGlobalConcurrencyLimitForm","limitToUpdate","onSubmit","createGlobalConcurrencyLimit","createStatus","useCreateGlobalConcurrencyLimit","updateStatus","form","useForm","zodResolver","useEffect","active","name","limit","slot_decay_per_second","active_slots","values","onSettled","GlobalConcurrencyLimitsCreateOrEditDialog","onOpenChange","isLoading","saveOrUpdate","dialogTitle","Dialog","DialogContent","DialogHeader","DialogTitle","Form","FormMessage","FormField","field","FormItem","FormLabel","FormControl","Input","DialogFooter","DialogTrigger","GlobalConcurrencyLimitsDeleteDialog","onDelete","deleteGlobalConcurrencyLimit","isPending","useDeleteGlobalConcurrencyLimit","handleOnClick","DialogDescription","GlobalConcurrencyLimitsDialog","openDialog","onCloseDialog","dialog","GlobalConcurrencyLimitsView","setOpenDialog","useState","useListGlobalConcurrencyLimits","handleAddRow","handleEditRow","handleDeleteRow","handleCloseDialog","handleOpenChange","open","ActiveTaskRunCells","numActiveTaskRuns","TagCell","tag","Link","onResetRow","TaskRunConcurrencyLimitsActionsMenu","TaskRunConcurrencyLimitsDataTable","TaskRunConcurrencyLimitsEmptyState","TaskRunConcurrencyLimitsHeader","TaskRunConcurrencyLimitsCreateDialog","createTaskRunConcurrencyLimit","useCreateTaskRunConcurrencyLimit","handleAddLimit","TaskRunConcurrencyLimitDialog","TaskRunConcurrencyLimitsResetDialog","TaskRunConcurrencyLimitsDeleteDialog","TaskRunConcurrencyLimitsView","useListTaskRunConcurrencyLimits","handleResetRow","TAB_OPTIONS","ConcurrencyLimitsTabs","globalView","taskRunView","tab","Tabs","TabsList","TabsTrigger","TabsContent","ConcurrencyLimitsPage","ConcurrencyLimitTitle","z","string","optional","default","SplitComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as l,j as e,L as W,t as N}from"./vendor-tanstack-BcZfOOfy.js";import{aW as b,aX as X,aY as q,ac as T,ad as I,ae as _,af as O,ah as F,ag as M,ai as A,aj as S,C as B,m as z,q as U,aZ as K,o as Y,I as Q,H as Z,a_ as ee,ak as C,al as V,a$ as te,b0 as se,b1 as ne,b2 as ae,b3 as E,b4 as re,B as oe,g as le,h as ce,i as P,b5 as v,a9 as ie,E as de,t as ue,v as me,w as xe,b6 as fe,b7 as he,b8 as w,b9 as pe,ba as ge,bb as k}from"./index-nxDkMXcY.js";import{A as je,X as ve,Y as be,b as Ne}from"./vendor-recharts-BAN776s_.js";import{f as y}from"./vendor-date-wwuDAncJ.js";import{u as ye,C as we,a as Se,b as Ce}from"./collapsible-BlEqjqQu.js";import{J as Ee,f as Pe,g as ke}from"./utilities-DabzLyXd.js";import{E as Re,p as $,R as H,a as De,b as Le}from"./event-resource-display-DmCKu0PD.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-forms-ClCIacbh.js";const Te=({active:t,payload:s})=>{if(!t||!s||!s.length)return null;const n=s[0]?.payload;return!n||typeof n.time!="number"||typeof n.count!="number"?null:e.jsxs("div",{className:"bg-popover border rounded-lg p-2 shadow-md",children:[e.jsxs("div",{className:"text-sm font-medium",children:[n.count," events"]}),e.jsx("div",{className:"text-xs text-muted-foreground",children:y(new Date(n.time),"PPp")})]})},Ie={count:{label:"Events",color:"hsl(262.1 83.3% 57.8%)"}},_e=l.forwardRef(function({data:s,className:a,showAxis:n=!0,startDate:o,endDate:c,onCursorChange:m},d){const x=l.useRef(null);l.useImperativeHandle(d,()=>({clearSelection:()=>{}}));const i=l.useMemo(()=>{const r=s.map(u=>({time:new Date(u.start_time).getTime(),count:u.count,label:u.label}));if(o&&c){const u=o.getTime(),j=c.getTime();(r.length===0||r[0].time>u)&&r.unshift({time:u,count:0,label:""}),(r.length===0||r[r.length-1].time<j)&&r.push({time:j,count:0,label:""})}return r},[s,o,c]),f=r=>{if(r.activeLabel!==void 0&&m){const u=typeof r.activeLabel=="number"?r.activeLabel:Number(r.activeLabel);Number.isNaN(u)||m(new Date(u))}},h=()=>{m?.(null)};return e.jsx("div",{ref:x,className:b("relative",a),children:e.jsx(X,{config:Ie,className:"h-full w-[calc(100%+3rem)] -mx-6",children:e.jsxs(je,{data:i,margin:{top:0,right:0,bottom:0,left:0},onMouseMove:f,onMouseLeave:h,children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"eventsGradient",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"var(--color-count)",stopOpacity:.3}),e.jsx("stop",{offset:"100%",stopColor:"var(--color-count)",stopOpacity:0})]})}),e.jsx(ve,{dataKey:"time",tickFormatter:r=>y(new Date(r),"HH:mm"),tick:{fontSize:12},axisLine:!1,tickLine:!1,domain:["dataMin","dataMax"],hide:!n}),e.jsx(be,{hide:!0,domain:[0,r=>Math.max(1,r)]}),e.jsx(q,{content:e.jsx(Te,{})}),e.jsx(Ne,{type:"monotone",dataKey:"count",stroke:"var(--color-count)",strokeWidth:2,fill:"url(#eventsGradient)",dot:!1,activeDot:!1,isAnimationActive:!1})]})})})});function Oe({data:t,className:s,startDate:a,endDate:n}){return e.jsx("div",{className:b("relative",s),children:e.jsx(_e,{data:t,className:"h-full w-full",showAxis:!1,startDate:a,endDate:n})})}const Fe={automation:"Automation",block:"Block",deployment:"Deployment",flow:"Flow","work-pool":"Work Pool","work-queue":"Work Queue"};function Me(t){return e.jsx(l.Suspense,{children:e.jsx(Ae,{...t})})}function Ae({selectedResourceIds:t,onResourceIdsChange:s}){const[a,n]=l.useState(""),o=l.useDeferredValue(a),{resourceOptions:c}=ye(),m=l.useMemo(()=>o?c.filter(i=>i.name.toLowerCase().includes(o.toLowerCase())):c,[c,o]),d=l.useMemo(()=>{const i={automation:[],block:[],deployment:[],flow:[],"work-pool":[],"work-queue":[]};for(const f of m)i[f.type].push(f);return i},[m]),x=i=>{const f=t.includes(i);s(f?t.filter(h=>h!==i):[...t,i]),n("")};return e.jsxs(T,{children:[e.jsx(I,{"aria-label":"Filter by resource",selected:t.length>0,children:t.length>0?`${t.length} resource${t.length===1?"":"s"} selected`:"All resources"}),e.jsxs(_,{children:[e.jsx(O,{value:a,onValueChange:n,placeholder:"Search resources..."}),e.jsx(F,{children:"No resources found"}),e.jsx(M,{children:Object.entries(d).map(([i,f])=>f.length>0?e.jsx(A,{heading:Fe[i],children:f.map(h=>e.jsx(S,{value:h.resourceId,selected:t.includes(h.resourceId),onSelect:x,closeOnSelect:!1,children:h.name},h.resourceId))},i):null)})]})]})}function Be({occurred:t}){const s=new Date(t),a=y(s,"h:mm:ss a"),n=y(s,"MMM do, yyyy");return e.jsxs("div",{className:"flex flex-col text-right text-sm w-24 shrink-0",children:[e.jsx("span",{children:a}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n})]})}function Ye({event:t,isLast:s}){const a=t.resource["prefect.resource.id"]||"",n=$(a),o=H[n];return e.jsxs("div",{className:"relative flex items-start justify-center w-10 h-full",children:[e.jsx("div",{className:b("absolute left-1/2 w-px -translate-x-1/2 bg-border",s?"top-0 h-5":"top-0 bottom-0"),style:{top:"-1rem",bottom:s?"auto":"-1rem"}}),e.jsx("div",{className:"relative flex items-center justify-center w-10 h-10 rounded-full bg-background border border-border",children:e.jsx(Q,{id:o,className:"h-5 w-5 text-muted-foreground"})})]})}function Qe(t){const s=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0");return`${s}-${a}-${n}`}function Ve({eventId:t,eventName:s,occurred:a}){const n=Pe(s),o=Qe(new Date(a));return e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx(W,{to:"/events/event/$eventDate/$eventId",params:{eventDate:o,eventId:t},className:"text-left font-medium hover:underline",children:n}),e.jsx("span",{className:"text-xs text-muted-foreground font-mono",children:s})]})}function $e(t){return t["prefect.resource.role"]}function R(t){return t["prefect.resource.id"]||""}function D(t){return t["prefect.resource.name"]||t["prefect.name"]||t["prefect-cloud.name"]||null}function He({related:t}){if(!t||t.length===0)return null;const s=[],a=[];for(const n of t)$e(n)==="tag"?s.push(n):a.push(n);return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"Related Resources"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.map(n=>{const o=R(n),m=D(n)||o,d=$(o),x=Le[d],i=H[d];return e.jsxs(De,{resource:n,relatedResources:t,className:"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground hover:underline",children:[x&&e.jsx("span",{children:x}),e.jsx(Q,{id:i,className:"h-4 w-4"}),e.jsx("span",{children:m})]},o)}),s.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:s.map(n=>{const o=R(n),c=D(n)||o.split(".").pop();return e.jsx(Z,{variant:"secondary",children:c},o)})})]})]})}function Ge({event:t,isLast:s}){const[a,n]=l.useState(!1);return e.jsxs("div",{className:"grid grid-cols-[6rem_2.5rem_1fr] gap-4 items-start py-4",children:[e.jsx(Be,{occurred:t.occurred}),e.jsx(Ye,{event:t,isLast:s}),e.jsx(we,{open:a,onOpenChange:n,children:e.jsxs(B,{className:"py-4",children:[e.jsx(z,{className:"py-0",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(Ve,{eventId:t.id,eventName:t.event,occurred:t.occurred}),e.jsx(Re,{event:t}),t.related&&t.related.length>0&&e.jsx(He,{related:t.related})]})}),e.jsx("div",{className:"px-6 pt-2",children:e.jsx(Se,{asChild:!0,children:e.jsxs(U,{variant:"ghost",size:"sm",className:"w-full justify-center gap-2 text-muted-foreground","aria-label":a?"Collapse event details":"Expand event details",children:[e.jsx(K,{className:b("h-4 w-4 transition-transform duration-200",a&&"rotate-180")}),e.jsx("span",{className:"text-xs",children:a?"Hide raw event":"Show raw event"})]})})}),e.jsx(Ce,{children:e.jsx(Y,{className:"pt-4",children:e.jsx(Ee,{value:JSON.stringify(t,null,2),className:"max-h-96 overflow-auto"})})})]})})]})}function Je({events:t,className:s}){return!t||t.length===0?null:e.jsx("ol",{className:b("list-none p-0 m-0",s),children:t.map((a,n)=>e.jsx("li",{children:e.jsx(Ge,{event:a,isLast:n===t.length-1})},a.id))})}const L=2;function We({filter:t,selectedEventTypes:s,onEventTypesChange:a}){const[n,o]=l.useState(""),c=l.useDeferredValue(n),{data:m=[]}=N(ee("event",t)),d=l.useMemo(()=>{const r=new Set;for(const u of m){const j=ke(u.value);for(const p of j)r.add(p)}return Array.from(r).sort()},[m]),x=l.useMemo(()=>c?d.filter(r=>r.toLowerCase().includes(c.toLowerCase())):d,[d,c]),i=r=>{const u=s.includes(r);a(u?s.filter(j=>j!==r):[...s,r])},f=()=>{a([])},h=()=>{if(s.length===0)return"All event types";const r=s.slice(0,L),u=s.length-L;return e.jsxs("div",{className:"flex flex-1 min-w-0 items-center gap-2",children:[e.jsx("div",{className:"flex flex-1 min-w-0 items-center gap-2 overflow-hidden",children:e.jsx("span",{className:"truncate",children:r.join(", ")})}),u>0&&e.jsxs(V,{variant:"bodySmall",className:"shrink-0",children:["+ ",u]})]})};return e.jsxs(T,{children:[e.jsx(I,{"aria-label":"Filter by event type",selected:s.length===0,children:h()}),e.jsxs(_,{children:[e.jsx(O,{value:n,onValueChange:o,placeholder:"Search event types..."}),e.jsxs(M,{children:[e.jsx(F,{children:"No event types found"}),e.jsxs(A,{children:[e.jsxs(S,{"aria-label":"All event types",onSelect:f,closeOnSelect:!1,value:"__all__",children:[e.jsx(C,{checked:s.length===0}),"All event types"]}),x.map(r=>e.jsxs(S,{"aria-label":r,onSelect:()=>i(r),closeOnSelect:!1,value:r,children:[e.jsx(C,{checked:s.includes(r)}),r]},r))]})]})]})]})}const Xe=50;function qe({filter:t}){const[s,a]=l.useState(1),n=l.useRef(new Map),o=l.useRef(JSON.stringify(t));l.useEffect(()=>{const p=JSON.stringify(t);o.current!==p&&(n.current.clear(),a(1),o.current=p)},[t]);const c=N(te(t));l.useEffect(()=>{c.data?.next_page&&n.current.set(1,c.data.next_page)},[c.data?.next_page]);const m=s>1?n.current.get(s-1):null,d=N({...se(m??""),enabled:s>1&&!!m});l.useEffect(()=>{d.data?.next_page&&s>1&&n.current.set(s,d.data.next_page)},[d.data?.next_page,s]);const x=c.data?.total??0,i=Math.ceil(x/Xe),f=s===1?c.data?.events??[]:d.data?.events??c.data?.events??[],h=s>1&&d.isLoading;return{events:f,currentPage:s,totalPages:i,total:x,isLoadingNextPage:h,goToPage:p=>{p<1||p>i||p>1&&!n.current.has(p-1)||a(p)},goToNextPage:()=>{s<i&&n.current.has(s)&&a(s+1)},goToPreviousPage:()=>{s>1&&a(s-1)}}}function ze({search:t,onSearchChange:s}){const a=ne(t),n=ae(t),o=E({...t,rangeType:"range",start:a.from,end:a.to}),c=E({resource:t.resource,rangeType:"range",start:a.from,end:a.to}),{events:m,currentPage:d,totalPages:x,isLoadingNextPage:i,goToNextPage:f,goToPreviousPage:h}=qe({filter:n}),{data:r}=N(re(o)),u=g=>{s({resource:g})},j=g=>{s({event:g})},p=g=>{g?.type==="span"?s({rangeType:"span",seconds:g.seconds}):g?.type==="range"&&s({rangeType:"range",start:g.startDate.toISOString(),end:g.endDate.toISOString()})},[G,J]=l.useState(!1);return l.useEffect(()=>{const g=()=>{J(window.scrollY>100)};return window.addEventListener("scroll",g),()=>window.removeEventListener("scroll",g)},[]),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(oe,{children:e.jsx(le,{children:e.jsx(ce,{className:"text-xl font-semibold",children:"Event Feed"})})})})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-[2fr_1fr]",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(P,{children:"Resource"}),e.jsx(l.Suspense,{fallback:e.jsx(v,{className:"h-10 w-full"}),children:e.jsx(Me,{selectedResourceIds:t.resource??[],onResourceIdsChange:u})})]}),e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(P,{children:"Events"}),e.jsx(l.Suspense,{fallback:e.jsx(v,{className:"h-10 w-full"}),children:e.jsx(We,{filter:c,selectedEventTypes:t.event??[],onEventTypesChange:j})})]})]}),e.jsx(B,{className:b("sticky top-0 z-10 transition-shadow",G&&"shadow-lg"),children:e.jsxs(Y,{className:"pt-6",children:[e.jsx(Oe,{data:r??[],className:"h-32",startDate:new Date(a.from),endDate:new Date(a.to)}),e.jsx("div",{className:"flex justify-center pt-3",children:e.jsx(ie,{value:t.rangeType==="range"&&t.start&&t.end?{type:"range",startDate:new Date(t.start),endDate:new Date(t.end)}:{type:"span",seconds:t.seconds??-86400},onValueChange:p})})]})}),m.length===0?e.jsxs(de,{children:[e.jsx(ue,{id:"Calendar"}),e.jsx(me,{children:"No events found"}),e.jsx(xe,{children:"No events match your current filters. Try adjusting your date range or filters."})]}):e.jsxs(e.Fragment,{children:[e.jsx(Je,{events:m}),x>1&&e.jsx("div",{className:"flex items-center justify-center gap-2",children:e.jsx(fe,{children:e.jsxs(he,{children:[e.jsx(w,{children:e.jsx(pe,{onClick:h,disabled:d<=1})}),e.jsx(w,{children:e.jsxs(V,{variant:"bodySmall",className:"px-2",children:["Page ",d," of ",x]})}),e.jsx(w,{children:e.jsx(ge,{onClick:f,disabled:d>=x})})]})})}),i&&e.jsx("div",{className:"flex justify-center py-4",children:e.jsx(v,{className:"h-8 w-32"})})]})]})}function Ue(){return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(v,{className:"h-8 w-48"}),e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsx(v,{className:"h-10 w-48"}),e.jsx(v,{className:"h-10 w-48"}),e.jsx(v,{className:"h-10 w-48"})]}),e.jsx(v,{className:"h-32 w-full"}),e.jsx(v,{className:"h-64 w-full"})]})}function ct(){const t=k.useSearch(),s=k.useNavigate(),a=n=>{s({to:".",search:o=>({...o,...n}),replace:!0})};return e.jsx(l.Suspense,{fallback:e.jsx(Ue,{}),children:e.jsx(ze,{search:t,onSearchChange:a})})}export{ct as component};
2
- //# sourceMappingURL=index-DI-aZXNg.js.map
1
+ import{r as l,j as e,L as W,t as N}from"./vendor-tanstack-BcZfOOfy.js";import{aW as b,aX as X,aY as q,ac as T,ad as I,ae as _,af as O,ah as F,ag as M,ai as A,aj as S,C as B,m as z,q as U,aZ as K,o as Y,I as Q,H as Z,a_ as ee,ak as C,al as V,a$ as te,b0 as se,b1 as ne,b2 as ae,b3 as E,b4 as re,B as oe,g as le,h as ce,i as P,b5 as v,a9 as ie,E as de,t as ue,v as me,w as xe,b6 as fe,b7 as he,b8 as w,b9 as pe,ba as ge,bb as k}from"./index-_0OOjqn5.js";import{A as je,X as ve,Y as be,b as Ne}from"./vendor-recharts-BAN776s_.js";import{f as y}from"./vendor-date-wwuDAncJ.js";import{u as ye,C as we,a as Se,b as Ce}from"./collapsible-Dgk2Qvjj.js";import{J as Ee,f as Pe,g as ke}from"./utilities-CgJi7g2F.js";import{E as Re,p as $,R as H,a as De,b as Le}from"./event-resource-display-DR3zL_k_.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-forms-ClCIacbh.js";const Te=({active:t,payload:s})=>{if(!t||!s||!s.length)return null;const n=s[0]?.payload;return!n||typeof n.time!="number"||typeof n.count!="number"?null:e.jsxs("div",{className:"bg-popover border rounded-lg p-2 shadow-md",children:[e.jsxs("div",{className:"text-sm font-medium",children:[n.count," events"]}),e.jsx("div",{className:"text-xs text-muted-foreground",children:y(new Date(n.time),"PPp")})]})},Ie={count:{label:"Events",color:"hsl(262.1 83.3% 57.8%)"}},_e=l.forwardRef(function({data:s,className:a,showAxis:n=!0,startDate:o,endDate:c,onCursorChange:m},d){const x=l.useRef(null);l.useImperativeHandle(d,()=>({clearSelection:()=>{}}));const i=l.useMemo(()=>{const r=s.map(u=>({time:new Date(u.start_time).getTime(),count:u.count,label:u.label}));if(o&&c){const u=o.getTime(),j=c.getTime();(r.length===0||r[0].time>u)&&r.unshift({time:u,count:0,label:""}),(r.length===0||r[r.length-1].time<j)&&r.push({time:j,count:0,label:""})}return r},[s,o,c]),f=r=>{if(r.activeLabel!==void 0&&m){const u=typeof r.activeLabel=="number"?r.activeLabel:Number(r.activeLabel);Number.isNaN(u)||m(new Date(u))}},h=()=>{m?.(null)};return e.jsx("div",{ref:x,className:b("relative",a),children:e.jsx(X,{config:Ie,className:"h-full w-[calc(100%+3rem)] -mx-6",children:e.jsxs(je,{data:i,margin:{top:0,right:0,bottom:0,left:0},onMouseMove:f,onMouseLeave:h,children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"eventsGradient",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"var(--color-count)",stopOpacity:.3}),e.jsx("stop",{offset:"100%",stopColor:"var(--color-count)",stopOpacity:0})]})}),e.jsx(ve,{dataKey:"time",tickFormatter:r=>y(new Date(r),"HH:mm"),tick:{fontSize:12},axisLine:!1,tickLine:!1,domain:["dataMin","dataMax"],hide:!n}),e.jsx(be,{hide:!0,domain:[0,r=>Math.max(1,r)]}),e.jsx(q,{content:e.jsx(Te,{})}),e.jsx(Ne,{type:"monotone",dataKey:"count",stroke:"var(--color-count)",strokeWidth:2,fill:"url(#eventsGradient)",dot:!1,activeDot:!1,isAnimationActive:!1})]})})})});function Oe({data:t,className:s,startDate:a,endDate:n}){return e.jsx("div",{className:b("relative",s),children:e.jsx(_e,{data:t,className:"h-full w-full",showAxis:!1,startDate:a,endDate:n})})}const Fe={automation:"Automation",block:"Block",deployment:"Deployment",flow:"Flow","work-pool":"Work Pool","work-queue":"Work Queue"};function Me(t){return e.jsx(l.Suspense,{children:e.jsx(Ae,{...t})})}function Ae({selectedResourceIds:t,onResourceIdsChange:s}){const[a,n]=l.useState(""),o=l.useDeferredValue(a),{resourceOptions:c}=ye(),m=l.useMemo(()=>o?c.filter(i=>i.name.toLowerCase().includes(o.toLowerCase())):c,[c,o]),d=l.useMemo(()=>{const i={automation:[],block:[],deployment:[],flow:[],"work-pool":[],"work-queue":[]};for(const f of m)i[f.type].push(f);return i},[m]),x=i=>{const f=t.includes(i);s(f?t.filter(h=>h!==i):[...t,i]),n("")};return e.jsxs(T,{children:[e.jsx(I,{"aria-label":"Filter by resource",selected:t.length>0,children:t.length>0?`${t.length} resource${t.length===1?"":"s"} selected`:"All resources"}),e.jsxs(_,{children:[e.jsx(O,{value:a,onValueChange:n,placeholder:"Search resources..."}),e.jsx(F,{children:"No resources found"}),e.jsx(M,{children:Object.entries(d).map(([i,f])=>f.length>0?e.jsx(A,{heading:Fe[i],children:f.map(h=>e.jsx(S,{value:h.resourceId,selected:t.includes(h.resourceId),onSelect:x,closeOnSelect:!1,children:h.name},h.resourceId))},i):null)})]})]})}function Be({occurred:t}){const s=new Date(t),a=y(s,"h:mm:ss a"),n=y(s,"MMM do, yyyy");return e.jsxs("div",{className:"flex flex-col text-right text-sm w-24 shrink-0",children:[e.jsx("span",{children:a}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n})]})}function Ye({event:t,isLast:s}){const a=t.resource["prefect.resource.id"]||"",n=$(a),o=H[n];return e.jsxs("div",{className:"relative flex items-start justify-center w-10 h-full",children:[e.jsx("div",{className:b("absolute left-1/2 w-px -translate-x-1/2 bg-border",s?"top-0 h-5":"top-0 bottom-0"),style:{top:"-1rem",bottom:s?"auto":"-1rem"}}),e.jsx("div",{className:"relative flex items-center justify-center w-10 h-10 rounded-full bg-background border border-border",children:e.jsx(Q,{id:o,className:"h-5 w-5 text-muted-foreground"})})]})}function Qe(t){const s=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0");return`${s}-${a}-${n}`}function Ve({eventId:t,eventName:s,occurred:a}){const n=Pe(s),o=Qe(new Date(a));return e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx(W,{to:"/events/event/$eventDate/$eventId",params:{eventDate:o,eventId:t},className:"text-left font-medium hover:underline",children:n}),e.jsx("span",{className:"text-xs text-muted-foreground font-mono",children:s})]})}function $e(t){return t["prefect.resource.role"]}function R(t){return t["prefect.resource.id"]||""}function D(t){return t["prefect.resource.name"]||t["prefect.name"]||t["prefect-cloud.name"]||null}function He({related:t}){if(!t||t.length===0)return null;const s=[],a=[];for(const n of t)$e(n)==="tag"?s.push(n):a.push(n);return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"Related Resources"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.map(n=>{const o=R(n),m=D(n)||o,d=$(o),x=Le[d],i=H[d];return e.jsxs(De,{resource:n,relatedResources:t,className:"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground hover:underline",children:[x&&e.jsx("span",{children:x}),e.jsx(Q,{id:i,className:"h-4 w-4"}),e.jsx("span",{children:m})]},o)}),s.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:s.map(n=>{const o=R(n),c=D(n)||o.split(".").pop();return e.jsx(Z,{variant:"secondary",children:c},o)})})]})]})}function Ge({event:t,isLast:s}){const[a,n]=l.useState(!1);return e.jsxs("div",{className:"grid grid-cols-[6rem_2.5rem_1fr] gap-4 items-start py-4",children:[e.jsx(Be,{occurred:t.occurred}),e.jsx(Ye,{event:t,isLast:s}),e.jsx(we,{open:a,onOpenChange:n,children:e.jsxs(B,{className:"py-4",children:[e.jsx(z,{className:"py-0",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(Ve,{eventId:t.id,eventName:t.event,occurred:t.occurred}),e.jsx(Re,{event:t}),t.related&&t.related.length>0&&e.jsx(He,{related:t.related})]})}),e.jsx("div",{className:"px-6 pt-2",children:e.jsx(Se,{asChild:!0,children:e.jsxs(U,{variant:"ghost",size:"sm",className:"w-full justify-center gap-2 text-muted-foreground","aria-label":a?"Collapse event details":"Expand event details",children:[e.jsx(K,{className:b("h-4 w-4 transition-transform duration-200",a&&"rotate-180")}),e.jsx("span",{className:"text-xs",children:a?"Hide raw event":"Show raw event"})]})})}),e.jsx(Ce,{children:e.jsx(Y,{className:"pt-4",children:e.jsx(Ee,{value:JSON.stringify(t,null,2),className:"max-h-96 overflow-auto"})})})]})})]})}function Je({events:t,className:s}){return!t||t.length===0?null:e.jsx("ol",{className:b("list-none p-0 m-0",s),children:t.map((a,n)=>e.jsx("li",{children:e.jsx(Ge,{event:a,isLast:n===t.length-1})},a.id))})}const L=2;function We({filter:t,selectedEventTypes:s,onEventTypesChange:a}){const[n,o]=l.useState(""),c=l.useDeferredValue(n),{data:m=[]}=N(ee("event",t)),d=l.useMemo(()=>{const r=new Set;for(const u of m){const j=ke(u.value);for(const p of j)r.add(p)}return Array.from(r).sort()},[m]),x=l.useMemo(()=>c?d.filter(r=>r.toLowerCase().includes(c.toLowerCase())):d,[d,c]),i=r=>{const u=s.includes(r);a(u?s.filter(j=>j!==r):[...s,r])},f=()=>{a([])},h=()=>{if(s.length===0)return"All event types";const r=s.slice(0,L),u=s.length-L;return e.jsxs("div",{className:"flex flex-1 min-w-0 items-center gap-2",children:[e.jsx("div",{className:"flex flex-1 min-w-0 items-center gap-2 overflow-hidden",children:e.jsx("span",{className:"truncate",children:r.join(", ")})}),u>0&&e.jsxs(V,{variant:"bodySmall",className:"shrink-0",children:["+ ",u]})]})};return e.jsxs(T,{children:[e.jsx(I,{"aria-label":"Filter by event type",selected:s.length===0,children:h()}),e.jsxs(_,{children:[e.jsx(O,{value:n,onValueChange:o,placeholder:"Search event types..."}),e.jsxs(M,{children:[e.jsx(F,{children:"No event types found"}),e.jsxs(A,{children:[e.jsxs(S,{"aria-label":"All event types",onSelect:f,closeOnSelect:!1,value:"__all__",children:[e.jsx(C,{checked:s.length===0}),"All event types"]}),x.map(r=>e.jsxs(S,{"aria-label":r,onSelect:()=>i(r),closeOnSelect:!1,value:r,children:[e.jsx(C,{checked:s.includes(r)}),r]},r))]})]})]})]})}const Xe=50;function qe({filter:t}){const[s,a]=l.useState(1),n=l.useRef(new Map),o=l.useRef(JSON.stringify(t));l.useEffect(()=>{const p=JSON.stringify(t);o.current!==p&&(n.current.clear(),a(1),o.current=p)},[t]);const c=N(te(t));l.useEffect(()=>{c.data?.next_page&&n.current.set(1,c.data.next_page)},[c.data?.next_page]);const m=s>1?n.current.get(s-1):null,d=N({...se(m??""),enabled:s>1&&!!m});l.useEffect(()=>{d.data?.next_page&&s>1&&n.current.set(s,d.data.next_page)},[d.data?.next_page,s]);const x=c.data?.total??0,i=Math.ceil(x/Xe),f=s===1?c.data?.events??[]:d.data?.events??c.data?.events??[],h=s>1&&d.isLoading;return{events:f,currentPage:s,totalPages:i,total:x,isLoadingNextPage:h,goToPage:p=>{p<1||p>i||p>1&&!n.current.has(p-1)||a(p)},goToNextPage:()=>{s<i&&n.current.has(s)&&a(s+1)},goToPreviousPage:()=>{s>1&&a(s-1)}}}function ze({search:t,onSearchChange:s}){const a=ne(t),n=ae(t),o=E({...t,rangeType:"range",start:a.from,end:a.to}),c=E({resource:t.resource,rangeType:"range",start:a.from,end:a.to}),{events:m,currentPage:d,totalPages:x,isLoadingNextPage:i,goToNextPage:f,goToPreviousPage:h}=qe({filter:n}),{data:r}=N(re(o)),u=g=>{s({resource:g})},j=g=>{s({event:g})},p=g=>{g?.type==="span"?s({rangeType:"span",seconds:g.seconds}):g?.type==="range"&&s({rangeType:"range",start:g.startDate.toISOString(),end:g.endDate.toISOString()})},[G,J]=l.useState(!1);return l.useEffect(()=>{const g=()=>{J(window.scrollY>100)};return window.addEventListener("scroll",g),()=>window.removeEventListener("scroll",g)},[]),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(oe,{children:e.jsx(le,{children:e.jsx(ce,{className:"text-xl font-semibold",children:"Event Feed"})})})})}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-[2fr_1fr]",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(P,{children:"Resource"}),e.jsx(l.Suspense,{fallback:e.jsx(v,{className:"h-10 w-full"}),children:e.jsx(Me,{selectedResourceIds:t.resource??[],onResourceIdsChange:u})})]}),e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(P,{children:"Events"}),e.jsx(l.Suspense,{fallback:e.jsx(v,{className:"h-10 w-full"}),children:e.jsx(We,{filter:c,selectedEventTypes:t.event??[],onEventTypesChange:j})})]})]}),e.jsx(B,{className:b("sticky top-0 z-10 transition-shadow",G&&"shadow-lg"),children:e.jsxs(Y,{className:"pt-6",children:[e.jsx(Oe,{data:r??[],className:"h-32",startDate:new Date(a.from),endDate:new Date(a.to)}),e.jsx("div",{className:"flex justify-center pt-3",children:e.jsx(ie,{value:t.rangeType==="range"&&t.start&&t.end?{type:"range",startDate:new Date(t.start),endDate:new Date(t.end)}:{type:"span",seconds:t.seconds??-86400},onValueChange:p})})]})}),m.length===0?e.jsxs(de,{children:[e.jsx(ue,{id:"Calendar"}),e.jsx(me,{children:"No events found"}),e.jsx(xe,{children:"No events match your current filters. Try adjusting your date range or filters."})]}):e.jsxs(e.Fragment,{children:[e.jsx(Je,{events:m}),x>1&&e.jsx("div",{className:"flex items-center justify-center gap-2",children:e.jsx(fe,{children:e.jsxs(he,{children:[e.jsx(w,{children:e.jsx(pe,{onClick:h,disabled:d<=1})}),e.jsx(w,{children:e.jsxs(V,{variant:"bodySmall",className:"px-2",children:["Page ",d," of ",x]})}),e.jsx(w,{children:e.jsx(ge,{onClick:f,disabled:d>=x})})]})})}),i&&e.jsx("div",{className:"flex justify-center py-4",children:e.jsx(v,{className:"h-8 w-32"})})]})]})}function Ue(){return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(v,{className:"h-8 w-48"}),e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsx(v,{className:"h-10 w-48"}),e.jsx(v,{className:"h-10 w-48"}),e.jsx(v,{className:"h-10 w-48"})]}),e.jsx(v,{className:"h-32 w-full"}),e.jsx(v,{className:"h-64 w-full"})]})}function ct(){const t=k.useSearch(),s=k.useNavigate(),a=n=>{s({to:".",search:o=>({...o,...n}),replace:!0})};return e.jsx(l.Suspense,{fallback:e.jsx(Ue,{}),children:e.jsx(ze,{search:t,onSearchChange:a})})}export{ct as component};
2
+ //# sourceMappingURL=index-DsK1RlS9.js.map