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.
- prefect/_build_info.py +3 -3
- prefect/cli/__init__.py +1 -0
- prefect/cli/cloud/asset.py +135 -0
- prefect/server/ui-v2/assets/artifact-card-BnPKAfkY.js +2 -0
- prefect/server/ui-v2/assets/artifact-card-BnPKAfkY.js.map +1 -0
- prefect/server/ui-v2/assets/artifact._id-vDOuIuta.js +2 -0
- prefect/server/ui-v2/assets/artifact._id-vDOuIuta.js.map +1 -0
- prefect/server/ui-v2/assets/automation-wizard-RlOhF90R.js +2 -0
- prefect/server/ui-v2/assets/automation-wizard-RlOhF90R.js.map +1 -0
- prefect/server/ui-v2/assets/automation._id-CEHa-X0X.js +2 -0
- prefect/server/ui-v2/assets/{automation._id-CMiura1b.js.map → automation._id-CEHa-X0X.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation_._id.edit-Cbfcwa-K.js → automation_._id.edit-BRWAsELa.js} +2 -2
- prefect/server/ui-v2/assets/{automation_._id.edit-Cbfcwa-K.js.map → automation_._id.edit-BRWAsELa.js.map} +1 -1
- prefect/server/ui-v2/assets/{automations-header-BxPCOE-0.js → automations-header-Dr6v5dPp.js} +2 -2
- prefect/server/ui-v2/assets/{automations-header-BxPCOE-0.js.map → automations-header-Dr6v5dPp.js.map} +1 -1
- prefect/server/ui-v2/assets/base-job-template-form-section-C8_R96gO.js +2 -0
- prefect/server/ui-v2/assets/base-job-template-form-section-C8_R96gO.js.map +1 -0
- prefect/server/ui-v2/assets/block-type-details-tAkUWqs1.js +2 -0
- prefect/server/ui-v2/assets/block-type-details-tAkUWqs1.js.map +1 -0
- prefect/server/ui-v2/assets/block-type-logo-scnMsyY5.js +2 -0
- prefect/server/ui-v2/assets/{block-type-logo-DuvU7goV.js.map → block-type-logo-scnMsyY5.js.map} +1 -1
- prefect/server/ui-v2/assets/block._id-BY42cyjR.js +2 -0
- prefect/server/ui-v2/assets/block._id-BY42cyjR.js.map +1 -0
- prefect/server/ui-v2/assets/{block_._id.edit-C4SmoQ4y.js → block_._id.edit-n2jwU5yr.js} +2 -2
- prefect/server/ui-v2/assets/{block_._id.edit-C4SmoQ4y.js.map → block_._id.edit-n2jwU5yr.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog-5_GoCKpb.js +2 -0
- prefect/server/ui-v2/assets/catalog-5_GoCKpb.js.map +1 -0
- prefect/server/ui-v2/assets/catalog_._slug-sZvt0fDy.js +2 -0
- prefect/server/ui-v2/assets/catalog_._slug-sZvt0fDy.js.map +1 -0
- prefect/server/ui-v2/assets/{catalog_._slug_.create-CgKL4TS2.js → catalog_._slug_.create-rboQmoyW.js} +2 -2
- prefect/server/ui-v2/assets/{catalog_._slug_.create-CgKL4TS2.js.map → catalog_._slug_.create-rboQmoyW.js.map} +1 -1
- prefect/server/ui-v2/assets/{collapsible-DZbPzSgr.js → collapsible-Lk7MRvBH.js} +2 -2
- prefect/server/ui-v2/assets/{collapsible-DZbPzSgr.js.map → collapsible-Lk7MRvBH.js.map} +1 -1
- prefect/server/ui-v2/assets/concurrency-limit._id-D5i9zZJh.js +2 -0
- prefect/server/ui-v2/assets/concurrency-limit._id-D5i9zZJh.js.map +1 -0
- prefect/server/ui-v2/assets/create-CtsA2QIl.js +2 -0
- prefect/server/ui-v2/assets/{create-BrNwbpVu.js.map → create-CtsA2QIl.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-DWgkh2HT.js → create-DJPAEZ93.js} +2 -2
- prefect/server/ui-v2/assets/create-DJPAEZ93.js.map +1 -0
- prefect/server/ui-v2/assets/{data-table-QSHqmTar.js → data-table-bk-0xKWT.js} +2 -2
- prefect/server/ui-v2/assets/{data-table-QSHqmTar.js.map → data-table-bk-0xKWT.js.map} +1 -1
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-dLycVNo4.js → delete-confirmation-dialog-BZg9EOfN.js} +2 -2
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-dLycVNo4.js.map → delete-confirmation-dialog-BZg9EOfN.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-action-header-CzvBTL6H.js → deployment-action-header-DwuMPgVg.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-action-header-CzvBTL6H.js.map → deployment-action-header-DwuMPgVg.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment-form-BpKkzEf2.js +3 -0
- prefect/server/ui-v2/assets/deployment-form-BpKkzEf2.js.map +1 -0
- prefect/server/ui-v2/assets/{deployment-links-CGjJpxJA.js → deployment-links-B67P-6Ph.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-links-CGjJpxJA.js.map → deployment-links-B67P-6Ph.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-DXrb6frJ.js → deployment._id-BVOBfMVf.js} +2 -2
- prefect/server/ui-v2/assets/deployment._id-BVOBfMVf.js.map +1 -0
- prefect/server/ui-v2/assets/deployment._id-KOMC9fpE.js +2 -0
- prefect/server/ui-v2/assets/deployment._id-KOMC9fpE.js.map +1 -0
- prefect/server/ui-v2/assets/deployment_._id.duplicate-BPk2SchT.js +2 -0
- prefect/server/ui-v2/assets/deployment_._id.duplicate-BPk2SchT.js.map +1 -0
- prefect/server/ui-v2/assets/deployment_._id.edit-Dv0M_huv.js +2 -0
- prefect/server/ui-v2/assets/deployment_._id.edit-Dv0M_huv.js.map +1 -0
- prefect/server/ui-v2/assets/deployment_._id.run-DFVA4Xhx.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.run-CnacOmhY.js.map → deployment_._id.run-DFVA4Xhx.js.map} +1 -1
- prefect/server/ui-v2/assets/{dropdown-menu-B9LKPlz7.js → dropdown-menu-fRiq5bS-.js} +2 -2
- prefect/server/ui-v2/assets/{dropdown-menu-B9LKPlz7.js.map → dropdown-menu-fRiq5bS-.js.map} +1 -1
- prefect/server/ui-v2/assets/{event-resource-display-B42RIaiX.js → event-resource-display-C1ZAey-o.js} +2 -2
- prefect/server/ui-v2/assets/{event-resource-display-B42RIaiX.js.map → event-resource-display-C1ZAey-o.js.map} +1 -1
- prefect/server/ui-v2/assets/event._eventDate._eventId-CcbtP9Ag.js +2 -0
- prefect/server/ui-v2/assets/{event._eventDate._eventId-CKTuT_8S.js.map → event._eventDate._eventId-CcbtP9Ag.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run-graph-CycKStSg.js +2 -0
- prefect/server/ui-v2/assets/flow-run-graph-CycKStSg.js.map +1 -0
- prefect/server/ui-v2/assets/{flow-run._id-BKv9Meqc.js → flow-run._id-Dn9R_Tjy.js} +2 -2
- prefect/server/ui-v2/assets/flow-run._id-Dn9R_Tjy.js.map +1 -0
- prefect/server/ui-v2/assets/{flow-run._id-ZTkjj6bM.js → flow-run._id-Dwx7ojcj.js} +2 -2
- prefect/server/ui-v2/assets/flow-run._id-Dwx7ojcj.js.map +1 -0
- prefect/server/ui-v2/assets/flow-run._id-YzRd5jrC.js +4 -0
- prefect/server/ui-v2/assets/flow-run._id-YzRd5jrC.js.map +1 -0
- prefect/server/ui-v2/assets/flow-runs-pagination-DMLZFM1m.js +2 -0
- prefect/server/ui-v2/assets/flow-runs-pagination-DMLZFM1m.js.map +1 -0
- prefect/server/ui-v2/assets/flow._id-V6-Qhkwk.js +2 -0
- prefect/server/ui-v2/assets/flow._id-V6-Qhkwk.js.map +1 -0
- prefect/server/ui-v2/assets/{form-DOdmIC3A.js → form-Cl5Hk9bq.js} +2 -2
- prefect/server/ui-v2/assets/{form-DOdmIC3A.js.map → form-Cl5Hk9bq.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-DcIuN5UN.js → header-BuI436ik.js} +2 -2
- prefect/server/ui-v2/assets/{header-DcIuN5UN.js.map → header-BuI436ik.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-CnBwASd-.js → header-DcAQCxQl.js} +2 -2
- prefect/server/ui-v2/assets/{header-CnBwASd-.js.map → header-DcAQCxQl.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-DxE-NzAK.js → header-qlcK4NLD.js} +2 -2
- prefect/server/ui-v2/assets/{header-DxE-NzAK.js.map → header-qlcK4NLD.js.map} +1 -1
- prefect/server/ui-v2/assets/index--Z69UYXV.js +2 -0
- prefect/server/ui-v2/assets/index--Z69UYXV.js.map +1 -0
- prefect/server/ui-v2/assets/{index-D0R9_LIL.js → index-BO4Qqsm8.js} +2 -2
- prefect/server/ui-v2/assets/index-BO4Qqsm8.js.map +1 -0
- prefect/server/ui-v2/assets/index-Bg45XS_V.js +2 -0
- prefect/server/ui-v2/assets/index-Bg45XS_V.js.map +1 -0
- prefect/server/ui-v2/assets/{index-BIBIJufF.js → index-BleYpDoN.js} +2 -2
- prefect/server/ui-v2/assets/index-BleYpDoN.js.map +1 -0
- prefect/server/ui-v2/assets/{index-DyOAqIOp.js → index-C63VUjOh.js} +2 -2
- prefect/server/ui-v2/assets/{index-DyOAqIOp.js.map → index-C63VUjOh.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DfKXdmko.js → index-C6LgWyJb.js} +2 -2
- prefect/server/ui-v2/assets/index-C6LgWyJb.js.map +1 -0
- prefect/server/ui-v2/assets/index-CE-bVgqj.js +2 -0
- prefect/server/ui-v2/assets/{index-DlAHvqFx.js.map → index-CE-bVgqj.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-V_xTKaEb.js → index-CPpeVt8m.js} +13 -13
- prefect/server/ui-v2/assets/index-CPpeVt8m.js.map +1 -0
- prefect/server/ui-v2/assets/index-CYaUe0Ym.js +2 -0
- prefect/server/ui-v2/assets/index-CYaUe0Ym.js.map +1 -0
- prefect/server/ui-v2/assets/{index-C5RMFRyZ.js → index-Clbms0kg.js} +2 -2
- prefect/server/ui-v2/assets/index-Clbms0kg.js.map +1 -0
- prefect/server/ui-v2/assets/index-D13YFoYA.js +2 -0
- prefect/server/ui-v2/assets/index-D13YFoYA.js.map +1 -0
- prefect/server/ui-v2/assets/{index-Cx1qEoCK.js → index-D73a_nGu.js} +2 -2
- prefect/server/ui-v2/assets/{index-Cx1qEoCK.js.map → index-D73a_nGu.js.map} +1 -1
- prefect/server/ui-v2/assets/index-DJXBzX1E.css +1 -0
- prefect/server/ui-v2/assets/{index-BO60ehN6.js → index-DPPPaOr_.js} +2 -2
- prefect/server/ui-v2/assets/index-DPPPaOr_.js.map +1 -0
- prefect/server/ui-v2/assets/{index-DP8W-xJo.js → index-DU9ShbqW.js} +2 -2
- prefect/server/ui-v2/assets/index-DU9ShbqW.js.map +1 -0
- prefect/server/ui-v2/assets/index-DdR1lzZk.js +2 -0
- prefect/server/ui-v2/assets/index-DdR1lzZk.js.map +1 -0
- prefect/server/ui-v2/assets/{index-B9ttjsyu.js → index-ELo08q04.js} +2 -2
- prefect/server/ui-v2/assets/{index-B9ttjsyu.js.map → index-ELo08q04.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BTL1xHS9.js → index-cp6PTdHp.js} +2 -2
- prefect/server/ui-v2/assets/{index-BTL1xHS9.js.map → index-cp6PTdHp.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D6G96ToY.js → index-kM_g8J0u.js} +2 -2
- prefect/server/ui-v2/assets/{index-D6G96ToY.js.map → index-kM_g8J0u.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-q5Y3hlDT.js → index-mYcm9Rkr.js} +2 -2
- prefect/server/ui-v2/assets/index-mYcm9Rkr.js.map +1 -0
- prefect/server/ui-v2/assets/{index-D9cOtoSU.js → index-yavn_NBp.js} +2 -2
- prefect/server/ui-v2/assets/index-yavn_NBp.js.map +1 -0
- prefect/server/ui-v2/assets/{json-input-YKJMJCcT.js → json-input-iUzf6BvZ.js} +2 -2
- prefect/server/ui-v2/assets/{json-input-YKJMJCcT.js.map → json-input-iUzf6BvZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{key-value-RPUUqQ6F.js → key-value-DI27Dv4P.js} +2 -2
- prefect/server/ui-v2/assets/{key-value-RPUUqQ6F.js.map → key-value-DI27Dv4P.js.map} +1 -1
- prefect/server/ui-v2/assets/key._key-C-nk2nld.js +2 -0
- prefect/server/ui-v2/assets/key._key-C-nk2nld.js.map +1 -0
- prefect/server/ui-v2/assets/{lazy-markdown-B9vEkJ0h.js → lazy-markdown-D_y73qoD.js} +2 -2
- prefect/server/ui-v2/assets/{lazy-markdown-B9vEkJ0h.js.map → lazy-markdown-D_y73qoD.js.map} +1 -1
- prefect/server/ui-v2/assets/{login-C3PhSGQJ.js → login-DR_xuMmg.js} +2 -2
- prefect/server/ui-v2/assets/{login-C3PhSGQJ.js.map → login-DR_xuMmg.js.map} +1 -1
- prefect/server/ui-v2/assets/{markdown-input-Dei7u1qp.js → markdown-input-hzlzpUdj.js} +2 -2
- prefect/server/ui-v2/assets/{markdown-input-Dei7u1qp.js.map → markdown-input-hzlzpUdj.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-example-snippet-DvulFxgw.js → python-example-snippet-d8bTNJ0J.js} +3 -3
- prefect/server/ui-v2/assets/{python-example-snippet-DvulFxgw.js.map → python-example-snippet-d8bTNJ0J.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-input-niCawr8m.js → python-input-Bxdnzvx3.js} +2 -2
- prefect/server/ui-v2/assets/{python-input-niCawr8m.js.map → python-input-Bxdnzvx3.js.map} +1 -1
- prefect/server/ui-v2/assets/{radio-group-D55TQZsk.js → radio-group-0oOEMJCS.js} +2 -2
- prefect/server/ui-v2/assets/{radio-group-D55TQZsk.js.map → radio-group-0oOEMJCS.js.map} +1 -1
- prefect/server/ui-v2/assets/{route-error-state-Cu4m0LTX.js → route-error-state-BqbnZCc-.js} +2 -2
- prefect/server/ui-v2/assets/{route-error-state-Cu4m0LTX.js.map → route-error-state-BqbnZCc-.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-BQAcWW5k.js → schema-form-BD-WM4S0.js} +2 -2
- prefect/server/ui-v2/assets/{schema-form-BQAcWW5k.js.map → schema-form-BD-WM4S0.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-Cb4sTJle.js → schema-form-input-string-format-datetime-Dg3zVAp5.js} +4 -4
- 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
- prefect/server/ui-v2/assets/{settings-DV4ewZ_4.js → settings-Dm6yMLix.js} +2 -2
- prefect/server/ui-v2/assets/{settings-DV4ewZ_4.js.map → settings-Dm6yMLix.js.map} +1 -1
- prefect/server/ui-v2/assets/{sort-filter-DY7vgl7C.js → sort-filter-X6JyRc0-.js} +2 -2
- prefect/server/ui-v2/assets/{sort-filter-DY7vgl7C.js.map → sort-filter-X6JyRc0-.js.map} +1 -1
- prefect/server/ui-v2/assets/{table-ChOwO4Pk.js → table-Xyel2BEw.js} +2 -2
- prefect/server/ui-v2/assets/{table-ChOwO4Pk.js.map → table-Xyel2BEw.js.map} +1 -1
- prefect/server/ui-v2/assets/{tags-input-2KSBvO_K.js → tags-input-DqZ8v99z.js} +2 -2
- prefect/server/ui-v2/assets/{tags-input-2KSBvO_K.js.map → tags-input-DqZ8v99z.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CNrP9yPQ.js → task-run-concurrency-limits-reset-dialog-5xFWeoYy.js} +2 -2
- 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
- prefect/server/ui-v2/assets/{task-run._id-cqXH0PMU.js → task-run._id-9DcrUEGz.js} +3 -3
- prefect/server/ui-v2/assets/{task-run._id-cqXH0PMU.js.map → task-run._id-9DcrUEGz.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-CQGeAiBh.js → task-run._id-DJkoLl_e.js} +2 -2
- prefect/server/ui-v2/assets/task-run._id-DJkoLl_e.js.map +1 -0
- prefect/server/ui-v2/assets/task-runs-pagination-B2fSdB1t.js +2 -0
- prefect/server/ui-v2/assets/task-runs-pagination-B2fSdB1t.js.map +1 -0
- prefect/server/ui-v2/assets/{textarea-9v5uTuxg.js → textarea-DFEOJJdc.js} +2 -2
- prefect/server/ui-v2/assets/{textarea-9v5uTuxg.js.map → textarea-DFEOJJdc.js.map} +1 -1
- prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js → timezone-select-NViFNNLz.js} +2 -2
- prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js.map → timezone-select-NViFNNLz.js.map} +1 -1
- prefect/server/ui-v2/assets/{toggle-group-CBJphTE6.js → toggle-group-EMgSOoYH.js} +2 -2
- prefect/server/ui-v2/assets/{toggle-group-CBJphTE6.js.map → toggle-group-EMgSOoYH.js.map} +1 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-BHgDXlwg.js +2 -0
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-BHgDXlwg.js.map +1 -0
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BYY1b8yH.js → use-delete-block-document-confirmation-dialog-CxRkBKPg.js} +2 -2
- 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
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-Ck8nwx2q.js +2 -0
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-Ck8nwx2q.js.map +1 -0
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BOTU5FPq.js → use-get-artifacts-flow-task-runs-D7Djt53s.js} +2 -2
- 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
- prefect/server/ui-v2/assets/{use-quick-run-DzSmbSlu.js → use-quick-run-Cpy0t7dX.js} +2 -2
- prefect/server/ui-v2/assets/{use-quick-run-DzSmbSlu.js.map → use-quick-run-Cpy0t7dX.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-state-favicon-UFxhmhHr.js → use-state-favicon-CMsL9s6j.js} +2 -2
- prefect/server/ui-v2/assets/{use-state-favicon-UFxhmhHr.js.map → use-state-favicon-CMsL9s6j.js.map} +1 -1
- prefect/server/ui-v2/assets/use-stepper-CZZEx5js.js +2 -0
- prefect/server/ui-v2/assets/use-stepper-CZZEx5js.js.map +1 -0
- prefect/server/ui-v2/assets/{utilities-2FfCfMAV.js → utilities-D9BfvLg5.js} +2 -2
- prefect/server/ui-v2/assets/{utilities-2FfCfMAV.js.map → utilities-D9BfvLg5.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool-filter-dsJ6xeK6.js +2 -0
- prefect/server/ui-v2/assets/work-pool-filter-dsJ6xeK6.js.map +1 -0
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-zSWhEFap.js → work-pool-queue-toggle-f_-cTWxB.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-zSWhEFap.js.map → work-pool-queue-toggle-f_-cTWxB.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool._workPoolName-BwIVfCIe.js → work-pool._workPoolName-zBqgkYLT.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool._workPoolName-BwIVfCIe.js.map → work-pool._workPoolName-zBqgkYLT.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-j7cjgoJp.js → work-pool_._workPoolName.edit-B-8_CnfA.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-j7cjgoJp.js.map → work-pool_._workPoolName.edit-B-8_CnfA.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlFjSdoB.js → work-pool_._workPoolName.queue._workQueueName-DzrY1tMq.js} +2 -2
- prefect/server/ui-v2/assets/work-pool_._workPoolName.queue._workQueueName-DzrY1tMq.js.map +1 -0
- prefect/server/ui-v2/assets/{work-queue-icon-text-vWlRNW-b.js → work-queue-icon-text-BqqQ413o.js} +2 -2
- prefect/server/ui-v2/assets/{work-queue-icon-text-vWlRNW-b.js.map → work-queue-icon-text-BqqQ413o.js.map} +1 -1
- prefect/server/ui-v2/index.html +2 -2
- prefect/task_engine.py +26 -12
- prefect/workers/base.py +18 -1
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/METADATA +1 -1
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/RECORD +208 -207
- prefect/server/ui-v2/assets/artifact-card-DQfjRA2u.js +0 -2
- prefect/server/ui-v2/assets/artifact-card-DQfjRA2u.js.map +0 -1
- prefect/server/ui-v2/assets/artifact._id-BBhuX3px.js +0 -2
- prefect/server/ui-v2/assets/artifact._id-BBhuX3px.js.map +0 -1
- prefect/server/ui-v2/assets/automation-wizard-DeT-tz5i.js +0 -2
- prefect/server/ui-v2/assets/automation-wizard-DeT-tz5i.js.map +0 -1
- prefect/server/ui-v2/assets/automation._id-CMiura1b.js +0 -2
- prefect/server/ui-v2/assets/base-job-template-form-section-MeO0M71Y.js +0 -2
- prefect/server/ui-v2/assets/base-job-template-form-section-MeO0M71Y.js.map +0 -1
- prefect/server/ui-v2/assets/block-type-details-Bcb9qEO8.js +0 -2
- prefect/server/ui-v2/assets/block-type-details-Bcb9qEO8.js.map +0 -1
- prefect/server/ui-v2/assets/block-type-logo-DuvU7goV.js +0 -2
- prefect/server/ui-v2/assets/block._id-DFR6zmOy.js +0 -2
- prefect/server/ui-v2/assets/block._id-DFR6zmOy.js.map +0 -1
- prefect/server/ui-v2/assets/catalog-CPzaK8QS.js +0 -2
- prefect/server/ui-v2/assets/catalog-CPzaK8QS.js.map +0 -1
- prefect/server/ui-v2/assets/catalog_._slug-60h4tERz.js +0 -2
- prefect/server/ui-v2/assets/catalog_._slug-60h4tERz.js.map +0 -1
- prefect/server/ui-v2/assets/concurrency-limit._id-BFfR6_U0.js +0 -2
- prefect/server/ui-v2/assets/concurrency-limit._id-BFfR6_U0.js.map +0 -1
- prefect/server/ui-v2/assets/create-BrNwbpVu.js +0 -2
- prefect/server/ui-v2/assets/create-DWgkh2HT.js.map +0 -1
- prefect/server/ui-v2/assets/deployment-form-B33C7F2u.js +0 -3
- prefect/server/ui-v2/assets/deployment-form-B33C7F2u.js.map +0 -1
- prefect/server/ui-v2/assets/deployment._id-5rPcPD0T.js +0 -2
- prefect/server/ui-v2/assets/deployment._id-5rPcPD0T.js.map +0 -1
- prefect/server/ui-v2/assets/deployment._id-DXrb6frJ.js.map +0 -1
- prefect/server/ui-v2/assets/deployment_._id.duplicate-D7YLydeq.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.duplicate-D7YLydeq.js.map +0 -1
- prefect/server/ui-v2/assets/deployment_._id.edit-Daq0J0Ow.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.edit-Daq0J0Ow.js.map +0 -1
- prefect/server/ui-v2/assets/deployment_._id.run-CnacOmhY.js +0 -2
- prefect/server/ui-v2/assets/event._eventDate._eventId-CKTuT_8S.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-OrT2Osbu.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-OrT2Osbu.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-BKv9Meqc.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-DCYAnq0D.js +0 -4
- prefect/server/ui-v2/assets/flow-run._id-DCYAnq0D.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-ZTkjj6bM.js.map +0 -1
- prefect/server/ui-v2/assets/flow-runs-pagination-CykMKOhv.js +0 -2
- prefect/server/ui-v2/assets/flow-runs-pagination-CykMKOhv.js.map +0 -1
- prefect/server/ui-v2/assets/flow._id-DhrxqQmD.js +0 -2
- prefect/server/ui-v2/assets/flow._id-DhrxqQmD.js.map +0 -1
- prefect/server/ui-v2/assets/index-BIBIJufF.js.map +0 -1
- prefect/server/ui-v2/assets/index-BO60ehN6.js.map +0 -1
- prefect/server/ui-v2/assets/index-BS7fbJ2s.js +0 -2
- prefect/server/ui-v2/assets/index-BS7fbJ2s.js.map +0 -1
- prefect/server/ui-v2/assets/index-C5RMFRyZ.js.map +0 -1
- prefect/server/ui-v2/assets/index-D0R9_LIL.js.map +0 -1
- prefect/server/ui-v2/assets/index-D9cOtoSU.js.map +0 -1
- prefect/server/ui-v2/assets/index-DEpWUeaO.js +0 -2
- prefect/server/ui-v2/assets/index-DEpWUeaO.js.map +0 -1
- prefect/server/ui-v2/assets/index-DP8W-xJo.js.map +0 -1
- prefect/server/ui-v2/assets/index-DfKXdmko.js.map +0 -1
- prefect/server/ui-v2/assets/index-DiVKp6rW.js +0 -2
- prefect/server/ui-v2/assets/index-DiVKp6rW.js.map +0 -1
- prefect/server/ui-v2/assets/index-DlAHvqFx.js +0 -2
- prefect/server/ui-v2/assets/index-VNFzALsC.js +0 -2
- prefect/server/ui-v2/assets/index-VNFzALsC.js.map +0 -1
- prefect/server/ui-v2/assets/index-V_xTKaEb.js.map +0 -1
- prefect/server/ui-v2/assets/index-WIq8QUNT.js +0 -2
- prefect/server/ui-v2/assets/index-WIq8QUNT.js.map +0 -1
- prefect/server/ui-v2/assets/index-m9O-nIOl.css +0 -1
- prefect/server/ui-v2/assets/index-q5Y3hlDT.js.map +0 -1
- prefect/server/ui-v2/assets/key._key-CX8FwfwL.js +0 -2
- prefect/server/ui-v2/assets/key._key-CX8FwfwL.js.map +0 -1
- prefect/server/ui-v2/assets/task-run._id-CQGeAiBh.js.map +0 -1
- prefect/server/ui-v2/assets/task-runs-pagination-CYoOghEN.js +0 -2
- prefect/server/ui-v2/assets/task-runs-pagination-CYoOghEN.js.map +0 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DZplMJDW.js +0 -2
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DZplMJDW.js.map +0 -1
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-1YE-VIgM.js +0 -2
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-1YE-VIgM.js.map +0 -1
- prefect/server/ui-v2/assets/use-stepper-CnGJHRLP.js +0 -2
- prefect/server/ui-v2/assets/use-stepper-CnGJHRLP.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool-filter-CGfXNujK.js +0 -2
- prefect/server/ui-v2/assets/work-pool-filter-CGfXNujK.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool_._workPoolName.queue._workQueueName-BlFjSdoB.js.map +0 -1
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/WHEEL +0 -0
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-run._id-cqXH0PMU.js","sources":["../../src/components/task-runs/task-run-artifacts/index.tsx","../../src/components/task-runs/task-run-details/task-run-details.tsx","../../src/components/task-runs/task-run-logs/index.tsx","../../src/components/task-runs/task-run-details-page/index.tsx","../../src/routes/runs/task-run.$id.tsx?tsr-split=component"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { LayoutGrid, Rows3 } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { ArtifactCard } from \"@/components/artifacts/artifact-card\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { cn } from \"@/utils\";\n\ntype TaskRunArtifactsProps = {\n\ttaskRun: TaskRun;\n};\n\nexport const TaskRunArtifacts = ({ taskRun }: TaskRunArtifactsProps) => {\n\tconst [view, setView] = useState<\"grid\" | \"list\">(\"grid\");\n\tconst { data: artifacts } = useSuspenseQuery(\n\t\tbuildListArtifactsQuery({\n\t\t\tartifacts: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\ttask_run_id: {\n\t\t\t\t\tany_: [taskRun.id],\n\t\t\t\t},\n\t\t\t\ttype: {\n\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort: \"ID_DESC\",\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\tif (artifacts.length === 0) {\n\t\treturn (\n\t\t\t<Card>\n\t\t\t\t<CardContent className=\"text-center\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tThis task run did not produce any artifacts; for more information on\n\t\t\t\t\t\tcreating artifacts, see the{\" \"}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"https://docs.prefect.io/v3/develop/artifacts\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName=\"text-blue-500\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tdocumentation\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<ToggleGroup\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tvalue={view}\n\t\t\t\t\tonValueChange={(value) => setView(value as \"grid\" | \"list\")}\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupItem value=\"grid\" aria-label=\"Grid view\">\n\t\t\t\t\t\t<LayoutGrid className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t<ToggleGroupItem value=\"list\" aria-label=\"List view\">\n\t\t\t\t\t\t<Rows3 className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t</ToggleGroup>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid\",\n\t\t\t\t\tview === \"grid\"\n\t\t\t\t\t\t? \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3\"\n\t\t\t\t\t\t: \"grid-cols-1\",\n\t\t\t\t\t\"gap-4\",\n\t\t\t\t)}\n\t\t\t\tdata-testid=\"task-run-artifacts-grid\"\n\t\t\t>\n\t\t\t\t{artifacts.map((artifact) => (\n\t\t\t\t\t<ArtifactCard\n\t\t\t\t\t\tkey={artifact.id}\n\t\t\t\t\t\tartifact={artifact}\n\t\t\t\t\t\tcompact={view === \"list\"}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { Link } from \"@tanstack/react-router\";\nimport humanizeDuration from \"humanize-duration\";\nimport { buildGetTaskRunResultQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyMarkdown } from \"@/components/ui/lazy-markdown\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\nimport { formatDate } from \"@/utils/date\";\n\nfunction formatTaskDate(dateString: string | null | undefined): string {\n\tif (!dateString) return \"N/A\";\n\treturn formatDate(dateString, \"dateTimeNumeric\");\n}\n\nfunction formatTaskDuration(seconds: number | null | undefined): string {\n\tif (seconds === null || seconds === undefined) return \"N/A\";\n\treturn humanizeDuration(seconds * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"s\"],\n\t});\n}\n\nexport type TaskRunDetailsProps = {\n\ttaskRun: TaskRun | null | undefined;\n};\n\nexport const TaskRunDetails = ({ taskRun }: TaskRunDetailsProps) => {\n\tconst { data: resultArtifact } = useQuery({\n\t\t...buildGetTaskRunResultQuery(taskRun?.id ?? \"\"),\n\t\tenabled: !!taskRun?.id,\n\t});\n\n\tif (!taskRun) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-2 bg-gray-100 p-4 rounded-md\">\n\t\t\t\t<span className=\"text-gray-500\">No task run details available</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 p-2 text-xs\">\n\t\t\t{taskRun.flow_run_id ? (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\tclassName=\"text-blue-500 hover:underline cursor-pointer flex items-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon id=\"ExternalLink\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t) : (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>None</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Start Time</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.start_time ? formatTaskDate(taskRun.start_time) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Duration</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t<span className=\"flex items-center\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t{taskRun.total_run_time !== null &&\n\t\t\t\t\t\ttaskRun.total_run_time !== undefined\n\t\t\t\t\t\t\t? formatTaskDuration(taskRun.total_run_time)\n\t\t\t\t\t\t\t: \"None\"}\n\t\t\t\t\t</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Run Count</dt>\n\t\t\t\t<dd className=\"\">{taskRun.run_count ?? 0}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Estimated Run Time</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.estimated_run_time !== null &&\n\t\t\t\t\ttaskRun.estimated_run_time !== undefined\n\t\t\t\t\t\t? formatTaskDuration(taskRun.estimated_run_time)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Created</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.created ? formatTaskDate(taskRun.created) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Last Updated</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.updated ? formatTaskDate(taskRun.updated) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.cache_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Expiration</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.cache_expiration\n\t\t\t\t\t\t? formatTaskDate(taskRun.cache_expiration)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Dynamic Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.dynamic_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Task Run ID</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.id}</dd>\n\t\t\t</dl>\n\n\t\t\t{resultArtifact?.description && (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-muted-foreground\">Result</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<div className=\"prose max-w-none dark:prose-invert\">\n\t\t\t\t\t\t\t<LazyMarkdown>{resultArtifact.description}</LazyMarkdown>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<div className=\"border-t border-gray-200 mt-2 pt-4\" />\n\t\t\t<h3 className=\"text-sm font-semibold mb-2\">Task configuration</h3>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Version</dt>\n\t\t\t\t<dd className=\"\">{taskRun.task_version || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retries</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retries?.toString() ?? \"0\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Delay</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{typeof taskRun.empirical_policy?.retry_delay === \"number\"\n\t\t\t\t\t\t? formatTaskDuration(taskRun.empirical_policy.retry_delay)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Jitter Factor</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retry_jitter_factor !== null &&\n\t\t\t\t\ttaskRun.empirical_policy?.retry_jitter_factor !== undefined\n\t\t\t\t\t\t? taskRun.empirical_policy.retry_jitter_factor.toString()\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Tags</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.tags && taskRun.tags.length > 0 ? (\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t\t{taskRun.tags.map((tag) => (\n\t\t\t\t\t\t\t\t<TagBadge key={tag} tag={tag} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"None\"\n\t\t\t\t\t)}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t</div>\n\t);\n};\n","import { useSuspenseInfiniteQuery } from \"@tanstack/react-query\";\nimport { useMemo, useState } from \"react\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport type { components } from \"@/api/prefect\";\nimport { RunLogs } from \"@/components/ui/run-logs\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\ntype TaskRunLogsProps = {\n\ttaskRun: components[\"schemas\"][\"TaskRun\"];\n\tvirtualize?: boolean;\n};\n\nexport const TaskRunLogs = ({\n\ttaskRun,\n\tvirtualize = true,\n}: TaskRunLogsProps) => {\n\tconst [levelFilter, setLevelFilter] = useState<number>(0);\n\tconst [sortOrder, setSortOrder] = useState<\n\t\t\"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\"\n\t>(\"TIMESTAMP_ASC\");\n\n\tconst queryOptions = useMemo(\n\t\t() => ({\n\t\t\t...buildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: sortOrder,\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: { ge_: levelFilter },\n\t\t\t\t\ttask_run_id: { any_: [taskRun.id] },\n\t\t\t\t},\n\t\t\t}),\n\t\t\trefetchInterval:\n\t\t\t\ttaskRun.state_type === \"RUNNING\" ? 5000 : (false as const),\n\t\t}),\n\t\t[levelFilter, sortOrder, taskRun.id, taskRun.state_type],\n\t);\n\n\tconst {\n\t\tdata: logs,\n\t\thasNextPage,\n\t\tfetchNextPage,\n\t\tisFetchingNextPage,\n\t} = useSuspenseInfiniteQuery(queryOptions);\n\n\tconst noLogs = logs.pages.length === 1 && logs.pages[0].length === 0;\n\tlet message = \"This run did not produce any logs.\";\n\tif (noLogs) {\n\t\tif (levelFilter > 0) {\n\t\t\tmessage = \"No logs match your filter criteria\";\n\t\t} else if (\n\t\t\ttaskRun.state_type === \"SCHEDULED\" &&\n\t\t\ttaskRun.state_name === \"Scheduled\"\n\t\t) {\n\t\t\tmessage = \"Run has not yet started. Check back soon for logs.\";\n\t\t} else if (taskRun.state_type === \"RUNNING\") {\n\t\t\tmessage = \"Waiting for logs...\";\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<LogLevelFilter\n\t\t\t\t\tlevelFilter={levelFilter}\n\t\t\t\t\tsetLevelFilter={setLevelFilter}\n\t\t\t\t/>\n\t\t\t\t<LogSortOrder sortOrder={sortOrder} setSortOrder={setSortOrder} />\n\t\t\t</div>\n\t\t\t{noLogs ? (\n\t\t\t\t<div className=\"flex flex-col gap-2 text-center bg-muted p-2 rounded-md\">\n\t\t\t\t\t<span className=\"text-muted-foreground\">{message}</span>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div className=\"rounded-md\">\n\t\t\t\t\t<RunLogs\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tlogs={logs.pages.flat()}\n\t\t\t\t\t\tonBottomReached={() => {\n\t\t\t\t\t\t\tif (hasNextPage && !isFetchingNextPage) {\n\t\t\t\t\t\t\t\tfetchNextPage().catch((error) => {\n\t\t\t\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"max-h-[85vh]\"\n\t\t\t\t\t\tvirtualize={virtualize}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nconst LEVEL_FILTER_OPTIONS = [\n\t{ label: \"All\", value: 0 },\n\t{ label: \"Critical only\", value: 50 },\n\t{ label: \"Error and above\", value: 40 },\n\t{ label: \"Warning and above\", value: 30 },\n\t{ label: \"Info and above\", value: 20 },\n\t{ label: \"Debug and above\", value: 10 },\n] as const;\n\nconst LogLevelFilter = ({\n\tlevelFilter,\n\tsetLevelFilter,\n}: {\n\tlevelFilter: number;\n\tsetLevelFilter: (level: number) => void;\n}) => {\n\treturn (\n\t\t<Select\n\t\t\tvalue={levelFilter.toString()}\n\t\t\tonValueChange={(value) => setLevelFilter(Number(value))}\n\t\t>\n\t\t\t<SelectTrigger aria-label=\"log level filter\">\n\t\t\t\t<span>\n\t\t\t\t\t{`Level:\n\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\tLEVEL_FILTER_OPTIONS.find(\n\t\t\t\t\t\t\t\t\t(option) => option.value === levelFilter,\n\t\t\t\t\t\t\t\t)?.label\n\t\t\t\t\t\t\t}`}\n\t\t\t\t</span>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t{LEVEL_FILTER_OPTIONS.map((option) => (\n\t\t\t\t\t<SelectItem key={option.value} value={option.value.toString()}>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n\nconst LogSortOrder = ({\n\tsortOrder,\n\tsetSortOrder,\n}: {\n\tsortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\";\n\tsetSortOrder: (sortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\") => void;\n}) => (\n\t<Select\n\t\tvalue={sortOrder}\n\t\tonValueChange={(value) =>\n\t\t\tsetSortOrder(value as \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\")\n\t\t}\n\t>\n\t\t<SelectTrigger aria-label=\"log sort order\">\n\t\t\t<SelectValue placeholder=\"Sort log order\" />\n\t\t</SelectTrigger>\n\t\t<SelectContent>\n\t\t\t<SelectItem value=\"TIMESTAMP_ASC\">Oldest to newest</SelectItem>\n\t\t\t<SelectItem value=\"TIMESTAMP_DESC\">Newest to oldest</SelectItem>\n\t\t</SelectContent>\n\t</Select>\n);\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport { MoreVertical } from \"lucide-react\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport {\n\tbuildGetTaskRunDetailsQuery,\n\ttype TaskRun,\n\tuseDeleteTaskRun,\n\tuseSetTaskRunState,\n} from \"@/api/task-runs\";\nimport { TaskRunArtifacts } from \"@/components/task-runs/task-run-artifacts\";\nimport { TaskRunDetails } from \"@/components/task-runs/task-run-details/task-run-details\";\nimport { TaskRunLogs } from \"@/components/task-runs/task-run-logs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tChangeStateDialog,\n\tuseChangeStateDialog,\n} from \"@/components/ui/change-state-dialog\";\nimport {\n\tDeleteConfirmationDialog,\n\tuseDeleteConfirmationDialog,\n} from \"@/components/ui/delete-confirmation-dialog\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyJsonInput as JsonInput } from \"@/components/ui/json-input-lazy\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { usePageTitle } from \"@/hooks/use-page-title\";\nimport { useStateFavicon } from \"@/hooks/use-state-favicon\";\n\ntype TaskRunDetailsPageProps = {\n\tid: string;\n\ttab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n};\n\ntype TaskRunDetailsTabOptions = \"Logs\" | \"Artifacts\" | \"TaskInputs\" | \"Details\";\n\nexport const TaskRunDetailsPage = ({\n\tid,\n\ttab,\n\tonTabChange,\n}: TaskRunDetailsPageProps) => {\n\tconst [refetchInterval, setRefetchInterval] = useState<number | false>(false);\n\tconst { data: taskRun } = useSuspenseQuery({\n\t\t...buildGetTaskRunDetailsQuery(id),\n\t\trefetchInterval,\n\t});\n\tconst { deleteTaskRun } = useDeleteTaskRun();\n\tconst { navigate } = useRouter();\n\n\t// Set page title based on task run name\n\tusePageTitle(taskRun?.name ? `Task Run: ${taskRun.name}` : \"Task Run\");\n\n\t// Set favicon based on task run state\n\tuseStateFavicon(taskRun?.state_type);\n\n\tuseEffect(() => {\n\t\tif (taskRun.state_type === \"RUNNING\" || taskRun.state_type === \"PENDING\") {\n\t\t\tsetRefetchInterval(5000);\n\t\t} else {\n\t\t\tsetRefetchInterval(false);\n\t\t}\n\t}, [taskRun]);\n\n\tconst onDeleteRunClicked = () => {\n\t\tdeleteTaskRun(\n\t\t\t{ id: taskRun.id },\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\tsetRefetchInterval(false);\n\t\t\t\t\ttoast.success(\"Task run deleted\");\n\t\t\t\t\tif (taskRun.flow_run_id) {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\t\t\t\tparams: { id: taskRun.flow_run_id },\n\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvoid navigate({ to: \"/runs\", replace: true });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while deleting task run.\";\n\t\t\t\t\ttoast.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t<Header taskRun={taskRun} onDeleteRunClicked={onDeleteRunClicked} />\n\t\t\t</div>\n\t\t\t<div className=\"grid lg:grid-cols-[1fr_250px] grid-cols-[1fr] gap-4\">\n\t\t\t\t<TabsLayout\n\t\t\t\t\tcurrentTab={tab}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t\tlogsContent={\n\t\t\t\t\t\t<Suspense fallback={<LogsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunLogs taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\tartifactsContent={\n\t\t\t\t\t\t<Suspense fallback={<ArtifactsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunArtifacts taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\ttaskInputsContent={<TaskInputs taskRun={taskRun} />}\n\t\t\t\t\tdetailsContent={<TaskRunDetails taskRun={taskRun} />}\n\t\t\t\t/>\n\t\t\t\t<div className=\"hidden lg:block\">\n\t\t\t\t\t<TaskRunDetails taskRun={taskRun} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst Header = ({\n\ttaskRun,\n\tonDeleteRunClicked,\n}: {\n\ttaskRun: TaskRun;\n\tonDeleteRunClicked: () => void;\n}) => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\tconst {\n\t\topen: isChangeStateOpen,\n\t\tonOpenChange: setChangeStateOpen,\n\t\topenDialog: openChangeState,\n\t} = useChangeStateDialog();\n\tconst { setTaskRunState, isPending: isChangingState } = useSetTaskRunState();\n\n\tconst canChangeState =\n\t\ttaskRun.state_type &&\n\t\t[\"COMPLETED\", \"FAILED\", \"CANCELLED\", \"CRASHED\"].includes(\n\t\t\ttaskRun.state_type,\n\t\t);\n\n\tconst handleChangeState = (newState: { type: string; message?: string }) => {\n\t\tsetTaskRunState(\n\t\t\t{\n\t\t\t\tid: taskRun.id,\n\t\t\t\tstate: {\n\t\t\t\t\ttype: newState.type as\n\t\t\t\t\t\t| \"COMPLETED\"\n\t\t\t\t\t\t| \"FAILED\"\n\t\t\t\t\t\t| \"CANCELLED\"\n\t\t\t\t\t\t| \"CRASHED\",\n\t\t\t\t\tname: newState.type.charAt(0) + newState.type.slice(1).toLowerCase(),\n\t\t\t\t\tmessage: newState.message,\n\t\t\t\t},\n\t\t\t\tforce: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Task run state changed\");\n\t\t\t\t\tsetChangeStateOpen(false);\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\ttoast.error(error.message || \"Failed to change state\");\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between\">\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=\"/runs\"\n\t\t\t\t\t\t\tsearch={{ tab: \"task-runs\" }}\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\tRuns\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{taskRun.flow_run_id && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl\">\n\t\t\t\t\t\t<BreadcrumbPage className=\"font-semibold\">\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbPage>\n\t\t\t\t\t\t{taskRun.state && (\n\t\t\t\t\t\t\t<StateBadge\n\t\t\t\t\t\t\t\ttype={taskRun.state.type}\n\t\t\t\t\t\t\t\tname={taskRun.state.name}\n\t\t\t\t\t\t\t\tclassName=\"ml-2\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button variant=\"outline\" className=\"p-2\">\n\t\t\t\t\t\t<MoreVertical className=\"w-4 h-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t{canChangeState && (\n\t\t\t\t\t\t<DropdownMenuItem onClick={openChangeState}>\n\t\t\t\t\t\t\tChange state\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t)}\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\ttoast.success(\"Copied task run ID to clipboard\");\n\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(taskRun.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tCopy ID\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tconfirmDelete({\n\t\t\t\t\t\t\t\ttitle: \"Delete Task Run\",\n\t\t\t\t\t\t\t\tdescription: `Are you sure you want to delete task run ${taskRun.name}?`,\n\t\t\t\t\t\t\t\tonConfirm: onDeleteRunClicked,\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\t\tDelete\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t\t<DeleteConfirmationDialog {...dialogState} />\n\t\t\t<ChangeStateDialog\n\t\t\t\topen={isChangeStateOpen}\n\t\t\t\tonOpenChange={setChangeStateOpen}\n\t\t\t\tcurrentState={\n\t\t\t\t\ttaskRun.state\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: taskRun.state.type,\n\t\t\t\t\t\t\t\tname:\n\t\t\t\t\t\t\t\t\ttaskRun.state.name ??\n\t\t\t\t\t\t\t\t\ttaskRun.state.type.charAt(0) +\n\t\t\t\t\t\t\t\t\t\ttaskRun.state.type.slice(1).toLowerCase(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t\tlabel=\"Task Run\"\n\t\t\t\tonConfirm={handleChangeState}\n\t\t\t\tisLoading={isChangingState}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst TabsLayout = ({\n\tcurrentTab,\n\tonTabChange,\n\tlogsContent,\n\tartifactsContent,\n\ttaskInputsContent,\n\tdetailsContent,\n}: {\n\tcurrentTab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n\tlogsContent: React.ReactNode;\n\tartifactsContent: React.ReactNode;\n\ttaskInputsContent: React.ReactNode;\n\tdetailsContent: React.ReactNode;\n}) => {\n\t// Change tab on screen size change when the details tab is selected\n\tuseEffect(() => {\n\t\tconst bp = getComputedStyle(document.documentElement)\n\t\t\t.getPropertyValue(\"--breakpoint-lg\")\n\t\t\t.trim();\n\t\tconst mql = window.matchMedia(`(max-width: ${bp})`);\n\t\tconst onChange = () => {\n\t\t\tif (currentTab === \"Details\") {\n\t\t\t\tonTabChange(\"Logs\");\n\t\t\t}\n\t\t};\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, [currentTab, onTabChange]);\n\n\treturn (\n\t\t<Tabs\n\t\t\tvalue={currentTab}\n\t\t\tonValueChange={(value) => onTabChange(value as TaskRunDetailsTabOptions)}\n\t\t>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger value=\"Details\" className=\"lg:hidden\">\n\t\t\t\t\tDetails\n\t\t\t\t</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Logs\">Logs</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Artifacts\">Artifacts</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"TaskInputs\">\n\t\t\t\t\tTask Inputs\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<Icon id=\"Info\" className=\"w-4 h-4\" />\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\tTask inputs show parameter keys and can also show task run\n\t\t\t\t\t\t\trelationships.\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value=\"Details\">{detailsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Logs\">{logsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Artifacts\">{artifactsContent}</TabsContent>\n\t\t\t<TabsContent value=\"TaskInputs\">{taskInputsContent}</TabsContent>\n\t\t</Tabs>\n\t);\n};\n\nconst LogsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-25\" />\n\t\t\t\t<Skeleton className=\"h-8 w-32\" />\n\t\t\t</div>\n\t\t\t<Skeleton className=\"h-32\" />\n\t\t</div>\n\t);\n};\n\nconst ArtifactsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-12\" />\n\t\t\t</div>\n\n\t\t\t<div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2 xl:grid-cols-3\">\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst TaskInputs = ({ taskRun }: { taskRun: TaskRun }) => {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={JSON.stringify(taskRun.task_inputs, null, 2)}\n\t\t\tdisabled\n\t\t\tcopy\n\t\t/>\n\t);\n};\n","import type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { TaskRunDetailsPage } from \"@/components/task-runs/task-run-details-page\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\nconst searchParams = z.object({\n\ttab: z\n\t\t.enum([\"Logs\", \"Artifacts\", \"TaskInputs\", \"Details\"])\n\t\t.default(\"Logs\")\n\t\t.catch(\"Logs\"),\n});\n\nexport type TaskRunDetailsTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nfunction TaskRunErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load task run\");\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h1 className=\"text-2xl font-semibold\">Task Run</h1>\n\t\t\t</div>\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/runs/task-run/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// ----- Deferred data\n\t\tvoid queryClient.prefetchInfiniteQuery(\n\t\t\tbuildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: \"TIMESTAMP_ASC\",\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: {\n\t\t\t\t\t\tge_: 0,\n\t\t\t\t\t},\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tvoid queryClient.prefetchQuery(\n\t\t\tbuildListArtifactsQuery({\n\t\t\t\tartifacts: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t);\n\n\t\t// ----- Critical data\n\t\tawait queryClient.ensureQueryData(buildGetTaskRunDetailsQuery(params.id));\n\t},\n\twrapInSuspense: true,\n\terrorComponent: TaskRunErrorComponent,\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\tconst { tab } = Route.useSearch();\n\tconst navigate = useNavigate();\n\n\tconst onTabChange = (tab: TaskRunDetailsTabOptions) => {\n\t\tvoid navigate({\n\t\t\tto: \".\",\n\t\t\tsearch: (prev) => ({\n\t\t\t\t...prev,\n\t\t\t\ttab,\n\t\t\t}),\n\t\t});\n\t};\n\n\treturn <TaskRunDetailsPage id={id} tab={tab} onTabChange={onTabChange} />;\n}\n"],"names":["TaskRunArtifacts","taskRun","view","setView","useState","artifacts","useSuspenseQuery","buildListArtifactsQuery","Card","jsx","CardContent","jsxs","ToggleGroup","value","ToggleGroupItem","LayoutGrid","Rows3","cn","artifact","ArtifactCard","formatTaskDate","dateString","formatDate","formatTaskDuration","seconds","humanizeDuration","TaskRunDetails","resultArtifact","useQuery","buildGetTaskRunResultQuery","Link","Icon","LazyMarkdown","tag","TagBadge","TaskRunLogs","virtualize","levelFilter","setLevelFilter","sortOrder","setSortOrder","queryOptions","useMemo","buildInfiniteFilterLogsQuery","logs","hasNextPage","fetchNextPage","isFetchingNextPage","useSuspenseInfiniteQuery","noLogs","message","LogLevelFilter","LogSortOrder","RunLogs","error","LEVEL_FILTER_OPTIONS","Select","SelectTrigger","option","SelectContent","SelectItem","SelectValue","TaskRunDetailsPage","id","tab","onTabChange","refetchInterval","setRefetchInterval","buildGetTaskRunDetailsQuery","deleteTaskRun","useDeleteTaskRun","navigate","useRouter","usePageTitle","useStateFavicon","useEffect","onDeleteRunClicked","toast","Header","TabsLayout","Suspense","LogsSkeleton","ArtifactsSkeleton","TaskInputs","dialogState","confirmDelete","useDeleteConfirmationDialog","isChangeStateOpen","setChangeStateOpen","openChangeState","useChangeStateDialog","setTaskRunState","isChangingState","useSetTaskRunState","canChangeState","handleChangeState","newState","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","Fragment","BreadcrumbPage","StateBadge","DropdownMenu","DropdownMenuTrigger","Button","MoreVertical","DropdownMenuContent","DropdownMenuItem","DeleteConfirmationDialog","ChangeStateDialog","currentTab","logsContent","artifactsContent","taskInputsContent","detailsContent","bp","mql","onChange","Tabs","TabsList","TabsTrigger","Tooltip","TooltipTrigger","TooltipContent","TabsContent","Skeleton","JsonInput","z","default","catch","RouteComponent","Route","useParams","useSearch","useNavigate","to","search","prev"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task-run._id-9DcrUEGz.js","sources":["../../src/components/task-runs/task-run-artifacts/index.tsx","../../src/components/task-runs/task-run-details/task-run-details.tsx","../../src/components/task-runs/task-run-logs/index.tsx","../../src/components/task-runs/task-run-details-page/index.tsx","../../src/routes/runs/task-run.$id.tsx?tsr-split=component"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { LayoutGrid, Rows3 } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { ArtifactCard } from \"@/components/artifacts/artifact-card\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { cn } from \"@/utils\";\n\ntype TaskRunArtifactsProps = {\n\ttaskRun: TaskRun;\n};\n\nexport const TaskRunArtifacts = ({ taskRun }: TaskRunArtifactsProps) => {\n\tconst [view, setView] = useState<\"grid\" | \"list\">(\"grid\");\n\tconst { data: artifacts } = useSuspenseQuery(\n\t\tbuildListArtifactsQuery({\n\t\t\tartifacts: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\ttask_run_id: {\n\t\t\t\t\tany_: [taskRun.id],\n\t\t\t\t},\n\t\t\t\ttype: {\n\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort: \"ID_DESC\",\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\tif (artifacts.length === 0) {\n\t\treturn (\n\t\t\t<Card>\n\t\t\t\t<CardContent className=\"text-center\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tThis task run did not produce any artifacts; for more information on\n\t\t\t\t\t\tcreating artifacts, see the{\" \"}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"https://docs.prefect.io/v3/develop/artifacts\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName=\"text-blue-500\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tdocumentation\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<ToggleGroup\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tvalue={view}\n\t\t\t\t\tonValueChange={(value) => setView(value as \"grid\" | \"list\")}\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupItem value=\"grid\" aria-label=\"Grid view\">\n\t\t\t\t\t\t<LayoutGrid className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t<ToggleGroupItem value=\"list\" aria-label=\"List view\">\n\t\t\t\t\t\t<Rows3 className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t</ToggleGroup>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid\",\n\t\t\t\t\tview === \"grid\"\n\t\t\t\t\t\t? \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3\"\n\t\t\t\t\t\t: \"grid-cols-1\",\n\t\t\t\t\t\"gap-4\",\n\t\t\t\t)}\n\t\t\t\tdata-testid=\"task-run-artifacts-grid\"\n\t\t\t>\n\t\t\t\t{artifacts.map((artifact) => (\n\t\t\t\t\t<ArtifactCard\n\t\t\t\t\t\tkey={artifact.id}\n\t\t\t\t\t\tartifact={artifact}\n\t\t\t\t\t\tcompact={view === \"list\"}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { Link } from \"@tanstack/react-router\";\nimport humanizeDuration from \"humanize-duration\";\nimport { buildGetTaskRunResultQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyMarkdown } from \"@/components/ui/lazy-markdown\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\nimport { formatDate } from \"@/utils/date\";\n\nfunction formatTaskDate(dateString: string | null | undefined): string {\n\tif (!dateString) return \"N/A\";\n\treturn formatDate(dateString, \"dateTimeNumeric\");\n}\n\nfunction formatTaskDuration(seconds: number | null | undefined): string {\n\tif (seconds === null || seconds === undefined) return \"N/A\";\n\treturn humanizeDuration(seconds * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"s\"],\n\t});\n}\n\nexport type TaskRunDetailsProps = {\n\ttaskRun: TaskRun | null | undefined;\n};\n\nexport const TaskRunDetails = ({ taskRun }: TaskRunDetailsProps) => {\n\tconst { data: resultArtifact } = useQuery({\n\t\t...buildGetTaskRunResultQuery(taskRun?.id ?? \"\"),\n\t\tenabled: !!taskRun?.id,\n\t});\n\n\tif (!taskRun) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-2 bg-gray-100 p-4 rounded-md\">\n\t\t\t\t<span className=\"text-gray-500\">No task run details available</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 p-2 text-xs\">\n\t\t\t{taskRun.flow_run_id ? (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\tclassName=\"text-blue-500 hover:underline cursor-pointer flex items-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon id=\"ExternalLink\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t) : (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>None</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Start Time</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.start_time ? formatTaskDate(taskRun.start_time) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Duration</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t<span className=\"flex items-center\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t{taskRun.total_run_time !== null &&\n\t\t\t\t\t\ttaskRun.total_run_time !== undefined\n\t\t\t\t\t\t\t? formatTaskDuration(taskRun.total_run_time)\n\t\t\t\t\t\t\t: \"None\"}\n\t\t\t\t\t</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Run Count</dt>\n\t\t\t\t<dd className=\"\">{taskRun.run_count ?? 0}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Estimated Run Time</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.estimated_run_time !== null &&\n\t\t\t\t\ttaskRun.estimated_run_time !== undefined\n\t\t\t\t\t\t? formatTaskDuration(taskRun.estimated_run_time)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Created</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.created ? formatTaskDate(taskRun.created) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Last Updated</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.updated ? formatTaskDate(taskRun.updated) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.cache_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Expiration</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.cache_expiration\n\t\t\t\t\t\t? formatTaskDate(taskRun.cache_expiration)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Dynamic Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.dynamic_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Task Run ID</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.id}</dd>\n\t\t\t</dl>\n\n\t\t\t{resultArtifact?.description && (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-muted-foreground\">Result</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<div className=\"prose max-w-none dark:prose-invert\">\n\t\t\t\t\t\t\t<LazyMarkdown>{resultArtifact.description}</LazyMarkdown>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<div className=\"border-t border-gray-200 mt-2 pt-4\" />\n\t\t\t<h3 className=\"text-sm font-semibold mb-2\">Task configuration</h3>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Version</dt>\n\t\t\t\t<dd className=\"\">{taskRun.task_version || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retries</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retries?.toString() ?? \"0\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Delay</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{typeof taskRun.empirical_policy?.retry_delay === \"number\"\n\t\t\t\t\t\t? formatTaskDuration(taskRun.empirical_policy.retry_delay)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Jitter Factor</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retry_jitter_factor !== null &&\n\t\t\t\t\ttaskRun.empirical_policy?.retry_jitter_factor !== undefined\n\t\t\t\t\t\t? taskRun.empirical_policy.retry_jitter_factor.toString()\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Tags</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.tags && taskRun.tags.length > 0 ? (\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t\t{taskRun.tags.map((tag) => (\n\t\t\t\t\t\t\t\t<TagBadge key={tag} tag={tag} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"None\"\n\t\t\t\t\t)}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t</div>\n\t);\n};\n","import { useSuspenseInfiniteQuery } from \"@tanstack/react-query\";\nimport { useMemo, useState } from \"react\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport type { components } from \"@/api/prefect\";\nimport { RunLogs } from \"@/components/ui/run-logs\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\ntype TaskRunLogsProps = {\n\ttaskRun: components[\"schemas\"][\"TaskRun\"];\n\tvirtualize?: boolean;\n};\n\nexport const TaskRunLogs = ({\n\ttaskRun,\n\tvirtualize = true,\n}: TaskRunLogsProps) => {\n\tconst [levelFilter, setLevelFilter] = useState<number>(0);\n\tconst [sortOrder, setSortOrder] = useState<\n\t\t\"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\"\n\t>(\"TIMESTAMP_ASC\");\n\n\tconst queryOptions = useMemo(\n\t\t() => ({\n\t\t\t...buildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: sortOrder,\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: { ge_: levelFilter },\n\t\t\t\t\ttask_run_id: { any_: [taskRun.id] },\n\t\t\t\t},\n\t\t\t}),\n\t\t\trefetchInterval:\n\t\t\t\ttaskRun.state_type === \"RUNNING\" ? 5000 : (false as const),\n\t\t}),\n\t\t[levelFilter, sortOrder, taskRun.id, taskRun.state_type],\n\t);\n\n\tconst {\n\t\tdata: logs,\n\t\thasNextPage,\n\t\tfetchNextPage,\n\t\tisFetchingNextPage,\n\t} = useSuspenseInfiniteQuery(queryOptions);\n\n\tconst noLogs = logs.pages.length === 1 && logs.pages[0].length === 0;\n\tlet message = \"This run did not produce any logs.\";\n\tif (noLogs) {\n\t\tif (levelFilter > 0) {\n\t\t\tmessage = \"No logs match your filter criteria\";\n\t\t} else if (\n\t\t\ttaskRun.state_type === \"SCHEDULED\" &&\n\t\t\ttaskRun.state_name === \"Scheduled\"\n\t\t) {\n\t\t\tmessage = \"Run has not yet started. Check back soon for logs.\";\n\t\t} else if (taskRun.state_type === \"RUNNING\") {\n\t\t\tmessage = \"Waiting for logs...\";\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<LogLevelFilter\n\t\t\t\t\tlevelFilter={levelFilter}\n\t\t\t\t\tsetLevelFilter={setLevelFilter}\n\t\t\t\t/>\n\t\t\t\t<LogSortOrder sortOrder={sortOrder} setSortOrder={setSortOrder} />\n\t\t\t</div>\n\t\t\t{noLogs ? (\n\t\t\t\t<div className=\"flex flex-col gap-2 text-center bg-muted p-2 rounded-md\">\n\t\t\t\t\t<span className=\"text-muted-foreground\">{message}</span>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div className=\"rounded-md\">\n\t\t\t\t\t<RunLogs\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tlogs={logs.pages.flat()}\n\t\t\t\t\t\tonBottomReached={() => {\n\t\t\t\t\t\t\tif (hasNextPage && !isFetchingNextPage) {\n\t\t\t\t\t\t\t\tfetchNextPage().catch((error) => {\n\t\t\t\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"max-h-[85vh]\"\n\t\t\t\t\t\tvirtualize={virtualize}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nconst LEVEL_FILTER_OPTIONS = [\n\t{ label: \"All\", value: 0 },\n\t{ label: \"Critical only\", value: 50 },\n\t{ label: \"Error and above\", value: 40 },\n\t{ label: \"Warning and above\", value: 30 },\n\t{ label: \"Info and above\", value: 20 },\n\t{ label: \"Debug and above\", value: 10 },\n] as const;\n\nconst LogLevelFilter = ({\n\tlevelFilter,\n\tsetLevelFilter,\n}: {\n\tlevelFilter: number;\n\tsetLevelFilter: (level: number) => void;\n}) => {\n\treturn (\n\t\t<Select\n\t\t\tvalue={levelFilter.toString()}\n\t\t\tonValueChange={(value) => setLevelFilter(Number(value))}\n\t\t>\n\t\t\t<SelectTrigger aria-label=\"log level filter\">\n\t\t\t\t<span>\n\t\t\t\t\t{`Level:\n\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\tLEVEL_FILTER_OPTIONS.find(\n\t\t\t\t\t\t\t\t\t(option) => option.value === levelFilter,\n\t\t\t\t\t\t\t\t)?.label\n\t\t\t\t\t\t\t}`}\n\t\t\t\t</span>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t{LEVEL_FILTER_OPTIONS.map((option) => (\n\t\t\t\t\t<SelectItem key={option.value} value={option.value.toString()}>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n\nconst LogSortOrder = ({\n\tsortOrder,\n\tsetSortOrder,\n}: {\n\tsortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\";\n\tsetSortOrder: (sortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\") => void;\n}) => (\n\t<Select\n\t\tvalue={sortOrder}\n\t\tonValueChange={(value) =>\n\t\t\tsetSortOrder(value as \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\")\n\t\t}\n\t>\n\t\t<SelectTrigger aria-label=\"log sort order\">\n\t\t\t<SelectValue placeholder=\"Sort log order\" />\n\t\t</SelectTrigger>\n\t\t<SelectContent>\n\t\t\t<SelectItem value=\"TIMESTAMP_ASC\">Oldest to newest</SelectItem>\n\t\t\t<SelectItem value=\"TIMESTAMP_DESC\">Newest to oldest</SelectItem>\n\t\t</SelectContent>\n\t</Select>\n);\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport { MoreVertical } from \"lucide-react\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport {\n\tbuildGetTaskRunDetailsQuery,\n\ttype TaskRun,\n\tuseDeleteTaskRun,\n\tuseSetTaskRunState,\n} from \"@/api/task-runs\";\nimport { TaskRunArtifacts } from \"@/components/task-runs/task-run-artifacts\";\nimport { TaskRunDetails } from \"@/components/task-runs/task-run-details/task-run-details\";\nimport { TaskRunLogs } from \"@/components/task-runs/task-run-logs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tChangeStateDialog,\n\tuseChangeStateDialog,\n} from \"@/components/ui/change-state-dialog\";\nimport {\n\tDeleteConfirmationDialog,\n\tuseDeleteConfirmationDialog,\n} from \"@/components/ui/delete-confirmation-dialog\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyJsonInput as JsonInput } from \"@/components/ui/json-input-lazy\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { usePageTitle } from \"@/hooks/use-page-title\";\nimport { useStateFavicon } from \"@/hooks/use-state-favicon\";\n\ntype TaskRunDetailsPageProps = {\n\tid: string;\n\ttab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n};\n\ntype TaskRunDetailsTabOptions = \"Logs\" | \"Artifacts\" | \"TaskInputs\" | \"Details\";\n\nexport const TaskRunDetailsPage = ({\n\tid,\n\ttab,\n\tonTabChange,\n}: TaskRunDetailsPageProps) => {\n\tconst [refetchInterval, setRefetchInterval] = useState<number | false>(false);\n\tconst { data: taskRun } = useSuspenseQuery({\n\t\t...buildGetTaskRunDetailsQuery(id),\n\t\trefetchInterval,\n\t});\n\tconst { deleteTaskRun } = useDeleteTaskRun();\n\tconst { navigate } = useRouter();\n\n\t// Set page title based on task run name\n\tusePageTitle(taskRun?.name ? `Task Run: ${taskRun.name}` : \"Task Run\");\n\n\t// Set favicon based on task run state\n\tuseStateFavicon(taskRun?.state_type);\n\n\tuseEffect(() => {\n\t\tif (taskRun.state_type === \"RUNNING\" || taskRun.state_type === \"PENDING\") {\n\t\t\tsetRefetchInterval(5000);\n\t\t} else {\n\t\t\tsetRefetchInterval(false);\n\t\t}\n\t}, [taskRun]);\n\n\tconst onDeleteRunClicked = () => {\n\t\tdeleteTaskRun(\n\t\t\t{ id: taskRun.id },\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\tsetRefetchInterval(false);\n\t\t\t\t\ttoast.success(\"Task run deleted\");\n\t\t\t\t\tif (taskRun.flow_run_id) {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\t\t\t\tparams: { id: taskRun.flow_run_id },\n\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvoid navigate({ to: \"/runs\", replace: true });\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while deleting task run.\";\n\t\t\t\t\ttoast.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t<Header taskRun={taskRun} onDeleteRunClicked={onDeleteRunClicked} />\n\t\t\t</div>\n\t\t\t<div className=\"grid lg:grid-cols-[1fr_250px] grid-cols-[1fr] gap-4\">\n\t\t\t\t<TabsLayout\n\t\t\t\t\tcurrentTab={tab}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t\tlogsContent={\n\t\t\t\t\t\t<Suspense fallback={<LogsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunLogs taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\tartifactsContent={\n\t\t\t\t\t\t<Suspense fallback={<ArtifactsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunArtifacts taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\ttaskInputsContent={<TaskInputs taskRun={taskRun} />}\n\t\t\t\t\tdetailsContent={<TaskRunDetails taskRun={taskRun} />}\n\t\t\t\t/>\n\t\t\t\t<div className=\"hidden lg:block\">\n\t\t\t\t\t<TaskRunDetails taskRun={taskRun} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst Header = ({\n\ttaskRun,\n\tonDeleteRunClicked,\n}: {\n\ttaskRun: TaskRun;\n\tonDeleteRunClicked: () => void;\n}) => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\tconst {\n\t\topen: isChangeStateOpen,\n\t\tonOpenChange: setChangeStateOpen,\n\t\topenDialog: openChangeState,\n\t} = useChangeStateDialog();\n\tconst { setTaskRunState, isPending: isChangingState } = useSetTaskRunState();\n\n\tconst canChangeState =\n\t\ttaskRun.state_type &&\n\t\t[\"COMPLETED\", \"FAILED\", \"CANCELLED\", \"CRASHED\"].includes(\n\t\t\ttaskRun.state_type,\n\t\t);\n\n\tconst handleChangeState = (newState: { type: string; message?: string }) => {\n\t\tsetTaskRunState(\n\t\t\t{\n\t\t\t\tid: taskRun.id,\n\t\t\t\tstate: {\n\t\t\t\t\ttype: newState.type as\n\t\t\t\t\t\t| \"COMPLETED\"\n\t\t\t\t\t\t| \"FAILED\"\n\t\t\t\t\t\t| \"CANCELLED\"\n\t\t\t\t\t\t| \"CRASHED\",\n\t\t\t\t\tname: newState.type.charAt(0) + newState.type.slice(1).toLowerCase(),\n\t\t\t\t\tmessage: newState.message,\n\t\t\t\t},\n\t\t\t\tforce: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Task run state changed\");\n\t\t\t\t\tsetChangeStateOpen(false);\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\ttoast.error(error.message || \"Failed to change state\");\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between\">\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=\"/runs\"\n\t\t\t\t\t\t\tsearch={{ tab: \"task-runs\" }}\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\tRuns\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{taskRun.flow_run_id && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl\">\n\t\t\t\t\t\t<BreadcrumbPage className=\"font-semibold\">\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbPage>\n\t\t\t\t\t\t{taskRun.state && (\n\t\t\t\t\t\t\t<StateBadge\n\t\t\t\t\t\t\t\ttype={taskRun.state.type}\n\t\t\t\t\t\t\t\tname={taskRun.state.name}\n\t\t\t\t\t\t\t\tclassName=\"ml-2\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button variant=\"outline\" className=\"p-2\">\n\t\t\t\t\t\t<MoreVertical className=\"w-4 h-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t{canChangeState && (\n\t\t\t\t\t\t<DropdownMenuItem onClick={openChangeState}>\n\t\t\t\t\t\t\tChange state\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t)}\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\ttoast.success(\"Copied task run ID to clipboard\");\n\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(taskRun.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tCopy ID\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tconfirmDelete({\n\t\t\t\t\t\t\t\ttitle: \"Delete Task Run\",\n\t\t\t\t\t\t\t\tdescription: `Are you sure you want to delete task run ${taskRun.name}?`,\n\t\t\t\t\t\t\t\tonConfirm: onDeleteRunClicked,\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\t\tDelete\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t\t<DeleteConfirmationDialog {...dialogState} />\n\t\t\t<ChangeStateDialog\n\t\t\t\topen={isChangeStateOpen}\n\t\t\t\tonOpenChange={setChangeStateOpen}\n\t\t\t\tcurrentState={\n\t\t\t\t\ttaskRun.state\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: taskRun.state.type,\n\t\t\t\t\t\t\t\tname:\n\t\t\t\t\t\t\t\t\ttaskRun.state.name ??\n\t\t\t\t\t\t\t\t\ttaskRun.state.type.charAt(0) +\n\t\t\t\t\t\t\t\t\t\ttaskRun.state.type.slice(1).toLowerCase(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t\tlabel=\"Task Run\"\n\t\t\t\tonConfirm={handleChangeState}\n\t\t\t\tisLoading={isChangingState}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst TabsLayout = ({\n\tcurrentTab,\n\tonTabChange,\n\tlogsContent,\n\tartifactsContent,\n\ttaskInputsContent,\n\tdetailsContent,\n}: {\n\tcurrentTab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n\tlogsContent: React.ReactNode;\n\tartifactsContent: React.ReactNode;\n\ttaskInputsContent: React.ReactNode;\n\tdetailsContent: React.ReactNode;\n}) => {\n\t// Change tab on screen size change when the details tab is selected\n\tuseEffect(() => {\n\t\tconst bp = getComputedStyle(document.documentElement)\n\t\t\t.getPropertyValue(\"--breakpoint-lg\")\n\t\t\t.trim();\n\t\tconst mql = window.matchMedia(`(max-width: ${bp})`);\n\t\tconst onChange = () => {\n\t\t\tif (currentTab === \"Details\") {\n\t\t\t\tonTabChange(\"Logs\");\n\t\t\t}\n\t\t};\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, [currentTab, onTabChange]);\n\n\treturn (\n\t\t<Tabs\n\t\t\tvalue={currentTab}\n\t\t\tonValueChange={(value) => onTabChange(value as TaskRunDetailsTabOptions)}\n\t\t>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger value=\"Details\" className=\"lg:hidden\">\n\t\t\t\t\tDetails\n\t\t\t\t</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Logs\">Logs</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Artifacts\">Artifacts</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"TaskInputs\">\n\t\t\t\t\tTask Inputs\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<Icon id=\"Info\" className=\"w-4 h-4\" />\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\tTask inputs show parameter keys and can also show task run\n\t\t\t\t\t\t\trelationships.\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value=\"Details\">{detailsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Logs\">{logsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Artifacts\">{artifactsContent}</TabsContent>\n\t\t\t<TabsContent value=\"TaskInputs\">{taskInputsContent}</TabsContent>\n\t\t</Tabs>\n\t);\n};\n\nconst LogsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-25\" />\n\t\t\t\t<Skeleton className=\"h-8 w-32\" />\n\t\t\t</div>\n\t\t\t<Skeleton className=\"h-32\" />\n\t\t</div>\n\t);\n};\n\nconst ArtifactsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-12\" />\n\t\t\t</div>\n\n\t\t\t<div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2 xl:grid-cols-3\">\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst TaskInputs = ({ taskRun }: { taskRun: TaskRun }) => {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={JSON.stringify(taskRun.task_inputs, null, 2)}\n\t\t\tdisabled\n\t\t\tcopy\n\t\t/>\n\t);\n};\n","import type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { TaskRunDetailsPage } from \"@/components/task-runs/task-run-details-page\";\nimport { PrefectLoading } from \"@/components/ui/loading\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\nconst searchParams = z.object({\n\ttab: z\n\t\t.enum([\"Logs\", \"Artifacts\", \"TaskInputs\", \"Details\"])\n\t\t.default(\"Logs\")\n\t\t.catch(\"Logs\"),\n});\n\nexport type TaskRunDetailsTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nfunction TaskRunErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load task run\");\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h1 className=\"text-2xl font-semibold\">Task Run</h1>\n\t\t\t</div>\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/runs/task-run/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// ----- Deferred data\n\t\tvoid queryClient.prefetchInfiniteQuery(\n\t\t\tbuildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: \"TIMESTAMP_ASC\",\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: {\n\t\t\t\t\t\tge_: 0,\n\t\t\t\t\t},\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tvoid queryClient.prefetchQuery(\n\t\t\tbuildListArtifactsQuery({\n\t\t\t\tartifacts: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t);\n\n\t\t// ----- Critical data\n\t\tawait queryClient.ensureQueryData(buildGetTaskRunDetailsQuery(params.id));\n\t},\n\twrapInSuspense: true,\n\tpendingComponent: PrefectLoading,\n\terrorComponent: TaskRunErrorComponent,\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\tconst { tab } = Route.useSearch();\n\tconst navigate = useNavigate();\n\n\tconst onTabChange = (tab: TaskRunDetailsTabOptions) => {\n\t\tvoid navigate({\n\t\t\tto: \".\",\n\t\t\tsearch: (prev) => ({\n\t\t\t\t...prev,\n\t\t\t\ttab,\n\t\t\t}),\n\t\t});\n\t};\n\n\treturn <TaskRunDetailsPage id={id} tab={tab} onTabChange={onTabChange} />;\n}\n"],"names":["TaskRunArtifacts","taskRun","view","setView","useState","artifacts","useSuspenseQuery","buildListArtifactsQuery","Card","jsx","CardContent","jsxs","ToggleGroup","value","ToggleGroupItem","LayoutGrid","Rows3","cn","artifact","ArtifactCard","formatTaskDate","dateString","formatDate","formatTaskDuration","seconds","humanizeDuration","TaskRunDetails","resultArtifact","useQuery","buildGetTaskRunResultQuery","Link","Icon","LazyMarkdown","tag","TagBadge","TaskRunLogs","virtualize","levelFilter","setLevelFilter","sortOrder","setSortOrder","queryOptions","useMemo","buildInfiniteFilterLogsQuery","logs","hasNextPage","fetchNextPage","isFetchingNextPage","useSuspenseInfiniteQuery","noLogs","message","LogLevelFilter","LogSortOrder","RunLogs","error","LEVEL_FILTER_OPTIONS","Select","SelectTrigger","option","SelectContent","SelectItem","SelectValue","TaskRunDetailsPage","id","tab","onTabChange","refetchInterval","setRefetchInterval","buildGetTaskRunDetailsQuery","deleteTaskRun","useDeleteTaskRun","navigate","useRouter","usePageTitle","useStateFavicon","useEffect","onDeleteRunClicked","toast","Header","TabsLayout","Suspense","LogsSkeleton","ArtifactsSkeleton","TaskInputs","dialogState","confirmDelete","useDeleteConfirmationDialog","isChangeStateOpen","setChangeStateOpen","openChangeState","useChangeStateDialog","setTaskRunState","isChangingState","useSetTaskRunState","canChangeState","handleChangeState","newState","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","Fragment","BreadcrumbPage","StateBadge","DropdownMenu","DropdownMenuTrigger","Button","MoreVertical","DropdownMenuContent","DropdownMenuItem","DeleteConfirmationDialog","ChangeStateDialog","currentTab","logsContent","artifactsContent","taskInputsContent","detailsContent","bp","mql","onChange","Tabs","TabsList","TabsTrigger","Tooltip","TooltipTrigger","TooltipContent","TabsContent","Skeleton","JsonInput","z","default","catch","RouteComponent","Route","useParams","useSearch","useNavigate","to","search","prev"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as r}from"./vendor-tanstack-BdLtprmr.js";import{s}from"./index-
|
|
2
|
-
//# sourceMappingURL=task-run._id-
|
|
1
|
+
import{j as r}from"./vendor-tanstack-BdLtprmr.js";import{s}from"./index-CPpeVt8m.js";import{R as a}from"./route-error-state-BqbnZCc-.js";import{o as i,e as m}from"./vendor-forms-BlFSCfFw.js";import"./vendor-react-HBv6Kpyp.js";import"./vendor-radix-CJc458uP.js";import"./vendor-recharts-CY3PKigC.js";import"./vendor-date-Cl1Jav-N.js";i({tab:m(["Logs","Artifacts","TaskInputs","Details"]).default("Logs").catch("Logs")});function j({error:o,reset:t}){const e=s(o,"Failed to load task run");return r.jsxs("div",{className:"flex flex-col gap-4",children:[r.jsx("div",{children:r.jsx("h1",{className:"text-2xl font-semibold",children:"Task Run"})}),r.jsx(a,{error:e,onRetry:t})]})}export{j as errorComponent};
|
|
2
|
+
//# sourceMappingURL=task-run._id-DJkoLl_e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-run._id-DJkoLl_e.js","sources":["../../src/routes/runs/task-run.$id.tsx?tsr-split=errorComponent"],"sourcesContent":["import type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { TaskRunDetailsPage } from \"@/components/task-runs/task-run-details-page\";\nimport { PrefectLoading } from \"@/components/ui/loading\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\nconst searchParams = z.object({\n\ttab: z\n\t\t.enum([\"Logs\", \"Artifacts\", \"TaskInputs\", \"Details\"])\n\t\t.default(\"Logs\")\n\t\t.catch(\"Logs\"),\n});\n\nexport type TaskRunDetailsTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nfunction TaskRunErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load task run\");\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h1 className=\"text-2xl font-semibold\">Task Run</h1>\n\t\t\t</div>\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/runs/task-run/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// ----- Deferred data\n\t\tvoid queryClient.prefetchInfiniteQuery(\n\t\t\tbuildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: \"TIMESTAMP_ASC\",\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: {\n\t\t\t\t\t\tge_: 0,\n\t\t\t\t\t},\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tvoid queryClient.prefetchQuery(\n\t\t\tbuildListArtifactsQuery({\n\t\t\t\tartifacts: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t);\n\n\t\t// ----- Critical data\n\t\tawait queryClient.ensureQueryData(buildGetTaskRunDetailsQuery(params.id));\n\t},\n\twrapInSuspense: true,\n\tpendingComponent: PrefectLoading,\n\terrorComponent: TaskRunErrorComponent,\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\tconst { tab } = Route.useSearch();\n\tconst navigate = useNavigate();\n\n\tconst onTabChange = (tab: TaskRunDetailsTabOptions) => {\n\t\tvoid navigate({\n\t\t\tto: \".\",\n\t\t\tsearch: (prev) => ({\n\t\t\t\t...prev,\n\t\t\t\ttab,\n\t\t\t}),\n\t\t});\n\t};\n\n\treturn <TaskRunDetailsPage id={id} tab={tab} onTabChange={onTabChange} />;\n}\n"],"names":["z","tab","default","catch","TaskRunErrorComponent","error","reset","serverError","categorizeError","jsxs","jsx","RouteErrorState"],"mappings":"6UAYqBA,EAAS,CAC7BC,IAAKD,EACE,CAAC,OAAQ,YAAa,aAAc,SAAS,CAAC,EACnDE,QAAQ,MAAM,EACdC,MAAM,MAAM,CACf,CAAC,EAID,SAASC,EAAsB,CAAEC,MAAAA,EAAOC,MAAAA,CAA2B,EAAG,CACrE,MAAMC,EAAcC,EAAgBH,EAAO,yBAAyB,EACpE,OACCI,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAC,EAAAA,IAAC,OACA,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,yBAAyB,oBAAQ,CAAA,CAChD,EACAA,EAAAA,IAACC,EAAA,CAAgB,MAAOJ,EAAa,QAASD,CAAAA,CAAM,CAAA,EACrD,CAEF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,r as _,s as p}from"./vendor-tanstack-BdLtprmr.js";import{S as E,a as w,b as P,c as S,e as u,C as j,cD as k,ao as z,$ as O,at as Q,aq as q,ar as H,B as X,g as J,h as x,bv as m,bE as g,aP as N,bW as v,bT as C,bU as D,I as y,bV as I,au as T,q as K,b8 as d,b9 as Y,ba as Z,bb as o,cE as R,bc as ee,bd as se,cF as te}from"./index-CPpeVt8m.js";const je=({defaultValue:t,value:a,onSelect:s})=>e.jsxs(E,{defaultValue:t,value:a,onValueChange:s,children:[e.jsx(w,{"aria-label":"Task run sort order",className:"w-full",children:e.jsx(P,{placeholder:"Sort by"})}),e.jsxs(S,{children:[e.jsx(u,{value:"EXPECTED_START_TIME_DESC",children:"Newest to oldest"}),e.jsx(u,{value:"EXPECTED_START_TIME_ASC",children:"Oldest to newest"})]})]}),L=({taskRun:t,flow:a,flowRun:s,checked:r,onCheckedChange:l})=>{const i=typeof l=="function";return e.jsxs(j,{className:ae({state:t.state?.type}),children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsx(z,{checked:r??!1,onCheckedChange:l}),e.jsx(re,{taskRun:t,flow:a,flowRun:s})]}),e.jsx("div",{children:e.jsx(O,{tags:t.tags??[]})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[t.state&&e.jsx(Q,{type:t.state.type,name:t.state.name}),e.jsx(le,{taskRun:t}),e.jsx(ie,{taskRun:t})]})]})},ae=k("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"}}}),re=({taskRun:t,flow:a,flowRun:s})=>e.jsx("div",{className:"flex items-center",children:e.jsx(X,{children:e.jsxs(J,{children:[a&&e.jsxs(e.Fragment,{children:[e.jsx(x,{children:e.jsx(m,{to:"/flows/flow/$id",params:{id:a.id},className:"font-semibold text-foreground",children:a.name})}),e.jsx(g,{})]}),s&&e.jsxs(e.Fragment,{children:[e.jsx(x,{children:e.jsx(m,{to:"/runs/flow-run/$id",params:{id:s.id},children:s.name})}),e.jsx(g,{})]}),e.jsx(x,{className:"font-bold text-foreground",children:e.jsx(m,{to:"/runs/task-run/$id",params:{id:t.id},children:t.name})})]})})}),le=({taskRun:t})=>{const a="start_time"in t?t.start_time:null,s="expected_start_time"in t?t.expected_start_time:null,{text:r,tooltipText:l}=_.useMemo(()=>{let i,n;return a?(i=N(a,"dateTimeNumeric"),n=new Date(a).toString()):s&&(i=`Scheduled for ${N(s,"dateTimeNumeric")}`,n=new Date(s).toString()),{text:i,tooltipText:n}},[s,a]);return e.jsx(v,{children:e.jsxs(C,{children:[e.jsx(D,{asChild:!0,disabled:!r,children:e.jsxs("div",{className:"text-xs font-mono flex gap-2 items-center",children:[e.jsx(y,{id:"Calendar",className:"size-4"}),r??"No start time"]})}),e.jsx(I,{children:l})]})})},ie=({taskRun:t})=>{const a="estimated_run_time"in t?t.estimated_run_time:null,s="total_run_time"in t?t.total_run_time:null,r=a??s??0;if(r===0)return null;const l=T(r*1e3,{maxDecimalPoints:2,units:["h","m","s"],round:!0}),i=T(r*1e3,{maxDecimalPoints:5,units:["h","m","s"]});return e.jsx(v,{children:e.jsxs(C,{children:[e.jsx(D,{asChild:!0,children:e.jsxs("div",{className:"flex gap-2 items-center text-xs font-mono",children:[e.jsx(y,{id:"Clock",className:"size-4"}),l]})}),e.jsx(I,{children:i})]})})},ne=({taskRun:t,flowRunId:a,checked:s,onCheckedChange:r})=>{const{data:l}=p(q(a)),{data:i}=p(H(l.flow_id));return e.jsx(L,{taskRun:t,flow:i,flowRun:l,checked:s,onCheckedChange:r})},ce=({taskRun:t,checked:a,onCheckedChange:s})=>{const r=t.flow_run_id;return r?e.jsx(ne,{taskRun:t,flowRunId:r,checked:a,onCheckedChange:s}):e.jsx(L,{taskRun:t,checked:a,onCheckedChange:s})},de=({taskRun:t,checked:a,onCheckedChange:s})=>e.jsx(_.Suspense,{fallback:e.jsxs(j,{className:"flex flex-col gap-2 p-4 border-l-8 border-l-gray-300 animate-pulse",children:[e.jsx("div",{className:"h-5 bg-gray-200 rounded w-1/3"}),e.jsx("div",{className:"h-4 bg-gray-200 rounded w-1/4"})]}),children:e.jsx(ce,{taskRun:t,checked:a,onCheckedChange:s})}),he=({taskRuns:t,onClearFilters:a,onSelect:s,selectedRows:r})=>t?t.length===0?e.jsx("div",{className:"flex justify-center py-4",children:e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("p",{className:"text-base",children:"No runs found"}),a&&e.jsx(K,{onClick:a,children:"Clear Filters"})]})}):e.jsx("ul",{className:"flex flex-col gap-2",children:t.map(l=>e.jsx("li",{children:e.jsx(de,{taskRun:l,checked:r?.has(l.id),onCheckedChange:s?i=>s(l.id,i):void 0})},l.id))}):e.jsx(oe,{numSkeletons:5}),oe=({numSkeletons:t=1})=>e.jsx("ul",{className:"flex flex-col gap-1",children:Array.from({length:t}).map((a,s)=>e.jsx("li",{children:e.jsxs(j,{className:"flex flex-col gap-2 p-4",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx(d,{className:"h-4 w-[350px]"}),e.jsx(d,{className:"h-4 w-[400px]"})]}),e.jsx(d,{className:"h-4 w-[400px]"}),e.jsx(d,{className:"h-4 w-[200px]"})]})},s))}),xe=[5,10,25,50,100],fe=({count:t,pages:a,pagination:s,onChangePagination:r,onPrefetchPage:l})=>{const i=()=>r({limit:s.limit,page:1}),n=()=>r({limit:s.limit,page:s.page-1}),B=()=>r({limit:s.limit,page:s.page+1}),A=()=>r({limit:s.limit,page:a}),F=()=>{s.page>1&&l?.(1)},M=()=>{s.page>1&&l?.(s.page-1)},G=()=>{s.page<a&&l?.(s.page+1)},V=()=>{s.page<a&&l?.(a)},h=s.page<=1,f=s.page>=a,$=c=>{const b=Number(c),U=Math.ceil(t/b),W=Math.min(s.page,U);r({limit:b,page:W})};return e.jsxs("div",{className:"flex flex-row justify-between items-center",children:[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(E,{value:String(s.limit),onValueChange:$,children:[e.jsx(w,{"aria-label":"Items per page",children:e.jsx(P,{placeholder:"Theme"})}),e.jsx(S,{children:xe.map(c=>e.jsx(u,{value:String(c),children:c},c))})]})]}),e.jsx(Y,{className:"justify-end",children:e.jsxs(Z,{children:[e.jsxs(o,{children:[e.jsx(R,{onClick:i,onMouseEnter:F,disabled:h}),e.jsx(ee,{onClick:n,onMouseEnter:M,disabled:h})]}),e.jsxs(o,{className:"text-sm",children:["Page ",a===0?0:s.page," of ",a]}),e.jsx(o,{children:e.jsx(se,{onClick:B,onMouseEnter:G,disabled:f})}),e.jsx(o,{children:e.jsx(te,{onClick:A,onMouseEnter:V,disabled:f})})]})})]})};export{je as T,fe as a,he as b};
|
|
2
|
+
//# sourceMappingURL=task-runs-pagination-B2fSdB1t.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runs-pagination-B2fSdB1t.js","sources":["../../src/components/task-runs/task-runs-list/task-run-sort-filter.tsx","../../src/components/task-runs/task-runs-list/task-runs-list-item.tsx","../../src/components/task-runs/task-runs-list/task-runs-list.tsx","../../src/components/task-runs/task-runs-list/task-runs-pagination.tsx"],"sourcesContent":["import {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport type { TaskRunSortFilters } from \"./task-run-sort-filter.constants\";\n\ntype TaskRunsSortFilterProps = {\n\tdefaultValue?: TaskRunSortFilters;\n\tonSelect: (filter: TaskRunSortFilters) => void;\n\tvalue: undefined | TaskRunSortFilters;\n};\n\nexport const TaskRunsSortFilter = ({\n\tdefaultValue,\n\tvalue,\n\tonSelect,\n}: TaskRunsSortFilterProps) => {\n\treturn (\n\t\t<Select defaultValue={defaultValue} value={value} onValueChange={onSelect}>\n\t\t\t<SelectTrigger aria-label=\"Task run sort order\" className=\"w-full\">\n\t\t\t\t<SelectValue placeholder=\"Sort by\" />\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectItem value=\"EXPECTED_START_TIME_DESC\">\n\t\t\t\t\tNewest to oldest\n\t\t\t\t</SelectItem>\n\t\t\t\t<SelectItem value=\"EXPECTED_START_TIME_ASC\">\n\t\t\t\t\tOldest to newest\n\t\t\t\t</SelectItem>\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { cva } from \"class-variance-authority\";\nimport humanizeDuration from \"humanize-duration\";\nimport { Suspense, useMemo } from \"react\";\nimport { buildGetFlowRunDetailsQuery, type FlowRun } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery, type Flow } from \"@/api/flows\";\nimport type { components } from \"@/api/prefect\";\nimport type { TaskRun, TaskRunResponse } from \"@/api/task-runs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Card } from \"@/components/ui/card\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { formatDate } from \"@/utils/date\";\n\ntype TaskRunsListItemProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflow?: Flow;\n\tflowRun?: FlowRun;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\nexport const TaskRunsListItem = ({\n\ttaskRun,\n\tflow,\n\tflowRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemProps) => {\n\tconst isSelectable = typeof onCheckedChange === \"function\";\n\n\treturn (\n\t\t<Card className={stateCardVariants({ state: taskRun.state?.type })}>\n\t\t\t<div className=\"flex justify-between items-center\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={checked ?? false}\n\t\t\t\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<TaskRunBreadcrumbs taskRun={taskRun} flow={flow} flowRun={flowRun} />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<TagBadgeGroup tags={taskRun.tags ?? []} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t{taskRun.state && (\n\t\t\t\t\t<StateBadge type={taskRun.state.type} name={taskRun.state.name} />\n\t\t\t\t)}\n\t\t\t\t<TaskRunStartTime taskRun={taskRun} />\n\t\t\t\t<TaskRunDuration taskRun={taskRun} />\n\t\t\t</div>\n\t\t</Card>\n\t);\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\ntype TaskRunBreadcrumbsProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflow?: Flow;\n\tflowRun?: FlowRun;\n};\n\nconst TaskRunBreadcrumbs = ({\n\ttaskRun,\n\tflow,\n\tflowRun,\n}: TaskRunBreadcrumbsProps) => {\n\treturn (\n\t\t<div className=\"flex items-center\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t{flow && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/flows/flow/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: flow.id }}\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flow.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t{flowRun && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: flowRun.id }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flowRun.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"font-bold text-foreground\">\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</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t</div>\n\t);\n};\n\ntype TaskRunStartTimeProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n};\n\nconst TaskRunStartTime = ({ taskRun }: TaskRunStartTimeProps) => {\n\t// These properties only exist on UITaskRun, not TaskRunResponse\n\tconst start_time =\n\t\t\"start_time\" in taskRun ? (taskRun.start_time as string | null) : null;\n\tconst expected_start_time =\n\t\t\"expected_start_time\" in taskRun\n\t\t\t? (taskRun.expected_start_time as string | null)\n\t\t\t: null;\n\n\tconst { text, tooltipText } = useMemo(() => {\n\t\tlet text: string | undefined;\n\t\tlet tooltipText: string | undefined;\n\t\tif (start_time) {\n\t\t\ttext = formatDate(start_time, \"dateTimeNumeric\");\n\t\t\ttooltipText = new Date(start_time).toString();\n\t\t} else if (expected_start_time) {\n\t\t\ttext = `Scheduled for ${formatDate(expected_start_time, \"dateTimeNumeric\")}`;\n\t\t\ttooltipText = new Date(expected_start_time).toString();\n\t\t}\n\t\treturn { text, tooltipText };\n\t}, [expected_start_time, start_time]);\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger asChild disabled={!text}>\n\t\t\t\t\t<div className=\"text-xs font-mono flex gap-2 items-center\">\n\t\t\t\t\t\t<Icon id=\"Calendar\" className=\"size-4\" />\n\t\t\t\t\t\t{text ?? \"No start time\"}\n\t\t\t\t\t</div>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{tooltipText}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\ntype TaskRunDurationProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n};\n\nconst TaskRunDuration = ({ taskRun }: TaskRunDurationProps) => {\n\t// These properties only exist on UITaskRun, not TaskRunResponse\n\tconst estimated_run_time =\n\t\t\"estimated_run_time\" in taskRun\n\t\t\t? (taskRun.estimated_run_time as number | null)\n\t\t\t: null;\n\tconst total_run_time =\n\t\t\"total_run_time\" in taskRun\n\t\t\t? (taskRun.total_run_time as number | null)\n\t\t\t: null;\n\tconst duration = estimated_run_time ?? total_run_time ?? 0;\n\n\tif (duration === 0) {\n\t\treturn null;\n\t}\n\n\tconst durationLabel = humanizeDuration(duration * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"h\", \"m\", \"s\"],\n\t\tround: true,\n\t});\n\tconst durationTooltip = humanizeDuration(duration * 1000, {\n\t\tmaxDecimalPoints: 5,\n\t\tunits: [\"h\", \"m\", \"s\"],\n\t});\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t<div className=\"flex gap-2 items-center text-xs font-mono\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"size-4\" />\n\t\t\t\t\t\t{durationLabel}\n\t\t\t\t\t</div>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{durationTooltip}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\ntype TaskRunsListItemWithDataProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\ntype TaskRunsListItemWithFlowDataProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflowRunId: string;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\nconst TaskRunsListItemWithFlowData = ({\n\ttaskRun,\n\tflowRunId,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithFlowDataProps) => {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(flowRunId),\n\t);\n\tconst { data: flow } = useSuspenseQuery(\n\t\tbuildFLowDetailsQuery(flowRun.flow_id),\n\t);\n\n\treturn (\n\t\t<TaskRunsListItem\n\t\t\ttaskRun={taskRun}\n\t\t\tflow={flow}\n\t\t\tflowRun={flowRun}\n\t\t\tchecked={checked}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t/>\n\t);\n};\n\nconst TaskRunsListItemWithDataInner = ({\n\ttaskRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithDataProps) => {\n\tconst flowRunId = taskRun.flow_run_id;\n\n\tif (!flowRunId) {\n\t\treturn (\n\t\t\t<TaskRunsListItem\n\t\t\t\ttaskRun={taskRun}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TaskRunsListItemWithFlowData\n\t\t\ttaskRun={taskRun}\n\t\t\tflowRunId={flowRunId}\n\t\t\tchecked={checked}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t/>\n\t);\n};\n\nexport const TaskRunsListItemWithData = ({\n\ttaskRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithDataProps) => {\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={\n\t\t\t\t<Card className=\"flex flex-col gap-2 p-4 border-l-8 border-l-gray-300 animate-pulse\">\n\t\t\t\t\t<div className=\"h-5 bg-gray-200 rounded w-1/3\" />\n\t\t\t\t\t<div className=\"h-4 bg-gray-200 rounded w-1/4\" />\n\t\t\t\t</Card>\n\t\t\t}\n\t\t>\n\t\t\t<TaskRunsListItemWithDataInner\n\t\t\t\ttaskRun={taskRun}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n","import type { TaskRunResponse } from \"@/api/task-runs\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { TaskRunsListItemWithData } from \"./task-runs-list-item\";\n\ntype TaskRunsListProps = {\n\ttaskRuns?: Array<TaskRunResponse>;\n\tonSelect?: (id: string, checked: boolean) => void;\n\tselectedRows?: Set<string>;\n\tonClearFilters?: () => void;\n};\n\nexport const TaskRunsList = ({\n\ttaskRuns,\n\tonClearFilters,\n\tonSelect,\n\tselectedRows,\n}: TaskRunsListProps) => {\n\tif (!taskRuns) {\n\t\treturn <LoadingSkeleton numSkeletons={5} />;\n\t}\n\n\tif (taskRuns.length === 0) {\n\t\treturn (\n\t\t\t<div className=\"flex justify-center py-4\">\n\t\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t\t<p className=\"text-base\">No runs found</p>\n\t\t\t\t\t{onClearFilters && (\n\t\t\t\t\t\t<Button onClick={onClearFilters}>Clear Filters</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t{taskRuns.map((taskRun) => (\n\t\t\t\t<li key={taskRun.id}>\n\t\t\t\t\t<TaskRunsListItemWithData\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tchecked={selectedRows?.has(taskRun.id)}\n\t\t\t\t\t\tonCheckedChange={\n\t\t\t\t\t\t\tonSelect ? (checked) => onSelect(taskRun.id, checked) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n};\n\ntype LoadingSkeletonProps = {\n\tnumSkeletons?: number;\n};\nconst LoadingSkeleton = ({ numSkeletons = 1 }: LoadingSkeletonProps) => (\n\t<ul className=\"flex flex-col gap-1\">\n\t\t{Array.from({ length: numSkeletons }).map((_, i) => (\n\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: okay for static skeleton list\n\t\t\t<li key={i}>\n\t\t\t\t<Card className=\"flex flex-col gap-2 p-4\">\n\t\t\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-[350px]\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t\t\t<Skeleton className=\"h-4 w-[200px]\" />\n\t\t\t\t</Card>\n\t\t\t</li>\n\t\t))}\n\t</ul>\n);\n","import {\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\";\n\nconst PAGINATION_INCREMENTS = [5, 10, 25, 50, 100];\n\nexport type PaginationState = {\n\tlimit: number;\n\tpage: number;\n};\nexport type PaginationStateUpdater = (\n\tprevState: PaginationState,\n) => PaginationState;\n\ntype TaskRunsPaginationProps = {\n\tcount: number;\n\tpages: number;\n\tpagination: PaginationState;\n\tonChangePagination: (pagination: PaginationState) => void;\n\tonPrefetchPage?: (page: number) => void;\n};\nexport const TaskRunsPagination = ({\n\tcount,\n\tpages,\n\tpagination,\n\tonChangePagination,\n\tonPrefetchPage,\n}: TaskRunsPaginationProps) => {\n\tconst handleFirstPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: 1 });\n\tconst handlePreviousPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pagination.page - 1 });\n\tconst handleNextPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pagination.page + 1 });\n\n\tconst handleLastPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pages });\n\n\tconst handlePrefetchFirstPage = () => {\n\t\tif (pagination.page > 1) onPrefetchPage?.(1);\n\t};\n\tconst handlePrefetchPreviousPage = () => {\n\t\tif (pagination.page > 1) onPrefetchPage?.(pagination.page - 1);\n\t};\n\tconst handlePrefetchNextPage = () => {\n\t\tif (pagination.page < pages) onPrefetchPage?.(pagination.page + 1);\n\t};\n\tconst handlePrefetchLastPage = () => {\n\t\tif (pagination.page < pages) onPrefetchPage?.(pages);\n\t};\n\n\tconst disablePreviousPage = pagination.page <= 1;\n\tconst disableNextPage = pagination.page >= pages;\n\n\tconst handleChangeLimit = (value: string) => {\n\t\tconst newLimit = Number(value);\n\t\tconst newTotalPages = Math.ceil(count / newLimit);\n\t\tconst newPage = Math.min(pagination.page, newTotalPages);\n\t\tonChangePagination({\n\t\t\tlimit: newLimit,\n\t\t\tpage: newPage,\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between items-center\">\n\t\t\t<div className=\"flex flex-row items-center gap-2 text-xs text-muted-foreground\">\n\t\t\t\t<span className=\"whitespace-nowrap\">Items per page</span>\n\t\t\t\t<Select\n\t\t\t\t\tvalue={String(pagination.limit)}\n\t\t\t\t\tonValueChange={handleChangeLimit}\n\t\t\t\t>\n\t\t\t\t\t<SelectTrigger aria-label=\"Items per page\">\n\t\t\t\t\t\t<SelectValue placeholder=\"Theme\" />\n\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t{PAGINATION_INCREMENTS.map((increment) => (\n\t\t\t\t\t\t\t<SelectItem key={increment} value={String(increment)}>\n\t\t\t\t\t\t\t\t{increment}\n\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SelectContent>\n\t\t\t\t</Select>\n\t\t\t</div>\n\t\t\t<Pagination className=\"justify-end\">\n\t\t\t\t<PaginationContent>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationFirstButton\n\t\t\t\t\t\t\tonClick={handleFirstPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchFirstPage}\n\t\t\t\t\t\t\tdisabled={disablePreviousPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PaginationPreviousButton\n\t\t\t\t\t\t\tonClick={handlePreviousPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchPreviousPage}\n\t\t\t\t\t\t\tdisabled={disablePreviousPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem className=\"text-sm\">\n\t\t\t\t\t\tPage {pages === 0 ? 0 : pagination.page} of {pages}\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationNextButton\n\t\t\t\t\t\t\tonClick={handleNextPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchNextPage}\n\t\t\t\t\t\t\tdisabled={disableNextPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationLastButton\n\t\t\t\t\t\t\tonClick={handleLastPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchLastPage}\n\t\t\t\t\t\t\tdisabled={disableNextPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t</Pagination>\n\t\t</div>\n\t);\n};\n"],"names":["TaskRunsSortFilter","defaultValue","value","onSelect","jsxs","Select","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","TaskRunsListItem","taskRun","flow","flowRun","checked","onCheckedChange","isSelectable","Card","stateCardVariants","Checkbox","TaskRunBreadcrumbs","TagBadgeGroup","StateBadge","TaskRunStartTime","TaskRunDuration","cva","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","start_time","expected_start_time","text","tooltipText","useMemo","formatDate","TooltipProvider","Tooltip","TooltipTrigger","Icon","TooltipContent","estimated_run_time","total_run_time","duration","durationLabel","humanizeDuration","durationTooltip","TaskRunsListItemWithFlowData","flowRunId","useSuspenseQuery","buildGetFlowRunDetailsQuery","buildFLowDetailsQuery","TaskRunsListItemWithDataInner","TaskRunsListItemWithData","Suspense","TaskRunsList","taskRuns","onClearFilters","selectedRows","Button","LoadingSkeleton","numSkeletons","_","i","Skeleton","PAGINATION_INCREMENTS","TaskRunsPagination","count","pages","pagination","onChangePagination","onPrefetchPage","handleFirstPage","handlePreviousPage","handleNextPage","handleLastPage","handlePrefetchFirstPage","handlePrefetchPreviousPage","handlePrefetchNextPage","handlePrefetchLastPage","disablePreviousPage","disableNextPage","handleChangeLimit","newLimit","newTotalPages","newPage","increment","Pagination","PaginationContent","PaginationItem","PaginationFirstButton","PaginationPreviousButton","PaginationNextButton","PaginationLastButton"],"mappings":"gWAeO,MAAMA,GAAqB,CAAC,CAClC,aAAAC,EACA,MAAAC,EACA,SAAAC,CACD,IAEEC,EAAAA,KAACC,EAAA,CAAO,aAAAJ,EAA4B,MAAAC,EAAc,cAAeC,EAChE,SAAA,CAAAG,EAAAA,IAACC,EAAA,CAAc,aAAW,sBAAsB,UAAU,SACzD,SAAAD,EAAAA,IAACE,EAAA,CAAY,YAAY,SAAA,CAAU,CAAA,CACpC,SACCC,EAAA,CACA,SAAA,CAAAH,EAAAA,IAACI,EAAA,CAAW,MAAM,2BAA2B,SAAA,mBAE7C,EACAJ,EAAAA,IAACI,EAAA,CAAW,MAAM,0BAA0B,SAAA,kBAAA,CAE5C,CAAA,CAAA,CACD,CAAA,EACD,ECGWC,EAAmB,CAAC,CAChC,QAAAC,EACA,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,gBAAAC,CACD,IAA6B,CAC5B,MAAMC,EAAe,OAAOD,GAAoB,WAEhD,OACCZ,OAACc,EAAA,CAAK,UAAWC,GAAkB,CAAE,MAAOP,EAAQ,OAAO,IAAA,CAAM,EAChE,SAAA,CAAAR,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAa,GACAX,EAAAA,IAACc,EAAA,CACA,QAASL,GAAW,GACpB,gBAAAC,CAAA,CAAA,EAGFV,EAAAA,IAACe,GAAA,CAAmB,QAAAT,EAAkB,KAAAC,EAAY,QAAAC,CAAA,CAAkB,CAAA,EACrE,EACAR,EAAAA,IAAC,OACA,SAAAA,MAACgB,EAAA,CAAc,KAAMV,EAAQ,MAAQ,CAAA,CAAC,CAAG,CAAA,CAC1C,CAAA,EACD,EACAR,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAQ,EAAQ,OACRN,EAAAA,IAACiB,EAAA,CAAW,KAAMX,EAAQ,MAAM,KAAM,KAAMA,EAAQ,MAAM,IAAA,CAAM,EAEjEN,MAACkB,IAAiB,QAAAZ,EAAkB,EACpCN,MAACmB,IAAgB,QAAAb,CAAA,CAAkB,CAAA,CAAA,CACpC,CAAA,EACD,CAEF,EAEMO,GAAoBO,EAAI,qCAAsC,CACnE,SAAU,CACT,MAAO,CACN,UAAW,qBACX,OAAQ,mBACR,QAAS,oBACT,UAAW,oBACX,WAAY,oBACZ,QAAS,sBACT,OAAQ,oBACR,QAAS,oBACT,UAAW,qBAAA,CACZ,CAEF,CAAC,EAQKL,GAAqB,CAAC,CAC3B,QAAAT,EACA,KAAAC,EACA,QAAAC,CACD,UAEG,MAAA,CAAI,UAAU,oBACd,SAAAR,MAACqB,EAAA,CACA,gBAACC,EAAA,CACC,SAAA,CAAAf,GACAT,EAAAA,KAAAyB,WAAA,CACC,SAAA,CAAAvB,MAACwB,EAAA,CACA,SAAAxB,EAAAA,IAACyB,EAAA,CACA,GAAG,kBACH,OAAQ,CAAE,GAAIlB,EAAK,EAAA,EACnB,UAAU,gCAET,SAAAA,EAAK,IAAA,CAAA,EAER,QACCmB,EAAA,CAAA,CAAoB,CAAA,EACtB,EAEAlB,GACAV,EAAAA,KAAAyB,WAAA,CACC,SAAA,CAAAvB,MAACwB,EAAA,CACA,SAAAxB,EAAAA,IAACyB,EAAA,CACA,GAAG,qBACH,OAAQ,CAAE,GAAIjB,EAAQ,EAAA,EAErB,SAAAA,EAAQ,IAAA,CAAA,EAEX,QACCkB,EAAA,CAAA,CAAoB,CAAA,EACtB,QAEAF,EAAA,CAAe,UAAU,4BACzB,SAAAxB,EAAAA,IAACyB,GAAe,GAAG,qBAAqB,OAAQ,CAAE,GAAInB,EAAQ,EAAA,EAC5D,SAAAA,EAAQ,KACV,CAAA,CACD,CAAA,CAAA,CACD,EACD,EACD,EAQIY,GAAmB,CAAC,CAAE,QAAAZ,KAAqC,CAEhE,MAAMqB,EACL,eAAgBrB,EAAWA,EAAQ,WAA+B,KAC7DsB,EACL,wBAAyBtB,EACrBA,EAAQ,oBACT,KAEE,CAAE,KAAAuB,EAAM,YAAAC,CAAA,EAAgBC,EAAAA,QAAQ,IAAM,CAC3C,IAAIF,EACAC,EACJ,OAAIH,GACHE,EAAOG,EAAWL,EAAY,iBAAiB,EAC/CG,EAAc,IAAI,KAAKH,CAAU,EAAE,SAAA,GACzBC,IACVC,EAAO,iBAAiBG,EAAWJ,EAAqB,iBAAiB,CAAC,GAC1EE,EAAc,IAAI,KAAKF,CAAmB,EAAE,SAAA,GAEtC,CAAE,KAAAC,EAAM,YAAAC,CAAAA,CAChB,EAAG,CAACF,EAAqBD,CAAU,CAAC,EAEpC,OACC3B,EAAAA,IAACiC,EAAA,CACA,SAAAnC,EAAAA,KAACoC,EAAA,CACA,SAAA,CAAAlC,EAAAA,IAACmC,EAAA,CAAe,QAAO,GAAC,SAAU,CAACN,EAClC,SAAA/B,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACd,SAAA,CAAAE,EAAAA,IAACoC,EAAA,CAAK,GAAG,WAAW,UAAU,SAAS,EACtCP,GAAQ,eAAA,CAAA,CACV,CAAA,CACD,EACA7B,EAAAA,IAACqC,GAAgB,SAAAP,CAAA,CAAY,CAAA,CAAA,CAC9B,CAAA,CACD,CAEF,EAMMX,GAAkB,CAAC,CAAE,QAAAb,KAAoC,CAE9D,MAAMgC,EACL,uBAAwBhC,EACpBA,EAAQ,mBACT,KACEiC,EACL,mBAAoBjC,EAChBA,EAAQ,eACT,KACEkC,EAAWF,GAAsBC,GAAkB,EAEzD,GAAIC,IAAa,EAChB,OAAO,KAGR,MAAMC,EAAgBC,EAAiBF,EAAW,IAAM,CACvD,iBAAkB,EAClB,MAAO,CAAC,IAAK,IAAK,GAAG,EACrB,MAAO,EAAA,CACP,EACKG,EAAkBD,EAAiBF,EAAW,IAAM,CACzD,iBAAkB,EAClB,MAAO,CAAC,IAAK,IAAK,GAAG,CAAA,CACrB,EAED,OACCxC,EAAAA,IAACiC,EAAA,CACA,SAAAnC,EAAAA,KAACoC,EAAA,CACA,SAAA,CAAAlC,EAAAA,IAACmC,GAAe,QAAO,GACtB,SAAArC,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACd,SAAA,CAAAE,EAAAA,IAACoC,EAAA,CAAK,GAAG,QAAQ,UAAU,SAAS,EACnCK,CAAA,CAAA,CACF,CAAA,CACD,EACAzC,EAAAA,IAACqC,GAAgB,SAAAM,CAAA,CAAgB,CAAA,CAAA,CAClC,CAAA,CACD,CAEF,EAeMC,GAA+B,CAAC,CACrC,QAAAtC,EACA,UAAAuC,EACA,QAAApC,EACA,gBAAAC,CACD,IAAyC,CACxC,KAAM,CAAE,KAAMF,CAAA,EAAYsC,EACzBC,EAA4BF,CAAS,CAAA,EAEhC,CAAE,KAAMtC,CAAA,EAASuC,EACtBE,EAAsBxC,EAAQ,OAAO,CAAA,EAGtC,OACCR,EAAAA,IAACK,EAAA,CACA,QAAAC,EACA,KAAAC,EACA,QAAAC,EACA,QAAAC,EACA,gBAAAC,CAAA,CAAA,CAGH,EAEMuC,GAAgC,CAAC,CACtC,QAAA3C,EACA,QAAAG,EACA,gBAAAC,CACD,IAAqC,CACpC,MAAMmC,EAAYvC,EAAQ,YAE1B,OAAKuC,EAWJ7C,EAAAA,IAAC4C,GAAA,CACA,QAAAtC,EACA,UAAAuC,EACA,QAAApC,EACA,gBAAAC,CAAA,CAAA,EAbAV,EAAAA,IAACK,EAAA,CACA,QAAAC,EACA,QAAAG,EACA,gBAAAC,CAAA,CAAA,CAaJ,EAEawC,GAA2B,CAAC,CACxC,QAAA5C,EACA,QAAAG,EACA,gBAAAC,CACD,IAEEV,EAAAA,IAACmD,EAAAA,SAAA,CACA,SACCrD,EAAAA,KAACc,EAAA,CAAK,UAAU,qEACf,SAAA,CAAAZ,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAA,CAAgC,EAC/CA,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAA,CAAgC,CAAA,EAChD,EAGD,SAAAA,EAAAA,IAACiD,GAAA,CACA,QAAA3C,EACA,QAAAG,EACA,gBAAAC,CAAA,CAAA,CACD,CAAA,ECxSU0C,GAAe,CAAC,CAC5B,SAAAC,EACA,eAAAC,EACA,SAAAzD,EACA,aAAA0D,CACD,IACMF,EAIDA,EAAS,SAAW,QAErB,MAAA,CAAI,UAAU,2BACd,SAAAvD,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAE,EAAAA,IAAC,IAAA,CAAE,UAAU,YAAY,SAAA,gBAAa,EACrCsD,GACAtD,EAAAA,IAACwD,EAAA,CAAO,QAASF,EAAgB,SAAA,eAAA,CAAa,CAAA,CAAA,CAEhD,CAAA,CACD,EAKDtD,EAAAA,IAAC,MAAG,UAAU,sBACZ,WAAS,IAAKM,GACdN,EAAAA,IAAC,KAAA,CACA,SAAAA,EAAAA,IAACkD,GAAA,CACA,QAAA5C,EACA,QAASiD,GAAc,IAAIjD,EAAQ,EAAE,EACrC,gBACCT,EAAYY,GAAYZ,EAASS,EAAQ,GAAIG,CAAO,EAAI,MAAA,CAAA,CAE1D,EAPQH,EAAQ,EAQjB,CACA,EACF,EA7BON,EAAAA,IAACyD,GAAA,CAAgB,aAAc,CAAA,CAAG,EAoCrCA,GAAkB,CAAC,CAAE,aAAAC,EAAe,CAAA,UACxC,KAAA,CAAG,UAAU,sBACZ,SAAA,MAAM,KAAK,CAAE,OAAQA,CAAA,CAAc,EAAE,IAAI,CAACC,EAAGC,IAE7C5D,MAAC,KAAA,CACA,SAAAF,EAAAA,KAACc,EAAA,CAAK,UAAU,0BACf,SAAA,CAAAd,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACd,SAAA,CAAAE,EAAAA,IAAC6D,EAAA,CAAS,UAAU,eAAA,CAAgB,EACpC7D,EAAAA,IAAC6D,EAAA,CAAS,UAAU,eAAA,CAAgB,CAAA,EACrC,EACA7D,EAAAA,IAAC6D,EAAA,CAAS,UAAU,eAAA,CAAgB,EACpC7D,EAAAA,IAAC6D,EAAA,CAAS,UAAU,eAAA,CAAgB,CAAA,CAAA,CACrC,GARQD,CAST,CACA,EACF,ECtDKE,GAAwB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EAiBpCC,GAAqB,CAAC,CAClC,MAAAC,EACA,MAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,eAAAC,CACD,IAA+B,CAC9B,MAAMC,EAAkB,IACvBF,EAAmB,CAAE,MAAOD,EAAW,MAAO,KAAM,EAAG,EAClDI,EAAqB,IAC1BH,EAAmB,CAAE,MAAOD,EAAW,MAAO,KAAMA,EAAW,KAAO,CAAA,CAAG,EACpEK,EAAiB,IACtBJ,EAAmB,CAAE,MAAOD,EAAW,MAAO,KAAMA,EAAW,KAAO,CAAA,CAAG,EAEpEM,EAAiB,IACtBL,EAAmB,CAAE,MAAOD,EAAW,MAAO,KAAMD,EAAO,EAEtDQ,EAA0B,IAAM,CACjCP,EAAW,KAAO,GAAGE,IAAiB,CAAC,CAC5C,EACMM,EAA6B,IAAM,CACpCR,EAAW,KAAO,GAAGE,IAAiBF,EAAW,KAAO,CAAC,CAC9D,EACMS,EAAyB,IAAM,CAChCT,EAAW,KAAOD,GAAOG,IAAiBF,EAAW,KAAO,CAAC,CAClE,EACMU,EAAyB,IAAM,CAChCV,EAAW,KAAOD,GAAOG,IAAiBH,CAAK,CACpD,EAEMY,EAAsBX,EAAW,MAAQ,EACzCY,EAAkBZ,EAAW,MAAQD,EAErCc,EAAqBnF,GAAkB,CAC5C,MAAMoF,EAAW,OAAOpF,CAAK,EACvBqF,EAAgB,KAAK,KAAKjB,EAAQgB,CAAQ,EAC1CE,EAAU,KAAK,IAAIhB,EAAW,KAAMe,CAAa,EACvDd,EAAmB,CAClB,MAAOa,EACP,KAAME,CAAA,CACN,CACF,EAEA,OACCpF,EAAAA,KAAC,MAAA,CAAI,UAAU,6CACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,iEACd,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAU,oBAAoB,SAAA,iBAAc,EAClDF,EAAAA,KAACC,EAAA,CACA,MAAO,OAAOmE,EAAW,KAAK,EAC9B,cAAea,EAEf,SAAA,CAAA/E,EAAAA,IAACC,GAAc,aAAW,iBACzB,eAACC,EAAA,CAAY,YAAY,QAAQ,CAAA,CAClC,EACAF,EAAAA,IAACG,EAAA,CACC,SAAA2D,GAAsB,IAAKqB,GAC3BnF,MAACI,EAAA,CAA2B,MAAO,OAAO+E,CAAS,EACjD,SAAAA,CAAA,EADeA,CAEjB,CACA,CAAA,CACF,CAAA,CAAA,CAAA,CACD,EACD,EACAnF,MAACoF,EAAA,CAAW,UAAU,cACrB,gBAACC,EAAA,CACA,SAAA,CAAAvF,OAACwF,EAAA,CACA,SAAA,CAAAtF,EAAAA,IAACuF,EAAA,CACA,QAASlB,EACT,aAAcI,EACd,SAAUI,CAAA,CAAA,EAEX7E,EAAAA,IAACwF,GAAA,CACA,QAASlB,EACT,aAAcI,EACd,SAAUG,CAAA,CAAA,CACX,EACD,EACA/E,EAAAA,KAACwF,EAAA,CAAe,UAAU,UAAU,SAAA,CAAA,QAC7BrB,IAAU,EAAI,EAAIC,EAAW,KAAK,OAAKD,CAAA,EAC9C,QACCqB,EAAA,CACA,SAAAtF,EAAAA,IAACyF,GAAA,CACA,QAASlB,EACT,aAAcI,EACd,SAAUG,CAAA,CAAA,EAEZ,QACCQ,EAAA,CACA,SAAAtF,EAAAA,IAAC0F,GAAA,CACA,QAASlB,EACT,aAAcI,EACd,SAAUE,CAAA,CAAA,CACX,CACD,CAAA,CAAA,CACD,CAAA,CACD,CAAA,EACD,CAEF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as i}from"./vendor-tanstack-BdLtprmr.js";import{
|
|
2
|
-
//# sourceMappingURL=textarea-
|
|
1
|
+
import{j as i}from"./vendor-tanstack-BdLtprmr.js";import{aZ as t}from"./index-CPpeVt8m.js";function n({className:r,...e}){return i.jsx("textarea",{"data-slot":"textarea",className:t("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",r),...e})}export{n as T};
|
|
2
|
+
//# sourceMappingURL=textarea-DFEOJJdc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-
|
|
1
|
+
{"version":3,"file":"textarea-DFEOJJdc.js","sources":["../../src/components/ui/textarea.tsx"],"sourcesContent":["import type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n\treturn (\n\t\t<textarea\n\t\t\tdata-slot=\"textarea\"\n\t\t\tclassName={cn(\n\t\t\t\t\"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Textarea };\n"],"names":["Textarea","className","props","jsx","cn"],"mappings":"2FAIA,SAASA,EAAS,CAAE,UAAAC,EAAW,GAAGC,GAA2C,CAC5E,OACCC,EAAAA,IAAC,WAAA,CACA,YAAU,WACV,UAAWC,EACV,qbACAH,CAAA,EAEA,GAAGC,CAAA,CAAA,CAGP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as t,j as e}from"./vendor-tanstack-BdLtprmr.js";import{ag as j,ah as T,ai as f,aj as L,al as E,ak as g,am as w,an as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=timezone-select-
|
|
1
|
+
import{r as t,j as e}from"./vendor-tanstack-BdLtprmr.js";import{ag as j,ah as T,ai as f,aj as L,al as E,ak as g,am as w,an as u}from"./index-CPpeVt8m.js";import{c as b,e as z}from"./dropdown-menu-fRiq5bS-.js";function x(s){return s.replaceAll("/"," / ").replaceAll("_"," ")}const C=Intl.DateTimeFormat().resolvedOptions().timeZone,p=[{label:"UTC",value:"Etc/UTC"},{label:x(C),value:C}],h=Intl.supportedValuesOf("timeZone").map(s=>({label:x(s),value:s})).slice(0,5),M=[...p,...h],A=({selectedValue:s="",onSelect:m})=>{const[c,a]=t.useState(""),r=t.useDeferredValue(c),i=t.useMemo(()=>p.filter(o=>o.label.toLowerCase().includes(r.toLowerCase())||o.value.toLowerCase().includes(r.toLowerCase())),[r]),d=t.useMemo(()=>h.filter(o=>o.label.toLowerCase().includes(r.toLowerCase())||o.value.toLowerCase().includes(r.toLowerCase())),[r]),S=t.useMemo(()=>M.find(({value:o})=>o===s),[s]);return e.jsxs(j,{children:[e.jsx(T,{selected:!!s,"aria-label":"Select timezone",children:S?.label??"Select timezone"}),e.jsxs(f,{children:[e.jsx(L,{value:c,onValueChange:a,placeholder:"Search"}),e.jsx(E,{children:"No timezone found"}),e.jsx(g,{children:e.jsxs(w,{children:[i.length>0&&e.jsx(b,{children:"Suggested timezones"}),i.map(({label:o,value:n})=>e.jsx(u,{selected:s===n,onSelect:l=>{m(l),a("")},value:n,children:o},n)),e.jsx(z,{}),d.length>0&&e.jsx(b,{children:"All timezones"}),d.map(({label:o,value:n})=>e.jsx(u,{selected:s===n,onSelect:l=>{m(l),a("")},value:n,children:o},n))]})})]})]})};export{A as T};
|
|
2
|
+
//# sourceMappingURL=timezone-select-NViFNNLz.js.map
|
prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js.map → timezone-select-NViFNNLz.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timezone-select-
|
|
1
|
+
{"version":3,"file":"timezone-select-NViFNNLz.js","sources":["../../src/components/ui/timezone-select/timezone-select.tsx"],"sourcesContent":["import { useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport {\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n} from \"@/components/ui/dropdown-menu\";\n\nfunction getTimezoneLabel(value: string): string {\n\treturn value.replaceAll(\"/\", \" / \").replaceAll(\"_\", \" \");\n}\n\nconst localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nconst SUGGESTED_TIMEZONES = [\n\t{ label: \"UTC\", value: \"Etc/UTC\" },\n\t{\n\t\tlabel: getTimezoneLabel(localTimezone),\n\t\tvalue: localTimezone,\n\t},\n];\n\nconst TIMEZONES = Intl.supportedValuesOf(\"timeZone\")\n\t.map((timezone) => ({\n\t\tlabel: getTimezoneLabel(timezone),\n\t\tvalue: timezone,\n\t}))\n\t.slice(0, 5);\n\nconst ALL_TIMEZONES = [...SUGGESTED_TIMEZONES, ...TIMEZONES];\n\ntype TimezoneSelectProps = {\n\tselectedValue: string | undefined | null;\n\tonSelect: (value: string) => void;\n};\n\nexport const TimezoneSelect = ({\n\tselectedValue = \"\",\n\tonSelect,\n}: TimezoneSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst filteredSuggestedTimezones = useMemo(() => {\n\t\treturn SUGGESTED_TIMEZONES.filter(\n\t\t\t(timeZone) =>\n\t\t\t\ttimeZone.label.toLowerCase().includes(deferredSearch.toLowerCase()) ||\n\t\t\t\ttimeZone.value.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch]);\n\n\tconst filteredTimezones = useMemo(() => {\n\t\treturn TIMEZONES.filter(\n\t\t\t(timeZone) =>\n\t\t\t\ttimeZone.label.toLowerCase().includes(deferredSearch.toLowerCase()) ||\n\t\t\t\ttimeZone.value.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch]);\n\n\tconst selectedTimezone = useMemo(\n\t\t() => ALL_TIMEZONES.find(({ value }) => value === selectedValue),\n\t\t[selectedValue],\n\t);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selectedValue)}\n\t\t\t\taria-label=\"Select timezone\"\n\t\t\t>\n\t\t\t\t{selectedTimezone?.label ?? \"Select timezone\"}\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\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No timezone found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredSuggestedTimezones.length > 0 && (\n\t\t\t\t\t\t\t<DropdownMenuLabel>Suggested timezones</DropdownMenuLabel>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{filteredSuggestedTimezones.map(({ label, value }) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\tselected={selectedValue === value}\n\t\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\t\tonSelect(value);\n\t\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t{filteredTimezones.length > 0 && (\n\t\t\t\t\t\t\t<DropdownMenuLabel>All timezones</DropdownMenuLabel>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{filteredTimezones.map(({ label, value }) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\tselected={selectedValue === value}\n\t\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\t\tonSelect(value);\n\t\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t\t);\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"],"names":["getTimezoneLabel","value","localTimezone","SUGGESTED_TIMEZONES","TIMEZONES","timezone","ALL_TIMEZONES","TimezoneSelect","selectedValue","onSelect","search","setSearch","useState","deferredSearch","useDeferredValue","filteredSuggestedTimezones","useMemo","timeZone","filteredTimezones","selectedTimezone","Combobox","jsx","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","DropdownMenuLabel","label","ComboboxCommandItem","DropdownMenuSeparator"],"mappings":"iNAgBA,SAASA,EAAiBC,EAAuB,CAChD,OAAOA,EAAM,WAAW,IAAK,KAAK,EAAE,WAAW,IAAK,GAAG,CACxD,CAEA,MAAMC,EAAgB,KAAK,iBAAiB,kBAAkB,SAExDC,EAAsB,CAC3B,CAAE,MAAO,MAAO,MAAO,SAAA,EACvB,CACC,MAAOH,EAAiBE,CAAa,EACrC,MAAOA,CAAA,CAET,EAEME,EAAY,KAAK,kBAAkB,UAAU,EACjD,IAAKC,IAAc,CACnB,MAAOL,EAAiBK,CAAQ,EAChC,MAAOA,CACR,EAAE,EACD,MAAM,EAAG,CAAC,EAENC,EAAgB,CAAC,GAAGH,EAAqB,GAAGC,CAAS,EAO9CG,EAAiB,CAAC,CAC9B,cAAAC,EAAgB,GAChB,SAAAC,CACD,IAA2B,CAC1B,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAE,EAEjCC,EAAiBC,EAAAA,iBAAiBJ,CAAM,EAExCK,EAA6BC,EAAAA,QAAQ,IACnCb,EAAoB,OACzBc,GACAA,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,YAAA,CAAa,GAClEI,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,aAAa,CAAA,EAElE,CAACA,CAAc,CAAC,EAEbK,EAAoBF,EAAAA,QAAQ,IAC1BZ,EAAU,OACfa,GACAA,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,YAAA,CAAa,GAClEI,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,aAAa,CAAA,EAElE,CAACA,CAAc,CAAC,EAEbM,EAAmBH,EAAAA,QACxB,IAAMV,EAAc,KAAK,CAAC,CAAE,MAAAL,CAAA,IAAYA,IAAUO,CAAa,EAC/D,CAACA,CAAa,CAAA,EAGf,cACEY,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,EAAA,CACA,SAAU,EAAQd,EAClB,aAAW,kBAEV,YAAkB,OAAS,iBAAA,CAAA,SAE5Be,EAAA,CACA,SAAA,CAAAF,EAAAA,IAACG,EAAA,CACA,MAAOd,EACP,cAAeC,EACf,YAAY,QAAA,CAAA,EAEbU,EAAAA,IAACI,GAAqB,SAAA,mBAAA,CAAiB,EACvCJ,EAAAA,IAACK,EAAA,CACA,SAAAC,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAb,EAA2B,OAAS,GACpCM,EAAAA,IAACQ,EAAA,CAAkB,SAAA,sBAAmB,EAEtCd,EAA2B,IAAI,CAAC,CAAE,MAAAe,EAAO,MAAA7B,KAExCoB,EAAAA,IAACU,EAAA,CAEA,SAAUvB,IAAkBP,EAC5B,SAAWA,GAAU,CACpBQ,EAASR,CAAK,EACdU,EAAU,EAAE,CACb,EACA,MAAAV,EAEC,SAAA6B,CAAA,EARI7B,CAAA,CAWP,QACA+B,EAAA,EAAsB,EACtBd,EAAkB,OAAS,GAC3BG,EAAAA,IAACQ,GAAkB,SAAA,gBAAa,EAEhCX,EAAkB,IAAI,CAAC,CAAE,MAAAY,EAAO,MAAA7B,KAE/BoB,EAAAA,IAACU,EAAA,CAEA,SAAUvB,IAAkBP,EAC5B,SAAWA,GAAU,CACpBQ,EAASR,CAAK,EACdU,EAAU,EAAE,CACb,EACA,MAAAV,EAEC,SAAA6B,CAAA,EARI7B,CAAA,CAWP,CAAA,CAAA,CACF,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,CAEF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as i,r as s}from"./vendor-tanstack-BdLtprmr.js";import{aD as l,aE as c}from"./vendor-radix-CJc458uP.js";import{
|
|
2
|
-
//# sourceMappingURL=toggle-group-
|
|
1
|
+
import{j as i,r as s}from"./vendor-tanstack-BdLtprmr.js";import{aD as l,aE as c}from"./vendor-radix-CJc458uP.js";import{cD as g,aZ as d}from"./index-CPpeVt8m.js";const v=g("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-2 min-w-9",sm:"h-8 px-1.5 min-w-8",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),u=s.createContext({size:"default",variant:"default"});function x({className:n,variant:e,size:t,children:a,...o}){return i.jsx(l,{"data-slot":"toggle-group","data-variant":e,"data-size":t,className:d("group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs",n),...o,children:i.jsx(u.Provider,{value:{variant:e,size:t},children:a})})}function b({className:n,children:e,variant:t,size:a,...o}){const r=s.useContext(u);return i.jsx(c,{"data-slot":"toggle-group-item","data-variant":r.variant||t,"data-size":r.size||a,className:d(v({variant:r.variant||t,size:r.size||a}),"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",n),...o,children:e})}export{x as T,b as a};
|
|
2
|
+
//# sourceMappingURL=toggle-group-EMgSOoYH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-group-
|
|
1
|
+
{"version":3,"file":"toggle-group-EMgSOoYH.js","sources":["../../src/components/ui/toggle/styles.ts","../../src/components/ui/toggle-group.tsx"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const toggleVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-transparent\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-9 px-2 min-w-9\",\n\t\t\t\tsm: \"h-8 px-1.5 min-w-8\",\n\t\t\t\tlg: \"h-10 px-2.5 min-w-10\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n","import * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { toggleVariants } from \"@/components/ui/toggle\";\nimport { cn } from \"@/utils\";\n\nconst ToggleGroupContext = React.createContext<\n\tVariantProps<typeof toggleVariants>\n>({\n\tsize: \"default\",\n\tvariant: \"default\",\n});\n\nfunction ToggleGroup({\n\tclassName,\n\tvariant,\n\tsize,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n\tVariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<ToggleGroupPrimitive.Root\n\t\t\tdata-slot=\"toggle-group\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ToggleGroupContext.Provider value={{ variant, size }}>\n\t\t\t\t{children}\n\t\t\t</ToggleGroupContext.Provider>\n\t\t</ToggleGroupPrimitive.Root>\n\t);\n}\n\nfunction ToggleGroupItem({\n\tclassName,\n\tchildren,\n\tvariant,\n\tsize,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n\tVariantProps<typeof toggleVariants>) {\n\tconst context = React.useContext(ToggleGroupContext);\n\n\treturn (\n\t\t<ToggleGroupPrimitive.Item\n\t\t\tdata-slot=\"toggle-group-item\"\n\t\t\tdata-variant={context.variant || variant}\n\t\t\tdata-size={context.size || size}\n\t\t\tclassName={cn(\n\t\t\t\ttoggleVariants({\n\t\t\t\t\tvariant: context.variant || variant,\n\t\t\t\t\tsize: context.size || size,\n\t\t\t\t}),\n\t\t\t\t\"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ToggleGroupPrimitive.Item>\n\t);\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n"],"names":["toggleVariants","cva","ToggleGroupContext","React.createContext","ToggleGroup","className","variant","size","children","props","jsx","ToggleGroupPrimitive.Root","cn","ToggleGroupItem","context","React.useContext","ToggleGroupPrimitive.Item"],"mappings":"kKAEO,MAAMA,EAAiBC,EAC7B,gjBACA,CACC,SAAU,CACT,QAAS,CACR,QAAS,iBACT,QACC,2FAAA,EAEF,KAAM,CACL,QAAS,mBACT,GAAI,qBACJ,GAAI,sBAAA,CACL,EAED,gBAAiB,CAChB,QAAS,UACT,KAAM,SAAA,CACP,CAEF,ECfMC,EAAqBC,EAAAA,cAEzB,CACD,KAAM,UACN,QAAS,SACV,CAAC,EAED,SAASC,EAAY,CACpB,UAAAC,EACA,QAAAC,EACA,KAAAC,EACA,SAAAC,EACA,GAAGC,CACJ,EACsC,CACrC,OACCC,EAAAA,IAACC,EAAA,CACA,YAAU,eACV,eAAcL,EACd,YAAWC,EACX,UAAWK,EACV,yFACAP,CAAA,EAEA,GAAGI,EAEJ,SAAAC,EAAAA,IAACR,EAAmB,SAAnB,CAA4B,MAAO,CAAE,QAAAI,EAAS,KAAAC,CAAA,EAC7C,SAAAC,CAAA,CACF,CAAA,CAAA,CAGH,CAEA,SAASK,EAAgB,CACxB,UAAAR,EACA,SAAAG,EACA,QAAAF,EACA,KAAAC,EACA,GAAGE,CACJ,EACsC,CACrC,MAAMK,EAAUC,EAAAA,WAAiBb,CAAkB,EAEnD,OACCQ,EAAAA,IAACM,EAAA,CACA,YAAU,oBACV,eAAcF,EAAQ,SAAWR,EACjC,YAAWQ,EAAQ,MAAQP,EAC3B,UAAWK,EACVZ,EAAe,CACd,QAASc,EAAQ,SAAWR,EAC5B,KAAMQ,EAAQ,MAAQP,CAAA,CACtB,EACD,8LACAF,CAAA,EAEA,GAAGI,EAEH,SAAAD,CAAA,CAAA,CAGJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as V,j as t,L as d,r as z,s as ne,t as re,E as oe,d as ae}from"./vendor-tanstack-BdLtprmr.js";import{bs as ce,c$ as le,T as Y,d6 as ie,d9 as ue,C as B,at as G,I as j,a2 as de,bk as pe,q as K,f as me,a3 as fe,a4 as he,a5 as xe,L as ye,b8 as S,ct as je,dc as E,$ as we,cq as ke,U as A,da as Ae,dd as _e,G as be,y as _,bD as De,de as Ne}from"./index-CPpeVt8m.js";import{F as ge,W as Te,a as Se}from"./work-queue-icon-text-BqqQ413o.js";import{D as Ee,a as Re,b as ve,c as Ce,d as w}from"./dropdown-menu-fRiq5bS-.js";import{u as Le}from"./use-delete-confirmation-dialog-CkL-rSsp.js";const Pe=e=>{const{automationIds:s,blockDocumentIds:n,deploymentIds:r,workPoolIds:c,workQueueIds:a}=qe(e.actions),{data:o,loading:l}=We(Array.from(s)),i=V({queries:[ce({offset:0,sort:"BLOCK_TYPE_AND_NAME_ASC",include_secrets:!1,block_documents:{operator:"and_",id:{any_:Array.from(n)},is_anonymous:{}}},{enabled:n.size>0}),le({offset:0,sort:"CREATED_DESC",deployments:{id:{any_:Array.from(r)},operator:"and_"}},{enabled:r.size>0}),Y({offset:0,work_pools:{id:{any_:Array.from(c)},operator:"and_"}},{enabled:c.size>0}),ie({offset:0,work_queues:{id:{any_:Array.from(a)},operator:"and_"}},{enabled:a.size>0})],combine:u=>{const[y,Z,ee,te]=u;return{data:{blockDocuments:y.data,deployments:Z.data,workPools:ee.data,workQueues:te.data},loading:u.some(se=>se.isLoading)}}});return{loading:l||i.loading,data:{automationsMap:o,blockDocumentsMap:k(i.data.blockDocuments),deploymentsMap:k(i.data.deployments),workPoolsMap:k(i.data.workPools),workQueuesMap:k(i.data.workQueues)}}},We=e=>V({queries:Array.from(e).map(s=>ue(s)),combine:s=>{const n=new Map;for(const r of s)r.data&&n.set(r.data.id,r.data);return{data:n,loading:s.some(r=>r.isLoading)}}}),qe=e=>{const s=new Set,n=new Set,r=new Set,c=new Set,a=new Set;for(const o of e)switch(o.type){case"run-deployment":case"pause-deployment":case"resume-deployment":o.deployment_id&&r.add(o.deployment_id);break;case"pause-work-queue":case"resume-work-queue":o.work_queue_id&&a.add(o.work_queue_id);break;case"pause-automation":case"resume-automation":o.automation_id&&s.add(o.automation_id);break;case"pause-work-pool":case"resume-work-pool":o.work_pool_id&&c.add(o.work_pool_id);break;case"send-notification":case"call-webhook":o.block_document_id&&n.add(o.block_document_id);break}return{automationIds:s,blockDocumentIds:n,deploymentIds:r,workPoolIds:c,workQueueIds:a}};function k(e){const s=new Map;for(const n of e??[])s.set(n.id,n);return s}const Ie={"cancel-flow-run":"Cancel flow run","suspend-flow-run":"Suspend flow run","resume-flow-run":"Resume a flow run","change-flow-run-state":"Change state of a flow run","run-deployment":"Run deployment","pause-deployment":"Pause deployment","resume-deployment":"Resume deployment","pause-work-queue":"Pause work queue","resume-work-queue":"Resume work queue","pause-work-pool":"Pause work pool","resume-work-pool":"Resume work pool","pause-automation":"Pause automation","resume-automation":"Resume automation","call-webhook":"Call webhook using","send-notification":"Send a notification using","do-nothing":"Do nothing"},Qe=({action:e,automationsMap:s,blockDocumentsMap:n,deploymentsMap:r,workPoolsMap:c,workQueuesMap:a})=>t.jsx(B,{className:"p-4",children:t.jsx($e,{action:e,automationsMap:s,blockDocumentsMap:n,deploymentsMap:r,workPoolsMap:c,workQueuesMap:a})}),$e=({action:e,automationsMap:s,blockDocumentsMap:n,deploymentsMap:r,workPoolsMap:c,workQueuesMap:a})=>{const o=Ie[e.type];switch(e.type){case"cancel-flow-run":case"suspend-flow-run":case"resume-flow-run":case"do-nothing":return t.jsx(Me,{label:o});case"run-deployment":if(e.deployment_id&&e.source==="selected"){const l=r.get(e.deployment_id);return l?t.jsx(L,{label:o,deployment:l,parameters:e.parameters,job_variables:e.job_variables}):t.jsx("p",{className:"text-base",children:"Deployment not found"})}return t.jsx(f,{label:o});case"pause-deployment":case"resume-deployment":if(e.deployment_id&&e.source==="selected"){const l=r.get(e.deployment_id);return l?t.jsx(L,{label:o,deployment:l}):t.jsx("p",{className:"text-base",children:"Deployment not found"})}return t.jsx(f,{label:o});case"pause-work-queue":case"resume-work-queue":if(e.work_queue_id&&e.source==="selected"){const l=a.get(e.work_queue_id);return l?t.jsx(Ye,{label:o,workQueue:l}):t.jsx("p",{className:"text-base",children:"Work queue not found"})}return t.jsx(f,{label:o});case"pause-automation":case"resume-automation":if(e.automation_id&&e.source==="selected"){const l=s.get(e.automation_id);return l?t.jsx(Ue,{label:o,automation:l}):t.jsx("p",{className:"text-base",children:"Automation not found"})}return t.jsx(f,{label:o});case"pause-work-pool":case"resume-work-pool":if(e.work_pool_id&&e.source==="selected"){const l=c.get(e.work_pool_id);return l?t.jsx(ze,{label:o,workPool:l}):t.jsx("p",{className:"text-base",children:"Workpool not found"})}return t.jsx(f,{label:o});case"send-notification":{const l=n.get(e.block_document_id);return l?t.jsx(Fe,{label:o,blockDocument:l}):t.jsx("p",{className:"text-base",children:"Block document not found"})}case"call-webhook":{const l=n.get(e.block_document_id);return l?t.jsx(Ve,{label:o,blockDocument:l}):t.jsx("p",{className:"text-base",children:"Block document not found"})}case"change-flow-run-state":return t.jsx(Oe,{label:o,type:e.state,name:e.name});default:return null}},m=({children:e})=>t.jsx("div",{className:"text-sm flex items-center gap-1",children:e}),x=({iconId:e,name:s})=>t.jsxs("div",{className:"text-xs flex items-center",children:[t.jsx(j,{id:e,className:"size-4 mr-1"}),s]}),Me=({label:e})=>t.jsxs("p",{className:"text-sm",children:[e," from the triggering event"]}),f=({label:e})=>t.jsxs("p",{className:"text-sm",children:[e," inferred from the triggering event"]}),Oe=({label:e,type:s,name:n})=>t.jsxs(m,{children:[t.jsx(f,{label:e})," to ",t.jsx(G,{type:s,name:n})]}),L=({label:e,deployment:s,parameters:n,job_variables:r})=>t.jsxs(m,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(d,{to:"/deployments/deployment/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(x,{iconId:"Rocket",name:s.name})}),n!==void 0&&t.jsx(P,{title:"Parameters",payload:n}),r!==void 0&&t.jsx(P,{title:"Job Variables",payload:r})]}),P=({title:e,payload:s})=>t.jsxs(de,{children:[t.jsx(pe,{asChild:!0,children:t.jsxs(K,{variant:"secondary",size:"sm",children:["Show ",me(e)]})}),t.jsxs(fe,{"aria-describedby":void 0,children:[t.jsx(he,{children:t.jsx(xe,{children:e})}),t.jsx(ye,{value:JSON.stringify(s),disabled:!0})]})]}),Ue=({label:e,automation:s})=>t.jsxs(m,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(d,{to:"/automations/automation/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(x,{iconId:"Bot",name:s.name})})]}),Fe=({label:e,blockDocument:s})=>{if(!s.name)return t.jsx("p",{className:"text-base",children:"Block not found"});const n=s.block_type_name?`Send a ${s.block_type_name.toLowerCase()} using`:e;return t.jsxs(m,{children:[t.jsx("label",{htmlFor:`${e}-${s.id}`,children:n}),t.jsx(d,{to:"/blocks/block/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(x,{iconId:"Box",name:s.name})})]})},Ve=({label:e,blockDocument:s})=>s.name?t.jsxs(m,{children:[t.jsx("label",{htmlFor:`${e}-${s.id}`,children:e}),t.jsx(d,{to:"/blocks/block/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(x,{iconId:"Box",name:s.name})})]}):t.jsx("p",{className:"text-base",children:"Block not found"}),ze=({label:e,workPool:s})=>t.jsxs(m,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(d,{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:s.name},"aria-label":s.name,children:t.jsx(x,{iconId:"Cpu",name:s.name})})]}),Ye=({label:e,workQueue:s})=>t.jsxs(m,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(d,{to:"/work-pools/work-pool/$workPoolName/queue/$workQueueName",params:{workPoolName:s.name,workQueueName:s.name},"aria-label":s.name,children:t.jsx(x,{iconId:"Cpu",name:s.name})})]}),Be=({trigger:e})=>{const s=e.triggers?.length??0,n=e.require;let r;return n==="all"?r="all":n==="any"?r="any":typeof n=="number"?r=`at least ${n}`:r="all",t.jsx("div",{className:"flex flex-wrap gap-1 items-center",children:t.jsxs("p",{className:"text-sm",children:["A compound trigger requiring ",r," of ",s," nested"," ",s===1?"trigger":"triggers"," to fire"]})})},W=()=>t.jsx("p",{className:"text-sm",children:"A custom trigger"}),Ge=({deploymentId:e})=>t.jsx(z.Suspense,{fallback:t.jsx(S,{className:"h-4 w-full"}),children:t.jsx(Ke,{deploymentId:e})}),Ke=({deploymentId:e})=>{const{data:s}=ne(je(e));return t.jsxs("div",{className:"flex items-center gap-1 text-xs",children:["Deployment",t.jsxs(d,{to:"/deployments/deployment/$id",params:{id:s.id},className:"flex items-center gap-1",children:[t.jsx(j,{id:"Rocket",className:"size-4"}),s.name]})]})},b=1,He=["prefect.deployment.ready","prefect.deployment.not-ready","prefect.deployment.disabled"],Je=["prefect.work-pool.ready","prefect.work-pool.not-ready","prefect.work-pool.paused","prefect.work-pool.not_ready"],Xe=["prefect.work-queue.ready","prefect.work-queue.not-ready","prefect.work-queue.paused"];function R(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function p(e){return R(e)&&e.type==="event"&&(e.posture==="Reactive"||e.posture==="Proactive")}function Ze(e){return R(e)&&e.type==="compound"&&Array.isArray(e.triggers)}function et(e){return R(e)&&e.type==="sequence"&&Array.isArray(e.triggers)}function H(e){return e==null?[]:Array.isArray(e)?e:[e]}function tt(e,s){if(p(e)){const n=e.match;if(n&&typeof n=="object"){const r=n[s];return r?H(r):[]}}return[]}function D(e,s){const n=tt(e,"prefect.resource.id");return n.length===0?!1:s(n)}function N(e,s){return p(e)?(e.for_each??[]).every(r=>r.startsWith(s)):!1}function g(e,s){return p(e)?s(e.after??[]):!1}function T(e,s){return p(e)?s(e.expect??[]):!1}function q(e){return He.includes(e)}function I(e){return Je.includes(e)}function Q(e){return Xe.includes(e)}function st(e){return p(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.deployment")))&&N(e,"prefect.resource.id")&&g(e,s=>s.every(n=>q(n)))&&T(e,s=>s.every(n=>q(n)))&&e.threshold===b}function nt(e,s){const n=e.match_related;if(!n)return[];const r=Array.isArray(n)?n:[n],c=[];for(const a of r)if(a&&typeof a=="object"){const o=a[s];o&&c.push(...H(o))}return c}function rt(e){const s=e.match_related;return s?Array.isArray(s)?s.length===0:Object.keys(s).length===0:!0}function $(e,s){const n=nt(e,"prefect.resource.id");return n.length===0?!1:n.every(r=>r.startsWith(s))}function ot(e){return rt(e)||$(e,"prefect.flow")||$(e,"prefect.tag")}function at(e){return p(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.flow-run")))&&N(e,"prefect.resource.id")&&g(e,s=>s.every(n=>n.startsWith("prefect.flow-run")))&&T(e,s=>s.every(n=>n.startsWith("prefect.flow-run")))&&ot(e)&&e.threshold===b}function ct(e){return p(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.work-pool")))&&N(e,"prefect.resource.id")&&g(e,s=>s.every(n=>I(n)))&&T(e,s=>s.every(n=>I(n)))&&e.threshold===b}function lt(e){return p(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.work-queue")))&&N(e,"prefect.resource.id")&&g(e,s=>s.every(n=>Q(n)))&&T(e,s=>s.every(n=>Q(n)))&&e.threshold===b}const it={"deployment-status":st,"flow-run-state":at,"work-pool-status":ct,"work-queue-status":lt};function ut(e){for(const[s,n]of Object.entries(it))if(n(e))return s;return"custom"}function v(e){switch(e){case"Reactive":return"enters";case"Proactive":return"stays in"}}function dt(e){switch(e){case"READY":return"Ready";case"NOT_READY":return"Not Ready";case"PAUSED":return"Paused";default:{const s=e;throw new Error(`getWorkQueueStatusLabel missing case for ${s}`)}}}function pt(e){switch(e){case"ready":return"ready";case"not_ready":return"not ready"}}const mt=({deploymentIds:e,posture:s,status:n,time:r})=>{const c=e.length===0,a=v(s),o=pt(n);return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center",children:[t.jsx("span",{children:"When"}),c?t.jsx("span",{children:"any deployment"}):e.map((l,i)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Ge,{deploymentId:l}),i===e.length-2&&t.jsx("span",{children:"or"})]},l)),t.jsx("span",{children:a}),t.jsx("span",{children:o}),s==="Proactive"&&r!==void 0&&r>0&&t.jsxs("span",{children:["for ",E(r)]})]})};function ft(e){const s=e.toUpperCase();return["COMPLETED","FAILED","RUNNING","CANCELLED","CANCELLING","CRASHED","PAUSED","PENDING","SCHEDULED"].includes(s)?s:null}const ht=({flowIds:e,tags:s,posture:n,states:r,time:c})=>{const a=v(n);return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center",children:[t.jsx("span",{children:"When any flow run"}),e.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"of flow"}),e.map((o,l)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(ge,{flowId:o}),l===e.length-2&&t.jsx("span",{children:"or"})]},o))]}),s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"with the tag"}),t.jsx(we,{tags:s})]}),t.jsx("span",{children:a}),r.length>0?r.map(o=>{const l=ft(o);return l?t.jsx(G,{type:l},o):null}):t.jsx("span",{children:"any state"}),n==="Proactive"&&c!==void 0&&c>0&&t.jsxs("span",{children:["for ",ke(c)]})]})},xt=({trigger:e})=>{const s=e.triggers?.length??0;return t.jsx("div",{className:"flex flex-wrap gap-1 items-center",children:t.jsxs("p",{className:"text-sm",children:["A sequence trigger with ",s," nested"," ",s===1?"trigger":"triggers"," that must fire in order"]})})},yt=e=>{switch(e){case"READY":return"Ready";case"NOT_READY":return"Not Ready";case"PAUSED":return"Paused"}},jt=({workPoolName:e})=>t.jsxs(d,{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:e},className:"inline-flex items-center gap-1",children:[t.jsx(j,{id:"Cpu",className:"size-4"}),e]}),wt=e=>e.length===0?null:e.map((s,n)=>t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(jt,{workPoolName:s.name}),n===e.length-2&&" or ",n<e.length-2&&", "]},s.id)),kt=({workPoolIds:e,posture:s,status:n,time:r})=>{const{data:c=[]}=re(Y({offset:0,work_pools:{id:{any_:e},operator:"and_"}},{enabled:e.length>0})),a=s==="Reactive"?"enters":"stays in",o=yt(n).toLowerCase(),l=e.length===0?"any work pool":`${A(e.length,"work pool")} `;return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center",children:[t.jsx("span",{children:"When"}),t.jsx("span",{children:l}),e.length>0&&wt(c),t.jsx("span",{children:a}),t.jsx("span",{children:o}),s==="Proactive"&&r!==void 0&&t.jsxs("span",{children:["for ",E(r)]})]})},At=e=>t.jsx(z.Suspense,{fallback:t.jsx(S,{className:"h-4 w-full"}),children:t.jsx(_t,{...e})}),_t=({workQueueIds:e,workPoolNames:s,posture:n,status:r,time:c})=>{const a=e.length===0,o=s.length===0,i=oe({queries:e.map(u=>Ae(u))}).map(u=>u.data);return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center text-sm",children:[t.jsx("span",{children:"When"}),a?t.jsx("span",{children:"any work queue"}):t.jsxs(t.Fragment,{children:[t.jsx("span",{children:A(i.length,"work queue")}),i.map((u,y)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Te,{workPoolName:u.work_pool_name??"",workQueueName:u.name,showLabel:!0,showStatus:!0}),y===i.length-2&&t.jsx("span",{children:"or"})]},u.id))]}),!o&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{children:["from the ",A(s.length,"work pool")]}),s.map((u,y)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Se,{workPoolName:u}),y===s.length-2&&t.jsx("span",{children:"or"})]},u))]}),t.jsx("span",{children:v(n)}),t.jsx("span",{children:dt(r).toLowerCase()}),n==="Proactive"&&c!==void 0&&t.jsxs("span",{children:["for ",E(c)]})]})};function J(e){return e==null?[]:Array.isArray(e)?e:[e]}function C(e,s){const n=e.match;if(n&&typeof n=="object")return n[s]}function X(e,s){const n=e.match_related;if(!n)return[];const r=Array.isArray(n)?n:[n],c=[];for(const a of r)if(a&&typeof a=="object"){const o=a[s];o&&c.push(...J(o))}return c}function h(e,s){if(s==null)return[];const n=J(s);return n.includes(`${e}.*`)?[]:n.filter(r=>r.startsWith(e)).map(r=>r.split(`${e}.`)[1]??"").filter(r=>r!==""&&r!=="*")}function M(e){return e.includes("prefect.flow-run.*")?[]:e.filter(s=>s.startsWith("prefect.flow-run.")).map(s=>s.split("prefect.flow-run.")[1]??"").filter(s=>s!=="")}function bt(e){const s=X(e,"prefect.resource.id"),n=h("prefect.flow",s),r=h("prefect.tag",s),c=e.posture,a=M(c==="Reactive"?e.expect??[]:e.after??[]);return{flowIds:n,tags:r,posture:c,states:a,time:e.within}}const O={"prefect.deployment.ready":"ready","prefect.deployment.not-ready":"not_ready","prefect.deployment.disabled":"not_ready"};function Dt(e){const s=C(e,"prefect.resource.id"),n=h("prefect.deployment",s),r=e.posture,c=r==="Reactive"?e.expect:e.after;let a="ready";for(const o of c??[])if(o in O){a=O[o];break}return{deploymentIds:n,posture:r,status:a,time:e.within}}const U={"prefect.work-pool.ready":"READY","prefect.work-pool.not-ready":"NOT_READY","prefect.work-pool.not_ready":"NOT_READY","prefect.work-pool.paused":"PAUSED"};function Nt(e){const s=C(e,"prefect.resource.id"),n=h("prefect.work-pool",s),r=e.posture,c=r==="Reactive"?e.expect:e.after;let a="READY";for(const o of c??[])if(o in U){a=U[o];break}return{workPoolIds:n,posture:r,status:a,time:e.within}}const F={"prefect.work-queue.ready":"READY","prefect.work-queue.not-ready":"NOT_READY","prefect.work-queue.paused":"PAUSED"};function gt(e){const s=C(e,"prefect.resource.id"),n=h("prefect.work-queue",s),r=X(e,"prefect.resource.id"),c=h("prefect.work-pool",r),a=e.posture,o=a==="Reactive"?e.expect:e.after;let l="READY";for(const i of o??[])if(i in F){l=F[i];break}return{workQueueIds:n,workPoolNames:c,posture:a,status:l,time:e.within}}const Tt=({trigger:e})=>{if(Ze(e))return t.jsx(Be,{trigger:e});if(et(e))return t.jsx(xt,{trigger:e});if(!p(e))return t.jsx(W,{});switch(ut(e)){case"flow-run-state":return t.jsx(ht,{...bt(e)});case"deployment-status":return t.jsx(mt,{...Dt(e)});case"work-pool-status":return t.jsx(kt,{...Nt(e)});case"work-queue-status":return t.jsx(At,{...gt(e)});default:return t.jsx(W,{})}},Lt=({automation:e})=>t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx("p",{className:"text-sm text-muted-foreground",children:"Description"}),t.jsx("p",{className:"text-base text-muted-foreground",children:e.description||"None"})]}),Pt=({automation:e})=>{const{trigger:s}=e;return t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx("p",{className:"text-base",children:"Trigger"}),t.jsx(Tt,{trigger:s})]})},Wt=({automation:e})=>{const{data:s,loading:n}=Pe(e),{automationsMap:r,blockDocumentsMap:c,deploymentsMap:a,workPoolsMap:o,workQueuesMap:l}=s;return t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx("p",{className:"text-base",children:A(e.actions.length,"Action")}),t.jsx("ul",{className:"flex flex-col gap-2",children:n?Array.from({length:e.actions.length},(i,u)=>t.jsx(B,{className:"p-4",children:t.jsx(S,{className:"p-2 h-2 w-full"})},u)):e.actions.map(i=>t.jsx("li",{children:t.jsx(Qe,{action:i,automationsMap:r,blockDocumentsMap:c,deploymentsMap:a,workPoolsMap:o,workQueuesMap:l})},i.type))})]})},qt=({automation:e})=>{const{updateAutomation:s}=_e(),n=(r,c)=>{s({enabled:r,id:c},{onSuccess:()=>{_.success(`Automation ${r?"enabled":"disabled"}`)},onError:a=>{const o=a.message||"Unknown error while updating automation";console.error(o)}})};return t.jsx(be,{"aria-label":"toggle automation",checked:e.enabled,onCheckedChange:r=>n(r,e.id)})},It=({id:e,onDelete:s})=>{const n=r=>{navigator.clipboard.writeText(r),_.success("ID copied")};return t.jsxs(Ee,{children:[t.jsx(Re,{asChild:!0,children:t.jsxs(K,{variant:"outline",className:"size-8 p-0",children:[t.jsx("span",{className:"sr-only",children:"Open menu"}),t.jsx(j,{id:"MoreVertical",className:"size-4"})]})}),t.jsxs(ve,{align:"end",children:[t.jsx(Ce,{children:"Actions"}),t.jsx(w,{onClick:()=>n(e),children:"Copy ID"}),t.jsx(w,{asChild:!0,children:t.jsx(d,{to:"/automations/automation/$id/edit",params:{id:e},children:"Edit"})}),t.jsx(w,{onClick:s,children:"Delete"}),t.jsx(w,{asChild:!0,children:t.jsxs("a",{href:De["automations-guide"],className:"flex items-center",children:["Documentation ",t.jsx(j,{id:"ExternalLink",className:"ml-2 size-4"})]})})]})]})},Qt=()=>{const e=ae(),[s,n]=Le(),{deleteAutomation:r}=Ne();return[s,(a,{shouldNavigate:o=!1}={})=>n({title:"Delete Automation",description:`Are you sure you want to delete ${a.name}?`,onConfirm:()=>{r(a.id,{onSuccess:()=>{_.success("Automation deleted"),o&&e({to:"/automations"})},onError:l=>{const i=l.message||"Unknown error while deleting automation.";_.error(i),console.error(i)}})}})]};export{qt as A,It as a,Lt as b,Pt as c,Wt as d,Qt as u};
|
|
2
|
+
//# sourceMappingURL=use-delete-automation-confirmation-dialog-BHgDXlwg.js.map
|