prefect 3.6.15__py3-none-any.whl → 3.6.16.dev3__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 (259) hide show
  1. prefect/__init__.py +20 -0
  2. prefect/_build_info.py +3 -3
  3. prefect/_internal/analytics/__init__.py +80 -0
  4. prefect/_internal/analytics/_config.py +2 -0
  5. prefect/_internal/analytics/ci_detection.py +39 -0
  6. prefect/_internal/analytics/client.py +132 -0
  7. prefect/_internal/analytics/device_id.py +55 -0
  8. prefect/_internal/analytics/emit.py +90 -0
  9. prefect/_internal/analytics/enabled.py +33 -0
  10. prefect/_internal/analytics/events.py +14 -0
  11. prefect/_internal/analytics/milestones.py +177 -0
  12. prefect/_internal/analytics/notice.py +60 -0
  13. prefect/_internal/analytics/service.py +238 -0
  14. prefect/analytics/__init__.py +67 -0
  15. prefect/deployments/runner.py +20 -0
  16. prefect/flow_engine.py +16 -0
  17. prefect/flows.py +8 -0
  18. prefect/logging/formatters.py +24 -1
  19. prefect/server/ui-v2/assets/{artifact-card-BBzQR-Cj.js → artifact-card-BclosG8t.js} +2 -2
  20. prefect/server/ui-v2/assets/{artifact-card-BBzQR-Cj.js.map → artifact-card-BclosG8t.js.map} +1 -1
  21. prefect/server/ui-v2/assets/artifact._id-C0r4BJr2.js +2 -0
  22. prefect/server/ui-v2/assets/artifact._id-C0r4BJr2.js.map +1 -0
  23. prefect/server/ui-v2/assets/{automation-wizard-EYSfXlQ7.js → automation-wizard-Bmgt6nn8.js} +2 -2
  24. prefect/server/ui-v2/assets/{automation-wizard-EYSfXlQ7.js.map → automation-wizard-Bmgt6nn8.js.map} +1 -1
  25. prefect/server/ui-v2/assets/automation._id-Ccke3KJz.js +2 -0
  26. prefect/server/ui-v2/assets/{automation._id-Dn7jABys.js.map → automation._id-Ccke3KJz.js.map} +1 -1
  27. prefect/server/ui-v2/assets/{automation_._id.edit-COrqswD3.js → automation_._id.edit-BlKPUTVf.js} +2 -2
  28. prefect/server/ui-v2/assets/{automation_._id.edit-COrqswD3.js.map → automation_._id.edit-BlKPUTVf.js.map} +1 -1
  29. prefect/server/ui-v2/assets/{automations-header-DN_dmMXW.js → automations-header-Df2zw3SC.js} +2 -2
  30. prefect/server/ui-v2/assets/{automations-header-DN_dmMXW.js.map → automations-header-Df2zw3SC.js.map} +1 -1
  31. prefect/server/ui-v2/assets/{base-job-template-form-section-De2ACYbw.js → base-job-template-form-section-oZD6U-RW.js} +2 -2
  32. prefect/server/ui-v2/assets/{base-job-template-form-section-De2ACYbw.js.map → base-job-template-form-section-oZD6U-RW.js.map} +1 -1
  33. prefect/server/ui-v2/assets/{block-type-details-Cklc7TkK.js → block-type-details-CYrdaLot.js} +2 -2
  34. prefect/server/ui-v2/assets/{block-type-details-Cklc7TkK.js.map → block-type-details-CYrdaLot.js.map} +1 -1
  35. prefect/server/ui-v2/assets/block-type-logo-CyAWq7mC.js +2 -0
  36. prefect/server/ui-v2/assets/block-type-logo-CyAWq7mC.js.map +1 -0
  37. prefect/server/ui-v2/assets/{block._id-tuz1Bcj2.js → block._id-CBgHrpTP.js} +2 -2
  38. prefect/server/ui-v2/assets/{block._id-tuz1Bcj2.js.map → block._id-CBgHrpTP.js.map} +1 -1
  39. prefect/server/ui-v2/assets/{block_._id.edit-CFEYhF5R.js → block_._id.edit-CW-kdi4O.js} +2 -2
  40. prefect/server/ui-v2/assets/{block_._id.edit-CFEYhF5R.js.map → block_._id.edit-CW-kdi4O.js.map} +1 -1
  41. prefect/server/ui-v2/assets/{catalog-CCPRo7nY.js → catalog-Brh0kn1I.js} +2 -2
  42. prefect/server/ui-v2/assets/{catalog-CCPRo7nY.js.map → catalog-Brh0kn1I.js.map} +1 -1
  43. prefect/server/ui-v2/assets/catalog_._slug-MCgzguIZ.js +2 -0
  44. prefect/server/ui-v2/assets/{catalog_._slug-Bl2J2oI3.js.map → catalog_._slug-MCgzguIZ.js.map} +1 -1
  45. prefect/server/ui-v2/assets/{catalog_._slug_.create-9UD_SxDN.js → catalog_._slug_.create-DBaeHi9Q.js} +2 -2
  46. prefect/server/ui-v2/assets/{catalog_._slug_.create-9UD_SxDN.js.map → catalog_._slug_.create-DBaeHi9Q.js.map} +1 -1
  47. prefect/server/ui-v2/assets/{collapsible-BVQTBG_U.js → collapsible-B_NJS0uJ.js} +2 -2
  48. prefect/server/ui-v2/assets/{collapsible-BVQTBG_U.js.map → collapsible-B_NJS0uJ.js.map} +1 -1
  49. prefect/server/ui-v2/assets/{concurrency-limit._id-CsgRxA0a.js → concurrency-limit._id-qzNUQzQa.js} +2 -2
  50. prefect/server/ui-v2/assets/{concurrency-limit._id-CsgRxA0a.js.map → concurrency-limit._id-qzNUQzQa.js.map} +1 -1
  51. prefect/server/ui-v2/assets/create-BwXG6EIb.js +2 -0
  52. prefect/server/ui-v2/assets/{create-D--LHaji.js.map → create-BwXG6EIb.js.map} +1 -1
  53. prefect/server/ui-v2/assets/{create-BycfZHGQ.js → create-MoiIE9Ms.js} +2 -2
  54. prefect/server/ui-v2/assets/{create-BycfZHGQ.js.map → create-MoiIE9Ms.js.map} +1 -1
  55. prefect/server/ui-v2/assets/data-table-CPkppyg6.js +2 -0
  56. prefect/server/ui-v2/assets/data-table-CPkppyg6.js.map +1 -0
  57. prefect/server/ui-v2/assets/delete-confirmation-dialog-CwDK_2QS.js +2 -0
  58. prefect/server/ui-v2/assets/{delete-confirmation-dialog-DHkm2p8m.js.map → delete-confirmation-dialog-CwDK_2QS.js.map} +1 -1
  59. prefect/server/ui-v2/assets/{deployment-action-header-D5GOooPm.js → deployment-action-header-Vp9YsCJO.js} +2 -2
  60. prefect/server/ui-v2/assets/{deployment-action-header-D5GOooPm.js.map → deployment-action-header-Vp9YsCJO.js.map} +1 -1
  61. prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js → deployment-form-CJcg_6DJ.js} +3 -3
  62. prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js.map → deployment-form-CJcg_6DJ.js.map} +1 -1
  63. prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js → deployment-links-CIkJIuHh.js} +2 -2
  64. prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js.map → deployment-links-CIkJIuHh.js.map} +1 -1
  65. prefect/server/ui-v2/assets/deployment._id-C6XrGMp_.js +2 -0
  66. prefect/server/ui-v2/assets/{deployment._id-Ci9zge5n.js.map → deployment._id-C6XrGMp_.js.map} +1 -1
  67. prefect/server/ui-v2/assets/{deployment._id-whsGcHdu.js → deployment._id-CWgTYmTG.js} +2 -2
  68. prefect/server/ui-v2/assets/{deployment._id-whsGcHdu.js.map → deployment._id-CWgTYmTG.js.map} +1 -1
  69. prefect/server/ui-v2/assets/deployment_._id.duplicate-Bg0s0ZJn.js +2 -0
  70. prefect/server/ui-v2/assets/{deployment_._id.duplicate-D9ZWkh8H.js.map → deployment_._id.duplicate-Bg0s0ZJn.js.map} +1 -1
  71. prefect/server/ui-v2/assets/deployment_._id.edit-CnoB0UeG.js +2 -0
  72. prefect/server/ui-v2/assets/{deployment_._id.edit-CS7sObzC.js.map → deployment_._id.edit-CnoB0UeG.js.map} +1 -1
  73. prefect/server/ui-v2/assets/{deployment_._id.run-g7SZuDFi.js → deployment_._id.run-BqPK6rTB.js} +2 -2
  74. prefect/server/ui-v2/assets/{deployment_._id.run-g7SZuDFi.js.map → deployment_._id.run-BqPK6rTB.js.map} +1 -1
  75. prefect/server/ui-v2/assets/{dropdown-menu-0atiOSFo.js → dropdown-menu-D7Gwbd15.js} +2 -2
  76. prefect/server/ui-v2/assets/{dropdown-menu-0atiOSFo.js.map → dropdown-menu-D7Gwbd15.js.map} +1 -1
  77. prefect/server/ui-v2/assets/{event-resource-display-DHiAb1Up.js → event-resource-display-CDRgVKd4.js} +2 -2
  78. prefect/server/ui-v2/assets/{event-resource-display-DHiAb1Up.js.map → event-resource-display-CDRgVKd4.js.map} +1 -1
  79. prefect/server/ui-v2/assets/event._eventDate._eventId-C73GMDkK.js +2 -0
  80. prefect/server/ui-v2/assets/{event._eventDate._eventId-D7Twzb22.js.map → event._eventDate._eventId-C73GMDkK.js.map} +1 -1
  81. prefect/server/ui-v2/assets/{flow-run-graph-BhzuSJLm.js → flow-run-graph-ckiE3mA9.js} +2 -2
  82. prefect/server/ui-v2/assets/{flow-run-graph-BhzuSJLm.js.map → flow-run-graph-ckiE3mA9.js.map} +1 -1
  83. prefect/server/ui-v2/assets/{flow-run._id-CqpH6bvx.js → flow-run._id-BukrNCAq.js} +2 -2
  84. prefect/server/ui-v2/assets/{flow-run._id-CqpH6bvx.js.map → flow-run._id-BukrNCAq.js.map} +1 -1
  85. prefect/server/ui-v2/assets/{flow-run._id-lIIQBD7H.js → flow-run._id-CtI5VZ2M.js} +2 -2
  86. prefect/server/ui-v2/assets/{flow-run._id-lIIQBD7H.js.map → flow-run._id-CtI5VZ2M.js.map} +1 -1
  87. prefect/server/ui-v2/assets/flow-run._id-s1UJuakA.js +4 -0
  88. prefect/server/ui-v2/assets/{flow-run._id-RLy2kBh0.js.map → flow-run._id-s1UJuakA.js.map} +1 -1
  89. prefect/server/ui-v2/assets/{flow-runs-pagination-BATUweRV.js → flow-runs-pagination-SLbYtvaR.js} +2 -2
  90. prefect/server/ui-v2/assets/{flow-runs-pagination-BATUweRV.js.map → flow-runs-pagination-SLbYtvaR.js.map} +1 -1
  91. prefect/server/ui-v2/assets/flow._id-CZ5P0v4N.js +2 -0
  92. prefect/server/ui-v2/assets/{flow._id-BdQGWPKP.js.map → flow._id-CZ5P0v4N.js.map} +1 -1
  93. prefect/server/ui-v2/assets/{form-DLrbC7rV.js → form-mws4law8.js} +2 -2
  94. prefect/server/ui-v2/assets/{form-DLrbC7rV.js.map → form-mws4law8.js.map} +1 -1
  95. prefect/server/ui-v2/assets/{header-BTAWyeXv.js → header-Bes1LmY7.js} +2 -2
  96. prefect/server/ui-v2/assets/{header-BTAWyeXv.js.map → header-Bes1LmY7.js.map} +1 -1
  97. prefect/server/ui-v2/assets/{header-ChFAx5uR.js → header-Bj_zBR-a.js} +2 -2
  98. prefect/server/ui-v2/assets/{header-ChFAx5uR.js.map → header-Bj_zBR-a.js.map} +1 -1
  99. prefect/server/ui-v2/assets/{header-CyQqOj1w.js → header-CPxTHSvz.js} +2 -2
  100. prefect/server/ui-v2/assets/{header-CyQqOj1w.js.map → header-CPxTHSvz.js.map} +1 -1
  101. prefect/server/ui-v2/assets/{index-m48E4KcG.js → index-B8vo2Lrg.js} +5 -5
  102. prefect/server/ui-v2/assets/{index-m48E4KcG.js.map → index-B8vo2Lrg.js.map} +1 -1
  103. prefect/server/ui-v2/assets/{index-D5RT-SAp.js → index-BBeh-3Nh.js} +2 -2
  104. prefect/server/ui-v2/assets/{index-D5RT-SAp.js.map → index-BBeh-3Nh.js.map} +1 -1
  105. prefect/server/ui-v2/assets/index-BLnEvHia.js +2 -0
  106. prefect/server/ui-v2/assets/{index-7i4X9TeK.js.map → index-BLnEvHia.js.map} +1 -1
  107. prefect/server/ui-v2/assets/index-BpKoubXu.js +2 -0
  108. prefect/server/ui-v2/assets/index-BpKoubXu.js.map +1 -0
  109. prefect/server/ui-v2/assets/index-By6YGqR3.js +2 -0
  110. prefect/server/ui-v2/assets/index-By6YGqR3.js.map +1 -0
  111. prefect/server/ui-v2/assets/index-CEi3BlKI.js +2 -0
  112. prefect/server/ui-v2/assets/index-CEi3BlKI.js.map +1 -0
  113. prefect/server/ui-v2/assets/{index-BaWDC4da.js → index-CS-zxv7Z.js} +2 -2
  114. prefect/server/ui-v2/assets/{index-BaWDC4da.js.map → index-CS-zxv7Z.js.map} +1 -1
  115. prefect/server/ui-v2/assets/{index-kP_I5Qfd.js → index-CToHKh4q.js} +2 -2
  116. prefect/server/ui-v2/assets/{index-kP_I5Qfd.js.map → index-CToHKh4q.js.map} +1 -1
  117. prefect/server/ui-v2/assets/{index-CKGj5lSu.js → index-CUVvZndW.js} +2 -2
  118. prefect/server/ui-v2/assets/{index-CKGj5lSu.js.map → index-CUVvZndW.js.map} +1 -1
  119. prefect/server/ui-v2/assets/{index-CxUfZRkN.js → index-CYVn-I3i.js} +2 -2
  120. prefect/server/ui-v2/assets/{index-CxUfZRkN.js.map → index-CYVn-I3i.js.map} +1 -1
  121. prefect/server/ui-v2/assets/{index-CnlN-VC_.js → index-Cun0JN4t.js} +2 -2
  122. prefect/server/ui-v2/assets/{index-CnlN-VC_.js.map → index-Cun0JN4t.js.map} +1 -1
  123. prefect/server/ui-v2/assets/{index-BwCLKpNb.js → index-D6ynV6U7.js} +2 -2
  124. prefect/server/ui-v2/assets/{index-BwCLKpNb.js.map → index-D6ynV6U7.js.map} +1 -1
  125. prefect/server/ui-v2/assets/{index-CHf6xi9j.js → index-DdNUJLRW.js} +2 -2
  126. prefect/server/ui-v2/assets/{index-CHf6xi9j.js.map → index-DdNUJLRW.js.map} +1 -1
  127. prefect/server/ui-v2/assets/{index-CQnWiUE5.js → index-DlHOXQhu.js} +2 -2
  128. prefect/server/ui-v2/assets/{index-CQnWiUE5.js.map → index-DlHOXQhu.js.map} +1 -1
  129. prefect/server/ui-v2/assets/{index-Eqdr6Ff7.js → index-DyVw8YE8.js} +2 -2
  130. prefect/server/ui-v2/assets/{index-Eqdr6Ff7.js.map → index-DyVw8YE8.js.map} +1 -1
  131. prefect/server/ui-v2/assets/{index-Btb_-PDp.js → index-DzRz7D2P.js} +2 -2
  132. prefect/server/ui-v2/assets/{index-Btb_-PDp.js.map → index-DzRz7D2P.js.map} +1 -1
  133. prefect/server/ui-v2/assets/{index-DQGif3jm.js → index-DzUcVNZg.js} +2 -2
  134. prefect/server/ui-v2/assets/{index-DQGif3jm.js.map → index-DzUcVNZg.js.map} +1 -1
  135. prefect/server/ui-v2/assets/{index-DNh9ZBy4.js → index-IBvMMs6S.js} +2 -2
  136. prefect/server/ui-v2/assets/{index-DNh9ZBy4.js.map → index-IBvMMs6S.js.map} +1 -1
  137. prefect/server/ui-v2/assets/index-_kpA__te.js +2 -0
  138. prefect/server/ui-v2/assets/{index-CiSFHkhI.js.map → index-_kpA__te.js.map} +1 -1
  139. prefect/server/ui-v2/assets/index-m9O-nIOl.css +1 -0
  140. prefect/server/ui-v2/assets/{index-lyQav_XM.js → index-wOvyf10b.js} +2 -2
  141. prefect/server/ui-v2/assets/{index-lyQav_XM.js.map → index-wOvyf10b.js.map} +1 -1
  142. prefect/server/ui-v2/assets/{json-input-Ba-BeBcw.js → json-input-Ce-HlRqa.js} +2 -2
  143. prefect/server/ui-v2/assets/{json-input-Ba-BeBcw.js.map → json-input-Ce-HlRqa.js.map} +1 -1
  144. prefect/server/ui-v2/assets/{key-value-DkSKn6jE.js → key-value-XHEZOtZX.js} +2 -2
  145. prefect/server/ui-v2/assets/{key-value-DkSKn6jE.js.map → key-value-XHEZOtZX.js.map} +1 -1
  146. prefect/server/ui-v2/assets/{key._key-Cjx57ymg.js → key._key-LpsMf3zD.js} +2 -2
  147. prefect/server/ui-v2/assets/{key._key-Cjx57ymg.js.map → key._key-LpsMf3zD.js.map} +1 -1
  148. prefect/server/ui-v2/assets/{lazy-markdown-Du2Xu3Yp.js → lazy-markdown-1Hz0xzca.js} +2 -2
  149. prefect/server/ui-v2/assets/{lazy-markdown-Du2Xu3Yp.js.map → lazy-markdown-1Hz0xzca.js.map} +1 -1
  150. prefect/server/ui-v2/assets/{login-DxMF9Jvj.js → login-D5uepl9L.js} +2 -2
  151. prefect/server/ui-v2/assets/{login-DxMF9Jvj.js.map → login-D5uepl9L.js.map} +1 -1
  152. prefect/server/ui-v2/assets/{markdown-input-DPi8zyRr.js → markdown-input-CG6M9zD0.js} +2 -2
  153. prefect/server/ui-v2/assets/{markdown-input-DPi8zyRr.js.map → markdown-input-CG6M9zD0.js.map} +1 -1
  154. prefect/server/ui-v2/assets/python-example-snippet-DRHcUlCX.js +3 -0
  155. prefect/server/ui-v2/assets/{python-example-snippet-DfCFYPN_.js.map → python-example-snippet-DRHcUlCX.js.map} +1 -1
  156. prefect/server/ui-v2/assets/{python-input-mr6GD840.js → python-input-BsUS8fw1.js} +2 -2
  157. prefect/server/ui-v2/assets/{python-input-mr6GD840.js.map → python-input-BsUS8fw1.js.map} +1 -1
  158. prefect/server/ui-v2/assets/{radio-group-Co3cN0Kv.js → radio-group-BUsmwdrt.js} +2 -2
  159. prefect/server/ui-v2/assets/{radio-group-Co3cN0Kv.js.map → radio-group-BUsmwdrt.js.map} +1 -1
  160. prefect/server/ui-v2/assets/{route-error-state-DnBaNT2T.js → route-error-state-BFBpiIhD.js} +2 -2
  161. prefect/server/ui-v2/assets/{route-error-state-DnBaNT2T.js.map → route-error-state-BFBpiIhD.js.map} +1 -1
  162. prefect/server/ui-v2/assets/{schema-form-CWDHSME9.js → schema-form-BwTmkvJk.js} +2 -2
  163. prefect/server/ui-v2/assets/schema-form-BwTmkvJk.js.map +1 -0
  164. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BSWlW_aQ.js → schema-form-input-string-format-datetime-nrb3g-JJ.js} +4 -4
  165. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BSWlW_aQ.js.map → schema-form-input-string-format-datetime-nrb3g-JJ.js.map} +1 -1
  166. prefect/server/ui-v2/assets/{settings-DU5y6tJE.js → settings-CUBtK5aW.js} +2 -2
  167. prefect/server/ui-v2/assets/{settings-DU5y6tJE.js.map → settings-CUBtK5aW.js.map} +1 -1
  168. prefect/server/ui-v2/assets/{sort-filter-DpuWNkQo.js → sort-filter-Cv8zAXMp.js} +2 -2
  169. prefect/server/ui-v2/assets/{sort-filter-DpuWNkQo.js.map → sort-filter-Cv8zAXMp.js.map} +1 -1
  170. prefect/server/ui-v2/assets/{table-bBL6C0ZK.js → table-BBNGfPra.js} +2 -2
  171. prefect/server/ui-v2/assets/{table-bBL6C0ZK.js.map → table-BBNGfPra.js.map} +1 -1
  172. prefect/server/ui-v2/assets/{tags-input-BLPMVWpZ.js → tags-input-DHrnkwjQ.js} +2 -2
  173. prefect/server/ui-v2/assets/{tags-input-BLPMVWpZ.js.map → tags-input-DHrnkwjQ.js.map} +1 -1
  174. prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js +2 -0
  175. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-S69sih55.js.map → task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js.map} +1 -1
  176. prefect/server/ui-v2/assets/{task-run._id-Dl3Azs8t.js → task-run._id-BY58gqs2.js} +2 -2
  177. prefect/server/ui-v2/assets/{task-run._id-Dl3Azs8t.js.map → task-run._id-BY58gqs2.js.map} +1 -1
  178. prefect/server/ui-v2/assets/{task-run._id-B_tIDm4K.js → task-run._id-u73Jxfqw.js} +3 -3
  179. prefect/server/ui-v2/assets/{task-run._id-B_tIDm4K.js.map → task-run._id-u73Jxfqw.js.map} +1 -1
  180. prefect/server/ui-v2/assets/task-runs-pagination-DUy3147A.js +2 -0
  181. prefect/server/ui-v2/assets/{task-runs-pagination-VdR-LO4r.js.map → task-runs-pagination-DUy3147A.js.map} +1 -1
  182. prefect/server/ui-v2/assets/{textarea-B3_TtPRi.js → textarea-DUhh6-kq.js} +2 -2
  183. prefect/server/ui-v2/assets/{textarea-B3_TtPRi.js.map → textarea-DUhh6-kq.js.map} +1 -1
  184. prefect/server/ui-v2/assets/timezone-select-D4Q6VBtD.js +2 -0
  185. prefect/server/ui-v2/assets/{timezone-select-BuPYznge.js.map → timezone-select-D4Q6VBtD.js.map} +1 -1
  186. prefect/server/ui-v2/assets/{toggle-group-Cn07UIim.js → toggle-group-7WUJn2Tx.js} +2 -2
  187. prefect/server/ui-v2/assets/{toggle-group-Cn07UIim.js.map → toggle-group-7WUJn2Tx.js.map} +1 -1
  188. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-D4AD5Ndf.js +2 -0
  189. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-DpdsLH4t.js.map → use-delete-automation-confirmation-dialog-D4AD5Ndf.js.map} +1 -1
  190. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-Cq5nGhzr.js → use-delete-block-document-confirmation-dialog-DnwWEGUY.js} +2 -2
  191. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-Cq5nGhzr.js.map → use-delete-block-document-confirmation-dialog-DnwWEGUY.js.map} +1 -1
  192. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DmQSWBTu.js → use-flow-runs-selected-rows-C-tehPRB.js} +2 -2
  193. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DmQSWBTu.js.map → use-flow-runs-selected-rows-C-tehPRB.js.map} +1 -1
  194. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DTwcWiqW.js → use-get-artifacts-flow-task-runs-DRWRrmrb.js} +2 -2
  195. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DTwcWiqW.js.map → use-get-artifacts-flow-task-runs-DRWRrmrb.js.map} +1 -1
  196. prefect/server/ui-v2/assets/{use-quick-run-CPempwLh.js → use-quick-run-B4Xj-YQQ.js} +2 -2
  197. prefect/server/ui-v2/assets/{use-quick-run-CPempwLh.js.map → use-quick-run-B4Xj-YQQ.js.map} +1 -1
  198. prefect/server/ui-v2/assets/use-state-favicon-au2TZdMV.js +2 -0
  199. prefect/server/ui-v2/assets/{use-state-favicon-M09DmrNy.js.map → use-state-favicon-au2TZdMV.js.map} +1 -1
  200. prefect/server/ui-v2/assets/{use-stepper-CDucnvzp.js → use-stepper-DyIb3vlq.js} +2 -2
  201. prefect/server/ui-v2/assets/{use-stepper-CDucnvzp.js.map → use-stepper-DyIb3vlq.js.map} +1 -1
  202. prefect/server/ui-v2/assets/{utilities-BRCNRcQl.js → utilities-D9Y2wo66.js} +2 -2
  203. prefect/server/ui-v2/assets/{utilities-BRCNRcQl.js.map → utilities-D9Y2wo66.js.map} +1 -1
  204. prefect/server/ui-v2/assets/vendor-recharts-BvvJP9Po.js +34 -0
  205. prefect/server/ui-v2/assets/vendor-recharts-BvvJP9Po.js.map +1 -0
  206. prefect/server/ui-v2/assets/{work-pool-filter-C2tpSS-w.js → work-pool-filter-CSOATj2D.js} +2 -2
  207. prefect/server/ui-v2/assets/{work-pool-filter-C2tpSS-w.js.map → work-pool-filter-CSOATj2D.js.map} +1 -1
  208. prefect/server/ui-v2/assets/work-pool-queue-toggle-Dh7B1zMo.js +2 -0
  209. prefect/server/ui-v2/assets/{work-pool-queue-toggle-BQ9b-Wxy.js.map → work-pool-queue-toggle-Dh7B1zMo.js.map} +1 -1
  210. prefect/server/ui-v2/assets/work-pool._workPoolName-B_NFWXKS.js +2 -0
  211. prefect/server/ui-v2/assets/{work-pool._workPoolName-C_LiL3SE.js.map → work-pool._workPoolName-B_NFWXKS.js.map} +1 -1
  212. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DBHlrVVx.js → work-pool_._workPoolName.edit-Cyzn8g-S.js} +2 -2
  213. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DBHlrVVx.js.map → work-pool_._workPoolName.edit-Cyzn8g-S.js.map} +1 -1
  214. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DkITxJOP.js → work-pool_._workPoolName.queue._workQueueName-DQzqQWPT.js} +2 -2
  215. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DkITxJOP.js.map → work-pool_._workPoolName.queue._workQueueName-DQzqQWPT.js.map} +1 -1
  216. prefect/server/ui-v2/assets/{work-queue-icon-text-D4BWBVDN.js → work-queue-icon-text-BOpcJ8YU.js} +2 -2
  217. prefect/server/ui-v2/assets/{work-queue-icon-text-D4BWBVDN.js.map → work-queue-icon-text-BOpcJ8YU.js.map} +1 -1
  218. prefect/server/ui-v2/index.html +3 -3
  219. {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/METADATA +2 -1
  220. {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/RECORD +223 -211
  221. prefect/server/ui-v2/assets/artifact._id-BFdf1WUA.js +0 -2
  222. prefect/server/ui-v2/assets/artifact._id-BFdf1WUA.js.map +0 -1
  223. prefect/server/ui-v2/assets/automation._id-Dn7jABys.js +0 -2
  224. prefect/server/ui-v2/assets/block-type-logo-Cbpfxded.js +0 -2
  225. prefect/server/ui-v2/assets/block-type-logo-Cbpfxded.js.map +0 -1
  226. prefect/server/ui-v2/assets/catalog_._slug-Bl2J2oI3.js +0 -2
  227. prefect/server/ui-v2/assets/create-D--LHaji.js +0 -2
  228. prefect/server/ui-v2/assets/data-table-rlbkLcrY.js +0 -2
  229. prefect/server/ui-v2/assets/data-table-rlbkLcrY.js.map +0 -1
  230. prefect/server/ui-v2/assets/delete-confirmation-dialog-DHkm2p8m.js +0 -2
  231. prefect/server/ui-v2/assets/deployment._id-Ci9zge5n.js +0 -2
  232. prefect/server/ui-v2/assets/deployment_._id.duplicate-D9ZWkh8H.js +0 -2
  233. prefect/server/ui-v2/assets/deployment_._id.edit-CS7sObzC.js +0 -2
  234. prefect/server/ui-v2/assets/event._eventDate._eventId-D7Twzb22.js +0 -2
  235. prefect/server/ui-v2/assets/flow-run._id-RLy2kBh0.js +0 -4
  236. prefect/server/ui-v2/assets/flow._id-BdQGWPKP.js +0 -2
  237. prefect/server/ui-v2/assets/index-7i4X9TeK.js +0 -2
  238. prefect/server/ui-v2/assets/index-BkiGTHwU.js +0 -2
  239. prefect/server/ui-v2/assets/index-BkiGTHwU.js.map +0 -1
  240. prefect/server/ui-v2/assets/index-COouj_0-.css +0 -1
  241. prefect/server/ui-v2/assets/index-CiSFHkhI.js +0 -2
  242. prefect/server/ui-v2/assets/index-DATPYZfT.js +0 -2
  243. prefect/server/ui-v2/assets/index-DATPYZfT.js.map +0 -1
  244. prefect/server/ui-v2/assets/index-VH4TnZ4e.js +0 -2
  245. prefect/server/ui-v2/assets/index-VH4TnZ4e.js.map +0 -1
  246. prefect/server/ui-v2/assets/python-example-snippet-DfCFYPN_.js +0 -3
  247. prefect/server/ui-v2/assets/schema-form-CWDHSME9.js.map +0 -1
  248. prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-S69sih55.js +0 -2
  249. prefect/server/ui-v2/assets/task-runs-pagination-VdR-LO4r.js +0 -2
  250. prefect/server/ui-v2/assets/timezone-select-BuPYznge.js +0 -2
  251. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DpdsLH4t.js +0 -2
  252. prefect/server/ui-v2/assets/use-state-favicon-M09DmrNy.js +0 -2
  253. prefect/server/ui-v2/assets/vendor-recharts-BAN776s_.js +0 -34
  254. prefect/server/ui-v2/assets/vendor-recharts-BAN776s_.js.map +0 -1
  255. prefect/server/ui-v2/assets/work-pool-queue-toggle-BQ9b-Wxy.js +0 -2
  256. prefect/server/ui-v2/assets/work-pool._workPoolName-C_LiL3SE.js +0 -2
  257. {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/WHEEL +0 -0
  258. {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/entry_points.txt +0 -0
  259. {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/licenses/LICENSE +0 -0
@@ -1,2 +1,2 @@
1
- import{j as e,d as B,L as y,s as h}from"./vendor-tanstack-BcZfOOfy.js";import{B as N,g as v,h as n,bs as i,bB as d,bD as F,dh as _,C as S,p as C,q as p,y as u,dN as L,df as w,dg as E}from"./index-m48E4KcG.js";import{a as D}from"./zod-Cuos7J7w.js";import{c as P,o as A,s as R}from"./vendor-forms-ClCIacbh.js";import{B as T}from"./block-type-details-Cklc7TkK.js";import{u as U,L as V}from"./schema-form-input-string-format-datetime-BSWlW_aQ.js";import"./toggle-group-Cn07UIim.js";import{F as I,b as Q,c as z,d as G,e as M,a as $}from"./form-DLrbC7rV.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BAN776s_.js";import"./vendor-date-wwuDAncJ.js";import"./block-type-logo-Cbpfxded.js";import"./lazy-markdown-Du2Xu3Yp.js";import"./use-debounce-callback-CSs1BjLI.js";import"./timezone-select-BuPYznge.js";import"./dropdown-menu-0atiOSFo.js";const q=({blockType:s})=>e.jsx(N,{children:e.jsxs(v,{children:[e.jsx(n,{children:e.jsx(i,{to:"/blocks",className:"text-xl font-semibold",children:"Blocks"})}),e.jsx(d,{}),e.jsx(n,{children:e.jsx(i,{to:"/blocks/catalog",className:"text-xl font-semibold",children:"Catalog"})}),e.jsx(d,{}),e.jsx(n,{children:e.jsx(i,{to:"/blocks/catalog",className:"text-xl font-semibold",children:s.name})}),e.jsx(d,{}),e.jsx(n,{className:"text-xl font-semibold",children:e.jsx(F,{children:"Create"})})]})}),H=/^[a-zA-Z0-9-]+$/,K=A({blockName:R().regex(H,{message:"Name must only contain lowercase letters, numbers, and dashes"})}),O={blockName:""},X=({blockSchema:s,blockType:o})=>{const l=B(),{values:a,setValues:b,errors:x,validateForm:j}=U(),{createBlockDocument:k,isPending:f}=_(),m=P({resolver:D(K),defaultValues:O}),g=async r=>{try{if(await j({schema:a}),x.length>0)return;k({block_schema_id:s.id,block_type_id:o.id,is_anonymous:!1,data:a,name:r.blockName},{onSuccess:t=>{u.success("Block created successfully"),l({to:"/blocks/block/$id",params:{id:t.id}})},onError:t=>{const c="Unknown error while creating block.";u.error(c),console.error(c,t)}})}catch(t){const c="Unknown error while validating block data.";u.error(c),console.error(c,t)}};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(q,{blockType:o}),e.jsxs(S,{className:" p-6 grid grid-cols-[minmax(0,_1fr)_250px] gap-4 ",children:[e.jsx(I,{...m,children:e.jsxs("form",{className:"flex flex-col gap-4",onSubmit:r=>{m.handleSubmit(g)(r)},children:[e.jsx(Q,{control:m.control,name:"blockName",render:({field:r})=>e.jsxs(z,{children:[e.jsx(G,{children:"Name"}),e.jsx(M,{children:e.jsx(C,{...r,value:r.value})}),e.jsx($,{})]})}),e.jsx(V,{values:a,onValuesChange:b,errors:x,kinds:["json"],schema:s.fields}),e.jsxs("div",{className:"flex gap-3 justify-end",children:[e.jsx(p,{variant:"secondary",children:e.jsx(y,{to:"/blocks/catalog",children:"Cancel"})}),e.jsx(p,{loading:f,type:"submit",children:"Save"})]})]})}),e.jsx(T,{blockType:o})]})]})};function xe(){const{slug:s}=L.useParams(),{data:o}=h(w(s)),{data:l}=h(E({block_schemas:{block_type_id:{any_:[o.id]},operator:"and_"},offset:0})),a=l[0];if(!a)throw new Error("Block schema not found");return e.jsx(X,{blockSchema:a,blockType:o})}export{xe as component};
2
- //# sourceMappingURL=catalog_._slug_.create-9UD_SxDN.js.map
1
+ import{j as e,d as B,L as y,s as h}from"./vendor-tanstack-BcZfOOfy.js";import{B as N,g as F,h as n,bw as i,bF as d,bH as v,dk as _,C as S,p as C,q as p,y as u,dQ as L,di as w,dj as E}from"./index-B8vo2Lrg.js";import{a as D}from"./zod-Cuos7J7w.js";import{c as P,o as A,s as Q}from"./vendor-forms-ClCIacbh.js";import{B as R}from"./block-type-details-CYrdaLot.js";import{u as T,L as U}from"./schema-form-input-string-format-datetime-nrb3g-JJ.js";import"./toggle-group-7WUJn2Tx.js";import{F as V,b as I,c as z,d as G,e as H,a as M}from"./form-mws4law8.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BvvJP9Po.js";import"./vendor-date-wwuDAncJ.js";import"./block-type-logo-CyAWq7mC.js";import"./lazy-markdown-1Hz0xzca.js";import"./use-debounce-callback-CSs1BjLI.js";import"./timezone-select-D4Q6VBtD.js";import"./dropdown-menu-D7Gwbd15.js";const $=({blockType:s})=>e.jsx(N,{children:e.jsxs(F,{children:[e.jsx(n,{children:e.jsx(i,{to:"/blocks",className:"text-xl font-semibold",children:"Blocks"})}),e.jsx(d,{}),e.jsx(n,{children:e.jsx(i,{to:"/blocks/catalog",className:"text-xl font-semibold",children:"Catalog"})}),e.jsx(d,{}),e.jsx(n,{children:e.jsx(i,{to:"/blocks/catalog",className:"text-xl font-semibold",children:s.name})}),e.jsx(d,{}),e.jsx(n,{className:"text-xl font-semibold",children:e.jsx(v,{children:"Create"})})]})}),q=/^[a-zA-Z0-9-]+$/,K=A({blockName:Q().regex(q,{message:"Name must only contain lowercase letters, numbers, and dashes"})}),O={blockName:""},X=({blockSchema:s,blockType:o})=>{const l=B(),{values:a,setValues:b,errors:x,validateForm:j}=T(),{createBlockDocument:k,isPending:f}=_(),m=P({resolver:D(K),defaultValues:O}),g=async r=>{try{if(await j({schema:a}),x.length>0)return;k({block_schema_id:s.id,block_type_id:o.id,is_anonymous:!1,data:a,name:r.blockName},{onSuccess:t=>{u.success("Block created successfully"),l({to:"/blocks/block/$id",params:{id:t.id}})},onError:t=>{const c="Unknown error while creating block.";u.error(c),console.error(c,t)}})}catch(t){const c="Unknown error while validating block data.";u.error(c),console.error(c,t)}};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx($,{blockType:o}),e.jsxs(S,{className:" p-6 grid grid-cols-[minmax(0,_1fr)_250px] gap-4 ",children:[e.jsx(V,{...m,children:e.jsxs("form",{className:"flex flex-col gap-4",onSubmit:r=>{m.handleSubmit(g)(r)},children:[e.jsx(I,{control:m.control,name:"blockName",render:({field:r})=>e.jsxs(z,{children:[e.jsx(G,{children:"Name"}),e.jsx(H,{children:e.jsx(C,{...r,value:r.value})}),e.jsx(M,{})]})}),e.jsx(U,{values:a,onValuesChange:b,errors:x,kinds:["json"],schema:s.fields}),e.jsxs("div",{className:"flex gap-3 justify-end",children:[e.jsx(p,{variant:"secondary",children:e.jsx(y,{to:"/blocks/catalog",children:"Cancel"})}),e.jsx(p,{loading:f,type:"submit",children:"Save"})]})]})}),e.jsx(R,{blockType:o})]})]})};function xe(){const{slug:s}=L.useParams(),{data:o}=h(w(s)),{data:l}=h(E({block_schemas:{block_type_id:{any_:[o.id]},operator:"and_"},offset:0})),a=l[0];if(!a)throw new Error("Block schema not found");return e.jsx(X,{blockSchema:a,blockType:o})}export{xe as component};
2
+ //# sourceMappingURL=catalog_._slug_.create-DBaeHi9Q.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog_._slug_.create-9UD_SxDN.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-DBaeHi9Q.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,2 +1,2 @@
1
- import{u as l,r as d,j as s}from"./vendor-tanstack-BcZfOOfy.js";import{br as p,bp as c,cZ as m,ab as f,M as b,d4 as y}from"./index-m48E4KcG.js";import{aA as k,aB as w,aC as Q}from"./vendor-radix-BTiKGWfR.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(k,{"data-slot":"collapsible",...o})}function j({...o}){return s.jsx(w,{"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-BVQTBG_U.js.map
1
+ import{u as l,r as d,j as s}from"./vendor-tanstack-BcZfOOfy.js";import{bv as p,bt as c,d0 as m,af as f,T as b,d7 as y}from"./index-B8vo2Lrg.js";import{aA as k,aB as w,aC as Q}from"./vendor-radix-BTiKGWfR.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(k,{"data-slot":"collapsible",...o})}function j({...o}){return s.jsx(w,{"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-B_NJS0uJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible-BVQTBG_U.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-B_NJS0uJ.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 D,d as L,F as R,r as S,s as A,M as E}from"./vendor-tanstack-BcZfOOfy.js";import{C as y,cB 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 $,c$ as G,b5 as h,d0 as z}from"./index-m48E4KcG.js";import{f as p,p as j}from"./vendor-date-wwuDAncJ.js";import{T as F,a as H,b as Q}from"./task-run-concurrency-limits-reset-dialog-S69sih55.js";import{o as q,e as K}from"./vendor-forms-ClCIacbh.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BAN776s_.js";import"./dropdown-menu-0atiOSFo.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($,{value:d["active-task-runs"].tabSearchValue,children:s})]})},le=({id:s})=>{const[a,t]=S.useState(null),{data:r}=A(G(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-CsgRxA0a.js.map
1
+ import{j as e,c as D,d as L,F as R,r as A,s as S,M as E}from"./vendor-tanstack-BcZfOOfy.js";import{C as y,cE as _,$ as w,au as B,B as b,g as f,h as c,bw as m,bF as x,I as v,ap as N,av as I,a_ as V,bH as M,aA as P,aB as O,aC as U,aD as $,d2 as F,b9 as h,d3 as G}from"./index-B8vo2Lrg.js";import{f as p,p as j}from"./vendor-date-wwuDAncJ.js";import{T as H,a as z,b as Q}from"./task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js";import{o as K,e as q}from"./vendor-forms-ClCIacbh.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BvvJP9Po.js";import"./dropdown-menu-D7Gwbd15.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: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(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(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(H,{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(z,{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($,{value:d["active-task-runs"].tabSearchValue,children:s})]})},le=({id:s})=>{const[a,t]=A.useState(null),{data:r}=S(F(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))});K({tab:q(["active-task-runs"]).default("active-task-runs")});function be(){const{id:s}=G.useParams();return e.jsx(le,{id:s})}export{be as component};
2
+ //# sourceMappingURL=concurrency-limit._id-qzNUQzQa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"concurrency-limit._id-CsgRxA0a.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-qzNUQzQa.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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"}
@@ -0,0 +1,2 @@
1
+ import{j as e,s as V,r as W,g as I}from"./vendor-tanstack-BcZfOOfy.js";import{a as R}from"./zod-Cuos7J7w.js";import{g as B,o as _,n as D,s as N,r as U,u as q,c as A}from"./vendor-forms-ClCIacbh.js";import{p as P,C as T,o as F,bA as $,a_ as S,bB as J,bC as G,H,bD as M,m as O,n as Q,q as v,y as w}from"./index-B8vo2Lrg.js";import{b as x,c as f,d as h,e as j,a as b,F as z}from"./form-mws4law8.js";import{u as K,S as X}from"./use-stepper-DyIb3vlq.js";import{T as Y}from"./textarea-DUhh6-kq.js";import"./schema-form-input-string-format-datetime-nrb3g-JJ.js";import"./toggle-group-7WUJn2Tx.js";import{B as Z}from"./base-job-template-form-section-oZD6U-RW.js";import{R as ee,a as te}from"./radio-group-BUsmwdrt.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BvvJP9Po.js";import"./vendor-date-wwuDAncJ.js";import"./use-debounce-callback-CSs1BjLI.js";import"./timezone-select-D4Q6VBtD.js";import"./dropdown-menu-D7Gwbd15.js";import"./schema-form-BwTmkvJk.js";import"./block-type-logo-CyAWq7mC.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(P,{...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(P,{...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=_({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=_({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={}}=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:m,documentation_url:y,is_beta:g}=r;s&&m&&d&&n.push({label:u||G(s),value:s,logoUrl:m,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:m})=>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,m&&e.jsx(H,{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=_({type:N().min(1,"Infrastructure type is required"),...se.shape,...ae.shape});function le(){const a=I(),{createWorkPool:o,isPending:i}=M(),{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(p=>p&&typeof p=="object"&&"type"in p&&p.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()},m=()=>{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 p={name:l.name,type:l.type,description:l.description,is_paused:!1,concurrency_limit:l.concurrencyLimit,base_job_template:l.baseJobTemplate||{}};o(p,{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(O,{children:e.jsx(Q,{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(z,{...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:m,disabled:i,className:"ml-2",children:"Cancel"})]}),e.jsx(v,{onClick:()=>{u()},disabled:i,children:i?"Creating...":t.isFinalStep?"Create Work Pool":"Next"})]})]})}const _e=le;export{_e as component};
2
+ //# sourceMappingURL=create-BwXG6EIb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-D--LHaji.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-BwXG6EIb.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":"khCAYO,SAASA,IAAkB,CACjC,MAAMC,EAAOC,EAAA,EAEb,OACCC,EAAAA,KAAAC,WAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CACA,QAASL,EAAK,QACd,KAAK,OACL,OAAQ,CAAC,CAAE,MAAAM,CAAA,WACTC,EAAA,CACA,SAAA,CAAAH,EAAAA,IAACI,GAAU,SAAA,MAAA,CAAI,QACdC,EAAA,CACA,SAAAL,EAAAA,IAACM,EAAA,CAAO,GAAGJ,EAAO,EACnB,QACCK,EAAA,CAAA,CAAY,CAAA,CAAA,CACd,CAAA,CAAA,EAIFP,EAAAA,IAACC,EAAA,CACA,QAASL,EAAK,QACd,KAAK,cACL,OAAQ,CAAC,CAAE,MAAAM,CAAA,WACTC,EAAA,CACA,SAAA,CAAAH,EAAAA,IAACI,GAAU,SAAA,wBAAA,CAAsB,QAChCC,EAAA,CACA,SAAAL,EAAAA,IAACQ,EAAA,CACC,GAAGN,EACJ,MAAOA,EAAM,OAAS,GACtB,KAAM,EACN,YAAY,wCAAA,CAAA,EAEd,QACCK,EAAA,CAAA,CAAY,CAAA,CAAA,CACd,CAAA,CAAA,EAIFP,EAAAA,IAACC,EAAA,CACA,QAASL,EAAK,QACd,KAAK,mBACL,OAAQ,CAAC,CAAE,MAAAM,CAAA,WACTC,EAAA,CACA,SAAA,CAAAH,EAAAA,IAACI,GAAU,SAAA,iCAAA,CAA+B,QACzCC,EAAA,CACA,SAAAL,EAAAA,IAACM,EAAA,CACC,GAAGJ,EACJ,KAAK,SACL,IAAK,EACL,YAAY,YACZ,MAAOA,EAAM,OAAS,GACtB,SAAWO,GAAM,CAChB,MAAMC,EAAQD,EAAE,OAAO,MACvBP,EAAM,SAASQ,IAAU,GAAK,KAAO,OAAOA,CAAK,CAAC,CACnD,CAAA,CAAA,EAEF,QACCH,EAAA,CAAA,CAAY,CAAA,CAAA,CACd,CAAA,CAAA,CAEF,EACD,CAEF,CCzEO,MAAMI,GAA4BC,EAAS,CACjD,KAAMC,EACJ,EACA,IAAI,EAAG,kBAAkB,EACzB,OACCH,GAAU,CAACA,EAAM,YAAA,EAAc,WAAW,SAAS,EACpD,mEAAA,EAEF,YAAaG,EAAE,EAAS,SAAA,EAAW,SAAA,EACnC,iBAAkBC,EAAE,EAAS,IAAI,CAAC,EAAE,SAAA,EAAW,SAAA,CAChD,CAAC,ECPM,SAASC,IAAkC,CACjD,MAAMnB,EAAOC,EAAA,EACPmB,EAAkBpB,EAAK,MAC5B,iBAAA,EAGD,OACCE,EAAAA,KAAC,MAAA,CAAI,UAAU,YACd,SAAA,CAAAE,EAAAA,IAACiB,EAAA,CACA,SAAAjB,MAACkB,EAAA,CACA,SAAApB,EAAAA,KAACqB,EAAA,CAAgB,SAAA,CAAA,8HAGf,KAAA,EAAG,QACH,KAAA,EAAG,EAAE,4KAAA,CAAA,CAGP,EACD,EACD,EAEAnB,EAAAA,IAACoB,EAAA,CACA,gBAAAJ,EACA,wBAA0BN,GAAU,CACnCd,EAAK,SAAS,kBAAmBc,CAAK,CACvC,CAAA,CAAA,CACD,EACD,CAEF,CC7BO,MAAMW,GAAoCT,EAAS,CACzD,gBAAiBU,EAASC,EAAE,CAAS,EAAE,SAAA,CACxC,CAAC,ECGKC,EAAc,CACnB,GAAI,UACJ,GAAI,UACJ,GAAI,WACL,EAEaC,GAAsC,CAAC,CACnD,IAAAC,EACA,IAAAC,EACA,KAAAC,EAAO,KACP,UAAAC,CACD,IACMH,EAeJ1B,EAAAA,IAAC,MAAA,CACA,IAAK0B,EACL,IAAAC,EACA,UAAWG,EACV,kEACAN,EAAYI,CAAI,EAChBC,CAAA,EAED,QAAUpB,GAAM,CACf,MAAMsB,EAAStB,EAAE,OACXuB,EAAW,SAAS,cAAc,KAAK,EAC7CA,EAAS,UAAYF,EACpB,yFACAN,EAAYI,CAAI,EAChBC,CAAA,EAEDG,EAAS,YAAcL,EAAI,OAAO,CAAC,EAAE,YAAA,EACrCI,EAAO,YAAY,aAAaC,EAAUD,CAAM,CACjD,CAAA,CAAA,EA/BA/B,EAAAA,IAAC,MAAA,CACA,UAAW8B,EACV,yFACAN,EAAYI,CAAI,EAChBC,CAAA,EAGA,SAAAF,EAAI,OAAO,CAAC,EAAE,YAAA,CAAY,CAAA,ECNxB,SAASM,IAAyB,CACxC,MAAMrC,EAAOC,EAAA,EACP,CAAE,KAAMqC,EAAkB,CAAA,GAAOC,EACtCC,EAAA,CAA4B,EAGvBC,EAAUC,EAAAA,QAAoC,IAAM,CACzD,MAAMD,EAAsC,CAAA,EAG5C,cAAO,OAAOH,CAAe,EAAE,QAASK,GAAe,CAClDA,GAAc,OAAOA,GAAe,UACvC,OAAO,OAAOA,CAAU,EAAE,QAASC,GAAW,CAC7C,GAAIA,GAAU,OAAOA,GAAW,UAAY,SAAUA,EAAQ,CAC7D,KAAM,CACL,KAAAC,EACA,aAAcC,EACd,YAAAC,EACA,SAAUC,EACV,kBAAmBC,EACnB,QAASC,CAAA,EACNN,EASAC,GAAQG,GAAWD,GACtBN,EAAQ,KAAK,CACZ,MAAOK,GAAeK,EAAUN,CAAI,EACpC,MAAOA,EACP,QAAAG,EACA,YAAAD,EACA,iBAAAE,EACA,OAAQC,GAAU,EAAA,CAClB,CAEH,CACD,CAAC,CAEH,CAAC,EAGMT,EAAQ,KAAK,CAACW,EAAaC,IAC7BD,EAAY,QAAU,CAACC,EAAa,OAChC,EAEJ,CAACD,EAAY,QAAUC,EAAa,OAChC,GAEDD,EAAY,MAAM,cAAcC,EAAa,KAAK,CACzD,CACF,EAAG,CAACf,CAAe,CAAC,EAEpB,OACClC,EAAAA,IAACC,EAAA,CACA,QAASL,EAAK,QACd,KAAK,OACL,OAAQ,CAAC,CAAE,MAAAM,EAAO,WAAAgD,CAAA,WAChB/C,EAAA,CACA,SAAA,CAAAH,EAAAA,IAACI,EAAA,CAAU,UAAU,wBAAwB,SAAA,sEAE7C,QACCC,EAAA,CACA,SAAAL,EAAAA,IAACmD,GAAA,CACA,MAAOjD,EAAM,MACb,cAAgBQ,GAAkBR,EAAM,SAASQ,CAAK,EACtD,UAAU,YAET,SAAA2B,EAAQ,IAAI,CAAC,CAAE,MAAAe,EAAO,MAAA1C,EAAO,QAAAkC,EAAS,YAAAD,EAAa,OAAAG,CAAA,IACnDhD,EAAAA,KAAC,MAAA,CAEA,UAAU,uEAEV,SAAA,CAAAE,EAAAA,IAACqD,GAAA,CAAe,MAAA3C,EAAc,GAAIA,CAAA,CAAO,EACzCV,EAAAA,IAAC,SAAM,QAASU,EAAO,UAAU,wBAChC,SAAAZ,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAE,MAACyB,IAAU,IAAKmB,EAAS,IAAKQ,EAAO,KAAK,KAAK,EAC/CtD,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACd,SAAA,CAAAA,EAAAA,KAAC,IAAA,CAAE,UAAU,0CACX,SAAA,CAAAsD,EACAN,GACA9C,EAAAA,IAACsD,EAAA,CAAM,QAAQ,YAAY,UAAU,eAAe,SAAA,MAAA,CAEpD,CAAA,EAEF,EACAtD,EAAAA,IAAC,IAAA,CAAE,UAAU,gCACX,SAAA2C,CAAA,CACF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,CAAA,CAAA,EArBKjC,CAAA,CAuBN,CAAA,CAAA,EAEH,EACCwC,EAAW,OACXlD,EAAAA,IAACO,EAAA,CAAa,SAAA2C,EAAW,MAAM,OAAA,CAAQ,CAAA,CAAA,CAEzC,CAAA,CAAA,CAIJ,CChHA,MAAMK,EAAQ,CAAC,sBAAuB,UAAW,eAAe,EAG1DC,GAAuB5C,EAAS,CACrC,KAAMC,EAAE,EAAS,IAAI,EAAG,iCAAiC,EACzD,GAAGF,GAA0B,MAC7B,GAAGU,GAAkC,KACtC,CAAC,EAIM,SAASoC,IAAuB,CACtC,MAAMC,EAASC,EAAA,EACT,CAAE,eAAAC,EAAgB,UAAAC,CAAA,EAAcC,EAAA,EAChC,CAAE,KAAM5B,EAAkB,CAAA,GAAOC,EACtCC,EAAA,CAA4B,EAIvB2B,EAAUC,EAAWT,EAAM,MAAM,EAGjC3D,EAAOqE,EAAkC,CAC9C,SAAUC,EAAYV,EAAoB,EAC1C,cAAe,CACd,YAAa,KACb,iBAAkB,IAAA,CACnB,CACA,EAEKW,EAAavE,EAAK,MAAM,MAAM,EAEpCwE,EAAAA,UAAU,IAAM,CACf,MAAMC,EAAa,OAAO,OAAOnC,CAAe,EAAE,KAChDK,GACAA,GACA,OAAOA,GAAe,UACtB,OAAO,OAAOA,CAAU,EAAE,KACxB8B,GACAA,GACA,OAAOA,GAAe,UACtB,SAAUA,GACTA,EAAgC,OAASF,CAAA,CAC5C,EAGDE,GACAF,KAAcE,GACd,OAAOA,EAAWF,CAAU,GAAM,UAClCE,EAAWF,CAAU,GACrB,mCAAoCE,EAAWF,CAAU,GAEzDvE,EAAK,SACJ,kBACAyE,EAAWF,CAAU,EAAE,8BAAA,CAM1B,EAAG,CAACjC,EAAiBtC,EAAMuE,CAAU,CAAC,EAEtC,MAAMG,EAAa,SAAY,CAC9B,MAAMC,EAAmBC,EAAiBT,EAAQ,WAAW,EACzC,MAAMnE,EAAK,QAAQ2E,CAAgB,IAGlDR,EAAQ,YACX,MAAMU,EAAA,EAENV,EAAQ,cAAA,EAGX,EAEMW,EAAa,IAAM,CACxBX,EAAQ,cAAA,CACT,EAEMY,EAAe,IAAM,CACrBjB,EAAO,SAAS,CAAE,GAAI,cAAe,CAC3C,EAEMe,EAAe,SAAY,CAEhC,GAAI,CADY,MAAM7E,EAAK,QAAA,EACb,OAEd,MAAMgF,EAAWhF,EAAK,UAAA,EAGtB,GAAI,CAACgF,EAAS,MAAQ,CAACA,EAAS,KAAM,CACrCC,EAAM,MAAM,oCAAoC,EAChD,MACD,CAEA,MAAMC,EAA+B,CACpC,KAAMF,EAAS,KACf,KAAMA,EAAS,KACf,YAAaA,EAAS,YACtB,UAAW,GACX,kBAAmBA,EAAS,iBAC5B,kBACEA,EAAS,iBAA+C,CAAA,CAAC,EAG5DhB,EAAekB,EAAc,CAC5B,UAAYC,GAAS,CACpBF,EAAM,QAAQ,cAAcD,EAAS,IAAI,wBAAwB,EAC5DlB,EAAO,SAAS,CACpB,GAAI,sCACJ,OAAQ,CAAE,aAAcqB,EAAK,MAAM,MAAQH,EAAS,IAAA,CAAK,CACzD,CACF,EACA,QAAUI,GAAU,CACnBH,EAAM,MAAM,+BAA+BG,EAAM,OAAO,EAAE,CAC3D,CAAA,CACA,CACF,EAEMR,EACLS,GACwC,CACxC,OAAQA,EAAA,CACP,IAAK,GACJ,MAAO,CAAC,MAAM,EACf,IAAK,GACJ,MAAO,CAAC,OAAQ,cAAe,kBAAkB,EAClD,IAAK,GACJ,MAAO,CAAC,iBAAiB,EAC1B,QACC,MAAO,CAAA,CAAC,CAEX,EAEMC,EAAoB,IAAM,CAC/B,OAAQnB,EAAQ,YAAA,CACf,IAAK,GACJ,aAAQ9B,GAAA,EAAuB,EAChC,IAAK,GACJ,aAAQtC,GAAA,EAAgB,EACzB,IAAK,GACJ,aAAQoB,GAAA,EAAgC,EACzC,QACC,OAAO,IAAA,CAEV,EAEA,OACCjB,EAAAA,KAAC,MAAA,CAAI,UAAU,YACd,SAAA,CAAAA,OAACmB,EAAA,CACA,SAAA,CAAAjB,MAACmF,EAAA,CACA,SAAAnF,EAAAA,IAACoF,EAAA,CAAU,SAAA,kBAAA,CAAgB,EAC5B,QACClE,EAAA,CACA,SAAAlB,EAAAA,IAACqF,EAAA,CACA,eAAgBtB,EAAQ,YACxB,MAAOR,EACP,QAAS,CAAC,CAAE,QAAA+B,KAAc,CACrBvB,EAAQ,gBAAgB,IAAIuB,CAAO,GACtCvB,EAAQ,WAAWuB,CAAO,CAE5B,EACA,eAAgBvB,EAAQ,kBACxB,aAAcA,EAAQ,eAAA,CAAA,CACvB,CACD,CAAA,EACD,QAEC9C,EAAA,CACA,SAAAjB,EAAAA,IAACkB,GAAY,UAAU,OACtB,eAACqE,EAAA,CAAM,GAAG3F,EACT,SAAAI,EAAAA,IAAC,QAAK,UAAU,YAAa,YAAkB,CAAE,EAClD,EACD,CAAA,CACD,EAGAF,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACd,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAA,CAACiE,EAAQ,gBACT/D,EAAAA,IAACwF,EAAA,CAAO,QAAQ,UAAU,QAASd,EAAY,SAAUb,EAAW,SAAA,MAAA,CAEpE,EAED7D,EAAAA,IAACwF,EAAA,CACA,QAAQ,QACR,QAASb,EACT,SAAUd,EACV,UAAU,OACV,SAAA,QAAA,CAAA,CAED,EACD,EACA7D,EAAAA,IAACwF,EAAA,CAAO,QAAS,IAAA,CAAWlB,EAAA,GAAc,SAAUT,EAClD,SAAAA,EACE,cACAE,EAAQ,YACP,mBACA,MAAA,CACL,CAAA,CAAA,CACD,CAAA,EACD,CAEF,CC7NsE,MAAA0B,GAA7DhC"}
@@ -1,2 +1,2 @@
1
- import{j as t,d,t as l}from"./vendor-tanstack-BcZfOOfy.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-m48E4KcG.js";import"./automation-schema-BIBsyp0j.js";import{A as B}from"./automation-wizard-EYSfXlQ7.js";import{t as N}from"./event-to-trigger-BEzU9b5I.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BAN776s_.js";import"./vendor-forms-ClCIacbh.js";import"./vendor-date-wwuDAncJ.js";import"./zod-Cuos7J7w.js";import"./form-DLrbC7rV.js";import"./use-stepper-CDucnvzp.js";import"./textarea-B3_TtPRi.js";import"./index-BwCLKpNb.js";import"./radio-group-Co3cN0Kv.js";import"./collapsible-BVQTBG_U.js";import"./tags-input-BLPMVWpZ.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-BycfZHGQ.js.map
1
+ import{j as t,d,t as l}from"./vendor-tanstack-BcZfOOfy.js";import{D as p,B as x,g as b,h as i,bw as f,bF as g,bH as j,bI as h,bJ as v,bK as D,y as m}from"./index-B8vo2Lrg.js";import"./automation-schema-BIBsyp0j.js";import{A as B}from"./automation-wizard-Bmgt6nn8.js";import{t as N}from"./event-to-trigger-BEzU9b5I.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-BTiKGWfR.js";import"./vendor-recharts-BvvJP9Po.js";import"./vendor-forms-ClCIacbh.js";import"./vendor-date-wwuDAncJ.js";import"./zod-Cuos7J7w.js";import"./form-mws4law8.js";import"./use-stepper-DyIb3vlq.js";import"./textarea-DUhh6-kq.js";import"./index-D6ynV6U7.js";import"./radio-group-BUsmwdrt.js";import"./collapsible-B_NJS0uJ.js";import"./tags-input-DHrnkwjQ.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 S(a){const[e,o,s]=a.split("-").map(Number);return new Date(e,o-1,s)}function E(){const{eventId:a,eventDate:e}=v.useSearch(),o=!!(a&&e),{data:s}=l({...D(a??"",e?S(e):new Date),enabled:o});if(!o||!s)return;const{trigger:n,triggerTemplate:r}=N(s);return{trigger:n,triggerTemplate:r}}function q(){const{createAutomation:a,isPending:e}=h(),o=d(),s=E(),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{q as component};
2
+ //# sourceMappingURL=create-MoiIE9Ms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-BycfZHGQ.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":"suBAUO,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-MoiIE9Ms.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":"suBAUO,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"}
@@ -0,0 +1,2 @@
1
+ import{j as e,K as r}from"./vendor-tanstack-BcZfOOfy.js";import{S as h,a as j,b as f,c as p,e as l,ba as P,a_ as S,bb as C,bc as o,cF as v,bd as D,be as N,cG as T}from"./index-B8vo2Lrg.js";import{T as b,a as w,b as c,c as z,d as M,e as d}from"./table-BBNGfPra.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 overflow-hidden",children:e.jsxs(b,{children:[e.jsx(w,{children:n.getHeaderGroups().map(a=>e.jsx(c,{children:a.headers.map(s=>e.jsx(z,{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(d,{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(d,{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),x=()=>{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:x,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-CPkppyg6.js.map