prefect 3.6.16.dev5__py3-none-any.whl → 3.6.16.dev7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/cli/__init__.py +1 -0
  3. prefect/cli/cloud/asset.py +135 -0
  4. prefect/server/ui-v2/assets/artifact-card-BnPKAfkY.js +2 -0
  5. prefect/server/ui-v2/assets/artifact-card-BnPKAfkY.js.map +1 -0
  6. prefect/server/ui-v2/assets/artifact._id-vDOuIuta.js +2 -0
  7. prefect/server/ui-v2/assets/artifact._id-vDOuIuta.js.map +1 -0
  8. prefect/server/ui-v2/assets/automation-wizard-RlOhF90R.js +2 -0
  9. prefect/server/ui-v2/assets/automation-wizard-RlOhF90R.js.map +1 -0
  10. prefect/server/ui-v2/assets/automation._id-CEHa-X0X.js +2 -0
  11. prefect/server/ui-v2/assets/{automation._id-CMiura1b.js.map → automation._id-CEHa-X0X.js.map} +1 -1
  12. prefect/server/ui-v2/assets/{automation_._id.edit-Cbfcwa-K.js → automation_._id.edit-BRWAsELa.js} +2 -2
  13. prefect/server/ui-v2/assets/{automation_._id.edit-Cbfcwa-K.js.map → automation_._id.edit-BRWAsELa.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{automations-header-BxPCOE-0.js → automations-header-Dr6v5dPp.js} +2 -2
  15. prefect/server/ui-v2/assets/{automations-header-BxPCOE-0.js.map → automations-header-Dr6v5dPp.js.map} +1 -1
  16. prefect/server/ui-v2/assets/base-job-template-form-section-C8_R96gO.js +2 -0
  17. prefect/server/ui-v2/assets/base-job-template-form-section-C8_R96gO.js.map +1 -0
  18. prefect/server/ui-v2/assets/block-type-details-tAkUWqs1.js +2 -0
  19. prefect/server/ui-v2/assets/block-type-details-tAkUWqs1.js.map +1 -0
  20. prefect/server/ui-v2/assets/block-type-logo-scnMsyY5.js +2 -0
  21. prefect/server/ui-v2/assets/{block-type-logo-DuvU7goV.js.map → block-type-logo-scnMsyY5.js.map} +1 -1
  22. prefect/server/ui-v2/assets/block._id-BY42cyjR.js +2 -0
  23. prefect/server/ui-v2/assets/block._id-BY42cyjR.js.map +1 -0
  24. prefect/server/ui-v2/assets/{block_._id.edit-C4SmoQ4y.js → block_._id.edit-n2jwU5yr.js} +2 -2
  25. prefect/server/ui-v2/assets/{block_._id.edit-C4SmoQ4y.js.map → block_._id.edit-n2jwU5yr.js.map} +1 -1
  26. prefect/server/ui-v2/assets/catalog-5_GoCKpb.js +2 -0
  27. prefect/server/ui-v2/assets/catalog-5_GoCKpb.js.map +1 -0
  28. prefect/server/ui-v2/assets/catalog_._slug-sZvt0fDy.js +2 -0
  29. prefect/server/ui-v2/assets/catalog_._slug-sZvt0fDy.js.map +1 -0
  30. prefect/server/ui-v2/assets/{catalog_._slug_.create-CgKL4TS2.js → catalog_._slug_.create-rboQmoyW.js} +2 -2
  31. prefect/server/ui-v2/assets/{catalog_._slug_.create-CgKL4TS2.js.map → catalog_._slug_.create-rboQmoyW.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{collapsible-DZbPzSgr.js → collapsible-Lk7MRvBH.js} +2 -2
  33. prefect/server/ui-v2/assets/{collapsible-DZbPzSgr.js.map → collapsible-Lk7MRvBH.js.map} +1 -1
  34. prefect/server/ui-v2/assets/concurrency-limit._id-D5i9zZJh.js +2 -0
  35. prefect/server/ui-v2/assets/concurrency-limit._id-D5i9zZJh.js.map +1 -0
  36. prefect/server/ui-v2/assets/create-CtsA2QIl.js +2 -0
  37. prefect/server/ui-v2/assets/{create-BrNwbpVu.js.map → create-CtsA2QIl.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{create-DWgkh2HT.js → create-DJPAEZ93.js} +2 -2
  39. prefect/server/ui-v2/assets/create-DJPAEZ93.js.map +1 -0
  40. prefect/server/ui-v2/assets/{data-table-QSHqmTar.js → data-table-bk-0xKWT.js} +2 -2
  41. prefect/server/ui-v2/assets/{data-table-QSHqmTar.js.map → data-table-bk-0xKWT.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{delete-confirmation-dialog-dLycVNo4.js → delete-confirmation-dialog-BZg9EOfN.js} +2 -2
  43. prefect/server/ui-v2/assets/{delete-confirmation-dialog-dLycVNo4.js.map → delete-confirmation-dialog-BZg9EOfN.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{deployment-action-header-CzvBTL6H.js → deployment-action-header-DwuMPgVg.js} +2 -2
  45. prefect/server/ui-v2/assets/{deployment-action-header-CzvBTL6H.js.map → deployment-action-header-DwuMPgVg.js.map} +1 -1
  46. prefect/server/ui-v2/assets/deployment-form-BpKkzEf2.js +3 -0
  47. prefect/server/ui-v2/assets/deployment-form-BpKkzEf2.js.map +1 -0
  48. prefect/server/ui-v2/assets/{deployment-links-CGjJpxJA.js → deployment-links-B67P-6Ph.js} +2 -2
  49. prefect/server/ui-v2/assets/{deployment-links-CGjJpxJA.js.map → deployment-links-B67P-6Ph.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{deployment._id-DXrb6frJ.js → deployment._id-BVOBfMVf.js} +2 -2
  51. prefect/server/ui-v2/assets/deployment._id-BVOBfMVf.js.map +1 -0
  52. prefect/server/ui-v2/assets/deployment._id-KOMC9fpE.js +2 -0
  53. prefect/server/ui-v2/assets/deployment._id-KOMC9fpE.js.map +1 -0
  54. prefect/server/ui-v2/assets/deployment_._id.duplicate-BPk2SchT.js +2 -0
  55. prefect/server/ui-v2/assets/deployment_._id.duplicate-BPk2SchT.js.map +1 -0
  56. prefect/server/ui-v2/assets/deployment_._id.edit-Dv0M_huv.js +2 -0
  57. prefect/server/ui-v2/assets/deployment_._id.edit-Dv0M_huv.js.map +1 -0
  58. prefect/server/ui-v2/assets/deployment_._id.run-DFVA4Xhx.js +2 -0
  59. prefect/server/ui-v2/assets/{deployment_._id.run-CnacOmhY.js.map → deployment_._id.run-DFVA4Xhx.js.map} +1 -1
  60. prefect/server/ui-v2/assets/{dropdown-menu-B9LKPlz7.js → dropdown-menu-fRiq5bS-.js} +2 -2
  61. prefect/server/ui-v2/assets/{dropdown-menu-B9LKPlz7.js.map → dropdown-menu-fRiq5bS-.js.map} +1 -1
  62. prefect/server/ui-v2/assets/{event-resource-display-B42RIaiX.js → event-resource-display-C1ZAey-o.js} +2 -2
  63. prefect/server/ui-v2/assets/{event-resource-display-B42RIaiX.js.map → event-resource-display-C1ZAey-o.js.map} +1 -1
  64. prefect/server/ui-v2/assets/event._eventDate._eventId-CcbtP9Ag.js +2 -0
  65. prefect/server/ui-v2/assets/{event._eventDate._eventId-CKTuT_8S.js.map → event._eventDate._eventId-CcbtP9Ag.js.map} +1 -1
  66. prefect/server/ui-v2/assets/flow-run-graph-CycKStSg.js +2 -0
  67. prefect/server/ui-v2/assets/flow-run-graph-CycKStSg.js.map +1 -0
  68. prefect/server/ui-v2/assets/{flow-run._id-BKv9Meqc.js → flow-run._id-Dn9R_Tjy.js} +2 -2
  69. prefect/server/ui-v2/assets/flow-run._id-Dn9R_Tjy.js.map +1 -0
  70. prefect/server/ui-v2/assets/{flow-run._id-ZTkjj6bM.js → flow-run._id-Dwx7ojcj.js} +2 -2
  71. prefect/server/ui-v2/assets/flow-run._id-Dwx7ojcj.js.map +1 -0
  72. prefect/server/ui-v2/assets/flow-run._id-YzRd5jrC.js +4 -0
  73. prefect/server/ui-v2/assets/flow-run._id-YzRd5jrC.js.map +1 -0
  74. prefect/server/ui-v2/assets/flow-runs-pagination-DMLZFM1m.js +2 -0
  75. prefect/server/ui-v2/assets/flow-runs-pagination-DMLZFM1m.js.map +1 -0
  76. prefect/server/ui-v2/assets/flow._id-V6-Qhkwk.js +2 -0
  77. prefect/server/ui-v2/assets/flow._id-V6-Qhkwk.js.map +1 -0
  78. prefect/server/ui-v2/assets/{form-DOdmIC3A.js → form-Cl5Hk9bq.js} +2 -2
  79. prefect/server/ui-v2/assets/{form-DOdmIC3A.js.map → form-Cl5Hk9bq.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{header-DcIuN5UN.js → header-BuI436ik.js} +2 -2
  81. prefect/server/ui-v2/assets/{header-DcIuN5UN.js.map → header-BuI436ik.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{header-CnBwASd-.js → header-DcAQCxQl.js} +2 -2
  83. prefect/server/ui-v2/assets/{header-CnBwASd-.js.map → header-DcAQCxQl.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{header-DxE-NzAK.js → header-qlcK4NLD.js} +2 -2
  85. prefect/server/ui-v2/assets/{header-DxE-NzAK.js.map → header-qlcK4NLD.js.map} +1 -1
  86. prefect/server/ui-v2/assets/index--Z69UYXV.js +2 -0
  87. prefect/server/ui-v2/assets/index--Z69UYXV.js.map +1 -0
  88. prefect/server/ui-v2/assets/{index-D0R9_LIL.js → index-BO4Qqsm8.js} +2 -2
  89. prefect/server/ui-v2/assets/index-BO4Qqsm8.js.map +1 -0
  90. prefect/server/ui-v2/assets/index-Bg45XS_V.js +2 -0
  91. prefect/server/ui-v2/assets/index-Bg45XS_V.js.map +1 -0
  92. prefect/server/ui-v2/assets/{index-BIBIJufF.js → index-BleYpDoN.js} +2 -2
  93. prefect/server/ui-v2/assets/index-BleYpDoN.js.map +1 -0
  94. prefect/server/ui-v2/assets/{index-DyOAqIOp.js → index-C63VUjOh.js} +2 -2
  95. prefect/server/ui-v2/assets/{index-DyOAqIOp.js.map → index-C63VUjOh.js.map} +1 -1
  96. prefect/server/ui-v2/assets/{index-DfKXdmko.js → index-C6LgWyJb.js} +2 -2
  97. prefect/server/ui-v2/assets/index-C6LgWyJb.js.map +1 -0
  98. prefect/server/ui-v2/assets/index-CE-bVgqj.js +2 -0
  99. prefect/server/ui-v2/assets/{index-DlAHvqFx.js.map → index-CE-bVgqj.js.map} +1 -1
  100. prefect/server/ui-v2/assets/{index-V_xTKaEb.js → index-CPpeVt8m.js} +13 -13
  101. prefect/server/ui-v2/assets/index-CPpeVt8m.js.map +1 -0
  102. prefect/server/ui-v2/assets/index-CYaUe0Ym.js +2 -0
  103. prefect/server/ui-v2/assets/index-CYaUe0Ym.js.map +1 -0
  104. prefect/server/ui-v2/assets/{index-C5RMFRyZ.js → index-Clbms0kg.js} +2 -2
  105. prefect/server/ui-v2/assets/index-Clbms0kg.js.map +1 -0
  106. prefect/server/ui-v2/assets/index-D13YFoYA.js +2 -0
  107. prefect/server/ui-v2/assets/index-D13YFoYA.js.map +1 -0
  108. prefect/server/ui-v2/assets/{index-Cx1qEoCK.js → index-D73a_nGu.js} +2 -2
  109. prefect/server/ui-v2/assets/{index-Cx1qEoCK.js.map → index-D73a_nGu.js.map} +1 -1
  110. prefect/server/ui-v2/assets/index-DJXBzX1E.css +1 -0
  111. prefect/server/ui-v2/assets/{index-BO60ehN6.js → index-DPPPaOr_.js} +2 -2
  112. prefect/server/ui-v2/assets/index-DPPPaOr_.js.map +1 -0
  113. prefect/server/ui-v2/assets/{index-DP8W-xJo.js → index-DU9ShbqW.js} +2 -2
  114. prefect/server/ui-v2/assets/index-DU9ShbqW.js.map +1 -0
  115. prefect/server/ui-v2/assets/index-DdR1lzZk.js +2 -0
  116. prefect/server/ui-v2/assets/index-DdR1lzZk.js.map +1 -0
  117. prefect/server/ui-v2/assets/{index-B9ttjsyu.js → index-ELo08q04.js} +2 -2
  118. prefect/server/ui-v2/assets/{index-B9ttjsyu.js.map → index-ELo08q04.js.map} +1 -1
  119. prefect/server/ui-v2/assets/{index-BTL1xHS9.js → index-cp6PTdHp.js} +2 -2
  120. prefect/server/ui-v2/assets/{index-BTL1xHS9.js.map → index-cp6PTdHp.js.map} +1 -1
  121. prefect/server/ui-v2/assets/{index-D6G96ToY.js → index-kM_g8J0u.js} +2 -2
  122. prefect/server/ui-v2/assets/{index-D6G96ToY.js.map → index-kM_g8J0u.js.map} +1 -1
  123. prefect/server/ui-v2/assets/{index-q5Y3hlDT.js → index-mYcm9Rkr.js} +2 -2
  124. prefect/server/ui-v2/assets/index-mYcm9Rkr.js.map +1 -0
  125. prefect/server/ui-v2/assets/{index-D9cOtoSU.js → index-yavn_NBp.js} +2 -2
  126. prefect/server/ui-v2/assets/index-yavn_NBp.js.map +1 -0
  127. prefect/server/ui-v2/assets/{json-input-YKJMJCcT.js → json-input-iUzf6BvZ.js} +2 -2
  128. prefect/server/ui-v2/assets/{json-input-YKJMJCcT.js.map → json-input-iUzf6BvZ.js.map} +1 -1
  129. prefect/server/ui-v2/assets/{key-value-RPUUqQ6F.js → key-value-DI27Dv4P.js} +2 -2
  130. prefect/server/ui-v2/assets/{key-value-RPUUqQ6F.js.map → key-value-DI27Dv4P.js.map} +1 -1
  131. prefect/server/ui-v2/assets/key._key-C-nk2nld.js +2 -0
  132. prefect/server/ui-v2/assets/key._key-C-nk2nld.js.map +1 -0
  133. prefect/server/ui-v2/assets/{lazy-markdown-B9vEkJ0h.js → lazy-markdown-D_y73qoD.js} +2 -2
  134. prefect/server/ui-v2/assets/{lazy-markdown-B9vEkJ0h.js.map → lazy-markdown-D_y73qoD.js.map} +1 -1
  135. prefect/server/ui-v2/assets/{login-C3PhSGQJ.js → login-DR_xuMmg.js} +2 -2
  136. prefect/server/ui-v2/assets/{login-C3PhSGQJ.js.map → login-DR_xuMmg.js.map} +1 -1
  137. prefect/server/ui-v2/assets/{markdown-input-Dei7u1qp.js → markdown-input-hzlzpUdj.js} +2 -2
  138. prefect/server/ui-v2/assets/{markdown-input-Dei7u1qp.js.map → markdown-input-hzlzpUdj.js.map} +1 -1
  139. prefect/server/ui-v2/assets/{python-example-snippet-DvulFxgw.js → python-example-snippet-d8bTNJ0J.js} +3 -3
  140. prefect/server/ui-v2/assets/{python-example-snippet-DvulFxgw.js.map → python-example-snippet-d8bTNJ0J.js.map} +1 -1
  141. prefect/server/ui-v2/assets/{python-input-niCawr8m.js → python-input-Bxdnzvx3.js} +2 -2
  142. prefect/server/ui-v2/assets/{python-input-niCawr8m.js.map → python-input-Bxdnzvx3.js.map} +1 -1
  143. prefect/server/ui-v2/assets/{radio-group-D55TQZsk.js → radio-group-0oOEMJCS.js} +2 -2
  144. prefect/server/ui-v2/assets/{radio-group-D55TQZsk.js.map → radio-group-0oOEMJCS.js.map} +1 -1
  145. prefect/server/ui-v2/assets/{route-error-state-Cu4m0LTX.js → route-error-state-BqbnZCc-.js} +2 -2
  146. prefect/server/ui-v2/assets/{route-error-state-Cu4m0LTX.js.map → route-error-state-BqbnZCc-.js.map} +1 -1
  147. prefect/server/ui-v2/assets/{schema-form-BQAcWW5k.js → schema-form-BD-WM4S0.js} +2 -2
  148. prefect/server/ui-v2/assets/{schema-form-BQAcWW5k.js.map → schema-form-BD-WM4S0.js.map} +1 -1
  149. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-Cb4sTJle.js → schema-form-input-string-format-datetime-Dg3zVAp5.js} +4 -4
  150. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-Cb4sTJle.js.map → schema-form-input-string-format-datetime-Dg3zVAp5.js.map} +1 -1
  151. prefect/server/ui-v2/assets/{settings-DV4ewZ_4.js → settings-Dm6yMLix.js} +2 -2
  152. prefect/server/ui-v2/assets/{settings-DV4ewZ_4.js.map → settings-Dm6yMLix.js.map} +1 -1
  153. prefect/server/ui-v2/assets/{sort-filter-DY7vgl7C.js → sort-filter-X6JyRc0-.js} +2 -2
  154. prefect/server/ui-v2/assets/{sort-filter-DY7vgl7C.js.map → sort-filter-X6JyRc0-.js.map} +1 -1
  155. prefect/server/ui-v2/assets/{table-ChOwO4Pk.js → table-Xyel2BEw.js} +2 -2
  156. prefect/server/ui-v2/assets/{table-ChOwO4Pk.js.map → table-Xyel2BEw.js.map} +1 -1
  157. prefect/server/ui-v2/assets/{tags-input-2KSBvO_K.js → tags-input-DqZ8v99z.js} +2 -2
  158. prefect/server/ui-v2/assets/{tags-input-2KSBvO_K.js.map → tags-input-DqZ8v99z.js.map} +1 -1
  159. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CNrP9yPQ.js → task-run-concurrency-limits-reset-dialog-5xFWeoYy.js} +2 -2
  160. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CNrP9yPQ.js.map → task-run-concurrency-limits-reset-dialog-5xFWeoYy.js.map} +1 -1
  161. prefect/server/ui-v2/assets/{task-run._id-cqXH0PMU.js → task-run._id-9DcrUEGz.js} +3 -3
  162. prefect/server/ui-v2/assets/{task-run._id-cqXH0PMU.js.map → task-run._id-9DcrUEGz.js.map} +1 -1
  163. prefect/server/ui-v2/assets/{task-run._id-CQGeAiBh.js → task-run._id-DJkoLl_e.js} +2 -2
  164. prefect/server/ui-v2/assets/task-run._id-DJkoLl_e.js.map +1 -0
  165. prefect/server/ui-v2/assets/task-runs-pagination-B2fSdB1t.js +2 -0
  166. prefect/server/ui-v2/assets/task-runs-pagination-B2fSdB1t.js.map +1 -0
  167. prefect/server/ui-v2/assets/{textarea-9v5uTuxg.js → textarea-DFEOJJdc.js} +2 -2
  168. prefect/server/ui-v2/assets/{textarea-9v5uTuxg.js.map → textarea-DFEOJJdc.js.map} +1 -1
  169. prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js → timezone-select-NViFNNLz.js} +2 -2
  170. prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js.map → timezone-select-NViFNNLz.js.map} +1 -1
  171. prefect/server/ui-v2/assets/{toggle-group-CBJphTE6.js → toggle-group-EMgSOoYH.js} +2 -2
  172. prefect/server/ui-v2/assets/{toggle-group-CBJphTE6.js.map → toggle-group-EMgSOoYH.js.map} +1 -1
  173. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-BHgDXlwg.js +2 -0
  174. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-BHgDXlwg.js.map +1 -0
  175. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BYY1b8yH.js → use-delete-block-document-confirmation-dialog-CxRkBKPg.js} +2 -2
  176. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BYY1b8yH.js.map → use-delete-block-document-confirmation-dialog-CxRkBKPg.js.map} +1 -1
  177. prefect/server/ui-v2/assets/use-flow-runs-selected-rows-Ck8nwx2q.js +2 -0
  178. prefect/server/ui-v2/assets/use-flow-runs-selected-rows-Ck8nwx2q.js.map +1 -0
  179. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BOTU5FPq.js → use-get-artifacts-flow-task-runs-D7Djt53s.js} +2 -2
  180. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BOTU5FPq.js.map → use-get-artifacts-flow-task-runs-D7Djt53s.js.map} +1 -1
  181. prefect/server/ui-v2/assets/{use-quick-run-DzSmbSlu.js → use-quick-run-Cpy0t7dX.js} +2 -2
  182. prefect/server/ui-v2/assets/{use-quick-run-DzSmbSlu.js.map → use-quick-run-Cpy0t7dX.js.map} +1 -1
  183. prefect/server/ui-v2/assets/{use-state-favicon-UFxhmhHr.js → use-state-favicon-CMsL9s6j.js} +2 -2
  184. prefect/server/ui-v2/assets/{use-state-favicon-UFxhmhHr.js.map → use-state-favicon-CMsL9s6j.js.map} +1 -1
  185. prefect/server/ui-v2/assets/use-stepper-CZZEx5js.js +2 -0
  186. prefect/server/ui-v2/assets/use-stepper-CZZEx5js.js.map +1 -0
  187. prefect/server/ui-v2/assets/{utilities-2FfCfMAV.js → utilities-D9BfvLg5.js} +2 -2
  188. prefect/server/ui-v2/assets/{utilities-2FfCfMAV.js.map → utilities-D9BfvLg5.js.map} +1 -1
  189. prefect/server/ui-v2/assets/work-pool-filter-dsJ6xeK6.js +2 -0
  190. prefect/server/ui-v2/assets/work-pool-filter-dsJ6xeK6.js.map +1 -0
  191. prefect/server/ui-v2/assets/{work-pool-queue-toggle-zSWhEFap.js → work-pool-queue-toggle-f_-cTWxB.js} +2 -2
  192. prefect/server/ui-v2/assets/{work-pool-queue-toggle-zSWhEFap.js.map → work-pool-queue-toggle-f_-cTWxB.js.map} +1 -1
  193. prefect/server/ui-v2/assets/{work-pool._workPoolName-BwIVfCIe.js → work-pool._workPoolName-zBqgkYLT.js} +2 -2
  194. prefect/server/ui-v2/assets/{work-pool._workPoolName-BwIVfCIe.js.map → work-pool._workPoolName-zBqgkYLT.js.map} +1 -1
  195. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-j7cjgoJp.js → work-pool_._workPoolName.edit-B-8_CnfA.js} +2 -2
  196. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-j7cjgoJp.js.map → work-pool_._workPoolName.edit-B-8_CnfA.js.map} +1 -1
  197. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlFjSdoB.js → work-pool_._workPoolName.queue._workQueueName-DzrY1tMq.js} +2 -2
  198. prefect/server/ui-v2/assets/work-pool_._workPoolName.queue._workQueueName-DzrY1tMq.js.map +1 -0
  199. prefect/server/ui-v2/assets/{work-queue-icon-text-vWlRNW-b.js → work-queue-icon-text-BqqQ413o.js} +2 -2
  200. prefect/server/ui-v2/assets/{work-queue-icon-text-vWlRNW-b.js.map → work-queue-icon-text-BqqQ413o.js.map} +1 -1
  201. prefect/server/ui-v2/index.html +2 -2
  202. prefect/task_engine.py +26 -12
  203. prefect/workers/base.py +18 -1
  204. {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/METADATA +1 -1
  205. {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/RECORD +208 -207
  206. prefect/server/ui-v2/assets/artifact-card-DQfjRA2u.js +0 -2
  207. prefect/server/ui-v2/assets/artifact-card-DQfjRA2u.js.map +0 -1
  208. prefect/server/ui-v2/assets/artifact._id-BBhuX3px.js +0 -2
  209. prefect/server/ui-v2/assets/artifact._id-BBhuX3px.js.map +0 -1
  210. prefect/server/ui-v2/assets/automation-wizard-DeT-tz5i.js +0 -2
  211. prefect/server/ui-v2/assets/automation-wizard-DeT-tz5i.js.map +0 -1
  212. prefect/server/ui-v2/assets/automation._id-CMiura1b.js +0 -2
  213. prefect/server/ui-v2/assets/base-job-template-form-section-MeO0M71Y.js +0 -2
  214. prefect/server/ui-v2/assets/base-job-template-form-section-MeO0M71Y.js.map +0 -1
  215. prefect/server/ui-v2/assets/block-type-details-Bcb9qEO8.js +0 -2
  216. prefect/server/ui-v2/assets/block-type-details-Bcb9qEO8.js.map +0 -1
  217. prefect/server/ui-v2/assets/block-type-logo-DuvU7goV.js +0 -2
  218. prefect/server/ui-v2/assets/block._id-DFR6zmOy.js +0 -2
  219. prefect/server/ui-v2/assets/block._id-DFR6zmOy.js.map +0 -1
  220. prefect/server/ui-v2/assets/catalog-CPzaK8QS.js +0 -2
  221. prefect/server/ui-v2/assets/catalog-CPzaK8QS.js.map +0 -1
  222. prefect/server/ui-v2/assets/catalog_._slug-60h4tERz.js +0 -2
  223. prefect/server/ui-v2/assets/catalog_._slug-60h4tERz.js.map +0 -1
  224. prefect/server/ui-v2/assets/concurrency-limit._id-BFfR6_U0.js +0 -2
  225. prefect/server/ui-v2/assets/concurrency-limit._id-BFfR6_U0.js.map +0 -1
  226. prefect/server/ui-v2/assets/create-BrNwbpVu.js +0 -2
  227. prefect/server/ui-v2/assets/create-DWgkh2HT.js.map +0 -1
  228. prefect/server/ui-v2/assets/deployment-form-B33C7F2u.js +0 -3
  229. prefect/server/ui-v2/assets/deployment-form-B33C7F2u.js.map +0 -1
  230. prefect/server/ui-v2/assets/deployment._id-5rPcPD0T.js +0 -2
  231. prefect/server/ui-v2/assets/deployment._id-5rPcPD0T.js.map +0 -1
  232. prefect/server/ui-v2/assets/deployment._id-DXrb6frJ.js.map +0 -1
  233. prefect/server/ui-v2/assets/deployment_._id.duplicate-D7YLydeq.js +0 -2
  234. prefect/server/ui-v2/assets/deployment_._id.duplicate-D7YLydeq.js.map +0 -1
  235. prefect/server/ui-v2/assets/deployment_._id.edit-Daq0J0Ow.js +0 -2
  236. prefect/server/ui-v2/assets/deployment_._id.edit-Daq0J0Ow.js.map +0 -1
  237. prefect/server/ui-v2/assets/deployment_._id.run-CnacOmhY.js +0 -2
  238. prefect/server/ui-v2/assets/event._eventDate._eventId-CKTuT_8S.js +0 -2
  239. prefect/server/ui-v2/assets/flow-run-graph-OrT2Osbu.js +0 -2
  240. prefect/server/ui-v2/assets/flow-run-graph-OrT2Osbu.js.map +0 -1
  241. prefect/server/ui-v2/assets/flow-run._id-BKv9Meqc.js.map +0 -1
  242. prefect/server/ui-v2/assets/flow-run._id-DCYAnq0D.js +0 -4
  243. prefect/server/ui-v2/assets/flow-run._id-DCYAnq0D.js.map +0 -1
  244. prefect/server/ui-v2/assets/flow-run._id-ZTkjj6bM.js.map +0 -1
  245. prefect/server/ui-v2/assets/flow-runs-pagination-CykMKOhv.js +0 -2
  246. prefect/server/ui-v2/assets/flow-runs-pagination-CykMKOhv.js.map +0 -1
  247. prefect/server/ui-v2/assets/flow._id-DhrxqQmD.js +0 -2
  248. prefect/server/ui-v2/assets/flow._id-DhrxqQmD.js.map +0 -1
  249. prefect/server/ui-v2/assets/index-BIBIJufF.js.map +0 -1
  250. prefect/server/ui-v2/assets/index-BO60ehN6.js.map +0 -1
  251. prefect/server/ui-v2/assets/index-BS7fbJ2s.js +0 -2
  252. prefect/server/ui-v2/assets/index-BS7fbJ2s.js.map +0 -1
  253. prefect/server/ui-v2/assets/index-C5RMFRyZ.js.map +0 -1
  254. prefect/server/ui-v2/assets/index-D0R9_LIL.js.map +0 -1
  255. prefect/server/ui-v2/assets/index-D9cOtoSU.js.map +0 -1
  256. prefect/server/ui-v2/assets/index-DEpWUeaO.js +0 -2
  257. prefect/server/ui-v2/assets/index-DEpWUeaO.js.map +0 -1
  258. prefect/server/ui-v2/assets/index-DP8W-xJo.js.map +0 -1
  259. prefect/server/ui-v2/assets/index-DfKXdmko.js.map +0 -1
  260. prefect/server/ui-v2/assets/index-DiVKp6rW.js +0 -2
  261. prefect/server/ui-v2/assets/index-DiVKp6rW.js.map +0 -1
  262. prefect/server/ui-v2/assets/index-DlAHvqFx.js +0 -2
  263. prefect/server/ui-v2/assets/index-VNFzALsC.js +0 -2
  264. prefect/server/ui-v2/assets/index-VNFzALsC.js.map +0 -1
  265. prefect/server/ui-v2/assets/index-V_xTKaEb.js.map +0 -1
  266. prefect/server/ui-v2/assets/index-WIq8QUNT.js +0 -2
  267. prefect/server/ui-v2/assets/index-WIq8QUNT.js.map +0 -1
  268. prefect/server/ui-v2/assets/index-m9O-nIOl.css +0 -1
  269. prefect/server/ui-v2/assets/index-q5Y3hlDT.js.map +0 -1
  270. prefect/server/ui-v2/assets/key._key-CX8FwfwL.js +0 -2
  271. prefect/server/ui-v2/assets/key._key-CX8FwfwL.js.map +0 -1
  272. prefect/server/ui-v2/assets/task-run._id-CQGeAiBh.js.map +0 -1
  273. prefect/server/ui-v2/assets/task-runs-pagination-CYoOghEN.js +0 -2
  274. prefect/server/ui-v2/assets/task-runs-pagination-CYoOghEN.js.map +0 -1
  275. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DZplMJDW.js +0 -2
  276. prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DZplMJDW.js.map +0 -1
  277. prefect/server/ui-v2/assets/use-flow-runs-selected-rows-1YE-VIgM.js +0 -2
  278. prefect/server/ui-v2/assets/use-flow-runs-selected-rows-1YE-VIgM.js.map +0 -1
  279. prefect/server/ui-v2/assets/use-stepper-CnGJHRLP.js +0 -2
  280. prefect/server/ui-v2/assets/use-stepper-CnGJHRLP.js.map +0 -1
  281. prefect/server/ui-v2/assets/work-pool-filter-CGfXNujK.js +0 -2
  282. prefect/server/ui-v2/assets/work-pool-filter-CGfXNujK.js.map +0 -1
  283. prefect/server/ui-v2/assets/work-pool_._workPoolName.queue._workQueueName-BlFjSdoB.js.map +0 -1
  284. {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/WHEEL +0 -0
  285. {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/entry_points.txt +0 -0
  286. {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,2 @@
1
+ import{j as e,c as k,d as D,F as L,r as R,s as A,M as E}from"./vendor-tanstack-BdLtprmr.js";import{C as y,cD as S,$ as _,at as w,B as b,g as f,h as c,bv as m,bE as x,I as v,au as B,aZ as I,bG as V,az as M,aA as P,aB as O,aC as G,d1 as U,b8 as h,d2 as $}from"./index-CPpeVt8m.js";import{f as p,p as j}from"./vendor-date-Cl1Jav-N.js";import{T as z,a as F,b as H}from"./task-run-concurrency-limits-reset-dialog-5xFWeoYy.js";import{o as Q,e as K}from"./vendor-forms-BlFSCfFw.js";import"./vendor-react-HBv6Kpyp.js";import"./vendor-radix-CJc458uP.js";import"./vendor-recharts-CY3PKigC.js";import"./dropdown-menu-fRiq5bS-.js";const Z=({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")},q=({flow:s,flowRun:a,taskRun:t})=>{const{state:r,start_time:n,tags:i,estimated_run_time:l}=Z({flowRun:a,taskRun:t});return e.jsxs(y,{className:Y({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(_,{maxTagsDisplayed:5,tags:i})})]}),e.jsxs("div",{className:"flex gap-2 items-center text-slate-600",children:[r&&e.jsx(w,{type:r.type,name:r.name}),n&&e.jsx(X,{time:n}),e.jsx(W,{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})})]})})},W=({duration:s})=>e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(v,{id:"Clock",className:"size-4"}),e.jsx("p",{className:"text-sm",children:B(s,{maxDecimalPoints:3,units:["s"]})})]}),X=({time:s})=>e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(v,{id:"Calendar",className:"size-4"}),e.jsx("p",{className:"text-sm font-mono",children:p(j(s),"yyyy/MM/dd pp")})]}),Y=S("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"}}}),ee=({data:s})=>e.jsx("ul",{className:"flex flex-col gap-2",children:s.map(a=>e.jsx("li",{children:e.jsx(q,{flow:a.flow,flowRun:a.flowRun,taskRun:a.taskRun})},a.taskRun.id))}),se=({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:ae(s).map(a=>e.jsxs(k.Fragment,{children:[e.jsx("dt",{className:"text-muted-foreground",children:a.label}),e.jsx("dd",{className:I("text-sm font-medium leading-none",a.formatType==="date"&&"font-mono"),children:a.value})]},a.label))})]}),ae=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"}],te=({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(V,{children:s})})]})})}),re=({data:s,onDelete:a,onReset:t})=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(te,{tag:s.tag}),e.jsx(z,{id:s.id,onDelete:a,onReset:t})]}),ne=({data:s,openDialog:a,onCloseDialog:t,onOpenChange:r})=>{const n=D(),i=()=>{t(),n({to:"/concurrency-limits",search:{tab:"task-run"}})};switch(a){case"reset":return e.jsx(H,{data:s,onOpenChange:r,onReset:t});case"delete":return e.jsx(F,{data:s,onOpenChange:r,onDelete:i});default:return null}},g=L("/concurrency-limits/concurrency-limit/$id"),d={"active-task-runs":{tabSearchValue:"active-task-runs",displayValue:"Active Task Runs"}},ie=({children:s})=>{const{tab:a}=g.useSearch(),t=g.useNavigate();return e.jsxs(M,{defaultValue:"Global",value:a,children:[e.jsx(P,{children:e.jsx(O,{value:d["active-task-runs"].tabSearchValue,onClick:()=>{t({to:"/concurrency-limits/concurrency-limit/$id",search:{tab:d["active-task-runs"].tabSearchValue}})},children:d["active-task-runs"].displayValue})}),e.jsx(G,{value:d["active-task-runs"].tabSearchValue,children:s})]})},ce=({id:s})=>{const[a,t]=R.useState(null),{data:r}=A(U(s)),n=()=>t("delete"),i=()=>t("reset"),l=()=>t(null),N=u=>{u||l()},{activeTaskRunsPromise:T,taskRunConcurrencyLimit:o}=r,C=o.active_slots?.length;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(re,{data:o,onDelete:n,onReset:i}),e.jsxs("div",{className:"grid gap-4",style:{gridTemplateColumns:"3fr 1fr"},children:[e.jsx(ie,{children:e.jsx(E,{promise:T,fallback:e.jsx(le,{length:C}),children:u=>e.jsx(ee,{data:u})})}),e.jsx(se,{data:o})]})]}),e.jsx(ne,{data:o,openDialog:a,onOpenChange:N,onCloseDialog:l})]})},le=({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 ye(){const{id:s}=$.useParams();return e.jsx(ce,{id:s})}export{ye as component};
2
+ //# sourceMappingURL=concurrency-limit._id-D5i9zZJh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency-limit._id-D5i9zZJh.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\";\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<p className=\"text-sm\">\n\t\t\t\t{humanizeDuration(duration, { maxDecimalPoints: 3, units: [\"s\"] })}\n\t\t\t</p>\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<p className=\"text-sm font-mono\">\n\t\t\t{format(parseISO(time), \"yyyy/MM/dd pp\")}\n\t\t</p>\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\";\nimport { PrefectLoading } from \"@/components/ui/loading\";\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\tpendingComponent: PrefectLoading,\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","time","parseISO","cva","TaskRunConcurrencyLimitActiveTaskRuns","data","d","TaskRunConcurrencyLimitDetails","getKeyValueList","React","cn","format","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-BdLtprmr.js";import{a as R}from"./zod-B1GLD-Zc.js";import{g as B,o as P,n as D,s as N,r as U,u as q,c as A}from"./vendor-forms-BlFSCfFw.js";import{p as _,C as T,o as F,bz as $,aZ as S,bA as J,bB as z,H as G,bC as H,m as M,n as O,q as v,y as w}from"./index-CPpeVt8m.js";import{b as x,c as f,d as h,e as j,a as b,F as Q}from"./form-Cl5Hk9bq.js";import{u as Z,S as K}from"./use-stepper-CZZEx5js.js";import{T as X}from"./textarea-DFEOJJdc.js";import"./schema-form-input-string-format-datetime-Dg3zVAp5.js";import"./toggle-group-EMgSOoYH.js";import{B as Y}from"./base-job-template-form-section-C8_R96gO.js";import{R as ee,a as te}from"./radio-group-0oOEMJCS.js";import"./vendor-react-HBv6Kpyp.js";import"./vendor-radix-CJc458uP.js";import"./vendor-recharts-CY3PKigC.js";import"./vendor-date-Cl1Jav-N.js";import"./use-debounce-callback-Dk7Ebi48.js";import"./timezone-select-NViFNNLz.js";import"./dropdown-menu-fRiq5bS-.js";import"./schema-form-BD-WM4S0.js";import"./block-type-logo-scnMsyY5.js";function re(){const a=B();return e.jsxs(e.Fragment,{children:[e.jsx(x,{control:a.control,name:"name",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Name"}),e.jsx(j,{children:e.jsx(_,{...o})}),e.jsx(b,{})]})}),e.jsx(x,{control:a.control,name:"description",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Description (Optional)"}),e.jsx(j,{children:e.jsx(X,{...o,value:o.value??"",rows:7,placeholder:"Enter a description for your work pool"})}),e.jsx(b,{})]})}),e.jsx(x,{control:a.control,name:"concurrencyLimit",render:({field:o})=>e.jsxs(f,{children:[e.jsx(h,{children:"Flow Run Concurrency (Optional)"}),e.jsx(j,{children:e.jsx(_,{...o,type:"number",min:0,placeholder:"Unlimited",value:o.value??"",onChange:i=>{const n=i.target.value;o.onChange(n===""?null:Number(n))}})}),e.jsx(b,{})]})})]})}const se=P({name:N().min(1,"Name is required").refine(a=>!a.toLowerCase().startsWith("prefect"),"Work pools starting with 'prefect' are reserved for internal use."),description:N().nullable().optional(),concurrencyLimit:D().min(0).nullable().optional()});function oe(){const a=B(),o=a.watch("baseJobTemplate");return e.jsxs("div",{className:"space-y-6",children:[e.jsx(T,{children:e.jsx(F,{children:e.jsxs($,{children:["The fields below control the default values for the base job template. These values can be overridden by deployments.",e.jsx("br",{}),e.jsx("br",{}),"A work pools job template controls infrastructure configuration for all flow runs in the work pool, and specifies the configuration that can be overridden by deployments."]})})}),e.jsx(Y,{baseJobTemplate:o,onBaseJobTemplateChange:i=>{a.setValue("baseJobTemplate",i)}})]})}const ae=P({baseJobTemplate:U(q()).optional()}),k={sm:"h-4 w-4",md:"h-8 w-8",lg:"h-12 w-12"},ne=({url:a,alt:o,size:i="md",className:n})=>a?e.jsx("img",{src:a,alt:o,className:S("rounded border bg-background/50 backdrop-blur-sm object-contain",k[i],n),onError:t=>{const r=t.target,s=document.createElement("div");s.className=S("rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs",k[i],n),s.textContent=o.charAt(0).toUpperCase(),r.parentNode?.replaceChild(s,r)}}):e.jsx("div",{className:S("rounded border bg-muted flex items-center justify-center text-muted-foreground text-xs",k[i],n),children:o.charAt(0).toUpperCase()});function ie(){const a=B(),{data:o={}}=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||z(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(G,{variant:"secondary",className:"ml-2 text-xs",children:"Beta"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:d})]})]})})]},s))})}),t.error&&e.jsx(b,{children:t.error.message})]})})}const E=["Infrastructure Type","Details","Configuration"],ce=P({type:N().min(1,"Infrastructure type is required"),...se.shape,...ae.shape});function le(){const a=I(),{createWorkPool:o,isPending:i}=H(),{data:n={}}=V(J()),t=Z(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(M,{children:e.jsx(O,{children:"Create Work Pool"})}),e.jsx(F,{children:e.jsx(K,{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(Q,{...r,children:e.jsx("form",{className:"space-y-6",children:L()})})})}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("div",{children:[!t.isStartingStep&&e.jsx(v,{variant:"outline",onClick:d,disabled:i,children:"Back"}),e.jsx(v,{variant:"ghost",onClick: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 Pe=le;export{Pe as component};
2
+ //# sourceMappingURL=create-CtsA2QIl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-BrNwbpVu.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-CtsA2QIl.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 { PrefectLoading } from \"@/components/ui/loading\";\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\tpendingComponent: PrefectLoading,\n});\n"],"names":["InformationStep","form","useFormContext","jsxs","Fragment","jsx","FormField","field","FormItem","FormLabel","FormControl","Input","FormMessage","Textarea","e","value","workPoolInformationSchema","z.object","z.string","z.number","InfrastructureConfigurationStep","baseJobTemplate","Card","CardContent","CardDescription","BaseJobTemplateFormSection","infrastructureConfigurationSchema","z.record","z.unknown","sizeClasses","LogoImage","url","alt","size","className","cn","target","fallback","InfrastructureTypeStep","workersResponse","useSuspenseQuery","buildListWorkPoolTypesQuery","options","useMemo","collection","worker","type","displayName","description","logoUrl","documentationUrl","isBeta","titleCase","firstOption","secondOption","fieldState","RadioGroup","label","RadioGroupItem","Badge","STEPS","workPoolCreateSchema","WorkPoolCreateWizard","router","useRouter","createWorkPool","isPending","useCreateWorkPool","stepper","useStepper","useForm","zodResolver","workerType","useEffect","workerInfo","handleNext","fieldsToValidate","getFieldsForStep","handleSubmit","handleBack","handleCancel","formData","toast","workPoolData","data","error","stepIndex","renderCurrentStep","CardHeader","CardTitle","Stepper","stepNum","Form","Button","SplitComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as t,d,t as l}from"./vendor-tanstack-BdLtprmr.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-V_xTKaEb.js";import"./automation-schema-D1HDjyeB.js";import{A as B}from"./automation-wizard-DeT-tz5i.js";import{t as N}from"./event-to-trigger-BEzU9b5I.js";import"./vendor-react-HBv6Kpyp.js";import"./vendor-radix-CJc458uP.js";import"./vendor-recharts-CY3PKigC.js";import"./vendor-forms-BlFSCfFw.js";import"./vendor-date-Cl1Jav-N.js";import"./zod-B1GLD-Zc.js";import"./form-DOdmIC3A.js";import"./use-stepper-CnGJHRLP.js";import"./textarea-9v5uTuxg.js";import"./index-DyOAqIOp.js";import"./radio-group-D55TQZsk.js";import"./collapsible-DZbPzSgr.js";import"./tags-input-2KSBvO_K.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-DWgkh2HT.js.map
1
+ import{j as t,d,t as l}from"./vendor-tanstack-BdLtprmr.js";import{D as p,B as x,g as b,h as i,bv as f,bE as g,bG as j,bH as h,bI as v,bJ as D,y as m}from"./index-CPpeVt8m.js";import"./automation-schema-D1HDjyeB.js";import{A as B}from"./automation-wizard-RlOhF90R.js";import{t as N}from"./event-to-trigger-BEzU9b5I.js";import"./vendor-react-HBv6Kpyp.js";import"./vendor-radix-CJc458uP.js";import"./vendor-recharts-CY3PKigC.js";import"./vendor-forms-BlFSCfFw.js";import"./vendor-date-Cl1Jav-N.js";import"./zod-B1GLD-Zc.js";import"./form-Cl5Hk9bq.js";import"./use-stepper-CZZEx5js.js";import"./textarea-DFEOJJdc.js";import"./index-C63VUjOh.js";import"./radio-group-0oOEMJCS.js";import"./collapsible-Lk7MRvBH.js";import"./tags-input-DqZ8v99z.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-DJPAEZ93.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-DJPAEZ93.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\";\nimport { PrefectLoading } from \"@/components/ui/loading\";\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\tpendingComponent: PrefectLoading,\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,ECCD,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,CA0BA,SAASK,GAAwB,CAChC,KAAM,CAAEC,QAAAA,EAASC,UAAAA,CAAAA,EAAcC,EAAMC,UAAAA,EAG/BC,EAAcC,GAAQL,GAAWC,GAGjC,CAAEK,KAAMC,CAAAA,EAAUC,EAAS,CAChC,GAAGC,EACFT,GAAW,GACXC,EAAYX,EAAeW,CAAS,EAAI,IAAIH,IAC7C,EACAY,QAASN,CAAAA,CACT,EAED,GAAI,CAACA,GAAe,CAACG,EACpB,OAGD,KAAM,CAAEI,QAAAA,EAASC,gBAAAA,CAAAA,EAAoBC,EAAwBN,CAAK,EAClE,MAAO,CACNI,QAAAA,EACAC,gBAAAA,CAAAA,CAEF,CAEA,SAASE,GAAiB,CACzB,KAAM,CAAEC,iBAAAA,EAAkBC,UAAAA,CAAAA,EAAcC,EAAAA,EAClCC,EAAWC,EAAAA,EACXC,EAAqBrB,EAAAA,EAErBsB,EAAgBC,GAAuC,CAC5D,MAAMC,EAAmC,CACxCC,KAAMF,EAAOE,KACbC,YAAaH,EAAOG,aAAe,GACnCf,QAAS,GACTC,QAASW,EAAOX,QAChBe,QAASJ,EAAOI,OAAAA,EAGjBX,EAAiBQ,EAAgB,CAChCI,UAAWA,IAAM,CAChBC,EAAMC,QAAQ,iCAAiC,EAC1CX,EAAS,CAAEY,GAAI,cAAA,CAAgB,CACrC,EACAC,QAAUC,GAAU,CACnBJ,EAAMI,MAAM,gCAAgCA,EAAMC,OAAO,EAAE,CAC5D,CAAA,CACA,CACF,EAEA,OACCrD,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAC,EAAAA,IAACF,EAAA,EAAuB,QACvBuD,EAAA,CACA,cAAed,EACf,SAAUC,EACV,aAAcL,CAAAA,CAAU,CAAA,EAE1B,CAEF"}
@@ -1,2 +1,2 @@
1
- import{j as e,K as r}from"./vendor-tanstack-BdLtprmr.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-V_xTKaEb.js";import{T as b,a as w,b as c,c as z,d as M,e as d}from"./table-ChOwO4Pk.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-QSHqmTar.js.map
1
+ import{j as e,K as r}from"./vendor-tanstack-BdLtprmr.js";import{S as h,a as j,b as f,c as p,e as l,b9 as P,aZ as S,ba as C,bb as o,cE as v,bc as D,bd as N,cF as T}from"./index-CPpeVt8m.js";import{T as b,a as w,b as c,c as z,d as M,e as d}from"./table-Xyel2BEw.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(E,{table:n}),e.jsx(I,{table:n,onPrefetchPage:i})]})]})}function E({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 I({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-bk-0xKWT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-QSHqmTar.js","sources":["../../src/components/ui/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport {\n\tPagination,\n\tPaginationContent,\n\tPaginationFirstButton,\n\tPaginationItem,\n\tPaginationLastButton,\n\tPaginationNextButton,\n\tPaginationPreviousButton,\n} from \"@/components/ui/pagination\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\nimport { cn } from \"@/utils\";\n\nexport function DataTable<TData>({\n\ttable,\n\tonPrefetchPage,\n}: {\n\ttable: TanstackTable<TData>;\n\tonPrefetchPage?: (page: number) => void;\n}) {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"rounded-md border overflow-hidden\">\n\t\t\t\t<Table>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t\t\t<TableRow key={headerGroup.id}>\n\t\t\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t...(header.column.columnDef.maxSize && {\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${header.column.columnDef.maxSize}px`,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t...(header.column.columnDef.size && {\n\t\t\t\t\t\t\t\t\t\t\t\twidth: `${header.column.columnDef.size}px`,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{table.getRowModel().rows?.length ? (\n\t\t\t\t\t\t\ttable.getRowModel().rows.map((row) => (\n\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t...(cell.column.columnDef.maxSize && {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${cell.column.columnDef.maxSize}px`,\n\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...(cell.column.columnDef.size && {\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: `${cell.column.columnDef.size}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tcolSpan={table.getAllColumns().length}\n\t\t\t\t\t\t\t\t\tclassName=\"h-24 text-center\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-row justify-between items-center\">\n\t\t\t\t<DataTablePageSize table={table} />\n\t\t\t\t<DataTablePagination table={table} onPrefetchPage={onPrefetchPage} />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\ninterface DataTablePageSizeProps<TData> {\n\ttable: TanstackTable<TData>;\n}\n\nfunction DataTablePageSize<TData>({ table }: DataTablePageSizeProps<TData>) {\n\treturn (\n\t\t<div className=\"flex flex-row items-center gap-2 text-xs text-muted-foreground\">\n\t\t\t<span className=\"whitespace-nowrap\">Items per page</span>\n\t\t\t<Select\n\t\t\t\tvalue={table.getState().pagination.pageSize.toString()}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\ttable.setPageSize(Number(value));\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<SelectTrigger aria-label=\"Items per page\">\n\t\t\t\t\t<SelectValue placeholder=\"Theme\" />\n\t\t\t\t</SelectTrigger>\n\t\t\t\t<SelectContent>\n\t\t\t\t\t<SelectItem value=\"5\">5</SelectItem>\n\t\t\t\t\t<SelectItem value=\"10\">10</SelectItem>\n\t\t\t\t\t<SelectItem value=\"25\">25</SelectItem>\n\t\t\t\t\t<SelectItem value=\"50\">50</SelectItem>\n\t\t\t\t</SelectContent>\n\t\t\t</Select>\n\t\t</div>\n\t);\n}\n\ninterface DataTablePaginationProps<TData> {\n\ttable: TanstackTable<TData>;\n\tclassName?: string;\n\tonPrefetchPage?: (page: number) => void;\n}\n\nexport function DataTablePagination<TData>({\n\ttable,\n\tclassName,\n\tonPrefetchPage,\n}: DataTablePaginationProps<TData>) {\n\tconst totalPages = table.getPageCount();\n\tconst currentPage = Math.min(\n\t\tMath.ceil(table.getState().pagination.pageIndex + 1),\n\t\ttotalPages,\n\t);\n\n\tconst handlePrefetchFirstPage = () => {\n\t\tif (currentPage > 1) onPrefetchPage?.(1);\n\t};\n\tconst handlePrefetchPreviousPage = () => {\n\t\tif (currentPage > 1) onPrefetchPage?.(currentPage - 1);\n\t};\n\tconst handlePrefetchNextPage = () => {\n\t\tif (currentPage < totalPages) onPrefetchPage?.(currentPage + 1);\n\t};\n\tconst handlePrefetchLastPage = () => {\n\t\tif (currentPage < totalPages) onPrefetchPage?.(totalPages);\n\t};\n\n\treturn (\n\t\t<Pagination className={cn(\"justify-end\", className)}>\n\t\t\t<PaginationContent>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationFirstButton\n\t\t\t\t\t\tonClick={() => table.firstPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchFirstPage}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t/>\n\t\t\t\t\t<PaginationPreviousButton\n\t\t\t\t\t\tonClick={() => table.previousPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchPreviousPage}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem className=\"text-sm\">\n\t\t\t\t\tPage {currentPage} of {totalPages}\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationNextButton\n\t\t\t\t\t\tonClick={() => table.nextPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchNextPage}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationLastButton\n\t\t\t\t\t\tonClick={() => table.lastPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchLastPage}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t</PaginationContent>\n\t\t</Pagination>\n\t);\n}\n"],"names":["DataTable","table","onPrefetchPage","jsxs","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","row","cell","TableCell","DataTablePageSize","DataTablePagination","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","className","totalPages","currentPage","handlePrefetchFirstPage","handlePrefetchPreviousPage","handlePrefetchNextPage","handlePrefetchLastPage","Pagination","cn","PaginationContent","PaginationItem","PaginationFirstButton","PaginationPreviousButton","PaginationNextButton","PaginationLastButton"],"mappings":"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"}
1
+ {"version":3,"file":"data-table-bk-0xKWT.js","sources":["../../src/components/ui/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport {\n\tPagination,\n\tPaginationContent,\n\tPaginationFirstButton,\n\tPaginationItem,\n\tPaginationLastButton,\n\tPaginationNextButton,\n\tPaginationPreviousButton,\n} from \"@/components/ui/pagination\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\nimport { cn } from \"@/utils\";\n\nexport function DataTable<TData>({\n\ttable,\n\tonPrefetchPage,\n}: {\n\ttable: TanstackTable<TData>;\n\tonPrefetchPage?: (page: number) => void;\n}) {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"rounded-md border overflow-hidden\">\n\t\t\t\t<Table>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t\t\t<TableRow key={headerGroup.id}>\n\t\t\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t...(header.column.columnDef.maxSize && {\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${header.column.columnDef.maxSize}px`,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t...(header.column.columnDef.size && {\n\t\t\t\t\t\t\t\t\t\t\t\twidth: `${header.column.columnDef.size}px`,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{table.getRowModel().rows?.length ? (\n\t\t\t\t\t\t\ttable.getRowModel().rows.map((row) => (\n\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t...(cell.column.columnDef.maxSize && {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${cell.column.columnDef.maxSize}px`,\n\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...(cell.column.columnDef.size && {\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: `${cell.column.columnDef.size}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tcolSpan={table.getAllColumns().length}\n\t\t\t\t\t\t\t\t\tclassName=\"h-24 text-center\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-row justify-between items-center\">\n\t\t\t\t<DataTablePageSize table={table} />\n\t\t\t\t<DataTablePagination table={table} onPrefetchPage={onPrefetchPage} />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\ninterface DataTablePageSizeProps<TData> {\n\ttable: TanstackTable<TData>;\n}\n\nfunction DataTablePageSize<TData>({ table }: DataTablePageSizeProps<TData>) {\n\treturn (\n\t\t<div className=\"flex flex-row items-center gap-2 text-xs text-muted-foreground\">\n\t\t\t<span className=\"whitespace-nowrap\">Items per page</span>\n\t\t\t<Select\n\t\t\t\tvalue={table.getState().pagination.pageSize.toString()}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\ttable.setPageSize(Number(value));\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<SelectTrigger aria-label=\"Items per page\">\n\t\t\t\t\t<SelectValue placeholder=\"Theme\" />\n\t\t\t\t</SelectTrigger>\n\t\t\t\t<SelectContent>\n\t\t\t\t\t<SelectItem value=\"5\">5</SelectItem>\n\t\t\t\t\t<SelectItem value=\"10\">10</SelectItem>\n\t\t\t\t\t<SelectItem value=\"25\">25</SelectItem>\n\t\t\t\t\t<SelectItem value=\"50\">50</SelectItem>\n\t\t\t\t</SelectContent>\n\t\t\t</Select>\n\t\t</div>\n\t);\n}\n\ninterface DataTablePaginationProps<TData> {\n\ttable: TanstackTable<TData>;\n\tclassName?: string;\n\tonPrefetchPage?: (page: number) => void;\n}\n\nexport function DataTablePagination<TData>({\n\ttable,\n\tclassName,\n\tonPrefetchPage,\n}: DataTablePaginationProps<TData>) {\n\tconst totalPages = table.getPageCount();\n\tconst currentPage = Math.min(\n\t\tMath.ceil(table.getState().pagination.pageIndex + 1),\n\t\ttotalPages,\n\t);\n\n\tconst handlePrefetchFirstPage = () => {\n\t\tif (currentPage > 1) onPrefetchPage?.(1);\n\t};\n\tconst handlePrefetchPreviousPage = () => {\n\t\tif (currentPage > 1) onPrefetchPage?.(currentPage - 1);\n\t};\n\tconst handlePrefetchNextPage = () => {\n\t\tif (currentPage < totalPages) onPrefetchPage?.(currentPage + 1);\n\t};\n\tconst handlePrefetchLastPage = () => {\n\t\tif (currentPage < totalPages) onPrefetchPage?.(totalPages);\n\t};\n\n\treturn (\n\t\t<Pagination className={cn(\"justify-end\", className)}>\n\t\t\t<PaginationContent>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationFirstButton\n\t\t\t\t\t\tonClick={() => table.firstPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchFirstPage}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t/>\n\t\t\t\t\t<PaginationPreviousButton\n\t\t\t\t\t\tonClick={() => table.previousPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchPreviousPage}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem className=\"text-sm\">\n\t\t\t\t\tPage {currentPage} of {totalPages}\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationNextButton\n\t\t\t\t\t\tonClick={() => table.nextPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchNextPage}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationLastButton\n\t\t\t\t\t\tonClick={() => table.lastPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchLastPage}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t</PaginationContent>\n\t\t</Pagination>\n\t);\n}\n"],"names":["DataTable","table","onPrefetchPage","jsxs","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","row","cell","TableCell","DataTablePageSize","DataTablePagination","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","className","totalPages","currentPage","handlePrefetchFirstPage","handlePrefetchPreviousPage","handlePrefetchNextPage","handlePrefetchLastPage","Pagination","cn","PaginationContent","PaginationItem","PaginationFirstButton","PaginationPreviousButton","PaginationNextButton","PaginationLastButton"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as x,j as e}from"./vendor-tanstack-BdLtprmr.js";import{cj as g,ck as u,cl as C,cm as m,cn as A,i as f,p as v,co as b,cp as k,cq as y}from"./index-V_xTKaEb.js";const I=({isOpen:r,title:i,description:o,onConfirm:c,onClose:d,confirmText:l,isLoading:a=!1,loadingText:h="Deleting..."})=>{const[t,s]=x.useState(""),n=()=>{s(""),d()},p=()=>{c(),s("")},j=a||!!l&&t!==l;return e.jsx(g,{open:r,onOpenChange:n,children:e.jsxs(u,{children:[e.jsxs(C,{children:[e.jsx(m,{children:i}),e.jsx(A,{children:o})]}),l&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"confirm-text",children:["Type ",e.jsx("strong",{children:l})," to confirm:"]}),e.jsx(v,{id:"confirm-text",value:t,onChange:D=>s(D.target.value),placeholder:l})]}),e.jsxs(b,{children:[e.jsx(k,{onClick:n,children:"Cancel"}),e.jsx(y,{variant:"destructive",onClick:p,disabled:j,children:a?h:"Delete"})]})]})})};export{I as D};
2
- //# sourceMappingURL=delete-confirmation-dialog-dLycVNo4.js.map
1
+ import{r as x,j as e}from"./vendor-tanstack-BdLtprmr.js";import{ci as g,cj as u,ck as C,cl as m,cm as A,i as f,p as v,cn as b,co as k,cp as y}from"./index-CPpeVt8m.js";const I=({isOpen:i,title:r,description:o,onConfirm:c,onClose:d,confirmText:l,isLoading:a=!1,loadingText:h="Deleting..."})=>{const[t,s]=x.useState(""),n=()=>{s(""),d()},p=()=>{c(),s("")},j=a||!!l&&t!==l;return e.jsx(g,{open:i,onOpenChange:n,children:e.jsxs(u,{children:[e.jsxs(C,{children:[e.jsx(m,{children:r}),e.jsx(A,{children:o})]}),l&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"confirm-text",children:["Type ",e.jsx("strong",{children:l})," to confirm:"]}),e.jsx(v,{id:"confirm-text",value:t,onChange:D=>s(D.target.value),placeholder:l})]}),e.jsxs(b,{children:[e.jsx(k,{onClick:n,children:"Cancel"}),e.jsx(y,{variant:"destructive",onClick:p,disabled:j,children:a?h:"Delete"})]})]})})};export{I as D};
2
+ //# sourceMappingURL=delete-confirmation-dialog-BZg9EOfN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-confirmation-dialog-dLycVNo4.js","sources":["../../src/components/ui/delete-confirmation-dialog/delete-confirmation-dialog.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\n\nexport type DeleteConfirmationDialogProps = {\n\tisOpen: boolean;\n\ttitle: string;\n\tdescription: string;\n\tonConfirm: () => void;\n\tonClose: () => void;\n\tconfirmText?: string;\n\tisLoading?: boolean;\n\tloadingText?: string;\n};\n\nexport const DeleteConfirmationDialog = ({\n\tisOpen,\n\ttitle,\n\tdescription,\n\tonConfirm,\n\tonClose,\n\tconfirmText,\n\tisLoading = false,\n\tloadingText = \"Deleting...\",\n}: DeleteConfirmationDialogProps) => {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\tconst handleClose = () => {\n\t\tsetInputValue(\"\");\n\t\tonClose();\n\t};\n\n\tconst handleConfirm = () => {\n\t\tonConfirm();\n\t\tsetInputValue(\"\");\n\t};\n\n\tconst isConfirmDisabled =\n\t\tisLoading || (!!confirmText && inputValue !== confirmText);\n\n\treturn (\n\t\t<AlertDialog open={isOpen} onOpenChange={handleClose}>\n\t\t\t<AlertDialogContent>\n\t\t\t\t<AlertDialogHeader>\n\t\t\t\t\t<AlertDialogTitle>{title}</AlertDialogTitle>\n\t\t\t\t\t<AlertDialogDescription>{description}</AlertDialogDescription>\n\t\t\t\t</AlertDialogHeader>\n\t\t\t\t{confirmText && (\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"confirm-text\">\n\t\t\t\t\t\t\tType <strong>{confirmText}</strong> to confirm:\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"confirm-text\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tonChange={(e) => setInputValue(e.target.value)}\n\t\t\t\t\t\t\tplaceholder={confirmText}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<AlertDialogFooter>\n\t\t\t\t\t<AlertDialogCancel onClick={handleClose}>Cancel</AlertDialogCancel>\n\t\t\t\t\t<AlertDialogAction\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\tdisabled={isConfirmDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isLoading ? loadingText : \"Delete\"}\n\t\t\t\t\t</AlertDialogAction>\n\t\t\t\t</AlertDialogFooter>\n\t\t\t</AlertDialogContent>\n\t\t</AlertDialog>\n\t);\n};\n"],"names":["DeleteConfirmationDialog","isOpen","title","description","onConfirm","onClose","confirmText","isLoading","loadingText","inputValue","setInputValue","useState","handleClose","handleConfirm","isConfirmDisabled","AlertDialog","AlertDialogContent","jsxs","AlertDialogHeader","jsx","AlertDialogTitle","AlertDialogDescription","Label","Input","e","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"wKAyBO,MAAMA,EAA2B,CAAC,CACxC,OAAAC,EACA,MAAAC,EACA,YAAAC,EACA,UAAAC,EACA,QAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,YAAAC,EAAc,aACf,IAAqC,CACpC,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAE,EAEzCC,EAAc,IAAM,CACzBF,EAAc,EAAE,EAChBL,EAAA,CACD,EAEMQ,EAAgB,IAAM,CAC3BT,EAAA,EACAM,EAAc,EAAE,CACjB,EAEMI,EACLP,GAAc,CAAC,CAACD,GAAeG,IAAeH,EAE/C,aACES,EAAA,CAAY,KAAMd,EAAQ,aAAcW,EACxC,gBAACI,EAAA,CACA,SAAA,CAAAC,OAACC,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,GAAkB,SAAAlB,CAAA,CAAM,EACzBiB,EAAAA,IAACE,GAAwB,SAAAlB,CAAA,CAAY,CAAA,EACtC,EACCG,GACAW,EAAAA,KAAC,MAAA,CAAI,UAAU,YACd,SAAA,CAAAA,EAAAA,KAACK,EAAA,CAAM,QAAQ,eAAe,SAAA,CAAA,QACxBH,EAAAA,IAAC,UAAQ,SAAAb,CAAA,CAAY,EAAS,cAAA,EACpC,EACAa,EAAAA,IAACI,EAAA,CACA,GAAG,eACH,MAAOd,EACP,SAAWe,GAAMd,EAAcc,EAAE,OAAO,KAAK,EAC7C,YAAalB,CAAA,CAAA,CACd,EACD,SAEAmB,EAAA,CACA,SAAA,CAAAN,EAAAA,IAACO,EAAA,CAAkB,QAASd,EAAa,SAAA,SAAM,EAC/CO,EAAAA,IAACQ,EAAA,CACA,QAAQ,cACR,QAASd,EACT,SAAUC,EAET,WAAYN,EAAc,QAAA,CAAA,CAC5B,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,CAEF"}
1
+ {"version":3,"file":"delete-confirmation-dialog-BZg9EOfN.js","sources":["../../src/components/ui/delete-confirmation-dialog/delete-confirmation-dialog.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\n\nexport type DeleteConfirmationDialogProps = {\n\tisOpen: boolean;\n\ttitle: string;\n\tdescription: string;\n\tonConfirm: () => void;\n\tonClose: () => void;\n\tconfirmText?: string;\n\tisLoading?: boolean;\n\tloadingText?: string;\n};\n\nexport const DeleteConfirmationDialog = ({\n\tisOpen,\n\ttitle,\n\tdescription,\n\tonConfirm,\n\tonClose,\n\tconfirmText,\n\tisLoading = false,\n\tloadingText = \"Deleting...\",\n}: DeleteConfirmationDialogProps) => {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\tconst handleClose = () => {\n\t\tsetInputValue(\"\");\n\t\tonClose();\n\t};\n\n\tconst handleConfirm = () => {\n\t\tonConfirm();\n\t\tsetInputValue(\"\");\n\t};\n\n\tconst isConfirmDisabled =\n\t\tisLoading || (!!confirmText && inputValue !== confirmText);\n\n\treturn (\n\t\t<AlertDialog open={isOpen} onOpenChange={handleClose}>\n\t\t\t<AlertDialogContent>\n\t\t\t\t<AlertDialogHeader>\n\t\t\t\t\t<AlertDialogTitle>{title}</AlertDialogTitle>\n\t\t\t\t\t<AlertDialogDescription>{description}</AlertDialogDescription>\n\t\t\t\t</AlertDialogHeader>\n\t\t\t\t{confirmText && (\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"confirm-text\">\n\t\t\t\t\t\t\tType <strong>{confirmText}</strong> to confirm:\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"confirm-text\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tonChange={(e) => setInputValue(e.target.value)}\n\t\t\t\t\t\t\tplaceholder={confirmText}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<AlertDialogFooter>\n\t\t\t\t\t<AlertDialogCancel onClick={handleClose}>Cancel</AlertDialogCancel>\n\t\t\t\t\t<AlertDialogAction\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\tdisabled={isConfirmDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isLoading ? loadingText : \"Delete\"}\n\t\t\t\t\t</AlertDialogAction>\n\t\t\t\t</AlertDialogFooter>\n\t\t\t</AlertDialogContent>\n\t\t</AlertDialog>\n\t);\n};\n"],"names":["DeleteConfirmationDialog","isOpen","title","description","onConfirm","onClose","confirmText","isLoading","loadingText","inputValue","setInputValue","useState","handleClose","handleConfirm","isConfirmDisabled","AlertDialog","AlertDialogContent","jsxs","AlertDialogHeader","jsx","AlertDialogTitle","AlertDialogDescription","Label","Input","e","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"wKAyBO,MAAMA,EAA2B,CAAC,CACxC,OAAAC,EACA,MAAAC,EACA,YAAAC,EACA,UAAAC,EACA,QAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,YAAAC,EAAc,aACf,IAAqC,CACpC,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAE,EAEzCC,EAAc,IAAM,CACzBF,EAAc,EAAE,EAChBL,EAAA,CACD,EAEMQ,EAAgB,IAAM,CAC3BT,EAAA,EACAM,EAAc,EAAE,CACjB,EAEMI,EACLP,GAAc,CAAC,CAACD,GAAeG,IAAeH,EAE/C,aACES,EAAA,CAAY,KAAMd,EAAQ,aAAcW,EACxC,gBAACI,EAAA,CACA,SAAA,CAAAC,OAACC,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,GAAkB,SAAAlB,CAAA,CAAM,EACzBiB,EAAAA,IAACE,GAAwB,SAAAlB,CAAA,CAAY,CAAA,EACtC,EACCG,GACAW,EAAAA,KAAC,MAAA,CAAI,UAAU,YACd,SAAA,CAAAA,EAAAA,KAACK,EAAA,CAAM,QAAQ,eAAe,SAAA,CAAA,QACxBH,EAAAA,IAAC,UAAQ,SAAAb,CAAA,CAAY,EAAS,cAAA,EACpC,EACAa,EAAAA,IAACI,EAAA,CACA,GAAG,eACH,MAAOd,EACP,SAAWe,GAAMd,EAAcc,EAAE,OAAO,KAAK,EAC7C,YAAalB,CAAA,CAAA,CACd,EACD,SAEAmB,EAAA,CACA,SAAA,CAAAN,EAAAA,IAACO,EAAA,CAAkB,QAASd,EAAa,SAAA,SAAM,EAC/CO,EAAAA,IAACQ,EAAA,CACA,QAAQ,cACR,QAASd,EACT,SAAUC,EAET,WAAYN,EAAc,QAAA,CAAA,CAC5B,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,CAEF"}
@@ -1,2 +1,2 @@
1
- import{j as e,r as o,s as p}from"./vendor-tanstack-BdLtprmr.js";import{dL as f,ag as S,ah as B,ai as L,aj as g,al as k,ak as y,am as w,an as u,B as v,g as D,h as d,bw as x,bF as b,bH as W}from"./index-V_xTKaEb.js";const E=({presetOptions:r=[],selected:s,onSelect:l,workPoolName:t})=>e.jsx(o.Suspense,{children:e.jsx(I,{presetOptions:r,selected:s,onSelect:l,workPoolName:t})}),I=({presetOptions:r=[],selected:s,onSelect:l,workPoolName:t})=>{const[c,m]=o.useState(""),{data:i}=p(f({work_pool_name:t})),n=o.useDeferredValue(c),h=o.useMemo(()=>i.filter(a=>a.name.toLowerCase().includes(n.toLowerCase())),[i,n]),j=o.useMemo(()=>r.filter(a=>a.label.toLowerCase().includes(n.toLowerCase())),[n,r]);return e.jsxs(S,{children:[e.jsx(B,{selected:!!s,"aria-label":"Select a work queue",children:s}),e.jsxs(L,{children:[e.jsx(g,{value:c,onValueChange:m,placeholder:"Search for a work queue..."}),e.jsx(k,{children:"No work queue found"}),e.jsx(y,{children:e.jsxs(w,{children:[j.map(a=>e.jsx(u,{selected:s===a.value,onSelect:()=>{l(a.value),m("")},value:String(a.label),children:a.label},a.label)),h.map(a=>e.jsx(u,{selected:s===a.name,onSelect:C=>{l(C),m("")},value:a.name,children:a.name},a.id))]})})]})]})},P=({deployment:r,action:s})=>e.jsx(v,{children:e.jsxs(D,{children:[e.jsx(d,{children:e.jsx(x,{to:"/deployments",className:"text-xl font-semibold",children:"Deployments"})}),e.jsx(b,{}),e.jsx(d,{children:e.jsx(x,{to:"/deployments/deployment/$id",params:{id:r.id},className:"text-xl font-semibold",children:r.name})}),e.jsx(b,{}),e.jsx(d,{className:"text-xl font-semibold",children:e.jsx(W,{children:s})})]})});export{P as D,E as W};
2
- //# sourceMappingURL=deployment-action-header-CzvBTL6H.js.map
1
+ import{j as e,r as o,s as p}from"./vendor-tanstack-BdLtprmr.js";import{dK as f,ag as S,ah as B,ai as g,aj as k,al as y,ak as L,am as v,an as u,B as w,g as D,h as d,bv as x,bE as b,bG as W}from"./index-CPpeVt8m.js";const q=({presetOptions:r=[],selected:s,onSelect:l,workPoolName:t})=>e.jsx(o.Suspense,{children:e.jsx(E,{presetOptions:r,selected:s,onSelect:l,workPoolName:t})}),E=({presetOptions:r=[],selected:s,onSelect:l,workPoolName:t})=>{const[c,m]=o.useState(""),{data:i}=p(f({work_pool_name:t})),n=o.useDeferredValue(c),h=o.useMemo(()=>i.filter(a=>a.name.toLowerCase().includes(n.toLowerCase())),[i,n]),j=o.useMemo(()=>r.filter(a=>a.label.toLowerCase().includes(n.toLowerCase())),[n,r]);return e.jsxs(S,{children:[e.jsx(B,{selected:!!s,"aria-label":"Select a work queue",children:s}),e.jsxs(g,{children:[e.jsx(k,{value:c,onValueChange:m,placeholder:"Search for a work queue..."}),e.jsx(y,{children:"No work queue found"}),e.jsx(L,{children:e.jsxs(v,{children:[j.map(a=>e.jsx(u,{selected:s===a.value,onSelect:()=>{l(a.value),m("")},value:String(a.label),children:a.label},a.label)),h.map(a=>e.jsx(u,{selected:s===a.name,onSelect:C=>{l(C),m("")},value:a.name,children:a.name},a.id))]})})]})]})},P=({deployment:r,action:s})=>e.jsx(w,{children:e.jsxs(D,{children:[e.jsx(d,{children:e.jsx(x,{to:"/deployments",className:"text-xl font-semibold",children:"Deployments"})}),e.jsx(b,{}),e.jsx(d,{children:e.jsx(x,{to:"/deployments/deployment/$id",params:{id:r.id},className:"text-xl font-semibold",children:r.name})}),e.jsx(b,{}),e.jsx(d,{className:"text-xl font-semibold",children:e.jsx(W,{children:s})})]})});export{P as D,q as W};
2
+ //# sourceMappingURL=deployment-action-header-DwuMPgVg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-action-header-CzvBTL6H.js","sources":["../../src/components/work-pools/work-queue-select/work-queue-select.tsx","../../src/components/deployments/deployment-action-header.tsx"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildFilterWorkPoolWorkQueuesQuery } from \"@/api/work-queues\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype WorkQueueSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n\tworkPoolName: string;\n};\n\nexport const WorkQueueSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n\tworkPoolName,\n}: WorkQueueSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<WorkQueueSelecImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t\tworkPoolName={workPoolName}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst WorkQueueSelecImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n\tworkPoolName,\n}: WorkQueueSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(\n\t\tbuildFilterWorkPoolWorkQueuesQuery({ work_pool_name: workPoolName }),\n\t);\n\n\t// nb: because work queues API does not have filtering _like by name, do client-side filtering\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((workQueue) =>\n\t\t\tworkQueue.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a work queue\"\n\t\t\t>\n\t\t\t\t{selected}\n\t\t\t</ComboboxTrigger>\n\t\t\t<ComboboxContent>\n\t\t\t\t<ComboboxCommandInput\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonValueChange={setSearch}\n\t\t\t\t\tplaceholder=\"Search for a work queue...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No work queue found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.value);\n\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((workQueue) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workQueue.id}\n\t\t\t\t\t\t\t\tselected={selected === workQueue.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(value);\n\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={workQueue.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{workQueue.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n","import type { Deployment } from \"@/api/deployments\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype DeploymentActionHeaderProps = {\n\tdeployment: Deployment;\n\taction: \"Edit\" | \"Duplicate\" | \"Run\";\n};\n\nexport const DeploymentActionHeader = ({\n\tdeployment,\n\taction,\n}: DeploymentActionHeaderProps) => {\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=\"/deployments\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tDeployments\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=\"/deployments/deployment/$id\"\n\t\t\t\t\t\tparams={{ id: deployment.id }}\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{deployment.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>{action}</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n"],"names":["WorkQueueSelect","presetOptions","selected","onSelect","workPoolName","Suspense","jsx","WorkQueueSelecImplementation","search","setSearch","useState","data","useSuspenseQuery","buildFilterWorkPoolWorkQueuesQuery","deferredSearch","useDeferredValue","filteredData","useMemo","workQueue","filteredPresetOptions","option","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","ComboboxCommandItem","value","DeploymentActionHeader","deployment","action","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage"],"mappings":"sNA0BO,MAAMA,EAAkB,CAAC,CAC/B,cAAAC,EAAgB,CAAA,EAChB,SAAAC,EACA,SAAAC,EACA,aAAAC,CACD,UAEGC,EAAAA,SAAA,CACA,SAAAC,EAAAA,IAACC,EAAA,CACA,cAAAN,EACA,SAAAC,EACA,SAAAC,EACA,aAAAC,CAAA,CAAA,EAEF,EAIIG,EAA+B,CAAC,CACrC,cAAAN,EAAgB,CAAA,EAChB,SAAAC,EACA,SAAAC,EACA,aAAAC,CACD,IAA4B,CAC3B,KAAM,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAE,EACjC,CAAE,KAAAC,GAASC,EAChBC,EAAmC,CAAE,eAAgBT,CAAA,CAAc,CAAA,EAI9DU,EAAiBC,EAAAA,iBAAiBP,CAAM,EACxCQ,EAAeC,EAAAA,QAAQ,IACrBN,EAAK,OAAQO,GACnBA,EAAU,KAAK,cAAc,SAASJ,EAAe,YAAA,CAAa,CAAA,EAEjE,CAACH,EAAMG,CAAc,CAAC,EAEnBK,EAAwBF,EAAAA,QAAQ,IAC9BhB,EAAc,OAAQmB,GAC5BA,EAAO,MAAM,cAAc,SAASN,EAAe,YAAA,CAAa,CAAA,EAE/D,CAACA,EAAgBb,CAAa,CAAC,EAElC,cACEoB,EAAA,CACA,SAAA,CAAAf,EAAAA,IAACgB,EAAA,CACA,SAAU,EAAQpB,EAClB,aAAW,sBAEV,SAAAA,CAAA,CAAA,SAEDqB,EAAA,CACA,SAAA,CAAAjB,EAAAA,IAACkB,EAAA,CACA,MAAOhB,EACP,cAAeC,EACf,YAAY,4BAAA,CAAA,EAEbH,EAAAA,IAACmB,GAAqB,SAAA,qBAAA,CAAmB,EACzCnB,EAAAA,IAACoB,EAAA,CACA,SAAAC,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAT,EAAsB,IAAKC,GAC3Bd,EAAAA,IAACuB,EAAA,CAEA,SAAU3B,IAAakB,EAAO,MAC9B,SAAU,IAAM,CACfjB,EAASiB,EAAO,KAAK,EACrBX,EAAU,EAAE,CACb,EAEA,MAAO,OAAOW,EAAO,KAAK,EAEzB,SAAAA,EAAO,KAAA,EATHA,EAAO,KAAA,CAWb,EACAJ,EAAa,IAAKE,GAClBZ,EAAAA,IAACuB,EAAA,CAEA,SAAU3B,IAAagB,EAAU,KACjC,SAAWY,GAAU,CACpB3B,EAAS2B,CAAK,EACdrB,EAAU,EAAE,CACb,EACA,MAAOS,EAAU,KAEhB,SAAAA,EAAU,IAAA,EARNA,EAAU,EAAA,CAUhB,CAAA,CAAA,CACF,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,CAEF,ECvGaa,EAAyB,CAAC,CACtC,WAAAC,EACA,OAAAC,CACD,IAEE3B,EAAAA,IAAC4B,EAAA,CACA,SAAAP,EAAAA,KAACQ,EAAA,CACA,SAAA,CAAA7B,EAAAA,IAAC8B,EAAA,CACA,eAACC,EAAA,CAAe,GAAG,eAAe,UAAU,wBAAwB,uBAEpE,CAAA,CACD,QACCC,EAAA,EAAoB,QAEpBF,EAAA,CACA,SAAA9B,EAAAA,IAAC+B,EAAA,CACA,GAAG,8BACH,OAAQ,CAAE,GAAIL,EAAW,EAAA,EACzB,UAAU,wBAET,SAAAA,EAAW,IAAA,CAAA,EAEd,QACCM,EAAA,EAAoB,QAEpBF,EAAA,CAAe,UAAU,wBACzB,SAAA9B,EAAAA,IAACiC,EAAA,CAAgB,WAAO,CAAA,CACzB,CAAA,CAAA,CACD,CAAA,CACD"}
1
+ {"version":3,"file":"deployment-action-header-DwuMPgVg.js","sources":["../../src/components/work-pools/work-queue-select/work-queue-select.tsx","../../src/components/deployments/deployment-action-header.tsx"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildFilterWorkPoolWorkQueuesQuery } from \"@/api/work-queues\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype WorkQueueSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n\tworkPoolName: string;\n};\n\nexport const WorkQueueSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n\tworkPoolName,\n}: WorkQueueSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<WorkQueueSelecImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t\tworkPoolName={workPoolName}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst WorkQueueSelecImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n\tworkPoolName,\n}: WorkQueueSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(\n\t\tbuildFilterWorkPoolWorkQueuesQuery({ work_pool_name: workPoolName }),\n\t);\n\n\t// nb: because work queues API does not have filtering _like by name, do client-side filtering\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((workQueue) =>\n\t\t\tworkQueue.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a work queue\"\n\t\t\t>\n\t\t\t\t{selected}\n\t\t\t</ComboboxTrigger>\n\t\t\t<ComboboxContent>\n\t\t\t\t<ComboboxCommandInput\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonValueChange={setSearch}\n\t\t\t\t\tplaceholder=\"Search for a work queue...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No work queue found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.value);\n\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((workQueue) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workQueue.id}\n\t\t\t\t\t\t\t\tselected={selected === workQueue.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(value);\n\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={workQueue.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{workQueue.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n","import type { Deployment } from \"@/api/deployments\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype DeploymentActionHeaderProps = {\n\tdeployment: Deployment;\n\taction: \"Edit\" | \"Duplicate\" | \"Run\";\n};\n\nexport const DeploymentActionHeader = ({\n\tdeployment,\n\taction,\n}: DeploymentActionHeaderProps) => {\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=\"/deployments\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tDeployments\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=\"/deployments/deployment/$id\"\n\t\t\t\t\t\tparams={{ id: deployment.id }}\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{deployment.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>{action}</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n"],"names":["WorkQueueSelect","presetOptions","selected","onSelect","workPoolName","Suspense","jsx","WorkQueueSelecImplementation","search","setSearch","useState","data","useSuspenseQuery","buildFilterWorkPoolWorkQueuesQuery","deferredSearch","useDeferredValue","filteredData","useMemo","workQueue","filteredPresetOptions","option","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","ComboboxCommandItem","value","DeploymentActionHeader","deployment","action","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage"],"mappings":"sNA0BO,MAAMA,EAAkB,CAAC,CAC/B,cAAAC,EAAgB,CAAA,EAChB,SAAAC,EACA,SAAAC,EACA,aAAAC,CACD,UAEGC,EAAAA,SAAA,CACA,SAAAC,EAAAA,IAACC,EAAA,CACA,cAAAN,EACA,SAAAC,EACA,SAAAC,EACA,aAAAC,CAAA,CAAA,EAEF,EAIIG,EAA+B,CAAC,CACrC,cAAAN,EAAgB,CAAA,EAChB,SAAAC,EACA,SAAAC,EACA,aAAAC,CACD,IAA4B,CAC3B,KAAM,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAE,EACjC,CAAE,KAAAC,GAASC,EAChBC,EAAmC,CAAE,eAAgBT,CAAA,CAAc,CAAA,EAI9DU,EAAiBC,EAAAA,iBAAiBP,CAAM,EACxCQ,EAAeC,EAAAA,QAAQ,IACrBN,EAAK,OAAQO,GACnBA,EAAU,KAAK,cAAc,SAASJ,EAAe,YAAA,CAAa,CAAA,EAEjE,CAACH,EAAMG,CAAc,CAAC,EAEnBK,EAAwBF,EAAAA,QAAQ,IAC9BhB,EAAc,OAAQmB,GAC5BA,EAAO,MAAM,cAAc,SAASN,EAAe,YAAA,CAAa,CAAA,EAE/D,CAACA,EAAgBb,CAAa,CAAC,EAElC,cACEoB,EAAA,CACA,SAAA,CAAAf,EAAAA,IAACgB,EAAA,CACA,SAAU,EAAQpB,EAClB,aAAW,sBAEV,SAAAA,CAAA,CAAA,SAEDqB,EAAA,CACA,SAAA,CAAAjB,EAAAA,IAACkB,EAAA,CACA,MAAOhB,EACP,cAAeC,EACf,YAAY,4BAAA,CAAA,EAEbH,EAAAA,IAACmB,GAAqB,SAAA,qBAAA,CAAmB,EACzCnB,EAAAA,IAACoB,EAAA,CACA,SAAAC,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAT,EAAsB,IAAKC,GAC3Bd,EAAAA,IAACuB,EAAA,CAEA,SAAU3B,IAAakB,EAAO,MAC9B,SAAU,IAAM,CACfjB,EAASiB,EAAO,KAAK,EACrBX,EAAU,EAAE,CACb,EAEA,MAAO,OAAOW,EAAO,KAAK,EAEzB,SAAAA,EAAO,KAAA,EATHA,EAAO,KAAA,CAWb,EACAJ,EAAa,IAAKE,GAClBZ,EAAAA,IAACuB,EAAA,CAEA,SAAU3B,IAAagB,EAAU,KACjC,SAAWY,GAAU,CACpB3B,EAAS2B,CAAK,EACdrB,EAAU,EAAE,CACb,EACA,MAAOS,EAAU,KAEhB,SAAAA,EAAU,IAAA,EARNA,EAAU,EAAA,CAUhB,CAAA,CAAA,CACF,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,CAEF,ECvGaa,EAAyB,CAAC,CACtC,WAAAC,EACA,OAAAC,CACD,IAEE3B,EAAAA,IAAC4B,EAAA,CACA,SAAAP,EAAAA,KAACQ,EAAA,CACA,SAAA,CAAA7B,EAAAA,IAAC8B,EAAA,CACA,eAACC,EAAA,CAAe,GAAG,eAAe,UAAU,wBAAwB,uBAEpE,CAAA,CACD,QACCC,EAAA,EAAoB,QAEpBF,EAAA,CACA,SAAA9B,EAAAA,IAAC+B,EAAA,CACA,GAAG,8BACH,OAAQ,CAAE,GAAIL,EAAW,EAAA,EACzB,UAAU,wBAET,SAAAA,EAAW,IAAA,CAAA,EAEd,QACCM,EAAA,EAAoB,QAEpBF,EAAA,CAAe,UAAU,wBACzB,SAAA9B,EAAAA,IAACiC,EAAA,CAAgB,WAAO,CAAA,CACzB,CAAA,CAAA,CACD,CAAA,CACD"}
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-input-hzlzpUdj.js","assets/vendor-tanstack-BdLtprmr.js","assets/vendor-react-HBv6Kpyp.js","assets/vendor-codemirror-DDrdK9VD.js","assets/index-CPpeVt8m.js","assets/vendor-radix-CJc458uP.js","assets/vendor-recharts-CY3PKigC.js","assets/vendor-forms-BlFSCfFw.js","assets/vendor-date-Cl1Jav-N.js","assets/index-DJXBzX1E.css"])))=>i.map(i=>d[i]);
2
+ import{j as e,r as c,s as A,d as B,L as Y}from"./vendor-tanstack-BdLtprmr.js";import{dM as H,ag as M,ah as G,ai as q,aj as J,al as z,ak as R,am as $,an as I,b8 as K,ce as X,T as Z,S as ee,a as re,b as ae,c as se,d as oe,e as P,dN as ne,cY as le,y as f,p as te,G as ce,L as ie,q as W}from"./index-CPpeVt8m.js";import{u as me,L as de}from"./schema-form-input-string-format-datetime-Dg3zVAp5.js";import"./toggle-group-EMgSOoYH.js";import{F as ue,a as m,b as d,c as u,d as p,e as h}from"./form-Cl5Hk9bq.js";import{T as pe}from"./tags-input-DqZ8v99z.js";import{W as he}from"./deployment-action-header-DwuMPgVg.js";import{a as xe}from"./zod-B1GLD-Zc.js";import{c as je,o as Q,s as g,r as _e,b as be,a as ge,u as ye,N as Se,e as ve}from"./vendor-forms-BlFSCfFw.js";const fe=({presetOptions:s=[],selected:o,onSelect:a})=>e.jsx(c.Suspense,{children:e.jsx(Ce,{presetOptions:s,selected:o,onSelect:a})}),Ce=({presetOptions:s=[],selected:o,onSelect:a})=>{const[t,n]=c.useState(""),{data:i}=A(H()),l=c.useDeferredValue(t),x=c.useMemo(()=>i.filter(r=>r.name.toLowerCase().includes(l.toLowerCase())),[i,l]),j=c.useMemo(()=>s.filter(r=>r.label.toLowerCase().includes(l.toLowerCase())),[l,s]);return e.jsxs(M,{children:[e.jsx(G,{selected:!!o,"aria-label":"Select a global concurrency limit",children:i.find(r=>r.id===o)?.name}),e.jsxs(q,{children:[e.jsx(J,{value:t,onValueChange:n,placeholder:"Search for a global concurrency limit..."}),e.jsx(z,{children:"No global concurrency limit found"}),e.jsx(R,{children:e.jsxs($,{children:[j.map(r=>e.jsx(I,{selected:o===r.value,onSelect:()=>{a(r.value),n("")},value:String(r.label),children:r.label},r.label)),x.map(r=>e.jsx(I,{selected:o===r.name,onSelect:E=>{a(E),n("")},value:r.id,children:r.name},r.id))]})})]})]})},Ee=c.lazy(()=>X(()=>import("./markdown-input-hzlzpUdj.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(s=>({default:s.MarkdownInput})));function Ne({className:s,...o}){return e.jsx(c.Suspense,{fallback:e.jsx(K,{className:`min-h-[200px] ${s??""}`}),children:e.jsx(Ee,{className:s,...o})})}const ke=({presetOptions:s=[],selected:o,onSelect:a})=>e.jsx(c.Suspense,{children:e.jsx(we,{presetOptions:s,selected:o,onSelect:a})}),we=({presetOptions:s=[],selected:o,onSelect:a})=>{const[t,n]=c.useState(""),{data:i}=A(Z()),l=c.useDeferredValue(t),x=c.useMemo(()=>i.filter(r=>r.name.toLowerCase().includes(l.toLowerCase())),[i,l]),j=c.useMemo(()=>s.filter(r=>r.label.toLowerCase().includes(l.toLowerCase())),[l,s]);return e.jsxs(M,{children:[e.jsx(G,{selected:!!o,"aria-label":"Select a work pool",children:o}),e.jsxs(q,{children:[e.jsx(J,{value:t,onValueChange:n,placeholder:"Search for a work pool..."}),e.jsx(z,{children:"No work pool found"}),e.jsx(R,{children:e.jsxs($,{children:[j.map(r=>e.jsx(I,{selected:o===r.value,onSelect:()=>{a(r.value),n("")},value:String(r.label),children:r.label},r.label)),x.map(r=>e.jsx(I,{selected:o===r.name,onSelect:E=>{a(E),n("")},value:r.name,children:r.name},r.id))]})})]})]})},C={ENQUEUE:"ENQUEUE",CANCEL_NEW:"CANCEL_NEW"},Le=({onValueChange:s,value:o})=>e.jsxs(ee,{value:o,onValueChange:a=>{s(a===""?void 0:a)},children:[e.jsx(re,{children:e.jsx(ae,{placeholder:C.ENQUEUE})}),e.jsx(se,{children:e.jsxs(oe,{children:[e.jsx(P,{value:C.ENQUEUE,children:C.ENQUEUE}),e.jsx(P,{value:C.CANCEL_NEW,children:C.CANCEL_NEW})]})})]}),Fe=(s,{mode:o})=>Q({name:g().refine(a=>o==="edit"?!0:a!==s.name,{message:"Name must be different from the original deployment"}),description:g().nullable().optional(),work_pool_name:g().nullable().optional(),work_queue_name:g().nullable().optional(),tags:ge(g()).optional(),concurrency_options:Q({collision_strategy:ve(["ENQUEUE","CANCEL_NEW"]).optional()}).nullable().optional(),job_variables:g().superRefine((a,t)=>{try{return a?JSON.parse(a):void 0}catch(n){return console.error(n),t.addIssue({code:"custom",message:"Invalid JSON"}),Se}}),enforce_parameter_schema:be(),parameter_openapi_schema:_e(ye()).optional().nullable().readonly(),global_concurrency_limit_id:g().uuid().optional().nullable()}),Ie={name:"",description:"",tags:[],job_variables:"",enforce_parameter_schema:!0,global_concurrency_limit_id:null},Ve=(s,{mode:o})=>{const a=B(),t=je({resolver:xe(Fe(s,{mode:o})),defaultValues:Ie}),{values:n,setValues:i,errors:l,validateForm:x}=me(),{createDeployment:j}=ne(),{updateDeployment:r}=le();return c.useEffect(()=>{const{name:V,description:O,work_pool_name:N,work_queue_name:k,tags:w,concurrency_options:L,parameter_openapi_schema:F,enforce_parameter_schema:y,job_variables:S,global_concurrency_limit:v}=s;i(s.parameters),t.reset({description:O,name:V,work_pool_name:N,work_queue_name:k,tags:w,concurrency_options:L,parameter_openapi_schema:F,enforce_parameter_schema:y,job_variables:S?JSON.stringify(S):"",global_concurrency_limit_id:v?.id})},[t,s,i]),{form:t,onSave:async V=>{const{name:O,job_variables:N,description:k,work_pool_name:w,work_queue_name:L,tags:F,enforce_parameter_schema:y,concurrency_options:S,parameter_openapi_schema:v,global_concurrency_limit_id:T}=V,U=N?JSON.parse(N):void 0;if(v&&y)try{await x({schema:v})}catch(b){const _="Unknown error while updating validating schema.";f.error(_),console.error(_,b)}if(l.length>0)return;const D=S?.collision_strategy?{collision_strategy:S.collision_strategy}:void 0;switch(o){case"duplicate":j({concurrency_options:D,description:k,enforce_parameter_schema:y,flow_id:s.flow_id,job_variables:U,name:O,parameters:n,parameter_openapi_schema:v||void 0,paused:s.paused,tags:F,work_pool_name:w||null,work_queue_name:L||null,global_concurrency_limit_id:T},{onSuccess:({id:b})=>{f.success("Deployment created"),a({to:"/deployments/deployment/$id",params:{id:b}})},onError:b=>{const _=b.message||"Unknown error while creating deployment.";console.error(_),f.error(_)}});break;case"edit":r({concurrency_options:D,description:k,enforce_parameter_schema:y,id:s.id,job_variables:U,parameters:n,paused:s.paused,tags:F,work_pool_name:w||null,work_queue_name:L||null,global_concurrency_limit_id:T},{onSuccess:()=>{f.success("Deployment updated"),a({to:"/deployments/deployment/$id",params:{id:s.id}})},onError:b=>{const _=b.message||"Unknown error while updating deployment.";console.error(_),f.error(_)}});break}},parametersFormValues:n,setParametersFormValues:i,parameterFormErrors:l}},Ge=({deployment:s,mode:o})=>{const{form:a,onSave:t,parameterFormErrors:n,setParametersFormValues:i,parametersFormValues:l}=Ve(s,{mode:o}),x=a.watch("work_pool_name"),j=a.getValues("parameter_openapi_schema");return e.jsx(ue,{...a,children:e.jsxs("form",{onSubmit:r=>{a.handleSubmit(t)(r)},className:"space-y-4",children:[e.jsx(m,{children:a.formState.errors.root?.message}),e.jsx("h3",{className:"text-2xl font-semibold tracking-tight",children:"General"}),e.jsx(d,{control:a.control,name:"name",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Name"}),e.jsx(h,{children:e.jsx(te,{...r,value:r.value,disabled:o==="edit"})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"description",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Description (Optional)"}),e.jsx(h,{children:e.jsx(Ne,{"aria-label":"deployment description input",value:r.value??"",onChange:r.onChange})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"work_pool_name",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Work Pool (Optional)"}),e.jsx(h,{children:e.jsx(ke,{presetOptions:[{label:"None",value:""}],onSelect:r.onChange,selected:r.value})}),e.jsx(m,{})]})}),x&&e.jsx(d,{control:a.control,name:"work_queue_name",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Work Queue (Optional)"}),e.jsx(h,{children:e.jsx(he,{workPoolName:x,presetOptions:[{label:"None",value:""}],onSelect:r.onChange,selected:r.value})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"tags",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Tags (Optional)"}),e.jsx(h,{children:e.jsx(pe,{...r})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"concurrency_options.collision_strategy",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:e.jsxs("div",{className:"col gap-1 mb-0.5",children:[e.jsx("p",{className:"text-sm",children:"Concurrency Limit Collision Strategy (Optional)"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Configure behavior for runs once the concurrency limit is reached."})]})}),e.jsx(h,{children:e.jsx(Le,{value:r.value,onValueChange:r.onChange})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"global_concurrency_limit_id",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Global concurrency limit"}),e.jsx(h,{children:e.jsx(fe,{presetOptions:[{label:"None",value:null}],onSelect:r.onChange,selected:r.value})}),e.jsx(m,{})]})}),e.jsxs("div",{className:"pt-4 border-t",children:[e.jsx("h3",{className:"text-2xl font-semibold tracking-tight mb-4",children:"Parameters"}),j&&e.jsx(de,{schema:j,errors:n,values:l,onValuesChange:i,kinds:["json"]}),e.jsx(d,{control:a.control,name:"enforce_parameter_schema",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Enforce Parameter Schema"}),e.jsx(h,{children:e.jsx(ce,{className:"block",checked:r.value,onCheckedChange:r.onChange})}),e.jsx(m,{})]})})]}),e.jsxs("div",{className:"pt-4 border-t",children:[e.jsx("h3",{className:"text-2xl font-semibold tracking-tight mb-4",children:"Job Variables"}),e.jsx(d,{control:a.control,name:"job_variables",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Job Variables (Optional)"}),e.jsx(h,{children:e.jsx(ie,{...r})}),e.jsx(m,{})]})})]}),e.jsxs("div",{className:"flex gap-3 justify-end",children:[e.jsx(Y,{to:"/deployments/deployment/$id",params:{id:s.id},children:e.jsx(W,{variant:"secondary",children:"Cancel"})}),e.jsx(W,{type:"submit",children:"Save"})]})]})})};export{Ge as D};
3
+ //# sourceMappingURL=deployment-form-BpKkzEf2.js.map