prefect 3.6.13.dev2__py3-none-any.whl → 3.6.14.dev1__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 (226) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/_internal/compatibility/blocks.py +18 -0
  3. prefect/client/schemas/filters.py +24 -0
  4. prefect/flow_engine.py +192 -10
  5. prefect/flows.py +61 -2
  6. prefect/results.py +262 -21
  7. prefect/runner/runner.py +29 -82
  8. prefect/runner/storage.py +3 -2
  9. prefect/server/schemas/filters.py +45 -0
  10. prefect/server/ui-v2/assets/{artifact-card-C8JEQRHl.js → artifact-card-DkgEVahF.js} +2 -2
  11. prefect/server/ui-v2/assets/{artifact-card-C8JEQRHl.js.map → artifact-card-DkgEVahF.js.map} +1 -1
  12. prefect/server/ui-v2/assets/{artifact._id-67V8kTg9.js → artifact._id-C7yJhkKY.js} +2 -2
  13. prefect/server/ui-v2/assets/{artifact._id-67V8kTg9.js.map → artifact._id-C7yJhkKY.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{automation-wizard-DuxZ47Nn.js → automation-wizard-BLI4sqs9.js} +2 -2
  15. prefect/server/ui-v2/assets/{automation-wizard-DuxZ47Nn.js.map → automation-wizard-BLI4sqs9.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{automation._id-D8S8r4Ji.js → automation._id-OLes3du9.js} +2 -2
  17. prefect/server/ui-v2/assets/{automation._id-D8S8r4Ji.js.map → automation._id-OLes3du9.js.map} +1 -1
  18. prefect/server/ui-v2/assets/{automation_._id.edit-C1fOM0Hx.js → automation_._id.edit-QrSzkDDB.js} +2 -2
  19. prefect/server/ui-v2/assets/{automation_._id.edit-C1fOM0Hx.js.map → automation_._id.edit-QrSzkDDB.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{automations-header-DrijTNGi.js → automations-header-BoJc9HK8.js} +2 -2
  21. prefect/server/ui-v2/assets/{automations-header-DrijTNGi.js.map → automations-header-BoJc9HK8.js.map} +1 -1
  22. prefect/server/ui-v2/assets/{base-job-template-form-section-BDkqOkpe.js → base-job-template-form-section-Br6s0jNS.js} +2 -2
  23. prefect/server/ui-v2/assets/{base-job-template-form-section-BDkqOkpe.js.map → base-job-template-form-section-Br6s0jNS.js.map} +1 -1
  24. prefect/server/ui-v2/assets/{block-type-details-CrFHWH5D.js → block-type-details-BSbBP-Nm.js} +2 -2
  25. prefect/server/ui-v2/assets/{block-type-details-CrFHWH5D.js.map → block-type-details-BSbBP-Nm.js.map} +1 -1
  26. prefect/server/ui-v2/assets/block-type-logo-DNFERTyH.js +2 -0
  27. prefect/server/ui-v2/assets/{block-type-logo-WQNm0PzP.js.map → block-type-logo-DNFERTyH.js.map} +1 -1
  28. prefect/server/ui-v2/assets/{block._id-C3gN1Ae8.js → block._id-DO6Hulrv.js} +2 -2
  29. prefect/server/ui-v2/assets/{block._id-C3gN1Ae8.js.map → block._id-DO6Hulrv.js.map} +1 -1
  30. prefect/server/ui-v2/assets/{block_._id.edit-DzPuSvat.js → block_._id.edit-BWF0TQvv.js} +2 -2
  31. prefect/server/ui-v2/assets/{block_._id.edit-DzPuSvat.js.map → block_._id.edit-BWF0TQvv.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{catalog-T-7MqsyE.js → catalog-BlaqZP0r.js} +2 -2
  33. prefect/server/ui-v2/assets/{catalog-T-7MqsyE.js.map → catalog-BlaqZP0r.js.map} +1 -1
  34. prefect/server/ui-v2/assets/{catalog_._slug-DMOI61fc.js → catalog_._slug-BZWiMtjq.js} +2 -2
  35. prefect/server/ui-v2/assets/{catalog_._slug-DMOI61fc.js.map → catalog_._slug-BZWiMtjq.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{catalog_._slug_.create-l9bGUPi-.js → catalog_._slug_.create-oHffbeMs.js} +2 -2
  37. prefect/server/ui-v2/assets/{catalog_._slug_.create-l9bGUPi-.js.map → catalog_._slug_.create-oHffbeMs.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{collapsible-DM-Ze5-Y.js → collapsible-D45P93xU.js} +2 -2
  39. prefect/server/ui-v2/assets/{collapsible-DM-Ze5-Y.js.map → collapsible-D45P93xU.js.map} +1 -1
  40. prefect/server/ui-v2/assets/{concurrency-limit._id-BHEt9viF.js → concurrency-limit._id-B6oyPVya.js} +2 -2
  41. prefect/server/ui-v2/assets/{concurrency-limit._id-BHEt9viF.js.map → concurrency-limit._id-B6oyPVya.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{create-BMxUOyN5.js → create-CcYMd6w6.js} +2 -2
  43. prefect/server/ui-v2/assets/{create-BMxUOyN5.js.map → create-CcYMd6w6.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{create-Cq-EAHVk.js → create-DK1WvDhf.js} +2 -2
  45. prefect/server/ui-v2/assets/{create-Cq-EAHVk.js.map → create-DK1WvDhf.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{data-table-Bw8TZx9D.js → data-table-B_iyrrTm.js} +2 -2
  47. prefect/server/ui-v2/assets/{data-table-Bw8TZx9D.js.map → data-table-B_iyrrTm.js.map} +1 -1
  48. prefect/server/ui-v2/assets/{delete-confirmation-dialog-CTdWZlGM.js → delete-confirmation-dialog-7GKqeKy1.js} +2 -2
  49. prefect/server/ui-v2/assets/{delete-confirmation-dialog-CTdWZlGM.js.map → delete-confirmation-dialog-7GKqeKy1.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{deployment-action-header-BObYqmI_.js → deployment-action-header-DrvnfE9Y.js} +2 -2
  51. prefect/server/ui-v2/assets/{deployment-action-header-BObYqmI_.js.map → deployment-action-header-DrvnfE9Y.js.map} +1 -1
  52. prefect/server/ui-v2/assets/{deployment-form-CntyhRrK.js → deployment-form-DsAij22s.js} +3 -3
  53. prefect/server/ui-v2/assets/{deployment-form-CntyhRrK.js.map → deployment-form-DsAij22s.js.map} +1 -1
  54. prefect/server/ui-v2/assets/{deployment-links-DBUSCaxB.js → deployment-links-BwqfKWQX.js} +2 -2
  55. prefect/server/ui-v2/assets/{deployment-links-DBUSCaxB.js.map → deployment-links-BwqfKWQX.js.map} +1 -1
  56. prefect/server/ui-v2/assets/{deployment._id-BXanVFA8.js → deployment._id-E5e5s6bO.js} +2 -2
  57. prefect/server/ui-v2/assets/{deployment._id-BXanVFA8.js.map → deployment._id-E5e5s6bO.js.map} +1 -1
  58. prefect/server/ui-v2/assets/{deployment._id-Q5cvHMX9.js → deployment._id-U6KrtWw0.js} +2 -2
  59. prefect/server/ui-v2/assets/{deployment._id-Q5cvHMX9.js.map → deployment._id-U6KrtWw0.js.map} +1 -1
  60. prefect/server/ui-v2/assets/deployment_._id.duplicate-C_kNyCA9.js +2 -0
  61. prefect/server/ui-v2/assets/{deployment_._id.duplicate-DB-4hHHc.js.map → deployment_._id.duplicate-C_kNyCA9.js.map} +1 -1
  62. prefect/server/ui-v2/assets/deployment_._id.edit-BP8pfTOR.js +2 -0
  63. prefect/server/ui-v2/assets/{deployment_._id.edit-CWf1RIGy.js.map → deployment_._id.edit-BP8pfTOR.js.map} +1 -1
  64. prefect/server/ui-v2/assets/{deployment_._id.run-CoHGXFoM.js → deployment_._id.run-Di3-4Mtk.js} +2 -2
  65. prefect/server/ui-v2/assets/{deployment_._id.run-CoHGXFoM.js.map → deployment_._id.run-Di3-4Mtk.js.map} +1 -1
  66. prefect/server/ui-v2/assets/{dropdown-menu-CT-s-V7d.js → dropdown-menu-iS8iJMpx.js} +2 -2
  67. prefect/server/ui-v2/assets/{dropdown-menu-CT-s-V7d.js.map → dropdown-menu-iS8iJMpx.js.map} +1 -1
  68. prefect/server/ui-v2/assets/{event._eventDate._eventId-BITo_GYL.js → event._eventDate._eventId-CG15qDSZ.js} +2 -2
  69. prefect/server/ui-v2/assets/{event._eventDate._eventId-BITo_GYL.js.map → event._eventDate._eventId-CG15qDSZ.js.map} +1 -1
  70. prefect/server/ui-v2/assets/flow-run-graph-B1vF1w0Z.js +2 -0
  71. prefect/server/ui-v2/assets/flow-run-graph-B1vF1w0Z.js.map +1 -0
  72. prefect/server/ui-v2/assets/flow-run._id-BHY61H6u.js +4 -0
  73. prefect/server/ui-v2/assets/flow-run._id-BHY61H6u.js.map +1 -0
  74. prefect/server/ui-v2/assets/{flow-run._id-BtSgRDtA.js → flow-run._id-D_eAHZ5z.js} +2 -2
  75. prefect/server/ui-v2/assets/{flow-run._id-BtSgRDtA.js.map → flow-run._id-D_eAHZ5z.js.map} +1 -1
  76. prefect/server/ui-v2/assets/{flow-run._id-Bbm9OpDi.js → flow-run._id-wco0Q19f.js} +2 -2
  77. prefect/server/ui-v2/assets/{flow-run._id-Bbm9OpDi.js.map → flow-run._id-wco0Q19f.js.map} +1 -1
  78. prefect/server/ui-v2/assets/{flow-runs-pagination-LrU9Aio8.js → flow-runs-pagination-DzGHOht3.js} +2 -2
  79. prefect/server/ui-v2/assets/{flow-runs-pagination-LrU9Aio8.js.map → flow-runs-pagination-DzGHOht3.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{flow._id-BJBRokk4.js → flow._id-Dn2so3rK.js} +2 -2
  81. prefect/server/ui-v2/assets/{flow._id-BJBRokk4.js.map → flow._id-Dn2so3rK.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{form-CVSlEnl8.js → form-rC8pxeRl.js} +2 -2
  83. prefect/server/ui-v2/assets/{form-CVSlEnl8.js.map → form-rC8pxeRl.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{header-4plZZheZ.js → header-C0zV3WDn.js} +2 -2
  85. prefect/server/ui-v2/assets/{header-4plZZheZ.js.map → header-C0zV3WDn.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{header-D3uM8_xM.js → header-C6ko3O7G.js} +2 -2
  87. prefect/server/ui-v2/assets/{header-D3uM8_xM.js.map → header-C6ko3O7G.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{header-9rXZ4r39.js → header-CuAwmJ64.js} +2 -2
  89. prefect/server/ui-v2/assets/{header-9rXZ4r39.js.map → header-CuAwmJ64.js.map} +1 -1
  90. prefect/server/ui-v2/assets/{index-6OsEYhIi.js → index-0g8aAM30.js} +2 -2
  91. prefect/server/ui-v2/assets/{index-6OsEYhIi.js.map → index-0g8aAM30.js.map} +1 -1
  92. prefect/server/ui-v2/assets/{index-BeoNC2tJ.js → index-BIqzfifB.js} +2 -2
  93. prefect/server/ui-v2/assets/{index-BeoNC2tJ.js.map → index-BIqzfifB.js.map} +1 -1
  94. prefect/server/ui-v2/assets/{index-ChIrfjIW.js → index-BKbBu9gL.js} +2 -2
  95. prefect/server/ui-v2/assets/{index-ChIrfjIW.js.map → index-BKbBu9gL.js.map} +1 -1
  96. prefect/server/ui-v2/assets/{index-h9-QgNjZ.js → index-BYQ1P2TC.js} +2 -2
  97. prefect/server/ui-v2/assets/{index-h9-QgNjZ.js.map → index-BYQ1P2TC.js.map} +1 -1
  98. prefect/server/ui-v2/assets/{index-DODEq1Pi.js → index-BdgomKuA.js} +2 -2
  99. prefect/server/ui-v2/assets/{index-DODEq1Pi.js.map → index-BdgomKuA.js.map} +1 -1
  100. prefect/server/ui-v2/assets/{index-DqCPbST9.js → index-Benf9xn3.js} +2 -2
  101. prefect/server/ui-v2/assets/{index-DqCPbST9.js.map → index-Benf9xn3.js.map} +1 -1
  102. prefect/server/ui-v2/assets/{index-B7xsJ-QH.js → index-BjsWjEUO.js} +2 -2
  103. prefect/server/ui-v2/assets/{index-B7xsJ-QH.js.map → index-BjsWjEUO.js.map} +1 -1
  104. prefect/server/ui-v2/assets/{index-DicK6p3K.js → index-C3D0Re7U.js} +2 -2
  105. prefect/server/ui-v2/assets/{index-DicK6p3K.js.map → index-C3D0Re7U.js.map} +1 -1
  106. prefect/server/ui-v2/assets/{index-BlpD74iH.js → index-CCs20W5W.js} +2 -2
  107. prefect/server/ui-v2/assets/{index-BlpD74iH.js.map → index-CCs20W5W.js.map} +1 -1
  108. prefect/server/ui-v2/assets/{index-udb79rgq.js → index-CEStyUb-.js} +2 -2
  109. prefect/server/ui-v2/assets/{index-udb79rgq.js.map → index-CEStyUb-.js.map} +1 -1
  110. prefect/server/ui-v2/assets/{index-tBdv6kBF.js → index-CYpFLd7y.js} +2 -2
  111. prefect/server/ui-v2/assets/{index-tBdv6kBF.js.map → index-CYpFLd7y.js.map} +1 -1
  112. prefect/server/ui-v2/assets/{index-CDyLkbVG.js → index-CcVSC2pV.js} +2 -2
  113. prefect/server/ui-v2/assets/{index-CDyLkbVG.js.map → index-CcVSC2pV.js.map} +1 -1
  114. prefect/server/ui-v2/assets/index-Cd7pM9pk.js +17 -0
  115. prefect/server/ui-v2/assets/index-Cd7pM9pk.js.map +1 -0
  116. prefect/server/ui-v2/assets/{index-DJyKqsFO.js → index-CotXErTe.js} +2 -2
  117. prefect/server/ui-v2/assets/{index-DJyKqsFO.js.map → index-CotXErTe.js.map} +1 -1
  118. prefect/server/ui-v2/assets/{index-DxPoKag8.js → index-D8fZaZa7.js} +2 -2
  119. prefect/server/ui-v2/assets/{index-DxPoKag8.js.map → index-D8fZaZa7.js.map} +1 -1
  120. prefect/server/ui-v2/assets/{index-D6GJ4go1.js → index-DB2qeheX.js} +2 -2
  121. prefect/server/ui-v2/assets/{index-D6GJ4go1.js.map → index-DB2qeheX.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{index-CzCSgCK-.js → index-DvKYj8ko.js} +2 -2
  123. prefect/server/ui-v2/assets/{index-CzCSgCK-.js.map → index-DvKYj8ko.js.map} +1 -1
  124. prefect/server/ui-v2/assets/{index-BfJLUM7N.js → index-DwkedbVy.js} +2 -2
  125. prefect/server/ui-v2/assets/{index-BfJLUM7N.js.map → index-DwkedbVy.js.map} +1 -1
  126. prefect/server/ui-v2/assets/index-b9WBW430.css +1 -0
  127. prefect/server/ui-v2/assets/{index-CDwJvjUM.js → index-fhrsIceD.js} +2 -2
  128. prefect/server/ui-v2/assets/{index-CDwJvjUM.js.map → index-fhrsIceD.js.map} +1 -1
  129. prefect/server/ui-v2/assets/{index-D5v9S-lB.js → index-k2161reF.js} +2 -2
  130. prefect/server/ui-v2/assets/{index-D5v9S-lB.js.map → index-k2161reF.js.map} +1 -1
  131. prefect/server/ui-v2/assets/{index-Bj0OOguP.js → index-pE_31vXF.js} +2 -2
  132. prefect/server/ui-v2/assets/{index-Bj0OOguP.js.map → index-pE_31vXF.js.map} +1 -1
  133. prefect/server/ui-v2/assets/{json-input-Dt1icmrn.js → json-input-C9dkBSdc.js} +2 -2
  134. prefect/server/ui-v2/assets/{json-input-Dt1icmrn.js.map → json-input-C9dkBSdc.js.map} +1 -1
  135. prefect/server/ui-v2/assets/{key._key-Cyh5MBX_.js → key._key-BBVH44_R.js} +2 -2
  136. prefect/server/ui-v2/assets/{key._key-Cyh5MBX_.js.map → key._key-BBVH44_R.js.map} +1 -1
  137. prefect/server/ui-v2/assets/{lazy-markdown-BwIwKFRF.js → lazy-markdown-BoMKGRXo.js} +2 -2
  138. prefect/server/ui-v2/assets/{lazy-markdown-BwIwKFRF.js.map → lazy-markdown-BoMKGRXo.js.map} +1 -1
  139. prefect/server/ui-v2/assets/{login-DKXFVSwk.js → login-BmmIDesJ.js} +2 -2
  140. prefect/server/ui-v2/assets/{login-DKXFVSwk.js.map → login-BmmIDesJ.js.map} +1 -1
  141. prefect/server/ui-v2/assets/{markdown-input-Dp0mBlkV.js → markdown-input-C6P8cYT1.js} +2 -2
  142. prefect/server/ui-v2/assets/{markdown-input-Dp0mBlkV.js.map → markdown-input-C6P8cYT1.js.map} +1 -1
  143. prefect/server/ui-v2/assets/{python-example-snippet-BYwPjHI5.js → python-example-snippet-DPumgTpL.js} +3 -3
  144. prefect/server/ui-v2/assets/{python-example-snippet-BYwPjHI5.js.map → python-example-snippet-DPumgTpL.js.map} +1 -1
  145. prefect/server/ui-v2/assets/{python-input-y26XMqXw.js → python-input-DX4uV8MF.js} +2 -2
  146. prefect/server/ui-v2/assets/{python-input-y26XMqXw.js.map → python-input-DX4uV8MF.js.map} +1 -1
  147. prefect/server/ui-v2/assets/{radio-group-D0van45v.js → radio-group-DeNK-Ob0.js} +2 -2
  148. prefect/server/ui-v2/assets/{radio-group-D0van45v.js.map → radio-group-DeNK-Ob0.js.map} +1 -1
  149. prefect/server/ui-v2/assets/{route-error-state-CGGpuCGN.js → route-error-state-C9CbByMx.js} +2 -2
  150. prefect/server/ui-v2/assets/{route-error-state-CGGpuCGN.js.map → route-error-state-C9CbByMx.js.map} +1 -1
  151. prefect/server/ui-v2/assets/{schema-form-2tg5SXM4.js → schema-form-B45xnsnK.js} +2 -2
  152. prefect/server/ui-v2/assets/{schema-form-2tg5SXM4.js.map → schema-form-B45xnsnK.js.map} +1 -1
  153. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-CZt6AJ4z.js → schema-form-input-string-format-datetime-BJj81bu-.js} +4 -4
  154. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-CZt6AJ4z.js.map → schema-form-input-string-format-datetime-BJj81bu-.js.map} +1 -1
  155. prefect/server/ui-v2/assets/{settings-DDUadk_N.js → settings-CbkeWqQ9.js} +2 -2
  156. prefect/server/ui-v2/assets/{settings-DDUadk_N.js.map → settings-CbkeWqQ9.js.map} +1 -1
  157. prefect/server/ui-v2/assets/{sort-filter-D9p3cPx9.js → sort-filter-DM7SvBB0.js} +2 -2
  158. prefect/server/ui-v2/assets/{sort-filter-D9p3cPx9.js.map → sort-filter-DM7SvBB0.js.map} +1 -1
  159. prefect/server/ui-v2/assets/{table-vo9Do8sA.js → table-CEPo6xb_.js} +2 -2
  160. prefect/server/ui-v2/assets/{table-vo9Do8sA.js.map → table-CEPo6xb_.js.map} +1 -1
  161. prefect/server/ui-v2/assets/{tags-input-Ci2JQ-k3.js → tags-input-DJiZSVHp.js} +2 -2
  162. prefect/server/ui-v2/assets/{tags-input-Ci2JQ-k3.js.map → tags-input-DJiZSVHp.js.map} +1 -1
  163. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CJzPc2gw.js → task-run-concurrency-limits-reset-dialog-vJEkvqWp.js} +2 -2
  164. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CJzPc2gw.js.map → task-run-concurrency-limits-reset-dialog-vJEkvqWp.js.map} +1 -1
  165. prefect/server/ui-v2/assets/{task-run._id-D8QKG5UZ.js → task-run._id-BCnDnXrL.js} +2 -2
  166. prefect/server/ui-v2/assets/{task-run._id-D8QKG5UZ.js.map → task-run._id-BCnDnXrL.js.map} +1 -1
  167. prefect/server/ui-v2/assets/{task-run._id-CjevSs79.js → task-run._id-ByJw1K82.js} +2 -2
  168. prefect/server/ui-v2/assets/{task-run._id-CjevSs79.js.map → task-run._id-ByJw1K82.js.map} +1 -1
  169. prefect/server/ui-v2/assets/{task-runs-pagination-CifoSGct.js → task-runs-pagination-DbjB6XnY.js} +2 -2
  170. prefect/server/ui-v2/assets/{task-runs-pagination-CifoSGct.js.map → task-runs-pagination-DbjB6XnY.js.map} +1 -1
  171. prefect/server/ui-v2/assets/{textarea-BAtfAxtV.js → textarea-BX8KbLGx.js} +2 -2
  172. prefect/server/ui-v2/assets/{textarea-BAtfAxtV.js.map → textarea-BX8KbLGx.js.map} +1 -1
  173. prefect/server/ui-v2/assets/{timezone-select-QlQTZSsF.js → timezone-select-TBj2n6Ox.js} +2 -2
  174. prefect/server/ui-v2/assets/{timezone-select-QlQTZSsF.js.map → timezone-select-TBj2n6Ox.js.map} +1 -1
  175. prefect/server/ui-v2/assets/{toggle-group-BJN1vjEh.js → toggle-group-D7mfSUim.js} +2 -2
  176. prefect/server/ui-v2/assets/{toggle-group-BJN1vjEh.js.map → toggle-group-D7mfSUim.js.map} +1 -1
  177. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-eOWJYPkD.js → use-delete-automation-confirmation-dialog-BpBSjz60.js} +2 -2
  178. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-eOWJYPkD.js.map → use-delete-automation-confirmation-dialog-BpBSjz60.js.map} +1 -1
  179. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BTwSeHRM.js → use-delete-block-document-confirmation-dialog-BjKsNw6b.js} +2 -2
  180. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BTwSeHRM.js.map → use-delete-block-document-confirmation-dialog-BjKsNw6b.js.map} +1 -1
  181. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-BL_Gv9CC.js → use-flow-runs-selected-rows-B_BlBMic.js} +2 -2
  182. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-BL_Gv9CC.js.map → use-flow-runs-selected-rows-B_BlBMic.js.map} +1 -1
  183. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-TSCoomjQ.js → use-get-artifacts-flow-task-runs-BfE433bC.js} +2 -2
  184. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-TSCoomjQ.js.map → use-get-artifacts-flow-task-runs-BfE433bC.js.map} +1 -1
  185. prefect/server/ui-v2/assets/{use-quick-run-BMnCkwSv.js → use-quick-run-qrtcF-DD.js} +2 -2
  186. prefect/server/ui-v2/assets/{use-quick-run-BMnCkwSv.js.map → use-quick-run-qrtcF-DD.js.map} +1 -1
  187. prefect/server/ui-v2/assets/{use-stepper-C1wm66U2.js → use-stepper-CVy1_GBw.js} +2 -2
  188. prefect/server/ui-v2/assets/{use-stepper-C1wm66U2.js.map → use-stepper-CVy1_GBw.js.map} +1 -1
  189. prefect/server/ui-v2/assets/{utilities-DxRXxFOF.js → utilities-D5-00wjP.js} +2 -2
  190. prefect/server/ui-v2/assets/{utilities-DxRXxFOF.js.map → utilities-D5-00wjP.js.map} +1 -1
  191. prefect/server/ui-v2/assets/{vendor-graphs-Diy0Lo-N.js → vendor-graphs-R8z6S3Jg.js} +2 -2
  192. prefect/server/ui-v2/assets/{vendor-graphs-Diy0Lo-N.js.map → vendor-graphs-R8z6S3Jg.js.map} +1 -1
  193. prefect/server/ui-v2/assets/{work-pool-filter-PudrkZYj.js → work-pool-filter-D8MkTbSW.js} +2 -2
  194. prefect/server/ui-v2/assets/{work-pool-filter-PudrkZYj.js.map → work-pool-filter-D8MkTbSW.js.map} +1 -1
  195. prefect/server/ui-v2/assets/{work-pool-queue-toggle-BAOrV_0R.js → work-pool-queue-toggle-CbI7Gfu5.js} +2 -2
  196. prefect/server/ui-v2/assets/{work-pool-queue-toggle-BAOrV_0R.js.map → work-pool-queue-toggle-CbI7Gfu5.js.map} +1 -1
  197. prefect/server/ui-v2/assets/{work-pool._workPoolName-BOM3849e.js → work-pool._workPoolName-CCzzgVV2.js} +2 -2
  198. prefect/server/ui-v2/assets/{work-pool._workPoolName-BOM3849e.js.map → work-pool._workPoolName-CCzzgVV2.js.map} +1 -1
  199. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CIhcG6yr.js → work-pool_._workPoolName.edit-BAgiuU_j.js} +2 -2
  200. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CIhcG6yr.js.map → work-pool_._workPoolName.edit-BAgiuU_j.js.map} +1 -1
  201. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js → work-pool_._workPoolName.queue._workQueueName-BUawWJEy.js} +2 -2
  202. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js.map → work-pool_._workPoolName.queue._workQueueName-BUawWJEy.js.map} +1 -1
  203. prefect/server/ui-v2/assets/{work-queue-icon-text-CP4yX3uM.js → work-queue-icon-text-D_G_UCJX.js} +2 -2
  204. prefect/server/ui-v2/assets/{work-queue-icon-text-CP4yX3uM.js.map → work-queue-icon-text-D_G_UCJX.js.map} +1 -1
  205. prefect/server/ui-v2/index.html +2 -2
  206. prefect/settings/models/flows.py +14 -1
  207. prefect/settings/models/runner.py +16 -6
  208. prefect/task_engine.py +1 -3
  209. prefect/task_worker.py +1 -1
  210. prefect/tasks.py +2 -2
  211. prefect/testing/fixtures.py +23 -5
  212. {prefect-3.6.13.dev2.dist-info → prefect-3.6.14.dev1.dist-info}/METADATA +1 -1
  213. {prefect-3.6.13.dev2.dist-info → prefect-3.6.14.dev1.dist-info}/RECORD +216 -216
  214. prefect/server/ui-v2/assets/block-type-logo-WQNm0PzP.js +0 -2
  215. prefect/server/ui-v2/assets/deployment_._id.duplicate-DB-4hHHc.js +0 -2
  216. prefect/server/ui-v2/assets/deployment_._id.edit-CWf1RIGy.js +0 -2
  217. prefect/server/ui-v2/assets/flow-run-graph-DxIl6fzW.js +0 -2
  218. prefect/server/ui-v2/assets/flow-run-graph-DxIl6fzW.js.map +0 -1
  219. prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js +0 -4
  220. prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js.map +0 -1
  221. prefect/server/ui-v2/assets/index-BvSl3DKP.js +0 -17
  222. prefect/server/ui-v2/assets/index-BvSl3DKP.js.map +0 -1
  223. prefect/server/ui-v2/assets/index-NY089eTx.css +0 -1
  224. {prefect-3.6.13.dev2.dist-info → prefect-3.6.14.dev1.dist-info}/WHEEL +0 -0
  225. {prefect-3.6.13.dev2.dist-info → prefect-3.6.14.dev1.dist-info}/entry_points.txt +0 -0
  226. {prefect-3.6.13.dev2.dist-info → prefect-3.6.14.dev1.dist-info}/licenses/LICENSE +0 -0
