prefect 3.7.6.dev2__py3-none-any.whl → 3.7.6.dev4__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 (181) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/cli/work_queue.py +1 -1
  3. prefect/server/api/server.py +14 -1
  4. prefect/server/ui-v2/assets/artifact._id-DbwWmX6Z.js +2 -0
  5. prefect/server/ui-v2/assets/artifact._id-DbwWmX6Z.js.map +1 -0
  6. prefect/server/ui-v2/assets/{artifacts-CoQ3NpUZ.js → artifacts-BX0yE4rE.js} +2 -2
  7. prefect/server/ui-v2/assets/{artifacts-CoQ3NpUZ.js.map → artifacts-BX0yE4rE.js.map} +1 -1
  8. prefect/server/ui-v2/assets/{automation-wizard-DmM5CcVm.js → automation-wizard-BgO-_tGL.js} +2 -2
  9. prefect/server/ui-v2/assets/{automation-wizard-DmM5CcVm.js.map → automation-wizard-BgO-_tGL.js.map} +1 -1
  10. prefect/server/ui-v2/assets/{automation._id-Am274JaS.js → automation._id-DNgsPFov.js} +2 -2
  11. prefect/server/ui-v2/assets/{automation._id-Am274JaS.js.map → automation._id-DNgsPFov.js.map} +1 -1
  12. prefect/server/ui-v2/assets/{automation_._id.edit-DxBkDYVC.js → automation_._id.edit-hzDXo6gX.js} +2 -2
  13. prefect/server/ui-v2/assets/{automation_._id.edit-DxBkDYVC.js.map → automation_._id.edit-hzDXo6gX.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{automations-CJLPMwWt.js → automations-5F00U_Oe.js} +2 -2
  15. prefect/server/ui-v2/assets/{automations-CJLPMwWt.js.map → automations-5F00U_Oe.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{automations-D-qcbwAm.js → automations-DX07qygW.js} +2 -2
  17. prefect/server/ui-v2/assets/{automations-D-qcbwAm.js.map → automations-DX07qygW.js.map} +1 -1
  18. prefect/server/ui-v2/assets/{automations-header-CWJtUF73.js → automations-header-BxuwNKzS.js} +2 -2
  19. prefect/server/ui-v2/assets/{automations-header-CWJtUF73.js.map → automations-header-BxuwNKzS.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{automations-wizard-BJPQiHwe.js → automations-wizard-DJXAW1lX.js} +2 -2
  21. prefect/server/ui-v2/assets/{automations-wizard-BJPQiHwe.js.map → automations-wizard-DJXAW1lX.js.map} +1 -1
  22. prefect/server/ui-v2/assets/{base-job-template-form-section-DQegfRA-.js → base-job-template-form-section-CmuIYdg7.js} +2 -2
  23. prefect/server/ui-v2/assets/{base-job-template-form-section-DQegfRA-.js.map → base-job-template-form-section-CmuIYdg7.js.map} +1 -1
  24. prefect/server/ui-v2/assets/{block-type-details-BgriKBeM.js → block-type-details-DFsv0tJf.js} +2 -2
  25. prefect/server/ui-v2/assets/{block-type-details-BgriKBeM.js.map → block-type-details-DFsv0tJf.js.map} +1 -1
  26. prefect/server/ui-v2/assets/{block._id-CnZqI8l0.js → block._id-CMoqPZw0.js} +2 -2
  27. prefect/server/ui-v2/assets/{block._id-CnZqI8l0.js.map → block._id-CMoqPZw0.js.map} +1 -1
  28. prefect/server/ui-v2/assets/{block_._id.edit-TGSlVdLh.js → block_._id.edit-CCgGqdWa.js} +2 -2
  29. prefect/server/ui-v2/assets/{block_._id.edit-TGSlVdLh.js.map → block_._id.edit-CCgGqdWa.js.map} +1 -1
  30. prefect/server/ui-v2/assets/{blocks-16A6TRBP.js → blocks-Bo9deqa7.js} +2 -2
  31. prefect/server/ui-v2/assets/{blocks-16A6TRBP.js.map → blocks-Bo9deqa7.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{catalog-CFjXzC0f.js → catalog-DNfEDR6k.js} +2 -2
  33. prefect/server/ui-v2/assets/{catalog-CFjXzC0f.js.map → catalog-DNfEDR6k.js.map} +1 -1
  34. prefect/server/ui-v2/assets/{catalog_._slug-ompTKVxi.js → catalog_._slug-2SzBa_7A.js} +2 -2
  35. prefect/server/ui-v2/assets/{catalog_._slug-ompTKVxi.js.map → catalog_._slug-2SzBa_7A.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{catalog_._slug_.create-k0gyysAn.js → catalog_._slug_.create-BQj7Kqjo.js} +2 -2
  37. prefect/server/ui-v2/assets/{catalog_._slug_.create-k0gyysAn.js.map → catalog_._slug_.create-BQj7Kqjo.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{concurrency-limit._id-DFV-uWJ4.js → concurrency-limit._id-BDlrRPtj.js} +2 -2
  39. prefect/server/ui-v2/assets/{concurrency-limit._id-DFV-uWJ4.js.map → concurrency-limit._id-BDlrRPtj.js.map} +1 -1
  40. prefect/server/ui-v2/assets/{concurrency-limits-Yw-NpY-o.js → concurrency-limits-BDVgc4AW.js} +2 -2
  41. prefect/server/ui-v2/assets/{concurrency-limits-Yw-NpY-o.js.map → concurrency-limits-BDVgc4AW.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{create-Co4c5cca.js → create-CCyPuAXl.js} +2 -2
  43. prefect/server/ui-v2/assets/{create-Co4c5cca.js.map → create-CCyPuAXl.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{create-B-zeoj4G.js → create-CymKoFJV.js} +2 -2
  45. prefect/server/ui-v2/assets/{create-B-zeoj4G.js.map → create-CymKoFJV.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{data-table-rBFlK3pd.js → data-table-CB74-n3t.js} +2 -2
  47. prefect/server/ui-v2/assets/{data-table-rBFlK3pd.js.map → data-table-CB74-n3t.js.map} +1 -1
  48. prefect/server/ui-v2/assets/{data-table-CHq00JQL.js → data-table-CvnqhGK_.js} +2 -2
  49. prefect/server/ui-v2/assets/{data-table-CHq00JQL.js.map → data-table-CvnqhGK_.js.map} +1 -1
  50. prefect/server/ui-v2/assets/deployment-form-CK8Wz-Ec.js +3 -0
  51. prefect/server/ui-v2/assets/{deployment-form-BP4VEHLr.js.map → deployment-form-CK8Wz-Ec.js.map} +1 -1
  52. prefect/server/ui-v2/assets/{deployment-links-14F6Ojal.js → deployment-links-CPNFZHxo.js} +2 -2
  53. prefect/server/ui-v2/assets/{deployment-links-14F6Ojal.js.map → deployment-links-CPNFZHxo.js.map} +1 -1
  54. prefect/server/ui-v2/assets/{deployment._id-CZzEj5LH.js → deployment._id-B6kcNioN.js} +2 -2
  55. prefect/server/ui-v2/assets/{deployment._id-CZzEj5LH.js.map → deployment._id-B6kcNioN.js.map} +1 -1
  56. prefect/server/ui-v2/assets/{deployment_._id.duplicate-CJFMiURc.js → deployment_._id.duplicate-GA20bhLZ.js} +2 -2
  57. prefect/server/ui-v2/assets/{deployment_._id.duplicate-CJFMiURc.js.map → deployment_._id.duplicate-GA20bhLZ.js.map} +1 -1
  58. prefect/server/ui-v2/assets/{deployment_._id.edit-CBZ8s1d-.js → deployment_._id.edit-CouIBThW.js} +2 -2
  59. prefect/server/ui-v2/assets/{deployment_._id.edit-CBZ8s1d-.js.map → deployment_._id.edit-CouIBThW.js.map} +1 -1
  60. prefect/server/ui-v2/assets/{deployment_._id.run-CjASR69b.js → deployment_._id.run-DQwdvQyG.js} +2 -2
  61. prefect/server/ui-v2/assets/{deployment_._id.run-CjASR69b.js.map → deployment_._id.run-DQwdvQyG.js.map} +1 -1
  62. prefect/server/ui-v2/assets/{deployments-5PGYwGxZ.js → deployments-BICu5WaO.js} +2 -2
  63. prefect/server/ui-v2/assets/{deployments-5PGYwGxZ.js.map → deployments-BICu5WaO.js.map} +1 -1
  64. prefect/server/ui-v2/assets/{deployments-AVmjI3zk.js → deployments-CSC_HpAW.js} +2 -2
  65. prefect/server/ui-v2/assets/{deployments-AVmjI3zk.js.map → deployments-CSC_HpAW.js.map} +1 -1
  66. prefect/server/ui-v2/assets/{event-resource-display-BkVMF8fC.js → event-resource-display-DEPZ9HVr.js} +2 -2
  67. prefect/server/ui-v2/assets/{event-resource-display-BkVMF8fC.js.map → event-resource-display-DEPZ9HVr.js.map} +1 -1
  68. prefect/server/ui-v2/assets/{event._eventDate._eventId-ZaSiS25O.js → event._eventDate._eventId-DLhO9lzN.js} +2 -2
  69. prefect/server/ui-v2/assets/{event._eventDate._eventId-ZaSiS25O.js.map → event._eventDate._eventId-DLhO9lzN.js.map} +1 -1
  70. prefect/server/ui-v2/assets/{events-BSBkt4RK.js → events-CC_pjzwj.js} +2 -2
  71. prefect/server/ui-v2/assets/{events-BSBkt4RK.js.map → events-CC_pjzwj.js.map} +1 -1
  72. prefect/server/ui-v2/assets/{events-timeline-C6ilXYWL.js → events-timeline-DImNiwEL.js} +2 -2
  73. prefect/server/ui-v2/assets/{events-timeline-C6ilXYWL.js.map → events-timeline-DImNiwEL.js.map} +1 -1
  74. prefect/server/ui-v2/assets/{flow-run-graph-dnRIRQwf.js → flow-run-graph-CkRUTkPM.js} +2 -2
  75. prefect/server/ui-v2/assets/{flow-run-graph-dnRIRQwf.js.map → flow-run-graph-CkRUTkPM.js.map} +1 -1
  76. prefect/server/ui-v2/assets/{flow-run._id-BzUDkqf3.js → flow-run._id-BW6Xaldy.js} +2 -2
  77. prefect/server/ui-v2/assets/{flow-run._id-BzUDkqf3.js.map → flow-run._id-BW6Xaldy.js.map} +1 -1
  78. prefect/server/ui-v2/assets/{flow-run._id-ChVrVg3Z.js → flow-run._id-D8eKgKMn.js} +3 -3
  79. prefect/server/ui-v2/assets/{flow-run._id-ChVrVg3Z.js.map → flow-run._id-D8eKgKMn.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{flow._id-CP9Okj12.js → flow._id-B6XZwlk3.js} +2 -2
  81. prefect/server/ui-v2/assets/{flow._id-CP9Okj12.js.map → flow._id-B6XZwlk3.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{flow._id-I2gqyXIm.js → flow._id-_ksXKYoK.js} +2 -2
  83. prefect/server/ui-v2/assets/{flow._id-I2gqyXIm.js.map → flow._id-_ksXKYoK.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{flows-L_rW2zl9.js → flows-CN3d4wWY.js} +2 -2
  85. prefect/server/ui-v2/assets/{flows-L_rW2zl9.js.map → flows-CN3d4wWY.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{header-BZ1fdNhk.js → header-BDAp1iPJ.js} +2 -2
  87. prefect/server/ui-v2/assets/{header-BZ1fdNhk.js.map → header-BDAp1iPJ.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{header-DjVYEfSY.js → header-sRl3Tjgo.js} +2 -2
  89. prefect/server/ui-v2/assets/{header-DjVYEfSY.js.map → header-sRl3Tjgo.js.map} +1 -1
  90. prefect/server/ui-v2/assets/{header-aiojpUxK.js → header-tWLjS4LH.js} +2 -2
  91. prefect/server/ui-v2/assets/{header-aiojpUxK.js.map → header-tWLjS4LH.js.map} +1 -1
  92. prefect/server/ui-v2/assets/{index-B-eHd1rg.js → index-truoiNS9.js} +4 -4
  93. prefect/server/ui-v2/assets/index-truoiNS9.js.map +1 -0
  94. prefect/server/ui-v2/assets/{json-input-DNcrKZhQ.js → json-input-BrCO8QbK.js} +2 -2
  95. prefect/server/ui-v2/assets/{json-input-DNcrKZhQ.js.map → json-input-BrCO8QbK.js.map} +1 -1
  96. prefect/server/ui-v2/assets/{key._key-Bxfagn0s.js → key._key-DGHIw0AR.js} +2 -2
  97. prefect/server/ui-v2/assets/{key._key-Bxfagn0s.js.map → key._key-DGHIw0AR.js.map} +1 -1
  98. prefect/server/ui-v2/assets/{lazy-markdown-B2kL9xrU.js → lazy-markdown-DpjTB-zg.js} +2 -2
  99. prefect/server/ui-v2/assets/{lazy-markdown-B2kL9xrU.js.map → lazy-markdown-DpjTB-zg.js.map} +1 -1
  100. prefect/server/ui-v2/assets/{login-DnDnlD5W.js → login-BSRsGmUo.js} +2 -2
  101. prefect/server/ui-v2/assets/{login-DnDnlD5W.js.map → login-BSRsGmUo.js.map} +1 -1
  102. prefect/server/ui-v2/assets/markdown-input-CC76KOBh.js +2 -0
  103. prefect/server/ui-v2/assets/markdown-input-CC76KOBh.js.map +1 -0
  104. prefect/server/ui-v2/assets/python-example-snippet-iDumszHT.js +3 -0
  105. prefect/server/ui-v2/assets/{python-example-snippet-78624W02.js.map → python-example-snippet-iDumszHT.js.map} +1 -1
  106. prefect/server/ui-v2/assets/python-input-B8ISCy6w.js +2 -0
  107. prefect/server/ui-v2/assets/python-input-B8ISCy6w.js.map +1 -0
  108. prefect/server/ui-v2/assets/{runs-SwL0Kq1w.js → runs-Dw7bUdfw.js} +2 -2
  109. prefect/server/ui-v2/assets/{runs-SwL0Kq1w.js.map → runs-Dw7bUdfw.js.map} +1 -1
  110. prefect/server/ui-v2/assets/{runs-6ADtaRfi.js → runs-kI3pnqYK.js} +2 -2
  111. prefect/server/ui-v2/assets/{runs-6ADtaRfi.js.map → runs-kI3pnqYK.js.map} +1 -1
  112. prefect/server/ui-v2/assets/{schedule-badge-DoG88I6h.js → schedule-badge-DKZ-iUtF.js} +2 -2
  113. prefect/server/ui-v2/assets/{schedule-badge-DoG88I6h.js.map → schedule-badge-DKZ-iUtF.js.map} +1 -1
  114. prefect/server/ui-v2/assets/{schema-form-DW8KvKll.js → schema-form-DNZJiW6q.js} +2 -2
  115. prefect/server/ui-v2/assets/{schema-form-DW8KvKll.js.map → schema-form-DNZJiW6q.js.map} +1 -1
  116. prefect/server/ui-v2/assets/{settings-DZYAw9Wv.js → settings-DVBZdw2M.js} +2 -2
  117. prefect/server/ui-v2/assets/{settings-DZYAw9Wv.js.map → settings-DVBZdw2M.js.map} +1 -1
  118. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-BjWahmSR.js → task-run-concurrency-limits-reset-dialog-TG8cZsIP.js} +2 -2
  119. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-BjWahmSR.js.map → task-run-concurrency-limits-reset-dialog-TG8cZsIP.js.map} +1 -1
  120. prefect/server/ui-v2/assets/{task-run._id-C8B9-vYF.js → task-run._id-CbDTA47J.js} +2 -2
  121. prefect/server/ui-v2/assets/{task-run._id-C8B9-vYF.js.map → task-run._id-CbDTA47J.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{timezone-select-BliFPKvb.js → timezone-select-Cicbhpzk.js} +2 -2
  123. prefect/server/ui-v2/assets/{timezone-select-BliFPKvb.js.map → timezone-select-Cicbhpzk.js.map} +1 -1
  124. prefect/server/ui-v2/assets/{toggle-group-iVsvcUYV.js → toggle-group-Dz71Milz.js} +2 -2
  125. prefect/server/ui-v2/assets/{toggle-group-iVsvcUYV.js.map → toggle-group-Dz71Milz.js.map} +1 -1
  126. prefect/server/ui-v2/assets/{trigger-details-DxfW6XWx.js → trigger-details-gZrDa6H6.js} +2 -2
  127. prefect/server/ui-v2/assets/{trigger-details-DxfW6XWx.js.map → trigger-details-gZrDa6H6.js.map} +1 -1
  128. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-kvuIfX3m.js → use-delete-automation-confirmation-dialog-CGbHzned.js} +2 -2
  129. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-kvuIfX3m.js.map → use-delete-automation-confirmation-dialog-CGbHzned.js.map} +1 -1
  130. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DlxyLHfX.js → use-delete-block-document-confirmation-dialog-etwjfeUh.js} +2 -2
  131. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DlxyLHfX.js.map → use-delete-block-document-confirmation-dialog-etwjfeUh.js.map} +1 -1
  132. prefect/server/ui-v2/assets/{use-delete-deployment-confirmation-dialog-Be4DRztm.js → use-delete-deployment-confirmation-dialog-b6o2d9Tr.js} +2 -2
  133. prefect/server/ui-v2/assets/{use-delete-deployment-confirmation-dialog-Be4DRztm.js.map → use-delete-deployment-confirmation-dialog-b6o2d9Tr.js.map} +1 -1
  134. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BoPI04G-.js → use-get-artifacts-flow-task-runs-CqILC8vp.js} +2 -2
  135. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BoPI04G-.js.map → use-get-artifacts-flow-task-runs-CqILC8vp.js.map} +1 -1
  136. prefect/server/ui-v2/assets/{use-page-size-preference-DwUjg8bQ.js → use-page-size-preference-CMqCqAe6.js} +2 -2
  137. prefect/server/ui-v2/assets/{use-page-size-preference-DwUjg8bQ.js.map → use-page-size-preference-CMqCqAe6.js.map} +1 -1
  138. prefect/server/ui-v2/assets/{use-resource-options-CLqR8LCF.js → use-resource-options-DBswbgR4.js} +2 -2
  139. prefect/server/ui-v2/assets/{use-resource-options-CLqR8LCF.js.map → use-resource-options-DBswbgR4.js.map} +1 -1
  140. prefect/server/ui-v2/assets/{variables-DMpTJ-91.js → variables-BHf2q4gw.js} +2 -2
  141. prefect/server/ui-v2/assets/{variables-DMpTJ-91.js.map → variables-BHf2q4gw.js.map} +1 -1
  142. prefect/server/ui-v2/assets/{variables-DXPQbLQQ.js → variables-CTFCVb-Y.js} +2 -2
  143. prefect/server/ui-v2/assets/{variables-DXPQbLQQ.js.map → variables-CTFCVb-Y.js.map} +1 -1
  144. prefect/server/ui-v2/assets/{work-pool-queue-form-Bd_lIFjr.js → work-pool-queue-form-NLq9LGfl.js} +2 -2
  145. prefect/server/ui-v2/assets/{work-pool-queue-form-Bd_lIFjr.js.map → work-pool-queue-form-NLq9LGfl.js.map} +1 -1
  146. prefect/server/ui-v2/assets/{work-pool-queue-toggle-DASR_iyG.js → work-pool-queue-toggle-CJAUMg0e.js} +2 -2
  147. prefect/server/ui-v2/assets/{work-pool-queue-toggle-DASR_iyG.js.map → work-pool-queue-toggle-CJAUMg0e.js.map} +1 -1
  148. prefect/server/ui-v2/assets/{work-pool._workPoolName-qbUDlGEm.js → work-pool._workPoolName-HB7kGcck.js} +2 -2
  149. prefect/server/ui-v2/assets/{work-pool._workPoolName-qbUDlGEm.js.map → work-pool._workPoolName-HB7kGcck.js.map} +1 -1
  150. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-C2ExqEhs.js → work-pool_._workPoolName.edit-B_3JNGHL.js} +2 -2
  151. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-C2ExqEhs.js.map → work-pool_._workPoolName.edit-B_3JNGHL.js.map} +1 -1
  152. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BQLJedu9.js → work-pool_._workPoolName.queue._workQueueName-CPuFIgp8.js} +2 -2
  153. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BQLJedu9.js.map → work-pool_._workPoolName.queue._workQueueName-CPuFIgp8.js.map} +1 -1
  154. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-DkB6Koji.js → work-pool_._workPoolName.queue.create-D9iKz3hQ.js} +2 -2
  155. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-DkB6Koji.js.map → work-pool_._workPoolName.queue.create-D9iKz3hQ.js.map} +1 -1
  156. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-93I8SY9v.js → work-pool_._workPoolName.queue_._workQueueName.edit-BRC93bQC.js} +2 -2
  157. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-93I8SY9v.js.map → work-pool_._workPoolName.queue_._workQueueName.edit-BRC93bQC.js.map} +1 -1
  158. prefect/server/ui-v2/assets/{work-pools-CEp0Tb-P.js → work-pools-B1RadBvS.js} +2 -2
  159. prefect/server/ui-v2/assets/{work-pools-CEp0Tb-P.js.map → work-pools-B1RadBvS.js.map} +1 -1
  160. prefect/server/ui-v2/assets/{work-pools-EYXiMJ7Y.js → work-pools-BZd7s2w8.js} +2 -2
  161. prefect/server/ui-v2/assets/{work-pools-EYXiMJ7Y.js.map → work-pools-BZd7s2w8.js.map} +1 -1
  162. prefect/server/ui-v2/assets/{work-queue-icon-text-B3yGdSKA.js → work-queue-icon-text-D2L8e6TG.js} +2 -2
  163. prefect/server/ui-v2/assets/{work-queue-icon-text-B3yGdSKA.js.map → work-queue-icon-text-D2L8e6TG.js.map} +1 -1
  164. prefect/server/ui-v2/assets/{work-queue-select-CtGxuLIi.js → work-queue-select-CU0K1bAn.js} +2 -2
  165. prefect/server/ui-v2/assets/{work-queue-select-CtGxuLIi.js.map → work-queue-select-CU0K1bAn.js.map} +1 -1
  166. prefect/server/ui-v2/index.html +1 -1
  167. prefect/tasks.py +2 -2
  168. {prefect-3.7.6.dev2.dist-info → prefect-3.7.6.dev4.dist-info}/METADATA +1 -1
  169. {prefect-3.7.6.dev2.dist-info → prefect-3.7.6.dev4.dist-info}/RECORD +172 -172
  170. prefect/server/ui-v2/assets/artifact._id-D31rDosz.js +0 -2
  171. prefect/server/ui-v2/assets/artifact._id-D31rDosz.js.map +0 -1
  172. prefect/server/ui-v2/assets/deployment-form-BP4VEHLr.js +0 -3
  173. prefect/server/ui-v2/assets/index-B-eHd1rg.js.map +0 -1
  174. prefect/server/ui-v2/assets/markdown-input-ByRJ2qam.js +0 -2
  175. prefect/server/ui-v2/assets/markdown-input-ByRJ2qam.js.map +0 -1
  176. prefect/server/ui-v2/assets/python-example-snippet-78624W02.js +0 -3
  177. prefect/server/ui-v2/assets/python-input-oBpRb4lz.js +0 -2
  178. prefect/server/ui-v2/assets/python-input-oBpRb4lz.js.map +0 -1
  179. {prefect-3.7.6.dev2.dist-info → prefect-3.7.6.dev4.dist-info}/WHEEL +0 -0
  180. {prefect-3.7.6.dev2.dist-info → prefect-3.7.6.dev4.dist-info}/entry_points.txt +0 -0
  181. {prefect-3.7.6.dev2.dist-info → prefect-3.7.6.dev4.dist-info}/licenses/LICENSE +0 -0
prefect/_build_info.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Generated by versioningit
2
- __version__ = "3.7.6.dev2"
3
- __build_date__ = "2026-06-23 09:17:34.234563+00:00"
4
- __git_commit__ = "59cc990c54a9d59f889f4f070e89d118fe7fa670"
2
+ __version__ = "3.7.6.dev4"
3
+ __build_date__ = "2026-06-25 09:15:13.637330+00:00"
4
+ __git_commit__ = "f6efa62fccdbadb8d707c38b2c00bac7fd668e24"
5
5
  __dirty__ = False
