prefect 3.6.12__py3-none-any.whl → 3.6.13.dev2__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 (255) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/_internal/urls.py +29 -0
  3. prefect/_states.py +4 -1
  4. prefect/client/orchestration/_concurrency_limits/client.py +16 -16
  5. prefect/client/subscriptions.py +1 -1
  6. prefect/events/clients.py +52 -13
  7. prefect/runner/storage.py +3 -23
  8. prefect/server/ui-v2/assets/{artifact-card-Ds2tntMW.js → artifact-card-C8JEQRHl.js} +2 -2
  9. prefect/server/ui-v2/assets/{artifact-card-Ds2tntMW.js.map → artifact-card-C8JEQRHl.js.map} +1 -1
  10. prefect/server/ui-v2/assets/{artifact._id-erPNL0a8.js → artifact._id-67V8kTg9.js} +2 -2
  11. prefect/server/ui-v2/assets/{artifact._id-erPNL0a8.js.map → artifact._id-67V8kTg9.js.map} +1 -1
  12. prefect/server/ui-v2/assets/{automation-wizard-Bx9AQxRV.js → automation-wizard-DuxZ47Nn.js} +2 -2
  13. prefect/server/ui-v2/assets/{automation-wizard-Bx9AQxRV.js.map → automation-wizard-DuxZ47Nn.js.map} +1 -1
  14. prefect/server/ui-v2/assets/automation._id-D8S8r4Ji.js +2 -0
  15. prefect/server/ui-v2/assets/{automation._id-IHh5QJwE.js.map → automation._id-D8S8r4Ji.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{automation_._id.edit-Ds8vO0c5.js → automation_._id.edit-C1fOM0Hx.js} +2 -2
  17. prefect/server/ui-v2/assets/{automation_._id.edit-Ds8vO0c5.js.map → automation_._id.edit-C1fOM0Hx.js.map} +1 -1
  18. prefect/server/ui-v2/assets/{automations-header-C6aUe5Tw.js → automations-header-DrijTNGi.js} +2 -2
  19. prefect/server/ui-v2/assets/{automations-header-C6aUe5Tw.js.map → automations-header-DrijTNGi.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{base-job-template-form-section-a-9TFMcW.js → base-job-template-form-section-BDkqOkpe.js} +2 -2
  21. prefect/server/ui-v2/assets/{base-job-template-form-section-a-9TFMcW.js.map → base-job-template-form-section-BDkqOkpe.js.map} +1 -1
  22. prefect/server/ui-v2/assets/{block-type-details-eq3Wg2ht.js → block-type-details-CrFHWH5D.js} +2 -2
  23. prefect/server/ui-v2/assets/{block-type-details-eq3Wg2ht.js.map → block-type-details-CrFHWH5D.js.map} +1 -1
  24. prefect/server/ui-v2/assets/block-type-logo-WQNm0PzP.js +2 -0
  25. prefect/server/ui-v2/assets/{block-type-logo-B31LJm5H.js.map → block-type-logo-WQNm0PzP.js.map} +1 -1
  26. prefect/server/ui-v2/assets/{block._id-OVdz3htC.js → block._id-C3gN1Ae8.js} +2 -2
  27. prefect/server/ui-v2/assets/{block._id-OVdz3htC.js.map → block._id-C3gN1Ae8.js.map} +1 -1
  28. prefect/server/ui-v2/assets/block_._id.edit-DzPuSvat.js +2 -0
  29. prefect/server/ui-v2/assets/{block_._id.edit-CIhIBJrm.js.map → block_._id.edit-DzPuSvat.js.map} +1 -1
  30. prefect/server/ui-v2/assets/catalog-T-7MqsyE.js +2 -0
  31. prefect/server/ui-v2/assets/{catalog-CfniU0UV.js.map → catalog-T-7MqsyE.js.map} +1 -1
  32. prefect/server/ui-v2/assets/catalog_._slug-DMOI61fc.js +2 -0
  33. prefect/server/ui-v2/assets/{catalog_._slug-C9p86T4s.js.map → catalog_._slug-DMOI61fc.js.map} +1 -1
  34. prefect/server/ui-v2/assets/catalog_._slug_.create-l9bGUPi-.js +2 -0
  35. prefect/server/ui-v2/assets/{catalog_._slug_.create-BhSunL__.js.map → catalog_._slug_.create-l9bGUPi-.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{collapsible-DBD7wjpi.js → collapsible-DM-Ze5-Y.js} +2 -2
  37. prefect/server/ui-v2/assets/{collapsible-DBD7wjpi.js.map → collapsible-DM-Ze5-Y.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{concurrency-limit._id-C-XWq7Tf.js → concurrency-limit._id-BHEt9viF.js} +2 -2
  39. prefect/server/ui-v2/assets/{concurrency-limit._id-C-XWq7Tf.js.map → concurrency-limit._id-BHEt9viF.js.map} +1 -1
  40. prefect/server/ui-v2/assets/{create-Bj2t5YQq.js → create-BMxUOyN5.js} +2 -2
  41. prefect/server/ui-v2/assets/{create-Bj2t5YQq.js.map → create-BMxUOyN5.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{create-noFojqGL.js → create-Cq-EAHVk.js} +2 -2
  43. prefect/server/ui-v2/assets/{create-noFojqGL.js.map → create-Cq-EAHVk.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{data-table-BjFlVIyC.js → data-table-Bw8TZx9D.js} +2 -2
  45. prefect/server/ui-v2/assets/{data-table-BjFlVIyC.js.map → data-table-Bw8TZx9D.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{delete-confirmation-dialog-COdZmNfa.js → delete-confirmation-dialog-CTdWZlGM.js} +2 -2
  47. prefect/server/ui-v2/assets/{delete-confirmation-dialog-COdZmNfa.js.map → delete-confirmation-dialog-CTdWZlGM.js.map} +1 -1
  48. prefect/server/ui-v2/assets/{deployment-action-header-C6v2kZ6V.js → deployment-action-header-BObYqmI_.js} +2 -2
  49. prefect/server/ui-v2/assets/{deployment-action-header-C6v2kZ6V.js.map → deployment-action-header-BObYqmI_.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{deployment-form-D9d5sZM2.js → deployment-form-CntyhRrK.js} +3 -3
  51. prefect/server/ui-v2/assets/{deployment-form-D9d5sZM2.js.map → deployment-form-CntyhRrK.js.map} +1 -1
  52. prefect/server/ui-v2/assets/{deployment-links-Dy-M1Que.js → deployment-links-DBUSCaxB.js} +2 -2
  53. prefect/server/ui-v2/assets/{deployment-links-Dy-M1Que.js.map → deployment-links-DBUSCaxB.js.map} +1 -1
  54. prefect/server/ui-v2/assets/{deployment._id-CZlY9261.js → deployment._id-BXanVFA8.js} +2 -2
  55. prefect/server/ui-v2/assets/{deployment._id-CZlY9261.js.map → deployment._id-BXanVFA8.js.map} +1 -1
  56. prefect/server/ui-v2/assets/deployment._id-Q5cvHMX9.js +2 -0
  57. prefect/server/ui-v2/assets/{deployment._id-DVmqclRz.js.map → deployment._id-Q5cvHMX9.js.map} +1 -1
  58. prefect/server/ui-v2/assets/deployment_._id.duplicate-DB-4hHHc.js +2 -0
  59. prefect/server/ui-v2/assets/{deployment_._id.duplicate-DVMjpk5m.js.map → deployment_._id.duplicate-DB-4hHHc.js.map} +1 -1
  60. prefect/server/ui-v2/assets/deployment_._id.edit-CWf1RIGy.js +2 -0
  61. prefect/server/ui-v2/assets/{deployment_._id.edit-Ck_P6KDn.js.map → deployment_._id.edit-CWf1RIGy.js.map} +1 -1
  62. prefect/server/ui-v2/assets/{deployment_._id.run-Cht7AHDG.js → deployment_._id.run-CoHGXFoM.js} +2 -2
  63. prefect/server/ui-v2/assets/{deployment_._id.run-Cht7AHDG.js.map → deployment_._id.run-CoHGXFoM.js.map} +1 -1
  64. prefect/server/ui-v2/assets/{dropdown-menu-xZ_3w9OP.js → dropdown-menu-CT-s-V7d.js} +2 -2
  65. prefect/server/ui-v2/assets/{dropdown-menu-xZ_3w9OP.js.map → dropdown-menu-CT-s-V7d.js.map} +1 -1
  66. prefect/server/ui-v2/assets/{event._eventDate._eventId-CpexuXd6.js → event._eventDate._eventId-BITo_GYL.js} +2 -2
  67. prefect/server/ui-v2/assets/{event._eventDate._eventId-CpexuXd6.js.map → event._eventDate._eventId-BITo_GYL.js.map} +1 -1
  68. prefect/server/ui-v2/assets/flow-run-graph-DxIl6fzW.js +2 -0
  69. prefect/server/ui-v2/assets/flow-run-graph-DxIl6fzW.js.map +1 -0
  70. prefect/server/ui-v2/assets/{flow-run._id-ZBlKBwPO.js → flow-run._id-Bbm9OpDi.js} +2 -2
  71. prefect/server/ui-v2/assets/{flow-run._id-ZBlKBwPO.js.map → flow-run._id-Bbm9OpDi.js.map} +1 -1
  72. prefect/server/ui-v2/assets/flow-run._id-BtSgRDtA.js +2 -0
  73. prefect/server/ui-v2/assets/{flow-run._id-OL0YhyLW.js.map → flow-run._id-BtSgRDtA.js.map} +1 -1
  74. prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js +4 -0
  75. prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js.map +1 -0
  76. prefect/server/ui-v2/assets/flow-runs-pagination-LrU9Aio8.js +2 -0
  77. prefect/server/ui-v2/assets/flow-runs-pagination-LrU9Aio8.js.map +1 -0
  78. prefect/server/ui-v2/assets/flow._id-BJBRokk4.js +2 -0
  79. prefect/server/ui-v2/assets/{flow._id-DhrCicwR.js.map → flow._id-BJBRokk4.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{form-BTub_PhK.js → form-CVSlEnl8.js} +2 -2
  81. prefect/server/ui-v2/assets/{form-BTub_PhK.js.map → form-CVSlEnl8.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{header-Dp9qi8fq.js → header-4plZZheZ.js} +2 -2
  83. prefect/server/ui-v2/assets/{header-Dp9qi8fq.js.map → header-4plZZheZ.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{header-B75eb688.js → header-9rXZ4r39.js} +2 -2
  85. prefect/server/ui-v2/assets/{header-B75eb688.js.map → header-9rXZ4r39.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{header-6wmrKLU3.js → header-D3uM8_xM.js} +2 -2
  87. prefect/server/ui-v2/assets/{header-6wmrKLU3.js.map → header-D3uM8_xM.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{index-BA7ACCoL.js → index-6OsEYhIi.js} +2 -2
  89. prefect/server/ui-v2/assets/{index-BA7ACCoL.js.map → index-6OsEYhIi.js.map} +1 -1
  90. prefect/server/ui-v2/assets/index-B7xsJ-QH.js +2 -0
  91. prefect/server/ui-v2/assets/{index-CT_nG86y.js.map → index-B7xsJ-QH.js.map} +1 -1
  92. prefect/server/ui-v2/assets/{index-CGWoVV2s.js → index-BeoNC2tJ.js} +2 -2
  93. prefect/server/ui-v2/assets/{index-CGWoVV2s.js.map → index-BeoNC2tJ.js.map} +1 -1
  94. prefect/server/ui-v2/assets/index-BfJLUM7N.js +2 -0
  95. prefect/server/ui-v2/assets/index-BfJLUM7N.js.map +1 -0
  96. prefect/server/ui-v2/assets/{index-DzMGV8GV.js → index-Bj0OOguP.js} +2 -2
  97. prefect/server/ui-v2/assets/{index-DzMGV8GV.js.map → index-Bj0OOguP.js.map} +1 -1
  98. prefect/server/ui-v2/assets/{index-zpb5iSCL.js → index-BlpD74iH.js} +2 -2
  99. prefect/server/ui-v2/assets/{index-zpb5iSCL.js.map → index-BlpD74iH.js.map} +1 -1
  100. prefect/server/ui-v2/assets/index-BvSl3DKP.js +17 -0
  101. prefect/server/ui-v2/assets/index-BvSl3DKP.js.map +1 -0
  102. prefect/server/ui-v2/assets/index-CDwJvjUM.js +2 -0
  103. prefect/server/ui-v2/assets/{index-Cs8eFQKw.js.map → index-CDwJvjUM.js.map} +1 -1
  104. prefect/server/ui-v2/assets/{index-UN2Tx4jH.js → index-CDyLkbVG.js} +2 -2
  105. prefect/server/ui-v2/assets/{index-UN2Tx4jH.js.map → index-CDyLkbVG.js.map} +1 -1
  106. prefect/server/ui-v2/assets/{index-D08xgmV0.js → index-ChIrfjIW.js} +2 -2
  107. prefect/server/ui-v2/assets/{index-D08xgmV0.js.map → index-ChIrfjIW.js.map} +1 -1
  108. prefect/server/ui-v2/assets/index-CzCSgCK-.js +2 -0
  109. prefect/server/ui-v2/assets/{index-qPlIYf3i.js.map → index-CzCSgCK-.js.map} +1 -1
  110. prefect/server/ui-v2/assets/index-D5v9S-lB.js +2 -0
  111. prefect/server/ui-v2/assets/{index-B_3f8Hcb.js.map → index-D5v9S-lB.js.map} +1 -1
  112. prefect/server/ui-v2/assets/{index-DfiNsXba.js → index-D6GJ4go1.js} +2 -2
  113. prefect/server/ui-v2/assets/{index-DfiNsXba.js.map → index-D6GJ4go1.js.map} +1 -1
  114. prefect/server/ui-v2/assets/index-DJyKqsFO.js +2 -0
  115. prefect/server/ui-v2/assets/{index-H6bwm6L6.js.map → index-DJyKqsFO.js.map} +1 -1
  116. prefect/server/ui-v2/assets/{index-DSaSov8V.js → index-DODEq1Pi.js} +2 -2
  117. prefect/server/ui-v2/assets/{index-DSaSov8V.js.map → index-DODEq1Pi.js.map} +1 -1
  118. prefect/server/ui-v2/assets/index-DicK6p3K.js +2 -0
  119. prefect/server/ui-v2/assets/{index-7-r4ia_S.js.map → index-DicK6p3K.js.map} +1 -1
  120. prefect/server/ui-v2/assets/{index-DYOACRXY.js → index-DqCPbST9.js} +2 -2
  121. prefect/server/ui-v2/assets/{index-DYOACRXY.js.map → index-DqCPbST9.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{index-DOkFJdYY.js → index-DxPoKag8.js} +2 -2
  123. prefect/server/ui-v2/assets/{index-DOkFJdYY.js.map → index-DxPoKag8.js.map} +1 -1
  124. prefect/server/ui-v2/assets/index-NY089eTx.css +1 -0
  125. prefect/server/ui-v2/assets/{index-HGoNWFfP.js → index-h9-QgNjZ.js} +2 -2
  126. prefect/server/ui-v2/assets/{index-HGoNWFfP.js.map → index-h9-QgNjZ.js.map} +1 -1
  127. prefect/server/ui-v2/assets/{index-D3ILnEzm.js → index-tBdv6kBF.js} +2 -2
  128. prefect/server/ui-v2/assets/{index-D3ILnEzm.js.map → index-tBdv6kBF.js.map} +1 -1
  129. prefect/server/ui-v2/assets/index-udb79rgq.js +2 -0
  130. prefect/server/ui-v2/assets/{index-7ThYp9SY.js.map → index-udb79rgq.js.map} +1 -1
  131. prefect/server/ui-v2/assets/{json-input-9UPGqxTw.js → json-input-Dt1icmrn.js} +2 -2
  132. prefect/server/ui-v2/assets/{json-input-9UPGqxTw.js.map → json-input-Dt1icmrn.js.map} +1 -1
  133. prefect/server/ui-v2/assets/{key._key-CTFfXO_k.js → key._key-Cyh5MBX_.js} +2 -2
  134. prefect/server/ui-v2/assets/{key._key-CTFfXO_k.js.map → key._key-Cyh5MBX_.js.map} +1 -1
  135. prefect/server/ui-v2/assets/{lazy-markdown-BHwIrC8E.js → lazy-markdown-BwIwKFRF.js} +2 -2
  136. prefect/server/ui-v2/assets/{lazy-markdown-BHwIrC8E.js.map → lazy-markdown-BwIwKFRF.js.map} +1 -1
  137. prefect/server/ui-v2/assets/{login-kqmT29n7.js → login-DKXFVSwk.js} +2 -2
  138. prefect/server/ui-v2/assets/{login-kqmT29n7.js.map → login-DKXFVSwk.js.map} +1 -1
  139. prefect/server/ui-v2/assets/{markdown-input-BesmAbLS.js → markdown-input-Dp0mBlkV.js} +2 -2
  140. prefect/server/ui-v2/assets/{markdown-input-BesmAbLS.js.map → markdown-input-Dp0mBlkV.js.map} +1 -1
  141. prefect/server/ui-v2/assets/{python-example-snippet-COTWYn1Y.js → python-example-snippet-BYwPjHI5.js} +3 -3
  142. prefect/server/ui-v2/assets/{python-example-snippet-COTWYn1Y.js.map → python-example-snippet-BYwPjHI5.js.map} +1 -1
  143. prefect/server/ui-v2/assets/{python-input-Bjccebi0.js → python-input-y26XMqXw.js} +2 -2
  144. prefect/server/ui-v2/assets/{python-input-Bjccebi0.js.map → python-input-y26XMqXw.js.map} +1 -1
  145. prefect/server/ui-v2/assets/{radio-group-DkAK0M2h.js → radio-group-D0van45v.js} +2 -2
  146. prefect/server/ui-v2/assets/{radio-group-DkAK0M2h.js.map → radio-group-D0van45v.js.map} +1 -1
  147. prefect/server/ui-v2/assets/route-error-state-CGGpuCGN.js +2 -0
  148. prefect/server/ui-v2/assets/{route-error-state-ALftyvGl.js.map → route-error-state-CGGpuCGN.js.map} +1 -1
  149. prefect/server/ui-v2/assets/{schema-form-BR4E-WXE.js → schema-form-2tg5SXM4.js} +2 -2
  150. prefect/server/ui-v2/assets/{schema-form-BR4E-WXE.js.map → schema-form-2tg5SXM4.js.map} +1 -1
  151. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BhL8C5NS.js → schema-form-input-string-format-datetime-CZt6AJ4z.js} +4 -4
  152. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BhL8C5NS.js.map → schema-form-input-string-format-datetime-CZt6AJ4z.js.map} +1 -1
  153. prefect/server/ui-v2/assets/settings-DDUadk_N.js +2 -0
  154. prefect/server/ui-v2/assets/settings-DDUadk_N.js.map +1 -0
  155. prefect/server/ui-v2/assets/{sort-filter-BD4vwJXt.js → sort-filter-D9p3cPx9.js} +2 -2
  156. prefect/server/ui-v2/assets/{sort-filter-BD4vwJXt.js.map → sort-filter-D9p3cPx9.js.map} +1 -1
  157. prefect/server/ui-v2/assets/state-colors-CAAf0Eg3.js +2 -0
  158. prefect/server/ui-v2/assets/state-colors-CAAf0Eg3.js.map +1 -0
  159. prefect/server/ui-v2/assets/table-vo9Do8sA.js +2 -0
  160. prefect/server/ui-v2/assets/table-vo9Do8sA.js.map +1 -0
  161. prefect/server/ui-v2/assets/tags-input-Ci2JQ-k3.js +2 -0
  162. prefect/server/ui-v2/assets/tags-input-Ci2JQ-k3.js.map +1 -0
  163. prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-CJzPc2gw.js +2 -0
  164. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CG3den1B.js.map → task-run-concurrency-limits-reset-dialog-CJzPc2gw.js.map} +1 -1
  165. prefect/server/ui-v2/assets/{task-run._id-DOcIzVi0.js → task-run._id-CjevSs79.js} +3 -3
  166. prefect/server/ui-v2/assets/{task-run._id-DOcIzVi0.js.map → task-run._id-CjevSs79.js.map} +1 -1
  167. prefect/server/ui-v2/assets/task-run._id-D8QKG5UZ.js +2 -0
  168. prefect/server/ui-v2/assets/{task-run._id-CnIVqU6v.js.map → task-run._id-D8QKG5UZ.js.map} +1 -1
  169. prefect/server/ui-v2/assets/task-runs-pagination-CifoSGct.js +2 -0
  170. prefect/server/ui-v2/assets/{task-runs-pagination-DLSAz-Ur.js.map → task-runs-pagination-CifoSGct.js.map} +1 -1
  171. prefect/server/ui-v2/assets/{textarea-D8LjlIx7.js → textarea-BAtfAxtV.js} +2 -2
  172. prefect/server/ui-v2/assets/{textarea-D8LjlIx7.js.map → textarea-BAtfAxtV.js.map} +1 -1
  173. prefect/server/ui-v2/assets/{timezone-select-BG3cL3-U.js → timezone-select-QlQTZSsF.js} +2 -2
  174. prefect/server/ui-v2/assets/{timezone-select-BG3cL3-U.js.map → timezone-select-QlQTZSsF.js.map} +1 -1
  175. prefect/server/ui-v2/assets/{toggle-group-D3zeurIL.js → toggle-group-BJN1vjEh.js} +2 -2
  176. prefect/server/ui-v2/assets/{toggle-group-D3zeurIL.js.map → toggle-group-BJN1vjEh.js.map} +1 -1
  177. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-eOWJYPkD.js +2 -0
  178. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-Bzy2ML2T.js.map → use-delete-automation-confirmation-dialog-eOWJYPkD.js.map} +1 -1
  179. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DRAP-Tnu.js → use-delete-block-document-confirmation-dialog-BTwSeHRM.js} +2 -2
  180. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DRAP-Tnu.js.map → use-delete-block-document-confirmation-dialog-BTwSeHRM.js.map} +1 -1
  181. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-D4yWonR8.js → use-flow-runs-selected-rows-BL_Gv9CC.js} +2 -2
  182. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-D4yWonR8.js.map → use-flow-runs-selected-rows-BL_Gv9CC.js.map} +1 -1
  183. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DZeBiVd9.js → use-get-artifacts-flow-task-runs-TSCoomjQ.js} +2 -2
  184. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DZeBiVd9.js.map → use-get-artifacts-flow-task-runs-TSCoomjQ.js.map} +1 -1
  185. prefect/server/ui-v2/assets/{use-quick-run-BxAMqZDM.js → use-quick-run-BMnCkwSv.js} +2 -2
  186. prefect/server/ui-v2/assets/{use-quick-run-BxAMqZDM.js.map → use-quick-run-BMnCkwSv.js.map} +1 -1
  187. prefect/server/ui-v2/assets/{use-stepper-T3wAKNvM.js → use-stepper-C1wm66U2.js} +2 -2
  188. prefect/server/ui-v2/assets/{use-stepper-T3wAKNvM.js.map → use-stepper-C1wm66U2.js.map} +1 -1
  189. prefect/server/ui-v2/assets/{utilities-B2JMf8iI.js → utilities-DxRXxFOF.js} +2 -2
  190. prefect/server/ui-v2/assets/{utilities-B2JMf8iI.js.map → utilities-DxRXxFOF.js.map} +1 -1
  191. prefect/server/ui-v2/assets/{work-pool-filter-CZz0AJlt.js → work-pool-filter-PudrkZYj.js} +2 -2
  192. prefect/server/ui-v2/assets/{work-pool-filter-CZz0AJlt.js.map → work-pool-filter-PudrkZYj.js.map} +1 -1
  193. prefect/server/ui-v2/assets/work-pool-queue-toggle-BAOrV_0R.js +2 -0
  194. prefect/server/ui-v2/assets/{work-pool-queue-toggle-D4eeo-hi.js.map → work-pool-queue-toggle-BAOrV_0R.js.map} +1 -1
  195. prefect/server/ui-v2/assets/{work-pool._workPoolName-DrWddu9K.js → work-pool._workPoolName-BOM3849e.js} +2 -2
  196. prefect/server/ui-v2/assets/{work-pool._workPoolName-DrWddu9K.js.map → work-pool._workPoolName-BOM3849e.js.map} +1 -1
  197. prefect/server/ui-v2/assets/work-pool_._workPoolName.edit-CIhcG6yr.js +2 -0
  198. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CA0ePjCk.js.map → work-pool_._workPoolName.edit-CIhcG6yr.js.map} +1 -1
  199. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DpUnE86v.js → work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js} +2 -2
  200. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DpUnE86v.js.map → work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js.map} +1 -1
  201. prefect/server/ui-v2/assets/{work-queue-icon-text-BjiA7vAW.js → work-queue-icon-text-CP4yX3uM.js} +2 -2
  202. prefect/server/ui-v2/assets/{work-queue-icon-text-BjiA7vAW.js.map → work-queue-icon-text-CP4yX3uM.js.map} +1 -1
  203. prefect/server/ui-v2/index.html +2 -2
  204. prefect/task_engine.py +16 -0
  205. prefect/task_worker.py +98 -16
  206. prefect/testing/fixtures.py +18 -1
  207. {prefect-3.6.12.dist-info → prefect-3.6.13.dev2.dist-info}/METADATA +1 -1
  208. {prefect-3.6.12.dist-info → prefect-3.6.13.dev2.dist-info}/RECORD +211 -210
  209. prefect/server/ui-v2/assets/automation._id-IHh5QJwE.js +0 -2
  210. prefect/server/ui-v2/assets/block-type-logo-B31LJm5H.js +0 -2
  211. prefect/server/ui-v2/assets/block_._id.edit-CIhIBJrm.js +0 -2
  212. prefect/server/ui-v2/assets/catalog-CfniU0UV.js +0 -2
  213. prefect/server/ui-v2/assets/catalog_._slug-C9p86T4s.js +0 -2
  214. prefect/server/ui-v2/assets/catalog_._slug_.create-BhSunL__.js +0 -2
  215. prefect/server/ui-v2/assets/deployment._id-DVmqclRz.js +0 -2
  216. prefect/server/ui-v2/assets/deployment_._id.duplicate-DVMjpk5m.js +0 -2
  217. prefect/server/ui-v2/assets/deployment_._id.edit-Ck_P6KDn.js +0 -2
  218. prefect/server/ui-v2/assets/flow-run-graph-CfoPEAgQ.js +0 -2
  219. prefect/server/ui-v2/assets/flow-run-graph-CfoPEAgQ.js.map +0 -1
  220. prefect/server/ui-v2/assets/flow-run._id-C-qxwEBp.js +0 -4
  221. prefect/server/ui-v2/assets/flow-run._id-C-qxwEBp.js.map +0 -1
  222. prefect/server/ui-v2/assets/flow-run._id-OL0YhyLW.js +0 -2
  223. prefect/server/ui-v2/assets/flow-runs-pagination-DnwkJapB.js +0 -2
  224. prefect/server/ui-v2/assets/flow-runs-pagination-DnwkJapB.js.map +0 -1
  225. prefect/server/ui-v2/assets/flow._id-DhrCicwR.js +0 -2
  226. prefect/server/ui-v2/assets/index-7-r4ia_S.js +0 -2
  227. prefect/server/ui-v2/assets/index-7ThYp9SY.js +0 -2
  228. prefect/server/ui-v2/assets/index-B7zHzWQW.css +0 -1
  229. prefect/server/ui-v2/assets/index-B_3f8Hcb.js +0 -2
  230. prefect/server/ui-v2/assets/index-BiCd-Iuz.js +0 -2
  231. prefect/server/ui-v2/assets/index-BiCd-Iuz.js.map +0 -1
  232. prefect/server/ui-v2/assets/index-CT_nG86y.js +0 -2
  233. prefect/server/ui-v2/assets/index-Cs8eFQKw.js +0 -2
  234. prefect/server/ui-v2/assets/index-H6bwm6L6.js +0 -2
  235. prefect/server/ui-v2/assets/index-WYPZo52S.js +0 -17
  236. prefect/server/ui-v2/assets/index-WYPZo52S.js.map +0 -1
  237. prefect/server/ui-v2/assets/index-qPlIYf3i.js +0 -2
  238. prefect/server/ui-v2/assets/route-error-state-ALftyvGl.js +0 -2
  239. prefect/server/ui-v2/assets/settings-BL0X8cDU.js +0 -2
  240. prefect/server/ui-v2/assets/settings-BL0X8cDU.js.map +0 -1
  241. prefect/server/ui-v2/assets/table-CEAx-qHs.js +0 -2
  242. prefect/server/ui-v2/assets/table-CEAx-qHs.js.map +0 -1
  243. prefect/server/ui-v2/assets/tags-input-D1RJZEUA.js +0 -2
  244. prefect/server/ui-v2/assets/tags-input-D1RJZEUA.js.map +0 -1
  245. prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-CG3den1B.js +0 -2
  246. prefect/server/ui-v2/assets/task-run._id-CnIVqU6v.js +0 -2
  247. prefect/server/ui-v2/assets/task-runs-pagination-DLSAz-Ur.js +0 -2
  248. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-Bzy2ML2T.js +0 -2
  249. prefect/server/ui-v2/assets/use-local-storage-CpxMp5wR.js +0 -2
  250. prefect/server/ui-v2/assets/use-local-storage-CpxMp5wR.js.map +0 -1
  251. prefect/server/ui-v2/assets/work-pool-queue-toggle-D4eeo-hi.js +0 -2
  252. prefect/server/ui-v2/assets/work-pool_._workPoolName.edit-CA0ePjCk.js +0 -2
  253. {prefect-3.6.12.dist-info → prefect-3.6.13.dev2.dist-info}/WHEEL +0 -0
  254. {prefect-3.6.12.dist-info → prefect-3.6.13.dev2.dist-info}/entry_points.txt +0 -0
  255. {prefect-3.6.12.dist-info → prefect-3.6.13.dev2.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"catalog_._slug_.create-BhSunL__.js","sources":["../../src/components/blocks/block-document-create-page/block-document-create-page-header.tsx","../../src/components/blocks/block-document-create-page/block-document-create-page.tsx","../../src/routes/blocks/catalog_.$slug_.create.tsx?tsr-split=component"],"sourcesContent":["import type { BlockType } from \"@/api/block-types\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype BlockDocumentCreatePageHeaderProps = {\n\tblockType: BlockType;\n};\n\nexport const BlockDocumentCreatePageHeader = ({\n\tblockType,\n}: BlockDocumentCreatePageHeaderProps) => {\n\treturn (\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink to=\"/blocks\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tBlocks\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\tto=\"/blocks/catalog\"\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\tCatalog\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\tto=\"/blocks/catalog\"\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{blockType.name}\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t<BreadcrumbPage>Create</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Link, useNavigate } from \"@tanstack/react-router\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { useCreateBlockDocument } from \"@/api/block-documents\";\nimport type { BlockSchema } from \"@/api/block-schemas\";\nimport type { BlockType } from \"@/api/block-types\";\nimport { BlockTypeDetails } from \"@/components/blocks/block-type-details\";\nimport {\n\tLazySchemaForm,\n\ttype PrefectSchemaObject,\n\tuseSchemaForm,\n} from \"@/components/schemas\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { BlockDocumentCreatePageHeader } from \"./block-document-create-page-header\";\n\ntype BlockDocumentCreatePageProps = {\n\tblockSchema: BlockSchema;\n\tblockType: BlockType;\n};\n\n// Letters, numbers, and dashes only\nconst BLOCK_NAME_REGEX = /^[a-zA-Z0-9-]+$/;\n\nconst BlockNameFormSchema = z.object({\n\tblockName: z.string().regex(BLOCK_NAME_REGEX, {\n\t\tmessage: \"Name must only contain lowercase letters, numbers, and dashes\",\n\t}),\n});\n\nexport type BlockNameFormSchema = z.infer<typeof BlockNameFormSchema>;\nconst DEFAULT_VALUES: BlockNameFormSchema = {\n\tblockName: \"\",\n};\n\nexport const BlockDocumentCreatePage = ({\n\tblockSchema,\n\tblockType,\n}: BlockDocumentCreatePageProps) => {\n\tconst navigate = useNavigate();\n\tconst { values, setValues, errors, validateForm } = useSchemaForm();\n\tconst { createBlockDocument, isPending } = useCreateBlockDocument();\n\n\tconst form = useForm({\n\t\tresolver: zodResolver(BlockNameFormSchema),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\n\tconst onSave = async (zodFormValues: BlockNameFormSchema) => {\n\t\ttry {\n\t\t\tawait validateForm({ schema: values });\n\t\t\t// Early exit if there's errors from block schema validation\n\t\t\tif (errors.length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcreateBlockDocument(\n\t\t\t\t{\n\t\t\t\t\tblock_schema_id: blockSchema.id,\n\t\t\t\t\tblock_type_id: blockType.id,\n\t\t\t\t\tis_anonymous: false,\n\t\t\t\t\tdata: values,\n\t\t\t\t\tname: zodFormValues.blockName,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonSuccess: (res) => {\n\t\t\t\t\t\ttoast.success(\"Block created successfully\");\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/blocks/block/$id\",\n\t\t\t\t\t\t\tparams: { id: res.id },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tonError: (err) => {\n\t\t\t\t\t\tconst message = \"Unknown error while creating block.\";\n\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\tconsole.error(message, err);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tconst message = \"Unknown error while validating block data.\";\n\t\t\ttoast.error(message);\n\t\t\tconsole.error(message, err);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-6\">\n\t\t\t<BlockDocumentCreatePageHeader blockType={blockType} />\n\t\t\t<Card className=\" p-6 grid grid-cols-[minmax(0,_1fr)_250px] gap-4 \">\n\t\t\t\t<Form {...form}>\n\t\t\t\t\t<form\n\t\t\t\t\t\tclassName=\"flex flex-col gap-4\"\n\t\t\t\t\t\tonSubmit={(e) => void form.handleSubmit(onSave)(e)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"blockName\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input {...field} value={field.value} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<LazySchemaForm\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonValuesChange={setValues}\n\t\t\t\t\t\t\terrors={errors}\n\t\t\t\t\t\t\tkinds={[\"json\"]}\n\t\t\t\t\t\t\tschema={blockSchema.fields as unknown as PrefectSchemaObject}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className=\"flex gap-3 justify-end\">\n\t\t\t\t\t\t\t<Button variant=\"secondary\">\n\t\t\t\t\t\t\t\t<Link to=\"/blocks/catalog\">Cancel</Link>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button loading={isPending} type=\"submit\">\n\t\t\t\t\t\t\t\tSave\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</form>\n\t\t\t\t</Form>\n\t\t\t\t<BlockTypeDetails blockType={blockType} />\n\t\t\t</Card>\n\t\t</div>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { buildListFilterBlockSchemasQuery } from \"@/api/block-schemas\";\nimport { buildGetBlockTypeQuery } from \"@/api/block-types\";\nimport { BlockDocumentCreatePage } from \"@/components/blocks/block-document-create-page\";\n\nexport const Route = createFileRoute(\"/blocks/catalog_/$slug_/create\")({\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// critical data\n\t\tconst res = await queryClient.ensureQueryData(\n\t\t\tbuildGetBlockTypeQuery(params.slug),\n\t\t);\n\t\tvoid queryClient.ensureQueryData(\n\t\t\tbuildListFilterBlockSchemasQuery({\n\t\t\t\tblock_schemas: {\n\t\t\t\t\tblock_type_id: { any_: [res.id] },\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t},\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t);\n\t},\n\twrapInSuspense: true,\n});\n\nfunction RouteComponent() {\n\tconst { slug } = Route.useParams();\n\tconst { data: blockType } = useSuspenseQuery(buildGetBlockTypeQuery(slug));\n\tconst { data: blockSchemas } = useSuspenseQuery(\n\t\tbuildListFilterBlockSchemasQuery({\n\t\t\tblock_schemas: {\n\t\t\t\tblock_type_id: { any_: [blockType.id] },\n\t\t\t\toperator: \"and_\",\n\t\t\t},\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\tconst blockSchema = blockSchemas[0];\n\tif (!blockSchema) {\n\t\tthrow new Error(\"Block schema not found\");\n\t}\n\n\treturn (\n\t\t<BlockDocumentCreatePage blockSchema={blockSchema} blockType={blockType} />\n\t);\n}\n"],"names":["BlockDocumentCreatePageHeader","blockType","jsx","Breadcrumb","jsxs","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","BLOCK_NAME_REGEX","BlockNameFormSchema","z.object","z.string","DEFAULT_VALUES","BlockDocumentCreatePage","blockSchema","navigate","useNavigate","values","setValues","errors","validateForm","useSchemaForm","createBlockDocument","isPending","useCreateBlockDocument","form","useForm","zodResolver","onSave","zodFormValues","res","toast","err","message","Card","Form","e","FormField","field","FormItem","FormLabel","FormControl","Input","FormMessage","LazySchemaForm","Button","Link","BlockTypeDetails","RouteComponent","slug","Route","useParams","data","useSuspenseQuery","buildGetBlockTypeQuery","blockSchemas","buildListFilterBlockSchemasQuery","block_schemas","block_type_id","any_","id","operator","offset","Error"],"mappings":"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"}
1
+ {"version":3,"file":"catalog_._slug_.create-l9bGUPi-.js","sources":["../../src/components/blocks/block-document-create-page/block-document-create-page-header.tsx","../../src/components/blocks/block-document-create-page/block-document-create-page.tsx","../../src/routes/blocks/catalog_.$slug_.create.tsx?tsr-split=component"],"sourcesContent":["import type { BlockType } from \"@/api/block-types\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype BlockDocumentCreatePageHeaderProps = {\n\tblockType: BlockType;\n};\n\nexport const BlockDocumentCreatePageHeader = ({\n\tblockType,\n}: BlockDocumentCreatePageHeaderProps) => {\n\treturn (\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink to=\"/blocks\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tBlocks\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\tto=\"/blocks/catalog\"\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\tCatalog\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\tto=\"/blocks/catalog\"\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{blockType.name}\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t<BreadcrumbPage>Create</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Link, useNavigate } from \"@tanstack/react-router\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { useCreateBlockDocument } from \"@/api/block-documents\";\nimport type { BlockSchema } from \"@/api/block-schemas\";\nimport type { BlockType } from \"@/api/block-types\";\nimport { BlockTypeDetails } from \"@/components/blocks/block-type-details\";\nimport {\n\tLazySchemaForm,\n\ttype PrefectSchemaObject,\n\tuseSchemaForm,\n} from \"@/components/schemas\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { BlockDocumentCreatePageHeader } from \"./block-document-create-page-header\";\n\ntype BlockDocumentCreatePageProps = {\n\tblockSchema: BlockSchema;\n\tblockType: BlockType;\n};\n\n// Letters, numbers, and dashes only\nconst BLOCK_NAME_REGEX = /^[a-zA-Z0-9-]+$/;\n\nconst BlockNameFormSchema = z.object({\n\tblockName: z.string().regex(BLOCK_NAME_REGEX, {\n\t\tmessage: \"Name must only contain lowercase letters, numbers, and dashes\",\n\t}),\n});\n\nexport type BlockNameFormSchema = z.infer<typeof BlockNameFormSchema>;\nconst DEFAULT_VALUES: BlockNameFormSchema = {\n\tblockName: \"\",\n};\n\nexport const BlockDocumentCreatePage = ({\n\tblockSchema,\n\tblockType,\n}: BlockDocumentCreatePageProps) => {\n\tconst navigate = useNavigate();\n\tconst { values, setValues, errors, validateForm } = useSchemaForm();\n\tconst { createBlockDocument, isPending } = useCreateBlockDocument();\n\n\tconst form = useForm({\n\t\tresolver: zodResolver(BlockNameFormSchema),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\n\tconst onSave = async (zodFormValues: BlockNameFormSchema) => {\n\t\ttry {\n\t\t\tawait validateForm({ schema: values });\n\t\t\t// Early exit if there's errors from block schema validation\n\t\t\tif (errors.length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcreateBlockDocument(\n\t\t\t\t{\n\t\t\t\t\tblock_schema_id: blockSchema.id,\n\t\t\t\t\tblock_type_id: blockType.id,\n\t\t\t\t\tis_anonymous: false,\n\t\t\t\t\tdata: values,\n\t\t\t\t\tname: zodFormValues.blockName,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonSuccess: (res) => {\n\t\t\t\t\t\ttoast.success(\"Block created successfully\");\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/blocks/block/$id\",\n\t\t\t\t\t\t\tparams: { id: res.id },\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tonError: (err) => {\n\t\t\t\t\t\tconst message = \"Unknown error while creating block.\";\n\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\tconsole.error(message, err);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tconst message = \"Unknown error while validating block data.\";\n\t\t\ttoast.error(message);\n\t\t\tconsole.error(message, err);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-6\">\n\t\t\t<BlockDocumentCreatePageHeader blockType={blockType} />\n\t\t\t<Card className=\" p-6 grid grid-cols-[minmax(0,_1fr)_250px] gap-4 \">\n\t\t\t\t<Form {...form}>\n\t\t\t\t\t<form\n\t\t\t\t\t\tclassName=\"flex flex-col gap-4\"\n\t\t\t\t\t\tonSubmit={(e) => void form.handleSubmit(onSave)(e)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\t\tname=\"blockName\"\n\t\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t\t<Input {...field} value={field.value} />\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<LazySchemaForm\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonValuesChange={setValues}\n\t\t\t\t\t\t\terrors={errors}\n\t\t\t\t\t\t\tkinds={[\"json\"]}\n\t\t\t\t\t\t\tschema={blockSchema.fields as unknown as PrefectSchemaObject}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className=\"flex gap-3 justify-end\">\n\t\t\t\t\t\t\t<Button variant=\"secondary\">\n\t\t\t\t\t\t\t\t<Link to=\"/blocks/catalog\">Cancel</Link>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button loading={isPending} type=\"submit\">\n\t\t\t\t\t\t\t\tSave\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</form>\n\t\t\t\t</Form>\n\t\t\t\t<BlockTypeDetails blockType={blockType} />\n\t\t\t</Card>\n\t\t</div>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { buildListFilterBlockSchemasQuery } from \"@/api/block-schemas\";\nimport { buildGetBlockTypeQuery } from \"@/api/block-types\";\nimport { BlockDocumentCreatePage } from \"@/components/blocks/block-document-create-page\";\n\nexport const Route = createFileRoute(\"/blocks/catalog_/$slug_/create\")({\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// critical data\n\t\tconst res = await queryClient.ensureQueryData(\n\t\t\tbuildGetBlockTypeQuery(params.slug),\n\t\t);\n\t\tvoid queryClient.ensureQueryData(\n\t\t\tbuildListFilterBlockSchemasQuery({\n\t\t\t\tblock_schemas: {\n\t\t\t\t\tblock_type_id: { any_: [res.id] },\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t},\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t);\n\t},\n\twrapInSuspense: true,\n});\n\nfunction RouteComponent() {\n\tconst { slug } = Route.useParams();\n\tconst { data: blockType } = useSuspenseQuery(buildGetBlockTypeQuery(slug));\n\tconst { data: blockSchemas } = useSuspenseQuery(\n\t\tbuildListFilterBlockSchemasQuery({\n\t\t\tblock_schemas: {\n\t\t\t\tblock_type_id: { any_: [blockType.id] },\n\t\t\t\toperator: \"and_\",\n\t\t\t},\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\tconst blockSchema = blockSchemas[0];\n\tif (!blockSchema) {\n\t\tthrow new Error(\"Block schema not found\");\n\t}\n\n\treturn (\n\t\t<BlockDocumentCreatePage blockSchema={blockSchema} blockType={blockType} />\n\t);\n}\n"],"names":["BlockDocumentCreatePageHeader","blockType","jsx","Breadcrumb","jsxs","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","BLOCK_NAME_REGEX","BlockNameFormSchema","z.object","z.string","DEFAULT_VALUES","BlockDocumentCreatePage","blockSchema","navigate","useNavigate","values","setValues","errors","validateForm","useSchemaForm","createBlockDocument","isPending","useCreateBlockDocument","form","useForm","zodResolver","onSave","zodFormValues","res","toast","err","message","Card","Form","e","FormField","field","FormItem","FormLabel","FormControl","Input","FormMessage","LazySchemaForm","Button","Link","BlockTypeDetails","RouteComponent","slug","Route","useParams","data","useSuspenseQuery","buildGetBlockTypeQuery","blockSchemas","buildListFilterBlockSchemasQuery","block_schemas","block_type_id","any_","id","operator","offset","Error"],"mappings":"s3BAcO,MAAMA,EAAgC,CAAC,CAC7C,UAAAC,CACD,IAEEC,EAAAA,IAACC,EAAA,CACA,SAAAC,EAAAA,KAACC,EAAA,CACA,SAAA,CAAAH,EAAAA,IAACI,EAAA,CACA,eAACC,EAAA,CAAe,GAAG,UAAU,UAAU,wBAAwB,kBAE/D,CAAA,CACD,QACCC,EAAA,EAAoB,QAEpBF,EAAA,CACA,SAAAJ,EAAAA,IAACK,EAAA,CACA,GAAG,kBACH,UAAU,wBACV,SAAA,SAAA,CAAA,EAGF,QACCC,EAAA,EAAoB,QAEpBF,EAAA,CACA,SAAAJ,EAAAA,IAACK,EAAA,CACA,GAAG,kBACH,UAAU,wBAET,SAAAN,EAAU,IAAA,CAAA,EAEb,QACCO,EAAA,EAAoB,QAEpBF,EAAA,CAAe,UAAU,wBACzB,SAAAJ,EAAAA,IAACO,EAAA,CAAe,kBAAM,CAAA,CACvB,CAAA,CAAA,CACD,CAAA,CACD,EClBIC,EAAmB,kBAEnBC,EAAsBC,EAAS,CACpC,UAAWC,EAAE,EAAS,MAAMH,EAAkB,CAC7C,QAAS,+DAAA,CACT,CACF,CAAC,EAGKI,EAAsC,CAC3C,UAAW,EACZ,EAEaC,EAA0B,CAAC,CACvC,YAAAC,EACA,UAAAf,CACD,IAAoC,CACnC,MAAMgB,EAAWC,EAAA,EACX,CAAE,OAAAC,EAAQ,UAAAC,EAAW,OAAAC,EAAQ,aAAAC,CAAA,EAAiBC,EAAA,EAC9C,CAAE,oBAAAC,EAAqB,UAAAC,CAAA,EAAcC,EAAA,EAErCC,EAAOC,EAAQ,CACpB,SAAUC,EAAYlB,CAAmB,EACzC,cAAeG,CAAA,CACf,EAEKgB,EAAS,MAAOC,GAAuC,CAC5D,GAAI,CAGH,GAFA,MAAMT,EAAa,CAAE,OAAQH,EAAQ,EAEjCE,EAAO,OAAS,EACnB,OAEDG,EACC,CACC,gBAAiBR,EAAY,GAC7B,cAAef,EAAU,GACzB,aAAc,GACd,KAAMkB,EACN,KAAMY,EAAc,SAAA,EAErB,CACC,UAAYC,GAAQ,CACnBC,EAAM,QAAQ,4BAA4B,EACrChB,EAAS,CACb,GAAI,oBACJ,OAAQ,CAAE,GAAIe,EAAI,EAAA,CAAG,CACrB,CACF,EACA,QAAUE,GAAQ,CACjB,MAAMC,EAAU,sCAChBF,EAAM,MAAME,CAAO,EACnB,QAAQ,MAAMA,EAASD,CAAG,CAC3B,CAAA,CACD,CAEF,OAASA,EAAK,CACb,MAAMC,EAAU,6CAChBF,EAAM,MAAME,CAAO,EACnB,QAAQ,MAAMA,EAASD,CAAG,CAC3B,CACD,EAEA,OACC9B,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAF,MAACF,GAA8B,UAAAC,EAAsB,EACrDG,EAAAA,KAACgC,EAAA,CAAK,UAAU,oDACf,SAAA,CAAAlC,EAAAA,IAACmC,EAAA,CAAM,GAAGV,EACT,SAAAvB,EAAAA,KAAC,OAAA,CACA,UAAU,sBACV,SAAWkC,IAAWX,EAAK,aAAaG,CAAM,EAAEQ,CAAC,GAEjD,SAAA,CAAApC,EAAAA,IAACqC,EAAA,CACA,QAASZ,EAAK,QACd,KAAK,YACL,OAAQ,CAAC,CAAE,MAAAa,CAAA,WACTC,EAAA,CACA,SAAA,CAAAvC,EAAAA,IAACwC,GAAU,SAAA,MAAA,CAAI,EACfxC,EAAAA,IAACyC,GACA,SAAAzC,EAAAA,IAAC0C,EAAA,CAAO,GAAGJ,EAAO,MAAOA,EAAM,KAAA,CAAO,CAAA,CACvC,QACCK,EAAA,CAAA,CAAY,CAAA,CAAA,CACd,CAAA,CAAA,EAIF3C,EAAAA,IAAC4C,EAAA,CACA,OAAA3B,EACA,eAAgBC,EAChB,OAAAC,EACA,MAAO,CAAC,MAAM,EACd,OAAQL,EAAY,MAAA,CAAA,EAErBZ,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACd,SAAA,CAAAF,EAAAA,IAAC6C,EAAA,CAAO,QAAQ,YACf,SAAA7C,EAAAA,IAAC8C,GAAK,GAAG,kBAAkB,kBAAM,CAAA,CAClC,QACCD,EAAA,CAAO,QAAStB,EAAW,KAAK,SAAS,SAAA,MAAA,CAE1C,CAAA,CAAA,CACD,CAAA,CAAA,CAAA,EAEF,EACAvB,MAAC+C,GAAiB,UAAAhD,CAAA,CAAsB,CAAA,CAAA,CACzC,CAAA,EACD,CAEF,EClHA,SAASiD,IAAiB,CACzB,KAAM,CAAEC,KAAAA,CAAAA,EAASC,EAAMC,UAAAA,EACjB,CAAEC,KAAMrD,CAAAA,EAAcsD,EAAiBC,EAAuBL,CAAI,CAAC,EACnE,CAAEG,KAAMG,CAAAA,EAAiBF,EAC9BG,EAAiC,CAChCC,cAAe,CACdC,cAAe,CAAEC,KAAM,CAAC5D,EAAU6D,EAAE,CAAA,EACpCC,SAAU,MAAA,EAEXC,OAAQ,CAAA,CACR,CACF,EACMhD,EAAcyC,EAAa,CAAC,EAClC,GAAI,CAACzC,EACJ,MAAM,IAAIiD,MAAM,wBAAwB,EAGzC,OACC/D,EAAAA,IAACa,EAAA,CAAwB,YAAAC,EAA0B,UAAAf,CAAA,CAAqB,CAE1E"}
@@ -1,2 +1,2 @@
1
- import{t as l,r as d,j as s}from"./vendor-tanstack-BK8oseNA.js";import{bp as p,bn as c,cL as m,aa as f,K as b,c_ as y}from"./index-WYPZo52S.js";import{au as w,av as k,aw as Q}from"./vendor-radix-CznP1SOq.js";const I=()=>{const[{data:o},{data:r},{data:a},{data:n},{data:u},{data:i}]=l({queries:[p(),c(),m(),f(),b(),y()]});return{resourceOptions:d.useMemo(()=>{const t=[];for(const e of o??[])t.push({id:e.id,name:e.name,type:"automation",resourceId:`prefect.automation.${e.id}`});for(const e of r??[])t.push({id:e.id,name:e.name??"",type:"block",resourceId:`prefect.block-document.${e.id}`});for(const e of a??[])t.push({id:e.id,name:e.name,type:"deployment",resourceId:`prefect.deployment.${e.id}`});for(const e of n??[])t.push({id:e.id,name:e.name,type:"flow",resourceId:`prefect.flow.${e.id}`});for(const e of u??[])t.push({id:e.name,name:e.name,type:"work-pool",resourceId:`prefect.work-pool.${e.name}`});for(const e of i??[])t.push({id:e.id,name:e.name,type:"work-queue",resourceId:`prefect.work-queue.${e.id}`});return t},[o,r,a,n,u,i])}};function $({...o}){return s.jsx(w,{"data-slot":"collapsible",...o})}function j({...o}){return s.jsx(k,{"data-slot":"collapsible-trigger",...o})}function F({...o}){return s.jsx(Q,{"data-slot":"collapsible-content",...o})}export{$ as C,j as a,F as b,I as u};
2
- //# sourceMappingURL=collapsible-DBD7wjpi.js.map
1
+ import{t as l,r as d,j as s}from"./vendor-tanstack-BK8oseNA.js";import{br as p,bp as c,cO as m,ab as f,M as b,d1 as y}from"./index-BvSl3DKP.js";import{au as w,av as k,aw as Q}from"./vendor-radix-CznP1SOq.js";const I=()=>{const[{data:o},{data:r},{data:a},{data:u},{data:n},{data:i}]=l({queries:[p(),c(),m(),f(),b(),y()]});return{resourceOptions:d.useMemo(()=>{const t=[];for(const e of o??[])t.push({id:e.id,name:e.name,type:"automation",resourceId:`prefect.automation.${e.id}`});for(const e of r??[])t.push({id:e.id,name:e.name??"",type:"block",resourceId:`prefect.block-document.${e.id}`});for(const e of a??[])t.push({id:e.id,name:e.name,type:"deployment",resourceId:`prefect.deployment.${e.id}`});for(const e of u??[])t.push({id:e.id,name:e.name,type:"flow",resourceId:`prefect.flow.${e.id}`});for(const e of n??[])t.push({id:e.name,name:e.name,type:"work-pool",resourceId:`prefect.work-pool.${e.name}`});for(const e of i??[])t.push({id:e.id,name:e.name,type:"work-queue",resourceId:`prefect.work-queue.${e.id}`});return t},[o,r,a,u,n,i])}};function $({...o}){return s.jsx(w,{"data-slot":"collapsible",...o})}function j({...o}){return s.jsx(k,{"data-slot":"collapsible-trigger",...o})}function F({...o}){return s.jsx(Q,{"data-slot":"collapsible-content",...o})}export{$ as C,j as a,F as b,I as u};
2
+ //# sourceMappingURL=collapsible-DM-Ze5-Y.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible-DBD7wjpi.js","sources":["../../src/components/events/events-resource-filter/use-resource-options.ts","../../src/components/ui/collapsible.tsx"],"sourcesContent":["import { useQueries } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { buildListAutomationsQuery } from \"@/api/automations\";\nimport { buildListFilterBlockDocumentsQuery } from \"@/api/block-documents\";\nimport { buildFilterDeploymentsQuery } from \"@/api/deployments\";\nimport { buildListFlowsQuery } from \"@/api/flows\";\nimport { buildFilterWorkPoolsQuery } from \"@/api/work-pools\";\nimport { buildFilterWorkQueuesQuery } from \"@/api/work-queues\";\n\nexport type ResourceOption = {\n\tid: string;\n\tname: string;\n\ttype:\n\t\t| \"automation\"\n\t\t| \"block\"\n\t\t| \"deployment\"\n\t\t| \"flow\"\n\t\t| \"work-pool\"\n\t\t| \"work-queue\";\n\tresourceId: string;\n};\n\nexport const useResourceOptions = (): { resourceOptions: ResourceOption[] } => {\n\tconst [\n\t\t{ data: automations },\n\t\t{ data: blocks },\n\t\t{ data: deployments },\n\t\t{ data: flows },\n\t\t{ data: workPools },\n\t\t{ data: workQueues },\n\t] = useQueries({\n\t\tqueries: [\n\t\t\tbuildListAutomationsQuery(),\n\t\t\tbuildListFilterBlockDocumentsQuery(),\n\t\t\tbuildFilterDeploymentsQuery(),\n\t\t\tbuildListFlowsQuery(),\n\t\t\tbuildFilterWorkPoolsQuery(),\n\t\t\tbuildFilterWorkQueuesQuery(),\n\t\t],\n\t});\n\n\tconst resourceOptions = useMemo(() => {\n\t\tconst options: ResourceOption[] = [];\n\n\t\tfor (const a of automations ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: a.id,\n\t\t\t\tname: a.name,\n\t\t\t\ttype: \"automation\",\n\t\t\t\tresourceId: `prefect.automation.${a.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const b of blocks ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: b.id,\n\t\t\t\tname: b.name ?? \"\",\n\t\t\t\ttype: \"block\",\n\t\t\t\tresourceId: `prefect.block-document.${b.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const d of deployments ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: d.id,\n\t\t\t\tname: d.name,\n\t\t\t\ttype: \"deployment\",\n\t\t\t\tresourceId: `prefect.deployment.${d.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const f of flows ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: f.id,\n\t\t\t\tname: f.name,\n\t\t\t\ttype: \"flow\",\n\t\t\t\tresourceId: `prefect.flow.${f.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const wp of workPools ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: wp.name,\n\t\t\t\tname: wp.name,\n\t\t\t\ttype: \"work-pool\",\n\t\t\t\tresourceId: `prefect.work-pool.${wp.name}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const wq of workQueues ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: wq.id,\n\t\t\t\tname: wq.name,\n\t\t\t\ttype: \"work-queue\",\n\t\t\t\tresourceId: `prefect.work-queue.${wq.id}`,\n\t\t\t});\n\t\t}\n\n\t\treturn options;\n\t}, [automations, blocks, deployments, flows, workPools, workQueues]);\n\n\treturn { resourceOptions };\n};\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport type * as React from \"react\";\n\nfunction Collapsible({\n\t...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n\treturn <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({\n\t...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Trigger>) {\n\treturn (\n\t\t<CollapsiblePrimitive.Trigger data-slot=\"collapsible-trigger\" {...props} />\n\t);\n}\n\nfunction CollapsibleContent({\n\t...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Content>) {\n\treturn (\n\t\t<CollapsiblePrimitive.Content data-slot=\"collapsible-content\" {...props} />\n\t);\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"],"names":["useResourceOptions","automations","blocks","deployments","flows","workPools","workQueues","useQueries","buildListAutomationsQuery","buildListFilterBlockDocumentsQuery","buildFilterDeploymentsQuery","buildListFlowsQuery","buildFilterWorkPoolsQuery","buildFilterWorkQueuesQuery","useMemo","options","a","b","d","f","wp","wq","Collapsible","props","CollapsiblePrimitive.Root","CollapsibleTrigger","CollapsiblePrimitive.Trigger","CollapsibleContent","CollapsiblePrimitive.Content"],"mappings":"gNAsBO,MAAMA,EAAqB,IAA6C,CAC9E,KAAM,CACL,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,CAAW,EAChBC,EAAW,CACd,QAAS,CACRC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,CAA2B,CAC5B,CACA,EA8DD,MAAO,CAAE,gBA5DeC,EAAAA,QAAQ,IAAM,CACrC,MAAMC,EAA4B,CAAA,EAElC,UAAWC,KAAKf,GAAe,GAC9Bc,EAAQ,KAAK,CACZ,GAAIC,EAAE,GACN,KAAMA,EAAE,KACR,KAAM,aACN,WAAY,sBAAsBA,EAAE,EAAE,EAAA,CACtC,EAGF,UAAWC,KAAKf,GAAU,GACzBa,EAAQ,KAAK,CACZ,GAAIE,EAAE,GACN,KAAMA,EAAE,MAAQ,GAChB,KAAM,QACN,WAAY,0BAA0BA,EAAE,EAAE,EAAA,CAC1C,EAGF,UAAWC,KAAKf,GAAe,GAC9BY,EAAQ,KAAK,CACZ,GAAIG,EAAE,GACN,KAAMA,EAAE,KACR,KAAM,aACN,WAAY,sBAAsBA,EAAE,EAAE,EAAA,CACtC,EAGF,UAAWC,KAAKf,GAAS,GACxBW,EAAQ,KAAK,CACZ,GAAII,EAAE,GACN,KAAMA,EAAE,KACR,KAAM,OACN,WAAY,gBAAgBA,EAAE,EAAE,EAAA,CAChC,EAGF,UAAWC,KAAMf,GAAa,GAC7BU,EAAQ,KAAK,CACZ,GAAIK,EAAG,KACP,KAAMA,EAAG,KACT,KAAM,YACN,WAAY,qBAAqBA,EAAG,IAAI,EAAA,CACxC,EAGF,UAAWC,KAAMf,GAAc,GAC9BS,EAAQ,KAAK,CACZ,GAAIM,EAAG,GACP,KAAMA,EAAG,KACT,KAAM,aACN,WAAY,sBAAsBA,EAAG,EAAE,EAAA,CACvC,EAGF,OAAON,CACR,EAAG,CAACd,EAAaC,EAAQC,EAAaC,EAAOC,EAAWC,CAAU,CAAC,CAE1D,CACV,ECnGA,SAASgB,EAAY,CACpB,GAAGC,CACJ,EAA2D,CAC1D,aAAQC,EAAA,CAA0B,YAAU,cAAe,GAAGD,EAAO,CACtE,CAEA,SAASE,EAAmB,CAC3B,GAAGF,CACJ,EAA8D,CAC7D,aACEG,EAAA,CAA6B,YAAU,sBAAuB,GAAGH,EAAO,CAE3E,CAEA,SAASI,EAAmB,CAC3B,GAAGJ,CACJ,EAA8D,CAC7D,aACEK,EAAA,CAA6B,YAAU,sBAAuB,GAAGL,EAAO,CAE3E"}
1
+ {"version":3,"file":"collapsible-DM-Ze5-Y.js","sources":["../../src/components/events/events-resource-filter/use-resource-options.ts","../../src/components/ui/collapsible.tsx"],"sourcesContent":["import { useQueries } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { buildListAutomationsQuery } from \"@/api/automations\";\nimport { buildListFilterBlockDocumentsQuery } from \"@/api/block-documents\";\nimport { buildFilterDeploymentsQuery } from \"@/api/deployments\";\nimport { buildListFlowsQuery } from \"@/api/flows\";\nimport { buildFilterWorkPoolsQuery } from \"@/api/work-pools\";\nimport { buildFilterWorkQueuesQuery } from \"@/api/work-queues\";\n\nexport type ResourceOption = {\n\tid: string;\n\tname: string;\n\ttype:\n\t\t| \"automation\"\n\t\t| \"block\"\n\t\t| \"deployment\"\n\t\t| \"flow\"\n\t\t| \"work-pool\"\n\t\t| \"work-queue\";\n\tresourceId: string;\n};\n\nexport const useResourceOptions = (): { resourceOptions: ResourceOption[] } => {\n\tconst [\n\t\t{ data: automations },\n\t\t{ data: blocks },\n\t\t{ data: deployments },\n\t\t{ data: flows },\n\t\t{ data: workPools },\n\t\t{ data: workQueues },\n\t] = useQueries({\n\t\tqueries: [\n\t\t\tbuildListAutomationsQuery(),\n\t\t\tbuildListFilterBlockDocumentsQuery(),\n\t\t\tbuildFilterDeploymentsQuery(),\n\t\t\tbuildListFlowsQuery(),\n\t\t\tbuildFilterWorkPoolsQuery(),\n\t\t\tbuildFilterWorkQueuesQuery(),\n\t\t],\n\t});\n\n\tconst resourceOptions = useMemo(() => {\n\t\tconst options: ResourceOption[] = [];\n\n\t\tfor (const a of automations ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: a.id,\n\t\t\t\tname: a.name,\n\t\t\t\ttype: \"automation\",\n\t\t\t\tresourceId: `prefect.automation.${a.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const b of blocks ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: b.id,\n\t\t\t\tname: b.name ?? \"\",\n\t\t\t\ttype: \"block\",\n\t\t\t\tresourceId: `prefect.block-document.${b.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const d of deployments ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: d.id,\n\t\t\t\tname: d.name,\n\t\t\t\ttype: \"deployment\",\n\t\t\t\tresourceId: `prefect.deployment.${d.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const f of flows ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: f.id,\n\t\t\t\tname: f.name,\n\t\t\t\ttype: \"flow\",\n\t\t\t\tresourceId: `prefect.flow.${f.id}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const wp of workPools ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: wp.name,\n\t\t\t\tname: wp.name,\n\t\t\t\ttype: \"work-pool\",\n\t\t\t\tresourceId: `prefect.work-pool.${wp.name}`,\n\t\t\t});\n\t\t}\n\n\t\tfor (const wq of workQueues ?? []) {\n\t\t\toptions.push({\n\t\t\t\tid: wq.id,\n\t\t\t\tname: wq.name,\n\t\t\t\ttype: \"work-queue\",\n\t\t\t\tresourceId: `prefect.work-queue.${wq.id}`,\n\t\t\t});\n\t\t}\n\n\t\treturn options;\n\t}, [automations, blocks, deployments, flows, workPools, workQueues]);\n\n\treturn { resourceOptions };\n};\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport type * as React from \"react\";\n\nfunction Collapsible({\n\t...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n\treturn <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({\n\t...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Trigger>) {\n\treturn (\n\t\t<CollapsiblePrimitive.Trigger data-slot=\"collapsible-trigger\" {...props} />\n\t);\n}\n\nfunction CollapsibleContent({\n\t...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Content>) {\n\treturn (\n\t\t<CollapsiblePrimitive.Content data-slot=\"collapsible-content\" {...props} />\n\t);\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"],"names":["useResourceOptions","automations","blocks","deployments","flows","workPools","workQueues","useQueries","buildListAutomationsQuery","buildListFilterBlockDocumentsQuery","buildFilterDeploymentsQuery","buildListFlowsQuery","buildFilterWorkPoolsQuery","buildFilterWorkQueuesQuery","useMemo","options","a","b","d","f","wp","wq","Collapsible","props","CollapsiblePrimitive.Root","CollapsibleTrigger","CollapsiblePrimitive.Trigger","CollapsibleContent","CollapsiblePrimitive.Content"],"mappings":"gNAsBO,MAAMA,EAAqB,IAA6C,CAC9E,KAAM,CACL,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,EACR,CAAE,KAAMC,CAAA,CAAW,EAChBC,EAAW,CACd,QAAS,CACRC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,CAA2B,CAC5B,CACA,EA8DD,MAAO,CAAE,gBA5DeC,EAAAA,QAAQ,IAAM,CACrC,MAAMC,EAA4B,CAAA,EAElC,UAAWC,KAAKf,GAAe,GAC9Bc,EAAQ,KAAK,CACZ,GAAIC,EAAE,GACN,KAAMA,EAAE,KACR,KAAM,aACN,WAAY,sBAAsBA,EAAE,EAAE,EAAA,CACtC,EAGF,UAAWC,KAAKf,GAAU,GACzBa,EAAQ,KAAK,CACZ,GAAIE,EAAE,GACN,KAAMA,EAAE,MAAQ,GAChB,KAAM,QACN,WAAY,0BAA0BA,EAAE,EAAE,EAAA,CAC1C,EAGF,UAAWC,KAAKf,GAAe,GAC9BY,EAAQ,KAAK,CACZ,GAAIG,EAAE,GACN,KAAMA,EAAE,KACR,KAAM,aACN,WAAY,sBAAsBA,EAAE,EAAE,EAAA,CACtC,EAGF,UAAWC,KAAKf,GAAS,GACxBW,EAAQ,KAAK,CACZ,GAAII,EAAE,GACN,KAAMA,EAAE,KACR,KAAM,OACN,WAAY,gBAAgBA,EAAE,EAAE,EAAA,CAChC,EAGF,UAAWC,KAAMf,GAAa,GAC7BU,EAAQ,KAAK,CACZ,GAAIK,EAAG,KACP,KAAMA,EAAG,KACT,KAAM,YACN,WAAY,qBAAqBA,EAAG,IAAI,EAAA,CACxC,EAGF,UAAWC,KAAMf,GAAc,GAC9BS,EAAQ,KAAK,CACZ,GAAIM,EAAG,GACP,KAAMA,EAAG,KACT,KAAM,aACN,WAAY,sBAAsBA,EAAG,EAAE,EAAA,CACvC,EAGF,OAAON,CACR,EAAG,CAACd,EAAaC,EAAQC,EAAaC,EAAOC,EAAWC,CAAU,CAAC,CAE1D,CACV,ECnGA,SAASgB,EAAY,CACpB,GAAGC,CACJ,EAA2D,CAC1D,aAAQC,EAAA,CAA0B,YAAU,cAAe,GAAGD,EAAO,CACtE,CAEA,SAASE,EAAmB,CAC3B,GAAGF,CACJ,EAA8D,CAC7D,aACEG,EAAA,CAA6B,YAAU,sBAAuB,GAAGH,EAAO,CAE3E,CAEA,SAASI,EAAmB,CAC3B,GAAGJ,CACJ,EAA8D,CAC7D,aACEK,EAAA,CAA6B,YAAU,sBAAuB,GAAGL,EAAO,CAE3E"}
@@ -1,2 +1,2 @@
1
- import{j as e,c as L,u as D,F as R,r as S,p as A,M as E}from"./vendor-tanstack-BK8oseNA.js";import{C as y,cm as _,V as w,ap as B,B as b,g as f,h as c,bq as m,bz as x,I as v,ak as N,aq as V,aU as I,bB as M,au as O,av as P,aw as U,ax as G,cN as $,b3 as h,cO as z}from"./index-WYPZo52S.js";import{f as p,p as j}from"./vendor-date-7GxEwcQM.js";import{T as F,a as H,b as q}from"./task-run-concurrency-limits-reset-dialog-CG3den1B.js";import{o as Q,e as K}from"./vendor-forms-DxqqmhL5.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./dropdown-menu-xZ_3w9OP.js";const J=({flowRun:s,taskRun:a})=>{if(a){const{state:t,start_time:r,tags:n,estimated_run_time:i}=a;return{state:t,start_time:r,tags:n,estimated_run_time:i}}if(s){const{state:t,start_time:r,tags:n,estimated_run_time:i}=s;return{state:t,start_time:r,tags:n,estimated_run_time:i}}throw new Error("Expecting taskRun or flowRun to be defined")},W=({flow:s,flowRun:a,taskRun:t})=>{const{state:r,start_time:n,tags:i,estimated_run_time:l}=J({flowRun:a,taskRun:t});return e.jsxs(y,{className:ee({state:r?.type}),children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx(X,{flow:s,flowRun:a,taskRun:t}),e.jsx("div",{children:e.jsx(w,{maxTagsDisplayed:5,tags:i})})]}),e.jsxs("div",{className:"flex gap-2 items-center text-slate-600",children:[r&&e.jsx(B,{type:r.type,name:r.name}),n&&e.jsx(Z,{time:n}),e.jsx(Y,{duration:l})]})]})},X=({flow:s,flowRun:a,taskRun:t})=>{if(!s&&!a&&!t)throw new Error("Expecting flow, flowRun, or taskRun");return e.jsx(b,{children:e.jsxs(f,{children:[s&&e.jsx(c,{children:e.jsx(m,{className:"text-lg font-semibold",to:"/flows/flow/$id",params:{id:s.id},children:s.name})}),s&&a&&e.jsx(x,{}),a&&e.jsx(c,{children:e.jsx(m,{to:"/runs/flow-run/$id",params:{id:a.id},children:a.name})}),a&&t&&e.jsx(x,{}),t&&e.jsx(c,{children:e.jsx(m,{to:"/runs/task-run/$id",params:{id:t.id},children:t.name})})]})})},Y=({duration:s})=>e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(v,{id:"Clock",className:"size-4"}),e.jsx(N,{variant:"bodySmall",children:V(s,{maxDecimalPoints:3,units:["s"]})})]}),Z=({time:s})=>e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(v,{id:"Calendar",className:"size-4"}),e.jsx(N,{variant:"bodySmall",className:"font-mono",children:p(j(s),"yyyy/MM/dd pp")})]}),ee=_("flex flex-col gap-2 p-4 border-l-8",{variants:{state:{COMPLETED:"border-l-green-600",FAILED:"border-l-red-600",RUNNING:"border-l-blue-700",CANCELLED:"border-l-gray-800",CANCELLING:"border-l-gray-800",CRASHED:"border-l-orange-600",PAUSED:"border-l-gray-800",PENDING:"border-l-gray-800",SCHEDULED:"border-l-yellow-700"}}}),se=({data:s})=>e.jsx("ul",{className:"flex flex-col gap-2",children:s.map(a=>e.jsx("li",{children:e.jsx(W,{flow:a.flow,flowRun:a.flowRun,taskRun:a.taskRun})},a.taskRun.id))}),ae=({data:s})=>e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("dl",{className:"flex flex-col gap-2",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Tag"}),e.jsx("dd",{className:"text-sm font-medium leading-none",children:s.tag})]}),e.jsx("hr",{}),e.jsx("dl",{className:"flex flex-col gap-2",children:te(s).map(a=>e.jsxs(L.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:a.label}),e.jsx("dd",{className:I("text-sm font-medium leading-none",a.formatType==="date"&&"font-mono"),children:a.value})]},a.label))})]}),te=s=>[{label:"Concurrency Limit Count",value:s.concurrency_limit,formatType:"number"},{label:"Concurrency Limit Active Task Run",value:s.active_slots?.length??"Unknown",formatType:"number"},{label:"Concurrency Limit ID",value:s.id??"Unknown",formatType:"number"},{label:"Created",value:s.created?p(j(s.created),"yyyy/MM/dd pp"):"N/A",formatType:"date"},{label:"Updated",value:s.updated?p(j(s.updated),"yyyy/MM/dd pp"):"N/A",formatType:"date"}],re=({tag:s})=>e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(b,{children:e.jsxs(f,{children:[e.jsx(c,{children:e.jsx(m,{to:"/concurrency-limits",className:"text-xl font-semibold",children:"Concurrency Limits"})}),e.jsx(x,{}),e.jsx(c,{className:"text-xl font-semibold",children:e.jsx(M,{children:s})})]})})}),ne=({data:s,onDelete:a,onReset:t})=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(re,{tag:s.tag}),e.jsx(F,{id:s.id,onDelete:a,onReset:t})]}),ie=({data:s,openDialog:a,onCloseDialog:t,onOpenChange:r})=>{const n=D(),i=()=>{t(),n({to:"/concurrency-limits",search:{tab:"task-run"}})};switch(a){case"reset":return e.jsx(q,{data:s,onOpenChange:r,onReset:t});case"delete":return e.jsx(H,{data:s,onOpenChange:r,onDelete:i});default:return null}},g=R("/concurrency-limits/concurrency-limit/$id"),d={"active-task-runs":{tabSearchValue:"active-task-runs",displayValue:"Active Task Runs"}},ce=({children:s})=>{const{tab:a}=g.useSearch(),t=g.useNavigate();return e.jsxs(O,{defaultValue:"Global",value:a,children:[e.jsx(P,{children:e.jsx(U,{value:d["active-task-runs"].tabSearchValue,onClick:()=>{t({to:"/concurrency-limits/concurrency-limit/$id",search:{tab:d["active-task-runs"].tabSearchValue}})},children:d["active-task-runs"].displayValue})}),e.jsx(G,{value:d["active-task-runs"].tabSearchValue,children:s})]})},le=({id:s})=>{const[a,t]=S.useState(null),{data:r}=A($(s)),n=()=>t("delete"),i=()=>t("reset"),l=()=>t(null),T=u=>{u||l()},{activeTaskRunsPromise:C,taskRunConcurrencyLimit:o}=r,k=o.active_slots?.length;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(ne,{data:o,onDelete:n,onReset:i}),e.jsxs("div",{className:"grid gap-4",style:{gridTemplateColumns:"3fr 1fr"},children:[e.jsx(ce,{children:e.jsx(E,{promise:C,fallback:e.jsx(oe,{length:k}),children:u=>e.jsx(se,{data:u})})}),e.jsx(ae,{data:o})]})]}),e.jsx(ie,{data:o,openDialog:a,onOpenChange:T,onCloseDialog:l})]})},oe=({length:s=0})=>e.jsx("div",{className:"flex flex-col gap-4",children:Array.from({length:s},(a,t)=>e.jsxs(y,{className:"p-4 space-y-4",children:[e.jsx(h,{className:"h-4 w-[350px]"}),e.jsx(h,{className:"h-4 w-[400px]"})]},t))});Q({tab:K(["active-task-runs"]).default("active-task-runs")});function be(){const{id:s}=z.useParams();return e.jsx(le,{id:s})}export{be as component};
2
- //# sourceMappingURL=concurrency-limit._id-C-XWq7Tf.js.map
1
+ import{j as e,c as D,u as L,F as R,r as S,p as A,M as E}from"./vendor-tanstack-BK8oseNA.js";import{C as y,cq as _,X as w,aq as B,B as b,g as f,h as c,bs as m,bB as x,I as v,al as N,ar as I,aW as V,bD as M,aw as P,ax as O,ay as U,az as G,cQ as $,b5 as h,cR as z}from"./index-BvSl3DKP.js";import{f as p,p as j}from"./vendor-date-7GxEwcQM.js";import{T as F,a as H,b as Q}from"./task-run-concurrency-limits-reset-dialog-CJzPc2gw.js";import{o as q,e as K}from"./vendor-forms-DxqqmhL5.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./dropdown-menu-CT-s-V7d.js";const W=({flowRun:s,taskRun:a})=>{if(a){const{state:t,start_time:r,tags:n,estimated_run_time:i}=a;return{state:t,start_time:r,tags:n,estimated_run_time:i}}if(s){const{state:t,start_time:r,tags:n,estimated_run_time:i}=s;return{state:t,start_time:r,tags:n,estimated_run_time:i}}throw new Error("Expecting taskRun or flowRun to be defined")},X=({flow:s,flowRun:a,taskRun:t})=>{const{state:r,start_time:n,tags:i,estimated_run_time:l}=W({flowRun:a,taskRun:t});return e.jsxs(y,{className:ee({state:r?.type}),children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx(J,{flow:s,flowRun:a,taskRun:t}),e.jsx("div",{children:e.jsx(w,{maxTagsDisplayed:5,tags:i})})]}),e.jsxs("div",{className:"flex gap-2 items-center text-slate-600",children:[r&&e.jsx(B,{type:r.type,name:r.name}),n&&e.jsx(Z,{time:n}),e.jsx(Y,{duration:l})]})]})},J=({flow:s,flowRun:a,taskRun:t})=>{if(!s&&!a&&!t)throw new Error("Expecting flow, flowRun, or taskRun");return e.jsx(b,{children:e.jsxs(f,{children:[s&&e.jsx(c,{children:e.jsx(m,{className:"text-lg font-semibold",to:"/flows/flow/$id",params:{id:s.id},children:s.name})}),s&&a&&e.jsx(x,{}),a&&e.jsx(c,{children:e.jsx(m,{to:"/runs/flow-run/$id",params:{id:a.id},children:a.name})}),a&&t&&e.jsx(x,{}),t&&e.jsx(c,{children:e.jsx(m,{to:"/runs/task-run/$id",params:{id:t.id},children:t.name})})]})})},Y=({duration:s})=>e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(v,{id:"Clock",className:"size-4"}),e.jsx(N,{variant:"bodySmall",children:I(s,{maxDecimalPoints:3,units:["s"]})})]}),Z=({time:s})=>e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(v,{id:"Calendar",className:"size-4"}),e.jsx(N,{variant:"bodySmall",className:"font-mono",children:p(j(s),"yyyy/MM/dd pp")})]}),ee=_("flex flex-col gap-2 p-4 border-l-8",{variants:{state:{COMPLETED:"border-l-green-600",FAILED:"border-l-red-600",RUNNING:"border-l-blue-700",CANCELLED:"border-l-gray-800",CANCELLING:"border-l-gray-800",CRASHED:"border-l-orange-600",PAUSED:"border-l-gray-800",PENDING:"border-l-gray-800",SCHEDULED:"border-l-yellow-700"}}}),se=({data:s})=>e.jsx("ul",{className:"flex flex-col gap-2",children:s.map(a=>e.jsx("li",{children:e.jsx(X,{flow:a.flow,flowRun:a.flowRun,taskRun:a.taskRun})},a.taskRun.id))}),ae=({data:s})=>e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("dl",{className:"flex flex-col gap-2",children:[e.jsx("dt",{className:"text-muted-foreground",children:"Tag"}),e.jsx("dd",{className:"text-sm font-medium leading-none",children:s.tag})]}),e.jsx("hr",{}),e.jsx("dl",{className:"flex flex-col gap-2",children:te(s).map(a=>e.jsxs(D.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:a.label}),e.jsx("dd",{className:V("text-sm font-medium leading-none",a.formatType==="date"&&"font-mono"),children:a.value})]},a.label))})]}),te=s=>[{label:"Concurrency Limit Count",value:s.concurrency_limit,formatType:"number"},{label:"Concurrency Limit Active Task Run",value:s.active_slots?.length??"Unknown",formatType:"number"},{label:"Concurrency Limit ID",value:s.id??"Unknown",formatType:"number"},{label:"Created",value:s.created?p(j(s.created),"yyyy/MM/dd pp"):"N/A",formatType:"date"},{label:"Updated",value:s.updated?p(j(s.updated),"yyyy/MM/dd pp"):"N/A",formatType:"date"}],re=({tag:s})=>e.jsx("div",{className:"flex items-center gap-2",children:e.jsx(b,{children:e.jsxs(f,{children:[e.jsx(c,{children:e.jsx(m,{to:"/concurrency-limits",className:"text-xl font-semibold",children:"Concurrency Limits"})}),e.jsx(x,{}),e.jsx(c,{className:"text-xl font-semibold",children:e.jsx(M,{children:s})})]})})}),ne=({data:s,onDelete:a,onReset:t})=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(re,{tag:s.tag}),e.jsx(F,{id:s.id,onDelete:a,onReset:t})]}),ie=({data:s,openDialog:a,onCloseDialog:t,onOpenChange:r})=>{const n=L(),i=()=>{t(),n({to:"/concurrency-limits",search:{tab:"task-run"}})};switch(a){case"reset":return e.jsx(Q,{data:s,onOpenChange:r,onReset:t});case"delete":return e.jsx(H,{data:s,onOpenChange:r,onDelete:i});default:return null}},g=R("/concurrency-limits/concurrency-limit/$id"),d={"active-task-runs":{tabSearchValue:"active-task-runs",displayValue:"Active Task Runs"}},ce=({children:s})=>{const{tab:a}=g.useSearch(),t=g.useNavigate();return e.jsxs(P,{defaultValue:"Global",value:a,children:[e.jsx(O,{children:e.jsx(U,{value:d["active-task-runs"].tabSearchValue,onClick:()=>{t({to:"/concurrency-limits/concurrency-limit/$id",search:{tab:d["active-task-runs"].tabSearchValue}})},children:d["active-task-runs"].displayValue})}),e.jsx(G,{value:d["active-task-runs"].tabSearchValue,children:s})]})},le=({id:s})=>{const[a,t]=S.useState(null),{data:r}=A($(s)),n=()=>t("delete"),i=()=>t("reset"),l=()=>t(null),T=u=>{u||l()},{activeTaskRunsPromise:C,taskRunConcurrencyLimit:o}=r,k=o.active_slots?.length;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(ne,{data:o,onDelete:n,onReset:i}),e.jsxs("div",{className:"grid gap-4",style:{gridTemplateColumns:"3fr 1fr"},children:[e.jsx(ce,{children:e.jsx(E,{promise:C,fallback:e.jsx(oe,{length:k}),children:u=>e.jsx(se,{data:u})})}),e.jsx(ae,{data:o})]})]}),e.jsx(ie,{data:o,openDialog:a,onOpenChange:T,onCloseDialog:l})]})},oe=({length:s=0})=>e.jsx("div",{className:"flex flex-col gap-4",children:Array.from({length:s},(a,t)=>e.jsxs(y,{className:"p-4 space-y-4",children:[e.jsx(h,{className:"h-4 w-[350px]"}),e.jsx(h,{className:"h-4 w-[400px]"})]},t))});q({tab:K(["active-task-runs"]).default("active-task-runs")});function be(){const{id:s}=z.useParams();return e.jsx(le,{id:s})}export{be as component};
2
+ //# sourceMappingURL=concurrency-limit._id-BHEt9viF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"concurrency-limit._id-C-XWq7Tf.js","sources":["../../src/components/ui/run-card/run-card.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-active-task-runs/task-run-concurrency-limit-active-task-runs.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-details/task-run-concurrency-limit-details.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-header/nav-header.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-header/task-run-concurrency-limit-header.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page/task-run-concurrency-limit-dialog.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page/task-run-concurrency-limit-tab-navigation.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page/index.tsx","../../src/routes/concurrency-limits/concurrency-limit.$id.tsx?tsr-split=component"],"sourcesContent":["import { cva } from \"class-variance-authority\";\nimport { format, parseISO } from \"date-fns\";\nimport humanizeDuration from \"humanize-duration\";\nimport type { components } from \"@/api/prefect\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Card } from \"@/components/ui/card\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport { Typography } from \"@/components/ui/typography\";\n\nconst getValues = ({\n\tflowRun,\n\ttaskRun,\n}: {\n\tflowRun: null | undefined | components[\"schemas\"][\"FlowRunResponse\"];\n\ttaskRun: null | undefined | components[\"schemas\"][\"TaskRun\"];\n}) => {\n\tif (taskRun) {\n\t\tconst { state, start_time, tags, estimated_run_time } = taskRun;\n\t\treturn { state, start_time, tags, estimated_run_time };\n\t}\n\tif (flowRun) {\n\t\tconst { state, start_time, tags, estimated_run_time } = flowRun;\n\t\treturn { state, start_time, tags, estimated_run_time };\n\t}\n\n\tthrow new Error(\"Expecting taskRun or flowRun to be defined\");\n};\n\ntype RunCardProps = {\n\tflow?: components[\"schemas\"][\"Flow\"] | null;\n\tflowRun?: components[\"schemas\"][\"FlowRunResponse\"] | null;\n\t/** If task run is included, uses fields from task run over flow run */\n\ttaskRun?: components[\"schemas\"][\"TaskRun\"] | null;\n};\n\nexport const RunCard = ({ flow, flowRun, taskRun }: RunCardProps) => {\n\tconst { state, start_time, tags, estimated_run_time } = getValues({\n\t\tflowRun,\n\t\ttaskRun,\n\t});\n\n\treturn (\n\t\t<Card className={stateCardVariants({ state: state?.type })}>\n\t\t\t<div className=\"flex justify-between items-center\">\n\t\t\t\t<ConcurrencyLimitTaskRunBreadcrumb\n\t\t\t\t\tflow={flow}\n\t\t\t\t\tflowRun={flowRun}\n\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<TagBadgeGroup maxTagsDisplayed={5} tags={tags} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex gap-2 items-center text-slate-600\">\n\t\t\t\t{state && <StateBadge type={state.type} name={state.name} />}\n\t\t\t\t{start_time && <StartTime time={start_time} />}\n\t\t\t\t<TimeRan duration={estimated_run_time} />\n\t\t\t</div>\n\t\t</Card>\n\t);\n};\n\nconst ConcurrencyLimitTaskRunBreadcrumb = ({\n\tflow,\n\tflowRun,\n\ttaskRun,\n}: RunCardProps) => {\n\tif (!flow && !flowRun && !taskRun) {\n\t\tthrow new Error(\"Expecting flow, flowRun, or taskRun\");\n\t}\n\n\treturn (\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t{flow && (\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tclassName=\"text-lg font-semibold\"\n\t\t\t\t\t\t\tto=\"/flows/flow/$id\"\n\t\t\t\t\t\t\tparams={{ id: flow.id }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{flow.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t)}\n\t\t\t\t{flow && flowRun && <BreadcrumbSeparator />}\n\t\t\t\t{flowRun && (\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink to=\"/runs/flow-run/$id\" params={{ id: flowRun.id }}>\n\t\t\t\t\t\t\t{flowRun.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t)}\n\t\t\t\t{flowRun && taskRun && <BreadcrumbSeparator />}\n\t\t\t\t{taskRun && (\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink to=\"/runs/task-run/$id\" params={{ id: taskRun.id }}>\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t)}\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n\ntype TimeRanProps = {\n\tduration: number;\n};\nconst TimeRan = ({ duration }: TimeRanProps) => {\n\treturn (\n\t\t<div className=\"flex gap-1 items-center\">\n\t\t\t<Icon id=\"Clock\" className=\"size-4\" />\n\t\t\t<Typography variant=\"bodySmall\">\n\t\t\t\t{humanizeDuration(duration, { maxDecimalPoints: 3, units: [\"s\"] })}\n\t\t\t</Typography>\n\t\t</div>\n\t);\n};\n\ntype StartTimeProps = {\n\ttime: string;\n};\nconst StartTime = ({ time }: StartTimeProps) => (\n\t<div className=\"flex gap-1 items-center\">\n\t\t<Icon id=\"Calendar\" className=\"size-4\" />\n\t\t<Typography variant=\"bodySmall\" className=\"font-mono\">\n\t\t\t{format(parseISO(time), \"yyyy/MM/dd pp\")}\n\t\t</Typography>\n\t</div>\n);\n\nconst stateCardVariants = cva(\"flex flex-col gap-2 p-4 border-l-8\", {\n\tvariants: {\n\t\tstate: {\n\t\t\tCOMPLETED: \"border-l-green-600\",\n\t\t\tFAILED: \"border-l-red-600\",\n\t\t\tRUNNING: \"border-l-blue-700\",\n\t\t\tCANCELLED: \"border-l-gray-800\",\n\t\t\tCANCELLING: \"border-l-gray-800\",\n\t\t\tCRASHED: \"border-l-orange-600\",\n\t\t\tPAUSED: \"border-l-gray-800\",\n\t\t\tPENDING: \"border-l-gray-800\",\n\t\t\tSCHEDULED: \"border-l-yellow-700\",\n\t\t} satisfies Record<components[\"schemas\"][\"StateType\"], string>,\n\t},\n});\n","import type { components } from \"@/api/prefect\";\nimport { RunCard } from \"@/components/ui/run-card\";\n\ntype TaskRunConcurrencyLimitActiveTaskRunsProps = {\n\tdata: Array<{\n\t\ttaskRun: components[\"schemas\"][\"TaskRun\"];\n\t\tflowRun?: components[\"schemas\"][\"FlowRunResponse\"] | null;\n\t\tflow?: components[\"schemas\"][\"Flow\"] | null;\n\t}>;\n};\n\nexport const TaskRunConcurrencyLimitActiveTaskRuns = ({\n\tdata,\n}: TaskRunConcurrencyLimitActiveTaskRunsProps) => {\n\treturn (\n\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t{data.map((d) => (\n\t\t\t\t<li key={d.taskRun.id}>\n\t\t\t\t\t<RunCard flow={d.flow} flowRun={d.flowRun} taskRun={d.taskRun} />\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n};\n","import { format, parseISO } from \"date-fns\";\nimport React from \"react\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { cn } from \"@/utils\";\n\ntype TaskRunConcurrencyLimitDetailsProps = {\n\tdata: TaskRunConcurrencyLimit;\n};\n\nexport const TaskRunConcurrencyLimitDetails = ({\n\tdata,\n}: TaskRunConcurrencyLimitDetailsProps) => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<dl className=\"flex flex-col gap-2\">\n\t\t\t\t<dt className=\"text-muted-foreground\">Tag</dt>\n\t\t\t\t<dd className=\"text-sm font-medium leading-none\">{data.tag}</dd>\n\t\t\t</dl>\n\t\t\t<hr />\n\t\t\t<dl className=\"flex flex-col gap-2\">\n\t\t\t\t{getKeyValueList(data).map((d) => (\n\t\t\t\t\t<React.Fragment key={d.label}>\n\t\t\t\t\t\t<dt className=\"text-muted-foreground\">{d.label}</dt>\n\t\t\t\t\t\t<dd\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm font-medium leading-none\",\n\t\t\t\t\t\t\t\td.formatType === \"date\" && \"font-mono\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{d.value}\n\t\t\t\t\t\t</dd>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</dl>\n\t\t</div>\n\t);\n};\n\nconst getKeyValueList = (data: TaskRunConcurrencyLimit) =>\n\t[\n\t\t{\n\t\t\tlabel: \"Concurrency Limit Count\",\n\t\t\tvalue: data.concurrency_limit,\n\t\t\tformatType: \"number\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Concurrency Limit Active Task Run\",\n\t\t\tvalue: data.active_slots?.length ?? \"Unknown\",\n\t\t\tformatType: \"number\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Concurrency Limit ID\",\n\t\t\tvalue: data.id ?? \"Unknown\",\n\t\t\tformatType: \"number\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Created\",\n\t\t\tvalue: data.created\n\t\t\t\t? format(parseISO(data.created), \"yyyy/MM/dd pp\")\n\t\t\t\t: \"N/A\",\n\t\t\tformatType: \"date\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Updated\",\n\t\t\tvalue: data.updated\n\t\t\t\t? format(parseISO(data.updated), \"yyyy/MM/dd pp\")\n\t\t\t\t: \"N/A\",\n\t\t\tformatType: \"date\",\n\t\t},\n\t] as const;\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype NavHeaderProps = {\n\ttag: string;\n};\n\nexport const NavHeader = ({ tag }: NavHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tto=\"/concurrency-limits\"\n\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tConcurrency Limits\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\">\n\t\t\t\t\t\t<BreadcrumbPage>{tag}</BreadcrumbPage>\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};\n","import type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsActionsMenu } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-actions-menu\";\n\nimport { NavHeader } from \"./nav-header\";\n\ntype TaskRunConcurrencyLimitHeaderProps = {\n\tdata: TaskRunConcurrencyLimit;\n\tonDelete: () => void;\n\tonReset: () => void;\n};\n\nexport const TaskRunConcurrencyLimitHeader = ({\n\tdata,\n\tonDelete,\n\tonReset,\n}: TaskRunConcurrencyLimitHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center justify-between\">\n\t\t\t<NavHeader tag={data.tag} />\n\t\t\t<TaskRunConcurrencyLimitsActionsMenu\n\t\t\t\tid={data.id}\n\t\t\t\tonDelete={onDelete}\n\t\t\t\tonReset={onReset}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { useNavigate } from \"@tanstack/react-router\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsDeleteDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-delete-dialog\";\nimport { TaskRunConcurrencyLimitsResetDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-reset-dialog\";\n\nexport type Dialogs = null | \"delete\" | \"reset\";\n\ntype TaskRunConcurrencyLimitDialogProps = {\n\tdata: TaskRunConcurrencyLimit;\n\topenDialog: Dialogs;\n\tonOpenChange: (open: boolean) => void;\n\tonCloseDialog: () => void;\n};\n\nexport const TaskRunConcurrencyLimitDialog = ({\n\tdata,\n\topenDialog,\n\tonCloseDialog,\n\tonOpenChange,\n}: TaskRunConcurrencyLimitDialogProps) => {\n\tconst navigate = useNavigate();\n\n\tconst handleDelete = () => {\n\t\tonCloseDialog();\n\t\tvoid navigate({ to: \"/concurrency-limits\", search: { tab: \"task-run\" } });\n\t};\n\n\tswitch (openDialog) {\n\t\tcase \"reset\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsResetDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonReset={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"delete\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsDeleteDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonDelete={handleDelete}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport type { TabOptions } from \"@/routes/concurrency-limits/concurrency-limit.$id\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/concurrency-limit/$id\");\n\ntype TabOptionValues = {\n\t/** Value of search value in url */\n\ttabSearchValue: TabOptions;\n\t/** Display value for the UI */\n\tdisplayValue: string;\n};\n\n/** Maps url tab option to visual name */\nconst TAB_OPTIONS: Record<TabOptions, TabOptionValues> = {\n\t\"active-task-runs\": {\n\t\ttabSearchValue: \"active-task-runs\",\n\t\tdisplayValue: \"Active Task Runs\",\n\t},\n} as const;\n\ntype TaskRunConcurrencyLimitTabNavigationProps = {\n\t/** Should add ActiveTaskRun component */\n\tchildren: React.ReactNode;\n};\n\n// TODO: Move Tabs for navigation to a generic styled component\nexport const TaskRunConcurrencyLimitTabNavigation = ({\n\tchildren,\n}: TaskRunConcurrencyLimitTabNavigationProps) => {\n\tconst { tab } = routeApi.useSearch();\n\tconst navigate = routeApi.useNavigate();\n\n\treturn (\n\t\t<Tabs defaultValue=\"Global\" value={tab}>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger\n\t\t\t\t\tvalue={TAB_OPTIONS[\"active-task-runs\"].tabSearchValue}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/concurrency-limits/concurrency-limit/$id\",\n\t\t\t\t\t\t\tsearch: {\n\t\t\t\t\t\t\t\ttab: TAB_OPTIONS[\"active-task-runs\"].tabSearchValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{TAB_OPTIONS[\"active-task-runs\"].displayValue}\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value={TAB_OPTIONS[\"active-task-runs\"].tabSearchValue}>\n\t\t\t\t{children}\n\t\t\t</TabsContent>\n\t\t</Tabs>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Await } from \"@tanstack/react-router\";\nimport { useState } from \"react\";\nimport { buildConcurrenyLimitDetailsActiveRunsQuery } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitActiveTaskRuns } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-active-task-runs\";\nimport { TaskRunConcurrencyLimitDetails } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-details\";\nimport { TaskRunConcurrencyLimitHeader } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-header\";\nimport { Card } from \"@/components/ui/card\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n\ttype Dialogs,\n\tTaskRunConcurrencyLimitDialog,\n} from \"./task-run-concurrency-limit-dialog\";\nimport { TaskRunConcurrencyLimitTabNavigation } from \"./task-run-concurrency-limit-tab-navigation\";\n\ntype TaskRunConcurrencyLimitPageProps = {\n\tid: string;\n};\n\nexport const TaskRunConcurrencyLimitPage = ({\n\tid,\n}: TaskRunConcurrencyLimitPageProps) => {\n\tconst [openDialog, setOpenDialog] = useState<Dialogs>(null);\n\tconst { data } = useSuspenseQuery(\n\t\tbuildConcurrenyLimitDetailsActiveRunsQuery(id),\n\t);\n\n\tconst handleOpenDeleteDialog = () => setOpenDialog(\"delete\");\n\tconst handleOpenResetDialog = () => setOpenDialog(\"reset\");\n\tconst handleCloseDialog = () => setOpenDialog(null);\n\n\t// Because all modals will be rendered, only control the closing logic\n\tconst handleOpenChange = (open: boolean) => {\n\t\tif (!open) {\n\t\t\thandleCloseDialog();\n\t\t}\n\t};\n\n\tconst { activeTaskRunsPromise, taskRunConcurrencyLimit } = data;\n\tconst numActiveTaskRuns = taskRunConcurrencyLimit.active_slots?.length;\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<TaskRunConcurrencyLimitHeader\n\t\t\t\t\tdata={taskRunConcurrencyLimit}\n\t\t\t\t\tonDelete={handleOpenDeleteDialog}\n\t\t\t\t\tonReset={handleOpenResetDialog}\n\t\t\t\t/>\n\t\t\t\t<div className=\"grid gap-4\" style={{ gridTemplateColumns: \"3fr 1fr\" }}>\n\t\t\t\t\t<TaskRunConcurrencyLimitTabNavigation>\n\t\t\t\t\t\t<Await\n\t\t\t\t\t\t\tpromise={activeTaskRunsPromise}\n\t\t\t\t\t\t\tfallback={<SkeletonLoading length={numActiveTaskRuns} />}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{(activeTaskRuns) => (\n\t\t\t\t\t\t\t\t<TaskRunConcurrencyLimitActiveTaskRuns data={activeTaskRuns} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Await>\n\t\t\t\t\t</TaskRunConcurrencyLimitTabNavigation>\n\t\t\t\t\t<TaskRunConcurrencyLimitDetails data={taskRunConcurrencyLimit} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<TaskRunConcurrencyLimitDialog\n\t\t\t\tdata={taskRunConcurrencyLimit}\n\t\t\t\topenDialog={openDialog}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t\tonCloseDialog={handleCloseDialog}\n\t\t\t/>\n\t\t</>\n\t);\n};\n\ntype SkeletonLoadingProps = { length?: number };\nconst SkeletonLoading = ({ length = 0 }: SkeletonLoadingProps) => (\n\t<div className=\"flex flex-col gap-4\">\n\t\t{Array.from({ length }, (_, index) => (\n\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: okay for static skeleton list\n\t\t\t<Card key={index} className=\"p-4 space-y-4\">\n\t\t\t\t<Skeleton className=\"h-4 w-[350px]\" />\n\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t</Card>\n\t\t))}\n\t</div>\n);\n","import { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildConcurrenyLimitDetailsActiveRunsQuery } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitPage } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page\";\n\n/**\n * Schema for validating URL search parameters for the Task Run Concurrency Limit Details page.\n * @property {'active-task-runs'} tab used designate which tab view to display\n */\nconst searchParams = z.object({\n\ttab: z.enum([\"active-task-runs\"]).default(\"active-task-runs\"),\n});\n\nexport type TabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\n\t\"/concurrency-limits/concurrency-limit/$id\",\n)({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\twrapInSuspense: true,\n\tloader: ({ context, params }) =>\n\t\tcontext.queryClient.ensureQueryData(\n\t\t\tbuildConcurrenyLimitDetailsActiveRunsQuery(params.id),\n\t\t),\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\treturn <TaskRunConcurrencyLimitPage id={id} />;\n}\n"],"names":["getValues","flowRun","taskRun","state","start_time","tags","estimated_run_time","RunCard","flow","jsxs","Card","stateCardVariants","jsx","ConcurrencyLimitTaskRunBreadcrumb","TagBadgeGroup","StateBadge","StartTime","TimeRan","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","duration","Icon","Typography","time","format","parseISO","cva","TaskRunConcurrencyLimitActiveTaskRuns","data","d","TaskRunConcurrencyLimitDetails","getKeyValueList","React","cn","NavHeader","tag","BreadcrumbPage","TaskRunConcurrencyLimitHeader","onDelete","onReset","TaskRunConcurrencyLimitsActionsMenu","TaskRunConcurrencyLimitDialog","openDialog","onCloseDialog","onOpenChange","navigate","useNavigate","handleDelete","TaskRunConcurrencyLimitsResetDialog","TaskRunConcurrencyLimitsDeleteDialog","routeApi","getRouteApi","TAB_OPTIONS","TaskRunConcurrencyLimitTabNavigation","children","tab","Tabs","TabsList","TabsTrigger","TabsContent","TaskRunConcurrencyLimitPage","id","setOpenDialog","useState","useSuspenseQuery","buildConcurrenyLimitDetailsActiveRunsQuery","handleOpenDeleteDialog","handleOpenResetDialog","handleCloseDialog","handleOpenChange","open","activeTaskRunsPromise","taskRunConcurrencyLimit","numActiveTaskRuns","Fragment","Await","SkeletonLoading","activeTaskRuns","length","_","index","Skeleton","z","default","RouteComponent","Route","useParams"],"mappings":"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"}
1
+ {"version":3,"file":"concurrency-limit._id-BHEt9viF.js","sources":["../../src/components/ui/run-card/run-card.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-active-task-runs/task-run-concurrency-limit-active-task-runs.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-details/task-run-concurrency-limit-details.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-header/nav-header.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-header/task-run-concurrency-limit-header.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page/task-run-concurrency-limit-dialog.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page/task-run-concurrency-limit-tab-navigation.tsx","../../src/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page/index.tsx","../../src/routes/concurrency-limits/concurrency-limit.$id.tsx?tsr-split=component"],"sourcesContent":["import { cva } from \"class-variance-authority\";\nimport { format, parseISO } from \"date-fns\";\nimport humanizeDuration from \"humanize-duration\";\nimport type { components } from \"@/api/prefect\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Card } from \"@/components/ui/card\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport { Typography } from \"@/components/ui/typography\";\n\nconst getValues = ({\n\tflowRun,\n\ttaskRun,\n}: {\n\tflowRun: null | undefined | components[\"schemas\"][\"FlowRunResponse\"];\n\ttaskRun: null | undefined | components[\"schemas\"][\"TaskRun\"];\n}) => {\n\tif (taskRun) {\n\t\tconst { state, start_time, tags, estimated_run_time } = taskRun;\n\t\treturn { state, start_time, tags, estimated_run_time };\n\t}\n\tif (flowRun) {\n\t\tconst { state, start_time, tags, estimated_run_time } = flowRun;\n\t\treturn { state, start_time, tags, estimated_run_time };\n\t}\n\n\tthrow new Error(\"Expecting taskRun or flowRun to be defined\");\n};\n\ntype RunCardProps = {\n\tflow?: components[\"schemas\"][\"Flow\"] | null;\n\tflowRun?: components[\"schemas\"][\"FlowRunResponse\"] | null;\n\t/** If task run is included, uses fields from task run over flow run */\n\ttaskRun?: components[\"schemas\"][\"TaskRun\"] | null;\n};\n\nexport const RunCard = ({ flow, flowRun, taskRun }: RunCardProps) => {\n\tconst { state, start_time, tags, estimated_run_time } = getValues({\n\t\tflowRun,\n\t\ttaskRun,\n\t});\n\n\treturn (\n\t\t<Card className={stateCardVariants({ state: state?.type })}>\n\t\t\t<div className=\"flex justify-between items-center\">\n\t\t\t\t<ConcurrencyLimitTaskRunBreadcrumb\n\t\t\t\t\tflow={flow}\n\t\t\t\t\tflowRun={flowRun}\n\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<TagBadgeGroup maxTagsDisplayed={5} tags={tags} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex gap-2 items-center text-slate-600\">\n\t\t\t\t{state && <StateBadge type={state.type} name={state.name} />}\n\t\t\t\t{start_time && <StartTime time={start_time} />}\n\t\t\t\t<TimeRan duration={estimated_run_time} />\n\t\t\t</div>\n\t\t</Card>\n\t);\n};\n\nconst ConcurrencyLimitTaskRunBreadcrumb = ({\n\tflow,\n\tflowRun,\n\ttaskRun,\n}: RunCardProps) => {\n\tif (!flow && !flowRun && !taskRun) {\n\t\tthrow new Error(\"Expecting flow, flowRun, or taskRun\");\n\t}\n\n\treturn (\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t{flow && (\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tclassName=\"text-lg font-semibold\"\n\t\t\t\t\t\t\tto=\"/flows/flow/$id\"\n\t\t\t\t\t\t\tparams={{ id: flow.id }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{flow.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t)}\n\t\t\t\t{flow && flowRun && <BreadcrumbSeparator />}\n\t\t\t\t{flowRun && (\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink to=\"/runs/flow-run/$id\" params={{ id: flowRun.id }}>\n\t\t\t\t\t\t\t{flowRun.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t)}\n\t\t\t\t{flowRun && taskRun && <BreadcrumbSeparator />}\n\t\t\t\t{taskRun && (\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink to=\"/runs/task-run/$id\" params={{ id: taskRun.id }}>\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t)}\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n\ntype TimeRanProps = {\n\tduration: number;\n};\nconst TimeRan = ({ duration }: TimeRanProps) => {\n\treturn (\n\t\t<div className=\"flex gap-1 items-center\">\n\t\t\t<Icon id=\"Clock\" className=\"size-4\" />\n\t\t\t<Typography variant=\"bodySmall\">\n\t\t\t\t{humanizeDuration(duration, { maxDecimalPoints: 3, units: [\"s\"] })}\n\t\t\t</Typography>\n\t\t</div>\n\t);\n};\n\ntype StartTimeProps = {\n\ttime: string;\n};\nconst StartTime = ({ time }: StartTimeProps) => (\n\t<div className=\"flex gap-1 items-center\">\n\t\t<Icon id=\"Calendar\" className=\"size-4\" />\n\t\t<Typography variant=\"bodySmall\" className=\"font-mono\">\n\t\t\t{format(parseISO(time), \"yyyy/MM/dd pp\")}\n\t\t</Typography>\n\t</div>\n);\n\nconst stateCardVariants = cva(\"flex flex-col gap-2 p-4 border-l-8\", {\n\tvariants: {\n\t\tstate: {\n\t\t\tCOMPLETED: \"border-l-green-600\",\n\t\t\tFAILED: \"border-l-red-600\",\n\t\t\tRUNNING: \"border-l-blue-700\",\n\t\t\tCANCELLED: \"border-l-gray-800\",\n\t\t\tCANCELLING: \"border-l-gray-800\",\n\t\t\tCRASHED: \"border-l-orange-600\",\n\t\t\tPAUSED: \"border-l-gray-800\",\n\t\t\tPENDING: \"border-l-gray-800\",\n\t\t\tSCHEDULED: \"border-l-yellow-700\",\n\t\t} satisfies Record<components[\"schemas\"][\"StateType\"], string>,\n\t},\n});\n","import type { components } from \"@/api/prefect\";\nimport { RunCard } from \"@/components/ui/run-card\";\n\ntype TaskRunConcurrencyLimitActiveTaskRunsProps = {\n\tdata: Array<{\n\t\ttaskRun: components[\"schemas\"][\"TaskRun\"];\n\t\tflowRun?: components[\"schemas\"][\"FlowRunResponse\"] | null;\n\t\tflow?: components[\"schemas\"][\"Flow\"] | null;\n\t}>;\n};\n\nexport const TaskRunConcurrencyLimitActiveTaskRuns = ({\n\tdata,\n}: TaskRunConcurrencyLimitActiveTaskRunsProps) => {\n\treturn (\n\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t{data.map((d) => (\n\t\t\t\t<li key={d.taskRun.id}>\n\t\t\t\t\t<RunCard flow={d.flow} flowRun={d.flowRun} taskRun={d.taskRun} />\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n};\n","import { format, parseISO } from \"date-fns\";\nimport React from \"react\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { cn } from \"@/utils\";\n\ntype TaskRunConcurrencyLimitDetailsProps = {\n\tdata: TaskRunConcurrencyLimit;\n};\n\nexport const TaskRunConcurrencyLimitDetails = ({\n\tdata,\n}: TaskRunConcurrencyLimitDetailsProps) => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<dl className=\"flex flex-col gap-2\">\n\t\t\t\t<dt className=\"text-muted-foreground\">Tag</dt>\n\t\t\t\t<dd className=\"text-sm font-medium leading-none\">{data.tag}</dd>\n\t\t\t</dl>\n\t\t\t<hr />\n\t\t\t<dl className=\"flex flex-col gap-2\">\n\t\t\t\t{getKeyValueList(data).map((d) => (\n\t\t\t\t\t<React.Fragment key={d.label}>\n\t\t\t\t\t\t<dt className=\"text-muted-foreground\">{d.label}</dt>\n\t\t\t\t\t\t<dd\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-sm font-medium leading-none\",\n\t\t\t\t\t\t\t\td.formatType === \"date\" && \"font-mono\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{d.value}\n\t\t\t\t\t\t</dd>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</dl>\n\t\t</div>\n\t);\n};\n\nconst getKeyValueList = (data: TaskRunConcurrencyLimit) =>\n\t[\n\t\t{\n\t\t\tlabel: \"Concurrency Limit Count\",\n\t\t\tvalue: data.concurrency_limit,\n\t\t\tformatType: \"number\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Concurrency Limit Active Task Run\",\n\t\t\tvalue: data.active_slots?.length ?? \"Unknown\",\n\t\t\tformatType: \"number\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Concurrency Limit ID\",\n\t\t\tvalue: data.id ?? \"Unknown\",\n\t\t\tformatType: \"number\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Created\",\n\t\t\tvalue: data.created\n\t\t\t\t? format(parseISO(data.created), \"yyyy/MM/dd pp\")\n\t\t\t\t: \"N/A\",\n\t\t\tformatType: \"date\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Updated\",\n\t\t\tvalue: data.updated\n\t\t\t\t? format(parseISO(data.updated), \"yyyy/MM/dd pp\")\n\t\t\t\t: \"N/A\",\n\t\t\tformatType: \"date\",\n\t\t},\n\t] as const;\n","import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype NavHeaderProps = {\n\ttag: string;\n};\n\nexport const NavHeader = ({ tag }: NavHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tto=\"/concurrency-limits\"\n\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tConcurrency Limits\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\">\n\t\t\t\t\t\t<BreadcrumbPage>{tag}</BreadcrumbPage>\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};\n","import type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsActionsMenu } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-actions-menu\";\n\nimport { NavHeader } from \"./nav-header\";\n\ntype TaskRunConcurrencyLimitHeaderProps = {\n\tdata: TaskRunConcurrencyLimit;\n\tonDelete: () => void;\n\tonReset: () => void;\n};\n\nexport const TaskRunConcurrencyLimitHeader = ({\n\tdata,\n\tonDelete,\n\tonReset,\n}: TaskRunConcurrencyLimitHeaderProps) => {\n\treturn (\n\t\t<div className=\"flex items-center justify-between\">\n\t\t\t<NavHeader tag={data.tag} />\n\t\t\t<TaskRunConcurrencyLimitsActionsMenu\n\t\t\t\tid={data.id}\n\t\t\t\tonDelete={onDelete}\n\t\t\t\tonReset={onReset}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { useNavigate } from \"@tanstack/react-router\";\nimport type { TaskRunConcurrencyLimit } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitsDeleteDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-delete-dialog\";\nimport { TaskRunConcurrencyLimitsResetDialog } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limits-reset-dialog\";\n\nexport type Dialogs = null | \"delete\" | \"reset\";\n\ntype TaskRunConcurrencyLimitDialogProps = {\n\tdata: TaskRunConcurrencyLimit;\n\topenDialog: Dialogs;\n\tonOpenChange: (open: boolean) => void;\n\tonCloseDialog: () => void;\n};\n\nexport const TaskRunConcurrencyLimitDialog = ({\n\tdata,\n\topenDialog,\n\tonCloseDialog,\n\tonOpenChange,\n}: TaskRunConcurrencyLimitDialogProps) => {\n\tconst navigate = useNavigate();\n\n\tconst handleDelete = () => {\n\t\tonCloseDialog();\n\t\tvoid navigate({ to: \"/concurrency-limits\", search: { tab: \"task-run\" } });\n\t};\n\n\tswitch (openDialog) {\n\t\tcase \"reset\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsResetDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonReset={onCloseDialog}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"delete\":\n\t\t\treturn (\n\t\t\t\t<TaskRunConcurrencyLimitsDeleteDialog\n\t\t\t\t\tdata={data}\n\t\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\t\tonDelete={handleDelete}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { getRouteApi } from \"@tanstack/react-router\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport type { TabOptions } from \"@/routes/concurrency-limits/concurrency-limit.$id\";\n\nconst routeApi = getRouteApi(\"/concurrency-limits/concurrency-limit/$id\");\n\ntype TabOptionValues = {\n\t/** Value of search value in url */\n\ttabSearchValue: TabOptions;\n\t/** Display value for the UI */\n\tdisplayValue: string;\n};\n\n/** Maps url tab option to visual name */\nconst TAB_OPTIONS: Record<TabOptions, TabOptionValues> = {\n\t\"active-task-runs\": {\n\t\ttabSearchValue: \"active-task-runs\",\n\t\tdisplayValue: \"Active Task Runs\",\n\t},\n} as const;\n\ntype TaskRunConcurrencyLimitTabNavigationProps = {\n\t/** Should add ActiveTaskRun component */\n\tchildren: React.ReactNode;\n};\n\n// TODO: Move Tabs for navigation to a generic styled component\nexport const TaskRunConcurrencyLimitTabNavigation = ({\n\tchildren,\n}: TaskRunConcurrencyLimitTabNavigationProps) => {\n\tconst { tab } = routeApi.useSearch();\n\tconst navigate = routeApi.useNavigate();\n\n\treturn (\n\t\t<Tabs defaultValue=\"Global\" value={tab}>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger\n\t\t\t\t\tvalue={TAB_OPTIONS[\"active-task-runs\"].tabSearchValue}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/concurrency-limits/concurrency-limit/$id\",\n\t\t\t\t\t\t\tsearch: {\n\t\t\t\t\t\t\t\ttab: TAB_OPTIONS[\"active-task-runs\"].tabSearchValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{TAB_OPTIONS[\"active-task-runs\"].displayValue}\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value={TAB_OPTIONS[\"active-task-runs\"].tabSearchValue}>\n\t\t\t\t{children}\n\t\t\t</TabsContent>\n\t\t</Tabs>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Await } from \"@tanstack/react-router\";\nimport { useState } from \"react\";\nimport { buildConcurrenyLimitDetailsActiveRunsQuery } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitActiveTaskRuns } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-active-task-runs\";\nimport { TaskRunConcurrencyLimitDetails } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-details\";\nimport { TaskRunConcurrencyLimitHeader } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-header\";\nimport { Card } from \"@/components/ui/card\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n\ttype Dialogs,\n\tTaskRunConcurrencyLimitDialog,\n} from \"./task-run-concurrency-limit-dialog\";\nimport { TaskRunConcurrencyLimitTabNavigation } from \"./task-run-concurrency-limit-tab-navigation\";\n\ntype TaskRunConcurrencyLimitPageProps = {\n\tid: string;\n};\n\nexport const TaskRunConcurrencyLimitPage = ({\n\tid,\n}: TaskRunConcurrencyLimitPageProps) => {\n\tconst [openDialog, setOpenDialog] = useState<Dialogs>(null);\n\tconst { data } = useSuspenseQuery(\n\t\tbuildConcurrenyLimitDetailsActiveRunsQuery(id),\n\t);\n\n\tconst handleOpenDeleteDialog = () => setOpenDialog(\"delete\");\n\tconst handleOpenResetDialog = () => setOpenDialog(\"reset\");\n\tconst handleCloseDialog = () => setOpenDialog(null);\n\n\t// Because all modals will be rendered, only control the closing logic\n\tconst handleOpenChange = (open: boolean) => {\n\t\tif (!open) {\n\t\t\thandleCloseDialog();\n\t\t}\n\t};\n\n\tconst { activeTaskRunsPromise, taskRunConcurrencyLimit } = data;\n\tconst numActiveTaskRuns = taskRunConcurrencyLimit.active_slots?.length;\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<TaskRunConcurrencyLimitHeader\n\t\t\t\t\tdata={taskRunConcurrencyLimit}\n\t\t\t\t\tonDelete={handleOpenDeleteDialog}\n\t\t\t\t\tonReset={handleOpenResetDialog}\n\t\t\t\t/>\n\t\t\t\t<div className=\"grid gap-4\" style={{ gridTemplateColumns: \"3fr 1fr\" }}>\n\t\t\t\t\t<TaskRunConcurrencyLimitTabNavigation>\n\t\t\t\t\t\t<Await\n\t\t\t\t\t\t\tpromise={activeTaskRunsPromise}\n\t\t\t\t\t\t\tfallback={<SkeletonLoading length={numActiveTaskRuns} />}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{(activeTaskRuns) => (\n\t\t\t\t\t\t\t\t<TaskRunConcurrencyLimitActiveTaskRuns data={activeTaskRuns} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Await>\n\t\t\t\t\t</TaskRunConcurrencyLimitTabNavigation>\n\t\t\t\t\t<TaskRunConcurrencyLimitDetails data={taskRunConcurrencyLimit} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<TaskRunConcurrencyLimitDialog\n\t\t\t\tdata={taskRunConcurrencyLimit}\n\t\t\t\topenDialog={openDialog}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t\tonCloseDialog={handleCloseDialog}\n\t\t\t/>\n\t\t</>\n\t);\n};\n\ntype SkeletonLoadingProps = { length?: number };\nconst SkeletonLoading = ({ length = 0 }: SkeletonLoadingProps) => (\n\t<div className=\"flex flex-col gap-4\">\n\t\t{Array.from({ length }, (_, index) => (\n\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: okay for static skeleton list\n\t\t\t<Card key={index} className=\"p-4 space-y-4\">\n\t\t\t\t<Skeleton className=\"h-4 w-[350px]\" />\n\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t</Card>\n\t\t))}\n\t</div>\n);\n","import { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildConcurrenyLimitDetailsActiveRunsQuery } from \"@/api/task-run-concurrency-limits\";\nimport { TaskRunConcurrencyLimitPage } from \"@/components/concurrency/task-run-concurrency-limits/task-run-concurrency-limit-page\";\n\n/**\n * Schema for validating URL search parameters for the Task Run Concurrency Limit Details page.\n * @property {'active-task-runs'} tab used designate which tab view to display\n */\nconst searchParams = z.object({\n\ttab: z.enum([\"active-task-runs\"]).default(\"active-task-runs\"),\n});\n\nexport type TabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\n\t\"/concurrency-limits/concurrency-limit/$id\",\n)({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\twrapInSuspense: true,\n\tloader: ({ context, params }) =>\n\t\tcontext.queryClient.ensureQueryData(\n\t\t\tbuildConcurrenyLimitDetailsActiveRunsQuery(params.id),\n\t\t),\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\treturn <TaskRunConcurrencyLimitPage id={id} />;\n}\n"],"names":["getValues","flowRun","taskRun","state","start_time","tags","estimated_run_time","RunCard","flow","jsxs","Card","stateCardVariants","jsx","ConcurrencyLimitTaskRunBreadcrumb","TagBadgeGroup","StateBadge","StartTime","TimeRan","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","duration","Icon","Typography","time","format","parseISO","cva","TaskRunConcurrencyLimitActiveTaskRuns","data","d","TaskRunConcurrencyLimitDetails","getKeyValueList","React","cn","NavHeader","tag","BreadcrumbPage","TaskRunConcurrencyLimitHeader","onDelete","onReset","TaskRunConcurrencyLimitsActionsMenu","TaskRunConcurrencyLimitDialog","openDialog","onCloseDialog","onOpenChange","navigate","useNavigate","handleDelete","TaskRunConcurrencyLimitsResetDialog","TaskRunConcurrencyLimitsDeleteDialog","routeApi","getRouteApi","TAB_OPTIONS","TaskRunConcurrencyLimitTabNavigation","children","tab","Tabs","TabsList","TabsTrigger","TabsContent","TaskRunConcurrencyLimitPage","id","setOpenDialog","useState","useSuspenseQuery","buildConcurrenyLimitDetailsActiveRunsQuery","handleOpenDeleteDialog","handleOpenResetDialog","handleCloseDialog","handleOpenChange","open","activeTaskRunsPromise","taskRunConcurrencyLimit","numActiveTaskRuns","Fragment","Await","SkeletonLoading","activeTaskRuns","length","_","index","Skeleton","z","default","RouteComponent","Route","useParams"],"mappings":"mnBAiBA,MAAMA,EAAY,CAAC,CAClB,QAAAC,EACA,QAAAC,CACD,IAGM,CACL,GAAIA,EAAS,CACZ,KAAM,CAAE,MAAAC,EAAO,WAAAC,EAAY,KAAAC,EAAM,mBAAAC,GAAuBJ,EACxD,MAAO,CAAE,MAAAC,EAAO,WAAAC,EAAY,KAAAC,EAAM,mBAAAC,CAAA,CACnC,CACA,GAAIL,EAAS,CACZ,KAAM,CAAE,MAAAE,EAAO,WAAAC,EAAY,KAAAC,EAAM,mBAAAC,GAAuBL,EACxD,MAAO,CAAE,MAAAE,EAAO,WAAAC,EAAY,KAAAC,EAAM,mBAAAC,CAAA,CACnC,CAEA,MAAM,IAAI,MAAM,4CAA4C,CAC7D,EASaC,EAAU,CAAC,CAAE,KAAAC,EAAM,QAAAP,EAAS,QAAAC,KAA4B,CACpE,KAAM,CAAE,MAAAC,EAAO,WAAAC,EAAY,KAAAC,EAAM,mBAAAC,CAAA,EAAuBN,EAAU,CACjE,QAAAC,EACA,QAAAC,CAAA,CACA,EAED,OACCO,OAACC,GAAK,UAAWC,GAAkB,CAAE,MAAOR,GAAO,KAAM,EACxD,SAAA,CAAAM,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAG,EAAAA,IAACC,EAAA,CACA,KAAAL,EACA,QAAAP,EACA,QAAAC,CAAA,CAAA,QAEA,MAAA,CACA,SAAAU,EAAAA,IAACE,GAAc,iBAAkB,EAAG,KAAAT,EAAY,CAAA,CACjD,CAAA,EACD,EACAI,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAN,SAAUY,EAAA,CAAW,KAAMZ,EAAM,KAAM,KAAMA,EAAM,KAAM,EACzDC,GAAcQ,EAAAA,IAACI,EAAA,CAAU,KAAMZ,CAAA,CAAY,EAC5CQ,EAAAA,IAACK,EAAA,CAAQ,SAAUX,CAAA,CAAoB,CAAA,CAAA,CACxC,CAAA,EACD,CAEF,EAEMO,EAAoC,CAAC,CAC1C,KAAAL,EACA,QAAAP,EACA,QAAAC,CACD,IAAoB,CACnB,GAAI,CAACM,GAAQ,CAACP,GAAW,CAACC,EACzB,MAAM,IAAI,MAAM,qCAAqC,EAGtD,OACCU,EAAAA,IAACM,EAAA,CACA,SAAAT,EAAAA,KAACU,EAAA,CACC,SAAA,CAAAX,SACCY,EAAA,CACA,SAAAR,EAAAA,IAACS,EAAA,CACA,UAAU,wBACV,GAAG,kBACH,OAAQ,CAAE,GAAIb,EAAK,EAAA,EAElB,SAAAA,EAAK,IAAA,CAAA,EAER,EAEAA,GAAQP,GAAWW,MAACU,EAAA,CAAA,CAAoB,EACxCrB,GACAW,EAAAA,IAACQ,EAAA,CACA,SAAAR,EAAAA,IAACS,GAAe,GAAG,qBAAqB,OAAQ,CAAE,GAAIpB,EAAQ,EAAA,EAC5D,SAAAA,EAAQ,KACV,EACD,EAEAA,GAAWC,GAAWU,MAACU,EAAA,CAAA,CAAoB,EAC3CpB,GACAU,EAAAA,IAACQ,EAAA,CACA,SAAAR,MAACS,GAAe,GAAG,qBAAqB,OAAQ,CAAE,GAAInB,EAAQ,EAAA,EAC5D,SAAAA,EAAQ,KACV,CAAA,CACD,CAAA,CAAA,CAEF,CAAA,CACD,CAEF,EAKMe,EAAU,CAAC,CAAE,SAAAM,KAEjBd,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAG,EAAAA,IAACY,EAAA,CAAK,GAAG,QAAQ,UAAU,SAAS,EACpCZ,EAAAA,IAACa,EAAA,CAAW,QAAQ,YAClB,WAAiBF,EAAU,CAAE,iBAAkB,EAAG,MAAO,CAAC,GAAG,CAAA,CAAG,CAAA,CAClE,CAAA,EACD,EAOIP,EAAY,CAAC,CAAE,KAAAU,KACpBjB,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAG,EAAAA,IAACY,EAAA,CAAK,GAAG,WAAW,UAAU,SAAS,EACvCZ,EAAAA,IAACa,EAAA,CAAW,QAAQ,YAAY,UAAU,YACxC,SAAAE,EAAOC,EAASF,CAAI,EAAG,eAAe,CAAA,CACxC,CAAA,EACD,EAGKf,GAAoBkB,EAAI,qCAAsC,CACnE,SAAU,CACT,MAAO,CACN,UAAW,qBACX,OAAQ,mBACR,QAAS,oBACT,UAAW,oBACX,WAAY,oBACZ,QAAS,sBACT,OAAQ,oBACR,QAAS,oBACT,UAAW,qBAAA,CACZ,CAEF,CAAC,EC/IYC,GAAwC,CAAC,CACrD,KAAAC,CACD,IAEEnB,EAAAA,IAAC,KAAA,CAAG,UAAU,sBACZ,SAAAmB,EAAK,IAAKC,GACVpB,EAAAA,IAAC,KAAA,CACA,SAAAA,EAAAA,IAACL,EAAA,CAAQ,KAAMyB,EAAE,KAAM,QAASA,EAAE,QAAS,QAASA,EAAE,OAAA,CAAS,CAAA,EADvDA,EAAE,QAAQ,EAEnB,CACA,CAAA,CACF,ECZWC,GAAiC,CAAC,CAC9C,KAAAF,CACD,IAEEtB,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,sBACb,SAAA,CAAAG,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAwB,SAAA,MAAG,EACzCA,EAAAA,IAAC,KAAA,CAAG,UAAU,mCAAoC,WAAK,GAAA,CAAI,CAAA,EAC5D,QACC,KAAA,EAAG,EACJA,EAAAA,IAAC,KAAA,CAAG,UAAU,sBACZ,SAAAsB,GAAgBH,CAAI,EAAE,IAAKC,GAC3BvB,EAAAA,KAAC0B,EAAM,SAAN,CACA,SAAA,CAAAvB,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAAoB,EAAE,MAAM,EAC/CpB,EAAAA,IAAC,KAAA,CACA,UAAWwB,EACV,mCACAJ,EAAE,aAAe,QAAU,WAAA,EAG3B,SAAAA,EAAE,KAAA,CAAA,CACJ,GAToBA,EAAE,KAUvB,CACA,CAAA,CACF,CAAA,EACD,EAIIE,GAAmBH,GACxB,CACC,CACC,MAAO,0BACP,MAAOA,EAAK,kBACZ,WAAY,QAAA,EAEb,CACC,MAAO,oCACP,MAAOA,EAAK,cAAc,QAAU,UACpC,WAAY,QAAA,EAEb,CACC,MAAO,uBACP,MAAOA,EAAK,IAAM,UAClB,WAAY,QAAA,EAEb,CACC,MAAO,UACP,MAAOA,EAAK,QACTJ,EAAOC,EAASG,EAAK,OAAO,EAAG,eAAe,EAC9C,MACH,WAAY,MAAA,EAEb,CACC,MAAO,UACP,MAAOA,EAAK,QACTJ,EAAOC,EAASG,EAAK,OAAO,EAAG,eAAe,EAC9C,MACH,WAAY,MAAA,CAEd,ECxDYM,GAAY,CAAC,CAAE,IAAAC,WAEzB,MAAA,CAAI,UAAU,0BACd,SAAA1B,MAACM,EAAA,CACA,gBAACC,EAAA,CACA,SAAA,CAAAP,MAACQ,EAAA,CACA,SAAAR,EAAAA,IAACS,EAAA,CACA,GAAG,sBACH,UAAU,wBACV,SAAA,oBAAA,CAAA,EAGF,QACCC,EAAA,EAAoB,QACpBF,EAAA,CAAe,UAAU,wBACzB,SAAAR,EAAAA,IAAC2B,EAAA,CAAgB,WAAI,CAAA,CACtB,CAAA,CAAA,CACD,EACD,EACD,ECrBWC,GAAgC,CAAC,CAC7C,KAAAT,EACA,SAAAU,EACA,QAAAC,CACD,IAEEjC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAG,EAAAA,IAACyB,GAAA,CAAU,IAAKN,EAAK,GAAA,CAAK,EAC1BnB,EAAAA,IAAC+B,EAAA,CACA,GAAIZ,EAAK,GACT,SAAAU,EACA,QAAAC,CAAA,CAAA,CACD,EACD,ECVWE,GAAgC,CAAC,CAC7C,KAAAb,EACA,WAAAc,EACA,cAAAC,EACA,aAAAC,CACD,IAA0C,CACzC,MAAMC,EAAWC,EAAA,EAEXC,EAAe,IAAM,CAC1BJ,EAAA,EACKE,EAAS,CAAE,GAAI,sBAAuB,OAAQ,CAAE,IAAK,UAAA,EAAc,CACzE,EAEA,OAAQH,EAAA,CACP,IAAK,QACJ,OACCjC,EAAAA,IAACuC,EAAA,CACA,KAAApB,EACA,aAAAgB,EACA,QAASD,CAAA,CAAA,EAGZ,IAAK,SACJ,OACClC,EAAAA,IAACwC,EAAA,CACA,KAAArB,EACA,aAAAgB,EACA,SAAUG,CAAA,CAAA,EAGb,QACC,OAAO,IAAA,CAEV,EC3CMG,EAAWC,EAAY,2CAA2C,EAUlEC,EAAmD,CACxD,mBAAoB,CACnB,eAAgB,mBAChB,aAAc,kBAAA,CAEhB,EAQaC,GAAuC,CAAC,CACpD,SAAAC,CACD,IAAiD,CAChD,KAAM,CAAE,IAAAC,CAAA,EAAQL,EAAS,UAAA,EACnBL,EAAWK,EAAS,YAAA,EAE1B,OACC5C,EAAAA,KAACkD,EAAA,CAAK,aAAa,SAAS,MAAOD,EAClC,SAAA,CAAA9C,MAACgD,EAAA,CACA,SAAAhD,EAAAA,IAACiD,EAAA,CACA,MAAON,EAAY,kBAAkB,EAAE,eACvC,QAAS,IAAM,CACTP,EAAS,CACb,GAAI,4CACJ,OAAQ,CACP,IAAKO,EAAY,kBAAkB,EAAE,cAAA,CACtC,CACA,CACF,EAEC,SAAAA,EAAY,kBAAkB,EAAE,YAAA,CAAA,EAEnC,QACCO,EAAA,CAAY,MAAOP,EAAY,kBAAkB,EAAE,eAClD,SAAAE,CAAA,CACF,CAAA,EACD,CAEF,ECpCaM,GAA8B,CAAC,CAC3C,GAAAC,CACD,IAAwC,CACvC,KAAM,CAACnB,EAAYoB,CAAa,EAAIC,EAAAA,SAAkB,IAAI,EACpD,CAAE,KAAAnC,GAASoC,EAChBC,EAA2CJ,CAAE,CAAA,EAGxCK,EAAyB,IAAMJ,EAAc,QAAQ,EACrDK,EAAwB,IAAML,EAAc,OAAO,EACnDM,EAAoB,IAAMN,EAAc,IAAI,EAG5CO,EAAoBC,GAAkB,CACtCA,GACJF,EAAA,CAEF,EAEM,CAAE,sBAAAG,EAAuB,wBAAAC,CAAA,EAA4B5C,EACrD6C,EAAoBD,EAAwB,cAAc,OAChE,OACClE,EAAAA,KAAAoE,WAAA,CACC,SAAA,CAAApE,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAG,EAAAA,IAAC4B,GAAA,CACA,KAAMmC,EACN,SAAUN,EACV,QAASC,CAAA,CAAA,EAEV7D,OAAC,OAAI,UAAU,aAAa,MAAO,CAAE,oBAAqB,WACzD,SAAA,CAAAG,MAAC4C,GAAA,CACA,SAAA5C,EAAAA,IAACkE,EAAA,CACA,QAASJ,EACT,SAAU9D,EAAAA,IAACmE,GAAA,CAAgB,OAAQH,CAAA,CAAmB,EAErD,SAACI,GACDpE,EAAAA,IAACkB,GAAA,CAAsC,KAAMkD,CAAA,CAAgB,CAAA,CAAA,EAGhE,EACApE,EAAAA,IAACqB,GAAA,CAA+B,KAAM0C,CAAA,CAAyB,CAAA,CAAA,CAChE,CAAA,EACD,EACA/D,EAAAA,IAACgC,GAAA,CACA,KAAM+B,EACN,WAAA9B,EACA,aAAc2B,EACd,cAAeD,CAAA,CAAA,CAChB,EACD,CAEF,EAGMQ,GAAkB,CAAC,CAAE,OAAAE,EAAS,CAAA,IACnCrE,EAAAA,IAAC,MAAA,CAAI,UAAU,sBACb,eAAM,KAAK,CAAE,OAAAqE,CAAA,EAAU,CAACC,EAAGC,IAE3B1E,EAAAA,KAACC,EAAA,CAAiB,UAAU,gBAC3B,SAAA,CAAAE,EAAAA,IAACwE,EAAA,CAAS,UAAU,eAAA,CAAgB,EACpCxE,EAAAA,IAACwE,EAAA,CAAS,UAAU,eAAA,CAAgB,CAAA,CAAA,EAF1BD,CAGX,CACA,EACF,ECxEoBE,EAAS,CAC7B3B,IAAK2B,EAAO,CAAC,kBAAkB,CAAC,EAAEC,QAAQ,kBAAkB,CAC7D,CAAC,EAgBD,SAASC,IAAiB,CACzB,KAAM,CAAEvB,GAAAA,CAAAA,EAAOwB,EAAMC,UAAAA,EACrB,OAAO7E,MAACmD,IAA4B,GAAAC,EAAO,CAC5C"}
@@ -1,2 +1,2 @@
1
- import{j as t,u as d,s as l}from"./vendor-tanstack-BK8oseNA.js";import{D as p,B as x,g as b,h as i,bq as f,bz as g,bB as j,bC as h,bD as v,bE as D,x as m}from"./index-WYPZo52S.js";import"./automation-schema-ClcP8M93.js";import{A as B}from"./automation-wizard-Bx9AQxRV.js";import{t as N}from"./event-to-trigger-BEzU9b5I.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./vendor-forms-DxqqmhL5.js";import"./vendor-date-7GxEwcQM.js";import"./zod-DgSl2Nua.js";import"./form-BTub_PhK.js";import"./use-stepper-T3wAKNvM.js";import"./index-DSaSov8V.js";import"./textarea-D8LjlIx7.js";import"./radio-group-DkAK0M2h.js";import"./collapsible-DBD7wjpi.js";import"./tags-input-D1RJZEUA.js";const A=()=>t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx(y,{}),t.jsx(p,{label:"Documentation",id:"automations-guide"})]}),y=()=>t.jsx("div",{className:"flex items-center gap-2",children:t.jsx(x,{children:t.jsxs(b,{children:[t.jsx(i,{children:t.jsx(f,{to:"/automations",className:"text-xl font-semibold",children:"Automations"})}),t.jsx(g,{}),t.jsx(i,{className:"text-xl font-semibold",children:t.jsx(j,{children:"Create"})})]})})});function E(a){const[e,o,s]=a.split("-").map(Number);return new Date(e,o-1,s)}function S(){const{eventId:a,eventDate:e}=v.useSearch(),o=!!(a&&e),{data:s}=l({...D(a??"",e?E(e):new Date),enabled:o});if(!o||!s)return;const{trigger:n,triggerTemplate:r}=N(s);return{trigger:n,triggerTemplate:r}}function K(){const{createAutomation:a,isPending:e}=h(),o=d(),s=S(),n=r=>{const c={name:r.name,description:r.description??"",enabled:!0,trigger:r.trigger,actions:r.actions};a(c,{onSuccess:()=>{m.success("Automation created successfully"),o({to:"/automations"})},onError:u=>{m.error(`Failed to create automation: ${u.message}`)}})};return t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsx(A,{}),t.jsx(B,{defaultValues:s,onSubmit:n,isSubmitting:e})]})}export{K as component};
2
- //# sourceMappingURL=create-Bj2t5YQq.js.map
1
+ import{j as t,u as d,s as l}from"./vendor-tanstack-BK8oseNA.js";import{D as p,B as x,g as b,h as i,bs as f,bB as g,bD as j,bE as h,bF as v,bG as D,y as m}from"./index-BvSl3DKP.js";import"./automation-schema-ClcP8M93.js";import{A as B}from"./automation-wizard-DuxZ47Nn.js";import{t as N}from"./event-to-trigger-BEzU9b5I.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./vendor-forms-DxqqmhL5.js";import"./vendor-date-7GxEwcQM.js";import"./zod-DgSl2Nua.js";import"./form-CVSlEnl8.js";import"./use-stepper-C1wm66U2.js";import"./index-DODEq1Pi.js";import"./textarea-BAtfAxtV.js";import"./radio-group-D0van45v.js";import"./collapsible-DM-Ze5-Y.js";import"./tags-input-Ci2JQ-k3.js";const y=()=>t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx(A,{}),t.jsx(p,{label:"Documentation",id:"automations-guide"})]}),A=()=>t.jsx("div",{className:"flex items-center gap-2",children:t.jsx(x,{children:t.jsxs(b,{children:[t.jsx(i,{children:t.jsx(f,{to:"/automations",className:"text-xl font-semibold",children:"Automations"})}),t.jsx(g,{}),t.jsx(i,{className:"text-xl font-semibold",children:t.jsx(j,{children:"Create"})})]})})});function E(a){const[e,o,s]=a.split("-").map(Number);return new Date(e,o-1,s)}function S(){const{eventId:a,eventDate:e}=v.useSearch(),o=!!(a&&e),{data:s}=l({...D(a??"",e?E(e):new Date),enabled:o});if(!o||!s)return;const{trigger:n,triggerTemplate:r}=N(s);return{trigger:n,triggerTemplate:r}}function K(){const{createAutomation:a,isPending:e}=h(),o=d(),s=S(),n=r=>{const c={name:r.name,description:r.description??"",enabled:!0,trigger:r.trigger,actions:r.actions};a(c,{onSuccess:()=>{m.success("Automation created successfully"),o({to:"/automations"})},onError:u=>{m.error(`Failed to create automation: ${u.message}`)}})};return t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsx(y,{}),t.jsx(B,{defaultValues:s,onSubmit:n,isSubmitting:e})]})}export{K as component};
2
+ //# sourceMappingURL=create-BMxUOyN5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-Bj2t5YQq.js","sources":["../../src/components/automations/automations-create-header/automations-create-header.tsx","../../src/routes/automations/create.tsx?tsr-split=component"],"sourcesContent":["import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\n\nexport const AutomationsCreateHeader = () => (\n\t<div className=\"flex items-center justify-between\">\n\t\t<NavHeader />\n\t\t<DocsLink label=\"Documentation\" id=\"automations-guide\" />\n\t</div>\n);\n\nconst NavHeader = () => (\n\t<div className=\"flex items-center gap-2\">\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink to=\"/automations\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tAutomations\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t<BreadcrumbPage>Create</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t</div>\n);\n","import { useQuery } from \"@tanstack/react-query\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { useCreateAutomation } from \"@/api/automations\";\nimport { buildGetEventQuery } from \"@/api/events\";\nimport type { components } from \"@/api/prefect\";\nimport { AutomationsCreateHeader } from \"@/components/automations/automations-create-header\";\nimport {\n\tAutomationWizard,\n\ttype AutomationWizardSchemaType,\n\ttransformEventToTrigger,\n} from \"@/components/automations/automations-wizard\";\n\ntype AutomationCreate = components[\"schemas\"][\"AutomationCreate\"];\n\n/**\n * Search params schema for the create automation route.\n * Supports pre-populating the wizard from an event.\n */\nconst searchParams = z.object({\n\tactions: z.record(z.unknown()).optional(),\n\t/** Event ID to pre-populate the trigger from */\n\teventId: z.string().optional(),\n\t/** Event date in YYYY-MM-DD format for fetching the event */\n\teventDate: z.string().optional(),\n});\n\n/**\n * Parses a YYYY-MM-DD date string into a Date object.\n */\nfunction parseRouteDate(dateStr: string): Date {\n\tconst [year, month, day] = dateStr.split(\"-\").map(Number);\n\treturn new Date(year, month - 1, day);\n}\n\nexport const Route = createFileRoute(\"/automations/create\")({\n\tcomponent: RouteComponent,\n\tvalidateSearch: zodValidator(searchParams),\n\tloaderDeps: ({ search }) => ({\n\t\teventId: search.eventId,\n\t\teventDate: search.eventDate,\n\t}),\n\tloader: ({ deps, context: { queryClient } }) => {\n\t\t// Prefetch event data if eventId and eventDate are provided\n\t\tif (deps.eventId && deps.eventDate) {\n\t\t\tconst eventDate = parseRouteDate(deps.eventDate);\n\t\t\tvoid queryClient.prefetchQuery(\n\t\t\t\tbuildGetEventQuery(deps.eventId, eventDate),\n\t\t\t);\n\t\t}\n\t},\n\twrapInSuspense: true,\n});\n\n/**\n * Hook to get default values for the automation wizard when pre-populating from an event.\n * Returns undefined if no event params are provided.\n */\nfunction useEventDefaultValues() {\n\tconst { eventId, eventDate } = Route.useSearch();\n\n\t// Only fetch if both params are provided\n\tconst shouldFetch = Boolean(eventId && eventDate);\n\n\t// Use useQuery (not useSuspenseQuery) because useSuspenseQuery doesn't support enabled option\n\tconst { data: event } = useQuery({\n\t\t...buildGetEventQuery(\n\t\t\teventId ?? \"\",\n\t\t\teventDate ? parseRouteDate(eventDate) : new Date(),\n\t\t),\n\t\tenabled: shouldFetch,\n\t});\n\n\tif (!shouldFetch || !event) {\n\t\treturn undefined;\n\t}\n\n\tconst { trigger, triggerTemplate } = transformEventToTrigger(event);\n\treturn {\n\t\ttrigger,\n\t\ttriggerTemplate,\n\t};\n}\n\nfunction RouteComponent() {\n\tconst { createAutomation, isPending } = useCreateAutomation();\n\tconst navigate = useNavigate();\n\tconst eventDefaultValues = useEventDefaultValues();\n\n\tconst handleSubmit = (values: AutomationWizardSchemaType) => {\n\t\tconst automationData: AutomationCreate = {\n\t\t\tname: values.name,\n\t\t\tdescription: values.description ?? \"\",\n\t\t\tenabled: true,\n\t\t\ttrigger: values.trigger,\n\t\t\tactions: values.actions,\n\t\t};\n\n\t\tcreateAutomation(automationData, {\n\t\t\tonSuccess: () => {\n\t\t\t\ttoast.success(\"Automation created successfully\");\n\t\t\t\tvoid navigate({ to: \"/automations\" });\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\ttoast.error(`Failed to create automation: ${error.message}`);\n\t\t\t},\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<AutomationsCreateHeader />\n\t\t\t<AutomationWizard\n\t\t\t\tdefaultValues={eventDefaultValues}\n\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\tisSubmitting={isPending}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"names":["AutomationsCreateHeader","jsxs","jsx","NavHeader","DocsLink","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","parseRouteDate","dateStr","year","month","day","split","map","Number","Date","useEventDefaultValues","eventId","eventDate","Route","useSearch","shouldFetch","Boolean","data","event","useQuery","buildGetEventQuery","enabled","trigger","triggerTemplate","transformEventToTrigger","RouteComponent","createAutomation","isPending","useCreateAutomation","navigate","useNavigate","eventDefaultValues","handleSubmit","values","automationData","name","description","actions","onSuccess","toast","success","to","onError","error","message","AutomationWizard"],"mappings":"2uBAUO,MAAMA,EAA0B,IACtCC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAU,EACXD,EAAAA,IAACE,EAAA,CAAS,MAAM,gBAAgB,GAAG,mBAAA,CAAoB,CAAA,EACxD,EAGKD,EAAY,IACjBD,EAAAA,IAAC,MAAA,CAAI,UAAU,0BACd,SAAAA,EAAAA,IAACG,EAAA,CACA,SAAAJ,EAAAA,KAACK,EAAA,CACA,SAAA,CAAAJ,EAAAA,IAACK,EAAA,CACA,eAACC,EAAA,CAAe,GAAG,eAAe,UAAU,wBAAwB,uBAEpE,CAAA,CACD,QACCC,EAAA,EAAoB,QACpBF,EAAA,CAAe,UAAU,wBACzB,SAAAL,EAAAA,IAACQ,EAAA,CAAe,kBAAM,CAAA,CACvB,CAAA,CAAA,CACD,EACD,EACD,ECAD,SAASC,EAAeC,EAAuB,CAC9C,KAAM,CAACC,EAAMC,EAAOC,CAAG,EAAIH,EAAQI,MAAM,GAAG,EAAEC,IAAIC,MAAM,EACxD,OAAO,IAAIC,KAAKN,EAAMC,EAAQ,EAAGC,CAAG,CACrC,CAyBA,SAASK,GAAwB,CAChC,KAAM,CAAEC,QAAAA,EAASC,UAAAA,CAAAA,EAAcC,EAAMC,UAAAA,EAG/BC,EAAcC,GAAQL,GAAWC,GAGjC,CAAEK,KAAMC,CAAAA,EAAUC,EAAS,CAChC,GAAGC,EACFT,GAAW,GACXC,EAAYX,EAAeW,CAAS,EAAI,IAAIH,IAC7C,EACAY,QAASN,CAAAA,CACT,EAED,GAAI,CAACA,GAAe,CAACG,EACpB,OAGD,KAAM,CAAEI,QAAAA,EAASC,gBAAAA,CAAAA,EAAoBC,EAAwBN,CAAK,EAClE,MAAO,CACNI,QAAAA,EACAC,gBAAAA,CAAAA,CAEF,CAEA,SAASE,GAAiB,CACzB,KAAM,CAAEC,iBAAAA,EAAkBC,UAAAA,CAAAA,EAAcC,EAAAA,EAClCC,EAAWC,EAAAA,EACXC,EAAqBrB,EAAAA,EAErBsB,EAAgBC,GAAuC,CAC5D,MAAMC,EAAmC,CACxCC,KAAMF,EAAOE,KACbC,YAAaH,EAAOG,aAAe,GACnCf,QAAS,GACTC,QAASW,EAAOX,QAChBe,QAASJ,EAAOI,OAAAA,EAGjBX,EAAiBQ,EAAgB,CAChCI,UAAWA,IAAM,CAChBC,EAAMC,QAAQ,iCAAiC,EAC1CX,EAAS,CAAEY,GAAI,cAAA,CAAgB,CACrC,EACAC,QAAUC,GAAU,CACnBJ,EAAMI,MAAM,gCAAgCA,EAAMC,OAAO,EAAE,CAC5D,CAAA,CACA,CACF,EAEA,OACCrD,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAC,EAAAA,IAACF,EAAA,EAAuB,QACvBuD,EAAA,CACA,cAAed,EACf,SAAUC,EACV,aAAcL,CAAAA,CAAU,CAAA,EAE1B,CAEF"}
1
+ {"version":3,"file":"create-BMxUOyN5.js","sources":["../../src/components/automations/automations-create-header/automations-create-header.tsx","../../src/routes/automations/create.tsx?tsr-split=component"],"sourcesContent":["import {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\n\nexport const AutomationsCreateHeader = () => (\n\t<div className=\"flex items-center justify-between\">\n\t\t<NavHeader />\n\t\t<DocsLink label=\"Documentation\" id=\"automations-guide\" />\n\t</div>\n);\n\nconst NavHeader = () => (\n\t<div className=\"flex items-center gap-2\">\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink to=\"/automations\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tAutomations\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t<BreadcrumbPage>Create</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t</div>\n);\n","import { useQuery } from \"@tanstack/react-query\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { useCreateAutomation } from \"@/api/automations\";\nimport { buildGetEventQuery } from \"@/api/events\";\nimport type { components } from \"@/api/prefect\";\nimport { AutomationsCreateHeader } from \"@/components/automations/automations-create-header\";\nimport {\n\tAutomationWizard,\n\ttype AutomationWizardSchemaType,\n\ttransformEventToTrigger,\n} from \"@/components/automations/automations-wizard\";\n\ntype AutomationCreate = components[\"schemas\"][\"AutomationCreate\"];\n\n/**\n * Search params schema for the create automation route.\n * Supports pre-populating the wizard from an event.\n */\nconst searchParams = z.object({\n\tactions: z.record(z.unknown()).optional(),\n\t/** Event ID to pre-populate the trigger from */\n\teventId: z.string().optional(),\n\t/** Event date in YYYY-MM-DD format for fetching the event */\n\teventDate: z.string().optional(),\n});\n\n/**\n * Parses a YYYY-MM-DD date string into a Date object.\n */\nfunction parseRouteDate(dateStr: string): Date {\n\tconst [year, month, day] = dateStr.split(\"-\").map(Number);\n\treturn new Date(year, month - 1, day);\n}\n\nexport const Route = createFileRoute(\"/automations/create\")({\n\tcomponent: RouteComponent,\n\tvalidateSearch: zodValidator(searchParams),\n\tloaderDeps: ({ search }) => ({\n\t\teventId: search.eventId,\n\t\teventDate: search.eventDate,\n\t}),\n\tloader: ({ deps, context: { queryClient } }) => {\n\t\t// Prefetch event data if eventId and eventDate are provided\n\t\tif (deps.eventId && deps.eventDate) {\n\t\t\tconst eventDate = parseRouteDate(deps.eventDate);\n\t\t\tvoid queryClient.prefetchQuery(\n\t\t\t\tbuildGetEventQuery(deps.eventId, eventDate),\n\t\t\t);\n\t\t}\n\t},\n\twrapInSuspense: true,\n});\n\n/**\n * Hook to get default values for the automation wizard when pre-populating from an event.\n * Returns undefined if no event params are provided.\n */\nfunction useEventDefaultValues() {\n\tconst { eventId, eventDate } = Route.useSearch();\n\n\t// Only fetch if both params are provided\n\tconst shouldFetch = Boolean(eventId && eventDate);\n\n\t// Use useQuery (not useSuspenseQuery) because useSuspenseQuery doesn't support enabled option\n\tconst { data: event } = useQuery({\n\t\t...buildGetEventQuery(\n\t\t\teventId ?? \"\",\n\t\t\teventDate ? parseRouteDate(eventDate) : new Date(),\n\t\t),\n\t\tenabled: shouldFetch,\n\t});\n\n\tif (!shouldFetch || !event) {\n\t\treturn undefined;\n\t}\n\n\tconst { trigger, triggerTemplate } = transformEventToTrigger(event);\n\treturn {\n\t\ttrigger,\n\t\ttriggerTemplate,\n\t};\n}\n\nfunction RouteComponent() {\n\tconst { createAutomation, isPending } = useCreateAutomation();\n\tconst navigate = useNavigate();\n\tconst eventDefaultValues = useEventDefaultValues();\n\n\tconst handleSubmit = (values: AutomationWizardSchemaType) => {\n\t\tconst automationData: AutomationCreate = {\n\t\t\tname: values.name,\n\t\t\tdescription: values.description ?? \"\",\n\t\t\tenabled: true,\n\t\t\ttrigger: values.trigger,\n\t\t\tactions: values.actions,\n\t\t};\n\n\t\tcreateAutomation(automationData, {\n\t\t\tonSuccess: () => {\n\t\t\t\ttoast.success(\"Automation created successfully\");\n\t\t\t\tvoid navigate({ to: \"/automations\" });\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\ttoast.error(`Failed to create automation: ${error.message}`);\n\t\t\t},\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<AutomationsCreateHeader />\n\t\t\t<AutomationWizard\n\t\t\t\tdefaultValues={eventDefaultValues}\n\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\tisSubmitting={isPending}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"names":["AutomationsCreateHeader","jsxs","jsx","NavHeader","DocsLink","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","parseRouteDate","dateStr","year","month","day","split","map","Number","Date","useEventDefaultValues","eventId","eventDate","Route","useSearch","shouldFetch","Boolean","data","event","useQuery","buildGetEventQuery","enabled","trigger","triggerTemplate","transformEventToTrigger","RouteComponent","createAutomation","isPending","useCreateAutomation","navigate","useNavigate","eventDefaultValues","handleSubmit","values","automationData","name","description","actions","onSuccess","toast","success","to","onError","error","message","AutomationWizard"],"mappings":"2uBAUO,MAAMA,EAA0B,IACtCC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAU,EACXD,EAAAA,IAACE,EAAA,CAAS,MAAM,gBAAgB,GAAG,mBAAA,CAAoB,CAAA,EACxD,EAGKD,EAAY,IACjBD,EAAAA,IAAC,MAAA,CAAI,UAAU,0BACd,SAAAA,EAAAA,IAACG,EAAA,CACA,SAAAJ,EAAAA,KAACK,EAAA,CACA,SAAA,CAAAJ,EAAAA,IAACK,EAAA,CACA,eAACC,EAAA,CAAe,GAAG,eAAe,UAAU,wBAAwB,uBAEpE,CAAA,CACD,QACCC,EAAA,EAAoB,QACpBF,EAAA,CAAe,UAAU,wBACzB,SAAAL,EAAAA,IAACQ,EAAA,CAAe,kBAAM,CAAA,CACvB,CAAA,CAAA,CACD,EACD,EACD,ECAD,SAASC,EAAeC,EAAuB,CAC9C,KAAM,CAACC,EAAMC,EAAOC,CAAG,EAAIH,EAAQI,MAAM,GAAG,EAAEC,IAAIC,MAAM,EACxD,OAAO,IAAIC,KAAKN,EAAMC,EAAQ,EAAGC,CAAG,CACrC,CAyBA,SAASK,GAAwB,CAChC,KAAM,CAAEC,QAAAA,EAASC,UAAAA,CAAAA,EAAcC,EAAMC,UAAAA,EAG/BC,EAAcC,GAAQL,GAAWC,GAGjC,CAAEK,KAAMC,CAAAA,EAAUC,EAAS,CAChC,GAAGC,EACFT,GAAW,GACXC,EAAYX,EAAeW,CAAS,EAAI,IAAIH,IAC7C,EACAY,QAASN,CAAAA,CACT,EAED,GAAI,CAACA,GAAe,CAACG,EACpB,OAGD,KAAM,CAAEI,QAAAA,EAASC,gBAAAA,CAAAA,EAAoBC,EAAwBN,CAAK,EAClE,MAAO,CACNI,QAAAA,EACAC,gBAAAA,CAAAA,CAEF,CAEA,SAASE,GAAiB,CACzB,KAAM,CAAEC,iBAAAA,EAAkBC,UAAAA,CAAAA,EAAcC,EAAAA,EAClCC,EAAWC,EAAAA,EACXC,EAAqBrB,EAAAA,EAErBsB,EAAgBC,GAAuC,CAC5D,MAAMC,EAAmC,CACxCC,KAAMF,EAAOE,KACbC,YAAaH,EAAOG,aAAe,GACnCf,QAAS,GACTC,QAASW,EAAOX,QAChBe,QAASJ,EAAOI,OAAAA,EAGjBX,EAAiBQ,EAAgB,CAChCI,UAAWA,IAAM,CAChBC,EAAMC,QAAQ,iCAAiC,EAC1CX,EAAS,CAAEY,GAAI,cAAA,CAAgB,CACrC,EACAC,QAAUC,GAAU,CACnBJ,EAAMI,MAAM,gCAAgCA,EAAMC,OAAO,EAAE,CAC5D,CAAA,CACA,CACF,EAEA,OACCrD,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAC,EAAAA,IAACF,EAAA,EAAuB,QACvBuD,EAAA,CACA,cAAed,EACf,SAAUC,EACV,aAAcL,CAAAA,CAAU,CAAA,EAE1B,CAEF"}
@@ -1,2 +1,2 @@
1
- import{j as e,p as V,r as W,f as I}from"./vendor-tanstack-BK8oseNA.js";import{a as R}from"./zod-DgSl2Nua.js";import{g as B,o as P,n as U,s as N,r as D,u as q,c as A}from"./vendor-forms-DxqqmhL5.js";import{o as _,C as T,n as F,bu as G,aU as S,bv as J,bw as $,G as M,bx as O,l as Q,m as z,p as v,x as w}from"./index-WYPZo52S.js";import{b as x,c as f,d as h,e as j,a as b,F as H}from"./form-BTub_PhK.js";import{u as K,S as X}from"./use-stepper-T3wAKNvM.js";import{T as Y}from"./textarea-D8LjlIx7.js";import"./schema-form-input-string-format-datetime-BhL8C5NS.js";import"./toggle-group-D3zeurIL.js";import{B as Z}from"./base-job-template-form-section-a-9TFMcW.js";import{R as ee,a as te}from"./radio-group-DkAK0M2h.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./vendor-date-7GxEwcQM.js";import"./use-debounce-callback-ClAx-Wwx.js";import"./timezone-select-BG3cL3-U.js";import"./dropdown-menu-xZ_3w9OP.js";import"./schema-form-BR4E-WXE.js";function re(){const a=B();return e.jsxs(e.Fragment,{children:[e.jsx(x,{control:a.control,name:"name",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Name"}),e.jsx(j,{children:e.jsx(_,{...o})}),e.jsx(b,{})]})}),e.jsx(x,{control:a.control,name:"description",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Description (Optional)"}),e.jsx(j,{children:e.jsx(Y,{...o,value:o.value??"",rows:7,placeholder:"Enter a description for your work pool"})}),e.jsx(b,{})]})}),e.jsx(x,{control:a.control,name:"concurrencyLimit",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Flow Run Concurrency (Optional)"}),e.jsx(j,{children:e.jsx(_,{...o,type:"number",min:0,placeholder:"Unlimited",value:o.value??"",onChange:i=>{const n=i.target.value;o.onChange(n===""?null:Number(n))}})}),e.jsx(b,{})]})})]})}const se=P({name:N().min(1,"Name is required").refine(a=>!a.toLowerCase().startsWith("prefect"),"Work pools starting with 'prefect' are reserved for internal use."),description:N().nullable().optional(),concurrencyLimit:U().min(0).nullable().optional()});function oe(){const a=B(),o=a.watch("baseJobTemplate");return e.jsxs("div",{className:"space-y-6",children:[e.jsx(T,{children:e.jsx(F,{children:e.jsxs(G,{children:["The fields below control the default values for the base job template. These values can be overridden by deployments.",e.jsx("br",{}),e.jsx("br",{}),"A work pools job template controls infrastructure configuration for all flow runs in the work pool, and specifies the configuration that can be overridden by deployments."]})})}),e.jsx(Z,{baseJobTemplate:o,onBaseJobTemplateChange:i=>{a.setValue("baseJobTemplate",i)}})]})}const ae=P({baseJobTemplate:D(q()).optional()}),k={sm:"h-4 w-4",md:"h-8 w-8",lg:"h-12 w-12"},ne=({url:a,alt:o,size:i="md",className:n})=>a?e.jsx("img",{src:a,alt:o,className:S("rounded border bg-background/50 backdrop-blur-sm object-contain",k[i],n),onError:t=>{const r=t.target,s=document.createElement("div");s.className=S("rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs",k[i],n),s.textContent=o.charAt(0).toUpperCase(),r.parentNode?.replaceChild(s,r)}}):e.jsx("div",{className:S("rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs",k[i],n),children:o.charAt(0).toUpperCase()});function ie(){const a=B(),{data:o={}}=V(J()),i=W.useMemo(()=>{const n=[];return Object.values(o).forEach(t=>{t&&typeof t=="object"&&Object.values(t).forEach(r=>{if(r&&typeof r=="object"&&"type"in r){const{type:s,display_name:u,description:d,logo_url:p,documentation_url:y,is_beta:g}=r;s&&p&&d&&n.push({label:u||$(s),value:s,logoUrl:p,description:d,documentationUrl:y,isBeta:g||!1})}})}),n.sort((t,r)=>t.isBeta&&!r.isBeta?1:!t.isBeta&&r.isBeta?-1:t.label.localeCompare(r.label))},[o]);return e.jsx(x,{control:a.control,name:"type",render:({field:n,fieldState:t})=>e.jsxs(f,{children:[e.jsx(h,{className:"text-base font-medium",children:"Select the infrastructure you want to use to execute your flow runs"}),e.jsx(j,{children:e.jsx(ee,{value:n.value,onValueChange:r=>n.onChange(r),className:"space-y-3",children:i.map(({label:r,value:s,logoUrl:u,description:d,isBeta:p})=>e.jsxs("div",{className:"flex items-center space-x-3 p-4 rounded-lg border hover:bg-accent/50",children:[e.jsx(te,{value:s,id:s}),e.jsx("label",{htmlFor:s,className:"flex-1 cursor-pointer",children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(ne,{url:u,alt:r,size:"md"}),e.jsxs("div",{className:"flex flex-col gap-2 flex-1",children:[e.jsxs("p",{className:"text-base font-medium flex items-center",children:[r,p&&e.jsx(M,{variant:"secondary",className:"ml-2 text-xs",children:"Beta"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:d})]})]})})]},s))})}),t.error&&e.jsx(b,{children:t.error.message})]})})}const E=["Infrastructure Type","Details","Configuration"],ce=P({type:N().min(1,"Infrastructure type is required"),...se.shape,...ae.shape});function le(){const a=I(),{createWorkPool:o,isPending:i}=O(),{data:n={}}=V(J()),t=K(E.length),r=A({resolver:R(ce),defaultValues:{description:null,concurrencyLimit:null}}),s=r.watch("type");W.useEffect(()=>{const c=Object.values(n).find(l=>l&&typeof l=="object"&&Object.values(l).find(m=>m&&typeof m=="object"&&"type"in m&&m.type===s));c&&s in c&&typeof c[s]=="object"&&c[s]&&"default_base_job_configuration"in c[s]&&r.setValue("baseJobTemplate",c[s].default_base_job_configuration)},[n,r,s]);const u=async()=>{const c=g(t.currentStep);await r.trigger(c)&&(t.isFinalStep?await y():t.incrementStep())},d=()=>{t.decrementStep()},p=()=>{a.navigate({to:"/work-pools"})},y=async()=>{if(!await r.trigger())return;const l=r.getValues();if(!l.name||!l.type){w.error("Please fill in all required fields");return}const m={name:l.name,type:l.type,description:l.description,is_paused:!1,concurrency_limit:l.concurrencyLimit,base_job_template:l.baseJobTemplate||{}};o(m,{onSuccess:C=>{w.success(`Work pool "${l.name}" created successfully`),a.navigate({to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:C.data?.name||l.name}})},onError:C=>{w.error(`Failed to create work pool: ${C.message}`)}})},g=c=>{switch(c){case 0:return["type"];case 1:return["name","description","concurrencyLimit"];case 2:return["baseJobTemplate"];default:return[]}},L=()=>{switch(t.currentStep){case 0:return e.jsx(ie,{});case 1:return e.jsx(re,{});case 2:return e.jsx(oe,{});default:return null}};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs(T,{children:[e.jsx(Q,{children:e.jsx(z,{children:"Create Work Pool"})}),e.jsx(F,{children:e.jsx(X,{currentStepNum:t.currentStep,steps:E,onClick:({stepNum:c})=>{t.visitedStepsSet.has(c)&&t.changeStep(c)},completedSteps:t.completedStepsSet,visitedSteps:t.visitedStepsSet})})]}),e.jsx(T,{children:e.jsx(F,{className:"pt-6",children:e.jsx(H,{...r,children:e.jsx("form",{className:"space-y-6",children:L()})})})}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("div",{children:[!t.isStartingStep&&e.jsx(v,{variant:"outline",onClick:d,disabled:i,children:"Back"}),e.jsx(v,{variant:"ghost",onClick:p,disabled:i,className:"ml-2",children:"Cancel"})]}),e.jsx(v,{onClick:()=>{u()},disabled:i,children:i?"Creating...":t.isFinalStep?"Create Work Pool":"Next"})]})]})}const Be=le;export{Be as component};
2
- //# sourceMappingURL=create-noFojqGL.js.map
1
+ import{j as e,p as E,r as V,f as I}from"./vendor-tanstack-BK8oseNA.js";import{a as R}from"./zod-DgSl2Nua.js";import{g as B,o as P,n as D,s as N,r as U,u as q,c as A}from"./vendor-forms-DxqqmhL5.js";import{p as _,C as T,o as F,bw as $,aW as S,bx as J,by as z,H as G,bz as H,m as M,n as O,q as v,y as w}from"./index-BvSl3DKP.js";import{b as x,c as f,d as h,e as j,a as b,F as Q}from"./form-CVSlEnl8.js";import{u as K,S as X}from"./use-stepper-C1wm66U2.js";import{T as Y}from"./textarea-BAtfAxtV.js";import"./schema-form-input-string-format-datetime-CZt6AJ4z.js";import"./toggle-group-BJN1vjEh.js";import{B as Z}from"./base-job-template-form-section-BDkqOkpe.js";import{R as ee,a as te}from"./radio-group-D0van45v.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./vendor-date-7GxEwcQM.js";import"./use-debounce-callback-ClAx-Wwx.js";import"./timezone-select-QlQTZSsF.js";import"./dropdown-menu-CT-s-V7d.js";import"./schema-form-2tg5SXM4.js";function re(){const a=B();return e.jsxs(e.Fragment,{children:[e.jsx(x,{control:a.control,name:"name",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Name"}),e.jsx(j,{children:e.jsx(_,{...o})}),e.jsx(b,{})]})}),e.jsx(x,{control:a.control,name:"description",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Description (Optional)"}),e.jsx(j,{children:e.jsx(Y,{...o,value:o.value??"",rows:7,placeholder:"Enter a description for your work pool"})}),e.jsx(b,{})]})}),e.jsx(x,{control:a.control,name:"concurrencyLimit",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Flow Run Concurrency (Optional)"}),e.jsx(j,{children:e.jsx(_,{...o,type:"number",min:0,placeholder:"Unlimited",value:o.value??"",onChange:i=>{const n=i.target.value;o.onChange(n===""?null:Number(n))}})}),e.jsx(b,{})]})})]})}const se=P({name:N().min(1,"Name is required").refine(a=>!a.toLowerCase().startsWith("prefect"),"Work pools starting with 'prefect' are reserved for internal use."),description:N().nullable().optional(),concurrencyLimit:D().min(0).nullable().optional()});function oe(){const a=B(),o=a.watch("baseJobTemplate");return e.jsxs("div",{className:"space-y-6",children:[e.jsx(T,{children:e.jsx(F,{children:e.jsxs($,{children:["The fields below control the default values for the base job template. These values can be overridden by deployments.",e.jsx("br",{}),e.jsx("br",{}),"A work pools job template controls infrastructure configuration for all flow runs in the work pool, and specifies the configuration that can be overridden by deployments."]})})}),e.jsx(Z,{baseJobTemplate:o,onBaseJobTemplateChange:i=>{a.setValue("baseJobTemplate",i)}})]})}const ae=P({baseJobTemplate:U(q()).optional()}),k={sm:"h-4 w-4",md:"h-8 w-8",lg:"h-12 w-12"},ne=({url:a,alt:o,size:i="md",className:n})=>a?e.jsx("img",{src:a,alt:o,className:S("rounded border bg-background/50 backdrop-blur-sm object-contain",k[i],n),onError:t=>{const r=t.target,s=document.createElement("div");s.className=S("rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs",k[i],n),s.textContent=o.charAt(0).toUpperCase(),r.parentNode?.replaceChild(s,r)}}):e.jsx("div",{className:S("rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs",k[i],n),children:o.charAt(0).toUpperCase()});function ie(){const a=B(),{data:o={}}=E(J()),i=V.useMemo(()=>{const n=[];return Object.values(o).forEach(t=>{t&&typeof t=="object"&&Object.values(t).forEach(r=>{if(r&&typeof r=="object"&&"type"in r){const{type:s,display_name:u,description:d,logo_url:p,documentation_url:y,is_beta:g}=r;s&&p&&d&&n.push({label:u||z(s),value:s,logoUrl:p,description:d,documentationUrl:y,isBeta:g||!1})}})}),n.sort((t,r)=>t.isBeta&&!r.isBeta?1:!t.isBeta&&r.isBeta?-1:t.label.localeCompare(r.label))},[o]);return e.jsx(x,{control:a.control,name:"type",render:({field:n,fieldState:t})=>e.jsxs(f,{children:[e.jsx(h,{className:"text-base font-medium",children:"Select the infrastructure you want to use to execute your flow runs"}),e.jsx(j,{children:e.jsx(ee,{value:n.value,onValueChange:r=>n.onChange(r),className:"space-y-3",children:i.map(({label:r,value:s,logoUrl:u,description:d,isBeta:p})=>e.jsxs("div",{className:"flex items-center space-x-3 p-4 rounded-lg border hover:bg-accent/50",children:[e.jsx(te,{value:s,id:s}),e.jsx("label",{htmlFor:s,className:"flex-1 cursor-pointer",children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(ne,{url:u,alt:r,size:"md"}),e.jsxs("div",{className:"flex flex-col gap-2 flex-1",children:[e.jsxs("p",{className:"text-base font-medium flex items-center",children:[r,p&&e.jsx(G,{variant:"secondary",className:"ml-2 text-xs",children:"Beta"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:d})]})]})})]},s))})}),t.error&&e.jsx(b,{children:t.error.message})]})})}const W=["Infrastructure Type","Details","Configuration"],ce=P({type:N().min(1,"Infrastructure type is required"),...se.shape,...ae.shape});function le(){const a=I(),{createWorkPool:o,isPending:i}=H(),{data:n={}}=E(J()),t=K(W.length),r=A({resolver:R(ce),defaultValues:{description:null,concurrencyLimit:null}}),s=r.watch("type");V.useEffect(()=>{const c=Object.values(n).find(l=>l&&typeof l=="object"&&Object.values(l).find(m=>m&&typeof m=="object"&&"type"in m&&m.type===s));c&&s in c&&typeof c[s]=="object"&&c[s]&&"default_base_job_configuration"in c[s]&&r.setValue("baseJobTemplate",c[s].default_base_job_configuration)},[n,r,s]);const u=async()=>{const c=g(t.currentStep);await r.trigger(c)&&(t.isFinalStep?await y():t.incrementStep())},d=()=>{t.decrementStep()},p=()=>{a.navigate({to:"/work-pools"})},y=async()=>{if(!await r.trigger())return;const l=r.getValues();if(!l.name||!l.type){w.error("Please fill in all required fields");return}const m={name:l.name,type:l.type,description:l.description,is_paused:!1,concurrency_limit:l.concurrencyLimit,base_job_template:l.baseJobTemplate||{}};o(m,{onSuccess:C=>{w.success(`Work pool "${l.name}" created successfully`),a.navigate({to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:C.data?.name||l.name}})},onError:C=>{w.error(`Failed to create work pool: ${C.message}`)}})},g=c=>{switch(c){case 0:return["type"];case 1:return["name","description","concurrencyLimit"];case 2:return["baseJobTemplate"];default:return[]}},L=()=>{switch(t.currentStep){case 0:return e.jsx(ie,{});case 1:return e.jsx(re,{});case 2:return e.jsx(oe,{});default:return null}};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs(T,{children:[e.jsx(M,{children:e.jsx(O,{children:"Create Work Pool"})}),e.jsx(F,{children:e.jsx(X,{currentStepNum:t.currentStep,steps:W,onClick:({stepNum:c})=>{t.visitedStepsSet.has(c)&&t.changeStep(c)},completedSteps:t.completedStepsSet,visitedSteps:t.visitedStepsSet})})]}),e.jsx(T,{children:e.jsx(F,{className:"pt-6",children:e.jsx(Q,{...r,children:e.jsx("form",{className:"space-y-6",children:L()})})})}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("div",{children:[!t.isStartingStep&&e.jsx(v,{variant:"outline",onClick:d,disabled:i,children:"Back"}),e.jsx(v,{variant:"ghost",onClick:p,disabled:i,className:"ml-2",children:"Cancel"})]}),e.jsx(v,{onClick:()=>{u()},disabled:i,children:i?"Creating...":t.isFinalStep?"Create Work Pool":"Next"})]})]})}const Be=le;export{Be as component};
2
+ //# sourceMappingURL=create-Cq-EAHVk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-noFojqGL.js","sources":["../../src/components/work-pools/create/information-step/information-step.tsx","../../src/components/work-pools/create/information-step/schema.ts","../../src/components/work-pools/create/infrastructure-configuration-step/infrastructure-configuration-step.tsx","../../src/components/work-pools/create/infrastructure-configuration-step/schema.ts","../../src/components/ui/logo-image/logo-image.tsx","../../src/components/work-pools/create/infrastructure-type-step/infrastructure-type-step.tsx","../../src/components/work-pools/create/work-pool-create-wizard.tsx","../../src/routes/work-pools/create.tsx?tsr-split=component"],"sourcesContent":["import { useFormContext } from \"react-hook-form\";\nimport {\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport type { WorkPoolInformationFormValues } from \"./schema\";\n\nexport function InformationStep() {\n\tconst form = useFormContext<WorkPoolInformationFormValues>();\n\n\treturn (\n\t\t<>\n\t\t\t<FormField\n\t\t\t\tcontrol={form.control}\n\t\t\t\tname=\"name\"\n\t\t\t\trender={({ field }) => (\n\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t<Input {...field} />\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t</FormItem>\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t<FormField\n\t\t\t\tcontrol={form.control}\n\t\t\t\tname=\"description\"\n\t\t\t\trender={({ field }) => (\n\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t<FormLabel>Description (Optional)</FormLabel>\n\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\t\t\trows={7}\n\t\t\t\t\t\t\t\tplaceholder=\"Enter a description for your work pool\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t</FormItem>\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t<FormField\n\t\t\t\tcontrol={form.control}\n\t\t\t\tname=\"concurrencyLimit\"\n\t\t\t\trender={({ field }) => (\n\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t<FormLabel>Flow Run Concurrency (Optional)</FormLabel>\n\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tplaceholder=\"Unlimited\"\n\t\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\tconst value = e.target.value;\n\t\t\t\t\t\t\t\t\tfield.onChange(value === \"\" ? null : Number(value));\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t</FormItem>\n\t\t\t\t)}\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import { z } from \"zod\";\n\nexport const workPoolInformationSchema = z.object({\n\tname: z\n\t\t.string()\n\t\t.min(1, \"Name is required\")\n\t\t.refine(\n\t\t\t(value) => !value.toLowerCase().startsWith(\"prefect\"),\n\t\t\t\"Work pools starting with 'prefect' are reserved for internal use.\",\n\t\t),\n\tdescription: z.string().nullable().optional(),\n\tconcurrencyLimit: z.number().min(0).nullable().optional(),\n});\n\nexport type WorkPoolInformationFormValues = z.infer<\n\ttypeof workPoolInformationSchema\n>;\n","import { useFormContext } from \"react-hook-form\";\nimport { Card, CardContent, CardDescription } from \"@/components/ui/card\";\nimport { BaseJobTemplateFormSection } from \"./base-job-template-form-section\";\nimport type { WorkerBaseJobTemplate } from \"./schema\";\n\nexport function InfrastructureConfigurationStep() {\n\tconst form = useFormContext();\n\tconst baseJobTemplate = form.watch(\n\t\t\"baseJobTemplate\",\n\t) as WorkerBaseJobTemplate;\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<Card>\n\t\t\t\t<CardContent>\n\t\t\t\t\t<CardDescription>\n\t\t\t\t\t\tThe fields below control the default values for the base job\n\t\t\t\t\t\ttemplate. These values can be overridden by deployments.\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<br />A work pools job template controls infrastructure\n\t\t\t\t\t\tconfiguration for all flow runs in the work pool, and specifies the\n\t\t\t\t\t\tconfiguration that can be overridden by deployments.\n\t\t\t\t\t</CardDescription>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t<BaseJobTemplateFormSection\n\t\t\t\tbaseJobTemplate={baseJobTemplate}\n\t\t\t\tonBaseJobTemplateChange={(value) => {\n\t\t\t\t\tform.setValue(\"baseJobTemplate\", value);\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { z } from \"zod\";\nimport type { WorkerBaseJobTemplate } from \"@/components/work-pools/types\";\n\nexport type { WorkerBaseJobTemplate };\n\nexport const infrastructureConfigurationSchema = z.object({\n\tbaseJobTemplate: z.record(z.unknown()).optional(),\n});\n\nexport type InfrastructureConfigurationFormValues = z.infer<\n\ttypeof infrastructureConfigurationSchema\n>;\n\nexport type WorkPoolFormValues = {\n\tname?: string;\n\tdescription?: string | null;\n\ttype?: string;\n\tisPaused?: boolean;\n\tconcurrencyLimit?: number | null;\n\tbaseJobTemplate?: WorkerBaseJobTemplate;\n};\n","import type React from \"react\";\nimport { cn } from \"@/utils\";\n\ntype LogoImageProps = {\n\turl: string | null;\n\talt: string;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tclassName?: string;\n};\n\nconst sizeClasses = {\n\tsm: \"h-4 w-4\",\n\tmd: \"h-8 w-8\",\n\tlg: \"h-12 w-12\",\n};\n\nexport const LogoImage: React.FC<LogoImageProps> = ({\n\turl,\n\talt,\n\tsize = \"md\",\n\tclassName,\n}) => {\n\tif (!url) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs\",\n\t\t\t\t\tsizeClasses[size],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{alt.charAt(0).toUpperCase()}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<img\n\t\t\tsrc={url}\n\t\t\talt={alt}\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded border bg-background/50 backdrop-blur-sm object-contain\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonError={(e) => {\n\t\t\t\tconst target = e.target as HTMLImageElement;\n\t\t\t\tconst fallback = document.createElement(\"div\");\n\t\t\t\tfallback.className = cn(\n\t\t\t\t\t\"rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs\",\n\t\t\t\t\tsizeClasses[size],\n\t\t\t\t\tclassName,\n\t\t\t\t);\n\t\t\t\tfallback.textContent = alt.charAt(0).toUpperCase();\n\t\t\t\ttarget.parentNode?.replaceChild(fallback, target);\n\t\t\t}}\n\t\t/>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { buildListWorkPoolTypesQuery } from \"@/api/collections/collections\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { LogoImage } from \"@/components/ui/logo-image\";\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";\nimport { titleCase } from \"@/utils\";\n\ntype WorkPoolTypeSelectOption = {\n\tlabel: string;\n\tvalue: string;\n\tlogoUrl: string;\n\tdescription: string;\n\tdocumentationUrl?: string;\n\tisBeta: boolean;\n};\n\nexport function InfrastructureTypeStep() {\n\tconst form = useFormContext();\n\tconst { data: workersResponse = {} } = useSuspenseQuery(\n\t\tbuildListWorkPoolTypesQuery(),\n\t);\n\n\tconst options = useMemo<WorkPoolTypeSelectOption[]>(() => {\n\t\tconst options: WorkPoolTypeSelectOption[] = [];\n\n\t\t// Transform the workers response to options array\n\t\tObject.values(workersResponse).forEach((collection) => {\n\t\t\tif (collection && typeof collection === \"object\") {\n\t\t\t\tObject.values(collection).forEach((worker) => {\n\t\t\t\t\tif (worker && typeof worker === \"object\" && \"type\" in worker) {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tdisplay_name: displayName,\n\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\tlogo_url: logoUrl,\n\t\t\t\t\t\t\tdocumentation_url: documentationUrl,\n\t\t\t\t\t\t\tis_beta: isBeta,\n\t\t\t\t\t\t} = worker as {\n\t\t\t\t\t\t\ttype?: string;\n\t\t\t\t\t\t\tdisplay_name?: string;\n\t\t\t\t\t\t\tdescription?: string;\n\t\t\t\t\t\t\tlogo_url?: string;\n\t\t\t\t\t\t\tdocumentation_url?: string;\n\t\t\t\t\t\t\tis_beta?: boolean;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (type && logoUrl && description) {\n\t\t\t\t\t\t\toptions.push({\n\t\t\t\t\t\t\t\tlabel: displayName || titleCase(type),\n\t\t\t\t\t\t\t\tvalue: type,\n\t\t\t\t\t\t\t\tlogoUrl,\n\t\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\t\tdocumentationUrl,\n\t\t\t\t\t\t\t\tisBeta: isBeta || false,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Sort options: non-beta first, then alphabetically by label\n\t\treturn options.sort((firstOption, secondOption) => {\n\t\t\tif (firstOption.isBeta && !secondOption.isBeta) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (!firstOption.isBeta && secondOption.isBeta) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn firstOption.label.localeCompare(secondOption.label);\n\t\t});\n\t}, [workersResponse]);\n\n\treturn (\n\t\t<FormField\n\t\t\tcontrol={form.control}\n\t\t\tname=\"type\"\n\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t<FormItem>\n\t\t\t\t\t<FormLabel className=\"text-base font-medium\">\n\t\t\t\t\t\tSelect the infrastructure you want to use to execute your flow runs\n\t\t\t\t\t</FormLabel>\n\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t<RadioGroup\n\t\t\t\t\t\t\tvalue={field.value as string}\n\t\t\t\t\t\t\tonValueChange={(value: string) => field.onChange(value)}\n\t\t\t\t\t\t\tclassName=\"space-y-3\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{options.map(({ label, value, logoUrl, description, isBeta }) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center space-x-3 p-4 rounded-lg border hover:bg-accent/50\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RadioGroupItem value={value} id={value} />\n\t\t\t\t\t\t\t\t\t<label htmlFor={value} className=\"flex-1 cursor-pointer\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-4\">\n\t\t\t\t\t\t\t\t\t\t\t<LogoImage url={logoUrl} alt={label} size=\"md\" />\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col gap-2 flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-base font-medium flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isBeta && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge variant=\"secondary\" className=\"ml-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tBeta\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</FormControl>\n\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t<FormMessage>{fieldState.error.message}</FormMessage>\n\t\t\t\t\t)}\n\t\t\t\t</FormItem>\n\t\t\t)}\n\t\t/>\n\t);\n}\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { buildListWorkPoolTypesQuery } from \"@/api/collections/collections\";\nimport { useCreateWorkPool, type WorkPoolCreate } from \"@/api/work-pools\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Form } from \"@/components/ui/form\";\nimport { Stepper } from \"@/components/ui/stepper\";\nimport { useStepper } from \"@/hooks/use-stepper\";\nimport { InformationStep } from \"./information-step\";\nimport { workPoolInformationSchema } from \"./information-step/schema\";\nimport { InfrastructureConfigurationStep } from \"./infrastructure-configuration-step\";\nimport { infrastructureConfigurationSchema } from \"./infrastructure-configuration-step/schema\";\nimport { InfrastructureTypeStep } from \"./infrastructure-type-step\";\n\nconst STEPS = [\"Infrastructure Type\", \"Details\", \"Configuration\"] as const;\n\n// Combined schema for all steps\nconst workPoolCreateSchema = z.object({\n\ttype: z.string().min(1, \"Infrastructure type is required\"),\n\t...workPoolInformationSchema.shape,\n\t...infrastructureConfigurationSchema.shape,\n});\n\ntype WorkPoolCreateFormValues = z.infer<typeof workPoolCreateSchema>;\n\nexport function WorkPoolCreateWizard() {\n\tconst router = useRouter();\n\tconst { createWorkPool, isPending } = useCreateWorkPool();\n\tconst { data: workersResponse = {} } = useSuspenseQuery(\n\t\tbuildListWorkPoolTypesQuery(),\n\t);\n\n\t// Stepper state management\n\tconst stepper = useStepper(STEPS.length);\n\n\t// Form state management\n\tconst form = useForm<WorkPoolCreateFormValues>({\n\t\tresolver: zodResolver(workPoolCreateSchema),\n\t\tdefaultValues: {\n\t\t\tdescription: null,\n\t\t\tconcurrencyLimit: null,\n\t\t},\n\t});\n\n\tconst workerType = form.watch(\"type\");\n\n\tuseEffect(() => {\n\t\tconst workerInfo = Object.values(workersResponse).find(\n\t\t\t(collection) =>\n\t\t\t\tcollection &&\n\t\t\t\ttypeof collection === \"object\" &&\n\t\t\t\tObject.values(collection).find(\n\t\t\t\t\t(workerInfo) =>\n\t\t\t\t\t\tworkerInfo &&\n\t\t\t\t\t\ttypeof workerInfo === \"object\" &&\n\t\t\t\t\t\t\"type\" in workerInfo &&\n\t\t\t\t\t\t(workerInfo as { type: string }).type === workerType,\n\t\t\t\t),\n\t\t) as Record<string, unknown> | undefined;\n\t\tif (\n\t\t\tworkerInfo &&\n\t\t\tworkerType in workerInfo &&\n\t\t\ttypeof workerInfo[workerType] === \"object\" &&\n\t\t\tworkerInfo[workerType] &&\n\t\t\t\"default_base_job_configuration\" in workerInfo[workerType]\n\t\t) {\n\t\t\tform.setValue(\n\t\t\t\t\"baseJobTemplate\",\n\t\t\t\tworkerInfo[workerType].default_base_job_configuration as Record<\n\t\t\t\t\tstring,\n\t\t\t\t\tunknown\n\t\t\t\t>,\n\t\t\t);\n\t\t}\n\t}, [workersResponse, form, workerType]);\n\n\tconst handleNext = async () => {\n\t\tconst fieldsToValidate = getFieldsForStep(stepper.currentStep);\n\t\tconst isStepValid = await form.trigger(fieldsToValidate);\n\n\t\tif (isStepValid) {\n\t\t\tif (stepper.isFinalStep) {\n\t\t\t\tawait handleSubmit();\n\t\t\t} else {\n\t\t\t\tstepper.incrementStep();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleBack = () => {\n\t\tstepper.decrementStep();\n\t};\n\n\tconst handleCancel = () => {\n\t\tvoid router.navigate({ to: \"/work-pools\" });\n\t};\n\n\tconst handleSubmit = async () => {\n\t\tconst isValid = await form.trigger();\n\t\tif (!isValid) return;\n\n\t\tconst formData = form.getValues();\n\n\t\t// Validate required fields before submission\n\t\tif (!formData.name || !formData.type) {\n\t\t\ttoast.error(\"Please fill in all required fields\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst workPoolData: WorkPoolCreate = {\n\t\t\tname: formData.name,\n\t\t\ttype: formData.type,\n\t\t\tdescription: formData.description,\n\t\t\tis_paused: false,\n\t\t\tconcurrency_limit: formData.concurrencyLimit,\n\t\t\tbase_job_template:\n\t\t\t\t(formData.baseJobTemplate as Record<string, unknown>) || {},\n\t\t};\n\n\t\tcreateWorkPool(workPoolData, {\n\t\t\tonSuccess: (data) => {\n\t\t\t\ttoast.success(`Work pool \"${formData.name}\" created successfully`);\n\t\t\t\tvoid router.navigate({\n\t\t\t\t\tto: \"/work-pools/work-pool/$workPoolName\",\n\t\t\t\t\tparams: { workPoolName: data.data?.name || formData.name },\n\t\t\t\t});\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\ttoast.error(`Failed to create work pool: ${error.message}`);\n\t\t\t},\n\t\t});\n\t};\n\n\tconst getFieldsForStep = (\n\t\tstepIndex: number,\n\t): (keyof WorkPoolCreateFormValues)[] => {\n\t\tswitch (stepIndex) {\n\t\t\tcase 0:\n\t\t\t\treturn [\"type\"];\n\t\t\tcase 1:\n\t\t\t\treturn [\"name\", \"description\", \"concurrencyLimit\"];\n\t\t\tcase 2:\n\t\t\t\treturn [\"baseJobTemplate\"];\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t};\n\n\tconst renderCurrentStep = () => {\n\t\tswitch (stepper.currentStep) {\n\t\t\tcase 0:\n\t\t\t\treturn <InfrastructureTypeStep />;\n\t\t\tcase 1:\n\t\t\t\treturn <InformationStep />;\n\t\t\tcase 2:\n\t\t\t\treturn <InfrastructureConfigurationStep />;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<CardTitle>Create Work Pool</CardTitle>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t<Stepper\n\t\t\t\t\t\tcurrentStepNum={stepper.currentStep}\n\t\t\t\t\t\tsteps={STEPS}\n\t\t\t\t\t\tonClick={({ stepNum }) => {\n\t\t\t\t\t\t\tif (stepper.visitedStepsSet.has(stepNum)) {\n\t\t\t\t\t\t\t\tstepper.changeStep(stepNum);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tcompletedSteps={stepper.completedStepsSet}\n\t\t\t\t\t\tvisitedSteps={stepper.visitedStepsSet}\n\t\t\t\t\t/>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t<Card>\n\t\t\t\t<CardContent className=\"pt-6\">\n\t\t\t\t\t<Form {...form}>\n\t\t\t\t\t\t<form className=\"space-y-6\">{renderCurrentStep()}</form>\n\t\t\t\t\t</Form>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t{/* Navigation buttons */}\n\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t<div>\n\t\t\t\t\t{!stepper.isStartingStep && (\n\t\t\t\t\t\t<Button variant=\"outline\" onClick={handleBack} disabled={isPending}>\n\t\t\t\t\t\t\tBack\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\tdisabled={isPending}\n\t\t\t\t\t\tclassName=\"ml-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<Button onClick={() => void handleNext()} disabled={isPending}>\n\t\t\t\t\t{isPending\n\t\t\t\t\t\t? \"Creating...\"\n\t\t\t\t\t\t: stepper.isFinalStep\n\t\t\t\t\t\t\t? \"Create Work Pool\"\n\t\t\t\t\t\t\t: \"Next\"}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createFileRoute } from \"@tanstack/react-router\";\nimport { buildListWorkPoolTypesQuery } from \"@/api/collections/collections\";\nimport { WorkPoolCreateWizard } from \"@/components/work-pools/create\";\n\nexport const Route = createFileRoute(\"/work-pools/create\")({\n\tcomponent: WorkPoolCreateWizard,\n\tloader: ({ context: { queryClient } }) => {\n\t\t// Prefetch worker types for infrastructure selection\n\t\tvoid queryClient.prefetchQuery(buildListWorkPoolTypesQuery());\n\t},\n\twrapInSuspense: true,\n});\n"],"names":["InformationStep","form","useFormContext","jsxs","Fragment","jsx","FormField","field","FormItem","FormLabel","FormControl","Input","FormMessage","Textarea","e","value","workPoolInformationSchema","z.object","z.string","z.number","InfrastructureConfigurationStep","baseJobTemplate","Card","CardContent","CardDescription","BaseJobTemplateFormSection","infrastructureConfigurationSchema","z.record","z.unknown","sizeClasses","LogoImage","url","alt","size","className","cn","target","fallback","InfrastructureTypeStep","workersResponse","useSuspenseQuery","buildListWorkPoolTypesQuery","options","useMemo","collection","worker","type","displayName","description","logoUrl","documentationUrl","isBeta","titleCase","firstOption","secondOption","fieldState","RadioGroup","label","RadioGroupItem","Badge","STEPS","workPoolCreateSchema","WorkPoolCreateWizard","router","useRouter","createWorkPool","isPending","useCreateWorkPool","stepper","useStepper","useForm","zodResolver","workerType","useEffect","workerInfo","handleNext","fieldsToValidate","getFieldsForStep","handleSubmit","handleBack","handleCancel","formData","toast","workPoolData","data","error","stepIndex","renderCurrentStep","CardHeader","CardTitle","Stepper","stepNum","Form","Button","SplitComponent"],"mappings":"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"}
1
+ {"version":3,"file":"create-Cq-EAHVk.js","sources":["../../src/components/work-pools/create/information-step/information-step.tsx","../../src/components/work-pools/create/information-step/schema.ts","../../src/components/work-pools/create/infrastructure-configuration-step/infrastructure-configuration-step.tsx","../../src/components/work-pools/create/infrastructure-configuration-step/schema.ts","../../src/components/ui/logo-image/logo-image.tsx","../../src/components/work-pools/create/infrastructure-type-step/infrastructure-type-step.tsx","../../src/components/work-pools/create/work-pool-create-wizard.tsx","../../src/routes/work-pools/create.tsx?tsr-split=component"],"sourcesContent":["import { useFormContext } from \"react-hook-form\";\nimport {\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport type { WorkPoolInformationFormValues } from \"./schema\";\n\nexport function InformationStep() {\n\tconst form = useFormContext<WorkPoolInformationFormValues>();\n\n\treturn (\n\t\t<>\n\t\t\t<FormField\n\t\t\t\tcontrol={form.control}\n\t\t\t\tname=\"name\"\n\t\t\t\trender={({ field }) => (\n\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t<Input {...field} />\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t</FormItem>\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t<FormField\n\t\t\t\tcontrol={form.control}\n\t\t\t\tname=\"description\"\n\t\t\t\trender={({ field }) => (\n\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t<FormLabel>Description (Optional)</FormLabel>\n\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\t\t\trows={7}\n\t\t\t\t\t\t\t\tplaceholder=\"Enter a description for your work pool\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t</FormItem>\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t<FormField\n\t\t\t\tcontrol={form.control}\n\t\t\t\tname=\"concurrencyLimit\"\n\t\t\t\trender={({ field }) => (\n\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t<FormLabel>Flow Run Concurrency (Optional)</FormLabel>\n\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\t\tplaceholder=\"Unlimited\"\n\t\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\tconst value = e.target.value;\n\t\t\t\t\t\t\t\t\tfield.onChange(value === \"\" ? null : Number(value));\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t</FormItem>\n\t\t\t\t)}\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import { z } from \"zod\";\n\nexport const workPoolInformationSchema = z.object({\n\tname: z\n\t\t.string()\n\t\t.min(1, \"Name is required\")\n\t\t.refine(\n\t\t\t(value) => !value.toLowerCase().startsWith(\"prefect\"),\n\t\t\t\"Work pools starting with 'prefect' are reserved for internal use.\",\n\t\t),\n\tdescription: z.string().nullable().optional(),\n\tconcurrencyLimit: z.number().min(0).nullable().optional(),\n});\n\nexport type WorkPoolInformationFormValues = z.infer<\n\ttypeof workPoolInformationSchema\n>;\n","import { useFormContext } from \"react-hook-form\";\nimport { Card, CardContent, CardDescription } from \"@/components/ui/card\";\nimport { BaseJobTemplateFormSection } from \"./base-job-template-form-section\";\nimport type { WorkerBaseJobTemplate } from \"./schema\";\n\nexport function InfrastructureConfigurationStep() {\n\tconst form = useFormContext();\n\tconst baseJobTemplate = form.watch(\n\t\t\"baseJobTemplate\",\n\t) as WorkerBaseJobTemplate;\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<Card>\n\t\t\t\t<CardContent>\n\t\t\t\t\t<CardDescription>\n\t\t\t\t\t\tThe fields below control the default values for the base job\n\t\t\t\t\t\ttemplate. These values can be overridden by deployments.\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<br />A work pools job template controls infrastructure\n\t\t\t\t\t\tconfiguration for all flow runs in the work pool, and specifies the\n\t\t\t\t\t\tconfiguration that can be overridden by deployments.\n\t\t\t\t\t</CardDescription>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t<BaseJobTemplateFormSection\n\t\t\t\tbaseJobTemplate={baseJobTemplate}\n\t\t\t\tonBaseJobTemplateChange={(value) => {\n\t\t\t\t\tform.setValue(\"baseJobTemplate\", value);\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { z } from \"zod\";\nimport type { WorkerBaseJobTemplate } from \"@/components/work-pools/types\";\n\nexport type { WorkerBaseJobTemplate };\n\nexport const infrastructureConfigurationSchema = z.object({\n\tbaseJobTemplate: z.record(z.unknown()).optional(),\n});\n\nexport type InfrastructureConfigurationFormValues = z.infer<\n\ttypeof infrastructureConfigurationSchema\n>;\n\nexport type WorkPoolFormValues = {\n\tname?: string;\n\tdescription?: string | null;\n\ttype?: string;\n\tisPaused?: boolean;\n\tconcurrencyLimit?: number | null;\n\tbaseJobTemplate?: WorkerBaseJobTemplate;\n};\n","import type React from \"react\";\nimport { cn } from \"@/utils\";\n\ntype LogoImageProps = {\n\turl: string | null;\n\talt: string;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tclassName?: string;\n};\n\nconst sizeClasses = {\n\tsm: \"h-4 w-4\",\n\tmd: \"h-8 w-8\",\n\tlg: \"h-12 w-12\",\n};\n\nexport const LogoImage: React.FC<LogoImageProps> = ({\n\turl,\n\talt,\n\tsize = \"md\",\n\tclassName,\n}) => {\n\tif (!url) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs\",\n\t\t\t\t\tsizeClasses[size],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{alt.charAt(0).toUpperCase()}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<img\n\t\t\tsrc={url}\n\t\t\talt={alt}\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded border bg-background/50 backdrop-blur-sm object-contain\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonError={(e) => {\n\t\t\t\tconst target = e.target as HTMLImageElement;\n\t\t\t\tconst fallback = document.createElement(\"div\");\n\t\t\t\tfallback.className = cn(\n\t\t\t\t\t\"rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs\",\n\t\t\t\t\tsizeClasses[size],\n\t\t\t\t\tclassName,\n\t\t\t\t);\n\t\t\t\tfallback.textContent = alt.charAt(0).toUpperCase();\n\t\t\t\ttarget.parentNode?.replaceChild(fallback, target);\n\t\t\t}}\n\t\t/>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { buildListWorkPoolTypesQuery } from \"@/api/collections/collections\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { LogoImage } from \"@/components/ui/logo-image\";\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";\nimport { titleCase } from \"@/utils\";\n\ntype WorkPoolTypeSelectOption = {\n\tlabel: string;\n\tvalue: string;\n\tlogoUrl: string;\n\tdescription: string;\n\tdocumentationUrl?: string;\n\tisBeta: boolean;\n};\n\nexport function InfrastructureTypeStep() {\n\tconst form = useFormContext();\n\tconst { data: workersResponse = {} } = useSuspenseQuery(\n\t\tbuildListWorkPoolTypesQuery(),\n\t);\n\n\tconst options = useMemo<WorkPoolTypeSelectOption[]>(() => {\n\t\tconst options: WorkPoolTypeSelectOption[] = [];\n\n\t\t// Transform the workers response to options array\n\t\tObject.values(workersResponse).forEach((collection) => {\n\t\t\tif (collection && typeof collection === \"object\") {\n\t\t\t\tObject.values(collection).forEach((worker) => {\n\t\t\t\t\tif (worker && typeof worker === \"object\" && \"type\" in worker) {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tdisplay_name: displayName,\n\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\tlogo_url: logoUrl,\n\t\t\t\t\t\t\tdocumentation_url: documentationUrl,\n\t\t\t\t\t\t\tis_beta: isBeta,\n\t\t\t\t\t\t} = worker as {\n\t\t\t\t\t\t\ttype?: string;\n\t\t\t\t\t\t\tdisplay_name?: string;\n\t\t\t\t\t\t\tdescription?: string;\n\t\t\t\t\t\t\tlogo_url?: string;\n\t\t\t\t\t\t\tdocumentation_url?: string;\n\t\t\t\t\t\t\tis_beta?: boolean;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (type && logoUrl && description) {\n\t\t\t\t\t\t\toptions.push({\n\t\t\t\t\t\t\t\tlabel: displayName || titleCase(type),\n\t\t\t\t\t\t\t\tvalue: type,\n\t\t\t\t\t\t\t\tlogoUrl,\n\t\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\t\tdocumentationUrl,\n\t\t\t\t\t\t\t\tisBeta: isBeta || false,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Sort options: non-beta first, then alphabetically by label\n\t\treturn options.sort((firstOption, secondOption) => {\n\t\t\tif (firstOption.isBeta && !secondOption.isBeta) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (!firstOption.isBeta && secondOption.isBeta) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn firstOption.label.localeCompare(secondOption.label);\n\t\t});\n\t}, [workersResponse]);\n\n\treturn (\n\t\t<FormField\n\t\t\tcontrol={form.control}\n\t\t\tname=\"type\"\n\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t<FormItem>\n\t\t\t\t\t<FormLabel className=\"text-base font-medium\">\n\t\t\t\t\t\tSelect the infrastructure you want to use to execute your flow runs\n\t\t\t\t\t</FormLabel>\n\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t<RadioGroup\n\t\t\t\t\t\t\tvalue={field.value as string}\n\t\t\t\t\t\t\tonValueChange={(value: string) => field.onChange(value)}\n\t\t\t\t\t\t\tclassName=\"space-y-3\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{options.map(({ label, value, logoUrl, description, isBeta }) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center space-x-3 p-4 rounded-lg border hover:bg-accent/50\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RadioGroupItem value={value} id={value} />\n\t\t\t\t\t\t\t\t\t<label htmlFor={value} className=\"flex-1 cursor-pointer\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-4\">\n\t\t\t\t\t\t\t\t\t\t\t<LogoImage url={logoUrl} alt={label} size=\"md\" />\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col gap-2 flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-base font-medium flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isBeta && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge variant=\"secondary\" className=\"ml-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tBeta\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</FormControl>\n\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t<FormMessage>{fieldState.error.message}</FormMessage>\n\t\t\t\t\t)}\n\t\t\t\t</FormItem>\n\t\t\t)}\n\t\t/>\n\t);\n}\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport { buildListWorkPoolTypesQuery } from \"@/api/collections/collections\";\nimport { useCreateWorkPool, type WorkPoolCreate } from \"@/api/work-pools\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Form } from \"@/components/ui/form\";\nimport { Stepper } from \"@/components/ui/stepper\";\nimport { useStepper } from \"@/hooks/use-stepper\";\nimport { InformationStep } from \"./information-step\";\nimport { workPoolInformationSchema } from \"./information-step/schema\";\nimport { InfrastructureConfigurationStep } from \"./infrastructure-configuration-step\";\nimport { infrastructureConfigurationSchema } from \"./infrastructure-configuration-step/schema\";\nimport { InfrastructureTypeStep } from \"./infrastructure-type-step\";\n\nconst STEPS = [\"Infrastructure Type\", \"Details\", \"Configuration\"] as const;\n\n// Combined schema for all steps\nconst workPoolCreateSchema = z.object({\n\ttype: z.string().min(1, \"Infrastructure type is required\"),\n\t...workPoolInformationSchema.shape,\n\t...infrastructureConfigurationSchema.shape,\n});\n\ntype WorkPoolCreateFormValues = z.infer<typeof workPoolCreateSchema>;\n\nexport function WorkPoolCreateWizard() {\n\tconst router = useRouter();\n\tconst { createWorkPool, isPending } = useCreateWorkPool();\n\tconst { data: workersResponse = {} } = useSuspenseQuery(\n\t\tbuildListWorkPoolTypesQuery(),\n\t);\n\n\t// Stepper state management\n\tconst stepper = useStepper(STEPS.length);\n\n\t// Form state management\n\tconst form = useForm<WorkPoolCreateFormValues>({\n\t\tresolver: zodResolver(workPoolCreateSchema),\n\t\tdefaultValues: {\n\t\t\tdescription: null,\n\t\t\tconcurrencyLimit: null,\n\t\t},\n\t});\n\n\tconst workerType = form.watch(\"type\");\n\n\tuseEffect(() => {\n\t\tconst workerInfo = Object.values(workersResponse).find(\n\t\t\t(collection) =>\n\t\t\t\tcollection &&\n\t\t\t\ttypeof collection === \"object\" &&\n\t\t\t\tObject.values(collection).find(\n\t\t\t\t\t(workerInfo) =>\n\t\t\t\t\t\tworkerInfo &&\n\t\t\t\t\t\ttypeof workerInfo === \"object\" &&\n\t\t\t\t\t\t\"type\" in workerInfo &&\n\t\t\t\t\t\t(workerInfo as { type: string }).type === workerType,\n\t\t\t\t),\n\t\t) as Record<string, unknown> | undefined;\n\t\tif (\n\t\t\tworkerInfo &&\n\t\t\tworkerType in workerInfo &&\n\t\t\ttypeof workerInfo[workerType] === \"object\" &&\n\t\t\tworkerInfo[workerType] &&\n\t\t\t\"default_base_job_configuration\" in workerInfo[workerType]\n\t\t) {\n\t\t\tform.setValue(\n\t\t\t\t\"baseJobTemplate\",\n\t\t\t\tworkerInfo[workerType].default_base_job_configuration as Record<\n\t\t\t\t\tstring,\n\t\t\t\t\tunknown\n\t\t\t\t>,\n\t\t\t);\n\t\t}\n\t}, [workersResponse, form, workerType]);\n\n\tconst handleNext = async () => {\n\t\tconst fieldsToValidate = getFieldsForStep(stepper.currentStep);\n\t\tconst isStepValid = await form.trigger(fieldsToValidate);\n\n\t\tif (isStepValid) {\n\t\t\tif (stepper.isFinalStep) {\n\t\t\t\tawait handleSubmit();\n\t\t\t} else {\n\t\t\t\tstepper.incrementStep();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleBack = () => {\n\t\tstepper.decrementStep();\n\t};\n\n\tconst handleCancel = () => {\n\t\tvoid router.navigate({ to: \"/work-pools\" });\n\t};\n\n\tconst handleSubmit = async () => {\n\t\tconst isValid = await form.trigger();\n\t\tif (!isValid) return;\n\n\t\tconst formData = form.getValues();\n\n\t\t// Validate required fields before submission\n\t\tif (!formData.name || !formData.type) {\n\t\t\ttoast.error(\"Please fill in all required fields\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst workPoolData: WorkPoolCreate = {\n\t\t\tname: formData.name,\n\t\t\ttype: formData.type,\n\t\t\tdescription: formData.description,\n\t\t\tis_paused: false,\n\t\t\tconcurrency_limit: formData.concurrencyLimit,\n\t\t\tbase_job_template:\n\t\t\t\t(formData.baseJobTemplate as Record<string, unknown>) || {},\n\t\t};\n\n\t\tcreateWorkPool(workPoolData, {\n\t\t\tonSuccess: (data) => {\n\t\t\t\ttoast.success(`Work pool \"${formData.name}\" created successfully`);\n\t\t\t\tvoid router.navigate({\n\t\t\t\t\tto: \"/work-pools/work-pool/$workPoolName\",\n\t\t\t\t\tparams: { workPoolName: data.data?.name || formData.name },\n\t\t\t\t});\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\ttoast.error(`Failed to create work pool: ${error.message}`);\n\t\t\t},\n\t\t});\n\t};\n\n\tconst getFieldsForStep = (\n\t\tstepIndex: number,\n\t): (keyof WorkPoolCreateFormValues)[] => {\n\t\tswitch (stepIndex) {\n\t\t\tcase 0:\n\t\t\t\treturn [\"type\"];\n\t\t\tcase 1:\n\t\t\t\treturn [\"name\", \"description\", \"concurrencyLimit\"];\n\t\t\tcase 2:\n\t\t\t\treturn [\"baseJobTemplate\"];\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t};\n\n\tconst renderCurrentStep = () => {\n\t\tswitch (stepper.currentStep) {\n\t\t\tcase 0:\n\t\t\t\treturn <InfrastructureTypeStep />;\n\t\t\tcase 1:\n\t\t\t\treturn <InformationStep />;\n\t\t\tcase 2:\n\t\t\t\treturn <InfrastructureConfigurationStep />;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<CardTitle>Create Work Pool</CardTitle>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t<Stepper\n\t\t\t\t\t\tcurrentStepNum={stepper.currentStep}\n\t\t\t\t\t\tsteps={STEPS}\n\t\t\t\t\t\tonClick={({ stepNum }) => {\n\t\t\t\t\t\t\tif (stepper.visitedStepsSet.has(stepNum)) {\n\t\t\t\t\t\t\t\tstepper.changeStep(stepNum);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tcompletedSteps={stepper.completedStepsSet}\n\t\t\t\t\t\tvisitedSteps={stepper.visitedStepsSet}\n\t\t\t\t\t/>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t<Card>\n\t\t\t\t<CardContent className=\"pt-6\">\n\t\t\t\t\t<Form {...form}>\n\t\t\t\t\t\t<form className=\"space-y-6\">{renderCurrentStep()}</form>\n\t\t\t\t\t</Form>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t{/* Navigation buttons */}\n\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t<div>\n\t\t\t\t\t{!stepper.isStartingStep && (\n\t\t\t\t\t\t<Button variant=\"outline\" onClick={handleBack} disabled={isPending}>\n\t\t\t\t\t\t\tBack\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\tdisabled={isPending}\n\t\t\t\t\t\tclassName=\"ml-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<Button onClick={() => void handleNext()} disabled={isPending}>\n\t\t\t\t\t{isPending\n\t\t\t\t\t\t? \"Creating...\"\n\t\t\t\t\t\t: stepper.isFinalStep\n\t\t\t\t\t\t\t? \"Create Work Pool\"\n\t\t\t\t\t\t\t: \"Next\"}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createFileRoute } from \"@tanstack/react-router\";\nimport { buildListWorkPoolTypesQuery } from \"@/api/collections/collections\";\nimport { WorkPoolCreateWizard } from \"@/components/work-pools/create\";\n\nexport const Route = createFileRoute(\"/work-pools/create\")({\n\tcomponent: WorkPoolCreateWizard,\n\tloader: ({ context: { queryClient } }) => {\n\t\t// Prefetch worker types for infrastructure selection\n\t\tvoid queryClient.prefetchQuery(buildListWorkPoolTypesQuery());\n\t},\n\twrapInSuspense: true,\n});\n"],"names":["InformationStep","form","useFormContext","jsxs","Fragment","jsx","FormField","field","FormItem","FormLabel","FormControl","Input","FormMessage","Textarea","e","value","workPoolInformationSchema","z.object","z.string","z.number","InfrastructureConfigurationStep","baseJobTemplate","Card","CardContent","CardDescription","BaseJobTemplateFormSection","infrastructureConfigurationSchema","z.record","z.unknown","sizeClasses","LogoImage","url","alt","size","className","cn","target","fallback","InfrastructureTypeStep","workersResponse","useSuspenseQuery","buildListWorkPoolTypesQuery","options","useMemo","collection","worker","type","displayName","description","logoUrl","documentationUrl","isBeta","titleCase","firstOption","secondOption","fieldState","RadioGroup","label","RadioGroupItem","Badge","STEPS","workPoolCreateSchema","WorkPoolCreateWizard","router","useRouter","createWorkPool","isPending","useCreateWorkPool","stepper","useStepper","useForm","zodResolver","workerType","useEffect","workerInfo","handleNext","fieldsToValidate","getFieldsForStep","handleSubmit","handleBack","handleCancel","formData","toast","workPoolData","data","error","stepIndex","renderCurrentStep","CardHeader","CardTitle","Stepper","stepNum","Form","Button","SplitComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as e,K as r}from"./vendor-tanstack-BK8oseNA.js";import{S as h,a as j,b as f,c as p,e as l,b4 as P,aU as S,b5 as C,b6 as o,cn as v,b7 as D,b8 as N,co as T}from"./index-WYPZo52S.js";import{T as z,a as b,b as c,c as w,d as M,e as x}from"./table-CEAx-qHs.js";function k({table:n,onPrefetchPage:i}){return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("div",{className:"rounded-md border",children:e.jsxs(z,{children:[e.jsx(b,{children:n.getHeaderGroups().map(a=>e.jsx(c,{children:a.headers.map(s=>e.jsx(w,{style:{...s.column.columnDef.maxSize&&{maxWidth:`${s.column.columnDef.maxSize}px`},...s.column.columnDef.size&&{width:`${s.column.columnDef.size}px`}},children:s.isPlaceholder?null:r(s.column.columnDef.header,s.getContext())},s.id))},a.id))}),e.jsx(M,{children:n.getRowModel().rows?.length?n.getRowModel().rows.map(a=>e.jsx(c,{"data-state":a.getIsSelected()&&"selected",children:a.getVisibleCells().map(s=>e.jsx(x,{style:{...s.column.columnDef.maxSize&&{maxWidth:`${s.column.columnDef.maxSize}px`},...s.column.columnDef.size&&{width:`${s.column.columnDef.size}px`}},children:r(s.column.columnDef.cell,s.getContext())},s.id))},a.id)):e.jsx(c,{children:e.jsx(x,{colSpan:n.getAllColumns().length,className:"h-24 text-center",children:"No results."})})})]})}),e.jsxs("div",{className:"flex flex-row justify-between items-center",children:[e.jsx(I,{table:n}),e.jsx(y,{table:n,onPrefetchPage:i})]})]})}function I({table:n}){return e.jsxs("div",{className:"flex flex-row items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("span",{className:"whitespace-nowrap",children:"Items per page"}),e.jsxs(h,{value:n.getState().pagination.pageSize.toString(),onValueChange:i=>{n.setPageSize(Number(i))},children:[e.jsx(j,{"aria-label":"Items per page",children:e.jsx(f,{placeholder:"Theme"})}),e.jsxs(p,{children:[e.jsx(l,{value:"5",children:"5"}),e.jsx(l,{value:"10",children:"10"}),e.jsx(l,{value:"25",children:"25"}),e.jsx(l,{value:"50",children:"50"})]})]})]})}function y({table:n,className:i,onPrefetchPage:a}){const s=n.getPageCount(),t=Math.min(Math.ceil(n.getState().pagination.pageIndex+1),s),d=()=>{t>1&&a?.(1)},m=()=>{t>1&&a?.(t-1)},u=()=>{t<s&&a?.(t+1)},g=()=>{t<s&&a?.(s)};return e.jsx(P,{className:S("justify-end",i),children:e.jsxs(C,{children:[e.jsxs(o,{children:[e.jsx(v,{onClick:()=>n.firstPage(),onMouseEnter:d,disabled:!n.getCanPreviousPage()}),e.jsx(D,{onClick:()=>n.previousPage(),onMouseEnter:m,disabled:!n.getCanPreviousPage()})]}),e.jsxs(o,{className:"text-sm",children:["Page ",t," of ",s]}),e.jsx(o,{children:e.jsx(N,{onClick:()=>n.nextPage(),onMouseEnter:u,disabled:!n.getCanNextPage()})}),e.jsx(o,{children:e.jsx(T,{onClick:()=>n.lastPage(),onMouseEnter:g,disabled:!n.getCanNextPage()})})]})})}export{k as D};
2
- //# sourceMappingURL=data-table-BjFlVIyC.js.map
1
+ import{j as e,K as r}from"./vendor-tanstack-BK8oseNA.js";import{S as h,a as j,b as f,c as p,e as l,b6 as P,aW as S,b7 as C,b8 as o,cr as v,b9 as D,ba as N,cs as T}from"./index-BvSl3DKP.js";import{T as z,a as b,b as c,c as w,d as M,e as x}from"./table-vo9Do8sA.js";function k({table:n,onPrefetchPage:i}){return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("div",{className:"rounded-md border",children:e.jsxs(z,{children:[e.jsx(b,{children:n.getHeaderGroups().map(a=>e.jsx(c,{children:a.headers.map(s=>e.jsx(w,{style:{...s.column.columnDef.maxSize&&{maxWidth:`${s.column.columnDef.maxSize}px`},...s.column.columnDef.size&&{width:`${s.column.columnDef.size}px`}},children:s.isPlaceholder?null:r(s.column.columnDef.header,s.getContext())},s.id))},a.id))}),e.jsx(M,{children:n.getRowModel().rows?.length?n.getRowModel().rows.map(a=>e.jsx(c,{"data-state":a.getIsSelected()&&"selected",children:a.getVisibleCells().map(s=>e.jsx(x,{style:{...s.column.columnDef.maxSize&&{maxWidth:`${s.column.columnDef.maxSize}px`},...s.column.columnDef.size&&{width:`${s.column.columnDef.size}px`}},children:r(s.column.columnDef.cell,s.getContext())},s.id))},a.id)):e.jsx(c,{children:e.jsx(x,{colSpan:n.getAllColumns().length,className:"h-24 text-center",children:"No results."})})})]})}),e.jsxs("div",{className:"flex flex-row justify-between items-center",children:[e.jsx(I,{table:n}),e.jsx(y,{table:n,onPrefetchPage:i})]})]})}function I({table:n}){return e.jsxs("div",{className:"flex flex-row items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("span",{className:"whitespace-nowrap",children:"Items per page"}),e.jsxs(h,{value:n.getState().pagination.pageSize.toString(),onValueChange:i=>{n.setPageSize(Number(i))},children:[e.jsx(j,{"aria-label":"Items per page",children:e.jsx(f,{placeholder:"Theme"})}),e.jsxs(p,{children:[e.jsx(l,{value:"5",children:"5"}),e.jsx(l,{value:"10",children:"10"}),e.jsx(l,{value:"25",children:"25"}),e.jsx(l,{value:"50",children:"50"})]})]})]})}function y({table:n,className:i,onPrefetchPage:a}){const s=n.getPageCount(),t=Math.min(Math.ceil(n.getState().pagination.pageIndex+1),s),d=()=>{t>1&&a?.(1)},m=()=>{t>1&&a?.(t-1)},u=()=>{t<s&&a?.(t+1)},g=()=>{t<s&&a?.(s)};return e.jsx(P,{className:S("justify-end",i),children:e.jsxs(C,{children:[e.jsxs(o,{children:[e.jsx(v,{onClick:()=>n.firstPage(),onMouseEnter:d,disabled:!n.getCanPreviousPage()}),e.jsx(D,{onClick:()=>n.previousPage(),onMouseEnter:m,disabled:!n.getCanPreviousPage()})]}),e.jsxs(o,{className:"text-sm",children:["Page ",t," of ",s]}),e.jsx(o,{children:e.jsx(N,{onClick:()=>n.nextPage(),onMouseEnter:u,disabled:!n.getCanNextPage()})}),e.jsx(o,{children:e.jsx(T,{onClick:()=>n.lastPage(),onMouseEnter:g,disabled:!n.getCanNextPage()})})]})})}export{k as D};
2
+ //# sourceMappingURL=data-table-Bw8TZx9D.js.map