@@ -1,2 +1,2 @@
1
- import{j as e,L as D,u as f}from"./vendor-tanstack-BK8oseNA.js";import{q as g,I as x,y as s,d6 as y}from"./index-BvSl3DKP.js";import{D as w,a as j,b as C,c as B,d as m}from"./dropdown-menu-CT-s-V7d.js";import{u as A}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const E=({blockDocument:n,onDelete:a})=>{const t=u=>{navigator.clipboard.writeText(u),s.success("Copied to clipboard!")},{id:c,name:r}=n;return e.jsxs(w,{children:[e.jsx(j,{asChild:!0,children:e.jsxs(g,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(x,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(C,{align:"end",children:[e.jsx(B,{children:"Actions"}),r&&e.jsx(m,{onClick:()=>t(r),children:"Copy Name"}),e.jsx(D,{to:"/blocks/block/$id/edit",params:{id:c},children:e.jsx(m,{children:"Edit"})}),e.jsx(m,{onClick:a,children:"Delete"})]})]})},I=()=>{const n=f(),[a,t]=A(),{deleteBlockDocument:c,mutateAsync:r}=y();return[a,(o,{shouldNavigate:p=!1,onSuccess:h=()=>{}}={})=>{if(Array.isArray(o)){const d=async()=>{try{await Promise.all(o.map(l=>r(l))),s.success("Blocks deleted"),p&&n({to:"/blocks"})}catch(l){const k=l instanceof Error?l.message:"Unknown error while deleting block.";s.error(k),console.error(k)}},i=o.length>1?`Are you sure you want to delete these ${o.length} selected blocks?`:"Are you sure you want to delete this selected block?";t({title:"Delete Blocks",description:i,onConfirm:()=>{d(),h()}})}else t({title:"Delete Block",description:`Are you sure you want to delete ${o.name?o.name:"this block"}?`,onConfirm:()=>{c(o.id,{onSuccess:()=>{s.success("Block deleted"),p&&n({to:"/blocks"}),h()},onError:d=>{const i=d.message||"Unknown error while deleting block.";s.error(i),console.error(i)}})}})}]};export{E as B,I as u};
2
- //# sourceMappingURL=use-delete-block-document-confirmation-dialog-BTwSeHRM.js.map
1
+ import{j as e,L as D,u as f}from"./vendor-tanstack-BK8oseNA.js";import{q as g,I as x,y as s,d7 as y}from"./index-Cd7pM9pk.js";import{D as w,a as j,b as C,c as B,d as m}from"./dropdown-menu-iS8iJMpx.js";import{u as A}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const E=({blockDocument:n,onDelete:a})=>{const t=u=>{navigator.clipboard.writeText(u),s.success("Copied to clipboard!")},{id:c,name:r}=n;return e.jsxs(w,{children:[e.jsx(j,{asChild:!0,children:e.jsxs(g,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(x,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(C,{align:"end",children:[e.jsx(B,{children:"Actions"}),r&&e.jsx(m,{onClick:()=>t(r),children:"Copy Name"}),e.jsx(D,{to:"/blocks/block/$id/edit",params:{id:c},children:e.jsx(m,{children:"Edit"})}),e.jsx(m,{onClick:a,children:"Delete"})]})]})},I=()=>{const n=f(),[a,t]=A(),{deleteBlockDocument:c,mutateAsync:r}=y();return[a,(o,{shouldNavigate:p=!1,onSuccess:h=()=>{}}={})=>{if(Array.isArray(o)){const d=async()=>{try{await Promise.all(o.map(l=>r(l))),s.success("Blocks deleted"),p&&n({to:"/blocks"})}catch(l){const k=l instanceof Error?l.message:"Unknown error while deleting block.";s.error(k),console.error(k)}},i=o.length>1?`Are you sure you want to delete these ${o.length} selected blocks?`:"Are you sure you want to delete this selected block?";t({title:"Delete Blocks",description:i,onConfirm:()=>{d(),h()}})}else t({title:"Delete Block",description:`Are you sure you want to delete ${o.name?o.name:"this block"}?`,onConfirm:()=>{c(o.id,{onSuccess:()=>{s.success("Block deleted"),p&&n({to:"/blocks"}),h()},onError:d=>{const i=d.message||"Unknown error while deleting block.";s.error(i),console.error(i)}})}})}]};export{E as B,I as u};
2
+ //# sourceMappingURL=use-delete-block-document-confirmation-dialog-BjKsNw6b.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-delete-block-document-confirmation-dialog-BTwSeHRM.js","sources":["../../src/components/blocks/block-document-action-menu/block-document-action-menu.tsx","../../src/components/blocks/use-delete-block-document-confirmation-dialog.ts"],"sourcesContent":["import { Link } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport type { BlockDocument } from \"@/api/block-documents\";\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\nexport type BlockDocumentActionMenuProps = {\n\tblockDocument: BlockDocument;\n\tonDelete: () => void;\n};\n\nexport const BlockDocumentActionMenu = ({\n\tblockDocument,\n\tonDelete,\n}: BlockDocumentActionMenuProps) => {\n\tconst handleCopyName = (_name: string) => {\n\t\tvoid navigator.clipboard.writeText(_name);\n\t\ttoast.success(\"Copied to clipboard!\");\n\t};\n\n\tconst { id, name } = blockDocument;\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{name && (\n\t\t\t\t\t<DropdownMenuItem onClick={() => handleCopyName(name)}>\n\t\t\t\t\t\tCopy Name\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t)}\n\t\t\t\t<Link to=\"/blocks/block/$id/edit\" params={{ id }}>\n\t\t\t\t\t<DropdownMenuItem>Edit</DropdownMenuItem>\n\t\t\t\t</Link>\n\t\t\t\t<DropdownMenuItem onClick={onDelete}>Delete</DropdownMenuItem>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n};\n","import { useNavigate } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport {\n\ttype BlockDocument,\n\tuseDeleteBlockDocument,\n} from \"@/api/block-documents\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteBlockDocumentConfirmationDialog = () => {\n\tconst navigate = useNavigate();\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { deleteBlockDocument, mutateAsync } = useDeleteBlockDocument();\n\n\tconst handleConfirmDelete = (\n\t\t/** Pass a block document or list of block document ids for bulk edit */\n\t\tblockDocument: BlockDocument | Array<string>,\n\t\t{\n\t\t\tshouldNavigate = false,\n\t\t\tonSuccess = () => {},\n\t\t}: {\n\t\t\t/** Should navigate back to /blocks */\n\t\t\tshouldNavigate?: boolean;\n\t\t\tonSuccess?: () => void;\n\t\t} = {},\n\t) => {\n\t\tif (Array.isArray(blockDocument)) {\n\t\t\tconst handleDeleteBlockDocuments = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.all(blockDocument.map((id) => mutateAsync(id)));\n\t\t\t\t\ttoast.success(\"Blocks deleted\");\n\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\tvoid navigate({ to: \"/blocks\" });\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t: \"Unknown error while deleting block.\";\n\t\t\t\t\ttoast.error(message);\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst description =\n\t\t\t\tblockDocument.length > 1\n\t\t\t\t\t? `Are you sure you want to delete these ${blockDocument.length} selected blocks?`\n\t\t\t\t\t: \"Are you sure you want to delete this selected block?\";\n\n\t\t\tconfirmDelete({\n\t\t\t\ttitle: \"Delete Blocks\",\n\t\t\t\tdescription,\n\t\t\t\tonConfirm: () => {\n\t\t\t\t\tvoid handleDeleteBlockDocuments();\n\t\t\t\t\tonSuccess();\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tconfirmDelete({\n\t\t\t\ttitle: \"Delete Block\",\n\t\t\t\tdescription: `Are you sure you want to delete ${blockDocument.name ? blockDocument.name : \"this block\"}?`,\n\t\t\t\tonConfirm: () => {\n\t\t\t\t\tdeleteBlockDocument(blockDocument.id, {\n\t\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\t\ttoast.success(\"Block deleted\");\n\t\t\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\t\t\tvoid navigate({ to: \"/blocks\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonSuccess();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\t\terror.message || \"Unknown error while deleting block.\";\n\t\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t};\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n"],"names":["BlockDocumentActionMenu","blockDocument","onDelete","handleCopyName","_name","toast","id","name","DropdownMenu","jsx","DropdownMenuTrigger","jsxs","Button","Icon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuItem","Link","useDeleteBlockDocumentConfirmationDialog","navigate","useNavigate","dialogState","confirmDelete","useDeleteConfirmationDialog","deleteBlockDocument","mutateAsync","useDeleteBlockDocument","shouldNavigate","onSuccess","handleDeleteBlockDocuments","error","message","description"],"mappings":"2QAkBO,MAAMA,EAA0B,CAAC,CACvC,cAAAC,EACA,SAAAC,CACD,IAAoC,CACnC,MAAMC,EAAkBC,GAAkB,CACpC,UAAU,UAAU,UAAUA,CAAK,EACxCC,EAAM,QAAQ,sBAAsB,CACrC,EAEM,CAAE,GAAAC,EAAI,KAAAC,CAAA,EAASN,EAErB,cACEO,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAoB,QAAO,GAC3B,SAAAC,EAAAA,KAACC,GAAO,QAAQ,UAAU,UAAU,aACnC,SAAA,CAAAH,EAAAA,IAAC,OAAA,CAAK,UAAU,UAAU,SAAA,YAAS,EACnCA,EAAAA,IAACI,EAAA,CAAK,GAAG,eAAe,UAAU,QAAA,CAAS,CAAA,CAAA,CAC5C,CAAA,CACD,EACAF,EAAAA,KAACG,EAAA,CAAoB,MAAM,MAC1B,SAAA,CAAAL,EAAAA,IAACM,GAAkB,SAAA,SAAA,CAAO,EACzBR,SACCS,EAAA,CAAiB,QAAS,IAAMb,EAAeI,CAAI,EAAG,SAAA,YAEvD,EAEDE,EAAAA,IAACQ,EAAA,CAAK,GAAG,yBAAyB,OAAQ,CAAE,GAAAX,CAAA,EAC3C,SAAAG,EAAAA,IAACO,EAAA,CAAiB,SAAA,MAAA,CAAI,CAAA,CACvB,EACAP,EAAAA,IAACO,EAAA,CAAiB,QAASd,EAAU,SAAA,QAAA,CAAM,CAAA,CAAA,CAC5C,CAAA,EACD,CAEF,EC3CagB,EAA2C,IAAM,CAC7D,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAaC,CAAa,EAAIC,EAAA,EAE/B,CAAE,oBAAAC,EAAqB,YAAAC,CAAA,EAAgBC,EAAA,EAsE7C,MAAO,CAACL,EApEoB,CAE3BpB,EACA,CACC,eAAA0B,EAAiB,GACjB,UAAAC,EAAY,IAAM,CAAC,CAAA,EAKhB,KACA,CACJ,GAAI,MAAM,QAAQ3B,CAAa,EAAG,CACjC,MAAM4B,EAA6B,SAAY,CAC9C,GAAI,CACH,MAAM,QAAQ,IAAI5B,EAAc,IAAKK,GAAOmB,EAAYnB,CAAE,CAAC,CAAC,EAC5DD,EAAM,QAAQ,gBAAgB,EAC1BsB,GACER,EAAS,CAAE,GAAI,UAAW,CAEjC,OAASW,EAAO,CACf,MAAMC,EACLD,aAAiB,MACdA,EAAM,QACN,sCACJzB,EAAM,MAAM0B,CAAO,EACnB,QAAQ,MAAMA,CAAO,CACtB,CACD,EAEMC,EACL/B,EAAc,OAAS,EACpB,yCAAyCA,EAAc,MAAM,oBAC7D,uDAEJqB,EAAc,CACb,MAAO,gBACP,YAAAU,EACA,UAAW,IAAM,CACXH,EAAA,EACLD,EAAA,CACD,CAAA,CACA,CACF,MACCN,EAAc,CACb,MAAO,eACP,YAAa,mCAAmCrB,EAAc,KAAOA,EAAc,KAAO,YAAY,IACtG,UAAW,IAAM,CAChBuB,EAAoBvB,EAAc,GAAI,CACrC,UAAW,IAAM,CAChBI,EAAM,QAAQ,eAAe,EACzBsB,GACER,EAAS,CAAE,GAAI,UAAW,EAEhCS,EAAA,CACD,EACA,QAAUE,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,sCAClBzB,EAAM,MAAM0B,CAAO,EACnB,QAAQ,MAAMA,CAAO,CACtB,CAAA,CACA,CACF,CAAA,CACA,CAEH,CAEwC,CACzC"}
1
+ {"version":3,"file":"use-delete-block-document-confirmation-dialog-BjKsNw6b.js","sources":["../../src/components/blocks/block-document-action-menu/block-document-action-menu.tsx","../../src/components/blocks/use-delete-block-document-confirmation-dialog.ts"],"sourcesContent":["import { Link } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport type { BlockDocument } from \"@/api/block-documents\";\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\nexport type BlockDocumentActionMenuProps = {\n\tblockDocument: BlockDocument;\n\tonDelete: () => void;\n};\n\nexport const BlockDocumentActionMenu = ({\n\tblockDocument,\n\tonDelete,\n}: BlockDocumentActionMenuProps) => {\n\tconst handleCopyName = (_name: string) => {\n\t\tvoid navigator.clipboard.writeText(_name);\n\t\ttoast.success(\"Copied to clipboard!\");\n\t};\n\n\tconst { id, name } = blockDocument;\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{name && (\n\t\t\t\t\t<DropdownMenuItem onClick={() => handleCopyName(name)}>\n\t\t\t\t\t\tCopy Name\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t)}\n\t\t\t\t<Link to=\"/blocks/block/$id/edit\" params={{ id }}>\n\t\t\t\t\t<DropdownMenuItem>Edit</DropdownMenuItem>\n\t\t\t\t</Link>\n\t\t\t\t<DropdownMenuItem onClick={onDelete}>Delete</DropdownMenuItem>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n};\n","import { useNavigate } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport {\n\ttype BlockDocument,\n\tuseDeleteBlockDocument,\n} from \"@/api/block-documents\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteBlockDocumentConfirmationDialog = () => {\n\tconst navigate = useNavigate();\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { deleteBlockDocument, mutateAsync } = useDeleteBlockDocument();\n\n\tconst handleConfirmDelete = (\n\t\t/** Pass a block document or list of block document ids for bulk edit */\n\t\tblockDocument: BlockDocument | Array<string>,\n\t\t{\n\t\t\tshouldNavigate = false,\n\t\t\tonSuccess = () => {},\n\t\t}: {\n\t\t\t/** Should navigate back to /blocks */\n\t\t\tshouldNavigate?: boolean;\n\t\t\tonSuccess?: () => void;\n\t\t} = {},\n\t) => {\n\t\tif (Array.isArray(blockDocument)) {\n\t\t\tconst handleDeleteBlockDocuments = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.all(blockDocument.map((id) => mutateAsync(id)));\n\t\t\t\t\ttoast.success(\"Blocks deleted\");\n\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\tvoid navigate({ to: \"/blocks\" });\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t: \"Unknown error while deleting block.\";\n\t\t\t\t\ttoast.error(message);\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst description =\n\t\t\t\tblockDocument.length > 1\n\t\t\t\t\t? `Are you sure you want to delete these ${blockDocument.length} selected blocks?`\n\t\t\t\t\t: \"Are you sure you want to delete this selected block?\";\n\n\t\t\tconfirmDelete({\n\t\t\t\ttitle: \"Delete Blocks\",\n\t\t\t\tdescription,\n\t\t\t\tonConfirm: () => {\n\t\t\t\t\tvoid handleDeleteBlockDocuments();\n\t\t\t\t\tonSuccess();\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tconfirmDelete({\n\t\t\t\ttitle: \"Delete Block\",\n\t\t\t\tdescription: `Are you sure you want to delete ${blockDocument.name ? blockDocument.name : \"this block\"}?`,\n\t\t\t\tonConfirm: () => {\n\t\t\t\t\tdeleteBlockDocument(blockDocument.id, {\n\t\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\t\ttoast.success(\"Block deleted\");\n\t\t\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\t\t\tvoid navigate({ to: \"/blocks\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonSuccess();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\t\terror.message || \"Unknown error while deleting block.\";\n\t\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t};\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n"],"names":["BlockDocumentActionMenu","blockDocument","onDelete","handleCopyName","_name","toast","id","name","DropdownMenu","jsx","DropdownMenuTrigger","jsxs","Button","Icon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuItem","Link","useDeleteBlockDocumentConfirmationDialog","navigate","useNavigate","dialogState","confirmDelete","useDeleteConfirmationDialog","deleteBlockDocument","mutateAsync","useDeleteBlockDocument","shouldNavigate","onSuccess","handleDeleteBlockDocuments","error","message","description"],"mappings":"2QAkBO,MAAMA,EAA0B,CAAC,CACvC,cAAAC,EACA,SAAAC,CACD,IAAoC,CACnC,MAAMC,EAAkBC,GAAkB,CACpC,UAAU,UAAU,UAAUA,CAAK,EACxCC,EAAM,QAAQ,sBAAsB,CACrC,EAEM,CAAE,GAAAC,EAAI,KAAAC,CAAA,EAASN,EAErB,cACEO,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAoB,QAAO,GAC3B,SAAAC,EAAAA,KAACC,GAAO,QAAQ,UAAU,UAAU,aACnC,SAAA,CAAAH,EAAAA,IAAC,OAAA,CAAK,UAAU,UAAU,SAAA,YAAS,EACnCA,EAAAA,IAACI,EAAA,CAAK,GAAG,eAAe,UAAU,QAAA,CAAS,CAAA,CAAA,CAC5C,CAAA,CACD,EACAF,EAAAA,KAACG,EAAA,CAAoB,MAAM,MAC1B,SAAA,CAAAL,EAAAA,IAACM,GAAkB,SAAA,SAAA,CAAO,EACzBR,SACCS,EAAA,CAAiB,QAAS,IAAMb,EAAeI,CAAI,EAAG,SAAA,YAEvD,EAEDE,EAAAA,IAACQ,EAAA,CAAK,GAAG,yBAAyB,OAAQ,CAAE,GAAAX,CAAA,EAC3C,SAAAG,EAAAA,IAACO,EAAA,CAAiB,SAAA,MAAA,CAAI,CAAA,CACvB,EACAP,EAAAA,IAACO,EAAA,CAAiB,QAASd,EAAU,SAAA,QAAA,CAAM,CAAA,CAAA,CAC5C,CAAA,EACD,CAEF,EC3CagB,EAA2C,IAAM,CAC7D,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAaC,CAAa,EAAIC,EAAA,EAE/B,CAAE,oBAAAC,EAAqB,YAAAC,CAAA,EAAgBC,EAAA,EAsE7C,MAAO,CAACL,EApEoB,CAE3BpB,EACA,CACC,eAAA0B,EAAiB,GACjB,UAAAC,EAAY,IAAM,CAAC,CAAA,EAKhB,KACA,CACJ,GAAI,MAAM,QAAQ3B,CAAa,EAAG,CACjC,MAAM4B,EAA6B,SAAY,CAC9C,GAAI,CACH,MAAM,QAAQ,IAAI5B,EAAc,IAAKK,GAAOmB,EAAYnB,CAAE,CAAC,CAAC,EAC5DD,EAAM,QAAQ,gBAAgB,EAC1BsB,GACER,EAAS,CAAE,GAAI,UAAW,CAEjC,OAASW,EAAO,CACf,MAAMC,EACLD,aAAiB,MACdA,EAAM,QACN,sCACJzB,EAAM,MAAM0B,CAAO,EACnB,QAAQ,MAAMA,CAAO,CACtB,CACD,EAEMC,EACL/B,EAAc,OAAS,EACpB,yCAAyCA,EAAc,MAAM,oBAC7D,uDAEJqB,EAAc,CACb,MAAO,gBACP,YAAAU,EACA,UAAW,IAAM,CACXH,EAAA,EACLD,EAAA,CACD,CAAA,CACA,CACF,MACCN,EAAc,CACb,MAAO,eACP,YAAa,mCAAmCrB,EAAc,KAAOA,EAAc,KAAO,YAAY,IACtG,UAAW,IAAM,CAChBuB,EAAoBvB,EAAc,GAAI,CACrC,UAAW,IAAM,CAChBI,EAAM,QAAQ,eAAe,EACzBsB,GACER,EAAS,CAAE,GAAI,UAAW,EAEhCS,EAAA,CACD,EACA,QAAUE,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,sCAClBzB,EAAM,MAAM0B,CAAO,EACnB,QAAQ,MAAMA,CAAO,CACtB,CAAA,CACA,CACF,CAAA,CACA,CAEH,CAEwC,CACzC"}
@@ -1,2 +1,2 @@
1
- import{j as s,r as x}from"./vendor-tanstack-BK8oseNA.js";import{ck as j,y as w,al as h,N as g,q as D,I as y,ak as S}from"./index-BvSl3DKP.js";import{D as C}from"./delete-confirmation-dialog-CTdWZlGM.js";import{u as F}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const k=()=>{const[o,t]=F(),{mutateAsync:n}=j(),a=async(u,i=()=>{})=>{try{const c=await Promise.allSettled(u.map(r=>n(r))),{numFails:l,numSuccess:e}=c.reduce((r,m)=>(m.status==="rejected"?r.numFails+=1:r.numSuccess+=1,r),{numFails:0,numSuccess:0});l>1?w.error(`${l} flow runs failed to delete`):l===1?w.error("Flow run failed to delete"):e>1?w.success(`${e} flow runs deleted`):w.success("Flow run deleted")}catch(c){console.error("Unknown error while deleting flow run.",c)}finally{i()}};return[o,(u,i=()=>{})=>t({title:"Delete Flow Runs",description:"Are you sure you want to delete selected flow runs?",onConfirm:()=>{a(u,i)}})]},T=({count:o=0,...t})=>"results"in t&&"setSelectedRows"in t&&"selectedRows"in t?s.jsx(R,{count:o,...t}):s.jsxs(h,{variant:"bodySmall",className:"text-muted-foreground",children:[o," ",g(o,"Flow run")]});function R({count:o=0,results:t=[],setSelectedRows:n,selectedRows:a}){const[d,u]=k(),i=x.useMemo(()=>t.map(({id:e})=>e),[t]),c=Array.from(a),l=()=>{const e=i.every(f=>a.has(f)),r=i.some(f=>a.has(f));let m=!1;return e?m=!0:r&&(m="indeterminate"),s.jsx(S,{className:"block",checked:m,onCheckedChange:f=>{n(f?new Set(i):new Set)},"aria-label":"Toggle all"})};return a.size>0?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(l,{}),s.jsxs(h,{variant:"bodySmall",className:"text-muted-foreground",children:[c.length," selected"]}),s.jsx(D,{"aria-label":"Delete rows",size:"icon",variant:"secondary",onClick:()=>{u(c,()=>n(new Set))},children:s.jsx(y,{id:"Trash2",className:"size-4"})})]}),s.jsx(C,{...d})]}):s.jsxs("div",{className:"flex items-center gap-2",children:[t&&n&&a&&s.jsx(S,{className:"block",checked:!1,onCheckedChange:e=>{n(new Set(e?i:void 0))},"aria-label":"Toggle all"}),s.jsxs(h,{variant:"bodySmall",className:"text-muted-foreground",children:[o," ",g(o,"Flow run")]})]})}const z=o=>{const[t,n]=x.useState(new Set(o)),a=l=>n(e=>new Set(e).add(l)),d=l=>n(e=>{const r=new Set(e);return r.delete(l),r});return[t,n,{addRow:a,removeRow:d,onSelectRow:(l,e)=>{e?a(l):d(l)},clearSet:()=>n(new Set)}]};export{T as F,z as u};
2
- //# sourceMappingURL=use-flow-runs-selected-rows-BL_Gv9CC.js.map
1
+ import{j as s,r as x}from"./vendor-tanstack-BK8oseNA.js";import{cl as j,y as w,al as h,N as g,q as D,I as y,ak as S}from"./index-Cd7pM9pk.js";import{D as C}from"./delete-confirmation-dialog-7GKqeKy1.js";import{u as F}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const k=()=>{const[o,t]=F(),{mutateAsync:n}=j(),a=async(u,i=()=>{})=>{try{const c=await Promise.allSettled(u.map(r=>n(r))),{numFails:l,numSuccess:e}=c.reduce((r,m)=>(m.status==="rejected"?r.numFails+=1:r.numSuccess+=1,r),{numFails:0,numSuccess:0});l>1?w.error(`${l} flow runs failed to delete`):l===1?w.error("Flow run failed to delete"):e>1?w.success(`${e} flow runs deleted`):w.success("Flow run deleted")}catch(c){console.error("Unknown error while deleting flow run.",c)}finally{i()}};return[o,(u,i=()=>{})=>t({title:"Delete Flow Runs",description:"Are you sure you want to delete selected flow runs?",onConfirm:()=>{a(u,i)}})]},T=({count:o=0,...t})=>"results"in t&&"setSelectedRows"in t&&"selectedRows"in t?s.jsx(R,{count:o,...t}):s.jsxs(h,{variant:"bodySmall",className:"text-muted-foreground",children:[o," ",g(o,"Flow run")]});function R({count:o=0,results:t=[],setSelectedRows:n,selectedRows:a}){const[d,u]=k(),i=x.useMemo(()=>t.map(({id:e})=>e),[t]),c=Array.from(a),l=()=>{const e=i.every(f=>a.has(f)),r=i.some(f=>a.has(f));let m=!1;return e?m=!0:r&&(m="indeterminate"),s.jsx(S,{className:"block",checked:m,onCheckedChange:f=>{n(f?new Set(i):new Set)},"aria-label":"Toggle all"})};return a.size>0?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(l,{}),s.jsxs(h,{variant:"bodySmall",className:"text-muted-foreground",children:[c.length," selected"]}),s.jsx(D,{"aria-label":"Delete rows",size:"icon",variant:"secondary",onClick:()=>{u(c,()=>n(new Set))},children:s.jsx(y,{id:"Trash2",className:"size-4"})})]}),s.jsx(C,{...d})]}):s.jsxs("div",{className:"flex items-center gap-2",children:[t&&n&&a&&s.jsx(S,{className:"block",checked:!1,onCheckedChange:e=>{n(new Set(e?i:void 0))},"aria-label":"Toggle all"}),s.jsxs(h,{variant:"bodySmall",className:"text-muted-foreground",children:[o," ",g(o,"Flow run")]})]})}const z=o=>{const[t,n]=x.useState(new Set(o)),a=l=>n(e=>new Set(e).add(l)),d=l=>n(e=>{const r=new Set(e);return r.delete(l),r});return[t,n,{addRow:a,removeRow:d,onSelectRow:(l,e)=>{e?a(l):d(l)},clearSet:()=>n(new Set)}]};export{T as F,z as u};
2
+ //# sourceMappingURL=use-flow-runs-selected-rows-B_BlBMic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-flow-runs-selected-rows-BL_Gv9CC.js","sources":["../../src/components/flow-runs/flow-runs-list/use-delete-flow-runs-dialog.ts","../../src/components/flow-runs/flow-runs-list/flow-runs-row-count.tsx","../../src/components/flow-runs/flow-runs-list/use-flow-runs-selected-rows.ts"],"sourcesContent":["import { toast } from \"sonner\";\nimport { useDeleteFlowRun } from \"@/api/flow-runs\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteFlowRunsDialog = () => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { mutateAsync } = useDeleteFlowRun();\n\n\tconst handleDeletes = async (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) => {\n\t\ttry {\n\t\t\tconst res = await Promise.allSettled(\n\t\t\t\tflowRunIds.map((id) => mutateAsync(id)),\n\t\t\t);\n\t\t\tconst { numFails, numSuccess } = res.reduce(\n\t\t\t\t(accumulator, currentValue) => {\n\t\t\t\t\tif (currentValue.status === \"rejected\") {\n\t\t\t\t\t\taccumulator.numFails += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taccumulator.numSuccess += 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{ numFails: 0, numSuccess: 0 },\n\t\t\t);\n\t\t\tif (numFails > 1) {\n\t\t\t\ttoast.error(`${numFails} flow runs failed to delete`);\n\t\t\t} else if (numFails === 1) {\n\t\t\t\ttoast.error(\"Flow run failed to delete\");\n\t\t\t} else if (numSuccess > 1) {\n\t\t\t\ttoast.success(`${numSuccess} flow runs deleted`);\n\t\t\t} else {\n\t\t\t\ttoast.success(\"Flow run deleted\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Unknown error while deleting flow run.\", err);\n\t\t} finally {\n\t\t\tonConfirm();\n\t\t}\n\t};\n\n\tconst handleConfirmDelete = (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Flow Runs\",\n\t\t\tdescription: \"Are you sure you want to delete selected flow runs?\",\n\t\t\tonConfirm: () => {\n\t\t\t\tvoid handleDeletes(flowRunIds, onConfirm);\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import type { CheckedState } from \"@radix-ui/react-checkbox\";\nimport { useMemo } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { pluralize } from \"@/utils\";\nimport type { FlowRunCardData } from \"../flow-run-card\";\nimport { useDeleteFlowRunsDialog } from \"./use-delete-flow-runs-dialog\";\n\ntype CountOnlyProps = {\n\tcount: number | undefined;\n};\ntype SelectableProps = {\n\tcount: number | undefined;\n\tresults: Array<FlowRunCardData> | undefined;\n\tsetSelectedRows: (rows: Set<string>) => void;\n\tselectedRows: Set<string>;\n};\ntype FlowRunsRowCountProps = CountOnlyProps | SelectableProps;\n\nexport const FlowRunsRowCount = ({\n\tcount = 0,\n\t...props\n}: FlowRunsRowCountProps) => {\n\t// Selectable UX\n\tif (\n\t\t\"results\" in props &&\n\t\t\"setSelectedRows\" in props &&\n\t\t\"selectedRows\" in props\n\t) {\n\t\treturn <SelectedCount count={count} {...props} />;\n\t}\n\n\t// Count only UX\n\treturn (\n\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t</Typography>\n\t);\n};\n\nfunction SelectedCount({\n\tcount = 0,\n\tresults = [],\n\tsetSelectedRows,\n\tselectedRows,\n}: SelectableProps) {\n\tconst [deleteConfirmationDialogState, confirmDelete] =\n\t\tuseDeleteFlowRunsDialog();\n\n\tconst resultsIds = useMemo(() => results.map(({ id }) => id), [results]);\n\n\tconst selectedRowsList = Array.from(selectedRows);\n\n\tconst ToggleCheckbox = () => {\n\t\tconst isAllRowsSelected = resultsIds.every((id) => selectedRows.has(id));\n\t\tconst isSomeRowsSelected = resultsIds.some((id) => selectedRows.has(id));\n\t\tlet checkedState: CheckedState = false;\n\t\tif (isAllRowsSelected) {\n\t\t\tcheckedState = true;\n\t\t} else if (isSomeRowsSelected) {\n\t\t\tcheckedState = \"indeterminate\";\n\t\t}\n\t\treturn (\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"block\"\n\t\t\t\tchecked={checkedState}\n\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\tif (checked) {\n\t\t\t\t\t\tsetSelectedRows(new Set(resultsIds));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetSelectedRows(new Set());\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\taria-label=\"Toggle all\"\n\t\t\t/>\n\t\t);\n\t};\n\n\t// If has selected rows\n\tif (selectedRows.size > 0)\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<ToggleCheckbox />\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{selectedRowsList.length} selected\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Button\n\t\t\t\t\t\taria-label=\"Delete rows\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tconfirmDelete(selectedRowsList, () => setSelectedRows(new Set()));\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon id=\"Trash2\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t{results && setSelectedRows && selectedRows && (\n\t\t\t\t<Checkbox\n\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\tchecked={false}\n\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\tsetSelectedRows(new Set(checked ? resultsIds : undefined));\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"Toggle all\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t\t</Typography>\n\t\t</div>\n\t);\n}\n","import { useState } from \"react\";\n\nexport const useFlowRunsSelectedRows = (defaultValues?: Array<string>) => {\n\tconst [selectedRows, setSelectedRows] = useState<Set<string>>(\n\t\tnew Set(defaultValues),\n\t);\n\n\tconst addRow = (id: string) =>\n\t\tsetSelectedRows((curr) => new Set(curr).add(id));\n\n\tconst removeRow = (id: string) =>\n\t\tsetSelectedRows((curr) => {\n\t\t\tconst newValue = new Set(curr);\n\t\t\tnewValue.delete(id);\n\t\t\treturn newValue;\n\t\t});\n\n\tconst onSelectRow = (id: string, checked: boolean) => {\n\t\tif (checked) {\n\t\t\taddRow(id);\n\t\t} else {\n\t\t\tremoveRow(id);\n\t\t}\n\t};\n\n\tconst clearSet = () => setSelectedRows(new Set());\n\n\tconst utils = {\n\t\taddRow,\n\t\tremoveRow,\n\t\tonSelectRow,\n\t\tclearSet,\n\t};\n\n\treturn [selectedRows, setSelectedRows, utils] as const;\n};\n"],"names":["useDeleteFlowRunsDialog","dialogState","confirmDelete","useDeleteConfirmationDialog","mutateAsync","useDeleteFlowRun","handleDeletes","flowRunIds","onConfirm","res","id","numFails","numSuccess","accumulator","currentValue","toast","err","FlowRunsRowCount","count","props","jsx","SelectedCount","jsxs","Typography","pluralize","results","setSelectedRows","selectedRows","deleteConfirmationDialogState","resultsIds","useMemo","selectedRowsList","ToggleCheckbox","isAllRowsSelected","isSomeRowsSelected","checkedState","Checkbox","checked","Fragment","Button","Icon","DeleteConfirmationDialog","useFlowRunsSelectedRows","defaultValues","useState","addRow","curr","removeRow","newValue"],"mappings":"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"}
1
+ {"version":3,"file":"use-flow-runs-selected-rows-B_BlBMic.js","sources":["../../src/components/flow-runs/flow-runs-list/use-delete-flow-runs-dialog.ts","../../src/components/flow-runs/flow-runs-list/flow-runs-row-count.tsx","../../src/components/flow-runs/flow-runs-list/use-flow-runs-selected-rows.ts"],"sourcesContent":["import { toast } from \"sonner\";\nimport { useDeleteFlowRun } from \"@/api/flow-runs\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteFlowRunsDialog = () => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { mutateAsync } = useDeleteFlowRun();\n\n\tconst handleDeletes = async (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) => {\n\t\ttry {\n\t\t\tconst res = await Promise.allSettled(\n\t\t\t\tflowRunIds.map((id) => mutateAsync(id)),\n\t\t\t);\n\t\t\tconst { numFails, numSuccess } = res.reduce(\n\t\t\t\t(accumulator, currentValue) => {\n\t\t\t\t\tif (currentValue.status === \"rejected\") {\n\t\t\t\t\t\taccumulator.numFails += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taccumulator.numSuccess += 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{ numFails: 0, numSuccess: 0 },\n\t\t\t);\n\t\t\tif (numFails > 1) {\n\t\t\t\ttoast.error(`${numFails} flow runs failed to delete`);\n\t\t\t} else if (numFails === 1) {\n\t\t\t\ttoast.error(\"Flow run failed to delete\");\n\t\t\t} else if (numSuccess > 1) {\n\t\t\t\ttoast.success(`${numSuccess} flow runs deleted`);\n\t\t\t} else {\n\t\t\t\ttoast.success(\"Flow run deleted\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Unknown error while deleting flow run.\", err);\n\t\t} finally {\n\t\t\tonConfirm();\n\t\t}\n\t};\n\n\tconst handleConfirmDelete = (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Flow Runs\",\n\t\t\tdescription: \"Are you sure you want to delete selected flow runs?\",\n\t\t\tonConfirm: () => {\n\t\t\t\tvoid handleDeletes(flowRunIds, onConfirm);\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import type { CheckedState } from \"@radix-ui/react-checkbox\";\nimport { useMemo } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { pluralize } from \"@/utils\";\nimport type { FlowRunCardData } from \"../flow-run-card\";\nimport { useDeleteFlowRunsDialog } from \"./use-delete-flow-runs-dialog\";\n\ntype CountOnlyProps = {\n\tcount: number | undefined;\n};\ntype SelectableProps = {\n\tcount: number | undefined;\n\tresults: Array<FlowRunCardData> | undefined;\n\tsetSelectedRows: (rows: Set<string>) => void;\n\tselectedRows: Set<string>;\n};\ntype FlowRunsRowCountProps = CountOnlyProps | SelectableProps;\n\nexport const FlowRunsRowCount = ({\n\tcount = 0,\n\t...props\n}: FlowRunsRowCountProps) => {\n\t// Selectable UX\n\tif (\n\t\t\"results\" in props &&\n\t\t\"setSelectedRows\" in props &&\n\t\t\"selectedRows\" in props\n\t) {\n\t\treturn <SelectedCount count={count} {...props} />;\n\t}\n\n\t// Count only UX\n\treturn (\n\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t</Typography>\n\t);\n};\n\nfunction SelectedCount({\n\tcount = 0,\n\tresults = [],\n\tsetSelectedRows,\n\tselectedRows,\n}: SelectableProps) {\n\tconst [deleteConfirmationDialogState, confirmDelete] =\n\t\tuseDeleteFlowRunsDialog();\n\n\tconst resultsIds = useMemo(() => results.map(({ id }) => id), [results]);\n\n\tconst selectedRowsList = Array.from(selectedRows);\n\n\tconst ToggleCheckbox = () => {\n\t\tconst isAllRowsSelected = resultsIds.every((id) => selectedRows.has(id));\n\t\tconst isSomeRowsSelected = resultsIds.some((id) => selectedRows.has(id));\n\t\tlet checkedState: CheckedState = false;\n\t\tif (isAllRowsSelected) {\n\t\t\tcheckedState = true;\n\t\t} else if (isSomeRowsSelected) {\n\t\t\tcheckedState = \"indeterminate\";\n\t\t}\n\t\treturn (\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"block\"\n\t\t\t\tchecked={checkedState}\n\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\tif (checked) {\n\t\t\t\t\t\tsetSelectedRows(new Set(resultsIds));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetSelectedRows(new Set());\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\taria-label=\"Toggle all\"\n\t\t\t/>\n\t\t);\n\t};\n\n\t// If has selected rows\n\tif (selectedRows.size > 0)\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<ToggleCheckbox />\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{selectedRowsList.length} selected\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Button\n\t\t\t\t\t\taria-label=\"Delete rows\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tconfirmDelete(selectedRowsList, () => setSelectedRows(new Set()));\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon id=\"Trash2\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t{results && setSelectedRows && selectedRows && (\n\t\t\t\t<Checkbox\n\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\tchecked={false}\n\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\tsetSelectedRows(new Set(checked ? resultsIds : undefined));\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"Toggle all\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t\t</Typography>\n\t\t</div>\n\t);\n}\n","import { useState } from \"react\";\n\nexport const useFlowRunsSelectedRows = (defaultValues?: Array<string>) => {\n\tconst [selectedRows, setSelectedRows] = useState<Set<string>>(\n\t\tnew Set(defaultValues),\n\t);\n\n\tconst addRow = (id: string) =>\n\t\tsetSelectedRows((curr) => new Set(curr).add(id));\n\n\tconst removeRow = (id: string) =>\n\t\tsetSelectedRows((curr) => {\n\t\t\tconst newValue = new Set(curr);\n\t\t\tnewValue.delete(id);\n\t\t\treturn newValue;\n\t\t});\n\n\tconst onSelectRow = (id: string, checked: boolean) => {\n\t\tif (checked) {\n\t\t\taddRow(id);\n\t\t} else {\n\t\t\tremoveRow(id);\n\t\t}\n\t};\n\n\tconst clearSet = () => setSelectedRows(new Set());\n\n\tconst utils = {\n\t\taddRow,\n\t\tremoveRow,\n\t\tonSelectRow,\n\t\tclearSet,\n\t};\n\n\treturn [selectedRows, setSelectedRows, utils] as const;\n};\n"],"names":["useDeleteFlowRunsDialog","dialogState","confirmDelete","useDeleteConfirmationDialog","mutateAsync","useDeleteFlowRun","handleDeletes","flowRunIds","onConfirm","res","id","numFails","numSuccess","accumulator","currentValue","toast","err","FlowRunsRowCount","count","props","jsx","SelectedCount","jsxs","Typography","pluralize","results","setSelectedRows","selectedRows","deleteConfirmationDialogState","resultsIds","useMemo","selectedRowsList","ToggleCheckbox","isAllRowsSelected","isSomeRowsSelected","checkedState","Checkbox","checked","Fragment","Button","Icon","DeleteConfirmationDialog","useFlowRunsSelectedRows","defaultValues","useState","addRow","curr","removeRow","newValue"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{s as _,t as l}from"./vendor-tanstack-BK8oseNA.js";import{bv as k,aN as c,du as R,dv as w}from"./index-BvSl3DKP.js";const y=a=>{const{data:t}=_(k(a)),u=t?.map(s=>s.flow_run_id).filter(s=>s!=null&&s!==void 0),o=t?.map(s=>s.task_run_id).filter(s=>s!=null&&s!==void 0),{flowRuns:r,taskRuns:i}=l({queries:[c({flow_runs:{operator:"and_",id:{any_:u}},sort:"ID_DESC",offset:0}),R({task_runs:{operator:"and_",id:{any_:o}},sort:"ID_DESC",offset:0})],combine:s=>{const[n,e]=s;return{flowRuns:n.data,taskRuns:e.data}}});return t?.map(s=>{const n=r?.find(d=>d.id===s.flow_run_id),e=i?.find(d=>d.id===s.task_run_id);return{...s,flow_run:n,task_run:e}})},D=a=>{const{data:t}=_(w(a)),u=t?.flow_run_id,o=t?.task_run_id,{flowRuns:r,taskRuns:i}=l({queries:[c({flow_runs:{operator:"and_",id:{any_:[u??""]}},sort:"ID_DESC",offset:0}),R({task_runs:{operator:"and_",id:{any_:[o??""]}},sort:"ID_DESC",offset:0})],combine:f=>{const[s,n]=f;return{flowRuns:s.data,taskRuns:n.data}}});return{...t,flow_run:r?.[0],task_run:i?.[0]}};export{D as a,y as u};
2
- //# sourceMappingURL=use-get-artifacts-flow-task-runs-TSCoomjQ.js.map
1
+ import{s as _,t as l}from"./vendor-tanstack-BK8oseNA.js";import{bv as k,aN as c,du as R,dv as w}from"./index-Cd7pM9pk.js";const y=a=>{const{data:t}=_(k(a)),u=t?.map(s=>s.flow_run_id).filter(s=>s!=null&&s!==void 0),o=t?.map(s=>s.task_run_id).filter(s=>s!=null&&s!==void 0),{flowRuns:r,taskRuns:i}=l({queries:[c({flow_runs:{operator:"and_",id:{any_:u}},sort:"ID_DESC",offset:0}),R({task_runs:{operator:"and_",id:{any_:o}},sort:"ID_DESC",offset:0})],combine:s=>{const[n,e]=s;return{flowRuns:n.data,taskRuns:e.data}}});return t?.map(s=>{const n=r?.find(d=>d.id===s.flow_run_id),e=i?.find(d=>d.id===s.task_run_id);return{...s,flow_run:n,task_run:e}})},D=a=>{const{data:t}=_(w(a)),u=t?.flow_run_id,o=t?.task_run_id,{flowRuns:r,taskRuns:i}=l({queries:[c({flow_runs:{operator:"and_",id:{any_:[u??""]}},sort:"ID_DESC",offset:0}),R({task_runs:{operator:"and_",id:{any_:[o??""]}},sort:"ID_DESC",offset:0})],combine:f=>{const[s,n]=f;return{flowRuns:s.data,taskRuns:n.data}}});return{...t,flow_run:r?.[0],task_run:i?.[0]}};export{D as a,y as u};
2
+ //# sourceMappingURL=use-get-artifacts-flow-task-runs-BfE433bC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-get-artifacts-flow-task-runs-TSCoomjQ.js","sources":["../../src/api/artifacts/use-get-artifacts-flow-task-runs/use-get-artifacts-flow-task-runs.ts"],"sourcesContent":["import { useQueries, useQuery } from \"@tanstack/react-query\";\nimport { buildFilterFlowRunsQuery } from \"@/api/flow-runs\";\nimport { buildListTaskRunsQuery } from \"@/api/task-runs\";\nimport {\n\ttype ArtifactsFilter,\n\ttype ArtifactWithFlowRunAndTaskRun,\n\tbuildGetArtifactQuery,\n\tbuildListArtifactsQuery,\n} from \"..\";\n\nexport const useFilterArtifactsFlowTaskRuns = (filter: ArtifactsFilter) => {\n\tconst { data: artifacts } = useQuery(buildListArtifactsQuery(filter));\n\n\tconst flowRunIds = artifacts\n\t\t?.map((artifact) => artifact.flow_run_id)\n\t\t.filter((val) => val != null && val !== undefined);\n\tconst taskRunIds = artifacts\n\t\t?.map((artifact) => artifact.task_run_id)\n\t\t.filter((val) => val != null && val !== undefined);\n\n\tconst { flowRuns, taskRuns } = useQueries({\n\t\tqueries: [\n\t\t\tbuildFilterFlowRunsQuery({\n\t\t\t\tflow_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: flowRunIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t\tbuildListTaskRunsQuery({\n\t\t\t\ttask_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: taskRunIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t],\n\t\tcombine: (data) => {\n\t\t\tconst [flowRuns, taskRuns] = data;\n\t\t\treturn {\n\t\t\t\tflowRuns: flowRuns.data,\n\t\t\t\ttaskRuns: taskRuns.data,\n\t\t\t};\n\t\t},\n\t});\n\n\tconst artifactsWithMetadata = artifacts?.map((artifact) => {\n\t\tconst flowRun = flowRuns?.find(\n\t\t\t(flowRun) => flowRun.id === artifact.flow_run_id,\n\t\t);\n\t\tconst taskRun = taskRuns?.find(\n\t\t\t(taskRun) => taskRun.id === artifact.task_run_id,\n\t\t);\n\n\t\treturn {\n\t\t\t...artifact,\n\t\t\tflow_run: flowRun,\n\t\t\ttask_run: taskRun,\n\t\t};\n\t});\n\n\treturn artifactsWithMetadata as ArtifactWithFlowRunAndTaskRun[];\n};\n\nexport const useGetArtifactFlowTaskRuns = (artifactId: string) => {\n\tconst { data: artifact } = useQuery(buildGetArtifactQuery(artifactId));\n\n\tconst flowRunId = artifact?.flow_run_id;\n\tconst taskRunId = artifact?.task_run_id;\n\tconst { flowRuns, taskRuns } = useQueries({\n\t\tqueries: [\n\t\t\tbuildFilterFlowRunsQuery({\n\t\t\t\tflow_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: [flowRunId ?? \"\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t\tbuildListTaskRunsQuery({\n\t\t\t\ttask_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: [taskRunId ?? \"\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t],\n\t\tcombine: (data) => {\n\t\t\tconst [flowRuns, taskRuns] = data;\n\t\t\treturn {\n\t\t\t\tflowRuns: flowRuns.data,\n\t\t\t\ttaskRuns: taskRuns.data,\n\t\t\t};\n\t\t},\n\t});\n\n\treturn {\n\t\t...artifact,\n\t\tflow_run: flowRuns?.[0],\n\t\ttask_run: taskRuns?.[0],\n\t} as ArtifactWithFlowRunAndTaskRun;\n};\n"],"names":["useFilterArtifactsFlowTaskRuns","filter","artifacts","useQuery","buildListArtifactsQuery","flowRunIds","artifact","val","taskRunIds","flowRuns","taskRuns","useQueries","buildFilterFlowRunsQuery","buildListTaskRunsQuery","data","flowRun","taskRun","useGetArtifactFlowTaskRuns","artifactId","buildGetArtifactQuery","flowRunId","taskRunId"],"mappings":"0HAUO,MAAMA,EAAkCC,GAA4B,CAC1E,KAAM,CAAE,KAAMC,CAAA,EAAcC,EAASC,EAAwBH,CAAM,CAAC,EAE9DI,EAAaH,GAChB,IAAKI,GAAaA,EAAS,WAAW,EACvC,OAAQC,GAAQA,GAAO,MAAQA,IAAQ,MAAS,EAC5CC,EAAaN,GAChB,IAAKI,GAAaA,EAAS,WAAW,EACvC,OAAQC,GAAQA,GAAO,MAAQA,IAAQ,MAAS,EAE5C,CAAE,SAAAE,EAAU,SAAAC,CAAA,EAAaC,EAAW,CACzC,QAAS,CACRC,EAAyB,CACxB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAMP,CAAA,CACP,EAED,KAAM,UACN,OAAQ,CAAA,CACR,EACDQ,EAAuB,CACtB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAML,CAAA,CACP,EAED,KAAM,UACN,OAAQ,CAAA,CACR,CAAA,EAEF,QAAUM,GAAS,CAClB,KAAM,CAACL,EAAUC,CAAQ,EAAII,EAC7B,MAAO,CACN,SAAUL,EAAS,KACnB,SAAUC,EAAS,IAAA,CAErB,CAAA,CACA,EAiBD,OAf8BR,GAAW,IAAKI,GAAa,CAC1D,MAAMS,EAAUN,GAAU,KACxBM,GAAYA,EAAQ,KAAOT,EAAS,WAAA,EAEhCU,EAAUN,GAAU,KACxBM,GAAYA,EAAQ,KAAOV,EAAS,WAAA,EAGtC,MAAO,CACN,GAAGA,EACH,SAAUS,EACV,SAAUC,CAAA,CAEZ,CAAC,CAGF,EAEaC,EAA8BC,GAAuB,CACjE,KAAM,CAAE,KAAMZ,CAAA,EAAaH,EAASgB,EAAsBD,CAAU,CAAC,EAE/DE,EAAYd,GAAU,YACtBe,EAAYf,GAAU,YACtB,CAAE,SAAAG,EAAU,SAAAC,CAAA,EAAaC,EAAW,CACzC,QAAS,CACRC,EAAyB,CACxB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAM,CAACQ,GAAa,EAAE,CAAA,CACvB,EAED,KAAM,UACN,OAAQ,CAAA,CACR,EACDP,EAAuB,CACtB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAM,CAACQ,GAAa,EAAE,CAAA,CACvB,EAED,KAAM,UACN,OAAQ,CAAA,CACR,CAAA,EAEF,QAAUP,GAAS,CAClB,KAAM,CAACL,EAAUC,CAAQ,EAAII,EAC7B,MAAO,CACN,SAAUL,EAAS,KACnB,SAAUC,EAAS,IAAA,CAErB,CAAA,CACA,EAED,MAAO,CACN,GAAGJ,EACH,SAAUG,IAAW,CAAC,EACtB,SAAUC,IAAW,CAAC,CAAA,CAExB"}
1
+ {"version":3,"file":"use-get-artifacts-flow-task-runs-BfE433bC.js","sources":["../../src/api/artifacts/use-get-artifacts-flow-task-runs/use-get-artifacts-flow-task-runs.ts"],"sourcesContent":["import { useQueries, useQuery } from \"@tanstack/react-query\";\nimport { buildFilterFlowRunsQuery } from \"@/api/flow-runs\";\nimport { buildListTaskRunsQuery } from \"@/api/task-runs\";\nimport {\n\ttype ArtifactsFilter,\n\ttype ArtifactWithFlowRunAndTaskRun,\n\tbuildGetArtifactQuery,\n\tbuildListArtifactsQuery,\n} from \"..\";\n\nexport const useFilterArtifactsFlowTaskRuns = (filter: ArtifactsFilter) => {\n\tconst { data: artifacts } = useQuery(buildListArtifactsQuery(filter));\n\n\tconst flowRunIds = artifacts\n\t\t?.map((artifact) => artifact.flow_run_id)\n\t\t.filter((val) => val != null && val !== undefined);\n\tconst taskRunIds = artifacts\n\t\t?.map((artifact) => artifact.task_run_id)\n\t\t.filter((val) => val != null && val !== undefined);\n\n\tconst { flowRuns, taskRuns } = useQueries({\n\t\tqueries: [\n\t\t\tbuildFilterFlowRunsQuery({\n\t\t\t\tflow_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: flowRunIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t\tbuildListTaskRunsQuery({\n\t\t\t\ttask_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: taskRunIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t],\n\t\tcombine: (data) => {\n\t\t\tconst [flowRuns, taskRuns] = data;\n\t\t\treturn {\n\t\t\t\tflowRuns: flowRuns.data,\n\t\t\t\ttaskRuns: taskRuns.data,\n\t\t\t};\n\t\t},\n\t});\n\n\tconst artifactsWithMetadata = artifacts?.map((artifact) => {\n\t\tconst flowRun = flowRuns?.find(\n\t\t\t(flowRun) => flowRun.id === artifact.flow_run_id,\n\t\t);\n\t\tconst taskRun = taskRuns?.find(\n\t\t\t(taskRun) => taskRun.id === artifact.task_run_id,\n\t\t);\n\n\t\treturn {\n\t\t\t...artifact,\n\t\t\tflow_run: flowRun,\n\t\t\ttask_run: taskRun,\n\t\t};\n\t});\n\n\treturn artifactsWithMetadata as ArtifactWithFlowRunAndTaskRun[];\n};\n\nexport const useGetArtifactFlowTaskRuns = (artifactId: string) => {\n\tconst { data: artifact } = useQuery(buildGetArtifactQuery(artifactId));\n\n\tconst flowRunId = artifact?.flow_run_id;\n\tconst taskRunId = artifact?.task_run_id;\n\tconst { flowRuns, taskRuns } = useQueries({\n\t\tqueries: [\n\t\t\tbuildFilterFlowRunsQuery({\n\t\t\t\tflow_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: [flowRunId ?? \"\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t\tbuildListTaskRunsQuery({\n\t\t\t\ttask_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: [taskRunId ?? \"\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t],\n\t\tcombine: (data) => {\n\t\t\tconst [flowRuns, taskRuns] = data;\n\t\t\treturn {\n\t\t\t\tflowRuns: flowRuns.data,\n\t\t\t\ttaskRuns: taskRuns.data,\n\t\t\t};\n\t\t},\n\t});\n\n\treturn {\n\t\t...artifact,\n\t\tflow_run: flowRuns?.[0],\n\t\ttask_run: taskRuns?.[0],\n\t} as ArtifactWithFlowRunAndTaskRun;\n};\n"],"names":["useFilterArtifactsFlowTaskRuns","filter","artifacts","useQuery","buildListArtifactsQuery","flowRunIds","artifact","val","taskRunIds","flowRuns","taskRuns","useQueries","buildFilterFlowRunsQuery","buildListTaskRunsQuery","data","flowRun","taskRun","useGetArtifactFlowTaskRuns","artifactId","buildGetArtifactQuery","flowRunId","taskRunId"],"mappings":"0HAUO,MAAMA,EAAkCC,GAA4B,CAC1E,KAAM,CAAE,KAAMC,CAAA,EAAcC,EAASC,EAAwBH,CAAM,CAAC,EAE9DI,EAAaH,GAChB,IAAKI,GAAaA,EAAS,WAAW,EACvC,OAAQC,GAAQA,GAAO,MAAQA,IAAQ,MAAS,EAC5CC,EAAaN,GAChB,IAAKI,GAAaA,EAAS,WAAW,EACvC,OAAQC,GAAQA,GAAO,MAAQA,IAAQ,MAAS,EAE5C,CAAE,SAAAE,EAAU,SAAAC,CAAA,EAAaC,EAAW,CACzC,QAAS,CACRC,EAAyB,CACxB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAMP,CAAA,CACP,EAED,KAAM,UACN,OAAQ,CAAA,CACR,EACDQ,EAAuB,CACtB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAML,CAAA,CACP,EAED,KAAM,UACN,OAAQ,CAAA,CACR,CAAA,EAEF,QAAUM,GAAS,CAClB,KAAM,CAACL,EAAUC,CAAQ,EAAII,EAC7B,MAAO,CACN,SAAUL,EAAS,KACnB,SAAUC,EAAS,IAAA,CAErB,CAAA,CACA,EAiBD,OAf8BR,GAAW,IAAKI,GAAa,CAC1D,MAAMS,EAAUN,GAAU,KACxBM,GAAYA,EAAQ,KAAOT,EAAS,WAAA,EAEhCU,EAAUN,GAAU,KACxBM,GAAYA,EAAQ,KAAOV,EAAS,WAAA,EAGtC,MAAO,CACN,GAAGA,EACH,SAAUS,EACV,SAAUC,CAAA,CAEZ,CAAC,CAGF,EAEaC,EAA8BC,GAAuB,CACjE,KAAM,CAAE,KAAMZ,CAAA,EAAaH,EAASgB,EAAsBD,CAAU,CAAC,EAE/DE,EAAYd,GAAU,YACtBe,EAAYf,GAAU,YACtB,CAAE,SAAAG,EAAU,SAAAC,CAAA,EAAaC,EAAW,CACzC,QAAS,CACRC,EAAyB,CACxB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAM,CAACQ,GAAa,EAAE,CAAA,CACvB,EAED,KAAM,UACN,OAAQ,CAAA,CACR,EACDP,EAAuB,CACtB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAM,CAACQ,GAAa,EAAE,CAAA,CACvB,EAED,KAAM,UACN,OAAQ,CAAA,CACR,CAAA,EAEF,QAAUP,GAAS,CAClB,KAAM,CAACL,EAAUC,CAAQ,EAAII,EAC7B,MAAO,CACN,SAAUL,EAAS,KACnB,SAAUC,EAAS,IAAA,CAErB,CAAA,CACA,EAED,MAAO,CACN,GAAGJ,EACH,SAAUG,IAAW,CAAC,EACtB,SAAUC,IAAW,CAAC,CAAA,CAExB"}
@@ -1,2 +1,2 @@
1
- import{u as d,j as n,L as m}from"./vendor-tanstack-BK8oseNA.js";import{ct as f,y as l,cP as p,q as D}from"./index-BvSl3DKP.js";import{u as h}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const C=()=>{const o=d(),[t,a]=h(),{deleteDeployment:r}=f();return[t,(s,{shouldNavigate:i=!1}={})=>a({title:"Delete Deployment",description:`Are you sure you want to delete ${s.name}? This action cannot be undone.`,onConfirm:()=>{r(s.id,{onSuccess:()=>{l.success("Deployment deleted"),i&&o({to:"/deployments"})},onError:c=>{const u=c.message||"Unknown error while deleting deployment.";console.error(u)}})}})]},g={state:{type:"SCHEDULED",message:"Run from the Prefect UI with defaults",state_details:{deferred:!1,untrackable_result:!1,pause_reschedule:!1}}},R=()=>{const{createDeploymentFlowRun:o,isPending:t}=p();return{onQuickRun:r=>{o({id:r,...g},{onSuccess:e=>{l.success("Flow run created",{action:n.jsx(m,{to:"/runs/flow-run/$id",params:{id:e.id},children:n.jsx(D,{size:"sm",children:"View run"})}),description:n.jsxs("p",{children:[n.jsx("span",{className:"font-bold",children:e.name})," scheduled to start"," ",n.jsx("span",{className:"font-bold",children:"now"})]})})},onError:e=>{const s=e.message||"Unknown error while creating flow run.";console.error(s)}})},isPending:t}};export{C as a,R as u};
2
- //# sourceMappingURL=use-quick-run-BMnCkwSv.js.map
1
+ import{u as d,j as n,L as m}from"./vendor-tanstack-BK8oseNA.js";import{cu as f,y as l,cQ as p,q as D}from"./index-Cd7pM9pk.js";import{u as h}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const C=()=>{const o=d(),[t,a]=h(),{deleteDeployment:r}=f();return[t,(s,{shouldNavigate:i=!1}={})=>a({title:"Delete Deployment",description:`Are you sure you want to delete ${s.name}? This action cannot be undone.`,onConfirm:()=>{r(s.id,{onSuccess:()=>{l.success("Deployment deleted"),i&&o({to:"/deployments"})},onError:c=>{const u=c.message||"Unknown error while deleting deployment.";console.error(u)}})}})]},g={state:{type:"SCHEDULED",message:"Run from the Prefect UI with defaults",state_details:{deferred:!1,untrackable_result:!1,pause_reschedule:!1}}},R=()=>{const{createDeploymentFlowRun:o,isPending:t}=p();return{onQuickRun:r=>{o({id:r,...g},{onSuccess:e=>{l.success("Flow run created",{action:n.jsx(m,{to:"/runs/flow-run/$id",params:{id:e.id},children:n.jsx(D,{size:"sm",children:"View run"})}),description:n.jsxs("p",{children:[n.jsx("span",{className:"font-bold",children:e.name})," scheduled to start"," ",n.jsx("span",{className:"font-bold",children:"now"})]})})},onError:e=>{const s=e.message||"Unknown error while creating flow run.";console.error(s)}})},isPending:t}};export{C as a,R as u};
2
+ //# sourceMappingURL=use-quick-run-qrtcF-DD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-quick-run-BMnCkwSv.js","sources":["../../src/components/deployments/use-delete-deployment-confirmation-dialog.ts","../../src/components/deployments/use-quick-run.tsx"],"sourcesContent":["import { useNavigate } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport { type Deployment, useDeleteDeployment } from \"@/api/deployments\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteDeploymentConfirmationDialog = () => {\n\tconst navigate = useNavigate();\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { deleteDeployment } = useDeleteDeployment();\n\n\tconst handleConfirmDelete = (\n\t\tdeployment: Deployment,\n\t\t{\n\t\t\tshouldNavigate = false,\n\t\t}: {\n\t\t\t/** Should navigate back to /deployments */\n\t\t\tshouldNavigate?: boolean;\n\t\t} = {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Deployment\",\n\t\t\tdescription: `Are you sure you want to delete ${deployment.name}? This action cannot be undone.`,\n\t\t\tonConfirm: () => {\n\t\t\t\tdeleteDeployment(deployment.id, {\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\ttoast.success(\"Deployment deleted\");\n\t\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\t\tvoid navigate({ to: \"/deployments\" });\n\t\t\t\t\t\t}\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 deleting deployment.\";\n\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import { Link } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport { useDeploymentCreateFlowRun } from \"@/api/flow-runs\";\nimport { Button } from \"@/components/ui/button\";\n\nconst DEPLOYMENT_QUICK_RUN_PAYLOAD = {\n\tstate: {\n\t\ttype: \"SCHEDULED\",\n\t\tmessage: \"Run from the Prefect UI with defaults\",\n\t\tstate_details: {\n\t\t\tdeferred: false,\n\t\t\tuntrackable_result: false,\n\t\t\tpause_reschedule: false,\n\t\t},\n\t},\n} as const;\n\n/**\n *\n * @returns a function that handles the mutation and UX when a deployment creates a quick run\n */\nexport const useQuickRun = () => {\n\tconst { createDeploymentFlowRun, isPending } = useDeploymentCreateFlowRun();\n\tconst onQuickRun = (id: string) => {\n\t\tcreateDeploymentFlowRun(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\t...DEPLOYMENT_QUICK_RUN_PAYLOAD,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: (res) => {\n\t\t\t\t\ttoast.success(\"Flow run created\", {\n\t\t\t\t\t\taction: (\n\t\t\t\t\t\t\t<Link to=\"/runs/flow-run/$id\" params={{ id: res.id }}>\n\t\t\t\t\t\t\t\t<Button size=\"sm\">View run</Button>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tdescription: (\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<span className=\"font-bold\">{res.name}</span> scheduled to start{\" \"}\n\t\t\t\t\t\t\t\t<span className=\"font-bold\">now</span>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t),\n\t\t\t\t\t});\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 flow run.\";\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn { onQuickRun, isPending };\n};\n"],"names":["useDeleteDeploymentConfirmationDialog","navigate","useNavigate","dialogState","confirmDelete","useDeleteConfirmationDialog","deleteDeployment","useDeleteDeployment","deployment","shouldNavigate","toast","error","message","DEPLOYMENT_QUICK_RUN_PAYLOAD","useQuickRun","createDeploymentFlowRun","isPending","useDeploymentCreateFlowRun","id","res","jsx","Link","Button"],"mappings":"gMAKO,MAAMA,EAAwC,IAAM,CAC1D,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAaC,CAAa,EAAIC,EAAA,EAE/B,CAAE,iBAAAC,CAAA,EAAqBC,EAAA,EA+B7B,MAAO,CAACJ,EA7BoB,CAC3BK,EACA,CACC,eAAAC,EAAiB,EAAA,EAId,CAAA,IAEJL,EAAc,CACb,MAAO,oBACP,YAAa,mCAAmCI,EAAW,IAAI,kCAC/D,UAAW,IAAM,CAChBF,EAAiBE,EAAW,GAAI,CAC/B,UAAW,IAAM,CAChBE,EAAM,QAAQ,oBAAoB,EAC9BD,GACER,EAAS,CAAE,GAAI,eAAgB,CAEtC,EACA,QAAUU,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,2CAClB,QAAQ,MAAMC,CAAO,CACtB,CAAA,CACA,CACF,CAAA,CACA,CAEsC,CACzC,ECpCMC,EAA+B,CACpC,MAAO,CACN,KAAM,YACN,QAAS,wCACT,cAAe,CACd,SAAU,GACV,mBAAoB,GACpB,iBAAkB,EAAA,CACnB,CAEF,EAMaC,EAAc,IAAM,CAChC,KAAM,CAAE,wBAAAC,EAAyB,UAAAC,CAAA,EAAcC,EAAA,EAgC/C,MAAO,CAAE,WA/BWC,GAAe,CAClCH,EACC,CACC,GAAAG,EACA,GAAGL,CAAA,EAEJ,CACC,UAAYM,GAAQ,CACnBT,EAAM,QAAQ,mBAAoB,CACjC,OACCU,EAAAA,IAACC,EAAA,CAAK,GAAG,qBAAqB,OAAQ,CAAE,GAAIF,EAAI,EAAA,EAC/C,SAAAC,EAAAA,IAACE,EAAA,CAAO,KAAK,KAAK,oBAAQ,EAC3B,EAED,mBACE,IAAA,CACA,SAAA,CAAAF,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAa,SAAAD,EAAI,KAAK,EAAO,sBAAoB,IACjEC,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAY,SAAA,KAAA,CAAG,CAAA,CAAA,CAChC,CAAA,CAED,CACF,EACA,QAAUT,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,yCAClB,QAAQ,MAAMC,CAAO,CACtB,CAAA,CACD,CAEF,EAEqB,UAAAI,CAAA,CACtB"}
1
+ {"version":3,"file":"use-quick-run-qrtcF-DD.js","sources":["../../src/components/deployments/use-delete-deployment-confirmation-dialog.ts","../../src/components/deployments/use-quick-run.tsx"],"sourcesContent":["import { useNavigate } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport { type Deployment, useDeleteDeployment } from \"@/api/deployments\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteDeploymentConfirmationDialog = () => {\n\tconst navigate = useNavigate();\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { deleteDeployment } = useDeleteDeployment();\n\n\tconst handleConfirmDelete = (\n\t\tdeployment: Deployment,\n\t\t{\n\t\t\tshouldNavigate = false,\n\t\t}: {\n\t\t\t/** Should navigate back to /deployments */\n\t\t\tshouldNavigate?: boolean;\n\t\t} = {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Deployment\",\n\t\t\tdescription: `Are you sure you want to delete ${deployment.name}? This action cannot be undone.`,\n\t\t\tonConfirm: () => {\n\t\t\t\tdeleteDeployment(deployment.id, {\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\ttoast.success(\"Deployment deleted\");\n\t\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\t\tvoid navigate({ to: \"/deployments\" });\n\t\t\t\t\t\t}\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 deleting deployment.\";\n\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import { Link } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport { useDeploymentCreateFlowRun } from \"@/api/flow-runs\";\nimport { Button } from \"@/components/ui/button\";\n\nconst DEPLOYMENT_QUICK_RUN_PAYLOAD = {\n\tstate: {\n\t\ttype: \"SCHEDULED\",\n\t\tmessage: \"Run from the Prefect UI with defaults\",\n\t\tstate_details: {\n\t\t\tdeferred: false,\n\t\t\tuntrackable_result: false,\n\t\t\tpause_reschedule: false,\n\t\t},\n\t},\n} as const;\n\n/**\n *\n * @returns a function that handles the mutation and UX when a deployment creates a quick run\n */\nexport const useQuickRun = () => {\n\tconst { createDeploymentFlowRun, isPending } = useDeploymentCreateFlowRun();\n\tconst onQuickRun = (id: string) => {\n\t\tcreateDeploymentFlowRun(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\t...DEPLOYMENT_QUICK_RUN_PAYLOAD,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: (res) => {\n\t\t\t\t\ttoast.success(\"Flow run created\", {\n\t\t\t\t\t\taction: (\n\t\t\t\t\t\t\t<Link to=\"/runs/flow-run/$id\" params={{ id: res.id }}>\n\t\t\t\t\t\t\t\t<Button size=\"sm\">View run</Button>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tdescription: (\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<span className=\"font-bold\">{res.name}</span> scheduled to start{\" \"}\n\t\t\t\t\t\t\t\t<span className=\"font-bold\">now</span>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t),\n\t\t\t\t\t});\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 flow run.\";\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn { onQuickRun, isPending };\n};\n"],"names":["useDeleteDeploymentConfirmationDialog","navigate","useNavigate","dialogState","confirmDelete","useDeleteConfirmationDialog","deleteDeployment","useDeleteDeployment","deployment","shouldNavigate","toast","error","message","DEPLOYMENT_QUICK_RUN_PAYLOAD","useQuickRun","createDeploymentFlowRun","isPending","useDeploymentCreateFlowRun","id","res","jsx","Link","Button"],"mappings":"gMAKO,MAAMA,EAAwC,IAAM,CAC1D,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAaC,CAAa,EAAIC,EAAA,EAE/B,CAAE,iBAAAC,CAAA,EAAqBC,EAAA,EA+B7B,MAAO,CAACJ,EA7BoB,CAC3BK,EACA,CACC,eAAAC,EAAiB,EAAA,EAId,CAAA,IAEJL,EAAc,CACb,MAAO,oBACP,YAAa,mCAAmCI,EAAW,IAAI,kCAC/D,UAAW,IAAM,CAChBF,EAAiBE,EAAW,GAAI,CAC/B,UAAW,IAAM,CAChBE,EAAM,QAAQ,oBAAoB,EAC9BD,GACER,EAAS,CAAE,GAAI,eAAgB,CAEtC,EACA,QAAUU,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,2CAClB,QAAQ,MAAMC,CAAO,CACtB,CAAA,CACA,CACF,CAAA,CACA,CAEsC,CACzC,ECpCMC,EAA+B,CACpC,MAAO,CACN,KAAM,YACN,QAAS,wCACT,cAAe,CACd,SAAU,GACV,mBAAoB,GACpB,iBAAkB,EAAA,CACnB,CAEF,EAMaC,EAAc,IAAM,CAChC,KAAM,CAAE,wBAAAC,EAAyB,UAAAC,CAAA,EAAcC,EAAA,EAgC/C,MAAO,CAAE,WA/BWC,GAAe,CAClCH,EACC,CACC,GAAAG,EACA,GAAGL,CAAA,EAEJ,CACC,UAAYM,GAAQ,CACnBT,EAAM,QAAQ,mBAAoB,CACjC,OACCU,EAAAA,IAACC,EAAA,CAAK,GAAG,qBAAqB,OAAQ,CAAE,GAAIF,EAAI,EAAA,EAC/C,SAAAC,EAAAA,IAACE,EAAA,CAAO,KAAK,KAAK,oBAAQ,EAC3B,EAED,mBACE,IAAA,CACA,SAAA,CAAAF,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAa,SAAAD,EAAI,KAAK,EAAO,sBAAoB,IACjEC,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAY,SAAA,KAAA,CAAG,CAAA,CAAA,CAChC,CAAA,CAED,CACF,EACA,QAAUT,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,yCAClB,QAAQ,MAAMC,CAAO,CACtB,CAAA,CACD,CAEF,EAEqB,UAAAI,CAAA,CACtB"}
@@ -1,2 +1,2 @@
1
- import{j as d,r as x}from"./vendor-tanstack-BK8oseNA.js";import{C as j,aW as f,I as C,al as y}from"./index-BvSl3DKP.js";const L=({currentStepNum:e,onClick:s,steps:r,completedSteps:t,visitedSteps:o})=>d.jsx(j,{className:"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto",children:r.map((n,a)=>{const p=e===a,m=o.has(a),u=t.has(a);return d.jsx(N,{disabled:!m,onClick:()=>s({stepName:n,stepNum:a}),number:a,isActive:p,isComplete:u,name:n},n)})}),N=({isActive:e=!1,isComplete:s=!1,disabled:r=!1,onClick:t=()=>{},number:o,name:n})=>{const a=o+1,p=a<10?`0${a}`:String(a);return d.jsxs("button",{type:"button",className:f("flex items-center gap-3 text-nowrap",r&&"cursor-not-allowed"),disabled:r,onClick:()=>t({number:o,name:n}),children:[s?d.jsx(C,{id:"CircleCheck",color:e?"teal":"grey",className:"size-12"}):d.jsx(v,{isActive:e,label:p}),d.jsx(y,{variant:"bodyLarge",className:f("text-gray-500 border-gray-500 whitespace-nowrap",e&&"text-teal-700 border-teal-700"),children:n})]})},v=({isActive:e=!1,label:s})=>d.jsx("div",{className:f("flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500",e&&"text-teal-700 border-teal-700"),children:d.jsx(y,{variant:"bodyLarge",className:f("text-gray-500 border-gray-500",e&&"text-teal-700 border-teal-700"),children:s})}),g=(e=new Set)=>{const[s,r]=x.useState(e),t=x.useMemo(()=>({add:c=>r(l=>new Set([...Array.from(l),c])),remove:c=>r(l=>new Set([...Array.from(l).filter(S=>S!==c)])),toggle:c=>r(l=>l.has(c)?new Set(Array.from(l).filter(S=>S!==c)):new Set([...Array.from(l),c])),clear:()=>r(new Set),reset:()=>r(e)}),[e]),o={has:x.useCallback(n=>s.has(n),[s]),...t};return[s,o]},V=(e,s=0,r)=>{const[t,o]=x.useState(s),[n,{add:a,reset:p}]=g(r??new Set([0])),[m,{add:u,reset:c}]=g(new Set),l=()=>{t<e-1&&(u(t),a(t+1),o(i=>i+1))},S=()=>{t>0&&o(i=>i-1)},b=i=>{o(i)},h=()=>{c(),p(),o(s)},w=t===e-1;return{changeStep:b,completedStepsSet:m,currentStep:t,decrementStep:S,incrementStep:l,isFinalStep:w,isStartingStep:t===0,reset:h,visitedStepsSet:n}};export{L as S,V as u};
2
- //# sourceMappingURL=use-stepper-C1wm66U2.js.map
1
+ import{j as d,r as x}from"./vendor-tanstack-BK8oseNA.js";import{C as j,aW as f,I as C,al as y}from"./index-Cd7pM9pk.js";const L=({currentStepNum:e,onClick:s,steps:r,completedSteps:t,visitedSteps:o})=>d.jsx(j,{className:"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto",children:r.map((n,a)=>{const p=e===a,m=o.has(a),u=t.has(a);return d.jsx(N,{disabled:!m,onClick:()=>s({stepName:n,stepNum:a}),number:a,isActive:p,isComplete:u,name:n},n)})}),N=({isActive:e=!1,isComplete:s=!1,disabled:r=!1,onClick:t=()=>{},number:o,name:n})=>{const a=o+1,p=a<10?`0${a}`:String(a);return d.jsxs("button",{type:"button",className:f("flex items-center gap-3 text-nowrap",r&&"cursor-not-allowed"),disabled:r,onClick:()=>t({number:o,name:n}),children:[s?d.jsx(C,{id:"CircleCheck",color:e?"teal":"grey",className:"size-12"}):d.jsx(v,{isActive:e,label:p}),d.jsx(y,{variant:"bodyLarge",className:f("text-gray-500 border-gray-500 whitespace-nowrap",e&&"text-teal-700 border-teal-700"),children:n})]})},v=({isActive:e=!1,label:s})=>d.jsx("div",{className:f("flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500",e&&"text-teal-700 border-teal-700"),children:d.jsx(y,{variant:"bodyLarge",className:f("text-gray-500 border-gray-500",e&&"text-teal-700 border-teal-700"),children:s})}),g=(e=new Set)=>{const[s,r]=x.useState(e),t=x.useMemo(()=>({add:c=>r(l=>new Set([...Array.from(l),c])),remove:c=>r(l=>new Set([...Array.from(l).filter(S=>S!==c)])),toggle:c=>r(l=>l.has(c)?new Set(Array.from(l).filter(S=>S!==c)):new Set([...Array.from(l),c])),clear:()=>r(new Set),reset:()=>r(e)}),[e]),o={has:x.useCallback(n=>s.has(n),[s]),...t};return[s,o]},V=(e,s=0,r)=>{const[t,o]=x.useState(s),[n,{add:a,reset:p}]=g(r??new Set([0])),[m,{add:u,reset:c}]=g(new Set),l=()=>{t<e-1&&(u(t),a(t+1),o(i=>i+1))},S=()=>{t>0&&o(i=>i-1)},b=i=>{o(i)},h=()=>{c(),p(),o(s)},w=t===e-1;return{changeStep:b,completedStepsSet:m,currentStep:t,decrementStep:S,incrementStep:l,isFinalStep:w,isStartingStep:t===0,reset:h,visitedStepsSet:n}};export{L as S,V as u};
2
+ //# sourceMappingURL=use-stepper-CVy1_GBw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-stepper-C1wm66U2.js","sources":["../../src/components/ui/stepper/stepper.tsx","../../src/hooks/use-set.ts","../../src/hooks/use-stepper.ts"],"sourcesContent":["import { Card } from \"@/components/ui/card\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { cn } from \"@/utils\";\n\ntype StepperProps = {\n\tcurrentStepNum: number;\n\tsteps: Array<string> | ReadonlyArray<string>;\n\tonClick: ({\n\t\tstepName,\n\t\tstepNum,\n\t}: {\n\t\tstepName: string;\n\t\tstepNum: number;\n\t}) => void;\n\tcompletedSteps: Set<number>;\n\tvisitedSteps: Set<number>;\n};\nconst Stepper = ({\n\tcurrentStepNum,\n\tonClick,\n\tsteps,\n\tcompletedSteps,\n\tvisitedSteps,\n}: StepperProps) => {\n\treturn (\n\t\t<Card className=\"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto\">\n\t\t\t{steps.map((step, i) => {\n\t\t\t\tconst isCurrentStep = currentStepNum === i;\n\t\t\t\tconst isStepVisited = visitedSteps.has(i);\n\t\t\t\tconst isStepComplete = completedSteps.has(i);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Step\n\t\t\t\t\t\tkey={step}\n\t\t\t\t\t\tdisabled={!isStepVisited}\n\t\t\t\t\t\tonClick={() => onClick({ stepName: step, stepNum: i })}\n\t\t\t\t\t\tnumber={i}\n\t\t\t\t\t\tisActive={isCurrentStep}\n\t\t\t\t\t\tisComplete={isStepComplete}\n\t\t\t\t\t\tname={step}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Card>\n\t);\n};\n\ntype StepProps = {\n\tisActive?: boolean;\n\tisComplete?: boolean;\n\tdisabled?: boolean;\n\tnumber: number;\n\tname: string;\n\tonClick?: ({ number, name }: { number: number; name: string }) => void;\n};\n\nconst Step = ({\n\tisActive = false,\n\tisComplete = false,\n\tdisabled = false,\n\tonClick = () => {},\n\t/** Assume steps are indexed =0 */\n\tnumber,\n\tname,\n}: StepProps) => {\n\t// add 1 to number assuming index 0\n\tconst adjustedNumberDisplay = number + 1;\n\tconst numberLabel =\n\t\tadjustedNumberDisplay < 10\n\t\t\t? `0${adjustedNumberDisplay}`\n\t\t\t: String(adjustedNumberDisplay);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-3 text-nowrap\",\n\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t)}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={() => onClick({ number, name })}\n\t\t>\n\t\t\t{isComplete ? (\n\t\t\t\t<Icon\n\t\t\t\t\tid=\"CircleCheck\"\n\t\t\t\t\tcolor={isActive ? \"teal\" : \"grey\"}\n\t\t\t\t\tclassName=\"size-12\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<StepIcon isActive={isActive} label={numberLabel} />\n\t\t\t)}\n\t\t\t<Typography\n\t\t\t\tvariant=\"bodyLarge\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"text-gray-500 border-gray-500 whitespace-nowrap\",\n\t\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</Typography>\n\t\t</button>\n\t);\n};\n\ntype StepIconProps = {\n\tlabel: string;\n\tisActive?: boolean;\n};\nconst StepIcon = ({ isActive = false, label }: StepIconProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500\",\n\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t)}\n\t>\n\t\t<Typography\n\t\t\tvariant=\"bodyLarge\"\n\t\t\tclassName={cn(\n\t\t\t\t\"text-gray-500 border-gray-500\",\n\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t)}\n\t\t>\n\t\t\t{label}\n\t\t</Typography>\n\t</div>\n);\n\nexport { Step, Stepper };\n","import { useCallback, useMemo, useState } from \"react\";\n\ntype StableActions<K> = {\n\tadd: (key: K) => void;\n\tremove: (key: K) => void;\n\ttoggle: (key: K) => void;\n\treset: () => void;\n\tclear: () => void;\n};\n\ntype Actions<K> = StableActions<K> & {\n\thas: (key: K) => boolean;\n};\n\n/**\n * A hook that is used to declarative to keep state of a 'Set' type of data structure.\n * This is useful in cases where the UX needs to keep track of selected rows by id\n *\n * @param initialSet Initial state of a Set\n * @returns a Set object and utils as a tuple\n *\n * @example\n * ```tsx\n * function FlowCheckboxList() {\n * const [selectedIDs, { has, toggle }] = useSet<string>();\n *\n * return flows.map((flow) =>\n * \t\t<Checkbox\n * \t\t\tkey={flow.id}\n * \t\t\tchecked={has(flow.id)}\n * \t\t\tonCheck={() => toggle(flow.id)}\n * \t\t\tlabel={flow.name} />\n *\n * }\n * ```\n */\nexport const useSet = <K>(initialSet = new Set<K>()): [Set<K>, Actions<K>] => {\n\tconst [set, setSet] = useState(initialSet);\n\n\tconst stableActions = useMemo(() => {\n\t\tconst add = (item: K) =>\n\t\t\tsetSet((curr) => new Set([...Array.from(curr), item]));\n\t\tconst remove = (item: K) =>\n\t\t\tsetSet(\n\t\t\t\t(curr) => new Set([...Array.from(curr).filter((i) => i !== item)]),\n\t\t\t);\n\t\tconst toggle = (item: K) =>\n\t\t\tsetSet((curr) =>\n\t\t\t\tcurr.has(item)\n\t\t\t\t\t? new Set(Array.from(curr).filter((i) => i !== item))\n\t\t\t\t\t: new Set([...Array.from(curr), item]),\n\t\t\t);\n\t\tconst reset = () => setSet(initialSet);\n\t\tconst clear = () => setSet(new Set());\n\n\t\treturn { add, remove, toggle, clear, reset };\n\t}, [initialSet]);\n\n\tconst utils = {\n\t\thas: useCallback((item) => set.has(item), [set]),\n\t\t...stableActions,\n\t} as Actions<K>;\n\n\treturn [set, utils];\n};\n","import { useState } from \"react\";\nimport { useSet } from \"./use-set\";\n/**\n *\n * @param steps\n * @param startingStep\n * @returns state with declarative utilities to increment, decrement, or skip to a current state\n *\n * @example\n * ```ts\n * const STEPS = ['Trigger', 'Actions', 'Details'] as const\n *\n * const stepper = useStepper(STEPS.length);\n *\n * return (\n * <div>\n * <h2>Current Step: {STEPS[stepper.currentStep]}</h2>\n * <ul>\n * {STEPS.map((step, i) => (\n * \t\t\t<li key={i} onClick={() => stepper.setStep(i)}>{step}</li>\n * \t\t)}\n * </ul>\n * <div>\n * <Button disabled={stepper.isStartingStep} onClick={stepper.decrementStep()}>Previous</Button>\n * <Button onClick={stepper.incrementStep()}>{stepper.isFinalStep ? 'Save' : 'Next'}</Button>\n * </div>\n * </div>\n * )\n * ```\n */\nexport const useStepper = (\n\tnumSteps: number,\n\tstartingStep = 0,\n\tinitialVisitedSteps?: Set<number>,\n) => {\n\tconst [currentStep, setCurrentStep] = useState(startingStep);\n\tconst [visitedStepsSet, { add: addVisitedStep, reset: resetVisitedSteps }] =\n\t\tuseSet(initialVisitedSteps ?? new Set<number>([0]));\n\tconst [\n\t\tcompletedStepsSet,\n\t\t{ add: addCompletedStep, reset: resetCompletedSteps },\n\t] = useSet(new Set<number>());\n\n\tconst incrementStep = () => {\n\t\tif (currentStep < numSteps - 1) {\n\t\t\t// Marks step as visited\n\t\t\taddCompletedStep(currentStep);\n\t\t\taddVisitedStep(currentStep + 1);\n\t\t\tsetCurrentStep((curr) => curr + 1);\n\t\t}\n\t};\n\n\tconst decrementStep = () => {\n\t\tif (currentStep > 0) {\n\t\t\tsetCurrentStep((curr) => curr - 1);\n\t\t}\n\t};\n\n\tconst changeStep = (stepNum: number) => {\n\t\tsetCurrentStep(stepNum);\n\t};\n\n\tconst reset = () => {\n\t\tresetCompletedSteps();\n\t\tresetVisitedSteps();\n\t\tsetCurrentStep(startingStep);\n\t};\n\n\tconst isFinalStep = currentStep === numSteps - 1;\n\tconst isStartingStep = currentStep === 0;\n\n\treturn {\n\t\tchangeStep,\n\t\tcompletedStepsSet,\n\t\tcurrentStep,\n\t\tdecrementStep,\n\t\tincrementStep,\n\t\tisFinalStep,\n\t\tisStartingStep,\n\t\treset,\n\t\tvisitedStepsSet,\n\t};\n};\n"],"names":["Stepper","currentStepNum","onClick","steps","completedSteps","visitedSteps","jsx","Card","step","i","isCurrentStep","isStepVisited","isStepComplete","Step","isActive","isComplete","disabled","number","name","adjustedNumberDisplay","numberLabel","jsxs","cn","Icon","StepIcon","Typography","label","useSet","initialSet","set","setSet","useState","stableActions","useMemo","item","curr","utils","useCallback","useStepper","numSteps","startingStep","initialVisitedSteps","currentStep","setCurrentStep","visitedStepsSet","addVisitedStep","resetVisitedSteps","completedStepsSet","addCompletedStep","resetCompletedSteps","incrementStep","decrementStep","changeStep","stepNum","reset","isFinalStep"],"mappings":"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"}
1
+ {"version":3,"file":"use-stepper-CVy1_GBw.js","sources":["../../src/components/ui/stepper/stepper.tsx","../../src/hooks/use-set.ts","../../src/hooks/use-stepper.ts"],"sourcesContent":["import { Card } from \"@/components/ui/card\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { cn } from \"@/utils\";\n\ntype StepperProps = {\n\tcurrentStepNum: number;\n\tsteps: Array<string> | ReadonlyArray<string>;\n\tonClick: ({\n\t\tstepName,\n\t\tstepNum,\n\t}: {\n\t\tstepName: string;\n\t\tstepNum: number;\n\t}) => void;\n\tcompletedSteps: Set<number>;\n\tvisitedSteps: Set<number>;\n};\nconst Stepper = ({\n\tcurrentStepNum,\n\tonClick,\n\tsteps,\n\tcompletedSteps,\n\tvisitedSteps,\n}: StepperProps) => {\n\treturn (\n\t\t<Card className=\"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto\">\n\t\t\t{steps.map((step, i) => {\n\t\t\t\tconst isCurrentStep = currentStepNum === i;\n\t\t\t\tconst isStepVisited = visitedSteps.has(i);\n\t\t\t\tconst isStepComplete = completedSteps.has(i);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Step\n\t\t\t\t\t\tkey={step}\n\t\t\t\t\t\tdisabled={!isStepVisited}\n\t\t\t\t\t\tonClick={() => onClick({ stepName: step, stepNum: i })}\n\t\t\t\t\t\tnumber={i}\n\t\t\t\t\t\tisActive={isCurrentStep}\n\t\t\t\t\t\tisComplete={isStepComplete}\n\t\t\t\t\t\tname={step}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Card>\n\t);\n};\n\ntype StepProps = {\n\tisActive?: boolean;\n\tisComplete?: boolean;\n\tdisabled?: boolean;\n\tnumber: number;\n\tname: string;\n\tonClick?: ({ number, name }: { number: number; name: string }) => void;\n};\n\nconst Step = ({\n\tisActive = false,\n\tisComplete = false,\n\tdisabled = false,\n\tonClick = () => {},\n\t/** Assume steps are indexed =0 */\n\tnumber,\n\tname,\n}: StepProps) => {\n\t// add 1 to number assuming index 0\n\tconst adjustedNumberDisplay = number + 1;\n\tconst numberLabel =\n\t\tadjustedNumberDisplay < 10\n\t\t\t? `0${adjustedNumberDisplay}`\n\t\t\t: String(adjustedNumberDisplay);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-3 text-nowrap\",\n\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t)}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={() => onClick({ number, name })}\n\t\t>\n\t\t\t{isComplete ? (\n\t\t\t\t<Icon\n\t\t\t\t\tid=\"CircleCheck\"\n\t\t\t\t\tcolor={isActive ? \"teal\" : \"grey\"}\n\t\t\t\t\tclassName=\"size-12\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<StepIcon isActive={isActive} label={numberLabel} />\n\t\t\t)}\n\t\t\t<Typography\n\t\t\t\tvariant=\"bodyLarge\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"text-gray-500 border-gray-500 whitespace-nowrap\",\n\t\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</Typography>\n\t\t</button>\n\t);\n};\n\ntype StepIconProps = {\n\tlabel: string;\n\tisActive?: boolean;\n};\nconst StepIcon = ({ isActive = false, label }: StepIconProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500\",\n\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t)}\n\t>\n\t\t<Typography\n\t\t\tvariant=\"bodyLarge\"\n\t\t\tclassName={cn(\n\t\t\t\t\"text-gray-500 border-gray-500\",\n\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t)}\n\t\t>\n\t\t\t{label}\n\t\t</Typography>\n\t</div>\n);\n\nexport { Step, Stepper };\n","import { useCallback, useMemo, useState } from \"react\";\n\ntype StableActions<K> = {\n\tadd: (key: K) => void;\n\tremove: (key: K) => void;\n\ttoggle: (key: K) => void;\n\treset: () => void;\n\tclear: () => void;\n};\n\ntype Actions<K> = StableActions<K> & {\n\thas: (key: K) => boolean;\n};\n\n/**\n * A hook that is used to declarative to keep state of a 'Set' type of data structure.\n * This is useful in cases where the UX needs to keep track of selected rows by id\n *\n * @param initialSet Initial state of a Set\n * @returns a Set object and utils as a tuple\n *\n * @example\n * ```tsx\n * function FlowCheckboxList() {\n * const [selectedIDs, { has, toggle }] = useSet<string>();\n *\n * return flows.map((flow) =>\n * \t\t<Checkbox\n * \t\t\tkey={flow.id}\n * \t\t\tchecked={has(flow.id)}\n * \t\t\tonCheck={() => toggle(flow.id)}\n * \t\t\tlabel={flow.name} />\n *\n * }\n * ```\n */\nexport const useSet = <K>(initialSet = new Set<K>()): [Set<K>, Actions<K>] => {\n\tconst [set, setSet] = useState(initialSet);\n\n\tconst stableActions = useMemo(() => {\n\t\tconst add = (item: K) =>\n\t\t\tsetSet((curr) => new Set([...Array.from(curr), item]));\n\t\tconst remove = (item: K) =>\n\t\t\tsetSet(\n\t\t\t\t(curr) => new Set([...Array.from(curr).filter((i) => i !== item)]),\n\t\t\t);\n\t\tconst toggle = (item: K) =>\n\t\t\tsetSet((curr) =>\n\t\t\t\tcurr.has(item)\n\t\t\t\t\t? new Set(Array.from(curr).filter((i) => i !== item))\n\t\t\t\t\t: new Set([...Array.from(curr), item]),\n\t\t\t);\n\t\tconst reset = () => setSet(initialSet);\n\t\tconst clear = () => setSet(new Set());\n\n\t\treturn { add, remove, toggle, clear, reset };\n\t}, [initialSet]);\n\n\tconst utils = {\n\t\thas: useCallback((item) => set.has(item), [set]),\n\t\t...stableActions,\n\t} as Actions<K>;\n\n\treturn [set, utils];\n};\n","import { useState } from \"react\";\nimport { useSet } from \"./use-set\";\n/**\n *\n * @param steps\n * @param startingStep\n * @returns state with declarative utilities to increment, decrement, or skip to a current state\n *\n * @example\n * ```ts\n * const STEPS = ['Trigger', 'Actions', 'Details'] as const\n *\n * const stepper = useStepper(STEPS.length);\n *\n * return (\n * <div>\n * <h2>Current Step: {STEPS[stepper.currentStep]}</h2>\n * <ul>\n * {STEPS.map((step, i) => (\n * \t\t\t<li key={i} onClick={() => stepper.setStep(i)}>{step}</li>\n * \t\t)}\n * </ul>\n * <div>\n * <Button disabled={stepper.isStartingStep} onClick={stepper.decrementStep()}>Previous</Button>\n * <Button onClick={stepper.incrementStep()}>{stepper.isFinalStep ? 'Save' : 'Next'}</Button>\n * </div>\n * </div>\n * )\n * ```\n */\nexport const useStepper = (\n\tnumSteps: number,\n\tstartingStep = 0,\n\tinitialVisitedSteps?: Set<number>,\n) => {\n\tconst [currentStep, setCurrentStep] = useState(startingStep);\n\tconst [visitedStepsSet, { add: addVisitedStep, reset: resetVisitedSteps }] =\n\t\tuseSet(initialVisitedSteps ?? new Set<number>([0]));\n\tconst [\n\t\tcompletedStepsSet,\n\t\t{ add: addCompletedStep, reset: resetCompletedSteps },\n\t] = useSet(new Set<number>());\n\n\tconst incrementStep = () => {\n\t\tif (currentStep < numSteps - 1) {\n\t\t\t// Marks step as visited\n\t\t\taddCompletedStep(currentStep);\n\t\t\taddVisitedStep(currentStep + 1);\n\t\t\tsetCurrentStep((curr) => curr + 1);\n\t\t}\n\t};\n\n\tconst decrementStep = () => {\n\t\tif (currentStep > 0) {\n\t\t\tsetCurrentStep((curr) => curr - 1);\n\t\t}\n\t};\n\n\tconst changeStep = (stepNum: number) => {\n\t\tsetCurrentStep(stepNum);\n\t};\n\n\tconst reset = () => {\n\t\tresetCompletedSteps();\n\t\tresetVisitedSteps();\n\t\tsetCurrentStep(startingStep);\n\t};\n\n\tconst isFinalStep = currentStep === numSteps - 1;\n\tconst isStartingStep = currentStep === 0;\n\n\treturn {\n\t\tchangeStep,\n\t\tcompletedStepsSet,\n\t\tcurrentStep,\n\t\tdecrementStep,\n\t\tincrementStep,\n\t\tisFinalStep,\n\t\tisStartingStep,\n\t\treset,\n\t\tvisitedStepsSet,\n\t};\n};\n"],"names":["Stepper","currentStepNum","onClick","steps","completedSteps","visitedSteps","jsx","Card","step","i","isCurrentStep","isStepVisited","isStepComplete","Step","isActive","isComplete","disabled","number","name","adjustedNumberDisplay","numberLabel","jsxs","cn","Icon","StepIcon","Typography","label","useSet","initialSet","set","setSet","useState","stableActions","useMemo","item","curr","utils","useCallback","useStepper","numSteps","startingStep","initialVisitedSteps","currentStep","setCurrentStep","visitedStepsSet","addVisitedStep","resetVisitedSteps","completedStepsSet","addCompletedStep","resetCompletedSteps","incrementStep","decrementStep","changeStep","stepNum","reset","isFinalStep"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as r,L as R,p as a,r as d}from"./vendor-tanstack-BK8oseNA.js";import{L as b,aW as l,d2 as g,d3 as T,d4 as N,d5 as D,b_ as W,ao as L,cg as P,c9 as Q,an as E,I as $,b5 as w,f as S}from"./index-BvSl3DKP.js";function X({value:e,className:t,hideLineNumbers:o=!0,copy:s=!0,...n}){return r.jsx(b,{value:e,disabled:!0,hideLineNumbers:o,copy:s,className:l("bg-muted/50",t),...n})}const C={"flow-run":"Play","task-run":"Cog",deployment:"Rocket",flow:"Workflow","work-pool":"Server","work-queue":"ListOrdered",automation:"Zap","block-document":"Box","concurrency-limit":"Gauge",unknown:"Circle"},q={"flow-run":"Flow run","task-run":"Task run",flow:"Flow",deployment:"Deployment","work-pool":"Work pool","work-queue":"Work queue",automation:"Automation","block-document":"Block document","concurrency-limit":"Concurrency limit",unknown:"Resource"};function k(e){return!e||typeof e!="string"?"unknown":e.startsWith("prefect.flow-run.")?"flow-run":e.startsWith("prefect.task-run.")?"task-run":e.startsWith("prefect.deployment.")?"deployment":e.startsWith("prefect.flow.")?"flow":e.startsWith("prefect.work-pool.")?"work-pool":e.startsWith("prefect.work-queue.")?"work-queue":e.startsWith("prefect.automation.")?"automation":e.startsWith("prefect.block-document.")?"block-document":e.startsWith("prefect.concurrency-limit.")?"concurrency-limit":"unknown"}function x(e){if(!e||typeof e!="string")return null;const t=e.split(".");return t.length<3?null:t.slice(2).join(".")}function m(e){return e["prefect.resource.name"]||e["prefect.name"]||e["prefect-cloud.name"]||null}function v(e){for(const t of e){const o=t["prefect.resource.id"]||"";if(k(o)==="work-pool")return t}return null}function G(e,t=[]){const o=e["prefect.resource.id"]||"",s=k(o),n=x(o);if(!n)return null;switch(s){case"flow-run":return{to:"/runs/flow-run/$id",params:{id:n}};case"task-run":return{to:"/runs/task-run/$id",params:{id:n}};case"deployment":return{to:"/deployments/deployment/$id",params:{id:n}};case"flow":return{to:"/flows/flow/$id",params:{id:n}};case"work-pool":return{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:m(e)||n}};case"automation":return{to:"/automations/automation/$id",params:{id:n}};case"block-document":return{to:"/blocks/block/$id",params:{id:n}};case"concurrency-limit":return{to:"/concurrency-limits/concurrency-limit/$id",params:{id:n}};case"work-queue":{const c=m(e);if(!c)return null;const p=v(t);if(!p)return null;const j=p["prefect.resource.id"]||"",h=x(j),y=m(p)||h;return y?{to:"/work-pools/work-pool/$workPoolName/queue/$workQueueName",params:{workPoolName:y,workQueueName:c}}:null}default:return null}}function i({resource:e,relatedResources:t=[],children:o,className:s}){const n=G(e,t);return n?r.jsx(R,{to:n.to,params:n.params,className:s,children:o}):r.jsx("span",{className:s,children:o})}function F({resourceId:e,className:t}){const{data:o}=a(E(e));return r.jsx(u,{resourceType:"flow-run",displayText:o.name??e,className:t})}function B({resourceId:e,className:t}){const{data:o}=a(Q(e));return r.jsx(u,{resourceType:"task-run",displayText:o.name??e,className:t})}function _({resourceId:e,className:t}){const{data:o}=a(P(e));return r.jsx(u,{resourceType:"deployment",displayText:o.name,className:t})}function A({resourceId:e,className:t}){const{data:o}=a(L(e));return r.jsx(u,{resourceType:"flow",displayText:o.name,className:t})}function O({resourceId:e,className:t}){const{data:o}=a(W(e));return r.jsx(u,{resourceType:"work-pool",displayText:o.name,className:t})}function J({resourceId:e,className:t}){const{data:o}=a(D(e));return r.jsx(u,{resourceType:"work-queue",displayText:o.name,className:t})}function U({resourceId:e,className:t}){const{data:o}=a(N(e));return r.jsx(u,{resourceType:"automation",displayText:o.name,className:t})}function z({resourceId:e,className:t}){const{data:o}=a(T(e));return r.jsx(u,{resourceType:"block-document",displayText:o.name??e,className:t})}function V({resourceId:e,className:t}){const{data:o}=a(g(e));return r.jsx(u,{resourceType:"concurrency-limit",displayText:o.tag??e,className:t})}function Y({resourceType:e,resourceId:t,className:o}){switch(e){case"flow-run":return r.jsx(F,{resourceId:t,className:o});case"task-run":return r.jsx(B,{resourceId:t,className:o});case"deployment":return r.jsx(_,{resourceId:t,className:o});case"flow":return r.jsx(A,{resourceId:t,className:o});case"work-pool":return r.jsx(O,{resourceId:t,className:o});case"work-queue":return r.jsx(J,{resourceId:t,className:o});case"automation":return r.jsx(U,{resourceId:t,className:o});case"block-document":return r.jsx(z,{resourceId:t,className:o});case"concurrency-limit":return r.jsx(V,{resourceId:t,className:o});default:return null}}function Z(e){return e["prefect.resource.name"]||e["prefect.name"]||e["prefect-cloud.name"]||null}function H(e){return e["prefect.resource.id"]||""}function u({resourceType:e,displayText:t,className:o}){const s=C[e],n=q[e];return r.jsxs("div",{className:l("flex items-center gap-2",o),children:[n&&r.jsx("span",{children:n}),r.jsx($,{id:s,className:"h-4 w-4 text-muted-foreground"}),r.jsx("span",{children:t})]})}function f(){return r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(w,{className:"h-4 w-4 rounded-full"}),r.jsx(w,{className:"h-4 w-24"})]})}function I({event:e,className:t}){const o=Z(e.resource),s=H(e.resource),n=k(s),c=x(s);return o?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(u,{resourceType:n,displayText:o,className:"text-sm"})})})]}):c&&n!=="unknown"?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(Y,{resourceType:n,resourceId:c,className:"text-sm"})})})]}):c?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(u,{resourceType:n,displayText:c,className:"text-sm text-muted-foreground font-mono"})})})]}):s?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx("div",{className:"text-sm text-muted-foreground",children:r.jsx("span",{className:"font-mono text-xs",children:s})})})]}):r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx("div",{className:"text-sm text-muted-foreground",children:r.jsx("span",{className:"text-muted-foreground",children:"Unknown"})})]})}function ee(e){const t=[],o=e.split(".");for(let s=1;s<o.length;s++){const n=o.slice(0,s).join(".");t.push(`${n}.*`)}return[...t,e]}function te(e){let t=e;return t.startsWith("prefect.")?t=t.slice(8):t.startsWith("prefect-cloud.")&&(t=t.slice(14)),t.split(/[._-]/).map(o=>S(o.toLowerCase())).join(" ")}export{I as E,X as J,C as R,i as a,q as b,te as f,ee as g,k as p};
2
- //# sourceMappingURL=utilities-DxRXxFOF.js.map
1
+ import{j as r,L as R,p as a,r as d}from"./vendor-tanstack-BK8oseNA.js";import{L as b,aW as l,d3 as g,d4 as T,d5 as N,d6 as D,b_ as W,ao as L,cg as P,c9 as Q,an as E,I as $,b5 as w,f as S}from"./index-Cd7pM9pk.js";function X({value:e,className:t,hideLineNumbers:o=!0,copy:s=!0,...n}){return r.jsx(b,{value:e,disabled:!0,hideLineNumbers:o,copy:s,className:l("bg-muted/50",t),...n})}const C={"flow-run":"Play","task-run":"Cog",deployment:"Rocket",flow:"Workflow","work-pool":"Server","work-queue":"ListOrdered",automation:"Zap","block-document":"Box","concurrency-limit":"Gauge",unknown:"Circle"},q={"flow-run":"Flow run","task-run":"Task run",flow:"Flow",deployment:"Deployment","work-pool":"Work pool","work-queue":"Work queue",automation:"Automation","block-document":"Block document","concurrency-limit":"Concurrency limit",unknown:"Resource"};function k(e){return!e||typeof e!="string"?"unknown":e.startsWith("prefect.flow-run.")?"flow-run":e.startsWith("prefect.task-run.")?"task-run":e.startsWith("prefect.deployment.")?"deployment":e.startsWith("prefect.flow.")?"flow":e.startsWith("prefect.work-pool.")?"work-pool":e.startsWith("prefect.work-queue.")?"work-queue":e.startsWith("prefect.automation.")?"automation":e.startsWith("prefect.block-document.")?"block-document":e.startsWith("prefect.concurrency-limit.")?"concurrency-limit":"unknown"}function x(e){if(!e||typeof e!="string")return null;const t=e.split(".");return t.length<3?null:t.slice(2).join(".")}function m(e){return e["prefect.resource.name"]||e["prefect.name"]||e["prefect-cloud.name"]||null}function v(e){for(const t of e){const o=t["prefect.resource.id"]||"";if(k(o)==="work-pool")return t}return null}function G(e,t=[]){const o=e["prefect.resource.id"]||"",s=k(o),n=x(o);if(!n)return null;switch(s){case"flow-run":return{to:"/runs/flow-run/$id",params:{id:n}};case"task-run":return{to:"/runs/task-run/$id",params:{id:n}};case"deployment":return{to:"/deployments/deployment/$id",params:{id:n}};case"flow":return{to:"/flows/flow/$id",params:{id:n}};case"work-pool":return{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:m(e)||n}};case"automation":return{to:"/automations/automation/$id",params:{id:n}};case"block-document":return{to:"/blocks/block/$id",params:{id:n}};case"concurrency-limit":return{to:"/concurrency-limits/concurrency-limit/$id",params:{id:n}};case"work-queue":{const c=m(e);if(!c)return null;const p=v(t);if(!p)return null;const j=p["prefect.resource.id"]||"",h=x(j),y=m(p)||h;return y?{to:"/work-pools/work-pool/$workPoolName/queue/$workQueueName",params:{workPoolName:y,workQueueName:c}}:null}default:return null}}function i({resource:e,relatedResources:t=[],children:o,className:s}){const n=G(e,t);return n?r.jsx(R,{to:n.to,params:n.params,className:s,children:o}):r.jsx("span",{className:s,children:o})}function F({resourceId:e,className:t}){const{data:o}=a(E(e));return r.jsx(u,{resourceType:"flow-run",displayText:o.name??e,className:t})}function B({resourceId:e,className:t}){const{data:o}=a(Q(e));return r.jsx(u,{resourceType:"task-run",displayText:o.name??e,className:t})}function _({resourceId:e,className:t}){const{data:o}=a(P(e));return r.jsx(u,{resourceType:"deployment",displayText:o.name,className:t})}function A({resourceId:e,className:t}){const{data:o}=a(L(e));return r.jsx(u,{resourceType:"flow",displayText:o.name,className:t})}function O({resourceId:e,className:t}){const{data:o}=a(W(e));return r.jsx(u,{resourceType:"work-pool",displayText:o.name,className:t})}function J({resourceId:e,className:t}){const{data:o}=a(D(e));return r.jsx(u,{resourceType:"work-queue",displayText:o.name,className:t})}function U({resourceId:e,className:t}){const{data:o}=a(N(e));return r.jsx(u,{resourceType:"automation",displayText:o.name,className:t})}function z({resourceId:e,className:t}){const{data:o}=a(T(e));return r.jsx(u,{resourceType:"block-document",displayText:o.name??e,className:t})}function V({resourceId:e,className:t}){const{data:o}=a(g(e));return r.jsx(u,{resourceType:"concurrency-limit",displayText:o.tag??e,className:t})}function Y({resourceType:e,resourceId:t,className:o}){switch(e){case"flow-run":return r.jsx(F,{resourceId:t,className:o});case"task-run":return r.jsx(B,{resourceId:t,className:o});case"deployment":return r.jsx(_,{resourceId:t,className:o});case"flow":return r.jsx(A,{resourceId:t,className:o});case"work-pool":return r.jsx(O,{resourceId:t,className:o});case"work-queue":return r.jsx(J,{resourceId:t,className:o});case"automation":return r.jsx(U,{resourceId:t,className:o});case"block-document":return r.jsx(z,{resourceId:t,className:o});case"concurrency-limit":return r.jsx(V,{resourceId:t,className:o});default:return null}}function Z(e){return e["prefect.resource.name"]||e["prefect.name"]||e["prefect-cloud.name"]||null}function H(e){return e["prefect.resource.id"]||""}function u({resourceType:e,displayText:t,className:o}){const s=C[e],n=q[e];return r.jsxs("div",{className:l("flex items-center gap-2",o),children:[n&&r.jsx("span",{children:n}),r.jsx($,{id:s,className:"h-4 w-4 text-muted-foreground"}),r.jsx("span",{children:t})]})}function f(){return r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(w,{className:"h-4 w-4 rounded-full"}),r.jsx(w,{className:"h-4 w-24"})]})}function I({event:e,className:t}){const o=Z(e.resource),s=H(e.resource),n=k(s),c=x(s);return o?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(u,{resourceType:n,displayText:o,className:"text-sm"})})})]}):c&&n!=="unknown"?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(Y,{resourceType:n,resourceId:c,className:"text-sm"})})})]}):c?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(u,{resourceType:n,displayText:c,className:"text-sm text-muted-foreground font-mono"})})})]}):s?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx("div",{className:"text-sm text-muted-foreground",children:r.jsx("span",{className:"font-mono text-xs",children:s})})})]}):r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx("div",{className:"text-sm text-muted-foreground",children:r.jsx("span",{className:"text-muted-foreground",children:"Unknown"})})]})}function ee(e){const t=[],o=e.split(".");for(let s=1;s<o.length;s++){const n=o.slice(0,s).join(".");t.push(`${n}.*`)}return[...t,e]}function te(e){let t=e;return t.startsWith("prefect.")?t=t.slice(8):t.startsWith("prefect-cloud.")&&(t=t.slice(14)),t.split(/[._-]/).map(o=>S(o.toLowerCase())).join(" ")}export{I as E,X as J,C as R,i as a,q as b,te as f,ee as g,k as p};
2
+ //# sourceMappingURL=utilities-D5-00wjP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities-DxRXxFOF.js","sources":["../../src/components/ui/json-view.tsx","../../src/components/events/event-resource-display/resource-types.ts","../../src/components/events/event-resource-display/resource-routes.ts","../../src/components/events/event-resource-display/event-resource-link.tsx","../../src/components/events/event-resource-display/resource-displays.tsx","../../src/components/events/event-resource-display/resolved-resource-display.tsx","../../src/components/events/event-resource-display/event-resource-display.tsx","../../src/components/events/events-timeline/utilities.ts"],"sourcesContent":["import type * as React from \"react\";\nimport { cn } from \"@/utils\";\nimport { LazyJsonInput as JsonInput } from \"./json-input-lazy\";\n\ntype JsonViewProps = Omit<\n\tReact.ComponentProps<typeof JsonInput>,\n\t\"onChange\" | \"onBlur\" | \"disabled\"\n> & {\n\tvalue?: string;\n\tclassName?: string;\n\thideLineNumbers?: boolean;\n\tcopy?: boolean;\n};\n\nexport function JsonView({\n\tvalue,\n\tclassName,\n\thideLineNumbers = true,\n\tcopy = true,\n\t...props\n}: JsonViewProps) {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={value}\n\t\t\tdisabled={true}\n\t\t\thideLineNumbers={hideLineNumbers}\n\t\t\tcopy={copy}\n\t\t\tclassName={cn(\"bg-muted/50\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import type { IconId } from \"@/components/ui/icons\";\n\nexport type ResourceType =\n\t| \"flow-run\"\n\t| \"task-run\"\n\t| \"deployment\"\n\t| \"flow\"\n\t| \"work-pool\"\n\t| \"work-queue\"\n\t| \"automation\"\n\t| \"block-document\"\n\t| \"concurrency-limit\"\n\t| \"unknown\";\n\nexport const RESOURCE_ICONS: Record<ResourceType, IconId> = {\n\t\"flow-run\": \"Play\",\n\t\"task-run\": \"Cog\",\n\tdeployment: \"Rocket\",\n\tflow: \"Workflow\",\n\t\"work-pool\": \"Server\",\n\t\"work-queue\": \"ListOrdered\",\n\tautomation: \"Zap\",\n\t\"block-document\": \"Box\",\n\t\"concurrency-limit\": \"Gauge\",\n\tunknown: \"Circle\",\n};\n\nexport const RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\t\"flow-run\": \"Flow run\",\n\t\"task-run\": \"Task run\",\n\tflow: \"Flow\",\n\tdeployment: \"Deployment\",\n\t\"work-pool\": \"Work pool\",\n\t\"work-queue\": \"Work queue\",\n\tautomation: \"Automation\",\n\t\"block-document\": \"Block document\",\n\t\"concurrency-limit\": \"Concurrency limit\",\n\tunknown: \"Resource\",\n};\n\n/**\n * Parses a Prefect resource ID to determine its type.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param resourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The parsed ResourceType, or \"unknown\" if the format is unrecognized\n */\nexport function parseResourceType(resourceId: string): ResourceType {\n\tif (!resourceId || typeof resourceId !== \"string\") {\n\t\treturn \"unknown\";\n\t}\n\n\tif (resourceId.startsWith(\"prefect.flow-run.\")) {\n\t\treturn \"flow-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.task-run.\")) {\n\t\treturn \"task-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.deployment.\")) {\n\t\treturn \"deployment\";\n\t}\n\tif (resourceId.startsWith(\"prefect.flow.\")) {\n\t\treturn \"flow\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-pool.\")) {\n\t\treturn \"work-pool\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-queue.\")) {\n\t\treturn \"work-queue\";\n\t}\n\tif (resourceId.startsWith(\"prefect.automation.\")) {\n\t\treturn \"automation\";\n\t}\n\tif (resourceId.startsWith(\"prefect.block-document.\")) {\n\t\treturn \"block-document\";\n\t}\n\tif (resourceId.startsWith(\"prefect.concurrency-limit.\")) {\n\t\treturn \"concurrency-limit\";\n\t}\n\n\treturn \"unknown\";\n}\n\n/**\n * Extracts the resource identifier from a Prefect resource ID.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param prefectResourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The extracted ID portion (e.g., \"abc-123\"), or null if the format is invalid\n */\nexport function extractResourceId(prefectResourceId: string): string | null {\n\tif (!prefectResourceId || typeof prefectResourceId !== \"string\") {\n\t\treturn null;\n\t}\n\n\tconst parts = prefectResourceId.split(\".\");\n\tif (parts.length < 3) {\n\t\treturn null;\n\t}\n\n\t// Join parts after index 1 (skip \"prefect\" and resource type)\n\treturn parts.slice(2).join(\".\");\n}\n","import type { components } from \"@/api/prefect\";\nimport { extractResourceId, parseResourceType } from \"./resource-types\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\nexport type ResourceRouteConfig = {\n\tto: string;\n\tparams: Record<string, string>;\n};\n\nfunction getResourceName(resource: RelatedResource): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction findWorkPoolInRelated(\n\trelatedResources: RelatedResource[],\n): RelatedResource | null {\n\tfor (const resource of relatedResources) {\n\t\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\t\tconst resourceType = parseResourceType(resourceId);\n\t\tif (resourceType === \"work-pool\") {\n\t\t\treturn resource;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getResourceRoute(\n\tresource: RelatedResource,\n\trelatedResources: RelatedResource[] = [],\n): ResourceRouteConfig | null {\n\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\tconst resourceType = parseResourceType(resourceId);\n\tconst extractedId = extractResourceId(resourceId);\n\n\tif (!extractedId) {\n\t\treturn null;\n\t}\n\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"task-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/task-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"deployment\":\n\t\t\treturn {\n\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"flow\":\n\t\t\treturn {\n\t\t\t\tto: \"/flows/flow/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-pool\": {\n\t\t\t// Work pools use name instead of id in the route\n\t\t\tconst workPoolName = getResourceName(resource) || extractedId;\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName\",\n\t\t\t\tparams: { workPoolName },\n\t\t\t};\n\t\t}\n\t\tcase \"automation\":\n\t\t\treturn {\n\t\t\t\tto: \"/automations/automation/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"block-document\":\n\t\t\treturn {\n\t\t\t\tto: \"/blocks/block/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"concurrency-limit\":\n\t\t\treturn {\n\t\t\t\tto: \"/concurrency-limits/concurrency-limit/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-queue\": {\n\t\t\t// Work queues require both work pool name and queue name\n\t\t\t// Try to find the work pool in related resources\n\t\t\tconst workQueueName = getResourceName(resource);\n\t\t\tif (!workQueueName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPool = findWorkPoolInRelated(relatedResources);\n\t\t\tif (!workPool) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPoolId = workPool[\"prefect.resource.id\"] || \"\";\n\t\t\tconst workPoolExtractedId = extractResourceId(workPoolId);\n\t\t\tconst workPoolName = getResourceName(workPool) || workPoolExtractedId;\n\t\t\tif (!workPoolName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName/queue/$workQueueName\",\n\t\t\t\tparams: { workPoolName, workQueueName },\n\t\t\t};\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Link } from \"@tanstack/react-router\";\nimport type { components } from \"@/api/prefect\";\nimport { getResourceRoute } from \"./resource-routes\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\ntype EventResourceLinkProps = {\n\tresource: RelatedResource;\n\trelatedResources?: RelatedResource[];\n\tchildren: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function EventResourceLink({\n\tresource,\n\trelatedResources = [],\n\tchildren,\n\tclassName,\n}: EventResourceLinkProps) {\n\tconst routeConfig = getResourceRoute(resource, relatedResources);\n\n\tif (!routeConfig) {\n\t\treturn <span className={className}>{children}</span>;\n\t}\n\n\treturn (\n\t\t<Link to={routeConfig.to} params={routeConfig.params} className={className}>\n\t\t\t{children}\n\t\t</Link>\n\t);\n}\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { buildGetAutomationQuery } from \"@/api/automations\";\nimport { buildGetBlockDocumentQuery } from \"@/api/block-documents\";\nimport { buildDeploymentDetailsQuery } from \"@/api/deployments\";\nimport { buildGetFlowRunDetailsQuery } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery } from \"@/api/flows\";\nimport { buildGetConcurrencyLimitQuery } from \"@/api/task-run-concurrency-limits\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { buildGetWorkPoolQuery } from \"@/api/work-pools\";\nimport { buildGetWorkQueueQuery } from \"@/api/work-queues\";\nimport { ResourceDisplayWithIcon } from \"./event-resource-display\";\n\ntype ResourceDisplayProps = {\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function FlowRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow-run\"\n\t\t\tdisplayText={flowRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function TaskRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: taskRun } = useSuspenseQuery(\n\t\tbuildGetTaskRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"task-run\"\n\t\t\tdisplayText={taskRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function DeploymentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: deployment } = useSuspenseQuery(\n\t\tbuildDeploymentDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"deployment\"\n\t\t\tdisplayText={deployment.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function FlowResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flow } = useSuspenseQuery(buildFLowDetailsQuery(resourceId));\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow\"\n\t\t\tdisplayText={flow.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkPoolResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workPool } = useSuspenseQuery(\n\t\tbuildGetWorkPoolQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-pool\"\n\t\t\tdisplayText={workPool.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkQueueResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workQueue } = useSuspenseQuery(\n\t\tbuildGetWorkQueueQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-queue\"\n\t\t\tdisplayText={workQueue.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function AutomationResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: automation } = useSuspenseQuery(\n\t\tbuildGetAutomationQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"automation\"\n\t\t\tdisplayText={automation.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function BlockDocumentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: blockDocument } = useSuspenseQuery(\n\t\tbuildGetBlockDocumentQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"block-document\"\n\t\t\tdisplayText={blockDocument.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function ConcurrencyLimitResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: concurrencyLimit } = useSuspenseQuery(\n\t\tbuildGetConcurrencyLimitQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"concurrency-limit\"\n\t\t\tdisplayText={concurrencyLimit.tag ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n","import {\n\tAutomationResourceDisplay,\n\tBlockDocumentResourceDisplay,\n\tConcurrencyLimitResourceDisplay,\n\tDeploymentResourceDisplay,\n\tFlowResourceDisplay,\n\tFlowRunResourceDisplay,\n\tTaskRunResourceDisplay,\n\tWorkPoolResourceDisplay,\n\tWorkQueueResourceDisplay,\n} from \"./resource-displays\";\nimport type { ResourceType } from \"./resource-types\";\n\ntype ResolvedResourceDisplayProps = {\n\tresourceType: Exclude<ResourceType, \"unknown\">;\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function ResolvedResourceDisplay({\n\tresourceType,\n\tresourceId,\n\tclassName,\n}: ResolvedResourceDisplayProps) {\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn (\n\t\t\t\t<FlowRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"task-run\":\n\t\t\treturn (\n\t\t\t\t<TaskRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"deployment\":\n\t\t\treturn (\n\t\t\t\t<DeploymentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"flow\":\n\t\t\treturn (\n\t\t\t\t<FlowResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"work-pool\":\n\t\t\treturn (\n\t\t\t\t<WorkPoolResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"work-queue\":\n\t\t\treturn (\n\t\t\t\t<WorkQueueResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"automation\":\n\t\t\treturn (\n\t\t\t\t<AutomationResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"block-document\":\n\t\t\treturn (\n\t\t\t\t<BlockDocumentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"concurrency-limit\":\n\t\t\treturn (\n\t\t\t\t<ConcurrencyLimitResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Suspense } from \"react\";\nimport type { Event } from \"@/api/events\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/utils\";\nimport { EventResourceLink } from \"./event-resource-link\";\nimport { ResolvedResourceDisplay } from \"./resolved-resource-display\";\nimport {\n\textractResourceId,\n\tparseResourceType,\n\tRESOURCE_ICONS,\n\tRESOURCE_TYPE_LABELS,\n\ttype ResourceType,\n} from \"./resource-types\";\n\nexport type EventResourceDisplayProps = {\n\tevent: Event;\n\tclassName?: string;\n};\n\nfunction getResourceName(resource: Record<string, string>): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction getResourceId(resource: Record<string, string>): string {\n\treturn resource[\"prefect.resource.id\"] || \"\";\n}\n\ntype ResourceDisplayWithIconProps = {\n\tresourceType: ResourceType;\n\tdisplayText: string;\n\tclassName?: string;\n};\n\nexport function ResourceDisplayWithIcon({\n\tresourceType,\n\tdisplayText,\n\tclassName,\n}: ResourceDisplayWithIconProps) {\n\tconst iconId = RESOURCE_ICONS[resourceType];\n\tconst typeLabel = RESOURCE_TYPE_LABELS[resourceType];\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-2\", className)}>\n\t\t\t{typeLabel && <span>{typeLabel}</span>}\n\t\t\t<Icon id={iconId} className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t<span>{displayText}</span>\n\t\t</div>\n\t);\n}\n\nexport function ResourceDisplaySkeleton() {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Skeleton className=\"h-4 w-4 rounded-full\" />\n\t\t\t<Skeleton className=\"h-4 w-24\" />\n\t\t</div>\n\t);\n}\n\nexport function EventResourceDisplay({\n\tevent,\n\tclassName,\n}: EventResourceDisplayProps) {\n\tconst resourceName = getResourceName(event.resource);\n\tconst prefectResourceId = getResourceId(event.resource);\n\tconst resourceType = parseResourceType(prefectResourceId);\n\tconst extractedId = extractResourceId(prefectResourceId);\n\n\t// If we have a resource name, display it with the appropriate icon\n\tif (resourceName) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={resourceName}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but no name, try to fetch the resource name via API\n\tif (extractedId && resourceType !== \"unknown\") {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResolvedResourceDisplay\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tresourceId={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but unknown type, show the ID with the icon\n\tif (extractedId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm text-muted-foreground font-mono\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Fallback: show the raw resource ID if nothing else is available\n\tif (prefectResourceId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<EventResourceLink\n\t\t\t\t\tresource={event.resource}\n\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t<span className=\"font-mono text-xs\">{prefectResourceId}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</EventResourceLink>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// No resource information available\n\treturn (\n\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t<span className=\"text-muted-foreground\">Unknown</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { capitalize } from \"@/utils\";\n\n/**\n * Get event prefixes for filtering.\n * For example, \"prefect.flow-run.Completed\" returns:\n * [\"prefect.*\", \"prefect.flow-run.*\", \"prefect.flow-run.Completed\"]\n */\nexport function getEventPrefixes(eventName: string): string[] {\n\tconst prefixes: string[] = [];\n\tconst parts = eventName.split(\".\");\n\n\tfor (let i = 1; i < parts.length; i++) {\n\t\tconst prefix = parts.slice(0, i).join(\".\");\n\t\tprefixes.push(`${prefix}.*`);\n\t}\n\n\treturn [...prefixes, eventName];\n}\n\n/**\n * Format event label from event name.\n * For example, \"prefect.flow-run.Completed\" becomes \"Flow Run Completed\"\n */\nexport function formatEventLabel(eventName: string): string {\n\t// Remove prefect. or prefect-cloud. prefix\n\tlet label = eventName;\n\tif (label.startsWith(\"prefect.\")) {\n\t\tlabel = label.slice(8);\n\t} else if (label.startsWith(\"prefect-cloud.\")) {\n\t\tlabel = label.slice(14);\n\t}\n\n\t// Replace dashes and dots with spaces, then capitalize each word\n\treturn label\n\t\t.split(/[._-]/)\n\t\t.map((word) => capitalize(word.toLowerCase()))\n\t\t.join(\" \");\n}\n"],"names":["JsonView","value","className","hideLineNumbers","copy","props","jsx","JsonInput","cn","RESOURCE_ICONS","RESOURCE_TYPE_LABELS","parseResourceType","resourceId","extractResourceId","prefectResourceId","parts","getResourceName","resource","findWorkPoolInRelated","relatedResources","getResourceRoute","resourceType","extractedId","workQueueName","workPool","workPoolId","workPoolExtractedId","workPoolName","EventResourceLink","children","routeConfig","Link","FlowRunResourceDisplay","flowRun","useSuspenseQuery","buildGetFlowRunDetailsQuery","ResourceDisplayWithIcon","TaskRunResourceDisplay","taskRun","buildGetTaskRunDetailsQuery","DeploymentResourceDisplay","deployment","buildDeploymentDetailsQuery","FlowResourceDisplay","flow","buildFLowDetailsQuery","WorkPoolResourceDisplay","buildGetWorkPoolQuery","WorkQueueResourceDisplay","workQueue","buildGetWorkQueueQuery","AutomationResourceDisplay","automation","buildGetAutomationQuery","BlockDocumentResourceDisplay","blockDocument","buildGetBlockDocumentQuery","ConcurrencyLimitResourceDisplay","concurrencyLimit","buildGetConcurrencyLimitQuery","ResolvedResourceDisplay","getResourceId","displayText","iconId","typeLabel","Icon","ResourceDisplaySkeleton","jsxs","Skeleton","EventResourceDisplay","event","resourceName","Suspense","getEventPrefixes","eventName","prefixes","i","prefix","formatEventLabel","label","word","capitalize"],"mappings":"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"}
1
+ {"version":3,"file":"utilities-D5-00wjP.js","sources":["../../src/components/ui/json-view.tsx","../../src/components/events/event-resource-display/resource-types.ts","../../src/components/events/event-resource-display/resource-routes.ts","../../src/components/events/event-resource-display/event-resource-link.tsx","../../src/components/events/event-resource-display/resource-displays.tsx","../../src/components/events/event-resource-display/resolved-resource-display.tsx","../../src/components/events/event-resource-display/event-resource-display.tsx","../../src/components/events/events-timeline/utilities.ts"],"sourcesContent":["import type * as React from \"react\";\nimport { cn } from \"@/utils\";\nimport { LazyJsonInput as JsonInput } from \"./json-input-lazy\";\n\ntype JsonViewProps = Omit<\n\tReact.ComponentProps<typeof JsonInput>,\n\t\"onChange\" | \"onBlur\" | \"disabled\"\n> & {\n\tvalue?: string;\n\tclassName?: string;\n\thideLineNumbers?: boolean;\n\tcopy?: boolean;\n};\n\nexport function JsonView({\n\tvalue,\n\tclassName,\n\thideLineNumbers = true,\n\tcopy = true,\n\t...props\n}: JsonViewProps) {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={value}\n\t\t\tdisabled={true}\n\t\t\thideLineNumbers={hideLineNumbers}\n\t\t\tcopy={copy}\n\t\t\tclassName={cn(\"bg-muted/50\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import type { IconId } from \"@/components/ui/icons\";\n\nexport type ResourceType =\n\t| \"flow-run\"\n\t| \"task-run\"\n\t| \"deployment\"\n\t| \"flow\"\n\t| \"work-pool\"\n\t| \"work-queue\"\n\t| \"automation\"\n\t| \"block-document\"\n\t| \"concurrency-limit\"\n\t| \"unknown\";\n\nexport const RESOURCE_ICONS: Record<ResourceType, IconId> = {\n\t\"flow-run\": \"Play\",\n\t\"task-run\": \"Cog\",\n\tdeployment: \"Rocket\",\n\tflow: \"Workflow\",\n\t\"work-pool\": \"Server\",\n\t\"work-queue\": \"ListOrdered\",\n\tautomation: \"Zap\",\n\t\"block-document\": \"Box\",\n\t\"concurrency-limit\": \"Gauge\",\n\tunknown: \"Circle\",\n};\n\nexport const RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\t\"flow-run\": \"Flow run\",\n\t\"task-run\": \"Task run\",\n\tflow: \"Flow\",\n\tdeployment: \"Deployment\",\n\t\"work-pool\": \"Work pool\",\n\t\"work-queue\": \"Work queue\",\n\tautomation: \"Automation\",\n\t\"block-document\": \"Block document\",\n\t\"concurrency-limit\": \"Concurrency limit\",\n\tunknown: \"Resource\",\n};\n\n/**\n * Parses a Prefect resource ID to determine its type.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param resourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The parsed ResourceType, or \"unknown\" if the format is unrecognized\n */\nexport function parseResourceType(resourceId: string): ResourceType {\n\tif (!resourceId || typeof resourceId !== \"string\") {\n\t\treturn \"unknown\";\n\t}\n\n\tif (resourceId.startsWith(\"prefect.flow-run.\")) {\n\t\treturn \"flow-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.task-run.\")) {\n\t\treturn \"task-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.deployment.\")) {\n\t\treturn \"deployment\";\n\t}\n\tif (resourceId.startsWith(\"prefect.flow.\")) {\n\t\treturn \"flow\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-pool.\")) {\n\t\treturn \"work-pool\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-queue.\")) {\n\t\treturn \"work-queue\";\n\t}\n\tif (resourceId.startsWith(\"prefect.automation.\")) {\n\t\treturn \"automation\";\n\t}\n\tif (resourceId.startsWith(\"prefect.block-document.\")) {\n\t\treturn \"block-document\";\n\t}\n\tif (resourceId.startsWith(\"prefect.concurrency-limit.\")) {\n\t\treturn \"concurrency-limit\";\n\t}\n\n\treturn \"unknown\";\n}\n\n/**\n * Extracts the resource identifier from a Prefect resource ID.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param prefectResourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The extracted ID portion (e.g., \"abc-123\"), or null if the format is invalid\n */\nexport function extractResourceId(prefectResourceId: string): string | null {\n\tif (!prefectResourceId || typeof prefectResourceId !== \"string\") {\n\t\treturn null;\n\t}\n\n\tconst parts = prefectResourceId.split(\".\");\n\tif (parts.length < 3) {\n\t\treturn null;\n\t}\n\n\t// Join parts after index 1 (skip \"prefect\" and resource type)\n\treturn parts.slice(2).join(\".\");\n}\n","import type { components } from \"@/api/prefect\";\nimport { extractResourceId, parseResourceType } from \"./resource-types\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\nexport type ResourceRouteConfig = {\n\tto: string;\n\tparams: Record<string, string>;\n};\n\nfunction getResourceName(resource: RelatedResource): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction findWorkPoolInRelated(\n\trelatedResources: RelatedResource[],\n): RelatedResource | null {\n\tfor (const resource of relatedResources) {\n\t\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\t\tconst resourceType = parseResourceType(resourceId);\n\t\tif (resourceType === \"work-pool\") {\n\t\t\treturn resource;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getResourceRoute(\n\tresource: RelatedResource,\n\trelatedResources: RelatedResource[] = [],\n): ResourceRouteConfig | null {\n\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\tconst resourceType = parseResourceType(resourceId);\n\tconst extractedId = extractResourceId(resourceId);\n\n\tif (!extractedId) {\n\t\treturn null;\n\t}\n\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"task-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/task-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"deployment\":\n\t\t\treturn {\n\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"flow\":\n\t\t\treturn {\n\t\t\t\tto: \"/flows/flow/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-pool\": {\n\t\t\t// Work pools use name instead of id in the route\n\t\t\tconst workPoolName = getResourceName(resource) || extractedId;\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName\",\n\t\t\t\tparams: { workPoolName },\n\t\t\t};\n\t\t}\n\t\tcase \"automation\":\n\t\t\treturn {\n\t\t\t\tto: \"/automations/automation/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"block-document\":\n\t\t\treturn {\n\t\t\t\tto: \"/blocks/block/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"concurrency-limit\":\n\t\t\treturn {\n\t\t\t\tto: \"/concurrency-limits/concurrency-limit/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-queue\": {\n\t\t\t// Work queues require both work pool name and queue name\n\t\t\t// Try to find the work pool in related resources\n\t\t\tconst workQueueName = getResourceName(resource);\n\t\t\tif (!workQueueName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPool = findWorkPoolInRelated(relatedResources);\n\t\t\tif (!workPool) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPoolId = workPool[\"prefect.resource.id\"] || \"\";\n\t\t\tconst workPoolExtractedId = extractResourceId(workPoolId);\n\t\t\tconst workPoolName = getResourceName(workPool) || workPoolExtractedId;\n\t\t\tif (!workPoolName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName/queue/$workQueueName\",\n\t\t\t\tparams: { workPoolName, workQueueName },\n\t\t\t};\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Link } from \"@tanstack/react-router\";\nimport type { components } from \"@/api/prefect\";\nimport { getResourceRoute } from \"./resource-routes\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\ntype EventResourceLinkProps = {\n\tresource: RelatedResource;\n\trelatedResources?: RelatedResource[];\n\tchildren: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function EventResourceLink({\n\tresource,\n\trelatedResources = [],\n\tchildren,\n\tclassName,\n}: EventResourceLinkProps) {\n\tconst routeConfig = getResourceRoute(resource, relatedResources);\n\n\tif (!routeConfig) {\n\t\treturn <span className={className}>{children}</span>;\n\t}\n\n\treturn (\n\t\t<Link to={routeConfig.to} params={routeConfig.params} className={className}>\n\t\t\t{children}\n\t\t</Link>\n\t);\n}\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { buildGetAutomationQuery } from \"@/api/automations\";\nimport { buildGetBlockDocumentQuery } from \"@/api/block-documents\";\nimport { buildDeploymentDetailsQuery } from \"@/api/deployments\";\nimport { buildGetFlowRunDetailsQuery } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery } from \"@/api/flows\";\nimport { buildGetConcurrencyLimitQuery } from \"@/api/task-run-concurrency-limits\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { buildGetWorkPoolQuery } from \"@/api/work-pools\";\nimport { buildGetWorkQueueQuery } from \"@/api/work-queues\";\nimport { ResourceDisplayWithIcon } from \"./event-resource-display\";\n\ntype ResourceDisplayProps = {\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function FlowRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow-run\"\n\t\t\tdisplayText={flowRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function TaskRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: taskRun } = useSuspenseQuery(\n\t\tbuildGetTaskRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"task-run\"\n\t\t\tdisplayText={taskRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function DeploymentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: deployment } = useSuspenseQuery(\n\t\tbuildDeploymentDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"deployment\"\n\t\t\tdisplayText={deployment.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function FlowResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flow } = useSuspenseQuery(buildFLowDetailsQuery(resourceId));\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow\"\n\t\t\tdisplayText={flow.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkPoolResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workPool } = useSuspenseQuery(\n\t\tbuildGetWorkPoolQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-pool\"\n\t\t\tdisplayText={workPool.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkQueueResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workQueue } = useSuspenseQuery(\n\t\tbuildGetWorkQueueQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-queue\"\n\t\t\tdisplayText={workQueue.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function AutomationResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: automation } = useSuspenseQuery(\n\t\tbuildGetAutomationQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"automation\"\n\t\t\tdisplayText={automation.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function BlockDocumentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: blockDocument } = useSuspenseQuery(\n\t\tbuildGetBlockDocumentQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"block-document\"\n\t\t\tdisplayText={blockDocument.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function ConcurrencyLimitResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: concurrencyLimit } = useSuspenseQuery(\n\t\tbuildGetConcurrencyLimitQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"concurrency-limit\"\n\t\t\tdisplayText={concurrencyLimit.tag ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n","import {\n\tAutomationResourceDisplay,\n\tBlockDocumentResourceDisplay,\n\tConcurrencyLimitResourceDisplay,\n\tDeploymentResourceDisplay,\n\tFlowResourceDisplay,\n\tFlowRunResourceDisplay,\n\tTaskRunResourceDisplay,\n\tWorkPoolResourceDisplay,\n\tWorkQueueResourceDisplay,\n} from \"./resource-displays\";\nimport type { ResourceType } from \"./resource-types\";\n\ntype ResolvedResourceDisplayProps = {\n\tresourceType: Exclude<ResourceType, \"unknown\">;\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function ResolvedResourceDisplay({\n\tresourceType,\n\tresourceId,\n\tclassName,\n}: ResolvedResourceDisplayProps) {\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn (\n\t\t\t\t<FlowRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"task-run\":\n\t\t\treturn (\n\t\t\t\t<TaskRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"deployment\":\n\t\t\treturn (\n\t\t\t\t<DeploymentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"flow\":\n\t\t\treturn (\n\t\t\t\t<FlowResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"work-pool\":\n\t\t\treturn (\n\t\t\t\t<WorkPoolResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"work-queue\":\n\t\t\treturn (\n\t\t\t\t<WorkQueueResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"automation\":\n\t\t\treturn (\n\t\t\t\t<AutomationResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"block-document\":\n\t\t\treturn (\n\t\t\t\t<BlockDocumentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"concurrency-limit\":\n\t\t\treturn (\n\t\t\t\t<ConcurrencyLimitResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Suspense } from \"react\";\nimport type { Event } from \"@/api/events\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/utils\";\nimport { EventResourceLink } from \"./event-resource-link\";\nimport { ResolvedResourceDisplay } from \"./resolved-resource-display\";\nimport {\n\textractResourceId,\n\tparseResourceType,\n\tRESOURCE_ICONS,\n\tRESOURCE_TYPE_LABELS,\n\ttype ResourceType,\n} from \"./resource-types\";\n\nexport type EventResourceDisplayProps = {\n\tevent: Event;\n\tclassName?: string;\n};\n\nfunction getResourceName(resource: Record<string, string>): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction getResourceId(resource: Record<string, string>): string {\n\treturn resource[\"prefect.resource.id\"] || \"\";\n}\n\ntype ResourceDisplayWithIconProps = {\n\tresourceType: ResourceType;\n\tdisplayText: string;\n\tclassName?: string;\n};\n\nexport function ResourceDisplayWithIcon({\n\tresourceType,\n\tdisplayText,\n\tclassName,\n}: ResourceDisplayWithIconProps) {\n\tconst iconId = RESOURCE_ICONS[resourceType];\n\tconst typeLabel = RESOURCE_TYPE_LABELS[resourceType];\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-2\", className)}>\n\t\t\t{typeLabel && <span>{typeLabel}</span>}\n\t\t\t<Icon id={iconId} className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t<span>{displayText}</span>\n\t\t</div>\n\t);\n}\n\nexport function ResourceDisplaySkeleton() {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Skeleton className=\"h-4 w-4 rounded-full\" />\n\t\t\t<Skeleton className=\"h-4 w-24\" />\n\t\t</div>\n\t);\n}\n\nexport function EventResourceDisplay({\n\tevent,\n\tclassName,\n}: EventResourceDisplayProps) {\n\tconst resourceName = getResourceName(event.resource);\n\tconst prefectResourceId = getResourceId(event.resource);\n\tconst resourceType = parseResourceType(prefectResourceId);\n\tconst extractedId = extractResourceId(prefectResourceId);\n\n\t// If we have a resource name, display it with the appropriate icon\n\tif (resourceName) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={resourceName}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but no name, try to fetch the resource name via API\n\tif (extractedId && resourceType !== \"unknown\") {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResolvedResourceDisplay\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tresourceId={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but unknown type, show the ID with the icon\n\tif (extractedId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm text-muted-foreground font-mono\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Fallback: show the raw resource ID if nothing else is available\n\tif (prefectResourceId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<EventResourceLink\n\t\t\t\t\tresource={event.resource}\n\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t<span className=\"font-mono text-xs\">{prefectResourceId}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</EventResourceLink>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// No resource information available\n\treturn (\n\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t<span className=\"text-muted-foreground\">Unknown</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { capitalize } from \"@/utils\";\n\n/**\n * Get event prefixes for filtering.\n * For example, \"prefect.flow-run.Completed\" returns:\n * [\"prefect.*\", \"prefect.flow-run.*\", \"prefect.flow-run.Completed\"]\n */\nexport function getEventPrefixes(eventName: string): string[] {\n\tconst prefixes: string[] = [];\n\tconst parts = eventName.split(\".\");\n\n\tfor (let i = 1; i < parts.length; i++) {\n\t\tconst prefix = parts.slice(0, i).join(\".\");\n\t\tprefixes.push(`${prefix}.*`);\n\t}\n\n\treturn [...prefixes, eventName];\n}\n\n/**\n * Format event label from event name.\n * For example, \"prefect.flow-run.Completed\" becomes \"Flow Run Completed\"\n */\nexport function formatEventLabel(eventName: string): string {\n\t// Remove prefect. or prefect-cloud. prefix\n\tlet label = eventName;\n\tif (label.startsWith(\"prefect.\")) {\n\t\tlabel = label.slice(8);\n\t} else if (label.startsWith(\"prefect-cloud.\")) {\n\t\tlabel = label.slice(14);\n\t}\n\n\t// Replace dashes and dots with spaces, then capitalize each word\n\treturn label\n\t\t.split(/[._-]/)\n\t\t.map((word) => capitalize(word.toLowerCase()))\n\t\t.join(\" \");\n}\n"],"names":["JsonView","value","className","hideLineNumbers","copy","props","jsx","JsonInput","cn","RESOURCE_ICONS","RESOURCE_TYPE_LABELS","parseResourceType","resourceId","extractResourceId","prefectResourceId","parts","getResourceName","resource","findWorkPoolInRelated","relatedResources","getResourceRoute","resourceType","extractedId","workQueueName","workPool","workPoolId","workPoolExtractedId","workPoolName","EventResourceLink","children","routeConfig","Link","FlowRunResourceDisplay","flowRun","useSuspenseQuery","buildGetFlowRunDetailsQuery","ResourceDisplayWithIcon","TaskRunResourceDisplay","taskRun","buildGetTaskRunDetailsQuery","DeploymentResourceDisplay","deployment","buildDeploymentDetailsQuery","FlowResourceDisplay","flow","buildFLowDetailsQuery","WorkPoolResourceDisplay","buildGetWorkPoolQuery","WorkQueueResourceDisplay","workQueue","buildGetWorkQueueQuery","AutomationResourceDisplay","automation","buildGetAutomationQuery","BlockDocumentResourceDisplay","blockDocument","buildGetBlockDocumentQuery","ConcurrencyLimitResourceDisplay","concurrencyLimit","buildGetConcurrencyLimitQuery","ResolvedResourceDisplay","getResourceId","displayText","iconId","typeLabel","Icon","ResourceDisplaySkeleton","jsxs","Skeleton","EventResourceDisplay","event","resourceName","Suspense","getEventPrefixes","eventName","prefixes","i","prefix","formatEventLabel","label","word","capitalize"],"mappings":"qNAcO,SAASA,EAAS,CACxB,MAAAC,EACA,UAAAC,EACA,gBAAAC,EAAkB,GAClB,KAAAC,EAAO,GACP,GAAGC,CACJ,EAAkB,CACjB,OACCC,EAAAA,IAACC,EAAA,CACA,MAAAN,EACA,SAAU,GACV,gBAAAE,EACA,KAAAC,EACA,UAAWI,EAAG,cAAeN,CAAS,EACrC,GAAGG,CAAA,CAAA,CAGP,CCjBO,MAAMI,EAA+C,CAC3D,WAAY,OACZ,WAAY,MACZ,WAAY,SACZ,KAAM,WACN,YAAa,SACb,aAAc,cACd,WAAY,MACZ,iBAAkB,MAClB,oBAAqB,QACrB,QAAS,QACV,EAEaC,EAAqD,CACjE,WAAY,WACZ,WAAY,WACZ,KAAM,OACN,WAAY,aACZ,YAAa,YACb,aAAc,aACd,WAAY,aACZ,iBAAkB,iBAClB,oBAAqB,oBACrB,QAAS,UACV,EASO,SAASC,EAAkBC,EAAkC,CACnE,MAAI,CAACA,GAAc,OAAOA,GAAe,SACjC,UAGJA,EAAW,WAAW,mBAAmB,EACrC,WAEJA,EAAW,WAAW,mBAAmB,EACrC,WAEJA,EAAW,WAAW,qBAAqB,EACvC,aAEJA,EAAW,WAAW,eAAe,EACjC,OAEJA,EAAW,WAAW,oBAAoB,EACtC,YAEJA,EAAW,WAAW,qBAAqB,EACvC,aAEJA,EAAW,WAAW,qBAAqB,EACvC,aAEJA,EAAW,WAAW,yBAAyB,EAC3C,iBAEJA,EAAW,WAAW,4BAA4B,EAC9C,oBAGD,SACR,CASO,SAASC,EAAkBC,EAA0C,CAC3E,GAAI,CAACA,GAAqB,OAAOA,GAAsB,SACtD,OAAO,KAGR,MAAMC,EAAQD,EAAkB,MAAM,GAAG,EACzC,OAAIC,EAAM,OAAS,EACX,KAIDA,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CAC/B,CC5FA,SAASC,EAAgBC,EAA0C,CAClE,OACCA,EAAS,uBAAuB,GAChCA,EAAS,cAAc,GACvBA,EAAS,oBAAoB,GAC7B,IAEF,CAEA,SAASC,EACRC,EACyB,CACzB,UAAWF,KAAYE,EAAkB,CACxC,MAAMP,EAAaK,EAAS,qBAAqB,GAAK,GAEtD,GADqBN,EAAkBC,CAAU,IAC5B,YACpB,OAAOK,CAET,CACA,OAAO,IACR,CAEO,SAASG,EACfH,EACAE,EAAsC,GACT,CAC7B,MAAMP,EAAaK,EAAS,qBAAqB,GAAK,GAChDI,EAAeV,EAAkBC,CAAU,EAC3CU,EAAcT,EAAkBD,CAAU,EAEhD,GAAI,CAACU,EACJ,OAAO,KAGR,OAAQD,EAAA,CACP,IAAK,WACJ,MAAO,CACN,GAAI,qBACJ,OAAQ,CAAE,GAAIC,CAAA,CAAY,EAE5B,IAAK,WACJ,MAAO,CACN,GAAI,qBACJ,OAAQ,CAAE,GAAIA,CAAA,CAAY,EAE5B,IAAK,aACJ,MAAO,CACN,GAAI,8BACJ,OAAQ,CAAE,GAAIA,CAAA,CAAY,EAE5B,IAAK,OACJ,MAAO,CACN,GAAI,kBACJ,OAAQ,CAAE,GAAIA,CAAA,CAAY,EAE5B,IAAK,YAGJ,MAAO,CACN,GAAI,sCACJ,OAAQ,CAAE,aAHUN,EAAgBC,CAAQ,GAAKK,CAGvC,CAAa,EAGzB,IAAK,aACJ,MAAO,CACN,GAAI,8BACJ,OAAQ,CAAE,GAAIA,CAAA,CAAY,EAE5B,IAAK,iBACJ,MAAO,CACN,GAAI,oBACJ,OAAQ,CAAE,GAAIA,CAAA,CAAY,EAE5B,IAAK,oBACJ,MAAO,CACN,GAAI,4CACJ,OAAQ,CAAE,GAAIA,CAAA,CAAY,EAE5B,IAAK,aAAc,CAGlB,MAAMC,EAAgBP,EAAgBC,CAAQ,EAC9C,GAAI,CAACM,EACJ,OAAO,KAER,MAAMC,EAAWN,EAAsBC,CAAgB,EACvD,GAAI,CAACK,EACJ,OAAO,KAER,MAAMC,EAAaD,EAAS,qBAAqB,GAAK,GAChDE,EAAsBb,EAAkBY,CAAU,EAClDE,EAAeX,EAAgBQ,CAAQ,GAAKE,EAClD,OAAKC,EAGE,CACN,GAAI,2DACJ,OAAQ,CAAE,aAAAA,EAAc,cAAAJ,CAAA,CAAc,EAJ/B,IAMT,CACA,QACC,OAAO,IAAA,CAEV,CCpGO,SAASK,EAAkB,CACjC,SAAAX,EACA,iBAAAE,EAAmB,CAAA,EACnB,SAAAU,EACA,UAAA3B,CACD,EAA2B,CAC1B,MAAM4B,EAAcV,EAAiBH,EAAUE,CAAgB,EAE/D,OAAKW,EAKJxB,MAACyB,GAAK,GAAID,EAAY,GAAI,OAAQA,EAAY,OAAQ,UAAA5B,EACpD,SAAA2B,CAAA,CACF,EANOvB,EAAAA,IAAC,OAAA,CAAK,UAAAJ,EAAuB,SAAA2B,CAAA,CAAS,CAQ/C,CCbO,SAASG,EAAuB,CACtC,WAAApB,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAM+B,CAAA,EAAYC,EACzBC,EAA4BvB,CAAU,CAAA,EAEvC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,WACb,YAAaH,EAAQ,MAAQrB,EAC7B,UAAAV,CAAA,CAAA,CAGH,CAEO,SAASmC,EAAuB,CACtC,WAAAzB,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAMoC,CAAA,EAAYJ,EACzBK,EAA4B3B,CAAU,CAAA,EAEvC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,WACb,YAAaE,EAAQ,MAAQ1B,EAC7B,UAAAV,CAAA,CAAA,CAGH,CAEO,SAASsC,EAA0B,CACzC,WAAA5B,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAMuC,CAAA,EAAeP,EAC5BQ,EAA4B9B,CAAU,CAAA,EAEvC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,aACb,YAAaK,EAAW,KACxB,UAAAvC,CAAA,CAAA,CAGH,CAEO,SAASyC,EAAoB,CACnC,WAAA/B,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAM0C,CAAA,EAASV,EAAiBW,EAAsBjC,CAAU,CAAC,EACzE,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,OACb,YAAaQ,EAAK,KAClB,UAAA1C,CAAA,CAAA,CAGH,CAEO,SAAS4C,EAAwB,CACvC,WAAAlC,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAMsB,CAAA,EAAaU,EAC1Ba,EAAsBnC,CAAU,CAAA,EAEjC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,YACb,YAAaZ,EAAS,KACtB,UAAAtB,CAAA,CAAA,CAGH,CAEO,SAAS8C,EAAyB,CACxC,WAAApC,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAM+C,CAAA,EAAcf,EAC3BgB,EAAuBtC,CAAU,CAAA,EAElC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,aACb,YAAaa,EAAU,KACvB,UAAA/C,CAAA,CAAA,CAGH,CAEO,SAASiD,EAA0B,CACzC,WAAAvC,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAMkD,CAAA,EAAelB,EAC5BmB,EAAwBzC,CAAU,CAAA,EAEnC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,aACb,YAAagB,EAAW,KACxB,UAAAlD,CAAA,CAAA,CAGH,CAEO,SAASoD,EAA6B,CAC5C,WAAA1C,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAMqD,CAAA,EAAkBrB,EAC/BsB,EAA2B5C,CAAU,CAAA,EAEtC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,iBACb,YAAamB,EAAc,MAAQ3C,EACnC,UAAAV,CAAA,CAAA,CAGH,CAEO,SAASuD,EAAgC,CAC/C,WAAA7C,EACA,UAAAV,CACD,EAAyB,CACxB,KAAM,CAAE,KAAMwD,CAAA,EAAqBxB,EAClCyB,EAA8B/C,CAAU,CAAA,EAEzC,OACCN,EAAAA,IAAC8B,EAAA,CACA,aAAa,oBACb,YAAasB,EAAiB,KAAO9C,EACrC,UAAAV,CAAA,CAAA,CAGH,CC1IO,SAAS0D,EAAwB,CACvC,aAAAvC,EACA,WAAAT,EACA,UAAAV,CACD,EAAiC,CAChC,OAAQmB,EAAA,CACP,IAAK,WACJ,OACCf,EAAAA,IAAC0B,EAAA,CAAuB,WAAApB,EAAwB,UAAAV,CAAA,CAAsB,EAExE,IAAK,WACJ,OACCI,EAAAA,IAAC+B,EAAA,CAAuB,WAAAzB,EAAwB,UAAAV,CAAA,CAAsB,EAExE,IAAK,aACJ,OACCI,EAAAA,IAACkC,EAAA,CACA,WAAA5B,EACA,UAAAV,CAAA,CAAA,EAGH,IAAK,OACJ,OACCI,EAAAA,IAACqC,EAAA,CAAoB,WAAA/B,EAAwB,UAAAV,CAAA,CAAsB,EAErE,IAAK,YACJ,OACCI,EAAAA,IAACwC,EAAA,CACA,WAAAlC,EACA,UAAAV,CAAA,CAAA,EAGH,IAAK,aACJ,OACCI,EAAAA,IAAC0C,EAAA,CACA,WAAApC,EACA,UAAAV,CAAA,CAAA,EAGH,IAAK,aACJ,OACCI,EAAAA,IAAC6C,EAAA,CACA,WAAAvC,EACA,UAAAV,CAAA,CAAA,EAGH,IAAK,iBACJ,OACCI,EAAAA,IAACgD,EAAA,CACA,WAAA1C,EACA,UAAAV,CAAA,CAAA,EAGH,IAAK,oBACJ,OACCI,EAAAA,IAACmD,EAAA,CACA,WAAA7C,EACA,UAAAV,CAAA,CAAA,EAGH,QACC,OAAO,IAAA,CAEV,CC9DA,SAASc,EAAgBC,EAAiD,CACzE,OACCA,EAAS,uBAAuB,GAChCA,EAAS,cAAc,GACvBA,EAAS,oBAAoB,GAC7B,IAEF,CAEA,SAAS4C,EAAc5C,EAA0C,CAChE,OAAOA,EAAS,qBAAqB,GAAK,EAC3C,CAQO,SAASmB,EAAwB,CACvC,aAAAf,EACA,YAAAyC,EACA,UAAA5D,CACD,EAAiC,CAChC,MAAM6D,EAAStD,EAAeY,CAAY,EACpC2C,EAAYtD,EAAqBW,CAAY,EAEnD,cACE,MAAA,CAAI,UAAWb,EAAG,0BAA2BN,CAAS,EACrD,SAAA,CAAA8D,GAAa1D,EAAAA,IAAC,QAAM,SAAA0D,CAAA,CAAU,EAC/B1D,EAAAA,IAAC2D,EAAA,CAAK,GAAIF,EAAQ,UAAU,gCAAgC,EAC5DzD,EAAAA,IAAC,QAAM,SAAAwD,CAAA,CAAY,CAAA,EACpB,CAEF,CAEO,SAASI,GAA0B,CACzC,OACCC,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAA7D,EAAAA,IAAC8D,EAAA,CAAS,UAAU,sBAAA,CAAuB,EAC3C9D,EAAAA,IAAC8D,EAAA,CAAS,UAAU,UAAA,CAAW,CAAA,EAChC,CAEF,CAEO,SAASC,EAAqB,CACpC,MAAAC,EACA,UAAApE,CACD,EAA8B,CAC7B,MAAMqE,EAAevD,EAAgBsD,EAAM,QAAQ,EAC7CxD,EAAoB+C,EAAcS,EAAM,QAAQ,EAChDjD,EAAeV,EAAkBG,CAAiB,EAClDQ,EAAcT,EAAkBC,CAAiB,EAGvD,OAAIyD,SAED,MAAA,CAAI,UAAW/D,EAAG,wBAAyBN,CAAS,EACpD,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAsB,SAAA,WAAQ,EAC9CA,MAACkE,EAAAA,SAAA,CAAS,SAAUlE,EAAAA,IAAC4D,IAAwB,EAC5C,SAAA5D,EAAAA,IAACsB,EAAA,CACA,SAAU0C,EAAM,SAChB,iBAAkBA,EAAM,SAAW,CAAA,EACnC,UAAU,kBAEV,SAAAhE,EAAAA,IAAC8B,EAAA,CACA,aAAAf,EACA,YAAakD,EACb,UAAU,SAAA,CAAA,CACX,CAAA,CACD,CACD,CAAA,EACD,EAKEjD,GAAeD,IAAiB,iBAEjC,MAAA,CAAI,UAAWb,EAAG,wBAAyBN,CAAS,EACpD,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAsB,SAAA,WAAQ,EAC9CA,MAACkE,EAAAA,SAAA,CAAS,SAAUlE,EAAAA,IAAC4D,IAAwB,EAC5C,SAAA5D,EAAAA,IAACsB,EAAA,CACA,SAAU0C,EAAM,SAChB,iBAAkBA,EAAM,SAAW,CAAA,EACnC,UAAU,kBAEV,SAAAhE,EAAAA,IAACsD,EAAA,CACA,aAAAvC,EACA,WAAYC,EACZ,UAAU,SAAA,CAAA,CACX,CAAA,CACD,CACD,CAAA,EACD,EAKEA,SAED,MAAA,CAAI,UAAWd,EAAG,wBAAyBN,CAAS,EACpD,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAsB,SAAA,WAAQ,EAC9CA,MAACkE,EAAAA,SAAA,CAAS,SAAUlE,EAAAA,IAAC4D,IAAwB,EAC5C,SAAA5D,EAAAA,IAACsB,EAAA,CACA,SAAU0C,EAAM,SAChB,iBAAkBA,EAAM,SAAW,CAAA,EACnC,UAAU,kBAEV,SAAAhE,EAAAA,IAAC8B,EAAA,CACA,aAAAf,EACA,YAAaC,EACb,UAAU,yCAAA,CAAA,CACX,CAAA,CACD,CACD,CAAA,EACD,EAKER,SAED,MAAA,CAAI,UAAWN,EAAG,wBAAyBN,CAAS,EACpD,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAsB,SAAA,WAAQ,EAC9CA,EAAAA,IAACsB,EAAA,CACA,SAAU0C,EAAM,SAChB,iBAAkBA,EAAM,SAAW,CAAA,EACnC,UAAU,kBAEV,SAAAhE,EAAAA,IAAC,OAAI,UAAU,gCACd,eAAC,OAAA,CAAK,UAAU,oBAAqB,SAAAQ,CAAA,CAAkB,CAAA,CACxD,CAAA,CAAA,CACD,EACD,SAMA,MAAA,CAAI,UAAWN,EAAG,wBAAyBN,CAAS,EACpD,SAAA,CAAAI,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAsB,SAAA,WAAQ,EAC9CA,EAAAA,IAAC,OAAI,UAAU,gCACd,eAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,SAAA,CAAO,CAAA,CAChD,CAAA,EACD,CAEF,CChKO,SAASmE,GAAiBC,EAA6B,CAC7D,MAAMC,EAAqB,CAAA,EACrB5D,EAAQ2D,EAAU,MAAM,GAAG,EAEjC,QAASE,EAAI,EAAGA,EAAI7D,EAAM,OAAQ6D,IAAK,CACtC,MAAMC,EAAS9D,EAAM,MAAM,EAAG6D,CAAC,EAAE,KAAK,GAAG,EACzCD,EAAS,KAAK,GAAGE,CAAM,IAAI,CAC5B,CAEA,MAAO,CAAC,GAAGF,EAAUD,CAAS,CAC/B,CAMO,SAASI,GAAiBJ,EAA2B,CAE3D,IAAIK,EAAQL,EACZ,OAAIK,EAAM,WAAW,UAAU,EAC9BA,EAAQA,EAAM,MAAM,CAAC,EACXA,EAAM,WAAW,gBAAgB,IAC3CA,EAAQA,EAAM,MAAM,EAAE,GAIhBA,EACL,MAAM,OAAO,EACb,IAAKC,GAASC,EAAWD,EAAK,YAAA,CAAa,CAAC,EAC5C,KAAK,GAAG,CACX"}