prefect/cli/work_queue.py CHANGED
@@ -123,7 +123,7 @@ async def create(
123
123
  id - {result.id}
124
124
  concurrency limit - {limit}
125
125
  Start a worker to pick up flow runs from the work queue:
126
- prefect worker start -q '{result.name} -p {pool}'
126
+ prefect worker start -q '{result.name}' -p '{pool}'
127
127
 
128
128
  Inspect the work queue:
129
129
  prefect work-queue inspect '{result.name}'
@@ -52,6 +52,7 @@ import prefect.settings
52
52
  from prefect._internal.compatibility.starlette import status
53
53
  from prefect._internal.observability import configure_logfire
54
54
  from prefect.client.constants import SERVER_API_VERSION
55
+ from prefect.locking._filelock import FileLock
55
56
  from prefect.logging import get_logger
56
57
  from prefect.server.api._ui_static import UIBundle, UIVersion, log_ui_static_copy_error
57
58
  from prefect.server.api.background_workers import background_worker
@@ -739,8 +740,20 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
739
740
  continue
740
741
 
741
742
  if not reference_file_matches_cache_key(bundle):
743
+ lock_path = os.path.join(
744
+ os.path.dirname(bundle.static_dir),
745
+ f".{bundle.version}_ui_static.lock",
746
+ )
747
+ lock = FileLock(lock_path, timeout=90)
742
748
  try:
743
- create_ui_static_subpath(bundle)
749
+ lock.acquire()
750
+ try:
751
+ # Re-check after acquiring the lock; another worker
752
+ # may have completed the copy while we waited.
753
+ if not reference_file_matches_cache_key(bundle):
754
+ create_ui_static_subpath(bundle)
755
+ finally:
756
+ lock.release()
744
757
  except OSError as exc:
745
758
  log_ui_static_copy_error(bundle, exc, logger)
746
759
  continue
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,o as n,r,s as i}from"./vendor-codemirror-BBJStocF.js";import{_ as a,a as o,g as s,i as c,j as l,o as u,r as d}from"./vendor-tanstack-BmR4FTpr.js";import{g as f,h as p,t as m,u as h}from"./button-BDE-TzkO.js";import{n as g}from"./dist-DnbJzTSA.js";import{n as _}from"./input-Dw8kXwXm.js";import{t as v}from"./tag-badge-DbvDCbKG.js";import{Ar as y,Dr as b,Er as x,K as S,Kr as C,Ln as w,Or as T,Tr as E,cr as D,ir as O,jr as k,lr as A,m as j,or as M,sr as N}from"./index-truoiNS9.js";import{t as P}from"./key-value-DxnB3voP.js";import{n as F}from"./use-get-artifacts-flow-task-runs-CqILC8vp.js";import{t as I}from"./lazy-markdown-DpjTB-zg.js";import{t as L}from"./data-table-CvnqhGK_.js";var R=e(i(),1),z=n(),B=({artifact:e})=>(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e.key?(0,z.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,z.jsx)(E,{className:`min-w-0`,children:(0,z.jsxs)(T,{className:`flex-nowrap`,children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-xl font-semibold truncate block`,title:e.key,children:e.key})}),(0,z.jsx)(y,{}),(0,z.jsx)(x,{className:`text-xl font-semibold min-w-0`,children:(0,z.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}):(0,z.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,z.jsx)(E,{className:`min-w-0`,children:(0,z.jsxs)(T,{className:`flex-nowrap`,children:[e.flow_run&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/runs/flow-run/$id`,params:{id:e.flow_run_id??``},className:`text-xl font-semibold truncate block`,title:e.flow_run.name,children:e.flow_run.name})}),(0,z.jsx)(y,{})]}),e.task_run&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/runs/task-run/$id`,params:{id:e.task_run_id??``},className:`text-xl font-semibold truncate block`,title:e.task_run.name,children:e.task_run.name})}),(0,z.jsx)(y,{})]}),(0,z.jsx)(x,{className:`text-xl font-semibold min-w-0`,children:(0,z.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}),(0,z.jsx)(O,{id:`artifacts-guide`,label:`Documentation`})]}),e.description&&(0,z.jsx)(`div`,{className:`text-sm text-muted-foreground my-2`,children:(0,z.jsx)(I,{children:e.description})}),(0,z.jsx)(`hr`,{})]}),V=({artifact:e})=>{let[n,i]=(0,R.useState)(!1),a=()=>{i(e=>!e)},o=(0,R.useRef)(null),{resolvedTheme:s}=C(),{setContainer:c}=r({container:o.current,extensions:[t.lineWrapping],value:String(e.data),indentWithTab:!1,editable:!0,basicSetup:{highlightActiveLine:!1,foldGutter:!1,highlightActiveLineGutter:!1},theme:s===`dark`?`dark`:`light`});(0,R.useEffect)(()=>{o.current&&c(o.current)},[c]);let l=e=>{g.success(`Copied to clipboard`),navigator.clipboard.writeText(e)};return(0,z.jsxs)(`div`,{className:`flex flex-col justify-center items-center`,children:[(0,z.jsxs)(m,{"data-testid":`show-raw-data-button`,variant:`outline`,onClick:a,className:`my-4`,children:[n?`Hide`:`Show`,` Raw Data`]}),(0,z.jsx)(`div`,{className:`rounded-md border shadow-xs focus-within:outline-hidden focus-within:ring-1 focus-within:ring-ring relative`,style:{display:n?`block`:`none`},ref:e=>{o.current=e},"data-testid":`raw-data-display`,children:(0,z.jsx)(m,{onClick:()=>l(e.data),variant:`ghost`,size:`icon`,className:`absolute top-0 right-0 z-10`,"aria-label":`copy`,children:(0,z.jsx)(f,{id:`Copy`,className:`size-2`})})})]})},ee=s(`/artifacts/artifact/$id`),H=({artifact:e,artifactContent:t,detailsContent:n})=>{let{tab:r}=ee.useSearch(),i=U(e,t,n);return(0,z.jsxs)(M,{defaultValue:`Artifact`,value:r,children:[(0,z.jsx)(D,{children:i.map(({value:e,hiddenOnDesktop:t,LinkComponent:n})=>(0,z.jsx)(n,{className:p(t&&`lg:hidden`)},e))}),i.map(({value:e,ViewComponent:t})=>(0,z.jsx)(t,{},e))]})};function U(e,t,n){return(0,R.useMemo)(()=>{let r=[];return r.push({value:`Artifact`,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Artifact`},children:(0,z.jsx)(A,{value:`Artifact`,className:e,children:`Artifact`})}),ViewComponent:()=>(0,z.jsxs)(N,{value:`Artifact`,children:[t,(0,z.jsx)(V,{artifact:e})]})}),r.push({value:`Details`,hiddenOnDesktop:!0,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Details`},children:(0,z.jsx)(A,{value:`Details`,className:e,children:`Details`})}),ViewComponent:()=>(0,z.jsx)(N,{value:`Details`,children:n})}),r.push({value:`Raw`,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Raw`},children:(0,z.jsx)(A,{value:`Raw`,className:e,children:`Raw`})}),ViewComponent:()=>(0,z.jsx)(N,{value:`Raw`,children:(0,z.jsx)(W,{artifact:e})})}),r},[e,t,n])}function W({artifact:e}){return(0,z.jsx)(`pre`,{className:`whitespace-pre-wrap break-words rounded-md border bg-muted p-4 text-sm`,children:typeof e.data==`string`?e.data:JSON.stringify(e.data,null,2)})}var G=({url:e})=>(0,z.jsxs)(`div`,{"data-testid":e,className:`prose dark:prose-invert mt-2`,children:[(0,z.jsx)(`img`,{"data-testid":`image-${e}`,src:e,alt:`artifact-image`,className:`w-full`}),(0,z.jsxs)(`p`,{className:`text-lg`,children:[`Image URL:`,` `,(0,z.jsx)(`a`,{className:`text-link hover:text-link-hover hover:underline`,target:`_blank`,href:e,rel:`noreferrer`,children:e})]})]}),K=({markdown:e})=>(0,z.jsx)(`div`,{"data-testid":`markdown-display`,className:`mt-4 prose dark:prose-invert`,children:(0,z.jsx)(I,{children:e})}),q=({progress:e})=>(0,z.jsxs)(`p`,{"data-testid":`progress-display`,className:`text-lg`,children:[`Progress: `,e,`%`]}),J=c(),Y=({tableData:e})=>{let t=(0,R.useMemo)(()=>JSON.parse(e),[e]),n=(0,R.useMemo)(()=>Object.keys(t[0]??{}),[t]),[r,i]=(0,R.useState)(``),a=(0,R.useMemo)(()=>n.map(e=>J.display({id:e,header:()=>e,cell:({row:t})=>{let n=String(t.original[e]??``);return(0,z.jsx)(`span`,{className:`truncate block`,title:n,children:n})}})),[n]),s=d({data:(0,R.useMemo)(()=>r?t.filter(e=>Object.values(e).some(e=>String(e).toLowerCase().includes(r.toLowerCase()))):t,[r,t]),columns:a,getCoreRowModel:o(),getPaginationRowModel:u(),initialState:{pagination:{pageIndex:0,pageSize:10}}});return(0,z.jsxs)(`div`,{"data-testid":`table-display`,className:`mt-4`,children:[(0,z.jsx)(`div`,{className:`flex flex-row justify-end items-center mb-2`,children:(0,z.jsx)(_,{placeholder:`Search`,value:r,onChange:e=>i(e.target.value)})}),(0,z.jsx)(L,{table:s})]})},X=({artifact:e})=>{let t=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-base font-semibold`,children:`Artifact`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Key`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.key??`None`})}),(0,z.jsx)(P,{label:`Type`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.type??`None`})}),(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{children:t??`None`})})]})]})},Z=e(k(),1),Q=({flowRun:e})=>{let t=(0,R.useMemo)(()=>e.start_time?h(e.start_time,`dateTime`):null,[e.start_time]),n=(0,R.useMemo)(()=>e.estimated_run_time?(0,Z.default)(Math.ceil(e.estimated_run_time)*1e3):null,[e.estimated_run_time]),r=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),i=(0,R.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-lg font-bold`,children:`Flow Run`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Start time`,value:(0,z.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,z.jsx)(f,{id:`Calendar`,className:`inline w-4 mr-2`}),t??`None`]})}),(0,z.jsx)(P,{label:`Duration`,value:(0,z.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,z.jsx)(f,{id:`Clock`,className:`inline w-4 mr-2`}),n??`None`]})}),(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:r??`None`})}),(0,z.jsx)(P,{label:`Last Updated`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:i??`None`})}),(0,z.jsx)(P,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,z.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,z.jsx)(v,{tag:e},e))}):(0,z.jsx)(`span`,{className:`font-mono`,children:`None`})}),(0,z.jsx)(P,{label:`State Message`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.state?.message??`None`})})]})]})},$=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return e.key||t||n?(0,z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.key&&(0,z.jsx)(P,{label:`Artifact`,value:(0,z.jsx)(a,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-link hover:text-link-hover hover:underline`,children:e.key})}),t&&(0,z.jsx)(P,{label:`Flow Run`,value:(0,z.jsx)(a,{to:`/runs/flow-run/$id`,params:{id:t.id},className:`text-link hover:text-link-hover hover:underline`,children:t.name})}),n&&(0,z.jsx)(P,{label:`Task Run`,value:(0,z.jsx)(a,{to:`/runs/task-run/$id`,params:{id:n.id},className:`text-link hover:text-link-hover hover:underline`,children:n.name})}),(0,z.jsx)(`hr`,{className:`mt-2 border-border`})]}):null},te=({taskRun:e})=>{let t=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),n=(0,R.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-lg font-bold`,children:`Task Run`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:t??`None`})}),(0,z.jsx)(P,{label:`Last Updated`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:n??`None`})}),(0,z.jsx)(P,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,z.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,z.jsx)(v,{tag:e},e))}):(0,z.jsx)(`span`,{className:`font-mono`,children:`None`})})]})]})},ne=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return(0,z.jsxs)(`div`,{className:`flex flex-col gap-4 pt-4`,children:[(0,z.jsx)($,{artifact:e}),(0,z.jsx)(X,{artifact:e}),(t||n)&&(0,z.jsx)(`hr`,{className:`mt-4 border-border`}),t&&(0,z.jsx)(Q,{flowRun:t}),t&&n&&(0,z.jsx)(`hr`,{className:`mt-4 border-border`}),n&&(0,z.jsx)(te,{taskRun:n})]})},re=({artifact:e})=>{let t=(0,R.useMemo)(()=>{switch(e.type){case`markdown`:case`link`:return(0,z.jsx)(K,{markdown:e.data});case`image`:return(0,z.jsx)(G,{url:e.data});case`progress`:return(0,z.jsx)(q,{progress:e.data});case`table`:return(0,z.jsx)(Y,{tableData:e.data});default:return(0,z.jsx)(`pre`,{children:JSON.stringify(e.data,null,2)})}},[e]),n=(0,z.jsx)(ne,{artifact:e});return(0,z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,z.jsx)(B,{artifact:e}),(0,z.jsxs)(`div`,{className:`flex flex-col lg:flex-row lg:gap-6`,children:[(0,z.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,z.jsx)(H,{artifact:e,artifactContent:t,detailsContent:n})}),(0,z.jsx)(w,{children:n})]})]})},ie=function(){let{id:e}=j.useParams(),{data:t}=l(S(e));return(0,z.jsx)(re,{artifact:F(e)??t})};export{ie as component};
2
+ //# sourceMappingURL=artifact._id-DbwWmX6Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact._id-DbwWmX6Z.js","names":["useSuspenseQuery","buildGetArtifactQuery","useGetArtifactFlowTaskRuns","ArtifactDetailPage","Route","SplitComponent","RouteComponent","id","useParams","data","artifact","artifactWithMetadata","component"],"sources":["../../src/components/artifacts/artifact/artifact-detail-header.tsx","../../src/components/artifacts/artifact/artifact-raw-data-display.tsx","../../src/components/artifacts/artifact/artifact-detail-tabs.tsx","../../src/components/artifacts/artifact/detail-image.tsx","../../src/components/artifacts/artifact/detail-markdown.tsx","../../src/components/artifacts/artifact/detail-progress.tsx","../../src/components/artifacts/artifact/detail-table.tsx","../../src/components/artifacts/artifact/metadata-sidebar/artifact-section.tsx","../../src/components/artifacts/artifact/metadata-sidebar/flow-run-section.tsx","../../src/components/artifacts/artifact/metadata-sidebar/links-section.tsx","../../src/components/artifacts/artifact/metadata-sidebar/task-run-section.tsx","../../src/components/artifacts/artifact/metadata-sidebar/index.tsx","../../src/components/artifacts/artifact/artifact-detail-page.tsx","../../src/routes/artifacts/artifact.$id.tsx?tsr-split=component"],"sourcesContent":["import type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\nimport { LazyMarkdown } from \"@/components/ui/lazy-markdown\";\n\nexport type ArtifactDetailHeaderProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n};\n\nexport const ArtifactDetailHeader = ({\n\tartifact,\n}: ArtifactDetailHeaderProps) => {\n\tconst header = artifact.key ? (\n\t\t<div className=\"flex items-center gap-2 min-w-0\">\n\t\t\t<Breadcrumb className=\"min-w-0\">\n\t\t\t\t<BreadcrumbList className=\"flex-nowrap\">\n\t\t\t\t\t<BreadcrumbItem className=\"min-w-0\">\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tto=\"/artifacts/key/$key\"\n\t\t\t\t\t\t\tparams={{ key: artifact.key }}\n\t\t\t\t\t\t\tclassName=\"text-xl font-semibold truncate block\"\n\t\t\t\t\t\t\ttitle={artifact.key}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{artifact.key}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold min-w-0\">\n\t\t\t\t\t\t<span className=\"font-mono truncate block\" title={artifact.id}>\n\t\t\t\t\t\t\t{artifact.id}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t</div>\n\t) : (\n\t\t<div className=\"flex items-center gap-2 min-w-0\">\n\t\t\t<Breadcrumb className=\"min-w-0\">\n\t\t\t\t<BreadcrumbList className=\"flex-nowrap\">\n\t\t\t\t\t{artifact.flow_run && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem className=\"min-w-0\">\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: artifact.flow_run_id ?? \"\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"text-xl font-semibold truncate block\"\n\t\t\t\t\t\t\t\t\ttitle={artifact.flow_run.name}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{artifact.flow_run.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t{artifact.task_run && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem className=\"min-w-0\">\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/task-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: artifact.task_run_id ?? \"\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"text-xl font-semibold truncate block\"\n\t\t\t\t\t\t\t\t\ttitle={artifact.task_run.name}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{artifact.task_run.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold min-w-0\">\n\t\t\t\t\t\t<span className=\"font-mono truncate block\" title={artifact.id}>\n\t\t\t\t\t\t\t{artifact.id}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t</div>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t{header}\n\t\t\t\t<DocsLink id=\"artifacts-guide\" label=\"Documentation\" />\n\t\t\t</div>\n\t\t\t{artifact.description && (\n\t\t\t\t<div className=\"text-sm text-muted-foreground my-2\">\n\t\t\t\t\t<LazyMarkdown>{artifact.description}</LazyMarkdown>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<hr />\n\t\t</>\n\t);\n};\n","import { EditorView, useCodeMirror } from \"@uiw/react-codemirror\";\nimport { useTheme } from \"next-themes\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport { Button } from \"@/components/ui/button\";\nimport { Icon } from \"@/components/ui/icons\";\n\ntype ArtifactDataDisplayProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n};\n\nexport const ArtifactDataDisplay = ({ artifact }: ArtifactDataDisplayProps) => {\n\tconst [showData, setShowData] = useState(false);\n\n\tconst toggleShowData = () => {\n\t\tsetShowData((val) => !val);\n\t};\n\n\tconst editor = useRef<HTMLDivElement | null>(null);\n\tconst { resolvedTheme } = useTheme();\n\tconst basicSetup = {\n\t\thighlightActiveLine: false,\n\t\tfoldGutter: false,\n\t\thighlightActiveLineGutter: false,\n\t};\n\tconst { setContainer } = useCodeMirror({\n\t\tcontainer: editor.current,\n\t\textensions: [EditorView.lineWrapping],\n\t\tvalue: String(artifact.data),\n\t\tindentWithTab: false,\n\t\teditable: true,\n\t\tbasicSetup,\n\t\ttheme: resolvedTheme === \"dark\" ? \"dark\" : \"light\",\n\t});\n\n\tuseEffect(() => {\n\t\tif (editor.current) {\n\t\t\tsetContainer(editor.current);\n\t\t}\n\t}, [setContainer]);\n\n\tconst handleCopy = (_value: string) => {\n\t\ttoast.success(\"Copied to clipboard\");\n\t\tvoid navigator.clipboard.writeText(_value);\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col justify-center items-center\">\n\t\t\t<Button\n\t\t\t\tdata-testid=\"show-raw-data-button\"\n\t\t\t\tvariant={\"outline\"}\n\t\t\t\tonClick={toggleShowData}\n\t\t\t\tclassName=\"my-4\"\n\t\t\t>\n\t\t\t\t{showData ? \"Hide\" : \"Show\"} Raw Data\n\t\t\t</Button>\n\n\t\t\t<div\n\t\t\t\tclassName=\"rounded-md border shadow-xs focus-within:outline-hidden focus-within:ring-1 focus-within:ring-ring relative\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: showData ? \"block\" : \"none\",\n\t\t\t\t}}\n\t\t\t\tref={(node) => {\n\t\t\t\t\teditor.current = node;\n\t\t\t\t}}\n\t\t\t\tdata-testid=\"raw-data-display\"\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={() => handleCopy(artifact.data as string)}\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tclassName=\"absolute top-0 right-0 z-10\"\n\t\t\t\t\taria-label=\"copy\"\n\t\t\t\t>\n\t\t\t\t\t<Icon id=\"Copy\" className=\"size-2\" />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { getRouteApi, Link } from \"@tanstack/react-router\";\nimport { type JSX, type ReactNode, useMemo } from \"react\";\nimport type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport type { ArtifactDetailTabOptions } from \"@/routes/artifacts/artifact.$id\";\nimport { cn } from \"@/utils\";\n\nimport { ArtifactDataDisplay } from \"./artifact-raw-data-display\";\n\nconst routeApi = getRouteApi(\"/artifacts/artifact/$id\");\n\ntype TabOption = {\n\tvalue: ArtifactDetailTabOptions;\n\thiddenOnDesktop?: boolean;\n\tLinkComponent: (props: { className?: string }) => JSX.Element;\n\tViewComponent: () => JSX.Element;\n};\n\ntype ArtifactDetailTabsProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n\tartifactContent: ReactNode;\n\tdetailsContent: ReactNode;\n};\n\nexport const ArtifactDetailTabs = ({\n\tartifact,\n\tartifactContent,\n\tdetailsContent,\n}: ArtifactDetailTabsProps) => {\n\tconst { tab } = routeApi.useSearch();\n\n\tconst tabOptions = useBuildTabOptions(\n\t\tartifact,\n\t\tartifactContent,\n\t\tdetailsContent,\n\t);\n\n\treturn (\n\t\t<Tabs defaultValue=\"Artifact\" value={tab}>\n\t\t\t<TabsList>\n\t\t\t\t{tabOptions.map(({ value, hiddenOnDesktop, LinkComponent }) => (\n\t\t\t\t\t<LinkComponent\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tclassName={cn(hiddenOnDesktop && \"lg:hidden\")}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</TabsList>\n\t\t\t{tabOptions.map(({ value, ViewComponent }) => (\n\t\t\t\t<ViewComponent key={value} />\n\t\t\t))}\n\t\t</Tabs>\n\t);\n};\n\nfunction useBuildTabOptions(\n\tartifact: ArtifactWithFlowRunAndTaskRun,\n\tartifactContent: ReactNode,\n\tdetailsContent: ReactNode,\n): Array<TabOption> {\n\treturn useMemo(() => {\n\t\tconst tabs: Array<TabOption> = [];\n\n\t\ttabs.push({\n\t\t\tvalue: \"Artifact\",\n\t\t\tLinkComponent: ({ className }) => (\n\t\t\t\t<Link to=\".\" search={{ tab: \"Artifact\" }}>\n\t\t\t\t\t<TabsTrigger value=\"Artifact\" className={className}>\n\t\t\t\t\t\tArtifact\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t</Link>\n\t\t\t),\n\t\t\tViewComponent: () => (\n\t\t\t\t<TabsContent value=\"Artifact\">\n\t\t\t\t\t{artifactContent}\n\t\t\t\t\t<ArtifactDataDisplay artifact={artifact} />\n\t\t\t\t</TabsContent>\n\t\t\t),\n\t\t});\n\n\t\ttabs.push({\n\t\t\tvalue: \"Details\",\n\t\t\thiddenOnDesktop: true,\n\t\t\tLinkComponent: ({ className }) => (\n\t\t\t\t<Link to=\".\" search={{ tab: \"Details\" }}>\n\t\t\t\t\t<TabsTrigger value=\"Details\" className={className}>\n\t\t\t\t\t\tDetails\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t</Link>\n\t\t\t),\n\t\t\tViewComponent: () => (\n\t\t\t\t<TabsContent value=\"Details\">{detailsContent}</TabsContent>\n\t\t\t),\n\t\t});\n\n\t\ttabs.push({\n\t\t\tvalue: \"Raw\",\n\t\t\tLinkComponent: ({ className }) => (\n\t\t\t\t<Link to=\".\" search={{ tab: \"Raw\" }}>\n\t\t\t\t\t<TabsTrigger value=\"Raw\" className={className}>\n\t\t\t\t\t\tRaw\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t</Link>\n\t\t\t),\n\t\t\tViewComponent: () => (\n\t\t\t\t<TabsContent value=\"Raw\">\n\t\t\t\t\t<ArtifactRawData artifact={artifact} />\n\t\t\t\t</TabsContent>\n\t\t\t),\n\t\t});\n\n\t\treturn tabs;\n\t}, [artifact, artifactContent, detailsContent]);\n}\n\nfunction ArtifactRawData({\n\tartifact,\n}: {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n}) {\n\treturn (\n\t\t<pre className=\"whitespace-pre-wrap break-words rounded-md border bg-muted p-4 text-sm\">\n\t\t\t{typeof artifact.data === \"string\"\n\t\t\t\t? artifact.data\n\t\t\t\t: JSON.stringify(artifact.data, null, 2)}\n\t\t</pre>\n\t);\n}\n","export type DetailImageProps = {\n\turl: string;\n};\n\nexport const DetailImage = ({ url }: DetailImageProps) => {\n\treturn (\n\t\t<div data-testid={url} className=\"prose dark:prose-invert mt-2\">\n\t\t\t<img\n\t\t\t\tdata-testid={`image-${url}`}\n\t\t\t\tsrc={url}\n\t\t\t\talt=\"artifact-image\"\n\t\t\t\tclassName=\"w-full\"\n\t\t\t/>\n\n\t\t\t<p className=\"text-lg\">\n\t\t\t\tImage URL:{\" \"}\n\t\t\t\t<a\n\t\t\t\t\tclassName=\"text-link hover:text-link-hover hover:underline\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\thref={url}\n\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t{url}\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t</div>\n\t);\n};\n","import { LazyMarkdown } from \"@/components/ui/lazy-markdown\";\n\nexport type DetailMarkdownProps = {\n\tmarkdown: string;\n};\n\nexport const DetailMarkdown = ({ markdown }: DetailMarkdownProps) => {\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"markdown-display\"\n\t\t\tclassName=\"mt-4 prose dark:prose-invert\"\n\t\t>\n\t\t\t<LazyMarkdown>{markdown}</LazyMarkdown>\n\t\t</div>\n\t);\n};\n","export type DetailProgressProps = {\n\tprogress: number;\n};\n\nexport const DetailProgress = ({ progress }: DetailProgressProps) => {\n\treturn (\n\t\t<p data-testid=\"progress-display\" className=\"text-lg\">\n\t\t\tProgress: {progress}%\n\t\t</p>\n\t);\n};\n","import {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tgetPaginationRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useMemo, useState } from \"react\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { SearchInput } from \"@/components/ui/input\";\n\nexport type DetailTableProps = {\n\ttableData: string;\n};\n\nconst columnHelper = createColumnHelper<Record<string, string>>();\n\nexport const DetailTable = ({ tableData }: DetailTableProps) => {\n\tconst rows = useMemo(\n\t\t() => JSON.parse(tableData) as Record<string, string>[],\n\t\t[tableData],\n\t);\n\tconst headers = useMemo(() => Object.keys(rows[0] ?? {}), [rows]);\n\tconst [input, setInput] = useState<string>(\"\");\n\n\tconst columns = useMemo(\n\t\t() =>\n\t\t\theaders.map((header) =>\n\t\t\t\tcolumnHelper.display({\n\t\t\t\t\tid: header,\n\t\t\t\t\theader: () => header,\n\t\t\t\t\tcell: ({ row }) => {\n\t\t\t\t\t\tconst value = String(row.original[header] ?? \"\");\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<span className=\"truncate block\" title={value}>\n\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t</span>\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[headers],\n\t);\n\n\tconst filteredRows = useMemo(() => {\n\t\tif (!input) return rows;\n\t\treturn rows.filter((row) =>\n\t\t\tObject.values(row).some((value) =>\n\t\t\t\tString(value).toLowerCase().includes(input.toLowerCase()),\n\t\t\t),\n\t\t);\n\t}, [input, rows]);\n\n\tconst table = useReactTable({\n\t\tdata: filteredRows,\n\t\tcolumns,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tinitialState: { pagination: { pageIndex: 0, pageSize: 10 } },\n\t});\n\n\treturn (\n\t\t<div data-testid=\"table-display\" className=\"mt-4\">\n\t\t\t<div className=\"flex flex-row justify-end items-center mb-2\">\n\t\t\t\t<SearchInput\n\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\tvalue={input}\n\t\t\t\t\tonChange={(e) => setInput(e.target.value)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<DataTable table={table} />\n\t\t</div>\n\t);\n};\n","import { useMemo } from \"react\";\nimport type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport { KeyValue } from \"@/components/ui/key-value\";\nimport { formatDate } from \"@/utils/date\";\n\ntype ArtifactSectionProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n};\n\nexport const ArtifactSection = ({ artifact }: ArtifactSectionProps) => {\n\tconst createdDate = useMemo(() => {\n\t\tif (!artifact.created) return null;\n\t\treturn formatDate(artifact.created, \"dateTime\");\n\t}, [artifact.created]);\n\n\treturn (\n\t\t<div className=\"mt-4\">\n\t\t\t<p className=\"text-base font-semibold\">Artifact</p>\n\n\t\t\t<div className=\"mt-3 flex flex-col gap-3\">\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Key\"\n\t\t\t\t\tvalue={<span className=\"font-mono\">{artifact.key ?? \"None\"}</span>}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Type\"\n\t\t\t\t\tvalue={<span className=\"font-mono\">{artifact.type ?? \"None\"}</span>}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Created\"\n\t\t\t\t\tvalue={<span>{createdDate ?? \"None\"}</span>}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import humanizeDuration from \"humanize-duration\";\nimport { useMemo } from \"react\";\nimport type { FlowRun } from \"@/api/flow-runs\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { KeyValue } from \"@/components/ui/key-value\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\nimport { formatDate } from \"@/utils/date\";\n\ntype FlowRunSectionProps = {\n\tflowRun: FlowRun;\n};\n\nexport const FlowRunSection = ({ flowRun }: FlowRunSectionProps) => {\n\tconst startTime = useMemo(() => {\n\t\tif (!flowRun.start_time) return null;\n\t\treturn formatDate(flowRun.start_time, \"dateTime\");\n\t}, [flowRun.start_time]);\n\n\tconst duration = useMemo(() => {\n\t\tif (!flowRun.estimated_run_time) return null;\n\t\treturn humanizeDuration(Math.ceil(flowRun.estimated_run_time) * 1000);\n\t}, [flowRun.estimated_run_time]);\n\n\tconst createdDate = useMemo(() => {\n\t\tif (!flowRun.created) return null;\n\t\treturn formatDate(flowRun.created, \"dateTime\");\n\t}, [flowRun.created]);\n\n\tconst updatedDate = useMemo(() => {\n\t\tif (!flowRun.updated) return null;\n\t\treturn formatDate(flowRun.updated, \"dateTime\");\n\t}, [flowRun.updated]);\n\n\treturn (\n\t\t<div className=\"mt-4\">\n\t\t\t<p className=\"text-lg font-bold\">Flow Run</p>\n\n\t\t\t<div className=\"mt-3 flex flex-col gap-3\">\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Start time\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"font-mono flex items-center\">\n\t\t\t\t\t\t\t<Icon id=\"Calendar\" className=\"inline w-4 mr-2\" />\n\t\t\t\t\t\t\t{startTime ?? \"None\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Duration\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"font-mono flex items-center\">\n\t\t\t\t\t\t\t<Icon id=\"Clock\" className=\"inline w-4 mr-2\" />\n\t\t\t\t\t\t\t{duration ?? \"None\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Created\"\n\t\t\t\t\tvalue={<span className=\"font-mono\">{createdDate ?? \"None\"}</span>}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Last Updated\"\n\t\t\t\t\tvalue={<span className=\"font-mono\">{updatedDate ?? \"None\"}</span>}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Tags\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\tflowRun.tags && flowRun.tags.length > 0 ? (\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap\">\n\t\t\t\t\t\t\t\t{flowRun.tags.map((tag) => (\n\t\t\t\t\t\t\t\t\t<TagBadge key={tag} tag={tag} />\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"font-mono\">None</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"State Message\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"font-mono\">\n\t\t\t\t\t\t\t{flowRun.state?.message ?? \"None\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport { KeyValue } from \"@/components/ui/key-value\";\n\ntype LinksSectionProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n};\n\nexport const LinksSection = ({ artifact }: LinksSectionProps) => {\n\tconst { flow_run, task_run } = artifact;\n\tconst hasLinks = artifact.key || flow_run || task_run;\n\n\tif (!hasLinks) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t{artifact.key && (\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Artifact\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/artifacts/key/$key\"\n\t\t\t\t\t\t\tparams={{ key: artifact.key }}\n\t\t\t\t\t\t\tclassName=\"text-link hover:text-link-hover hover:underline\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{artifact.key}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{flow_run && (\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Flow Run\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\tparams={{ id: flow_run.id }}\n\t\t\t\t\t\t\tclassName=\"text-link hover:text-link-hover hover:underline\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{flow_run.name}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{task_run && (\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Task Run\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/runs/task-run/$id\"\n\t\t\t\t\t\t\tparams={{ id: task_run.id }}\n\t\t\t\t\t\t\tclassName=\"text-link hover:text-link-hover hover:underline\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{task_run.name}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<hr className=\"mt-2 border-border\" />\n\t\t</div>\n\t);\n};\n","import { useMemo } from \"react\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { KeyValue } from \"@/components/ui/key-value\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\nimport { formatDate } from \"@/utils/date\";\n\ntype TaskRunSectionProps = {\n\ttaskRun: TaskRun;\n};\n\nexport const TaskRunSection = ({ taskRun }: TaskRunSectionProps) => {\n\tconst createdDate = useMemo(() => {\n\t\tif (!taskRun.created) return null;\n\t\treturn formatDate(taskRun.created, \"dateTime\");\n\t}, [taskRun.created]);\n\n\tconst updatedDate = useMemo(() => {\n\t\tif (!taskRun.updated) return null;\n\t\treturn formatDate(taskRun.updated, \"dateTime\");\n\t}, [taskRun.updated]);\n\n\treturn (\n\t\t<div className=\"mt-4\">\n\t\t\t<p className=\"text-lg font-bold\">Task Run</p>\n\n\t\t\t<div className=\"mt-3 flex flex-col gap-3\">\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Created\"\n\t\t\t\t\tvalue={<span className=\"font-mono\">{createdDate ?? \"None\"}</span>}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Last Updated\"\n\t\t\t\t\tvalue={<span className=\"font-mono\">{updatedDate ?? \"None\"}</span>}\n\t\t\t\t/>\n\n\t\t\t\t<KeyValue\n\t\t\t\t\tlabel=\"Tags\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\ttaskRun.tags && taskRun.tags.length > 0 ? (\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap\">\n\t\t\t\t\t\t\t\t{taskRun.tags.map((tag) => (\n\t\t\t\t\t\t\t\t\t<TagBadge key={tag} tag={tag} />\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"font-mono\">None</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport { ArtifactSection } from \"./artifact-section\";\nimport { FlowRunSection } from \"./flow-run-section\";\nimport { LinksSection } from \"./links-section\";\nimport { TaskRunSection } from \"./task-run-section\";\n\nexport type MetadataSidebarProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n};\n\nexport const MetadataSidebar = ({ artifact }: MetadataSidebarProps) => {\n\tconst { flow_run, task_run } = artifact;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4 pt-4\">\n\t\t\t<LinksSection artifact={artifact} />\n\n\t\t\t<ArtifactSection artifact={artifact} />\n\n\t\t\t{(flow_run || task_run) && <hr className=\"mt-4 border-border\" />}\n\n\t\t\t{flow_run && <FlowRunSection flowRun={flow_run} />}\n\n\t\t\t{flow_run && task_run && <hr className=\"mt-4 border-border\" />}\n\n\t\t\t{task_run && <TaskRunSection taskRun={task_run} />}\n\t\t</div>\n\t);\n};\n","import { useMemo } from \"react\";\nimport type { ArtifactWithFlowRunAndTaskRun } from \"@/api/artifacts\";\nimport { LayoutWellSidebar } from \"@/components/ui/layout-well\";\nimport { ArtifactDetailHeader } from \"./artifact-detail-header\";\nimport { ArtifactDetailTabs } from \"./artifact-detail-tabs\";\nimport { DetailImage } from \"./detail-image\";\nimport { DetailMarkdown } from \"./detail-markdown\";\nimport { DetailProgress } from \"./detail-progress\";\nimport { DetailTable } from \"./detail-table\";\nimport { MetadataSidebar } from \"./metadata-sidebar\";\n\nexport type ArtifactDetailPageProps = {\n\tartifact: ArtifactWithFlowRunAndTaskRun;\n};\n\nexport const ArtifactDetailPage = ({ artifact }: ArtifactDetailPageProps) => {\n\tconst artifactContent = useMemo(() => {\n\t\tswitch (artifact.type) {\n\t\t\tcase \"markdown\":\n\t\t\tcase \"link\":\n\t\t\t\treturn <DetailMarkdown markdown={artifact.data as string} />;\n\t\t\tcase \"image\":\n\t\t\t\treturn <DetailImage url={artifact.data as string} />;\n\t\t\tcase \"progress\":\n\t\t\t\treturn <DetailProgress progress={artifact.data as number} />;\n\t\t\tcase \"table\":\n\t\t\t\treturn <DetailTable tableData={artifact.data as string} />;\n\t\t\tdefault:\n\t\t\t\treturn <pre>{JSON.stringify(artifact.data, null, 2)}</pre>;\n\t\t}\n\t}, [artifact]);\n\n\tconst sidebarContent = <MetadataSidebar artifact={artifact} />;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<ArtifactDetailHeader artifact={artifact} />\n\t\t\t<div className=\"flex flex-col lg:flex-row lg:gap-6\">\n\t\t\t\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t<ArtifactDetailTabs\n\t\t\t\t\t\tartifact={artifact}\n\t\t\t\t\t\tartifactContent={artifactContent}\n\t\t\t\t\t\tdetailsContent={sidebarContent}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<LayoutWellSidebar>{sidebarContent}</LayoutWellSidebar>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildGetArtifactQuery } from \"@/api/artifacts\";\nimport { useGetArtifactFlowTaskRuns } from \"@/api/artifacts/use-get-artifacts-flow-task-runs/use-get-artifacts-flow-task-runs\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { ArtifactDetailPage } from \"@/components/artifacts/artifact/artifact-detail-page\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\n/**\n * Schema for validating URL search parameters for the Artifact Detail page\n * @property {\"Artifact\" | \"Details\" | \"Raw\"} tab used to designate which tab view to display\n */\nconst searchParams = z.object({\n\ttab: z.enum([\"Artifact\", \"Details\", \"Raw\"]).default(\"Artifact\"),\n});\n\nexport type ArtifactDetailTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\"/artifacts/artifact/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: function RouteComponent() {\n\t\tconst { id } = Route.useParams();\n\n\t\tconst { data: artifact } = useSuspenseQuery(buildGetArtifactQuery(id));\n\n\t\tconst artifactWithMetadata = useGetArtifactFlowTaskRuns(id);\n\n\t\treturn <ArtifactDetailPage artifact={artifactWithMetadata ?? artifact} />;\n\t},\n\tloader: async ({ context, params }) => {\n\t\tconst { id } = params;\n\n\t\tconst artifact = await context.queryClient.ensureQueryData(\n\t\t\tbuildGetArtifactQuery(id),\n\t\t);\n\n\t\treturn { artifact };\n\t},\n\terrorComponent: function ArtifactDetailErrorComponent({\n\t\terror,\n\t\treset,\n\t}: ErrorComponentProps) {\n\t\tconst serverError = categorizeError(error, \"Failed to load artifact\");\n\t\tif (\n\t\t\tserverError.type !== \"server-error\" &&\n\t\t\tserverError.type !== \"client-error\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-2xl font-semibold\">Artifact</h1>\n\t\t\t\t</div>\n\t\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t\t</div>\n\t\t);\n\t},\n});\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{o as t,s as n}from"./vendor-codemirror-BBJStocF.js";import{k as r}from"./vendor-tanstack-BmR4FTpr.js";import{g as i,o as a}from"./button-BDE-TzkO.js";import{i as o,n as s,o as c,s as l,t as u}from"./select-BMVFWXIz.js";import{n as d}from"./input-Dw8kXwXm.js";import{$n as f,Er as p,G as m,Jr as h,Or as g,Tr as _,W as v,Y as y,Z as b,er as x,ir as S,nr as C,rr as w,tr as T}from"./index-B-eHd1rg.js";import{t as E}from"./use-debounce-callback-OMm2b-sX.js";import{n as D,r as O,t as k}from"./toggle-group-iVsvcUYV.js";var A=e(n(),1),j=t(),M=[{value:`all`,label:`All Types`},{value:`markdown`,label:`Markdown`},{value:`progress`,label:`Progress`},{value:`image`,label:`Image`},{value:`table`,label:`Table`}],N=({filters:e,onFilterChange:t,totalCount:n,displayMode:r,setDisplayMode:f})=>{let p=(0,A.useCallback)(n=>{t([...e.filter(e=>e.id!==`name`),{id:`name`,label:`Name`,value:n}])},[e,t]),m=(0,A.useCallback)(n=>{t([...e.filter(e=>e.id!==`type`),{id:`type`,label:`Type`,value:n}])},[e,t]),h=(0,A.useMemo)(()=>e.find(e=>e.id===`type`)?.value,[e]),g=(0,A.useMemo)(()=>e.find(e=>e.id===`name`)?.value,[e]);return(0,j.jsxs)(`div`,{"data-testid":`artifact-filter`,className:`flex justify-between items-center`,children:[(0,j.jsx)(`div`,{children:(0,j.jsxs)(`p`,{className:`text-base text-sm text-muted-foreground`,children:[n.toLocaleString(),` `,a(n,`artifact`)]})}),(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsx)(d,{"data-testid":`search-input`,defaultValue:g,placeholder:`Search artifacts`,onChange:e=>p(e.target.value)}),(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsxs)(u,{"data-testid":`type-select`,value:h,onValueChange:m,children:[(0,j.jsx)(c,{"aria-label":`Artifact type`,children:(0,j.jsx)(l,{placeholder:`Type`})}),(0,j.jsx)(s,{children:M.map(({value:e,label:t})=>(0,j.jsx)(o,{value:e,children:t},e))})]}),(0,j.jsx)(`div`,{children:(0,j.jsxs)(k,{type:`single`,defaultValue:r,onValueChange:e=>f(e),children:[(0,j.jsx)(D,{"data-testid":`grid-layout`,value:`grid`,children:(0,j.jsx)(i,{id:`LayoutGrid`})}),(0,j.jsx)(D,{"data-testid":`list-layout`,value:`list`,children:(0,j.jsx)(i,{id:`AlignJustify`})})]})})]})]})]})},P=()=>(0,j.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,j.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,j.jsx)(_,{children:(0,j.jsx)(g,{children:(0,j.jsx)(p,{className:`text-xl font-semibold`,children:`Artifacts`})})})}),(0,j.jsx)(S,{id:`artifacts-guide`,label:`Documentation`})]}),F=()=>(0,j.jsxs)(f,{children:[(0,j.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,j.jsx)(C,{id:`Image`})}),(0,j.jsx)(w,{children:`Create an artifact to get started`}),(0,j.jsx)(T,{children:`Artifacts are byproducts of your runs; they can be anything from a markdown string to a table.`}),(0,j.jsx)(x,{children:(0,j.jsx)(S,{id:`artifacts-guide`})})]}),I=({filters:e,onFilterChange:t,artifactsList:n,artifactsCount:r})=>{let[i,a]=h(`artifacts-grid-style`,`grid`),o=(0,A.useMemo)(()=>i===`grid`?`grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4`:`grid-cols-1`,[i]);return(0,j.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,j.jsx)(P,{}),(0,j.jsx)(N,{filters:e,onFilterChange:t,totalCount:r,setDisplayMode:a,displayMode:i}),n.length===0?(0,j.jsx)(F,{}):(0,j.jsx)(`div`,{className:o,children:n.map(e=>(0,j.jsx)(O,{artifact:e},e.id))})]})},L=()=>{let e=v.useSearch(),t=v.useNavigate();return{filters:(0,A.useMemo)(()=>[{id:`type`,label:`Type`,value:e.type??`all`},{id:`name`,label:`Name`,value:e.name}],[e.type,e.name]),onFilterChange:E((0,A.useCallback)(e=>{e&&t({to:`.`,search:()=>e.filter(e=>e.value).reduce((e,t)=>(t.value&&(e[t.id]=t.value),e),{}),replace:!0})},[t]),400)}},R=function(){let e=v.useSearch(),{filters:t,onFilterChange:n}=L(),[{data:i},{data:a}]=r({queries:[m(b(e)),y(b(e))]});return(0,j.jsx)(I,{filters:t,onFilterChange:n,artifactsCount:i,artifactsList:a})};export{R as component};
2
- //# sourceMappingURL=artifacts-CoQ3NpUZ.js.map
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{o as t,s as n}from"./vendor-codemirror-BBJStocF.js";import{k as r}from"./vendor-tanstack-BmR4FTpr.js";import{g as i,o as a}from"./button-BDE-TzkO.js";import{i as o,n as s,o as c,s as l,t as u}from"./select-BMVFWXIz.js";import{n as d}from"./input-Dw8kXwXm.js";import{$n as f,Er as p,G as m,Jr as h,Or as g,Tr as _,W as v,Y as y,Z as b,er as x,ir as S,nr as C,rr as w,tr as T}from"./index-truoiNS9.js";import{t as E}from"./use-debounce-callback-OMm2b-sX.js";import{n as D,r as O,t as k}from"./toggle-group-Dz71Milz.js";var A=e(n(),1),j=t(),M=[{value:`all`,label:`All Types`},{value:`markdown`,label:`Markdown`},{value:`progress`,label:`Progress`},{value:`image`,label:`Image`},{value:`table`,label:`Table`}],N=({filters:e,onFilterChange:t,totalCount:n,displayMode:r,setDisplayMode:f})=>{let p=(0,A.useCallback)(n=>{t([...e.filter(e=>e.id!==`name`),{id:`name`,label:`Name`,value:n}])},[e,t]),m=(0,A.useCallback)(n=>{t([...e.filter(e=>e.id!==`type`),{id:`type`,label:`Type`,value:n}])},[e,t]),h=(0,A.useMemo)(()=>e.find(e=>e.id===`type`)?.value,[e]),g=(0,A.useMemo)(()=>e.find(e=>e.id===`name`)?.value,[e]);return(0,j.jsxs)(`div`,{"data-testid":`artifact-filter`,className:`flex justify-between items-center`,children:[(0,j.jsx)(`div`,{children:(0,j.jsxs)(`p`,{className:`text-base text-sm text-muted-foreground`,children:[n.toLocaleString(),` `,a(n,`artifact`)]})}),(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsx)(d,{"data-testid":`search-input`,defaultValue:g,placeholder:`Search artifacts`,onChange:e=>p(e.target.value)}),(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsxs)(u,{"data-testid":`type-select`,value:h,onValueChange:m,children:[(0,j.jsx)(c,{"aria-label":`Artifact type`,children:(0,j.jsx)(l,{placeholder:`Type`})}),(0,j.jsx)(s,{children:M.map(({value:e,label:t})=>(0,j.jsx)(o,{value:e,children:t},e))})]}),(0,j.jsx)(`div`,{children:(0,j.jsxs)(k,{type:`single`,defaultValue:r,onValueChange:e=>f(e),children:[(0,j.jsx)(D,{"data-testid":`grid-layout`,value:`grid`,children:(0,j.jsx)(i,{id:`LayoutGrid`})}),(0,j.jsx)(D,{"data-testid":`list-layout`,value:`list`,children:(0,j.jsx)(i,{id:`AlignJustify`})})]})})]})]})]})},P=()=>(0,j.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,j.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,j.jsx)(_,{children:(0,j.jsx)(g,{children:(0,j.jsx)(p,{className:`text-xl font-semibold`,children:`Artifacts`})})})}),(0,j.jsx)(S,{id:`artifacts-guide`,label:`Documentation`})]}),F=()=>(0,j.jsxs)(f,{children:[(0,j.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,j.jsx)(C,{id:`Image`})}),(0,j.jsx)(w,{children:`Create an artifact to get started`}),(0,j.jsx)(T,{children:`Artifacts are byproducts of your runs; they can be anything from a markdown string to a table.`}),(0,j.jsx)(x,{children:(0,j.jsx)(S,{id:`artifacts-guide`})})]}),I=({filters:e,onFilterChange:t,artifactsList:n,artifactsCount:r})=>{let[i,a]=h(`artifacts-grid-style`,`grid`),o=(0,A.useMemo)(()=>i===`grid`?`grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4`:`grid-cols-1`,[i]);return(0,j.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,j.jsx)(P,{}),(0,j.jsx)(N,{filters:e,onFilterChange:t,totalCount:r,setDisplayMode:a,displayMode:i}),n.length===0?(0,j.jsx)(F,{}):(0,j.jsx)(`div`,{className:o,children:n.map(e=>(0,j.jsx)(O,{artifact:e},e.id))})]})},L=()=>{let e=v.useSearch(),t=v.useNavigate();return{filters:(0,A.useMemo)(()=>[{id:`type`,label:`Type`,value:e.type??`all`},{id:`name`,label:`Name`,value:e.name}],[e.type,e.name]),onFilterChange:E((0,A.useCallback)(e=>{e&&t({to:`.`,search:()=>e.filter(e=>e.value).reduce((e,t)=>(t.value&&(e[t.id]=t.value),e),{}),replace:!0})},[t]),400)}},R=function(){let e=v.useSearch(),{filters:t,onFilterChange:n}=L(),[{data:i},{data:a}]=r({queries:[m(b(e)),y(b(e))]});return(0,j.jsx)(I,{filters:t,onFilterChange:n,artifactsCount:i,artifactsList:a})};export{R as component};
2
+ //# sourceMappingURL=artifacts-BX0yE4rE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts-CoQ3NpUZ.js","names":["useSuspenseQueries","useCallback","useMemo","buildCountLatestArtifactsQuery","buildListLatestArtifactsQuery","ArtifactsPage","useDebounceCallback","Route","useFilter","search","useSearch","navigate","useNavigate","filters","id","label","value","type","name","onFilterChange","newFilters","filterType","to","filter","reduce","prev","curr","Record","replace","SplitComponent","RouteComponent","data","artifactsCount","artifactsList","queries","buildFilterBody","component"],"sources":["../../src/components/artifacts/artifacts-filter.tsx","../../src/components/artifacts/artifacts-header.tsx","../../src/components/artifacts/empty-state.tsx","../../src/components/artifacts/artifacts-page.tsx","../../src/routes/artifacts/index.tsx?tsr-split=component"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport { pluralize } from \"@/utils\";\nimport { Icon } from \"../ui/icons\";\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group\";\nimport type { filterType } from \"./types\";\n\ntype ArtifactsFilterProps = {\n\tfilters: filterType[];\n\tonFilterChange: (newFilters: filterType[]) => void;\n\ttotalCount: number;\n\tsetDisplayMode: (mode: string) => void;\n\tdisplayMode: string;\n};\n\nconst artifactTypeOptions = [\n\t{ value: \"all\", label: \"All Types\" },\n\t{ value: \"markdown\", label: \"Markdown\" },\n\t{ value: \"progress\", label: \"Progress\" },\n\t{ value: \"image\", label: \"Image\" },\n\t{ value: \"table\", label: \"Table\" },\n] as const;\n\nexport const ArtifactsFilterComponent = ({\n\tfilters,\n\tonFilterChange,\n\ttotalCount,\n\tdisplayMode,\n\tsetDisplayMode,\n}: ArtifactsFilterProps) => {\n\tconst changeArtifactName = useCallback(\n\t\t(value: string) => {\n\t\t\tonFilterChange([\n\t\t\t\t...filters.filter((filter) => filter.id !== \"name\"),\n\t\t\t\t{ id: \"name\", label: \"Name\", value },\n\t\t\t]);\n\t\t},\n\t\t[filters, onFilterChange],\n\t);\n\n\tconst changeArtifactType = useCallback(\n\t\t(value: string) => {\n\t\t\tonFilterChange([\n\t\t\t\t...filters.filter((filter) => filter.id !== \"type\"),\n\t\t\t\t{ id: \"type\", label: \"Type\", value },\n\t\t\t]);\n\t\t},\n\t\t[filters, onFilterChange],\n\t);\n\n\tconst typeValue = useMemo(\n\t\t() => filters.find((val) => val.id === \"type\")?.value,\n\t\t[filters],\n\t);\n\n\tconst nameValue = useMemo(\n\t\t() => filters.find((val) => val.id === \"name\")?.value,\n\t\t[filters],\n\t);\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"artifact-filter\"\n\t\t\tclassName=\"flex justify-between items-center\"\n\t\t>\n\t\t\t<div>\n\t\t\t\t<p className=\"text-base text-sm text-muted-foreground\">\n\t\t\t\t\t{totalCount.toLocaleString()} {pluralize(totalCount, \"artifact\")}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t<SearchInput\n\t\t\t\t\tdata-testid=\"search-input\"\n\t\t\t\t\tdefaultValue={nameValue}\n\t\t\t\t\tplaceholder=\"Search artifacts\"\n\t\t\t\t\tonChange={(e) => changeArtifactName(e.target.value)}\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t<Select\n\t\t\t\t\t\tdata-testid=\"type-select\"\n\t\t\t\t\t\tvalue={typeValue}\n\t\t\t\t\t\tonValueChange={changeArtifactType}\n\t\t\t\t\t>\n\t\t\t\t\t\t<SelectTrigger aria-label=\"Artifact type\">\n\t\t\t\t\t\t\t<SelectValue placeholder=\"Type\" />\n\t\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t\t{artifactTypeOptions.map(({ value, label }) => (\n\t\t\t\t\t\t\t\t<SelectItem key={value} value={value}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</SelectContent>\n\t\t\t\t\t</Select>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<ToggleGroup\n\t\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\t\tdefaultValue={displayMode}\n\t\t\t\t\t\t\tonValueChange={(value: string) => setDisplayMode(value)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleGroupItem data-testid=\"grid-layout\" value=\"grid\">\n\t\t\t\t\t\t\t\t<Icon id=\"LayoutGrid\" />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t\t<ToggleGroupItem data-testid=\"list-layout\" value=\"list\">\n\t\t\t\t\t\t\t\t<Icon id=\"AlignJustify\" />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t</ToggleGroup>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\n\nexport const ArtifactsHeader = () => {\n\treturn (\n\t\t<div className=\"flex items-center justify-between\">\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Breadcrumb>\n\t\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\t\tArtifacts\n\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t</BreadcrumbList>\n\t\t\t\t</Breadcrumb>\n\t\t\t</div>\n\t\t\t<DocsLink id=\"artifacts-guide\" label=\"Documentation\" />\n\t\t</div>\n\t);\n};\n","import { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\n\nexport const ArtifactsEmptyState = () => (\n\t<EmptyState>\n\t\t<div className=\"flex items-center gap-3\">\n\t\t\t<EmptyStateIcon id=\"Image\" />\n\t\t</div>\n\t\t<EmptyStateTitle>Create an artifact to get started</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tArtifacts are byproducts of your runs; they can be anything from a\n\t\t\tmarkdown string to a table.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<DocsLink id=\"artifacts-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import { useMemo } from \"react\";\nimport type { ArtifactCollection } from \"@/api/artifacts\";\nimport { useLocalStorage } from \"@/hooks/use-local-storage\";\nimport { ArtifactCard } from \"./artifact-card\";\nimport { ArtifactsFilterComponent } from \"./artifacts-filter\";\nimport { ArtifactsHeader } from \"./artifacts-header\";\nimport { ArtifactsEmptyState } from \"./empty-state\";\nimport type { filterType } from \"./types\";\n\nexport type ArtifactsPageProps = {\n\tfilters: filterType[];\n\tonFilterChange: (newFilters: filterType[]) => void;\n\tartifactsCount: number;\n\tartifactsList: ArtifactCollection[];\n};\n\nexport const ArtifactsPage = ({\n\tfilters,\n\tonFilterChange,\n\tartifactsList,\n\tartifactsCount,\n}: ArtifactsPageProps) => {\n\tconst [displayMode, setDisplayMode] = useLocalStorage<string>(\n\t\t\"artifacts-grid-style\",\n\t\t\"grid\",\n\t);\n\n\tconst gridClass = useMemo(() => {\n\t\treturn displayMode === \"grid\"\n\t\t\t? \"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4\"\n\t\t\t: \"grid-cols-1\";\n\t}, [displayMode]);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<ArtifactsHeader />\n\t\t\t<ArtifactsFilterComponent\n\t\t\t\tfilters={filters}\n\t\t\t\tonFilterChange={onFilterChange}\n\t\t\t\ttotalCount={artifactsCount}\n\t\t\t\tsetDisplayMode={setDisplayMode}\n\t\t\t\tdisplayMode={displayMode}\n\t\t\t/>\n\n\t\t\t{artifactsList.length === 0 ? (\n\t\t\t\t<ArtifactsEmptyState />\n\t\t\t) : (\n\t\t\t\t<div className={gridClass}>\n\t\t\t\t\t{artifactsList.map((artifact) => (\n\t\t\t\t\t\t<ArtifactCard key={artifact.id} artifact={artifact} />\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import { useSuspenseQueries } from \"@tanstack/react-query\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { useCallback, useMemo } from \"react\";\nimport { z } from \"zod\";\nimport {\n\ttype ArtifactCollectionsFilter,\n\tbuildCountLatestArtifactsQuery,\n\tbuildListLatestArtifactsQuery,\n} from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { ArtifactsPage } from \"@/components/artifacts/artifacts-page\";\nimport type { filterType } from \"@/components/artifacts/types\";\nimport { PrefectLoading } from \"@/components/ui/loading\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\nimport useDebounceCallback from \"@/hooks/use-debounce-callback\";\n\n/**\n * Schema for validating URL search parameters for the artifacts page.\n * @property {number} page - The page number to display. Must be positive. Defaults to 1.\n * @property {number} limit - The maximum number of items to return. Must be positive. Defaults to 10.\n */\nconst searchParams = z.object({\n\ttype: z.string().optional().catch(\"\"),\n\tname: z.string().optional().catch(\"\"),\n});\n\n/**\n * Builds filter parameters for artifacts query from search params\n *\n * @param search - Optional validated search parameters containing page and limit\n * @returns ArtifactsFilter with type and name\n *\n * @example\n * ```ts\n * const filter = buildFilterBody({ type: \"markdown\", name: \"my-dataset\" })\n * // Returns {\n * //\t\tartifacts: {\n * //\t\t\toperator: \"and_\",\n * //\t\t\ttype: { any_: [\"markdown\"] },\n * //\t\t\tkey: { exists_: true, like_: \"my-dataset\" }\n * //\t\t},\n * //\t\toffset: 0\n * //}\n * ```\n */\nconst buildFilterBody = (\n\tsearch?: z.infer<typeof searchParams>,\n): ArtifactCollectionsFilter => ({\n\tartifacts: {\n\t\toperator: \"and_\",\n\t\ttype: {\n\t\t\tany_: search?.type && search?.type !== \"all\" ? [search.type] : undefined,\n\t\t},\n\t\tkey: {\n\t\t\texists_: true,\n\t\t\tlike_: search?.name ?? \"\",\n\t\t},\n\t},\n\tsort: \"ID_DESC\",\n\toffset: 0,\n});\n\nexport const Route = createFileRoute(\"/artifacts/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: function RouteComponent() {\n\t\tconst search = Route.useSearch();\n\t\tconst { filters, onFilterChange } = useFilter();\n\n\t\tconst [{ data: artifactsCount }, { data: artifactsList }] =\n\t\t\tuseSuspenseQueries({\n\t\t\t\tqueries: [\n\t\t\t\t\tbuildCountLatestArtifactsQuery(buildFilterBody(search)),\n\t\t\t\t\tbuildListLatestArtifactsQuery(buildFilterBody(search)),\n\t\t\t\t],\n\t\t\t});\n\n\t\treturn (\n\t\t\t<ArtifactsPage\n\t\t\t\tfilters={filters}\n\t\t\t\tonFilterChange={onFilterChange}\n\t\t\t\tartifactsCount={artifactsCount}\n\t\t\t\tartifactsList={artifactsList}\n\t\t\t/>\n\t\t);\n\t},\n\tloaderDeps: ({ search }) => buildFilterBody(search),\n\tloader: ({ deps, context }) => {\n\t\tvoid context.queryClient.prefetchQuery(\n\t\t\tbuildCountLatestArtifactsQuery(deps),\n\t\t);\n\t\tvoid context.queryClient.prefetchQuery(buildListLatestArtifactsQuery(deps));\n\t},\n\terrorComponent: function ArtifactsErrorComponent({\n\t\terror,\n\t\treset,\n\t}: ErrorComponentProps) {\n\t\tconst serverError = categorizeError(error, \"Failed to load artifacts\");\n\t\tif (\n\t\t\tserverError.type !== \"server-error\" &&\n\t\t\tserverError.type !== \"client-error\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-2xl font-semibold\">Artifacts</h1>\n\t\t\t\t</div>\n\t\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t\t</div>\n\t\t);\n\t},\n\twrapInSuspense: true,\n\tpendingComponent: PrefectLoading,\n});\n\nconst useFilter = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\tconst filters = useMemo(\n\t\t() => [\n\t\t\t{ id: \"type\", label: \"Type\", value: search.type ?? \"all\" },\n\t\t\t{ id: \"name\", label: \"Name\", value: search.name },\n\t\t],\n\t\t[search.type, search.name],\n\t);\n\n\tconst onFilterChange = useDebounceCallback(\n\t\tuseCallback(\n\t\t\t(newFilters: filterType[]) => {\n\t\t\t\tif (!newFilters) return;\n\t\t\t\tvoid navigate({\n\t\t\t\t\tto: \".\",\n\t\t\t\t\tsearch: () =>\n\t\t\t\t\t\tnewFilters\n\t\t\t\t\t\t\t.filter((filter) => filter.value)\n\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t(prev, curr) => {\n\t\t\t\t\t\t\t\t\tif (!curr.value) return prev;\n\t\t\t\t\t\t\t\t\tprev[curr.id] = curr.value;\n\t\t\t\t\t\t\t\t\treturn prev;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{} as Record<string, string>,\n\t\t\t\t\t\t\t),\n\t\t\t\t\treplace: true,\n\t\t\t\t});\n\t\t\t},\n\t\t\t[navigate],\n\t\t),\n\t\t400,\n\t);\n\n\treturn { filters, onFilterChange };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"artifacts-BX0yE4rE.js","names":["useSuspenseQueries","useCallback","useMemo","buildCountLatestArtifactsQuery","buildListLatestArtifactsQuery","ArtifactsPage","useDebounceCallback","Route","useFilter","search","useSearch","navigate","useNavigate","filters","id","label","value","type","name","onFilterChange","newFilters","filterType","to","filter","reduce","prev","curr","Record","replace","SplitComponent","RouteComponent","data","artifactsCount","artifactsList","queries","buildFilterBody","component"],"sources":["../../src/components/artifacts/artifacts-filter.tsx","../../src/components/artifacts/artifacts-header.tsx","../../src/components/artifacts/empty-state.tsx","../../src/components/artifacts/artifacts-page.tsx","../../src/routes/artifacts/index.tsx?tsr-split=component"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport { pluralize } from \"@/utils\";\nimport { Icon } from \"../ui/icons\";\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group\";\nimport type { filterType } from \"./types\";\n\ntype ArtifactsFilterProps = {\n\tfilters: filterType[];\n\tonFilterChange: (newFilters: filterType[]) => void;\n\ttotalCount: number;\n\tsetDisplayMode: (mode: string) => void;\n\tdisplayMode: string;\n};\n\nconst artifactTypeOptions = [\n\t{ value: \"all\", label: \"All Types\" },\n\t{ value: \"markdown\", label: \"Markdown\" },\n\t{ value: \"progress\", label: \"Progress\" },\n\t{ value: \"image\", label: \"Image\" },\n\t{ value: \"table\", label: \"Table\" },\n] as const;\n\nexport const ArtifactsFilterComponent = ({\n\tfilters,\n\tonFilterChange,\n\ttotalCount,\n\tdisplayMode,\n\tsetDisplayMode,\n}: ArtifactsFilterProps) => {\n\tconst changeArtifactName = useCallback(\n\t\t(value: string) => {\n\t\t\tonFilterChange([\n\t\t\t\t...filters.filter((filter) => filter.id !== \"name\"),\n\t\t\t\t{ id: \"name\", label: \"Name\", value },\n\t\t\t]);\n\t\t},\n\t\t[filters, onFilterChange],\n\t);\n\n\tconst changeArtifactType = useCallback(\n\t\t(value: string) => {\n\t\t\tonFilterChange([\n\t\t\t\t...filters.filter((filter) => filter.id !== \"type\"),\n\t\t\t\t{ id: \"type\", label: \"Type\", value },\n\t\t\t]);\n\t\t},\n\t\t[filters, onFilterChange],\n\t);\n\n\tconst typeValue = useMemo(\n\t\t() => filters.find((val) => val.id === \"type\")?.value,\n\t\t[filters],\n\t);\n\n\tconst nameValue = useMemo(\n\t\t() => filters.find((val) => val.id === \"name\")?.value,\n\t\t[filters],\n\t);\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"artifact-filter\"\n\t\t\tclassName=\"flex justify-between items-center\"\n\t\t>\n\t\t\t<div>\n\t\t\t\t<p className=\"text-base text-sm text-muted-foreground\">\n\t\t\t\t\t{totalCount.toLocaleString()} {pluralize(totalCount, \"artifact\")}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t<SearchInput\n\t\t\t\t\tdata-testid=\"search-input\"\n\t\t\t\t\tdefaultValue={nameValue}\n\t\t\t\t\tplaceholder=\"Search artifacts\"\n\t\t\t\t\tonChange={(e) => changeArtifactName(e.target.value)}\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t<Select\n\t\t\t\t\t\tdata-testid=\"type-select\"\n\t\t\t\t\t\tvalue={typeValue}\n\t\t\t\t\t\tonValueChange={changeArtifactType}\n\t\t\t\t\t>\n\t\t\t\t\t\t<SelectTrigger aria-label=\"Artifact type\">\n\t\t\t\t\t\t\t<SelectValue placeholder=\"Type\" />\n\t\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t\t{artifactTypeOptions.map(({ value, label }) => (\n\t\t\t\t\t\t\t\t<SelectItem key={value} value={value}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</SelectContent>\n\t\t\t\t\t</Select>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<ToggleGroup\n\t\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\t\tdefaultValue={displayMode}\n\t\t\t\t\t\t\tonValueChange={(value: string) => setDisplayMode(value)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleGroupItem data-testid=\"grid-layout\" value=\"grid\">\n\t\t\t\t\t\t\t\t<Icon id=\"LayoutGrid\" />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t\t<ToggleGroupItem data-testid=\"list-layout\" value=\"list\">\n\t\t\t\t\t\t\t\t<Icon id=\"AlignJustify\" />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t</ToggleGroup>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbList,\n} from \"@/components/ui/breadcrumb\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\n\nexport const ArtifactsHeader = () => {\n\treturn (\n\t\t<div className=\"flex items-center justify-between\">\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Breadcrumb>\n\t\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\t\tArtifacts\n\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t</BreadcrumbList>\n\t\t\t\t</Breadcrumb>\n\t\t\t</div>\n\t\t\t<DocsLink id=\"artifacts-guide\" label=\"Documentation\" />\n\t\t</div>\n\t);\n};\n","import { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\n\nexport const ArtifactsEmptyState = () => (\n\t<EmptyState>\n\t\t<div className=\"flex items-center gap-3\">\n\t\t\t<EmptyStateIcon id=\"Image\" />\n\t\t</div>\n\t\t<EmptyStateTitle>Create an artifact to get started</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tArtifacts are byproducts of your runs; they can be anything from a\n\t\t\tmarkdown string to a table.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<DocsLink id=\"artifacts-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import { useMemo } from \"react\";\nimport type { ArtifactCollection } from \"@/api/artifacts\";\nimport { useLocalStorage } from \"@/hooks/use-local-storage\";\nimport { ArtifactCard } from \"./artifact-card\";\nimport { ArtifactsFilterComponent } from \"./artifacts-filter\";\nimport { ArtifactsHeader } from \"./artifacts-header\";\nimport { ArtifactsEmptyState } from \"./empty-state\";\nimport type { filterType } from \"./types\";\n\nexport type ArtifactsPageProps = {\n\tfilters: filterType[];\n\tonFilterChange: (newFilters: filterType[]) => void;\n\tartifactsCount: number;\n\tartifactsList: ArtifactCollection[];\n};\n\nexport const ArtifactsPage = ({\n\tfilters,\n\tonFilterChange,\n\tartifactsList,\n\tartifactsCount,\n}: ArtifactsPageProps) => {\n\tconst [displayMode, setDisplayMode] = useLocalStorage<string>(\n\t\t\"artifacts-grid-style\",\n\t\t\"grid\",\n\t);\n\n\tconst gridClass = useMemo(() => {\n\t\treturn displayMode === \"grid\"\n\t\t\t? \"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4\"\n\t\t\t: \"grid-cols-1\";\n\t}, [displayMode]);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<ArtifactsHeader />\n\t\t\t<ArtifactsFilterComponent\n\t\t\t\tfilters={filters}\n\t\t\t\tonFilterChange={onFilterChange}\n\t\t\t\ttotalCount={artifactsCount}\n\t\t\t\tsetDisplayMode={setDisplayMode}\n\t\t\t\tdisplayMode={displayMode}\n\t\t\t/>\n\n\t\t\t{artifactsList.length === 0 ? (\n\t\t\t\t<ArtifactsEmptyState />\n\t\t\t) : (\n\t\t\t\t<div className={gridClass}>\n\t\t\t\t\t{artifactsList.map((artifact) => (\n\t\t\t\t\t\t<ArtifactCard key={artifact.id} artifact={artifact} />\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import { useSuspenseQueries } from \"@tanstack/react-query\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { useCallback, useMemo } from \"react\";\nimport { z } from \"zod\";\nimport {\n\ttype ArtifactCollectionsFilter,\n\tbuildCountLatestArtifactsQuery,\n\tbuildListLatestArtifactsQuery,\n} from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { ArtifactsPage } from \"@/components/artifacts/artifacts-page\";\nimport type { filterType } from \"@/components/artifacts/types\";\nimport { PrefectLoading } from \"@/components/ui/loading\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\nimport useDebounceCallback from \"@/hooks/use-debounce-callback\";\n\n/**\n * Schema for validating URL search parameters for the artifacts page.\n * @property {number} page - The page number to display. Must be positive. Defaults to 1.\n * @property {number} limit - The maximum number of items to return. Must be positive. Defaults to 10.\n */\nconst searchParams = z.object({\n\ttype: z.string().optional().catch(\"\"),\n\tname: z.string().optional().catch(\"\"),\n});\n\n/**\n * Builds filter parameters for artifacts query from search params\n *\n * @param search - Optional validated search parameters containing page and limit\n * @returns ArtifactsFilter with type and name\n *\n * @example\n * ```ts\n * const filter = buildFilterBody({ type: \"markdown\", name: \"my-dataset\" })\n * // Returns {\n * //\t\tartifacts: {\n * //\t\t\toperator: \"and_\",\n * //\t\t\ttype: { any_: [\"markdown\"] },\n * //\t\t\tkey: { exists_: true, like_: \"my-dataset\" }\n * //\t\t},\n * //\t\toffset: 0\n * //}\n * ```\n */\nconst buildFilterBody = (\n\tsearch?: z.infer<typeof searchParams>,\n): ArtifactCollectionsFilter => ({\n\tartifacts: {\n\t\toperator: \"and_\",\n\t\ttype: {\n\t\t\tany_: search?.type && search?.type !== \"all\" ? [search.type] : undefined,\n\t\t},\n\t\tkey: {\n\t\t\texists_: true,\n\t\t\tlike_: search?.name ?? \"\",\n\t\t},\n\t},\n\tsort: \"ID_DESC\",\n\toffset: 0,\n});\n\nexport const Route = createFileRoute(\"/artifacts/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: function RouteComponent() {\n\t\tconst search = Route.useSearch();\n\t\tconst { filters, onFilterChange } = useFilter();\n\n\t\tconst [{ data: artifactsCount }, { data: artifactsList }] =\n\t\t\tuseSuspenseQueries({\n\t\t\t\tqueries: [\n\t\t\t\t\tbuildCountLatestArtifactsQuery(buildFilterBody(search)),\n\t\t\t\t\tbuildListLatestArtifactsQuery(buildFilterBody(search)),\n\t\t\t\t],\n\t\t\t});\n\n\t\treturn (\n\t\t\t<ArtifactsPage\n\t\t\t\tfilters={filters}\n\t\t\t\tonFilterChange={onFilterChange}\n\t\t\t\tartifactsCount={artifactsCount}\n\t\t\t\tartifactsList={artifactsList}\n\t\t\t/>\n\t\t);\n\t},\n\tloaderDeps: ({ search }) => buildFilterBody(search),\n\tloader: ({ deps, context }) => {\n\t\tvoid context.queryClient.prefetchQuery(\n\t\t\tbuildCountLatestArtifactsQuery(deps),\n\t\t);\n\t\tvoid context.queryClient.prefetchQuery(buildListLatestArtifactsQuery(deps));\n\t},\n\terrorComponent: function ArtifactsErrorComponent({\n\t\terror,\n\t\treset,\n\t}: ErrorComponentProps) {\n\t\tconst serverError = categorizeError(error, \"Failed to load artifacts\");\n\t\tif (\n\t\t\tserverError.type !== \"server-error\" &&\n\t\t\tserverError.type !== \"client-error\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-2xl font-semibold\">Artifacts</h1>\n\t\t\t\t</div>\n\t\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t\t</div>\n\t\t);\n\t},\n\twrapInSuspense: true,\n\tpendingComponent: PrefectLoading,\n});\n\nconst useFilter = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\tconst filters = useMemo(\n\t\t() => [\n\t\t\t{ id: \"type\", label: \"Type\", value: search.type ?? \"all\" },\n\t\t\t{ id: \"name\", label: \"Name\", value: search.name },\n\t\t],\n\t\t[search.type, search.name],\n\t);\n\n\tconst onFilterChange = useDebounceCallback(\n\t\tuseCallback(\n\t\t\t(newFilters: filterType[]) => {\n\t\t\t\tif (!newFilters) return;\n\t\t\t\tvoid navigate({\n\t\t\t\t\tto: \".\",\n\t\t\t\t\tsearch: () =>\n\t\t\t\t\t\tnewFilters\n\t\t\t\t\t\t\t.filter((filter) => filter.value)\n\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t(prev, curr) => {\n\t\t\t\t\t\t\t\t\tif (!curr.value) return prev;\n\t\t\t\t\t\t\t\t\tprev[curr.id] = curr.value;\n\t\t\t\t\t\t\t\t\treturn prev;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{} as Record<string, string>,\n\t\t\t\t\t\t\t),\n\t\t\t\t\treplace: true,\n\t\t\t\t});\n\t\t\t},\n\t\t\t[navigate],\n\t\t),\n\t\t400,\n\t);\n\n\treturn { filters, onFilterChange };\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{o as t,s as n}from"./vendor-codemirror-BBJStocF.js";import{M as r,_ as i}from"./vendor-tanstack-BmR4FTpr.js";import{M as a,g as o,h as s,t as c}from"./button-BDE-TzkO.js";import{a as l,i as u,n as d,o as f,r as p,s as m,t as h}from"./select-BMVFWXIz.js";import{t as g}from"./use-debounce-B4gHt8mW.js";import{t as _}from"./input-Dw8kXwXm.js";import{t as ee}from"./skeleton-D_DKwGSQ.js";import{i as te,n as ne,t as re}from"./tooltip-C4UJTpJe.js";import{i as ie,n as ae,t as oe}from"./card-NEwP8yrf.js";import{S as v,b as se,c as y,d as ce,f as b,g as le,h as ue,l as x,m as de,n as S,o as C,p as w,r as fe,s as pe,u as T,x as E,y as me}from"./vendor-forms-DHBeRgXw.js";import{t as he}from"./checkbox-DXKtiRv2.js";import{t as ge}from"./label-D34JViMr.js";import{i as _e,r as ve}from"./deployments-Cqq-g-Gw.js";import{i as ye}from"./flows-DKEFdn0d.js";import{n as be}from"./work-pools-D5tkfPRp.js";import{t as xe}from"./state-badge-DOWv3hq2.js";import{c as Se,n as Ce}from"./automations-q8WVmwKG.js";import{$r as we,C as Te,Gn as D,Hn as O,Jn as k,Kn as A,Qr as Ee,Un as j,Wn as M,Xr as De,Yn as N,Zr as Oe,cr as ke,di as Ae,ei as P,et as je,ii as F,it as Me,lr as Ne,ni as I,or as Pe,qn as L,ri as R,sr as Fe,ti as z,wr as Ie,wt as Le}from"./index-B-eHd1rg.js";import{i as Re,n as ze,r as Be,t as Ve}from"./constants-DNk4ayrJ.js";import{n as He,t as Ue}from"./use-stepper-CaYAEDak.js";import{t as We}from"./state-select-CaWzOSCG.js";import{i as Ge,n as Ke,r as qe,t as Je}from"./use-resource-options-CLqR8LCF.js";import{t as Ye}from"./tags-input-BdkwPEjW.js";var B=`UNASSIGNED`,Xe=T({type:y(`do-nothing`)}),Ze=T({type:C([`cancel-flow-run`,`suspend-flow-run`,`resume-flow-run`])}),Qe=T({type:y(`change-flow-run-state`),state:C([`COMPLETED`,`RUNNING`,`SCHEDULED`,`PENDING`,`FAILED`,`CANCELLED`,`CANCELLING`,`CRASHED`,`PAUSED`]),name:b().optional(),message:b().optional(),force:fe().optional()}).transform(e=>({...e,force:e.force??!1})),$e=T({type:y(`run-deployment`),deployment_id:b().or(y(B)),job_variables:ce(de()).optional(),parameters:ce(de()).optional()}).transform(e=>({...e,...e.deployment_id===`UNASSIGNED`?{source:`inferred`,deployment_id:null}:{source:`selected`,deployment_id:e.deployment_id}})),et=T({type:C([`pause-deployment`,`resume-deployment`]),deployment_id:b().or(y(B))}).transform(e=>({type:e.type,...e.deployment_id===`UNASSIGNED`?{source:`inferred`,deployment_id:null}:{source:`selected`,deployment_id:e.deployment_id}})),tt=T({type:C([`pause-work-queue`,`resume-work-queue`]),work_queue_id:b().or(y(B))}).transform(e=>({type:e.type,...e.work_queue_id===`UNASSIGNED`?{source:`inferred`,work_queue_id:null}:{source:`selected`,work_queue_id:e.work_queue_id}})),nt=T({type:C([`pause-work-pool`,`resume-work-pool`]),work_pool_id:b().or(y(B))}).transform(e=>({type:e.type,...e.work_pool_id===`UNASSIGNED`?{source:`inferred`,work_pool_id:null}:{source:`selected`,work_pool_id:e.work_pool_id}})),rt=T({type:C([`pause-automation`,`resume-automation`]),automation_id:b().or(y(B))}).transform(e=>({type:e.type,...e.automation_id===`UNASSIGNED`?{source:`inferred`,automation_id:null}:{source:`selected`,automation_id:e.automation_id}})),it=T({type:y(`send-notification`),block_document_id:b(),body:b(),subject:b()}),at=T({type:y(`call-webhook`),block_document_id:b(),payload:b()}),ot=C([`deployment-status`,`flow-run-state`,`work-pool-status`,`work-queue-status`,`custom`]),st=C([`Reactive`,`Proactive`]),ct=ce(w([b(),S(b())])),lt=T({type:y(`event`),posture:st,threshold:x().min(1).default(1),within:x().min(0).default(0),match:ct.optional(),match_related:ct.optional(),for_each:S(b()).optional(),after:S(b()).optional(),expect:S(b()).optional()}),V=pe(()=>w([lt,ut,dt])),ut=pe(()=>T({type:y(`compound`),triggers:S(V),require:w([x().min(1),y(`any`),y(`all`)]).default(`all`),within:x().min(0).default(0)})),dt=pe(()=>T({type:y(`sequence`),triggers:S(V),within:x().min(0).default(0)})),ft=T({name:b().min(1,`Name is required`),description:b().optional(),triggerTemplate:ot.optional(),trigger:V,actions:S(w([Xe,Qe,et,$e,nt,tt,rt,it,at,Ze]))}),H=t(),pt={"cancel-flow-run":`Cancel a flow run`,"suspend-flow-run":`Suspend a flow run`,"resume-flow-run":`Resume a flow run`,"change-flow-run-state":`Change flow run's state`,"run-deployment":`Run a deployment`,"pause-deployment":`Pause a deployment`,"resume-deployment":`Resume a deployment`,"pause-work-queue":`Pause a work queue`,"resume-work-queue":`Resume a work queue`,"pause-work-pool":`Pause a work pool`,"resume-work-pool":`Resume a work pool`,"pause-automation":`Pause an automation`,"resume-automation":`Resume an automation`,"send-notification":`Send a notification`,"call-webhook":`Call a webhook`},mt=({index:e})=>{let t=E();return(0,H.jsx)(z,{control:t.control,name:`actions.${e}.type`,render:({field:n})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Action Type`}),(0,H.jsx)(P,{children:(0,H.jsxs)(h,{...n,onValueChange:r=>{n.onChange(r);let i=ht({index:e,type:r});i&&t.setValue(i,B)},children:[(0,H.jsx)(f,{"aria-label":`select action`,className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select action`})}),(0,H.jsx)(d,{children:(0,H.jsxs)(p,{children:[(0,H.jsx)(l,{children:`Actions`}),Object.keys(pt).map(e=>(0,H.jsx)(u,{value:e,children:pt[e]},e))]})})]})})]})})};function ht({index:e,type:t}){switch(t){case`run-deployment`:case`pause-deployment`:case`resume-deployment`:return`actions.${e}.deployment_id`;case`pause-work-queue`:case`resume-work-queue`:return`actions.${e}.work_queue_id`;case`pause-work-pool`:case`resume-work-pool`:return`actions.${e}.work_pool_id`;case`pause-automation`:case`resume-automation`:return`actions.${e}.automation_id`;default:return null}}var U=e(n(),1),gt=4,W=({length:e=gt})=>Array.from({length:e},(e,t)=>(0,H.jsx)(ee,{className:`mt-2 p-4 h-2 w-full`},t)),_t=({index:e})=>{let t=E(),[n,i]=(0,U.useState)(``),{data:a,isLoading:s}=r(je({offset:0,block_types:{slug:{any_:[`webhook`]}}})),c=(0,U.useMemo)(()=>a?.map(e=>e.slug)??[],[a]),{data:l,isLoading:u}=r(Me({block_types:c.length>0?{slug:{any_:c}}:void 0,include_secrets:!1,sort:`BLOCK_TYPE_AND_NAME_ASC`,offset:0},{enabled:c.length>0})),d=s||u,f=(0,U.useMemo)(()=>!a||!l?[]:a.map(e=>({blockType:e,documents:l.filter(t=>t.block_type_id===e.id)})).filter(e=>e.documents.length>0),[a,l]),p=(0,U.useMemo)(()=>{if(!n)return f;let e=n.toLowerCase();return f.map(t=>({...t,documents:t.documents.filter(t=>t.name?.toLowerCase().includes(e))})).filter(e=>e.documents.length>0)},[f,n]),m=(0,U.useCallback)(e=>{if(!(!e||!l))return l.find(t=>t.id===e)},[l]);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(z,{control:t.control,name:`actions.${e}.block_document_id`,render:({field:e})=>{let t=m(e.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsx)(R,{children:`Block`}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!t,"aria-label":`Select webhook block`,children:t?t.name:`Select a webhook block`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a block...`}),(0,H.jsx)(j,{children:`No webhook blocks found`}),(0,H.jsx)(L,{children:d?(0,H.jsx)(W,{}):p.map(t=>(0,H.jsx)(M,{heading:t.blockType.name,children:t.documents.map(t=>(0,H.jsx)(A,{value:t.id,selected:e.value===t.id,onSelect:e.onChange,children:t.name},t.id))},t.blockType.id))})]})]}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(vt,{index:e}),(0,H.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-accent bg-accent p-3 text-sm text-accent-foreground`,children:[(0,H.jsx)(o,{id:`Info`,className:`mt-0.5 size-4 shrink-0`}),(0,H.jsxs)(`p`,{children:[`In addition to any fields present on the triggering event, the following objects can be used in webhook payload templates:`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`deployment`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow_run`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_pool`}),`, and`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_queue`}),`.`]})]})]})},vt=({index:e})=>{let t=E(),{validateTemplate:n}=Se(),[r,i]=(0,U.useState)(null),[a,s]=(0,U.useState)(!1),c=g(t.watch(`actions.${e}.payload`),1e3);return(0,U.useEffect)(()=>{(async()=>{if(!c||c.trim()===``){i(null);return}s(!0);try{let e=await n(c);e.valid?i(null):i(e.error)}catch{i(null)}finally{s(!1)}})()},[c,n]),(0,H.jsx)(z,{control:t.control,name:`actions.${e}.payload`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsxs)(R,{className:`flex items-center gap-2`,children:[`Payload`,a&&(0,H.jsx)(o,{id:`Loader2`,className:`size-3 animate-spin`})]}),(0,H.jsx)(P,{children:(0,H.jsx)(De,{...e,value:e.value??``,placeholder:`Enter webhook payload...`,className:r?`border-destructive`:``,rows:5})}),r&&(0,H.jsx)(`p`,{className:`text-sm text-destructive`,children:r}),(0,H.jsx)(F,{})]})})},yt=({index:e})=>{let t=E(),n=t.watch(`actions.${e}.state`);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(z,{control:t.control,name:`actions.${e}.state`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`State`}),(0,H.jsx)(P,{children:(0,H.jsx)(We,{value:e.value,onValueChange:e.onChange})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(z,{control:t.control,name:`actions.${e}.name`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Name`}),(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`text`,...e,value:e.value??``,placeholder:n?Ve[n]:void 0})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(z,{control:t.control,name:`actions.${e}.message`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Message`}),(0,H.jsx)(P,{children:(0,H.jsx)(De,{...e,placeholder:`State changed by Automation <id>`})}),(0,H.jsx)(F,{})]})})]})},bt=({action:e})=>(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e===`Resume`?`Resume a flow run inferred from the triggering event`:`${e} flow run inferred from the triggering event`}),G={value:B,name:`Infer Automation`},xt=(e,t)=>{if(t===G.value)return G.name;let n=e?.find(e=>e.id===t);if(n)return n.name},St=({action:e,index:t})=>{let[n,i]=(0,U.useState)(``),a=E(),{data:o,isSuccess:s}=r(Ce()),c=(0,U.useDeferredValue)(n),l=(0,U.useMemo)(()=>o?o.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())):[],[o,c]),u=G.name.toLowerCase().includes(c.toLowerCase());return(0,H.jsx)(z,{control:a.control,name:`actions.${t}.automation_id`,render:({field:t})=>{let r=xt(o,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Automation To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!r,"aria-label":`Select Automation to ${e}`,children:r??`Select automation`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for an automation...`}),(0,H.jsx)(j,{children:`No automation found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[u&&(0,H.jsx)(A,{selected:t.value===G.value,onSelect:e=>{t.onChange(e),i(``)},value:G.value,children:G.name}),s?l.map(e=>(0,H.jsx)(A,{selected:t.value===e.id,onSelect:e=>{t.onChange(e),i(``)},value:e.id,children:e.name},e.id)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}})},Ct=(e={page:1,limit:100,sort:`NAME_ASC`})=>{let{data:t,status:n}=r(_e(e)),i=new Set(t?.results.map(e=>e.flow_id)),{data:a,status:o}=r(ye({flows:{operator:`or_`,id:{any_:Array.from(i)}},sort:`NAME_DESC`,offset:0},{enabled:i.size>0}));return(0,U.useMemo)(()=>{if(a&&t){let e=new Map(a.map(e=>[e.id,e])),n=t.results.map(t=>({...t,flow:e.get(t.flow_id)})),{count:r,limit:i,pages:o,page:s}=t;return{data:{count:r,limit:i,pages:o,page:s,results:n},status:`success`}}return o===`error`||n===`error`?{data:void 0,status:`error`}:{data:void 0,status:`pending`}},[t,n,a,o])},K={value:B,name:`Infer Deployment`},wt=(e,t)=>{if(t===K.value)return K.name;let n=e?.find(e=>e.id===t);if(n)return(0,H.jsx)(Et,{deploymentWithFlow:n})},Tt=({action:e,index:t})=>{let[n,r]=(0,U.useState)(``),i=E(),a=i.watch(`actions.${t}.type`),o=v({name:`actions.${t}.deployment_id`}),{data:s}=Ct({page:1,sort:`NAME_ASC`,deployments:{operator:`or_`,flow_or_deployment_name:{like_:g(n,500)}}}),c=K.name.toLowerCase().includes(n.toLowerCase()),l=s?.results;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(z,{control:i.control,name:`actions.${t}.deployment_id`,render:({field:t})=>{let i=wt(l,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Deployment To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!i,"aria-label":`Select Deployment to ${e}`,children:i??`Select deployment`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:r,placeholder:`Search for an deployment...`}),(0,H.jsx)(j,{children:`No deployment found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[c&&(0,H.jsx)(A,{selected:t.value===K.value,onSelect:t.onChange,value:K.value,children:K.name}),l?l.map(e=>(0,H.jsx)(A,{"aria-label":e.name,selected:t.value===e.id,onSelect:t.onChange,value:e.id,children:(0,H.jsx)(Et,{deploymentWithFlow:e})},e.id)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}}),o!==K.value&&a===`run-deployment`&&(0,H.jsx)(`div`,{children:`TODO: Additional fields`})]})},Et=({deploymentWithFlow:e})=>e.flow?(0,H.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,H.jsx)(`div`,{children:e.flow.name}),(0,H.jsx)(o,{className:`size-4`,id:`ChevronRight`}),(0,H.jsx)(`div`,{children:e.name})]}):e.name,q={value:B,name:`Infer Work Pool`},Dt=(e,t)=>{if(t===q.value)return q.name;let n=e?.find(e=>e.id===t);if(n)return n.name},Ot=({action:e,index:t})=>{let[n,i]=(0,U.useState)(``),a=E(),{data:o,isSuccess:s}=r(be()),c=(0,U.useDeferredValue)(n),l=(0,U.useMemo)(()=>o?o.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())):[],[o,c]),u=q.name.toLowerCase().includes(c.toLowerCase());return(0,H.jsx)(z,{control:a.control,name:`actions.${t}.work_pool_id`,render:({field:t})=>{let r=Dt(o,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Work Pool To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!r,"aria-label":`Select Work Pool to ${e}`,children:r??`Select Work Pool`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a work pool...`}),(0,H.jsx)(j,{children:`No work pool found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[u&&(0,H.jsx)(A,{selected:t.value===q.value,onSelect:e=>{t.onChange(e),i(``)},value:q.value,children:q.name}),s?l.map(e=>(0,H.jsx)(A,{selected:t.value===e.id,onSelect:e=>{t.onChange(e),i(``)},value:e.id,children:e.name},e.id)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}})},J={value:B,name:`Infer Work Queue`},kt=(e,t)=>{if(t===J.value)return J.name;let n=e?.find(e=>e.id===t);if(n)return n.name},At=({action:e,index:t})=>{let[n,i]=(0,U.useState)(``),a=E(),{data:o}=r(Te()),s=(0,U.useDeferredValue)(n),c=(0,U.useMemo)(()=>{if(!o)return;let e=new Map,t=o.filter(e=>e.name.toLowerCase().includes(s.toLowerCase()));for(let n of t){let{work_pool_name:t}=n;if(!t)throw Error(`'work_pool_name expected`);e.set(t,[...e.get(t)??[],n])}return e},[o,s]),l=J.name.toLowerCase().includes(s.toLowerCase());return(0,H.jsx)(z,{control:a.control,name:`actions.${t}.work_queue_id`,render:({field:t})=>{let r=kt(o,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Work Queue To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!r,"aria-label":`Select Work Queue to ${e}`,children:r??`Select Work Queue`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a work queue...`}),(0,H.jsx)(j,{children:`No work queue found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[l&&(0,H.jsx)(A,{selected:t.value===J.value,onSelect:e=>{t.onChange(e),i(``)},value:J.value,children:J.name}),c?Array.from(c).map(([e,n])=>(0,H.jsxs)(`div`,{className:`border-b`,children:[(0,H.jsx)(A,{disabled:!0,children:e}),n.map(e=>(0,H.jsx)(A,{selected:t.value===e.id,onSelect:e=>{t.onChange(e),i(``)},value:e.id,children:e.name},e.id))]},e)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}})},jt=({index:e})=>{let t=E(),[n,i]=(0,U.useState)(``),{data:a,isLoading:s}=r(je({offset:0,block_schemas:{operator:`and_`,block_capabilities:{all_:[`notify`]}}})),c=(0,U.useMemo)(()=>a?.map(e=>e.slug)??[],[a]),{data:l,isLoading:u}=r(Me({block_types:c.length>0?{slug:{any_:c}}:void 0,include_secrets:!1,sort:`BLOCK_TYPE_AND_NAME_ASC`,offset:0},{enabled:c.length>0})),d=s||u,f=(0,U.useMemo)(()=>!a||!l?[]:a.map(e=>({blockType:e,documents:l.filter(t=>t.block_type_id===e.id)})).filter(e=>e.documents.length>0),[a,l]),p=(0,U.useMemo)(()=>{if(!n)return f;let e=n.toLowerCase();return f.map(t=>({...t,documents:t.documents.filter(t=>t.name?.toLowerCase().includes(e))})).filter(e=>e.documents.length>0)},[f,n]),m=(0,U.useCallback)(e=>{if(!(!e||!l))return l.find(t=>t.id===e)},[l]);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(z,{control:t.control,name:`actions.${e}.block_document_id`,render:({field:e})=>{let t=m(e.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsx)(R,{children:`Block`}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!t,"aria-label":`Select notification block`,children:t?t.name:`Select a notification block`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a block...`}),(0,H.jsx)(j,{children:`No notification blocks found`}),(0,H.jsx)(L,{children:d?(0,H.jsx)(W,{}):p.map(t=>(0,H.jsx)(M,{heading:t.blockType.name,children:t.documents.map(t=>(0,H.jsx)(A,{value:t.id,selected:e.value===t.id,onSelect:e.onChange,children:t.name},t.id))},t.blockType.id))})]})]}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(Mt,{index:e,name:`subject`,label:`Subject`,placeholder:`Enter notification subject...`}),(0,H.jsx)(Mt,{index:e,name:`body`,label:`Body`,placeholder:`Enter notification body...`,multiline:!0}),(0,H.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-accent bg-accent p-3 text-sm text-accent-foreground`,children:[(0,H.jsx)(o,{id:`Info`,className:`mt-0.5 size-4 shrink-0`}),(0,H.jsxs)(`p`,{children:[`In addition to any fields present on the triggering event, the following objects can be used in notification templates:`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`deployment`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow_run`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_pool`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_queue`}),`, and`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`metric`}),`.`]})]})]})},Mt=({index:e,name:t,label:n,placeholder:r,multiline:i=!1})=>{let a=E(),{validateTemplate:s}=Se(),[c,l]=(0,U.useState)(null),[u,d]=(0,U.useState)(!1),f=g(a.watch(`actions.${e}.${t}`),1e3);(0,U.useEffect)(()=>{(async()=>{if(!f||f.trim()===``){l(null);return}d(!0);try{let e=await s(f);e.valid?l(null):l(e.error)}catch{l(null)}finally{d(!1)}})()},[f,s]);let p=i?De:_;return(0,H.jsx)(z,{control:a.control,name:`actions.${e}.${t}`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsxs)(R,{className:`flex items-center gap-2`,children:[n,u&&(0,H.jsx)(o,{id:`Loader2`,className:`size-3 animate-spin`})]}),(0,H.jsx)(P,{children:(0,H.jsx)(p,{...e,value:e.value??``,placeholder:r,className:c?`border-destructive`:``})}),c&&(0,H.jsx)(`p`,{className:`text-sm text-destructive`,children:c}),(0,H.jsx)(F,{})]})})},Nt=({index:e,onRemove:t})=>(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,H.jsxs)(`p`,{className:`text-base font-semibold`,children:[`Action `,e+1]}),(0,H.jsx)(c,{size:`icon`,"aria-label":`remove action ${e+1}`,onClick:t,variant:`outline`,children:(0,H.jsx)(o,{id:`Trash2`,className:`size-4`})})]}),(0,H.jsx)(mt,{index:e}),(0,H.jsx)(Pt,{index:e}),(0,H.jsx)(`hr`,{className:`my-8`})]},e),Pt=({index:e})=>{switch(v({name:`actions.${e}.type`})){case`change-flow-run-state`:return(0,H.jsx)(yt,{index:e});case`run-deployment`:return(0,H.jsx)(Tt,{action:`Run`,index:e});case`pause-deployment`:return(0,H.jsx)(Tt,{action:`Pause`,index:e});case`resume-deployment`:return(0,H.jsx)(Tt,{action:`Resume`,index:e});case`pause-work-queue`:return(0,H.jsx)(At,{action:`Pause`,index:e});case`resume-work-queue`:return(0,H.jsx)(At,{action:`Resume`,index:e});case`pause-work-pool`:return(0,H.jsx)(Ot,{action:`Pause`,index:e});case`resume-work-pool`:return(0,H.jsx)(Ot,{action:`Resume`,index:e});case`pause-automation`:return(0,H.jsx)(St,{action:`Pause`,index:e});case`resume-automation`:return(0,H.jsx)(St,{action:`Resume`,index:e});case`send-notification`:return(0,H.jsx)(jt,{index:e});case`call-webhook`:return(0,H.jsx)(_t,{index:e});case`cancel-flow-run`:return(0,H.jsx)(bt,{action:`Cancel`});case`suspend-flow-run`:return(0,H.jsx)(bt,{action:`Suspend`});case`resume-flow-run`:return(0,H.jsx)(bt,{action:`Resume`});default:return null}},Ft=()=>{let{fields:e,append:t,remove:n}=me({control:E().control,name:`actions`,shouldUnregister:!1,rules:{minLength:1}});return(0,H.jsxs)(`div`,{children:[e.map(({id:e},t)=>(0,H.jsx)(Nt,{index:t,onRemove:()=>n(t)},e)),(0,H.jsxs)(c,{type:`button`,variant:`outline`,onClick:()=>t({type:`cancel-flow-run`}),children:[(0,H.jsx)(o,{id:`Plus`,className:`mr-2 size-4`}),` Add Action`]})]})},It=()=>{let e=E();return(0,H.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,H.jsx)(z,{control:e.control,name:`name`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Automation Name`}),(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`text`,...e,value:e.value??``})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(z,{control:e.control,name:`description`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Description (Optional)`}),(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`text`,...e,value:e.value??``})}),(0,H.jsx)(F,{})]})})]})},Lt=[{value:`Reactive`,label:`Observe`},{value:`Proactive`,label:`Don't observe`}],Rt=30,zt=()=>{let e=E(),t=t=>{let n=e.getValues(`trigger.posture`);if(e.setValue(`trigger.posture`,t),n===`Reactive`&&t===`Proactive`){let t=e.getValues(`trigger.expect`)??[];e.setValue(`trigger.after`,t),e.setValue(`trigger.expect`,[]),e.getValues(`trigger.within`)===0&&e.setValue(`trigger.within`,Rt)}else if(n===`Proactive`&&t===`Reactive`){let t=e.getValues(`trigger.after`)??[];e.setValue(`trigger.expect`,t),e.setValue(`trigger.after`,[])}};return(0,H.jsx)(z,{control:e.control,name:`trigger.posture`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`When I`}),(0,H.jsx)(P,{children:(0,H.jsx)(Oe,{value:e.value,onValueChange:t,className:`flex gap-4`,children:Lt.map(e=>(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(Ee,{value:e.value,id:`custom-${e.value}`}),(0,H.jsx)(ge,{htmlFor:`custom-${e.value}`,children:e.label})]},e.value))})})]})})},Bt=60,Vt=3600,Ht=86400,Ut=[{label:`Seconds`,value:1},{label:`Minutes`,value:Bt},{label:`Hours`,value:Vt},{label:`Days`,value:Ht}];function Wt(e){return e>0&&e%Ht===0?Ht:e>0&&e%Vt===0?Vt:e>0&&e%Bt===0?Bt:1}function Y({value:e,onChange:t,min:n=0,max:r,className:i,disabled:a=!1}){let[o,c]=(0,U.useState)(()=>Wt(e)),l=(0,U.useMemo)(()=>Ut.filter(e=>e.value>=n),[n]),p=(0,U.useMemo)(()=>e/o,[e,o]),g=(0,U.useCallback)(e=>{let n=e*o;r!==void 0&&n>r&&(n=r),t(n)},[t,o,r]),ee=(0,U.useCallback)(n=>{let i=Number(n),a=o;c(i);let s=e/a*i;r!==void 0&&s>r&&(s=r),t(s)},[t,o,e,r]);return(0,U.useEffect)(()=>{if(!l.some(e=>e.value===o)){let e=l[0];e&&c(e.value)}},[l,o]),(0,H.jsxs)(`div`,{className:s(`grid grid-cols-[1fr_7rem] gap-2 w-full`,i),children:[(0,H.jsx)(_,{type:`number`,min:0,value:p,onChange:e=>g(Number(e.target.value)),disabled:a,"aria-label":`Duration quantity`}),(0,H.jsxs)(h,{value:String(o),onValueChange:ee,disabled:a,children:[(0,H.jsx)(f,{"aria-label":`Duration unit`,children:(0,H.jsx)(m,{})}),(0,H.jsx)(d,{children:l.map(e=>(0,H.jsx)(u,{value:String(e.value),children:e.label},e.value))})]})]})}var Gt=2,Kt=40;function qt({selectedResourceIds:e,onToggleResource:t,emptyMessage:n=`All resources`}){let[r,i]=(0,U.useState)(``),a=(0,U.useDeferredValue)(r),[o,s]=(0,U.useState)(0),c=(0,U.useRef)(null),l=(0,U.useRef)(null);(0,U.useEffect)(()=>{let e=c.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e)s(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]);let{resourceOptions:u}=Je(),d=(0,U.useMemo)(()=>{let e=[{label:`Automations`,options:[]},{label:`Blocks`,options:[]},{label:`Deployments`,options:[]},{label:`Flows`,options:[]},{label:`Work Pools`,options:[]},{label:`Work Queues`,options:[]}];for(let t of u){let n={label:t.name,value:t.resourceId};switch(t.type){case`automation`:e[0].options.push(n);break;case`block`:e[1].options.push(n);break;case`deployment`:e[2].options.push(n);break;case`flow`:e[3].options.push(n);break;case`work-pool`:e[4].options.push(n);break;case`work-queue`:e[5].options.push(n);break}}return e.map(e=>({...e,options:e.options.sort((e,t)=>e.label.localeCompare(t.label))})).filter(e=>e.options.length>0)},[u]),f=(0,U.useMemo)(()=>{if(!a)return d;let e=a.toLowerCase();return d.map(t=>({...t,options:t.options.filter(t=>t.label.toLowerCase().includes(e)||t.value.toLowerCase().includes(e))})).filter(e=>e.options.length>0)},[d,a]),p=(0,U.useMemo)(()=>{if(!a.trim()||!a.includes(`.`))return!1;let e=a.toLowerCase();return!u.some(t=>t.resourceId.toLowerCase()===e)},[a,u]),m=(0,U.useCallback)(e=>{let t=l.current;if(!t||o===0||e.length===0)return Math.min(e.length,Gt);let n=e.length>1?o-Kt:o,r=0;for(let i=0;i<e.length&&(t.textContent=e.slice(0,i+1).join(`, `),t.offsetWidth<=n);i++)r=i+1;return r===e.length?e.length:Math.max(1,r)},[o]),h=()=>{if(e.length===0)return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n});let t=e.map(e=>u.find(t=>t.resourceId===e)?.name??e),r=m(t),i=t.slice(0,r),a=t.length-r;return(0,H.jsxs)(`div`,{ref:c,className:`flex flex-1 min-w-0 items-center gap-2`,children:[(0,H.jsx)(`div`,{className:`flex flex-1 min-w-0 items-center gap-2 overflow-hidden`,children:(0,H.jsx)(`span`,{className:`truncate`,children:i.join(`, `)})}),a>0&&(0,H.jsxs)(`p`,{className:`text-sm shrink-0`,children:[`+ `,a]}),(0,H.jsx)(`div`,{ref:l,className:`absolute invisible whitespace-nowrap`,"aria-hidden":`true`})]})},g=e=>{t(e),i(``)};return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:h()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:r,onValueChange:i,placeholder:`Search resources...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No resources found`}),p&&(0,H.jsx)(M,{children:(0,H.jsxs)(A,{selected:e.includes(a),onSelect:()=>g(a),closeOnSelect:!1,value:a,children:[`Add "`,a,`"`]},`__custom__`)}),f.map(t=>(0,H.jsx)(M,{heading:t.label,children:t.options.map(t=>(0,H.jsx)(A,{selected:e.includes(t.value),onSelect:()=>g(t.value),closeOnSelect:!1,value:t.value,children:t.label},t.value))},t.label))]})]})]})}function Jt(e){let t=new Map;for(let n of e){let e=n.split(`.`);for(let n=1;n<e.length;n++){let r=e.slice(0,n).join(`.`);t.set(r,(t.get(r)??0)+1)}}return Array.from(t.entries()).filter(([,t])=>t>1&&t<e.length).map(([e])=>`${e}.*`)}function Yt({selectedEvents:e,onToggleEvent:t,emptyMessage:n=`All events`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),[s]=(0,U.useState)(()=>({since:new Date(Date.now()-10080*60*1e3).toISOString(),until:new Date().toISOString()})),{data:c=[]}=r(Le(`event`,{filter:{occurred:s,order:`DESC`},time_unit:`day`,time_interval:1})),l=(0,U.useMemo)(()=>{let e=c.map(e=>e.label),t=Jt(e);return[...e,...t].sort((e,t)=>e.localeCompare(t))},[c]),u=(0,U.useMemo)(()=>{if(!o)return l;let e=o.toLowerCase();return l.filter(t=>t.toLowerCase().includes(e))},[l,o]),d=(0,U.useMemo)(()=>{if(!o.trim())return!1;let e=o.toLowerCase();return!l.some(t=>t.toLowerCase()===e)},[o,l]),f=()=>{if(e.length===0)return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n});let t=e.slice(0,2),r=e.length-t.length;return(0,H.jsxs)(`div`,{className:`flex min-w-0 items-center justify-start gap-1`,children:[(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:t.join(`, `)}),r>0&&(0,H.jsxs)(`span`,{className:`shrink-0 text-muted-foreground`,children:[`+`,r]})]})},p=e=>{t(e),a(``)};return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:f()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search events...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No events found`}),(0,H.jsxs)(M,{children:[d&&(0,H.jsxs)(A,{selected:e.includes(o),onSelect:()=>p(o),closeOnSelect:!1,value:o,children:[`Add "`,o,`"`]},`__custom__`),u.map(t=>(0,H.jsx)(A,{selected:e.includes(t),onSelect:()=>p(t),closeOnSelect:!1,value:t,children:t},t))]})]})]})]})}var Xt=()=>{let e=E(),t=v({name:`trigger.posture`});return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(`div`,{className:`flex items-end gap-4`,children:(0,H.jsx)(zt,{})}),(0,H.jsx)(z,{control:e.control,name:`trigger.expect`,render:({field:e})=>{let t=e.value??[];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Any event matching`}),(0,H.jsx)(P,{children:(0,H.jsx)(Yt,{selectedEvents:t,onToggleEvent:n=>{let r=t.includes(n)?t.filter(e=>e!==n):[...t,n];e.onChange(r)}})}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(z,{control:e.control,name:`trigger.match`,render:({field:e})=>{let t=e.value?.[`prefect.resource.id`]??[],n=Array.isArray(t)?t:[t];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`From the following resources`}),(0,H.jsx)(P,{children:(0,H.jsx)(qt,{selectedResourceIds:n,onToggleResource:t=>{let r=n.includes(t)?n.filter(e=>e!==t):[...n,t];r.length>0?e.onChange({"prefect.resource.id":r}):e.onChange({})}})}),(0,H.jsx)(F,{})]})}}),(0,H.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,H.jsx)(z,{control:e.control,name:`trigger.threshold`,render:({field:e})=>(0,H.jsxs)(I,{className:`w-20`,children:[(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`number`,min:1,...e,onChange:t=>e.onChange(Number(t.target.value))})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(`span`,{className:`pb-2 text-sm text-muted-foreground`,children:`times within`}),(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:t===`Proactive`?10:0})}),(0,H.jsx)(F,{})]})})]}),(0,H.jsxs)(Ke,{children:[(0,H.jsxs)(Ge,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,H.jsx)(a,{className:`h-4 w-4 transition-transform data-[state=open]:rotate-90`}),`Evaluation Options`]}),(0,H.jsxs)(qe,{className:`mt-4 space-y-4 pl-6`,children:[(0,H.jsx)(z,{control:e.control,name:`trigger.after`,render:({field:e})=>{let t=e.value??[];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Evaluate trigger only after observing an event matching`}),(0,H.jsx)(P,{children:(0,H.jsx)(Yt,{selectedEvents:t,onToggleEvent:n=>{let r=t.includes(n)?t.filter(e=>e!==n):[...t,n];e.onChange(r)}})}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(z,{control:e.control,name:`trigger.match_related`,render:({field:e})=>{let t=e.value?.[`prefect.resource.id`]??[],n=Array.isArray(t)?t:[t];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Filter for events related to`}),(0,H.jsx)(P,{children:(0,H.jsx)(qt,{selectedResourceIds:n,onToggleResource:t=>{let r=n.includes(t)?n.filter(e=>e!==t):[...n,t];r.length>0?e.onChange({"prefect.resource.id":r}):e.onChange({})}})}),(0,H.jsx)(F,{})]})}})]})]})]})},Zt=2,Qt=40,$t=({selectedDeploymentIds:e,onSelectDeploymentIds:t})=>{let[n,i]=(0,U.useState)(``),a=(0,U.useDeferredValue)(n),[o,s]=(0,U.useState)(0),c=(0,U.useRef)(null),l=(0,U.useRef)(null),u=(0,U.useMemo)(()=>new Set(e),[e]);(0,U.useEffect)(()=>{let e=c.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e)s(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]);let{data:d=[]}=r(ve({deployments:a?{operator:`and_`,name:{like_:a}}:void 0,limit:100,offset:0,sort:`NAME_ASC`})),{data:f=[]}=r(ve({deployments:u.size>0?{operator:`and_`,id:{any_:e}}:void 0,limit:u.size||1,offset:0,sort:`NAME_ASC`},{enabled:u.size>0})),p=e=>{let n=new Set(u);u.has(e)?n.delete(e):n.add(e),t(Array.from(n))},m=()=>{t([])},h=(0,U.useCallback)(e=>{let t=l.current;if(!t||o===0||e.length===0)return Math.min(e.length,Zt);let n=e.length>1?o-Qt:o,r=0;for(let i=0;i<e.length&&(t.textContent=e.slice(0,i+1).join(`, `),t.offsetWidth<=n);i++)r=i+1;return r===e.length?e.length:Math.max(1,r)},[o]),g=()=>{if(u.size===0)return`All deployments`;let e=f.filter(e=>u.has(e.id)).map(e=>e.name),t=h(e),n=e.slice(0,t),r=e.length-t;return(0,H.jsxs)(`div`,{ref:c,className:`flex flex-1 min-w-0 items-center gap-2`,children:[(0,H.jsx)(`div`,{className:`flex flex-1 min-w-0 items-center gap-2 overflow-hidden`,children:(0,H.jsx)(`span`,{className:`truncate`,children:n.join(`, `)})}),r>0&&(0,H.jsxs)(`p`,{className:`text-sm shrink-0`,children:[`+ `,r]}),(0,H.jsx)(`div`,{ref:l,className:`absolute invisible whitespace-nowrap`,"aria-hidden":`true`})]})},_=(0,U.useMemo)(()=>d.filter(e=>!a||e.name.toLowerCase().includes(a.toLowerCase())),[d,a]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{"aria-label":`Select deployments`,selected:u.size===0,children:g()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search deployments...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No deployments found`}),(0,H.jsxs)(M,{children:[(0,H.jsxs)(A,{"aria-label":`All deployments`,onSelect:m,closeOnSelect:!1,value:`__all__`,children:[(0,H.jsx)(he,{checked:u.size===0}),`All deployments`]}),_.map(e=>(0,H.jsxs)(A,{"aria-label":e.name,onSelect:()=>p(e.id),closeOnSelect:!1,value:e.id,children:[(0,H.jsx)(he,{checked:u.has(e.id)}),e.name]},e.id))]})]})]})]})},en=[{value:`Reactive`,label:`Enters`},{value:`Proactive`,label:`Stays in`}],tn=30,X=()=>{let e=E();return(0,H.jsx)(z,{control:e.control,name:`trigger.posture`,render:({field:t})=>(0,H.jsx)(I,{children:(0,H.jsx)(P,{children:(0,H.jsxs)(h,{value:t.value,onValueChange:n=>{let r=t.value;if(t.onChange(n),r===`Reactive`&&n===`Proactive`){let t=e.getValues(`trigger.expect`)??[];e.setValue(`trigger.after`,t),e.setValue(`trigger.expect`,[]),e.getValues(`trigger.within`)===0&&e.setValue(`trigger.within`,tn)}else if(r===`Proactive`&&n===`Reactive`){let t=e.getValues(`trigger.after`)??[];e.setValue(`trigger.expect`,t),e.setValue(`trigger.after`,[])}},children:[(0,H.jsx)(f,{"aria-label":`select posture`,className:`w-[160px]`,children:(0,H.jsx)(m,{placeholder:`Select posture`})}),(0,H.jsx)(d,{children:en.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})})})})},nn=30*86400,rn=[{value:`prefect.deployment.ready`,label:`Ready`},{value:`prefect.deployment.not-ready`,label:`Not Ready`},{value:`prefect.deployment.disabled`,label:`Disabled`}],an=`prefect.deployment.`,on=`prefect.deployment.*`,sn=e=>e?(Array.isArray(e)?e:[e]).filter(e=>e!==on).map(e=>e.replace(an,``)):[],cn=e=>e.length===0?on:e.map(e=>`${an}${e}`),ln=()=>{let e=E(),t=v({name:`trigger.posture`}),n=v({name:`trigger.match`}),r=(0,U.useMemo)(()=>{let e=n?.[`prefect.resource.id`];return sn(e)},[n]),i=(0,U.useCallback)(t=>{let n=e.getValues(`trigger.match`)??{};e.setValue(`trigger.match`,{...n,"prefect.resource.id":cn(t)})},[e]);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Deployments`}),(0,H.jsx)(P,{children:(0,H.jsx)($t,{selectedDeploymentIds:r,onSelectDeploymentIds:i})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Deployment`}),(0,H.jsxs)(`div`,{className:`grid gap-2`,style:{gridTemplateColumns:`10rem 1fr`},children:[(0,H.jsx)(X,{}),(0,H.jsx)(z,{control:e.control,name:`trigger.expect`,render:({field:e})=>{let t=e.value?.[0];return(0,H.jsxs)(h,{value:t??``,onValueChange:t=>e.onChange([t]),children:[(0,H.jsx)(f,{className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select status`})}),(0,H.jsx)(d,{children:rn.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})}})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Within`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:10,max:nn})}),(0,H.jsx)(F,{})]})})]})},un=2;function dn({selectedFlowIds:e,onToggleFlow:t,emptyMessage:n=`Any flow`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),{data:s=[]}=r(ye({flows:o?{operator:`and_`,name:{like_:o}}:void 0,limit:100,offset:0,sort:`NAME_ASC`})),{data:c=[]}=r(ye({flows:e.length>0?{operator:`and_`,id:{any_:e}}:void 0,limit:e.length||1,offset:0,sort:`NAME_ASC`},{enabled:e.length>0})),l=(0,U.useMemo)(()=>s.filter(e=>!o||e.name.toLowerCase().includes(o.toLowerCase())),[s,o]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:(()=>{if(e.length===0)return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n});let t=c.filter(t=>e.includes(t.id)).map(e=>e.name).slice(0,un),r=e.length-t.length;return(0,H.jsxs)(`div`,{className:`flex min-w-0 items-center justify-start gap-1`,children:[(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:t.join(`, `)}),r>0&&(0,H.jsxs)(`span`,{className:`shrink-0 text-muted-foreground`,children:[`+`,r]})]})})()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search flows...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No flows found`}),(0,H.jsx)(M,{children:l.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),a(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))})]})]})]})}var Z=`All run states`,Q=`All except scheduled`;function fn(e){return e.length===ze.length-1?!e.includes(`Scheduled`):!1}function pn({selectedStates:e,onStateChange:t,emptyMessage:n=`Any state`}){let[r,i]=(0,U.useState)(``),a=(0,U.useDeferredValue)(r),o=(0,U.useMemo)(()=>e.length===0?Z:fn(e)?Q:e,[e]),s=(0,U.useMemo)(()=>{let e=a.toLowerCase();return ze.filter(t=>t.toLowerCase().includes(e))},[a]),c=(0,U.useMemo)(()=>{let e=a.toLowerCase();return Z.toLowerCase().includes(e)||Q.toLowerCase().includes(e)},[a]),l=e=>{e===Z?t([]):e===Q&&t([...Be]),i(``)},u=n=>{e.includes(n)?t(e.filter(e=>e!==n)):t([...e,n]),i(``)};return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:o===Z?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n}):o===Q?(0,H.jsx)(`span`,{children:`All except scheduled`}):(0,H.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,H.jsx)(xe,{type:Re[e],name:e,className:`cursor-pointer`},e))})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:r,onValueChange:i,placeholder:`Search states...`}),(0,H.jsx)(j,{children:`No state found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[c&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(A,{selected:o===Z,onSelect:()=>l(Z),value:Z,closeOnSelect:!1,children:`All run states`},Z),(0,H.jsx)(A,{selected:o===Q,onSelect:()=>l(Q),value:Q,closeOnSelect:!1,children:`All except scheduled`},Q)]}),s.map(t=>(0,H.jsx)(A,{selected:e.includes(t),onSelect:()=>u(t),value:t,closeOnSelect:!1,children:(0,H.jsx)(xe,{type:Re[t],name:t})},t))]})})]})]})}function mn(e){return e.length===0?[`prefect.flow-run.*`]:e.map(e=>`prefect.flow-run.${e}`)}function hn(e){return!e||e.length===0||e.includes(`prefect.flow-run.*`)?[]:e.filter(e=>e.startsWith(`prefect.flow-run.`)).map(e=>e.replace(`prefect.flow-run.`,``))}function gn(e){if(!e)return[];let t=e[`prefect.resource.id`];return t?(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.flow.`)).map(e=>e.replace(`prefect.flow.`,``)):[]}function _n(e){if(!e)return[];let t=e[`prefect.resource.id`];return t?(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.tag.`)).map(e=>e.replace(`prefect.tag.`,``)):[]}function vn(e,t){let n=e.map(e=>`prefect.flow.${e}`),r=t.map(e=>`prefect.tag.${e}`);return n.length===0&&r.length===0?{}:{"prefect.resource.role":n.length>0?`flow`:`tag`,"prefect.resource.id":[...n,...r]}}var yn=()=>{let e=E(),t=v({name:`trigger.posture`}),n=t===`Proactive`?`trigger.after`:`trigger.expect`,r=v({name:`trigger.match_related`}),i=gn(r),a=_n(r),o=t=>{let n=i,r=n.includes(t)?n.filter(e=>e!==t):[...n,t],o=r.length>0?[]:a;e.setValue(`trigger.match_related`,vn(r,o))},s=t=>{e.setValue(`trigger.match_related`,vn(i,t))},c=i.length===0;return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Flows`}),(0,H.jsx)(P,{children:(0,H.jsx)(dn,{selectedFlowIds:i,onToggleFlow:o,emptyMessage:`All flows`})})]}),c&&(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Flow Run Tags`}),(0,H.jsx)(P,{children:(0,H.jsx)(Ye,{value:a,onChange:s,placeholder:`All tags`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Flow Run`}),(0,H.jsxs)(`div`,{className:`grid grid-cols-[10rem_1fr] gap-2`,children:[(0,H.jsx)(X,{}),(0,H.jsx)(z,{control:e.control,name:n,render:({field:e})=>(0,H.jsx)(P,{children:(0,H.jsx)(pn,{selectedStates:hn(e.value??[]),onStateChange:t=>{e.onChange(mn(t))},emptyMessage:`Any state`})})})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`For`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:0})}),(0,H.jsx)(F,{})]})})]})},bn=({defaultValue:e=`Form`,value:t,onValueChange:n,formContent:r,jsonContent:i})=>(0,H.jsxs)(Pe,{...t===void 0?{defaultValue:e}:{value:t,onValueChange:n},children:[(0,H.jsx)(`div`,{className:`flex justify-center`,children:(0,H.jsxs)(ke,{children:[(0,H.jsx)(Ne,{value:`Form`,children:`Form`}),(0,H.jsx)(Ne,{value:`JSON`,children:`JSON`})]})}),(0,H.jsx)(Fe,{value:`Form`,children:r}),(0,H.jsx)(Fe,{value:`JSON`,children:i})]}),xn=({value:e,onChange:t,error:n})=>{let[r,i]=(0,U.useState)(null),a=()=>{try{let n=JSON.parse(e);t(JSON.stringify(n,null,2))}catch{}},o=e=>{try{let t=JSON.parse(e);return V.parse(t),i(null),!0}catch(e){return e instanceof SyntaxError?i(`Invalid JSON syntax`):e instanceof ue&&i(e.errors[0]?.message??`Invalid trigger configuration`),!1}};return(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(ge,{children:`Trigger Configuration`}),(0,H.jsx)(c,{variant:`ghost`,size:`sm`,onClick:a,children:`Format`})]}),(0,H.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Edit the trigger configuration as JSON.`,` `,(0,H.jsx)(`a`,{href:`https://docs.prefect.io/v3/automate/events/automations-triggers`,target:`_blank`,rel:`noopener noreferrer`,className:`underline hover:text-foreground`,children:`View documentation`})]}),(0,H.jsx)(Ie,{value:e,onChange:t,onBlur:()=>o(e)}),(r||n)&&(0,H.jsx)(`p`,{className:`text-sm text-destructive`,children:r||n})]})},Sn={"deployment-status":`Deployment status`,"flow-run-state":`Flow run state`,"work-pool-status":`Work pool status`,"work-queue-status":`Work queue status`,custom:`Custom`},Cn=({onValueChange:e,value:t})=>(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsx)(ge,{htmlFor:`automations-trigger-template-select`,children:`Trigger Template`}),(0,H.jsxs)(h,{value:t,onValueChange:e,children:[(0,H.jsx)(f,{id:`automations-trigger-template-select`,className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select template`})}),(0,H.jsx)(d,{children:(0,H.jsx)(p,{children:Object.keys(Sn).map(e=>(0,H.jsx)(u,{value:e,children:Sn[e]},e))})})]})]}),wn=({onTemplateChange:e})=>(0,H.jsx)(z,{control:E().control,name:`triggerTemplate`,render:({field:t})=>(0,H.jsx)(I,{children:(0,H.jsx)(P,{children:(0,H.jsx)(Cn,{value:t.value,onValueChange:n=>{t.onChange(n),e?.(n)}})})})}),Tn={type:`event`,posture:`Reactive`,threshold:1,within:0},En=e=>{let t=e.match?.[`prefect.resource.id`];if(typeof t==`string`){if(t.startsWith(`prefect.flow-run.`)||t===`prefect.flow-run.*`)return`flow-run-state`;if(t.startsWith(`prefect.deployment.`)||t===`prefect.deployment.*`)return`deployment-status`;if(t.startsWith(`prefect.work-pool.`)||t===`prefect.work-pool.*`)return`work-pool-status`;if(t.startsWith(`prefect.work-queue.`)||t===`prefect.work-queue.*`)return`work-queue-status`}return`custom`},Dn=e=>{switch(e){case`flow-run-state`:return{type:`event`,match:{"prefect.resource.id":`prefect.flow-run.*`},match_related:{},after:[],expect:[`prefect.flow-run.*`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`deployment-status`:return{type:`event`,match:{"prefect.resource.id":`prefect.deployment.*`},match_related:{},after:[],expect:[`prefect.deployment.not-ready`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`work-pool-status`:return{type:`event`,match:{"prefect.resource.id":`prefect.work-pool.*`},match_related:{},after:[],expect:[`prefect.work-pool.not-ready`,`prefect.work-pool.not_ready`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`work-queue-status`:return{type:`event`,match:{"prefect.resource.id":`prefect.work-queue.*`},match_related:{},after:[],expect:[`prefect.work-queue.not-ready`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`custom`:return{type:`event`,match:{"prefect.resource.id":[`prefect.flow-run.*`]},match_related:{},after:[],expect:[`prefect.flow-run.Failed`],for_each:[],posture:`Reactive`,threshold:5,within:60};default:return Tn}};function On({selectedWorkPoolIds:e,onToggleWorkPool:t,emptyMessage:n=`All work pools`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),{data:s=[]}=r(be()),c=(0,U.useMemo)(()=>s.filter(e=>e.status!==null).filter(e=>!o||e.name.toLowerCase().includes(o.toLowerCase())),[s,o]),l=(0,U.useMemo)(()=>s.filter(t=>e.includes(t.id)),[s,e]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:e.length===0?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n}):(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:l.map(e=>e.name).join(`, `)})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search work pools...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No work pools found`}),(0,H.jsx)(M,{children:c.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),a(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))})]})]})]})}var $=[{value:`ready`,label:`Ready`,events:[`prefect.work-pool.ready`]},{value:`not_ready`,label:`Not Ready`,events:[`prefect.work-pool.not-ready`,`prefect.work-pool.not_ready`]},{value:`paused`,label:`Paused`,events:[`prefect.work-pool.paused`]}];function kn(e){if(!e||e.length===0)return`not_ready`;for(let t of $)if(t.events.some(t=>e.includes(t)))return t.value;return`not_ready`}function An(e){let t=$.find(t=>t.value===e);return t?[...t.events]:[]}function jn(e){return $.filter(t=>t.value!==e).flatMap(e=>[...e.events])}function Mn(e){if(!e)return[];let t=e[`prefect.resource.id`];return!t||t===`prefect.work-pool.*`?[]:(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.work-pool.`)&&e!==`prefect.work-pool.*`).map(e=>e.replace(`prefect.work-pool.`,``))}function Nn(e){return e.length===0?{"prefect.resource.id":`prefect.work-pool.*`}:{"prefect.resource.id":e.map(e=>`prefect.work-pool.${e}`)}}var Pn=()=>{let e=E(),t=v({name:`trigger.posture`}),n=v({name:`trigger.expect`}),r=v({name:`trigger.after`}),i=kn(t===`Proactive`?r:n);return(0,H.jsxs)(h,{value:i,onValueChange:n=>{let r=An(n),i=jn(n);t===`Proactive`?(e.setValue(`trigger.after`,r),e.setValue(`trigger.expect`,i)):(e.setValue(`trigger.expect`,r),e.setValue(`trigger.after`,[]))},children:[(0,H.jsx)(f,{"aria-label":`select status`,className:`min-w-0 flex-1`,children:(0,H.jsx)(m,{placeholder:`Select status`})}),(0,H.jsx)(d,{children:$.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})},Fn=()=>{let e=E(),t=v({name:`trigger.posture`}),n=Mn(v({name:`trigger.match`}));return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Pools`}),(0,H.jsx)(P,{children:(0,H.jsx)(On,{selectedWorkPoolIds:n,onToggleWorkPool:t=>{let r=n,i=r.includes(t)?r.filter(e=>e!==t):[...r,t];e.setValue(`trigger.match`,Nn(i))},emptyMessage:`All work pools`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Pool`}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsx)(X,{}),(0,H.jsx)(Pn,{})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`For`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??30,onChange:e.onChange,min:0})}),(0,H.jsx)(F,{})]})})]})};function In({selectedWorkPoolIds:e,onToggleWorkPool:t,emptyMessage:n=`All work pools`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),{data:s=[]}=r(be({limit:100,offset:0})),c=(0,U.useMemo)(()=>s.filter(e=>e.status?o?e.name.toLowerCase().includes(o.toLowerCase()):!0:!1),[s,o]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:e.length===0?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n}):(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:s.filter(t=>e.includes(t.id)).map(e=>e.name).join(`, `)})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search work pools...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No work pools found`}),(0,H.jsx)(M,{children:c.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),a(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))})]})]})]})}function Ln({selectedWorkQueueIds:e,onToggleWorkQueue:t,workPoolIds:n=[],emptyMessage:i=`All work queues`}){let[a,o]=(0,U.useState)(``),s=(0,U.useDeferredValue)(a),{data:c=[]}=r(Te({limit:100,offset:0})),l=(0,U.useMemo)(()=>c.filter(e=>n.length>0&&(!e.work_pool_id||!n.includes(e.work_pool_id))?!1:s?e.name.toLowerCase().includes(s.toLowerCase()):!0),[c,n,s]),u=(0,U.useMemo)(()=>{let e={};for(let t of l){let n=t.work_pool_name??`Unknown`;e[n]||(e[n]=[]),e[n].push(t)}return Object.keys(e).sort((e,t)=>e.localeCompare(t)).map(t=>({poolName:t,queues:e[t].sort((e,t)=>e.name.localeCompare(t.name))}))},[l]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:e.length===0?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:i}):(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:c.filter(t=>e.includes(t.id)).map(e=>e.name).join(`, `)})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:a,onValueChange:o,placeholder:`Search work queues...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No work queues found`}),u.map(n=>(0,H.jsx)(M,{heading:n.poolName,children:n.queues.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),o(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))},n.poolName))]})]})]})}var Rn=[{value:`prefect.work-queue.ready`,label:`Ready`},{value:`prefect.work-queue.not-ready`,label:`Not Ready`},{value:`prefect.work-queue.paused`,label:`Paused`}];function zn(e){if(!e)return[];let t=e[`prefect.resource.id`];return t?(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.work-pool.`)).map(e=>e.replace(`prefect.work-pool.`,``)):[]}function Bn(e){if(!e)return[];let t=e[`prefect.resource.id`];if(!t)return[];let n=Array.isArray(t)?t:[t];return n.includes(`prefect.work-queue.*`)?[]:n.filter(e=>e.startsWith(`prefect.work-queue.`)).map(e=>e.replace(`prefect.work-queue.`,``))}function Vn(e){return e.length===0?{}:{"prefect.resource.role":`work-pool`,"prefect.resource.id":e.map(e=>`prefect.work-pool.${e}`)}}function Hn(e){return e.length===0?{"prefect.resource.id":`prefect.work-queue.*`}:{"prefect.resource.id":e.map(e=>`prefect.work-queue.${e}`)}}var Un=()=>{let e=E(),t=v({name:`trigger.posture`}),n=v({name:`trigger.match_related`}),r=v({name:`trigger.match`}),i=zn(n),a=Bn(r);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Pools`}),(0,H.jsx)(P,{children:(0,H.jsx)(In,{selectedWorkPoolIds:i,onToggleWorkPool:t=>{let n=i,r=n.includes(t)?n.filter(e=>e!==t):[...n,t];e.setValue(`trigger.match_related`,Vn(r))},emptyMessage:`All work pools`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Queues`}),(0,H.jsx)(P,{children:(0,H.jsx)(Ln,{selectedWorkQueueIds:a,onToggleWorkQueue:t=>{let n=a,r=n.includes(t)?n.filter(e=>e!==t):[...n,t];e.setValue(`trigger.match`,Hn(r))},workPoolIds:i,emptyMessage:`All work queues`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Queue`}),(0,H.jsxs)(`div`,{className:`grid grid-cols-[10rem_1fr] gap-2`,children:[(0,H.jsx)(X,{}),(0,H.jsx)(z,{control:e.control,name:`trigger.expect`,render:({field:e})=>{let t=e.value?.[0];return(0,H.jsx)(P,{children:(0,H.jsxs)(h,{value:t??``,onValueChange:t=>e.onChange([t]),children:[(0,H.jsx)(f,{className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select status`})}),(0,H.jsx)(d,{children:Rn.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})})}})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`For`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:0})}),(0,H.jsx)(F,{})]})})]})},Wn=()=>{let e=E(),t=e.watch(`triggerTemplate`),n=e.watch(`trigger`),[r,i]=(0,U.useState)(`Form`),[a,o]=(0,U.useState)(``),[s,c]=(0,U.useState)(void 0),l=(0,U.useCallback)(()=>JSON.stringify(n,null,2),[n]);(0,U.useEffect)(()=>{r===`Form`&&o(l())},[r,l]);let u=(0,U.useCallback)(e=>{try{let t=JSON.parse(e);return{valid:!0,trigger:V.parse(t)}}catch(e){return e instanceof SyntaxError?{valid:!1,error:`Invalid JSON syntax`}:e instanceof ue?{valid:!1,error:e.errors[0]?.message??`Invalid trigger configuration`}:{valid:!1,error:`Unknown error`}}},[]),d=(0,U.useCallback)(t=>{if(r!==t){if(t===`Form`){let t=u(a);if(!t.valid){c(t.error);return}t.trigger&&e.setValue(`trigger`,t.trigger),c(void 0)}else o(l()),c(void 0);i(t)}},[r,a,u,e,l]),f=(0,U.useCallback)(t=>{o(t);let n=u(t);n.valid&&n.trigger&&(e.setValue(`trigger`,n.trigger),c(void 0))},[u,e]);return(0,H.jsxs)(`div`,{className:`space-y-6`,children:[(0,H.jsx)(wn,{onTemplateChange:t=>{let n=Dn(t);e.setValue(`trigger`,n),o(JSON.stringify(n,null,2)),c(void 0)}}),t&&(0,H.jsx)(bn,{value:r,onValueChange:d,formContent:(0,H.jsx)(Gn,{template:t}),jsonContent:(0,H.jsx)(xn,{value:a,onChange:f,error:s})})]})},Gn=({template:e})=>{switch(e){case`flow-run-state`:return(0,H.jsx)(yn,{});case`deployment-status`:return(0,H.jsx)(ln,{});case`work-pool-status`:return(0,H.jsx)(Fn,{});case`work-queue-status`:return(0,H.jsx)(Un,{});case`custom`:return(0,H.jsx)(Xt,{});default:return null}},Kn=[`Trigger`,`Actions`,`Details`],qn={actions:[{type:void 0}],trigger:{type:`event`,posture:`Reactive`,threshold:1,within:0}},Jn=({defaultValues:e={},isEditMode:t=!1,onSubmit:n,submitLabel:r=`Save`,isSubmitting:a=!1})=>{let o=t?new Set([0,1,2]):new Set([0]),s=Ue(Kn.length,0,o),l=se({resolver:le(ft),defaultValues:{...qn,...e}}),u=Kn[s.currentStep],d={Trigger:{render:()=>(0,H.jsx)(Wn,{}),trigger:()=>l.trigger(`trigger`)},Actions:{render:()=>(0,H.jsx)(Ft,{}),trigger:()=>l.trigger(`actions`)},Details:{render:()=>(0,H.jsx)(It,{}),trigger:()=>l.trigger([`description`,`name`])}},f=async e=>{await d[e].trigger()&&s.incrementStep()},p=async()=>{await d[u].trigger()&&await l.handleSubmit(n)()},m=t&&!s.isFinalStep;return(0,H.jsx)(we,{...l,children:(0,H.jsx)(`form`,{onSubmit:e=>void l.handleSubmit(n)(e),children:(0,H.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,H.jsx)(He,{steps:Kn,currentStepNum:s.currentStep,onClick:e=>s.changeStep(e.stepNum),completedSteps:s.completedStepsSet,visitedSteps:s.visitedStepsSet}),(0,H.jsxs)(oe,{className:`p-4 pt-8`,children:[(0,H.jsxs)(ae,{children:[d[u].render(),(0,H.jsx)(F,{children:l.formState.errors.root?.message})]}),(0,H.jsxs)(ie,{className:`mt-6 flex gap-2 justify-end`,children:[(0,H.jsx)(c,{type:`button`,variant:`outline`,children:(0,H.jsx)(i,{to:`/automations`,children:`Cancel`})}),(0,H.jsxs)(re,{children:[(0,H.jsx)(te,{asChild:!0,children:(0,H.jsx)(`span`,{tabIndex:s.isStartingStep?0:-1,className:`inline-flex`,children:(0,H.jsx)(c,{disabled:s.isStartingStep,type:`button`,variant:`outline`,onClick:s.decrementStep,children:`Previous`})})}),s.isStartingStep&&(0,H.jsx)(ne,{children:`Already on the first step`})]}),s.isFinalStep?(0,H.jsx)(c,{type:`submit`,loading:a,children:r},`save`):(0,H.jsx)(c,{type:`button`,variant:m?`outline`:`default`,onClick:()=>void f(u),children:`Next`},`next`),m&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Ae,{orientation:`vertical`,className:`h-8`}),(0,H.jsx)(c,{type:`button`,loading:a,onClick:()=>void p(),children:`Save & Exit`},`save-and-exit`)]})]})]})]})})})};export{En as n,B as r,Jn as t};
2
- //# sourceMappingURL=automation-wizard-DmM5CcVm.js.map
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{o as t,s as n}from"./vendor-codemirror-BBJStocF.js";import{M as r,_ as i}from"./vendor-tanstack-BmR4FTpr.js";import{M as a,g as o,h as s,t as c}from"./button-BDE-TzkO.js";import{a as l,i as u,n as d,o as f,r as p,s as m,t as h}from"./select-BMVFWXIz.js";import{t as g}from"./use-debounce-B4gHt8mW.js";import{t as _}from"./input-Dw8kXwXm.js";import{t as ee}from"./skeleton-D_DKwGSQ.js";import{i as te,n as ne,t as re}from"./tooltip-C4UJTpJe.js";import{i as ie,n as ae,t as oe}from"./card-NEwP8yrf.js";import{S as v,b as se,c as y,d as ce,f as b,g as le,h as ue,l as x,m as de,n as S,o as C,p as w,r as fe,s as pe,u as T,x as E,y as me}from"./vendor-forms-DHBeRgXw.js";import{t as he}from"./checkbox-DXKtiRv2.js";import{t as ge}from"./label-D34JViMr.js";import{i as _e,r as ve}from"./deployments-Cqq-g-Gw.js";import{i as ye}from"./flows-DKEFdn0d.js";import{n as be}from"./work-pools-D5tkfPRp.js";import{t as xe}from"./state-badge-DOWv3hq2.js";import{c as Se,n as Ce}from"./automations-q8WVmwKG.js";import{$r as we,C as Te,Gn as D,Hn as O,Jn as k,Kn as A,Qr as Ee,Un as j,Wn as M,Xr as De,Yn as N,Zr as Oe,cr as ke,di as Ae,ei as P,et as je,ii as F,it as Me,lr as Ne,ni as I,or as Pe,qn as L,ri as R,sr as Fe,ti as z,wr as Ie,wt as Le}from"./index-truoiNS9.js";import{i as Re,n as ze,r as Be,t as Ve}from"./constants-DNk4ayrJ.js";import{n as He,t as Ue}from"./use-stepper-CaYAEDak.js";import{t as We}from"./state-select-CaWzOSCG.js";import{i as Ge,n as Ke,r as qe,t as Je}from"./use-resource-options-DBswbgR4.js";import{t as Ye}from"./tags-input-BdkwPEjW.js";var B=`UNASSIGNED`,Xe=T({type:y(`do-nothing`)}),Ze=T({type:C([`cancel-flow-run`,`suspend-flow-run`,`resume-flow-run`])}),Qe=T({type:y(`change-flow-run-state`),state:C([`COMPLETED`,`RUNNING`,`SCHEDULED`,`PENDING`,`FAILED`,`CANCELLED`,`CANCELLING`,`CRASHED`,`PAUSED`]),name:b().optional(),message:b().optional(),force:fe().optional()}).transform(e=>({...e,force:e.force??!1})),$e=T({type:y(`run-deployment`),deployment_id:b().or(y(B)),job_variables:ce(de()).optional(),parameters:ce(de()).optional()}).transform(e=>({...e,...e.deployment_id===`UNASSIGNED`?{source:`inferred`,deployment_id:null}:{source:`selected`,deployment_id:e.deployment_id}})),et=T({type:C([`pause-deployment`,`resume-deployment`]),deployment_id:b().or(y(B))}).transform(e=>({type:e.type,...e.deployment_id===`UNASSIGNED`?{source:`inferred`,deployment_id:null}:{source:`selected`,deployment_id:e.deployment_id}})),tt=T({type:C([`pause-work-queue`,`resume-work-queue`]),work_queue_id:b().or(y(B))}).transform(e=>({type:e.type,...e.work_queue_id===`UNASSIGNED`?{source:`inferred`,work_queue_id:null}:{source:`selected`,work_queue_id:e.work_queue_id}})),nt=T({type:C([`pause-work-pool`,`resume-work-pool`]),work_pool_id:b().or(y(B))}).transform(e=>({type:e.type,...e.work_pool_id===`UNASSIGNED`?{source:`inferred`,work_pool_id:null}:{source:`selected`,work_pool_id:e.work_pool_id}})),rt=T({type:C([`pause-automation`,`resume-automation`]),automation_id:b().or(y(B))}).transform(e=>({type:e.type,...e.automation_id===`UNASSIGNED`?{source:`inferred`,automation_id:null}:{source:`selected`,automation_id:e.automation_id}})),it=T({type:y(`send-notification`),block_document_id:b(),body:b(),subject:b()}),at=T({type:y(`call-webhook`),block_document_id:b(),payload:b()}),ot=C([`deployment-status`,`flow-run-state`,`work-pool-status`,`work-queue-status`,`custom`]),st=C([`Reactive`,`Proactive`]),ct=ce(w([b(),S(b())])),lt=T({type:y(`event`),posture:st,threshold:x().min(1).default(1),within:x().min(0).default(0),match:ct.optional(),match_related:ct.optional(),for_each:S(b()).optional(),after:S(b()).optional(),expect:S(b()).optional()}),V=pe(()=>w([lt,ut,dt])),ut=pe(()=>T({type:y(`compound`),triggers:S(V),require:w([x().min(1),y(`any`),y(`all`)]).default(`all`),within:x().min(0).default(0)})),dt=pe(()=>T({type:y(`sequence`),triggers:S(V),within:x().min(0).default(0)})),ft=T({name:b().min(1,`Name is required`),description:b().optional(),triggerTemplate:ot.optional(),trigger:V,actions:S(w([Xe,Qe,et,$e,nt,tt,rt,it,at,Ze]))}),H=t(),pt={"cancel-flow-run":`Cancel a flow run`,"suspend-flow-run":`Suspend a flow run`,"resume-flow-run":`Resume a flow run`,"change-flow-run-state":`Change flow run's state`,"run-deployment":`Run a deployment`,"pause-deployment":`Pause a deployment`,"resume-deployment":`Resume a deployment`,"pause-work-queue":`Pause a work queue`,"resume-work-queue":`Resume a work queue`,"pause-work-pool":`Pause a work pool`,"resume-work-pool":`Resume a work pool`,"pause-automation":`Pause an automation`,"resume-automation":`Resume an automation`,"send-notification":`Send a notification`,"call-webhook":`Call a webhook`},mt=({index:e})=>{let t=E();return(0,H.jsx)(z,{control:t.control,name:`actions.${e}.type`,render:({field:n})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Action Type`}),(0,H.jsx)(P,{children:(0,H.jsxs)(h,{...n,onValueChange:r=>{n.onChange(r);let i=ht({index:e,type:r});i&&t.setValue(i,B)},children:[(0,H.jsx)(f,{"aria-label":`select action`,className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select action`})}),(0,H.jsx)(d,{children:(0,H.jsxs)(p,{children:[(0,H.jsx)(l,{children:`Actions`}),Object.keys(pt).map(e=>(0,H.jsx)(u,{value:e,children:pt[e]},e))]})})]})})]})})};function ht({index:e,type:t}){switch(t){case`run-deployment`:case`pause-deployment`:case`resume-deployment`:return`actions.${e}.deployment_id`;case`pause-work-queue`:case`resume-work-queue`:return`actions.${e}.work_queue_id`;case`pause-work-pool`:case`resume-work-pool`:return`actions.${e}.work_pool_id`;case`pause-automation`:case`resume-automation`:return`actions.${e}.automation_id`;default:return null}}var U=e(n(),1),gt=4,W=({length:e=gt})=>Array.from({length:e},(e,t)=>(0,H.jsx)(ee,{className:`mt-2 p-4 h-2 w-full`},t)),_t=({index:e})=>{let t=E(),[n,i]=(0,U.useState)(``),{data:a,isLoading:s}=r(je({offset:0,block_types:{slug:{any_:[`webhook`]}}})),c=(0,U.useMemo)(()=>a?.map(e=>e.slug)??[],[a]),{data:l,isLoading:u}=r(Me({block_types:c.length>0?{slug:{any_:c}}:void 0,include_secrets:!1,sort:`BLOCK_TYPE_AND_NAME_ASC`,offset:0},{enabled:c.length>0})),d=s||u,f=(0,U.useMemo)(()=>!a||!l?[]:a.map(e=>({blockType:e,documents:l.filter(t=>t.block_type_id===e.id)})).filter(e=>e.documents.length>0),[a,l]),p=(0,U.useMemo)(()=>{if(!n)return f;let e=n.toLowerCase();return f.map(t=>({...t,documents:t.documents.filter(t=>t.name?.toLowerCase().includes(e))})).filter(e=>e.documents.length>0)},[f,n]),m=(0,U.useCallback)(e=>{if(!(!e||!l))return l.find(t=>t.id===e)},[l]);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(z,{control:t.control,name:`actions.${e}.block_document_id`,render:({field:e})=>{let t=m(e.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsx)(R,{children:`Block`}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!t,"aria-label":`Select webhook block`,children:t?t.name:`Select a webhook block`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a block...`}),(0,H.jsx)(j,{children:`No webhook blocks found`}),(0,H.jsx)(L,{children:d?(0,H.jsx)(W,{}):p.map(t=>(0,H.jsx)(M,{heading:t.blockType.name,children:t.documents.map(t=>(0,H.jsx)(A,{value:t.id,selected:e.value===t.id,onSelect:e.onChange,children:t.name},t.id))},t.blockType.id))})]})]}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(vt,{index:e}),(0,H.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-accent bg-accent p-3 text-sm text-accent-foreground`,children:[(0,H.jsx)(o,{id:`Info`,className:`mt-0.5 size-4 shrink-0`}),(0,H.jsxs)(`p`,{children:[`In addition to any fields present on the triggering event, the following objects can be used in webhook payload templates:`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`deployment`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow_run`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_pool`}),`, and`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_queue`}),`.`]})]})]})},vt=({index:e})=>{let t=E(),{validateTemplate:n}=Se(),[r,i]=(0,U.useState)(null),[a,s]=(0,U.useState)(!1),c=g(t.watch(`actions.${e}.payload`),1e3);return(0,U.useEffect)(()=>{(async()=>{if(!c||c.trim()===``){i(null);return}s(!0);try{let e=await n(c);e.valid?i(null):i(e.error)}catch{i(null)}finally{s(!1)}})()},[c,n]),(0,H.jsx)(z,{control:t.control,name:`actions.${e}.payload`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsxs)(R,{className:`flex items-center gap-2`,children:[`Payload`,a&&(0,H.jsx)(o,{id:`Loader2`,className:`size-3 animate-spin`})]}),(0,H.jsx)(P,{children:(0,H.jsx)(De,{...e,value:e.value??``,placeholder:`Enter webhook payload...`,className:r?`border-destructive`:``,rows:5})}),r&&(0,H.jsx)(`p`,{className:`text-sm text-destructive`,children:r}),(0,H.jsx)(F,{})]})})},yt=({index:e})=>{let t=E(),n=t.watch(`actions.${e}.state`);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(z,{control:t.control,name:`actions.${e}.state`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`State`}),(0,H.jsx)(P,{children:(0,H.jsx)(We,{value:e.value,onValueChange:e.onChange})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(z,{control:t.control,name:`actions.${e}.name`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Name`}),(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`text`,...e,value:e.value??``,placeholder:n?Ve[n]:void 0})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(z,{control:t.control,name:`actions.${e}.message`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Message`}),(0,H.jsx)(P,{children:(0,H.jsx)(De,{...e,placeholder:`State changed by Automation <id>`})}),(0,H.jsx)(F,{})]})})]})},bt=({action:e})=>(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e===`Resume`?`Resume a flow run inferred from the triggering event`:`${e} flow run inferred from the triggering event`}),G={value:B,name:`Infer Automation`},xt=(e,t)=>{if(t===G.value)return G.name;let n=e?.find(e=>e.id===t);if(n)return n.name},St=({action:e,index:t})=>{let[n,i]=(0,U.useState)(``),a=E(),{data:o,isSuccess:s}=r(Ce()),c=(0,U.useDeferredValue)(n),l=(0,U.useMemo)(()=>o?o.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())):[],[o,c]),u=G.name.toLowerCase().includes(c.toLowerCase());return(0,H.jsx)(z,{control:a.control,name:`actions.${t}.automation_id`,render:({field:t})=>{let r=xt(o,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Automation To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!r,"aria-label":`Select Automation to ${e}`,children:r??`Select automation`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for an automation...`}),(0,H.jsx)(j,{children:`No automation found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[u&&(0,H.jsx)(A,{selected:t.value===G.value,onSelect:e=>{t.onChange(e),i(``)},value:G.value,children:G.name}),s?l.map(e=>(0,H.jsx)(A,{selected:t.value===e.id,onSelect:e=>{t.onChange(e),i(``)},value:e.id,children:e.name},e.id)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}})},Ct=(e={page:1,limit:100,sort:`NAME_ASC`})=>{let{data:t,status:n}=r(_e(e)),i=new Set(t?.results.map(e=>e.flow_id)),{data:a,status:o}=r(ye({flows:{operator:`or_`,id:{any_:Array.from(i)}},sort:`NAME_DESC`,offset:0},{enabled:i.size>0}));return(0,U.useMemo)(()=>{if(a&&t){let e=new Map(a.map(e=>[e.id,e])),n=t.results.map(t=>({...t,flow:e.get(t.flow_id)})),{count:r,limit:i,pages:o,page:s}=t;return{data:{count:r,limit:i,pages:o,page:s,results:n},status:`success`}}return o===`error`||n===`error`?{data:void 0,status:`error`}:{data:void 0,status:`pending`}},[t,n,a,o])},K={value:B,name:`Infer Deployment`},wt=(e,t)=>{if(t===K.value)return K.name;let n=e?.find(e=>e.id===t);if(n)return(0,H.jsx)(Et,{deploymentWithFlow:n})},Tt=({action:e,index:t})=>{let[n,r]=(0,U.useState)(``),i=E(),a=i.watch(`actions.${t}.type`),o=v({name:`actions.${t}.deployment_id`}),{data:s}=Ct({page:1,sort:`NAME_ASC`,deployments:{operator:`or_`,flow_or_deployment_name:{like_:g(n,500)}}}),c=K.name.toLowerCase().includes(n.toLowerCase()),l=s?.results;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(z,{control:i.control,name:`actions.${t}.deployment_id`,render:({field:t})=>{let i=wt(l,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Deployment To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!i,"aria-label":`Select Deployment to ${e}`,children:i??`Select deployment`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:r,placeholder:`Search for an deployment...`}),(0,H.jsx)(j,{children:`No deployment found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[c&&(0,H.jsx)(A,{selected:t.value===K.value,onSelect:t.onChange,value:K.value,children:K.name}),l?l.map(e=>(0,H.jsx)(A,{"aria-label":e.name,selected:t.value===e.id,onSelect:t.onChange,value:e.id,children:(0,H.jsx)(Et,{deploymentWithFlow:e})},e.id)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}}),o!==K.value&&a===`run-deployment`&&(0,H.jsx)(`div`,{children:`TODO: Additional fields`})]})},Et=({deploymentWithFlow:e})=>e.flow?(0,H.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,H.jsx)(`div`,{children:e.flow.name}),(0,H.jsx)(o,{className:`size-4`,id:`ChevronRight`}),(0,H.jsx)(`div`,{children:e.name})]}):e.name,q={value:B,name:`Infer Work Pool`},Dt=(e,t)=>{if(t===q.value)return q.name;let n=e?.find(e=>e.id===t);if(n)return n.name},Ot=({action:e,index:t})=>{let[n,i]=(0,U.useState)(``),a=E(),{data:o,isSuccess:s}=r(be()),c=(0,U.useDeferredValue)(n),l=(0,U.useMemo)(()=>o?o.filter(e=>e.name.toLowerCase().includes(c.toLowerCase())):[],[o,c]),u=q.name.toLowerCase().includes(c.toLowerCase());return(0,H.jsx)(z,{control:a.control,name:`actions.${t}.work_pool_id`,render:({field:t})=>{let r=Dt(o,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Work Pool To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!r,"aria-label":`Select Work Pool to ${e}`,children:r??`Select Work Pool`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a work pool...`}),(0,H.jsx)(j,{children:`No work pool found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[u&&(0,H.jsx)(A,{selected:t.value===q.value,onSelect:e=>{t.onChange(e),i(``)},value:q.value,children:q.name}),s?l.map(e=>(0,H.jsx)(A,{selected:t.value===e.id,onSelect:e=>{t.onChange(e),i(``)},value:e.id,children:e.name},e.id)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}})},J={value:B,name:`Infer Work Queue`},kt=(e,t)=>{if(t===J.value)return J.name;let n=e?.find(e=>e.id===t);if(n)return n.name},At=({action:e,index:t})=>{let[n,i]=(0,U.useState)(``),a=E(),{data:o}=r(Te()),s=(0,U.useDeferredValue)(n),c=(0,U.useMemo)(()=>{if(!o)return;let e=new Map,t=o.filter(e=>e.name.toLowerCase().includes(s.toLowerCase()));for(let n of t){let{work_pool_name:t}=n;if(!t)throw Error(`'work_pool_name expected`);e.set(t,[...e.get(t)??[],n])}return e},[o,s]),l=J.name.toLowerCase().includes(s.toLowerCase());return(0,H.jsx)(z,{control:a.control,name:`actions.${t}.work_queue_id`,render:({field:t})=>{let r=kt(o,t.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsxs)(R,{children:[`Work Queue To `,e]}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!r,"aria-label":`Select Work Queue to ${e}`,children:r??`Select Work Queue`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a work queue...`}),(0,H.jsx)(j,{children:`No work queue found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[l&&(0,H.jsx)(A,{selected:t.value===J.value,onSelect:e=>{t.onChange(e),i(``)},value:J.value,children:J.name}),c?Array.from(c).map(([e,n])=>(0,H.jsxs)(`div`,{className:`border-b`,children:[(0,H.jsx)(A,{disabled:!0,children:e}),n.map(e=>(0,H.jsx)(A,{selected:t.value===e.id,onSelect:e=>{t.onChange(e),i(``)},value:e.id,children:e.name},e.id))]},e)):(0,H.jsx)(W,{})]})})]})]}),(0,H.jsx)(F,{})]})}})},jt=({index:e})=>{let t=E(),[n,i]=(0,U.useState)(``),{data:a,isLoading:s}=r(je({offset:0,block_schemas:{operator:`and_`,block_capabilities:{all_:[`notify`]}}})),c=(0,U.useMemo)(()=>a?.map(e=>e.slug)??[],[a]),{data:l,isLoading:u}=r(Me({block_types:c.length>0?{slug:{any_:c}}:void 0,include_secrets:!1,sort:`BLOCK_TYPE_AND_NAME_ASC`,offset:0},{enabled:c.length>0})),d=s||u,f=(0,U.useMemo)(()=>!a||!l?[]:a.map(e=>({blockType:e,documents:l.filter(t=>t.block_type_id===e.id)})).filter(e=>e.documents.length>0),[a,l]),p=(0,U.useMemo)(()=>{if(!n)return f;let e=n.toLowerCase();return f.map(t=>({...t,documents:t.documents.filter(t=>t.name?.toLowerCase().includes(e))})).filter(e=>e.documents.length>0)},[f,n]),m=(0,U.useCallback)(e=>{if(!(!e||!l))return l.find(t=>t.id===e)},[l]);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(z,{control:t.control,name:`actions.${e}.block_document_id`,render:({field:e})=>{let t=m(e.value);return(0,H.jsxs)(I,{className:`flex flex-col`,children:[(0,H.jsx)(R,{children:`Block`}),(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:!!t,"aria-label":`Select notification block`,children:t?t.name:`Select a notification block`}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search for a block...`}),(0,H.jsx)(j,{children:`No notification blocks found`}),(0,H.jsx)(L,{children:d?(0,H.jsx)(W,{}):p.map(t=>(0,H.jsx)(M,{heading:t.blockType.name,children:t.documents.map(t=>(0,H.jsx)(A,{value:t.id,selected:e.value===t.id,onSelect:e.onChange,children:t.name},t.id))},t.blockType.id))})]})]}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(Mt,{index:e,name:`subject`,label:`Subject`,placeholder:`Enter notification subject...`}),(0,H.jsx)(Mt,{index:e,name:`body`,label:`Body`,placeholder:`Enter notification body...`,multiline:!0}),(0,H.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-accent bg-accent p-3 text-sm text-accent-foreground`,children:[(0,H.jsx)(o,{id:`Info`,className:`mt-0.5 size-4 shrink-0`}),(0,H.jsxs)(`p`,{children:[`In addition to any fields present on the triggering event, the following objects can be used in notification templates:`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`deployment`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`flow_run`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_pool`}),`,`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`work_queue`}),`, and`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-xs`,children:`metric`}),`.`]})]})]})},Mt=({index:e,name:t,label:n,placeholder:r,multiline:i=!1})=>{let a=E(),{validateTemplate:s}=Se(),[c,l]=(0,U.useState)(null),[u,d]=(0,U.useState)(!1),f=g(a.watch(`actions.${e}.${t}`),1e3);(0,U.useEffect)(()=>{(async()=>{if(!f||f.trim()===``){l(null);return}d(!0);try{let e=await s(f);e.valid?l(null):l(e.error)}catch{l(null)}finally{d(!1)}})()},[f,s]);let p=i?De:_;return(0,H.jsx)(z,{control:a.control,name:`actions.${e}.${t}`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsxs)(R,{className:`flex items-center gap-2`,children:[n,u&&(0,H.jsx)(o,{id:`Loader2`,className:`size-3 animate-spin`})]}),(0,H.jsx)(P,{children:(0,H.jsx)(p,{...e,value:e.value??``,placeholder:r,className:c?`border-destructive`:``})}),c&&(0,H.jsx)(`p`,{className:`text-sm text-destructive`,children:c}),(0,H.jsx)(F,{})]})})},Nt=({index:e,onRemove:t})=>(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,H.jsxs)(`p`,{className:`text-base font-semibold`,children:[`Action `,e+1]}),(0,H.jsx)(c,{size:`icon`,"aria-label":`remove action ${e+1}`,onClick:t,variant:`outline`,children:(0,H.jsx)(o,{id:`Trash2`,className:`size-4`})})]}),(0,H.jsx)(mt,{index:e}),(0,H.jsx)(Pt,{index:e}),(0,H.jsx)(`hr`,{className:`my-8`})]},e),Pt=({index:e})=>{switch(v({name:`actions.${e}.type`})){case`change-flow-run-state`:return(0,H.jsx)(yt,{index:e});case`run-deployment`:return(0,H.jsx)(Tt,{action:`Run`,index:e});case`pause-deployment`:return(0,H.jsx)(Tt,{action:`Pause`,index:e});case`resume-deployment`:return(0,H.jsx)(Tt,{action:`Resume`,index:e});case`pause-work-queue`:return(0,H.jsx)(At,{action:`Pause`,index:e});case`resume-work-queue`:return(0,H.jsx)(At,{action:`Resume`,index:e});case`pause-work-pool`:return(0,H.jsx)(Ot,{action:`Pause`,index:e});case`resume-work-pool`:return(0,H.jsx)(Ot,{action:`Resume`,index:e});case`pause-automation`:return(0,H.jsx)(St,{action:`Pause`,index:e});case`resume-automation`:return(0,H.jsx)(St,{action:`Resume`,index:e});case`send-notification`:return(0,H.jsx)(jt,{index:e});case`call-webhook`:return(0,H.jsx)(_t,{index:e});case`cancel-flow-run`:return(0,H.jsx)(bt,{action:`Cancel`});case`suspend-flow-run`:return(0,H.jsx)(bt,{action:`Suspend`});case`resume-flow-run`:return(0,H.jsx)(bt,{action:`Resume`});default:return null}},Ft=()=>{let{fields:e,append:t,remove:n}=me({control:E().control,name:`actions`,shouldUnregister:!1,rules:{minLength:1}});return(0,H.jsxs)(`div`,{children:[e.map(({id:e},t)=>(0,H.jsx)(Nt,{index:t,onRemove:()=>n(t)},e)),(0,H.jsxs)(c,{type:`button`,variant:`outline`,onClick:()=>t({type:`cancel-flow-run`}),children:[(0,H.jsx)(o,{id:`Plus`,className:`mr-2 size-4`}),` Add Action`]})]})},It=()=>{let e=E();return(0,H.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,H.jsx)(z,{control:e.control,name:`name`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Automation Name`}),(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`text`,...e,value:e.value??``})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(z,{control:e.control,name:`description`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Description (Optional)`}),(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`text`,...e,value:e.value??``})}),(0,H.jsx)(F,{})]})})]})},Lt=[{value:`Reactive`,label:`Observe`},{value:`Proactive`,label:`Don't observe`}],Rt=30,zt=()=>{let e=E(),t=t=>{let n=e.getValues(`trigger.posture`);if(e.setValue(`trigger.posture`,t),n===`Reactive`&&t===`Proactive`){let t=e.getValues(`trigger.expect`)??[];e.setValue(`trigger.after`,t),e.setValue(`trigger.expect`,[]),e.getValues(`trigger.within`)===0&&e.setValue(`trigger.within`,Rt)}else if(n===`Proactive`&&t===`Reactive`){let t=e.getValues(`trigger.after`)??[];e.setValue(`trigger.expect`,t),e.setValue(`trigger.after`,[])}};return(0,H.jsx)(z,{control:e.control,name:`trigger.posture`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`When I`}),(0,H.jsx)(P,{children:(0,H.jsx)(Oe,{value:e.value,onValueChange:t,className:`flex gap-4`,children:Lt.map(e=>(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(Ee,{value:e.value,id:`custom-${e.value}`}),(0,H.jsx)(ge,{htmlFor:`custom-${e.value}`,children:e.label})]},e.value))})})]})})},Bt=60,Vt=3600,Ht=86400,Ut=[{label:`Seconds`,value:1},{label:`Minutes`,value:Bt},{label:`Hours`,value:Vt},{label:`Days`,value:Ht}];function Wt(e){return e>0&&e%Ht===0?Ht:e>0&&e%Vt===0?Vt:e>0&&e%Bt===0?Bt:1}function Y({value:e,onChange:t,min:n=0,max:r,className:i,disabled:a=!1}){let[o,c]=(0,U.useState)(()=>Wt(e)),l=(0,U.useMemo)(()=>Ut.filter(e=>e.value>=n),[n]),p=(0,U.useMemo)(()=>e/o,[e,o]),g=(0,U.useCallback)(e=>{let n=e*o;r!==void 0&&n>r&&(n=r),t(n)},[t,o,r]),ee=(0,U.useCallback)(n=>{let i=Number(n),a=o;c(i);let s=e/a*i;r!==void 0&&s>r&&(s=r),t(s)},[t,o,e,r]);return(0,U.useEffect)(()=>{if(!l.some(e=>e.value===o)){let e=l[0];e&&c(e.value)}},[l,o]),(0,H.jsxs)(`div`,{className:s(`grid grid-cols-[1fr_7rem] gap-2 w-full`,i),children:[(0,H.jsx)(_,{type:`number`,min:0,value:p,onChange:e=>g(Number(e.target.value)),disabled:a,"aria-label":`Duration quantity`}),(0,H.jsxs)(h,{value:String(o),onValueChange:ee,disabled:a,children:[(0,H.jsx)(f,{"aria-label":`Duration unit`,children:(0,H.jsx)(m,{})}),(0,H.jsx)(d,{children:l.map(e=>(0,H.jsx)(u,{value:String(e.value),children:e.label},e.value))})]})]})}var Gt=2,Kt=40;function qt({selectedResourceIds:e,onToggleResource:t,emptyMessage:n=`All resources`}){let[r,i]=(0,U.useState)(``),a=(0,U.useDeferredValue)(r),[o,s]=(0,U.useState)(0),c=(0,U.useRef)(null),l=(0,U.useRef)(null);(0,U.useEffect)(()=>{let e=c.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e)s(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]);let{resourceOptions:u}=Je(),d=(0,U.useMemo)(()=>{let e=[{label:`Automations`,options:[]},{label:`Blocks`,options:[]},{label:`Deployments`,options:[]},{label:`Flows`,options:[]},{label:`Work Pools`,options:[]},{label:`Work Queues`,options:[]}];for(let t of u){let n={label:t.name,value:t.resourceId};switch(t.type){case`automation`:e[0].options.push(n);break;case`block`:e[1].options.push(n);break;case`deployment`:e[2].options.push(n);break;case`flow`:e[3].options.push(n);break;case`work-pool`:e[4].options.push(n);break;case`work-queue`:e[5].options.push(n);break}}return e.map(e=>({...e,options:e.options.sort((e,t)=>e.label.localeCompare(t.label))})).filter(e=>e.options.length>0)},[u]),f=(0,U.useMemo)(()=>{if(!a)return d;let e=a.toLowerCase();return d.map(t=>({...t,options:t.options.filter(t=>t.label.toLowerCase().includes(e)||t.value.toLowerCase().includes(e))})).filter(e=>e.options.length>0)},[d,a]),p=(0,U.useMemo)(()=>{if(!a.trim()||!a.includes(`.`))return!1;let e=a.toLowerCase();return!u.some(t=>t.resourceId.toLowerCase()===e)},[a,u]),m=(0,U.useCallback)(e=>{let t=l.current;if(!t||o===0||e.length===0)return Math.min(e.length,Gt);let n=e.length>1?o-Kt:o,r=0;for(let i=0;i<e.length&&(t.textContent=e.slice(0,i+1).join(`, `),t.offsetWidth<=n);i++)r=i+1;return r===e.length?e.length:Math.max(1,r)},[o]),h=()=>{if(e.length===0)return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n});let t=e.map(e=>u.find(t=>t.resourceId===e)?.name??e),r=m(t),i=t.slice(0,r),a=t.length-r;return(0,H.jsxs)(`div`,{ref:c,className:`flex flex-1 min-w-0 items-center gap-2`,children:[(0,H.jsx)(`div`,{className:`flex flex-1 min-w-0 items-center gap-2 overflow-hidden`,children:(0,H.jsx)(`span`,{className:`truncate`,children:i.join(`, `)})}),a>0&&(0,H.jsxs)(`p`,{className:`text-sm shrink-0`,children:[`+ `,a]}),(0,H.jsx)(`div`,{ref:l,className:`absolute invisible whitespace-nowrap`,"aria-hidden":`true`})]})},g=e=>{t(e),i(``)};return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:h()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:r,onValueChange:i,placeholder:`Search resources...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No resources found`}),p&&(0,H.jsx)(M,{children:(0,H.jsxs)(A,{selected:e.includes(a),onSelect:()=>g(a),closeOnSelect:!1,value:a,children:[`Add "`,a,`"`]},`__custom__`)}),f.map(t=>(0,H.jsx)(M,{heading:t.label,children:t.options.map(t=>(0,H.jsx)(A,{selected:e.includes(t.value),onSelect:()=>g(t.value),closeOnSelect:!1,value:t.value,children:t.label},t.value))},t.label))]})]})]})}function Jt(e){let t=new Map;for(let n of e){let e=n.split(`.`);for(let n=1;n<e.length;n++){let r=e.slice(0,n).join(`.`);t.set(r,(t.get(r)??0)+1)}}return Array.from(t.entries()).filter(([,t])=>t>1&&t<e.length).map(([e])=>`${e}.*`)}function Yt({selectedEvents:e,onToggleEvent:t,emptyMessage:n=`All events`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),[s]=(0,U.useState)(()=>({since:new Date(Date.now()-10080*60*1e3).toISOString(),until:new Date().toISOString()})),{data:c=[]}=r(Le(`event`,{filter:{occurred:s,order:`DESC`},time_unit:`day`,time_interval:1})),l=(0,U.useMemo)(()=>{let e=c.map(e=>e.label),t=Jt(e);return[...e,...t].sort((e,t)=>e.localeCompare(t))},[c]),u=(0,U.useMemo)(()=>{if(!o)return l;let e=o.toLowerCase();return l.filter(t=>t.toLowerCase().includes(e))},[l,o]),d=(0,U.useMemo)(()=>{if(!o.trim())return!1;let e=o.toLowerCase();return!l.some(t=>t.toLowerCase()===e)},[o,l]),f=()=>{if(e.length===0)return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n});let t=e.slice(0,2),r=e.length-t.length;return(0,H.jsxs)(`div`,{className:`flex min-w-0 items-center justify-start gap-1`,children:[(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:t.join(`, `)}),r>0&&(0,H.jsxs)(`span`,{className:`shrink-0 text-muted-foreground`,children:[`+`,r]})]})},p=e=>{t(e),a(``)};return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:f()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search events...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No events found`}),(0,H.jsxs)(M,{children:[d&&(0,H.jsxs)(A,{selected:e.includes(o),onSelect:()=>p(o),closeOnSelect:!1,value:o,children:[`Add "`,o,`"`]},`__custom__`),u.map(t=>(0,H.jsx)(A,{selected:e.includes(t),onSelect:()=>p(t),closeOnSelect:!1,value:t,children:t},t))]})]})]})]})}var Xt=()=>{let e=E(),t=v({name:`trigger.posture`});return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsx)(`div`,{className:`flex items-end gap-4`,children:(0,H.jsx)(zt,{})}),(0,H.jsx)(z,{control:e.control,name:`trigger.expect`,render:({field:e})=>{let t=e.value??[];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Any event matching`}),(0,H.jsx)(P,{children:(0,H.jsx)(Yt,{selectedEvents:t,onToggleEvent:n=>{let r=t.includes(n)?t.filter(e=>e!==n):[...t,n];e.onChange(r)}})}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(z,{control:e.control,name:`trigger.match`,render:({field:e})=>{let t=e.value?.[`prefect.resource.id`]??[],n=Array.isArray(t)?t:[t];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`From the following resources`}),(0,H.jsx)(P,{children:(0,H.jsx)(qt,{selectedResourceIds:n,onToggleResource:t=>{let r=n.includes(t)?n.filter(e=>e!==t):[...n,t];r.length>0?e.onChange({"prefect.resource.id":r}):e.onChange({})}})}),(0,H.jsx)(F,{})]})}}),(0,H.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,H.jsx)(z,{control:e.control,name:`trigger.threshold`,render:({field:e})=>(0,H.jsxs)(I,{className:`w-20`,children:[(0,H.jsx)(P,{children:(0,H.jsx)(_,{type:`number`,min:1,...e,onChange:t=>e.onChange(Number(t.target.value))})}),(0,H.jsx)(F,{})]})}),(0,H.jsx)(`span`,{className:`pb-2 text-sm text-muted-foreground`,children:`times within`}),(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:t===`Proactive`?10:0})}),(0,H.jsx)(F,{})]})})]}),(0,H.jsxs)(Ke,{children:[(0,H.jsxs)(Ge,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,H.jsx)(a,{className:`h-4 w-4 transition-transform data-[state=open]:rotate-90`}),`Evaluation Options`]}),(0,H.jsxs)(qe,{className:`mt-4 space-y-4 pl-6`,children:[(0,H.jsx)(z,{control:e.control,name:`trigger.after`,render:({field:e})=>{let t=e.value??[];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Evaluate trigger only after observing an event matching`}),(0,H.jsx)(P,{children:(0,H.jsx)(Yt,{selectedEvents:t,onToggleEvent:n=>{let r=t.includes(n)?t.filter(e=>e!==n):[...t,n];e.onChange(r)}})}),(0,H.jsx)(F,{})]})}}),(0,H.jsx)(z,{control:e.control,name:`trigger.match_related`,render:({field:e})=>{let t=e.value?.[`prefect.resource.id`]??[],n=Array.isArray(t)?t:[t];return(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Filter for events related to`}),(0,H.jsx)(P,{children:(0,H.jsx)(qt,{selectedResourceIds:n,onToggleResource:t=>{let r=n.includes(t)?n.filter(e=>e!==t):[...n,t];r.length>0?e.onChange({"prefect.resource.id":r}):e.onChange({})}})}),(0,H.jsx)(F,{})]})}})]})]})]})},Zt=2,Qt=40,$t=({selectedDeploymentIds:e,onSelectDeploymentIds:t})=>{let[n,i]=(0,U.useState)(``),a=(0,U.useDeferredValue)(n),[o,s]=(0,U.useState)(0),c=(0,U.useRef)(null),l=(0,U.useRef)(null),u=(0,U.useMemo)(()=>new Set(e),[e]);(0,U.useEffect)(()=>{let e=c.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e)s(t.contentRect.width)});return t.observe(e),()=>t.disconnect()},[]);let{data:d=[]}=r(ve({deployments:a?{operator:`and_`,name:{like_:a}}:void 0,limit:100,offset:0,sort:`NAME_ASC`})),{data:f=[]}=r(ve({deployments:u.size>0?{operator:`and_`,id:{any_:e}}:void 0,limit:u.size||1,offset:0,sort:`NAME_ASC`},{enabled:u.size>0})),p=e=>{let n=new Set(u);u.has(e)?n.delete(e):n.add(e),t(Array.from(n))},m=()=>{t([])},h=(0,U.useCallback)(e=>{let t=l.current;if(!t||o===0||e.length===0)return Math.min(e.length,Zt);let n=e.length>1?o-Qt:o,r=0;for(let i=0;i<e.length&&(t.textContent=e.slice(0,i+1).join(`, `),t.offsetWidth<=n);i++)r=i+1;return r===e.length?e.length:Math.max(1,r)},[o]),g=()=>{if(u.size===0)return`All deployments`;let e=f.filter(e=>u.has(e.id)).map(e=>e.name),t=h(e),n=e.slice(0,t),r=e.length-t;return(0,H.jsxs)(`div`,{ref:c,className:`flex flex-1 min-w-0 items-center gap-2`,children:[(0,H.jsx)(`div`,{className:`flex flex-1 min-w-0 items-center gap-2 overflow-hidden`,children:(0,H.jsx)(`span`,{className:`truncate`,children:n.join(`, `)})}),r>0&&(0,H.jsxs)(`p`,{className:`text-sm shrink-0`,children:[`+ `,r]}),(0,H.jsx)(`div`,{ref:l,className:`absolute invisible whitespace-nowrap`,"aria-hidden":`true`})]})},_=(0,U.useMemo)(()=>d.filter(e=>!a||e.name.toLowerCase().includes(a.toLowerCase())),[d,a]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{"aria-label":`Select deployments`,selected:u.size===0,children:g()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:n,onValueChange:i,placeholder:`Search deployments...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No deployments found`}),(0,H.jsxs)(M,{children:[(0,H.jsxs)(A,{"aria-label":`All deployments`,onSelect:m,closeOnSelect:!1,value:`__all__`,children:[(0,H.jsx)(he,{checked:u.size===0}),`All deployments`]}),_.map(e=>(0,H.jsxs)(A,{"aria-label":e.name,onSelect:()=>p(e.id),closeOnSelect:!1,value:e.id,children:[(0,H.jsx)(he,{checked:u.has(e.id)}),e.name]},e.id))]})]})]})]})},en=[{value:`Reactive`,label:`Enters`},{value:`Proactive`,label:`Stays in`}],tn=30,X=()=>{let e=E();return(0,H.jsx)(z,{control:e.control,name:`trigger.posture`,render:({field:t})=>(0,H.jsx)(I,{children:(0,H.jsx)(P,{children:(0,H.jsxs)(h,{value:t.value,onValueChange:n=>{let r=t.value;if(t.onChange(n),r===`Reactive`&&n===`Proactive`){let t=e.getValues(`trigger.expect`)??[];e.setValue(`trigger.after`,t),e.setValue(`trigger.expect`,[]),e.getValues(`trigger.within`)===0&&e.setValue(`trigger.within`,tn)}else if(r===`Proactive`&&n===`Reactive`){let t=e.getValues(`trigger.after`)??[];e.setValue(`trigger.expect`,t),e.setValue(`trigger.after`,[])}},children:[(0,H.jsx)(f,{"aria-label":`select posture`,className:`w-[160px]`,children:(0,H.jsx)(m,{placeholder:`Select posture`})}),(0,H.jsx)(d,{children:en.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})})})})},nn=30*86400,rn=[{value:`prefect.deployment.ready`,label:`Ready`},{value:`prefect.deployment.not-ready`,label:`Not Ready`},{value:`prefect.deployment.disabled`,label:`Disabled`}],an=`prefect.deployment.`,on=`prefect.deployment.*`,sn=e=>e?(Array.isArray(e)?e:[e]).filter(e=>e!==on).map(e=>e.replace(an,``)):[],cn=e=>e.length===0?on:e.map(e=>`${an}${e}`),ln=()=>{let e=E(),t=v({name:`trigger.posture`}),n=v({name:`trigger.match`}),r=(0,U.useMemo)(()=>{let e=n?.[`prefect.resource.id`];return sn(e)},[n]),i=(0,U.useCallback)(t=>{let n=e.getValues(`trigger.match`)??{};e.setValue(`trigger.match`,{...n,"prefect.resource.id":cn(t)})},[e]);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Deployments`}),(0,H.jsx)(P,{children:(0,H.jsx)($t,{selectedDeploymentIds:r,onSelectDeploymentIds:i})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Deployment`}),(0,H.jsxs)(`div`,{className:`grid gap-2`,style:{gridTemplateColumns:`10rem 1fr`},children:[(0,H.jsx)(X,{}),(0,H.jsx)(z,{control:e.control,name:`trigger.expect`,render:({field:e})=>{let t=e.value?.[0];return(0,H.jsxs)(h,{value:t??``,onValueChange:t=>e.onChange([t]),children:[(0,H.jsx)(f,{className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select status`})}),(0,H.jsx)(d,{children:rn.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})}})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Within`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:10,max:nn})}),(0,H.jsx)(F,{})]})})]})},un=2;function dn({selectedFlowIds:e,onToggleFlow:t,emptyMessage:n=`Any flow`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),{data:s=[]}=r(ye({flows:o?{operator:`and_`,name:{like_:o}}:void 0,limit:100,offset:0,sort:`NAME_ASC`})),{data:c=[]}=r(ye({flows:e.length>0?{operator:`and_`,id:{any_:e}}:void 0,limit:e.length||1,offset:0,sort:`NAME_ASC`},{enabled:e.length>0})),l=(0,U.useMemo)(()=>s.filter(e=>!o||e.name.toLowerCase().includes(o.toLowerCase())),[s,o]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:(()=>{if(e.length===0)return(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n});let t=c.filter(t=>e.includes(t.id)).map(e=>e.name).slice(0,un),r=e.length-t.length;return(0,H.jsxs)(`div`,{className:`flex min-w-0 items-center justify-start gap-1`,children:[(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:t.join(`, `)}),r>0&&(0,H.jsxs)(`span`,{className:`shrink-0 text-muted-foreground`,children:[`+`,r]})]})})()}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search flows...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No flows found`}),(0,H.jsx)(M,{children:l.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),a(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))})]})]})]})}var Z=`All run states`,Q=`All except scheduled`;function fn(e){return e.length===ze.length-1?!e.includes(`Scheduled`):!1}function pn({selectedStates:e,onStateChange:t,emptyMessage:n=`Any state`}){let[r,i]=(0,U.useState)(``),a=(0,U.useDeferredValue)(r),o=(0,U.useMemo)(()=>e.length===0?Z:fn(e)?Q:e,[e]),s=(0,U.useMemo)(()=>{let e=a.toLowerCase();return ze.filter(t=>t.toLowerCase().includes(e))},[a]),c=(0,U.useMemo)(()=>{let e=a.toLowerCase();return Z.toLowerCase().includes(e)||Q.toLowerCase().includes(e)},[a]),l=e=>{e===Z?t([]):e===Q&&t([...Be]),i(``)},u=n=>{e.includes(n)?t(e.filter(e=>e!==n)):t([...e,n]),i(``)};return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:o===Z?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n}):o===Q?(0,H.jsx)(`span`,{children:`All except scheduled`}):(0,H.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,H.jsx)(xe,{type:Re[e],name:e,className:`cursor-pointer`},e))})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:r,onValueChange:i,placeholder:`Search states...`}),(0,H.jsx)(j,{children:`No state found`}),(0,H.jsx)(L,{children:(0,H.jsxs)(M,{children:[c&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(A,{selected:o===Z,onSelect:()=>l(Z),value:Z,closeOnSelect:!1,children:`All run states`},Z),(0,H.jsx)(A,{selected:o===Q,onSelect:()=>l(Q),value:Q,closeOnSelect:!1,children:`All except scheduled`},Q)]}),s.map(t=>(0,H.jsx)(A,{selected:e.includes(t),onSelect:()=>u(t),value:t,closeOnSelect:!1,children:(0,H.jsx)(xe,{type:Re[t],name:t})},t))]})})]})]})}function mn(e){return e.length===0?[`prefect.flow-run.*`]:e.map(e=>`prefect.flow-run.${e}`)}function hn(e){return!e||e.length===0||e.includes(`prefect.flow-run.*`)?[]:e.filter(e=>e.startsWith(`prefect.flow-run.`)).map(e=>e.replace(`prefect.flow-run.`,``))}function gn(e){if(!e)return[];let t=e[`prefect.resource.id`];return t?(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.flow.`)).map(e=>e.replace(`prefect.flow.`,``)):[]}function _n(e){if(!e)return[];let t=e[`prefect.resource.id`];return t?(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.tag.`)).map(e=>e.replace(`prefect.tag.`,``)):[]}function vn(e,t){let n=e.map(e=>`prefect.flow.${e}`),r=t.map(e=>`prefect.tag.${e}`);return n.length===0&&r.length===0?{}:{"prefect.resource.role":n.length>0?`flow`:`tag`,"prefect.resource.id":[...n,...r]}}var yn=()=>{let e=E(),t=v({name:`trigger.posture`}),n=t===`Proactive`?`trigger.after`:`trigger.expect`,r=v({name:`trigger.match_related`}),i=gn(r),a=_n(r),o=t=>{let n=i,r=n.includes(t)?n.filter(e=>e!==t):[...n,t],o=r.length>0?[]:a;e.setValue(`trigger.match_related`,vn(r,o))},s=t=>{e.setValue(`trigger.match_related`,vn(i,t))},c=i.length===0;return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Flows`}),(0,H.jsx)(P,{children:(0,H.jsx)(dn,{selectedFlowIds:i,onToggleFlow:o,emptyMessage:`All flows`})})]}),c&&(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Flow Run Tags`}),(0,H.jsx)(P,{children:(0,H.jsx)(Ye,{value:a,onChange:s,placeholder:`All tags`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Flow Run`}),(0,H.jsxs)(`div`,{className:`grid grid-cols-[10rem_1fr] gap-2`,children:[(0,H.jsx)(X,{}),(0,H.jsx)(z,{control:e.control,name:n,render:({field:e})=>(0,H.jsx)(P,{children:(0,H.jsx)(pn,{selectedStates:hn(e.value??[]),onStateChange:t=>{e.onChange(mn(t))},emptyMessage:`Any state`})})})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`For`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:0})}),(0,H.jsx)(F,{})]})})]})},bn=({defaultValue:e=`Form`,value:t,onValueChange:n,formContent:r,jsonContent:i})=>(0,H.jsxs)(Pe,{...t===void 0?{defaultValue:e}:{value:t,onValueChange:n},children:[(0,H.jsx)(`div`,{className:`flex justify-center`,children:(0,H.jsxs)(ke,{children:[(0,H.jsx)(Ne,{value:`Form`,children:`Form`}),(0,H.jsx)(Ne,{value:`JSON`,children:`JSON`})]})}),(0,H.jsx)(Fe,{value:`Form`,children:r}),(0,H.jsx)(Fe,{value:`JSON`,children:i})]}),xn=({value:e,onChange:t,error:n})=>{let[r,i]=(0,U.useState)(null),a=()=>{try{let n=JSON.parse(e);t(JSON.stringify(n,null,2))}catch{}},o=e=>{try{let t=JSON.parse(e);return V.parse(t),i(null),!0}catch(e){return e instanceof SyntaxError?i(`Invalid JSON syntax`):e instanceof ue&&i(e.errors[0]?.message??`Invalid trigger configuration`),!1}};return(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(ge,{children:`Trigger Configuration`}),(0,H.jsx)(c,{variant:`ghost`,size:`sm`,onClick:a,children:`Format`})]}),(0,H.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Edit the trigger configuration as JSON.`,` `,(0,H.jsx)(`a`,{href:`https://docs.prefect.io/v3/automate/events/automations-triggers`,target:`_blank`,rel:`noopener noreferrer`,className:`underline hover:text-foreground`,children:`View documentation`})]}),(0,H.jsx)(Ie,{value:e,onChange:t,onBlur:()=>o(e)}),(r||n)&&(0,H.jsx)(`p`,{className:`text-sm text-destructive`,children:r||n})]})},Sn={"deployment-status":`Deployment status`,"flow-run-state":`Flow run state`,"work-pool-status":`Work pool status`,"work-queue-status":`Work queue status`,custom:`Custom`},Cn=({onValueChange:e,value:t})=>(0,H.jsxs)(`div`,{className:`space-y-2`,children:[(0,H.jsx)(ge,{htmlFor:`automations-trigger-template-select`,children:`Trigger Template`}),(0,H.jsxs)(h,{value:t,onValueChange:e,children:[(0,H.jsx)(f,{id:`automations-trigger-template-select`,className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select template`})}),(0,H.jsx)(d,{children:(0,H.jsx)(p,{children:Object.keys(Sn).map(e=>(0,H.jsx)(u,{value:e,children:Sn[e]},e))})})]})]}),wn=({onTemplateChange:e})=>(0,H.jsx)(z,{control:E().control,name:`triggerTemplate`,render:({field:t})=>(0,H.jsx)(I,{children:(0,H.jsx)(P,{children:(0,H.jsx)(Cn,{value:t.value,onValueChange:n=>{t.onChange(n),e?.(n)}})})})}),Tn={type:`event`,posture:`Reactive`,threshold:1,within:0},En=e=>{let t=e.match?.[`prefect.resource.id`];if(typeof t==`string`){if(t.startsWith(`prefect.flow-run.`)||t===`prefect.flow-run.*`)return`flow-run-state`;if(t.startsWith(`prefect.deployment.`)||t===`prefect.deployment.*`)return`deployment-status`;if(t.startsWith(`prefect.work-pool.`)||t===`prefect.work-pool.*`)return`work-pool-status`;if(t.startsWith(`prefect.work-queue.`)||t===`prefect.work-queue.*`)return`work-queue-status`}return`custom`},Dn=e=>{switch(e){case`flow-run-state`:return{type:`event`,match:{"prefect.resource.id":`prefect.flow-run.*`},match_related:{},after:[],expect:[`prefect.flow-run.*`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`deployment-status`:return{type:`event`,match:{"prefect.resource.id":`prefect.deployment.*`},match_related:{},after:[],expect:[`prefect.deployment.not-ready`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`work-pool-status`:return{type:`event`,match:{"prefect.resource.id":`prefect.work-pool.*`},match_related:{},after:[],expect:[`prefect.work-pool.not-ready`,`prefect.work-pool.not_ready`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`work-queue-status`:return{type:`event`,match:{"prefect.resource.id":`prefect.work-queue.*`},match_related:{},after:[],expect:[`prefect.work-queue.not-ready`],for_each:[`prefect.resource.id`],posture:`Reactive`,threshold:1,within:0};case`custom`:return{type:`event`,match:{"prefect.resource.id":[`prefect.flow-run.*`]},match_related:{},after:[],expect:[`prefect.flow-run.Failed`],for_each:[],posture:`Reactive`,threshold:5,within:60};default:return Tn}};function On({selectedWorkPoolIds:e,onToggleWorkPool:t,emptyMessage:n=`All work pools`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),{data:s=[]}=r(be()),c=(0,U.useMemo)(()=>s.filter(e=>e.status!==null).filter(e=>!o||e.name.toLowerCase().includes(o.toLowerCase())),[s,o]),l=(0,U.useMemo)(()=>s.filter(t=>e.includes(t.id)),[s,e]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:e.length===0?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n}):(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:l.map(e=>e.name).join(`, `)})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search work pools...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No work pools found`}),(0,H.jsx)(M,{children:c.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),a(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))})]})]})]})}var $=[{value:`ready`,label:`Ready`,events:[`prefect.work-pool.ready`]},{value:`not_ready`,label:`Not Ready`,events:[`prefect.work-pool.not-ready`,`prefect.work-pool.not_ready`]},{value:`paused`,label:`Paused`,events:[`prefect.work-pool.paused`]}];function kn(e){if(!e||e.length===0)return`not_ready`;for(let t of $)if(t.events.some(t=>e.includes(t)))return t.value;return`not_ready`}function An(e){let t=$.find(t=>t.value===e);return t?[...t.events]:[]}function jn(e){return $.filter(t=>t.value!==e).flatMap(e=>[...e.events])}function Mn(e){if(!e)return[];let t=e[`prefect.resource.id`];return!t||t===`prefect.work-pool.*`?[]:(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.work-pool.`)&&e!==`prefect.work-pool.*`).map(e=>e.replace(`prefect.work-pool.`,``))}function Nn(e){return e.length===0?{"prefect.resource.id":`prefect.work-pool.*`}:{"prefect.resource.id":e.map(e=>`prefect.work-pool.${e}`)}}var Pn=()=>{let e=E(),t=v({name:`trigger.posture`}),n=v({name:`trigger.expect`}),r=v({name:`trigger.after`}),i=kn(t===`Proactive`?r:n);return(0,H.jsxs)(h,{value:i,onValueChange:n=>{let r=An(n),i=jn(n);t===`Proactive`?(e.setValue(`trigger.after`,r),e.setValue(`trigger.expect`,i)):(e.setValue(`trigger.expect`,r),e.setValue(`trigger.after`,[]))},children:[(0,H.jsx)(f,{"aria-label":`select status`,className:`min-w-0 flex-1`,children:(0,H.jsx)(m,{placeholder:`Select status`})}),(0,H.jsx)(d,{children:$.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})},Fn=()=>{let e=E(),t=v({name:`trigger.posture`}),n=Mn(v({name:`trigger.match`}));return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Pools`}),(0,H.jsx)(P,{children:(0,H.jsx)(On,{selectedWorkPoolIds:n,onToggleWorkPool:t=>{let r=n,i=r.includes(t)?r.filter(e=>e!==t):[...r,t];e.setValue(`trigger.match`,Nn(i))},emptyMessage:`All work pools`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Pool`}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsx)(X,{}),(0,H.jsx)(Pn,{})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`For`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??30,onChange:e.onChange,min:0})}),(0,H.jsx)(F,{})]})})]})};function In({selectedWorkPoolIds:e,onToggleWorkPool:t,emptyMessage:n=`All work pools`}){let[i,a]=(0,U.useState)(``),o=(0,U.useDeferredValue)(i),{data:s=[]}=r(be({limit:100,offset:0})),c=(0,U.useMemo)(()=>s.filter(e=>e.status?o?e.name.toLowerCase().includes(o.toLowerCase()):!0:!1),[s,o]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:e.length===0?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:n}):(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:s.filter(t=>e.includes(t.id)).map(e=>e.name).join(`, `)})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:i,onValueChange:a,placeholder:`Search work pools...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No work pools found`}),(0,H.jsx)(M,{children:c.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),a(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))})]})]})]})}function Ln({selectedWorkQueueIds:e,onToggleWorkQueue:t,workPoolIds:n=[],emptyMessage:i=`All work queues`}){let[a,o]=(0,U.useState)(``),s=(0,U.useDeferredValue)(a),{data:c=[]}=r(Te({limit:100,offset:0})),l=(0,U.useMemo)(()=>c.filter(e=>n.length>0&&(!e.work_pool_id||!n.includes(e.work_pool_id))?!1:s?e.name.toLowerCase().includes(s.toLowerCase()):!0),[c,n,s]),u=(0,U.useMemo)(()=>{let e={};for(let t of l){let n=t.work_pool_name??`Unknown`;e[n]||(e[n]=[]),e[n].push(t)}return Object.keys(e).sort((e,t)=>e.localeCompare(t)).map(t=>({poolName:t,queues:e[t].sort((e,t)=>e.name.localeCompare(t.name))}))},[l]);return(0,H.jsxs)(O,{children:[(0,H.jsx)(N,{selected:e.length>0,children:e.length===0?(0,H.jsx)(`span`,{className:`text-muted-foreground`,children:i}):(0,H.jsx)(`span`,{className:`truncate min-w-0 text-left`,children:c.filter(t=>e.includes(t.id)).map(e=>e.name).join(`, `)})}),(0,H.jsxs)(k,{children:[(0,H.jsx)(D,{value:a,onValueChange:o,placeholder:`Search work queues...`}),(0,H.jsxs)(L,{children:[(0,H.jsx)(j,{children:`No work queues found`}),u.map(n=>(0,H.jsx)(M,{heading:n.poolName,children:n.queues.map(n=>(0,H.jsx)(A,{selected:e.includes(n.id),onSelect:()=>{t(n.id),o(``)},closeOnSelect:!1,value:n.id,children:n.name},n.id))},n.poolName))]})]})]})}var Rn=[{value:`prefect.work-queue.ready`,label:`Ready`},{value:`prefect.work-queue.not-ready`,label:`Not Ready`},{value:`prefect.work-queue.paused`,label:`Paused`}];function zn(e){if(!e)return[];let t=e[`prefect.resource.id`];return t?(Array.isArray(t)?t:[t]).filter(e=>e.startsWith(`prefect.work-pool.`)).map(e=>e.replace(`prefect.work-pool.`,``)):[]}function Bn(e){if(!e)return[];let t=e[`prefect.resource.id`];if(!t)return[];let n=Array.isArray(t)?t:[t];return n.includes(`prefect.work-queue.*`)?[]:n.filter(e=>e.startsWith(`prefect.work-queue.`)).map(e=>e.replace(`prefect.work-queue.`,``))}function Vn(e){return e.length===0?{}:{"prefect.resource.role":`work-pool`,"prefect.resource.id":e.map(e=>`prefect.work-pool.${e}`)}}function Hn(e){return e.length===0?{"prefect.resource.id":`prefect.work-queue.*`}:{"prefect.resource.id":e.map(e=>`prefect.work-queue.${e}`)}}var Un=()=>{let e=E(),t=v({name:`trigger.posture`}),n=v({name:`trigger.match_related`}),r=v({name:`trigger.match`}),i=zn(n),a=Bn(r);return(0,H.jsxs)(`div`,{className:`space-y-4`,children:[(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Pools`}),(0,H.jsx)(P,{children:(0,H.jsx)(In,{selectedWorkPoolIds:i,onToggleWorkPool:t=>{let n=i,r=n.includes(t)?n.filter(e=>e!==t):[...n,t];e.setValue(`trigger.match_related`,Vn(r))},emptyMessage:`All work pools`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Queues`}),(0,H.jsx)(P,{children:(0,H.jsx)(Ln,{selectedWorkQueueIds:a,onToggleWorkQueue:t=>{let n=a,r=n.includes(t)?n.filter(e=>e!==t):[...n,t];e.setValue(`trigger.match`,Hn(r))},workPoolIds:i,emptyMessage:`All work queues`})})]}),(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`Work Queue`}),(0,H.jsxs)(`div`,{className:`grid grid-cols-[10rem_1fr] gap-2`,children:[(0,H.jsx)(X,{}),(0,H.jsx)(z,{control:e.control,name:`trigger.expect`,render:({field:e})=>{let t=e.value?.[0];return(0,H.jsx)(P,{children:(0,H.jsxs)(h,{value:t??``,onValueChange:t=>e.onChange([t]),children:[(0,H.jsx)(f,{className:`w-full`,children:(0,H.jsx)(m,{placeholder:`Select status`})}),(0,H.jsx)(d,{children:Rn.map(e=>(0,H.jsx)(u,{value:e.value,children:e.label},e.value))})]})})}})]})]}),t===`Proactive`&&(0,H.jsx)(z,{control:e.control,name:`trigger.within`,render:({field:e})=>(0,H.jsxs)(I,{children:[(0,H.jsx)(R,{children:`For`}),(0,H.jsx)(P,{children:(0,H.jsx)(Y,{value:e.value??0,onChange:e.onChange,min:0})}),(0,H.jsx)(F,{})]})})]})},Wn=()=>{let e=E(),t=e.watch(`triggerTemplate`),n=e.watch(`trigger`),[r,i]=(0,U.useState)(`Form`),[a,o]=(0,U.useState)(``),[s,c]=(0,U.useState)(void 0),l=(0,U.useCallback)(()=>JSON.stringify(n,null,2),[n]);(0,U.useEffect)(()=>{r===`Form`&&o(l())},[r,l]);let u=(0,U.useCallback)(e=>{try{let t=JSON.parse(e);return{valid:!0,trigger:V.parse(t)}}catch(e){return e instanceof SyntaxError?{valid:!1,error:`Invalid JSON syntax`}:e instanceof ue?{valid:!1,error:e.errors[0]?.message??`Invalid trigger configuration`}:{valid:!1,error:`Unknown error`}}},[]),d=(0,U.useCallback)(t=>{if(r!==t){if(t===`Form`){let t=u(a);if(!t.valid){c(t.error);return}t.trigger&&e.setValue(`trigger`,t.trigger),c(void 0)}else o(l()),c(void 0);i(t)}},[r,a,u,e,l]),f=(0,U.useCallback)(t=>{o(t);let n=u(t);n.valid&&n.trigger&&(e.setValue(`trigger`,n.trigger),c(void 0))},[u,e]);return(0,H.jsxs)(`div`,{className:`space-y-6`,children:[(0,H.jsx)(wn,{onTemplateChange:t=>{let n=Dn(t);e.setValue(`trigger`,n),o(JSON.stringify(n,null,2)),c(void 0)}}),t&&(0,H.jsx)(bn,{value:r,onValueChange:d,formContent:(0,H.jsx)(Gn,{template:t}),jsonContent:(0,H.jsx)(xn,{value:a,onChange:f,error:s})})]})},Gn=({template:e})=>{switch(e){case`flow-run-state`:return(0,H.jsx)(yn,{});case`deployment-status`:return(0,H.jsx)(ln,{});case`work-pool-status`:return(0,H.jsx)(Fn,{});case`work-queue-status`:return(0,H.jsx)(Un,{});case`custom`:return(0,H.jsx)(Xt,{});default:return null}},Kn=[`Trigger`,`Actions`,`Details`],qn={actions:[{type:void 0}],trigger:{type:`event`,posture:`Reactive`,threshold:1,within:0}},Jn=({defaultValues:e={},isEditMode:t=!1,onSubmit:n,submitLabel:r=`Save`,isSubmitting:a=!1})=>{let o=t?new Set([0,1,2]):new Set([0]),s=Ue(Kn.length,0,o),l=se({resolver:le(ft),defaultValues:{...qn,...e}}),u=Kn[s.currentStep],d={Trigger:{render:()=>(0,H.jsx)(Wn,{}),trigger:()=>l.trigger(`trigger`)},Actions:{render:()=>(0,H.jsx)(Ft,{}),trigger:()=>l.trigger(`actions`)},Details:{render:()=>(0,H.jsx)(It,{}),trigger:()=>l.trigger([`description`,`name`])}},f=async e=>{await d[e].trigger()&&s.incrementStep()},p=async()=>{await d[u].trigger()&&await l.handleSubmit(n)()},m=t&&!s.isFinalStep;return(0,H.jsx)(we,{...l,children:(0,H.jsx)(`form`,{onSubmit:e=>void l.handleSubmit(n)(e),children:(0,H.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,H.jsx)(He,{steps:Kn,currentStepNum:s.currentStep,onClick:e=>s.changeStep(e.stepNum),completedSteps:s.completedStepsSet,visitedSteps:s.visitedStepsSet}),(0,H.jsxs)(oe,{className:`p-4 pt-8`,children:[(0,H.jsxs)(ae,{children:[d[u].render(),(0,H.jsx)(F,{children:l.formState.errors.root?.message})]}),(0,H.jsxs)(ie,{className:`mt-6 flex gap-2 justify-end`,children:[(0,H.jsx)(c,{type:`button`,variant:`outline`,children:(0,H.jsx)(i,{to:`/automations`,children:`Cancel`})}),(0,H.jsxs)(re,{children:[(0,H.jsx)(te,{asChild:!0,children:(0,H.jsx)(`span`,{tabIndex:s.isStartingStep?0:-1,className:`inline-flex`,children:(0,H.jsx)(c,{disabled:s.isStartingStep,type:`button`,variant:`outline`,onClick:s.decrementStep,children:`Previous`})})}),s.isStartingStep&&(0,H.jsx)(ne,{children:`Already on the first step`})]}),s.isFinalStep?(0,H.jsx)(c,{type:`submit`,loading:a,children:r},`save`):(0,H.jsx)(c,{type:`button`,variant:m?`outline`:`default`,onClick:()=>void f(u),children:`Next`},`next`),m&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Ae,{orientation:`vertical`,className:`h-8`}),(0,H.jsx)(c,{type:`button`,loading:a,onClick:()=>void p(),children:`Save & Exit`},`save-and-exit`)]})]})]})]})})})};export{En as n,B as r,Jn as t};
2
+ //# sourceMappingURL=automation-wizard-BgO-_tGL.js.map