prefect 3.6.14.dev3__py3-none-any.whl → 3.6.14.dev4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/futures.py +17 -4
  3. prefect/runner/runner.py +113 -29
  4. prefect/server/ui-v2/assets/{artifact-card-CNabu-6j.js → artifact-card-DmR_0bKj.js} +2 -2
  5. prefect/server/ui-v2/assets/{artifact-card-CNabu-6j.js.map → artifact-card-DmR_0bKj.js.map} +1 -1
  6. prefect/server/ui-v2/assets/{artifact._id-Emkhr_0h.js → artifact._id-BF4365i6.js} +2 -2
  7. prefect/server/ui-v2/assets/{artifact._id-Emkhr_0h.js.map → artifact._id-BF4365i6.js.map} +1 -1
  8. prefect/server/ui-v2/assets/{automation-schema-CRKJHa4q.js → automation-schema-crrFcHTg.js} +2 -2
  9. prefect/server/ui-v2/assets/{automation-schema-CRKJHa4q.js.map → automation-schema-crrFcHTg.js.map} +1 -1
  10. prefect/server/ui-v2/assets/{automation-wizard-Cej8aik5.js → automation-wizard-DMI3p_HA.js} +2 -2
  11. prefect/server/ui-v2/assets/{automation-wizard-Cej8aik5.js.map → automation-wizard-DMI3p_HA.js.map} +1 -1
  12. prefect/server/ui-v2/assets/automation._id-C_ZATYDQ.js +2 -0
  13. prefect/server/ui-v2/assets/{automation._id-Bm1T3_NO.js.map → automation._id-C_ZATYDQ.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{automation_._id.edit-C5NIVfxR.js → automation_._id.edit-Dkc09fFA.js} +2 -2
  15. prefect/server/ui-v2/assets/{automation_._id.edit-C5NIVfxR.js.map → automation_._id.edit-Dkc09fFA.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{automations-header-CdJSlWw8.js → automations-header-H_FW9LY7.js} +2 -2
  17. prefect/server/ui-v2/assets/{automations-header-CdJSlWw8.js.map → automations-header-H_FW9LY7.js.map} +1 -1
  18. prefect/server/ui-v2/assets/{base-job-template-form-section-DX_X28oU.js → base-job-template-form-section-CVnxwfEi.js} +2 -2
  19. prefect/server/ui-v2/assets/{base-job-template-form-section-DX_X28oU.js.map → base-job-template-form-section-CVnxwfEi.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{block-type-details-BcpcwaJS.js → block-type-details-BIzTWlfj.js} +2 -2
  21. prefect/server/ui-v2/assets/{block-type-details-BcpcwaJS.js.map → block-type-details-BIzTWlfj.js.map} +1 -1
  22. prefect/server/ui-v2/assets/block-type-logo-B3XAhRSL.js +2 -0
  23. prefect/server/ui-v2/assets/{block-type-logo-ox5VqJuy.js.map → block-type-logo-B3XAhRSL.js.map} +1 -1
  24. prefect/server/ui-v2/assets/{block._id-BD6wu3yC.js → block._id-Bj0YEdv1.js} +2 -2
  25. prefect/server/ui-v2/assets/{block._id-BD6wu3yC.js.map → block._id-Bj0YEdv1.js.map} +1 -1
  26. prefect/server/ui-v2/assets/{block_._id.edit-aneXPzUW.js → block_._id.edit-C7sUQ8mQ.js} +2 -2
  27. prefect/server/ui-v2/assets/{block_._id.edit-aneXPzUW.js.map → block_._id.edit-C7sUQ8mQ.js.map} +1 -1
  28. prefect/server/ui-v2/assets/{catalog-C7ttFKuv.js → catalog-Cywf-iho.js} +2 -2
  29. prefect/server/ui-v2/assets/{catalog-C7ttFKuv.js.map → catalog-Cywf-iho.js.map} +1 -1
  30. prefect/server/ui-v2/assets/{catalog_._slug-CrcphBbo.js → catalog_._slug-qLWMRQt3.js} +2 -2
  31. prefect/server/ui-v2/assets/{catalog_._slug-CrcphBbo.js.map → catalog_._slug-qLWMRQt3.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{catalog_._slug_.create-Dd7ATIKq.js → catalog_._slug_.create-LslFlpde.js} +2 -2
  33. prefect/server/ui-v2/assets/{catalog_._slug_.create-Dd7ATIKq.js.map → catalog_._slug_.create-LslFlpde.js.map} +1 -1
  34. prefect/server/ui-v2/assets/{collapsible-D5U2XK4R.js → collapsible-BszH-EeY.js} +2 -2
  35. prefect/server/ui-v2/assets/{collapsible-D5U2XK4R.js.map → collapsible-BszH-EeY.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{concurrency-limit._id-D-xV_tiF.js → concurrency-limit._id-Dam_Ftkw.js} +2 -2
  37. prefect/server/ui-v2/assets/{concurrency-limit._id-D-xV_tiF.js.map → concurrency-limit._id-Dam_Ftkw.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{create-Da7OBOa5.js → create-B11nNTmT.js} +2 -2
  39. prefect/server/ui-v2/assets/{create-Da7OBOa5.js.map → create-B11nNTmT.js.map} +1 -1
  40. prefect/server/ui-v2/assets/create-B8EFPjmO.js +2 -0
  41. prefect/server/ui-v2/assets/{create-CiMo25er.js.map → create-B8EFPjmO.js.map} +1 -1
  42. prefect/server/ui-v2/assets/cronstrue-IJcBJ9tZ.js +2 -0
  43. prefect/server/ui-v2/assets/cronstrue-IJcBJ9tZ.js.map +1 -0
  44. prefect/server/ui-v2/assets/{data-table-Bfa8_ZJd.js → data-table-C1eRvlXV.js} +2 -2
  45. prefect/server/ui-v2/assets/{data-table-Bfa8_ZJd.js.map → data-table-C1eRvlXV.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{delete-confirmation-dialog-D18TITKv.js → delete-confirmation-dialog-DCmC1ZTD.js} +2 -2
  47. prefect/server/ui-v2/assets/{delete-confirmation-dialog-D18TITKv.js.map → delete-confirmation-dialog-DCmC1ZTD.js.map} +1 -1
  48. prefect/server/ui-v2/assets/deployment-action-header-WD51TIyE.js +2 -0
  49. prefect/server/ui-v2/assets/{deployment-action-header-AamGn0qI.js.map → deployment-action-header-WD51TIyE.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{deployment-form-QIRH-pew.js → deployment-form-FaqDdnNa.js} +3 -3
  51. prefect/server/ui-v2/assets/{deployment-form-QIRH-pew.js.map → deployment-form-FaqDdnNa.js.map} +1 -1
  52. prefect/server/ui-v2/assets/{deployment-links-yTRvIDd3.js → deployment-links-CLax44tW.js} +2 -2
  53. prefect/server/ui-v2/assets/{deployment-links-yTRvIDd3.js.map → deployment-links-CLax44tW.js.map} +1 -1
  54. prefect/server/ui-v2/assets/{deployment._id-CCBPOCfw.js → deployment._id-CbWiylvh.js} +2 -2
  55. prefect/server/ui-v2/assets/{deployment._id-CCBPOCfw.js.map → deployment._id-CbWiylvh.js.map} +1 -1
  56. prefect/server/ui-v2/assets/{deployment._id-m4luvPWl.js → deployment._id-DrtOyhFC.js} +2 -2
  57. prefect/server/ui-v2/assets/{deployment._id-m4luvPWl.js.map → deployment._id-DrtOyhFC.js.map} +1 -1
  58. prefect/server/ui-v2/assets/deployment_._id.duplicate-CqlNWQfz.js +2 -0
  59. prefect/server/ui-v2/assets/{deployment_._id.duplicate-DFjSeYn4.js.map → deployment_._id.duplicate-CqlNWQfz.js.map} +1 -1
  60. prefect/server/ui-v2/assets/deployment_._id.edit-CbvCe2YU.js +2 -0
  61. prefect/server/ui-v2/assets/{deployment_._id.edit-5-mFOphJ.js.map → deployment_._id.edit-CbvCe2YU.js.map} +1 -1
  62. prefect/server/ui-v2/assets/{deployment_._id.run-CwVe5hPJ.js → deployment_._id.run-BnIFeR-d.js} +2 -2
  63. prefect/server/ui-v2/assets/{deployment_._id.run-CwVe5hPJ.js.map → deployment_._id.run-BnIFeR-d.js.map} +1 -1
  64. prefect/server/ui-v2/assets/{dropdown-menu-g64QiYKu.js → dropdown-menu-Bhox1zoa.js} +2 -2
  65. prefect/server/ui-v2/assets/{dropdown-menu-g64QiYKu.js.map → dropdown-menu-Bhox1zoa.js.map} +1 -1
  66. prefect/server/ui-v2/assets/{event-resource-display-BqqHFc0B.js → event-resource-display-65B76oFV.js} +2 -2
  67. prefect/server/ui-v2/assets/{event-resource-display-BqqHFc0B.js.map → event-resource-display-65B76oFV.js.map} +1 -1
  68. prefect/server/ui-v2/assets/{event._eventDate._eventId-BR0eukkm.js → event._eventDate._eventId-CxPjH2H7.js} +2 -2
  69. prefect/server/ui-v2/assets/{event._eventDate._eventId-BR0eukkm.js.map → event._eventDate._eventId-CxPjH2H7.js.map} +1 -1
  70. prefect/server/ui-v2/assets/{flow-run-graph-kZfaIevn.js → flow-run-graph-ZOatFLjv.js} +2 -2
  71. prefect/server/ui-v2/assets/{flow-run-graph-kZfaIevn.js.map → flow-run-graph-ZOatFLjv.js.map} +1 -1
  72. prefect/server/ui-v2/assets/flow-run._id-1RC-URiA.js +2 -0
  73. prefect/server/ui-v2/assets/{flow-run._id-Caq--9Lr.js.map → flow-run._id-1RC-URiA.js.map} +1 -1
  74. prefect/server/ui-v2/assets/flow-run._id-CDFeuz16.js +2 -0
  75. prefect/server/ui-v2/assets/{flow-run._id-DiA0_X5m.js.map → flow-run._id-CDFeuz16.js.map} +1 -1
  76. prefect/server/ui-v2/assets/{flow-run._id-BX0UeXTj.js → flow-run._id-U6rzXfvR.js} +4 -4
  77. prefect/server/ui-v2/assets/{flow-run._id-BX0UeXTj.js.map → flow-run._id-U6rzXfvR.js.map} +1 -1
  78. prefect/server/ui-v2/assets/{flow-runs-pagination-CoZZ-ed_.js → flow-runs-pagination-D_d5hdM0.js} +2 -2
  79. prefect/server/ui-v2/assets/{flow-runs-pagination-CoZZ-ed_.js.map → flow-runs-pagination-D_d5hdM0.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{flow._id-nRzTWzLb.js → flow._id-DkeN8TLS.js} +2 -2
  81. prefect/server/ui-v2/assets/{flow._id-nRzTWzLb.js.map → flow._id-DkeN8TLS.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{form-CdcF42XZ.js → form-CJfDUosd.js} +2 -2
  83. prefect/server/ui-v2/assets/{form-CdcF42XZ.js.map → form-CJfDUosd.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{header-DijI5Lcu.js → header-C5liWcfp.js} +2 -2
  85. prefect/server/ui-v2/assets/{header-DijI5Lcu.js.map → header-C5liWcfp.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{header-DkJo9Uge.js → header-MZZX5lQ8.js} +2 -2
  87. prefect/server/ui-v2/assets/{header-DkJo9Uge.js.map → header-MZZX5lQ8.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{header-DV0gMQER.js → header-vYbWNFdK.js} +2 -2
  89. prefect/server/ui-v2/assets/{header-DV0gMQER.js.map → header-vYbWNFdK.js.map} +1 -1
  90. prefect/server/ui-v2/assets/{index-VUajxmNL.js → index-4xVLy12E.js} +2 -2
  91. prefect/server/ui-v2/assets/{index-VUajxmNL.js.map → index-4xVLy12E.js.map} +1 -1
  92. prefect/server/ui-v2/assets/{index-KlV75baW.js → index-5fQrQZ3K.js} +2 -2
  93. prefect/server/ui-v2/assets/{index-KlV75baW.js.map → index-5fQrQZ3K.js.map} +1 -1
  94. prefect/server/ui-v2/assets/index-7bWZ2Znt.js +2 -0
  95. prefect/server/ui-v2/assets/{index-CqvGvZOq.js.map → index-7bWZ2Znt.js.map} +1 -1
  96. prefect/server/ui-v2/assets/{index-Chtop8D8.js → index-BOVwKiXn.js} +2 -2
  97. prefect/server/ui-v2/assets/{index-Chtop8D8.js.map → index-BOVwKiXn.js.map} +1 -1
  98. prefect/server/ui-v2/assets/{index-BZ9TDxSy.js → index-BPmw935P.js} +2 -2
  99. prefect/server/ui-v2/assets/{index-BZ9TDxSy.js.map → index-BPmw935P.js.map} +1 -1
  100. prefect/server/ui-v2/assets/index-BR6bwuK4.js +2 -0
  101. prefect/server/ui-v2/assets/{index-BCKNs_w7.js.map → index-BR6bwuK4.js.map} +1 -1
  102. prefect/server/ui-v2/assets/{index-DYKO0qOd.js → index-B_3WKH2_.js} +2 -2
  103. prefect/server/ui-v2/assets/{index-DYKO0qOd.js.map → index-B_3WKH2_.js.map} +1 -1
  104. prefect/server/ui-v2/assets/{index-BV3WqCCv.js → index-BgOHAC5L.js} +2 -2
  105. prefect/server/ui-v2/assets/{index-BV3WqCCv.js.map → index-BgOHAC5L.js.map} +1 -1
  106. prefect/server/ui-v2/assets/{index-CUZXozY8.js → index-Bmd9p_xN.js} +2 -2
  107. prefect/server/ui-v2/assets/{index-CUZXozY8.js.map → index-Bmd9p_xN.js.map} +1 -1
  108. prefect/server/ui-v2/assets/{index-faXvGo5k.js → index-BmdTLblr.js} +2 -2
  109. prefect/server/ui-v2/assets/{index-faXvGo5k.js.map → index-BmdTLblr.js.map} +1 -1
  110. prefect/server/ui-v2/assets/{index-Cuh3BwlA.js → index-CCCwtbSq.js} +2 -2
  111. prefect/server/ui-v2/assets/{index-Cuh3BwlA.js.map → index-CCCwtbSq.js.map} +1 -1
  112. prefect/server/ui-v2/assets/{index-yTjygRmH.js → index-CbJNJTr8.js} +2 -2
  113. prefect/server/ui-v2/assets/{index-yTjygRmH.js.map → index-CbJNJTr8.js.map} +1 -1
  114. prefect/server/ui-v2/assets/index-CcyfsgGP.js +2 -0
  115. prefect/server/ui-v2/assets/{index-BijfHkUE.js.map → index-CcyfsgGP.js.map} +1 -1
  116. prefect/server/ui-v2/assets/{index-AXV1ellj.js → index-CfHvTOAO.js} +2 -2
  117. prefect/server/ui-v2/assets/{index-AXV1ellj.js.map → index-CfHvTOAO.js.map} +1 -1
  118. prefect/server/ui-v2/assets/{index-BGZtCgRR.js → index-ClXbR8i0.js} +2 -2
  119. prefect/server/ui-v2/assets/{index-BGZtCgRR.js.map → index-ClXbR8i0.js.map} +1 -1
  120. prefect/server/ui-v2/assets/{index-BfuGBXBN.js → index-Cyw9YHlj.js} +2 -2
  121. prefect/server/ui-v2/assets/{index-BfuGBXBN.js.map → index-Cyw9YHlj.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{index-BZqccBpn.js → index-DLuXqHi9.js} +6 -6
  123. prefect/server/ui-v2/assets/index-DLuXqHi9.js.map +1 -0
  124. prefect/server/ui-v2/assets/{index-BmUvoLOK.js → index-DeeA9nPM.js} +2 -2
  125. prefect/server/ui-v2/assets/{index-BmUvoLOK.js.map → index-DeeA9nPM.js.map} +1 -1
  126. prefect/server/ui-v2/assets/index-MeJBhX-C.js +2 -0
  127. prefect/server/ui-v2/assets/{index-CUJoNEgb.js.map → index-MeJBhX-C.js.map} +1 -1
  128. prefect/server/ui-v2/assets/{index-DO_c3_A_.js → index-enqoJV8x.js} +2 -2
  129. prefect/server/ui-v2/assets/{index-DO_c3_A_.js.map → index-enqoJV8x.js.map} +1 -1
  130. prefect/server/ui-v2/assets/{json-input-DFgWdLGv.js → json-input-CJ1Ipjax.js} +2 -2
  131. prefect/server/ui-v2/assets/{json-input-DFgWdLGv.js.map → json-input-CJ1Ipjax.js.map} +1 -1
  132. prefect/server/ui-v2/assets/{key._key-CpeWM0mN.js → key._key-B0wb5Umi.js} +2 -2
  133. prefect/server/ui-v2/assets/{key._key-CpeWM0mN.js.map → key._key-B0wb5Umi.js.map} +1 -1
  134. prefect/server/ui-v2/assets/{lazy-markdown-Bzi0YUUV.js → lazy-markdown-sP3PYQgB.js} +3 -3
  135. prefect/server/ui-v2/assets/{lazy-markdown-Bzi0YUUV.js.map → lazy-markdown-sP3PYQgB.js.map} +1 -1
  136. prefect/server/ui-v2/assets/{login-CM0nuDdd.js → login-DNY0o3XU.js} +2 -2
  137. prefect/server/ui-v2/assets/{login-CM0nuDdd.js.map → login-DNY0o3XU.js.map} +1 -1
  138. prefect/server/ui-v2/assets/{markdown-input-CGOAnaWz.js → markdown-input-Bos2JYXW.js} +2 -2
  139. prefect/server/ui-v2/assets/{markdown-input-CGOAnaWz.js.map → markdown-input-Bos2JYXW.js.map} +1 -1
  140. prefect/server/ui-v2/assets/{python-example-snippet-CyJ28Tm-.js → python-example-snippet-CWSJRd48.js} +3 -3
  141. prefect/server/ui-v2/assets/{python-example-snippet-CyJ28Tm-.js.map → python-example-snippet-CWSJRd48.js.map} +1 -1
  142. prefect/server/ui-v2/assets/{python-input-D8_x22t4.js → python-input-Bu4995lK.js} +2 -2
  143. prefect/server/ui-v2/assets/{python-input-D8_x22t4.js.map → python-input-Bu4995lK.js.map} +1 -1
  144. prefect/server/ui-v2/assets/{radio-group-Dgu38qwz.js → radio-group-C0D0oLYd.js} +2 -2
  145. prefect/server/ui-v2/assets/{radio-group-Dgu38qwz.js.map → radio-group-C0D0oLYd.js.map} +1 -1
  146. prefect/server/ui-v2/assets/{route-error-state-CVHTggxQ.js → route-error-state-DzKu_Iw_.js} +2 -2
  147. prefect/server/ui-v2/assets/{route-error-state-CVHTggxQ.js.map → route-error-state-DzKu_Iw_.js.map} +1 -1
  148. prefect/server/ui-v2/assets/{schema-form-DqRLX--T.js → schema-form-BD95b0iS.js} +2 -2
  149. prefect/server/ui-v2/assets/schema-form-BD95b0iS.js.map +1 -0
  150. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-DuEmswz-.js → schema-form-input-string-format-datetime-DyDs1jNl.js} +4 -4
  151. prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-DuEmswz-.js.map → schema-form-input-string-format-datetime-DyDs1jNl.js.map} +1 -1
  152. prefect/server/ui-v2/assets/{settings-CtKmYnoo.js → settings-a90cwhBe.js} +2 -2
  153. prefect/server/ui-v2/assets/{settings-CtKmYnoo.js.map → settings-a90cwhBe.js.map} +1 -1
  154. prefect/server/ui-v2/assets/{sort-filter-BNQ6rjAG.js → sort-filter-CCltjs1E.js} +2 -2
  155. prefect/server/ui-v2/assets/{sort-filter-BNQ6rjAG.js.map → sort-filter-CCltjs1E.js.map} +1 -1
  156. prefect/server/ui-v2/assets/{table-CJS-5Aky.js → table-CrPymfJD.js} +2 -2
  157. prefect/server/ui-v2/assets/{table-CJS-5Aky.js.map → table-CrPymfJD.js.map} +1 -1
  158. prefect/server/ui-v2/assets/{tags-input-CDvuqe9B.js → tags-input-BdNYl8nS.js} +2 -2
  159. prefect/server/ui-v2/assets/{tags-input-CDvuqe9B.js.map → tags-input-BdNYl8nS.js.map} +1 -1
  160. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-DMqNFEVn.js → task-run-concurrency-limits-reset-dialog-B4bdiAgf.js} +2 -2
  161. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-DMqNFEVn.js.map → task-run-concurrency-limits-reset-dialog-B4bdiAgf.js.map} +1 -1
  162. prefect/server/ui-v2/assets/{task-run._id-CV5t0LR0.js → task-run._id-BQac40_I.js} +3 -3
  163. prefect/server/ui-v2/assets/{task-run._id-CV5t0LR0.js.map → task-run._id-BQac40_I.js.map} +1 -1
  164. prefect/server/ui-v2/assets/task-run._id-BzeMfM08.js +2 -0
  165. prefect/server/ui-v2/assets/{task-run._id-CiVsXKpy.js.map → task-run._id-BzeMfM08.js.map} +1 -1
  166. prefect/server/ui-v2/assets/task-runs-pagination-WFGIqR6p.js +2 -0
  167. prefect/server/ui-v2/assets/{task-runs-pagination-DGjxL4DO.js.map → task-runs-pagination-WFGIqR6p.js.map} +1 -1
  168. prefect/server/ui-v2/assets/{textarea-Mne2s-1n.js → textarea-CGFflH-n.js} +2 -2
  169. prefect/server/ui-v2/assets/{textarea-Mne2s-1n.js.map → textarea-CGFflH-n.js.map} +1 -1
  170. prefect/server/ui-v2/assets/{timezone-select-CPBtT8tA.js → timezone-select-ClE9nfKA.js} +2 -2
  171. prefect/server/ui-v2/assets/{timezone-select-CPBtT8tA.js.map → timezone-select-ClE9nfKA.js.map} +1 -1
  172. prefect/server/ui-v2/assets/{toggle-group-CvPe0UY1.js → toggle-group-Dnv_LMnU.js} +2 -2
  173. prefect/server/ui-v2/assets/{toggle-group-CvPe0UY1.js.map → toggle-group-Dnv_LMnU.js.map} +1 -1
  174. prefect/server/ui-v2/assets/{use-debounce-callback-Dcf0d0U7.js → use-debounce-callback-CVfZS_LP.js} +2 -2
  175. prefect/server/ui-v2/assets/{use-debounce-callback-Dcf0d0U7.js.map → use-debounce-callback-CVfZS_LP.js.map} +1 -1
  176. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-DnRkM1Cj.js → use-delete-automation-confirmation-dialog-CRGV6wvn.js} +2 -2
  177. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-DnRkM1Cj.js.map → use-delete-automation-confirmation-dialog-CRGV6wvn.js.map} +1 -1
  178. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-CMHtwDvb.js → use-delete-block-document-confirmation-dialog-DNMP_gtr.js} +2 -2
  179. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-CMHtwDvb.js.map → use-delete-block-document-confirmation-dialog-DNMP_gtr.js.map} +1 -1
  180. prefect/server/ui-v2/assets/{use-delete-confirmation-dialog-Bka9YDdO.js → use-delete-confirmation-dialog-C5d6hPL-.js} +2 -2
  181. prefect/server/ui-v2/assets/{use-delete-confirmation-dialog-Bka9YDdO.js.map → use-delete-confirmation-dialog-C5d6hPL-.js.map} +1 -1
  182. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DB4pe2_m.js → use-flow-runs-selected-rows-D3-TVsRL.js} +2 -2
  183. prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DB4pe2_m.js.map → use-flow-runs-selected-rows-D3-TVsRL.js.map} +1 -1
  184. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DUPrB7V9.js → use-get-artifacts-flow-task-runs-I3Wb9fOV.js} +2 -2
  185. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DUPrB7V9.js.map → use-get-artifacts-flow-task-runs-I3Wb9fOV.js.map} +1 -1
  186. prefect/server/ui-v2/assets/{use-is-overflowing-Cc-Qm0vx.js → use-is-overflowing-CyVH32I2.js} +2 -2
  187. prefect/server/ui-v2/assets/{use-is-overflowing-Cc-Qm0vx.js.map → use-is-overflowing-CyVH32I2.js.map} +1 -1
  188. prefect/server/ui-v2/assets/{use-page-title-ELpQMkBC.js → use-page-title-CImKMV-D.js} +2 -2
  189. prefect/server/ui-v2/assets/{use-page-title-ELpQMkBC.js.map → use-page-title-CImKMV-D.js.map} +1 -1
  190. prefect/server/ui-v2/assets/use-quick-run-Be-i6Tzi.js +2 -0
  191. prefect/server/ui-v2/assets/{use-quick-run-uAasMmAv.js.map → use-quick-run-Be-i6Tzi.js.map} +1 -1
  192. prefect/server/ui-v2/assets/{use-state-favicon-CzOUYzQe.js → use-state-favicon-DtW_I9k3.js} +2 -2
  193. prefect/server/ui-v2/assets/{use-state-favicon-CzOUYzQe.js.map → use-state-favicon-DtW_I9k3.js.map} +1 -1
  194. prefect/server/ui-v2/assets/{use-stepper-DvHmfROo.js → use-stepper-BSvi_u_j.js} +2 -2
  195. prefect/server/ui-v2/assets/{use-stepper-DvHmfROo.js.map → use-stepper-BSvi_u_j.js.map} +1 -1
  196. prefect/server/ui-v2/assets/{utilities-XA-1-LhA.js → utilities-BCBDUmEl.js} +2 -2
  197. prefect/server/ui-v2/assets/{utilities-XA-1-LhA.js.map → utilities-BCBDUmEl.js.map} +1 -1
  198. prefect/server/ui-v2/assets/{vendor-codemirror-Dn73yRFx.js → vendor-codemirror-OTxfneaa.js} +2 -2
  199. prefect/server/ui-v2/assets/{vendor-codemirror-Dn73yRFx.js.map → vendor-codemirror-OTxfneaa.js.map} +1 -1
  200. prefect/server/ui-v2/assets/{vendor-date-Bxa7CHB1.js → vendor-date-CRz8gtWZ.js} +2 -2
  201. prefect/server/ui-v2/assets/{vendor-date-Bxa7CHB1.js.map → vendor-date-CRz8gtWZ.js.map} +1 -1
  202. prefect/server/ui-v2/assets/{vendor-forms-mroZAMaw.js → vendor-forms-D-iybWES.js} +2 -2
  203. prefect/server/ui-v2/assets/{vendor-forms-mroZAMaw.js.map → vendor-forms-D-iybWES.js.map} +1 -1
  204. prefect/server/ui-v2/assets/{vendor-markdown-BV905mMk.js → vendor-markdown-TdbL8FCd.js} +2 -2
  205. prefect/server/ui-v2/assets/{vendor-markdown-BV905mMk.js.map → vendor-markdown-TdbL8FCd.js.map} +1 -1
  206. prefect/server/ui-v2/assets/{vendor-radix-CP6hQtRc.js → vendor-radix-DRMjKWJW.js} +5 -5
  207. prefect/server/ui-v2/assets/{vendor-radix-CP6hQtRc.js.map → vendor-radix-DRMjKWJW.js.map} +1 -1
  208. prefect/server/ui-v2/assets/{vendor-recharts-BOcghvr2.js → vendor-recharts-BGjDGXVf.js} +2 -2
  209. prefect/server/ui-v2/assets/{vendor-recharts-BOcghvr2.js.map → vendor-recharts-BGjDGXVf.js.map} +1 -1
  210. prefect/server/ui-v2/assets/{vendor-tanstack-CLpbOGYv.js → vendor-tanstack-CWDKYA_B.js} +2 -2
  211. prefect/server/ui-v2/assets/{vendor-tanstack-CLpbOGYv.js.map → vendor-tanstack-CWDKYA_B.js.map} +1 -1
  212. prefect/server/ui-v2/assets/{work-pool-filter-D4DI4Hd5.js → work-pool-filter-BuJB9elW.js} +2 -2
  213. prefect/server/ui-v2/assets/{work-pool-filter-D4DI4Hd5.js.map → work-pool-filter-BuJB9elW.js.map} +1 -1
  214. prefect/server/ui-v2/assets/{work-pool-queue-toggle--tVsqhDi.js → work-pool-queue-toggle-DP2ONU28.js} +2 -2
  215. prefect/server/ui-v2/assets/{work-pool-queue-toggle--tVsqhDi.js.map → work-pool-queue-toggle-DP2ONU28.js.map} +1 -1
  216. prefect/server/ui-v2/assets/{work-pool._workPoolName-Ba0XSN4m.js → work-pool._workPoolName-BjhJe3F4.js} +2 -2
  217. prefect/server/ui-v2/assets/{work-pool._workPoolName-Ba0XSN4m.js.map → work-pool._workPoolName-BjhJe3F4.js.map} +1 -1
  218. prefect/server/ui-v2/assets/work-pool_._workPoolName.edit-lHDf1Aih.js +2 -0
  219. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CeYLESXS.js.map → work-pool_._workPoolName.edit-lHDf1Aih.js.map} +1 -1
  220. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-CHvlnO-U.js → work-pool_._workPoolName.queue._workQueueName-CLthz7sB.js} +2 -2
  221. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-CHvlnO-U.js.map → work-pool_._workPoolName.queue._workQueueName-CLthz7sB.js.map} +1 -1
  222. prefect/server/ui-v2/assets/{work-queue-icon-text-DnQAtUi_.js → work-queue-icon-text-4iEAtZOh.js} +2 -2
  223. prefect/server/ui-v2/assets/{work-queue-icon-text-DnQAtUi_.js.map → work-queue-icon-text-4iEAtZOh.js.map} +1 -1
  224. prefect/server/ui-v2/assets/{zod-cc-7bk3x.js → zod-CjGf5GIv.js} +2 -2
  225. prefect/server/ui-v2/assets/{zod-cc-7bk3x.js.map → zod-CjGf5GIv.js.map} +1 -1
  226. prefect/server/ui-v2/index.html +6 -6
  227. {prefect-3.6.14.dev3.dist-info → prefect-3.6.14.dev4.dist-info}/METADATA +2 -2
  228. {prefect-3.6.14.dev3.dist-info → prefect-3.6.14.dev4.dist-info}/RECORD +231 -231
  229. prefect/server/ui-v2/assets/automation._id-Bm1T3_NO.js +0 -2
  230. prefect/server/ui-v2/assets/block-type-logo-ox5VqJuy.js +0 -2
  231. prefect/server/ui-v2/assets/create-CiMo25er.js +0 -2
  232. prefect/server/ui-v2/assets/cronstrue-CeanGOEE.js +0 -2
  233. prefect/server/ui-v2/assets/cronstrue-CeanGOEE.js.map +0 -1
  234. prefect/server/ui-v2/assets/deployment-action-header-AamGn0qI.js +0 -2
  235. prefect/server/ui-v2/assets/deployment_._id.duplicate-DFjSeYn4.js +0 -2
  236. prefect/server/ui-v2/assets/deployment_._id.edit-5-mFOphJ.js +0 -2
  237. prefect/server/ui-v2/assets/flow-run._id-Caq--9Lr.js +0 -2
  238. prefect/server/ui-v2/assets/flow-run._id-DiA0_X5m.js +0 -2
  239. prefect/server/ui-v2/assets/index-BCKNs_w7.js +0 -2
  240. prefect/server/ui-v2/assets/index-BZqccBpn.js.map +0 -1
  241. prefect/server/ui-v2/assets/index-BijfHkUE.js +0 -2
  242. prefect/server/ui-v2/assets/index-CUJoNEgb.js +0 -2
  243. prefect/server/ui-v2/assets/index-CqvGvZOq.js +0 -2
  244. prefect/server/ui-v2/assets/schema-form-DqRLX--T.js.map +0 -1
  245. prefect/server/ui-v2/assets/task-run._id-CiVsXKpy.js +0 -2
  246. prefect/server/ui-v2/assets/task-runs-pagination-DGjxL4DO.js +0 -2
  247. prefect/server/ui-v2/assets/use-quick-run-uAasMmAv.js +0 -2
  248. prefect/server/ui-v2/assets/work-pool_._workPoolName.edit-CeYLESXS.js +0 -2
  249. {prefect-3.6.14.dev3.dist-info → prefect-3.6.14.dev4.dist-info}/WHEEL +0 -0
  250. {prefect-3.6.14.dev3.dist-info → prefect-3.6.14.dev4.dist-info}/entry_points.txt +0 -0
  251. {prefect-3.6.14.dev3.dist-info → prefect-3.6.14.dev4.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"task-run._id-CV5t0LR0.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-BQac40_I.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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"}
@@ -0,0 +1,2 @@
1
+ import{j as r}from"./vendor-tanstack-CWDKYA_B.js";import{s}from"./index-DLuXqHi9.js";import{R as a}from"./route-error-state-DzKu_Iw_.js";import{o as i,e as m}from"./vendor-forms-D-iybWES.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-DRMjKWJW.js";import"./vendor-recharts-BGjDGXVf.js";import"./vendor-date-CRz8gtWZ.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-BzeMfM08.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-run._id-CiVsXKpy.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 { 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":["z","tab","default","catch","TaskRunErrorComponent","error","reset","serverError","categorizeError","jsxs","jsx","RouteErrorState"],"mappings":"6UAWqBA,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"}
1
+ {"version":3,"file":"task-run._id-BzeMfM08.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 { 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":["z","tab","default","catch","TaskRunErrorComponent","error","reset","serverError","categorizeError","jsxs","jsx","RouteErrorState"],"mappings":"6UAWqBA,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-CWDKYA_B.js";import{S,a as w,b as E,c as P,e as u,C as h,cr as z,ak as O,X as Q,aq as W,an as X,ao as q,B as H,g as J,h as x,bs as m,bB as g,aM as N,bU as v,bR as y,bS as C,I as D,bT as I,ar as T,al as K,q as Y,b5 as d,b6 as Z,b7 as R,b8 as o,cs as ee,b9 as se,ba as te,ct as ae}from"./index-DLuXqHi9.js";const je=({defaultValue:t,value:a,onSelect:s})=>e.jsxs(S,{defaultValue:t,value:a,onValueChange:s,children:[e.jsx(w,{"aria-label":"Task run sort order",className:"w-full",children:e.jsx(E,{placeholder:"Sort by"})}),e.jsxs(P,{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(h,{className:re({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(O,{checked:r??!1,onCheckedChange:l}),e.jsx(le,{taskRun:t,flow:a,flowRun:s})]}),e.jsx("div",{children:e.jsx(Q,{tags:t.tags??[]})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[t.state&&e.jsx(W,{type:t.state.type,name:t.state.name}),e.jsx(ie,{taskRun:t}),e.jsx(ne,{taskRun:t})]})]})},re=z("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"}}}),le=({taskRun:t,flow:a,flowRun:s})=>e.jsx("div",{className:"flex items-center",children:e.jsx(H,{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})})]})})}),ie=({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(y,{children:[e.jsx(C,{asChild:!0,disabled:!r,children:e.jsxs("div",{className:"text-xs font-mono flex gap-2 items-center",children:[e.jsx(D,{id:"Calendar",className:"size-4"}),r??"No start time"]})}),e.jsx(I,{children:l})]})})},ne=({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(y,{children:[e.jsx(C,{asChild:!0,children:e.jsxs("div",{className:"flex gap-2 items-center text-xs font-mono",children:[e.jsx(D,{id:"Clock",className:"size-4"}),l]})}),e.jsx(I,{children:i})]})})},ce=({taskRun:t,flowRunId:a,checked:s,onCheckedChange:r})=>{const{data:l}=p(X(a)),{data:i}=p(q(l.flow_id));return e.jsx(L,{taskRun:t,flow:i,flowRun:l,checked:s,onCheckedChange:r})},de=({taskRun:t,checked:a,onCheckedChange:s})=>{const r=t.flow_run_id;return r?e.jsx(ce,{taskRun:t,flowRunId:r,checked:a,onCheckedChange:s}):e.jsx(L,{taskRun:t,checked:a,onCheckedChange:s})},oe=({taskRun:t,checked:a,onCheckedChange:s})=>e.jsx(_.Suspense,{fallback:e.jsxs(h,{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(de,{taskRun:t,checked:a,onCheckedChange:s})}),fe=({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(K,{children:"No runs found"}),a&&e.jsx(Y,{onClick:a,children:"Clear Filters"})]})}):e.jsx("ul",{className:"flex flex-col gap-2",children:t.map(l=>e.jsx("li",{children:e.jsx(oe,{taskRun:l,checked:r?.has(l.id),onCheckedChange:s?i=>s(l.id,i):void 0})},l.id))}):e.jsx(xe,{numSkeletons:5}),xe=({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(h,{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))}),me=[5,10,25,50,100],be=({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}),M=()=>r({limit:s.limit,page:a}),A=()=>{s.page>1&&l?.(1)},F=()=>{s.page>1&&l?.(s.page-1)},G=()=>{s.page<a&&l?.(s.page+1)},k=()=>{s.page<a&&l?.(a)},j=s.page<=1,f=s.page>=a,U=c=>{const b=Number(c),V=Math.ceil(t/b),$=Math.min(s.page,V);r({limit:b,page:$})};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(S,{value:String(s.limit),onValueChange:U,children:[e.jsx(w,{"aria-label":"Items per page",children:e.jsx(E,{placeholder:"Theme"})}),e.jsx(P,{children:me.map(c=>e.jsx(u,{value:String(c),children:c},c))})]})]}),e.jsx(Z,{className:"justify-end",children:e.jsxs(R,{children:[e.jsxs(o,{children:[e.jsx(ee,{onClick:i,onMouseEnter:A,disabled:j}),e.jsx(se,{onClick:n,onMouseEnter:F,disabled:j})]}),e.jsxs(o,{className:"text-sm",children:["Page ",a===0?0:s.page," of ",a]}),e.jsx(o,{children:e.jsx(te,{onClick:B,onMouseEnter:G,disabled:f})}),e.jsx(o,{children:e.jsx(ae,{onClick:M,onMouseEnter:k,disabled:f})})]})})]})};export{je as T,be as a,fe as b};
2
+ //# sourceMappingURL=task-runs-pagination-WFGIqR6p.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-runs-pagination-DGjxL4DO.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 { Typography } from \"@/components/ui/typography\";\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<Typography>No runs found</Typography>\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","Typography","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":"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"}
1
+ {"version":3,"file":"task-runs-pagination-WFGIqR6p.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 { Typography } from \"@/components/ui/typography\";\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<Typography>No runs found</Typography>\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","Typography","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":"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"}
@@ -1,2 +1,2 @@
1
- import{j as i}from"./vendor-tanstack-CLpbOGYv.js";import{aW as t}from"./index-BZqccBpn.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-Mne2s-1n.js.map
1
+ import{j as i}from"./vendor-tanstack-CWDKYA_B.js";import{aW as t}from"./index-DLuXqHi9.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-CGFflH-n.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textarea-Mne2s-1n.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
+ {"version":3,"file":"textarea-CGFflH-n.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 n,j as e}from"./vendor-tanstack-CLpbOGYv.js";import{ac as j,ad as T,ae as f,af as L,ah as E,ag as g,ai as w,aj as u}from"./index-BZqccBpn.js";import{c as b,e as z}from"./dropdown-menu-g64QiYKu.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]=n.useState(""),t=n.useDeferredValue(c),i=n.useMemo(()=>p.filter(o=>o.label.toLowerCase().includes(t.toLowerCase())||o.value.toLowerCase().includes(t.toLowerCase())),[t]),d=n.useMemo(()=>h.filter(o=>o.label.toLowerCase().includes(t.toLowerCase())||o.value.toLowerCase().includes(t.toLowerCase())),[t]),S=n.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:r})=>e.jsx(u,{selected:s===r,onSelect:l=>{m(l),a("")},value:r,children:o},r)),e.jsx(z,{}),d.length>0&&e.jsx(b,{children:"All timezones"}),d.map(({label:o,value:r})=>e.jsx(u,{selected:s===r,onSelect:l=>{m(l),a("")},value:r,children:o},r))]})})]})]})};export{A as T};
2
- //# sourceMappingURL=timezone-select-CPBtT8tA.js.map
1
+ import{r as n,j as e}from"./vendor-tanstack-CWDKYA_B.js";import{ac as j,ad as T,ae as f,af as L,ah as E,ag as g,ai as w,aj as u}from"./index-DLuXqHi9.js";import{c as b,e as z}from"./dropdown-menu-Bhox1zoa.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]=n.useState(""),t=n.useDeferredValue(c),i=n.useMemo(()=>p.filter(o=>o.label.toLowerCase().includes(t.toLowerCase())||o.value.toLowerCase().includes(t.toLowerCase())),[t]),d=n.useMemo(()=>h.filter(o=>o.label.toLowerCase().includes(t.toLowerCase())||o.value.toLowerCase().includes(t.toLowerCase())),[t]),S=n.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:r})=>e.jsx(u,{selected:s===r,onSelect:l=>{m(l),a("")},value:r,children:o},r)),e.jsx(z,{}),d.length>0&&e.jsx(b,{children:"All timezones"}),d.map(({label:o,value:r})=>e.jsx(u,{selected:s===r,onSelect:l=>{m(l),a("")},value:r,children:o},r))]})})]})]})};export{A as T};
2
+ //# sourceMappingURL=timezone-select-ClE9nfKA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timezone-select-CPBtT8tA.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
+ {"version":3,"file":"timezone-select-ClE9nfKA.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-CLpbOGYv.js";import{ay as l,az as c}from"./vendor-radix-CP6hQtRc.js";import{cr as g,aW as d}from"./index-BZqccBpn.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-CvPe0UY1.js.map
1
+ import{j as i,r as s}from"./vendor-tanstack-CWDKYA_B.js";import{ay as l,az as c}from"./vendor-radix-DRMjKWJW.js";import{cr as g,aW as d}from"./index-DLuXqHi9.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-Dnv_LMnU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-group-CvPe0UY1.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"}
1
+ {"version":3,"file":"toggle-group-Dnv_LMnU.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"}
@@ -1,2 +1,2 @@
1
- import{r}from"./vendor-tanstack-CLpbOGYv.js";const a=(c,n,t=!1)=>{const u=r.useRef(null),s=r.useRef(c),e=r.useRef(!0);return s.current=c,r.useCallback((...f)=>{const o=()=>{s.current(...f),e.current=!0};u.current&&clearTimeout(u.current),t&&e.current?(o(),e.current=!1):u.current=setTimeout(()=>{t||o(),e.current=!0},n)},[n,t])};export{a as u};
2
- //# sourceMappingURL=use-debounce-callback-Dcf0d0U7.js.map
1
+ import{r}from"./vendor-tanstack-CWDKYA_B.js";const a=(c,n,t=!1)=>{const u=r.useRef(null),s=r.useRef(c),e=r.useRef(!0);return s.current=c,r.useCallback((...f)=>{const o=()=>{s.current(...f),e.current=!0};u.current&&clearTimeout(u.current),t&&e.current?(o(),e.current=!1):u.current=setTimeout(()=>{t||o(),e.current=!0},n)},[n,t])};export{a as u};
2
+ //# sourceMappingURL=use-debounce-callback-CVfZS_LP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-debounce-callback-Dcf0d0U7.js","sources":["../../src/hooks/use-debounce-callback.tsx"],"sourcesContent":["import { useCallback, useRef } from \"react\";\n\n/**\n * A custom hook that returns a debounced version of the callback function.\n * The debounced function will only execute after the specified delay has passed\n * without the function being called again.\n *\n * @template Args - The tuple type representing the arguments of the callback\n * @template R - The return type of the callback\n * @param {(...args: Args) => R} callback - The function to debounce\n * @param {number} delay - The delay in milliseconds\n * @param {boolean} [leading=false] - Whether to call the function on the leading edge\n * @returns {(...args: Args) => void} - The debounced callback function\n */\nconst useDebounceCallback = <Args extends unknown[], R>(\n\tcallback: (...args: Args) => R,\n\tdelay: number,\n\tleading = false,\n): ((...args: Args) => void) => {\n\tconst timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\tconst callbackRef = useRef<(...args: Args) => R>(callback);\n\tconst leadingCallRef = useRef<boolean>(true);\n\n\t// Update the callback reference when it changes\n\tcallbackRef.current = callback;\n\n\treturn useCallback(\n\t\t(...args: Args) => {\n\t\t\tconst invokeFunction = () => {\n\t\t\t\tcallbackRef.current(...args);\n\t\t\t\tleadingCallRef.current = true;\n\t\t\t};\n\n\t\t\t// Clear any existing timeout\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\n\t\t\t// Handle leading edge calls\n\t\t\tif (leading && leadingCallRef.current) {\n\t\t\t\tinvokeFunction();\n\t\t\t\tleadingCallRef.current = false;\n\t\t\t} else {\n\t\t\t\t// Set new timeout for trailing edge\n\t\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tif (!leading) {\n\t\t\t\t\t\tinvokeFunction();\n\t\t\t\t\t}\n\t\t\t\t\tleadingCallRef.current = true;\n\t\t\t\t}, delay);\n\t\t\t}\n\t\t},\n\t\t[delay, leading],\n\t);\n};\n\nexport default useDebounceCallback;\n\n// Example usage with strict types:\n\n// type SearchProps {\n// onSearch: (term: string) => Promise<void>;\n// }\n\n// const SearchComponent: React.FC<SearchProps> = ({ onSearch }) => {\n// // Type inference works automatically\n// const debouncedSearch = useDebounceCallback(onSearch, 500);\n\n// // Multiple parameters example\n// const handleMultiParam = (id: number, value: string) => {\n// console.log(id, value);\n// };\n// const debouncedMultiParam = useDebounceCallback(handleMultiParam, 500);\n\n// return (\n// <div>\n// <input\n// type=\"text\"\n// onChange={(e) => debouncedSearch(e.target.value)}\n// placeholder=\"Search...\"\n// />\n// <button onClick={() => debouncedMultiParam(1, \"test\")}>\n// Test Multi Param\n// </button>\n// </div>\n// );\n// };\n"],"names":["useDebounceCallback","callback","delay","leading","timeoutRef","useRef","callbackRef","leadingCallRef","useCallback","args","invokeFunction"],"mappings":"6CAcA,MAAMA,EAAsB,CAC3BC,EACAC,EACAC,EAAU,KACqB,CAC/B,MAAMC,EAAaC,EAAAA,OAA8B,IAAI,EAC/CC,EAAcD,EAAAA,OAA6BJ,CAAQ,EACnDM,EAAiBF,EAAAA,OAAgB,EAAI,EAG3C,OAAAC,EAAY,QAAUL,EAEfO,EAAAA,YACN,IAAIC,IAAe,CAClB,MAAMC,EAAiB,IAAM,CAC5BJ,EAAY,QAAQ,GAAGG,CAAI,EAC3BF,EAAe,QAAU,EAC1B,EAGIH,EAAW,SACd,aAAaA,EAAW,OAAO,EAI5BD,GAAWI,EAAe,SAC7BG,EAAA,EACAH,EAAe,QAAU,IAGzBH,EAAW,QAAU,WAAW,IAAM,CAChCD,GACJO,EAAA,EAEDH,EAAe,QAAU,EAC1B,EAAGL,CAAK,CAEV,EACA,CAACA,EAAOC,CAAO,CAAA,CAEjB"}
1
+ {"version":3,"file":"use-debounce-callback-CVfZS_LP.js","sources":["../../src/hooks/use-debounce-callback.tsx"],"sourcesContent":["import { useCallback, useRef } from \"react\";\n\n/**\n * A custom hook that returns a debounced version of the callback function.\n * The debounced function will only execute after the specified delay has passed\n * without the function being called again.\n *\n * @template Args - The tuple type representing the arguments of the callback\n * @template R - The return type of the callback\n * @param {(...args: Args) => R} callback - The function to debounce\n * @param {number} delay - The delay in milliseconds\n * @param {boolean} [leading=false] - Whether to call the function on the leading edge\n * @returns {(...args: Args) => void} - The debounced callback function\n */\nconst useDebounceCallback = <Args extends unknown[], R>(\n\tcallback: (...args: Args) => R,\n\tdelay: number,\n\tleading = false,\n): ((...args: Args) => void) => {\n\tconst timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\tconst callbackRef = useRef<(...args: Args) => R>(callback);\n\tconst leadingCallRef = useRef<boolean>(true);\n\n\t// Update the callback reference when it changes\n\tcallbackRef.current = callback;\n\n\treturn useCallback(\n\t\t(...args: Args) => {\n\t\t\tconst invokeFunction = () => {\n\t\t\t\tcallbackRef.current(...args);\n\t\t\t\tleadingCallRef.current = true;\n\t\t\t};\n\n\t\t\t// Clear any existing timeout\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\n\t\t\t// Handle leading edge calls\n\t\t\tif (leading && leadingCallRef.current) {\n\t\t\t\tinvokeFunction();\n\t\t\t\tleadingCallRef.current = false;\n\t\t\t} else {\n\t\t\t\t// Set new timeout for trailing edge\n\t\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tif (!leading) {\n\t\t\t\t\t\tinvokeFunction();\n\t\t\t\t\t}\n\t\t\t\t\tleadingCallRef.current = true;\n\t\t\t\t}, delay);\n\t\t\t}\n\t\t},\n\t\t[delay, leading],\n\t);\n};\n\nexport default useDebounceCallback;\n\n// Example usage with strict types:\n\n// type SearchProps {\n// onSearch: (term: string) => Promise<void>;\n// }\n\n// const SearchComponent: React.FC<SearchProps> = ({ onSearch }) => {\n// // Type inference works automatically\n// const debouncedSearch = useDebounceCallback(onSearch, 500);\n\n// // Multiple parameters example\n// const handleMultiParam = (id: number, value: string) => {\n// console.log(id, value);\n// };\n// const debouncedMultiParam = useDebounceCallback(handleMultiParam, 500);\n\n// return (\n// <div>\n// <input\n// type=\"text\"\n// onChange={(e) => debouncedSearch(e.target.value)}\n// placeholder=\"Search...\"\n// />\n// <button onClick={() => debouncedMultiParam(1, \"test\")}>\n// Test Multi Param\n// </button>\n// </div>\n// );\n// };\n"],"names":["useDebounceCallback","callback","delay","leading","timeoutRef","useRef","callbackRef","leadingCallRef","useCallback","args","invokeFunction"],"mappings":"6CAcA,MAAMA,EAAsB,CAC3BC,EACAC,EACAC,EAAU,KACqB,CAC/B,MAAMC,EAAaC,EAAAA,OAA8B,IAAI,EAC/CC,EAAcD,EAAAA,OAA6BJ,CAAQ,EACnDM,EAAiBF,EAAAA,OAAgB,EAAI,EAG3C,OAAAC,EAAY,QAAUL,EAEfO,EAAAA,YACN,IAAIC,IAAe,CAClB,MAAMC,EAAiB,IAAM,CAC5BJ,EAAY,QAAQ,GAAGG,CAAI,EAC3BF,EAAe,QAAU,EAC1B,EAGIH,EAAW,SACd,aAAaA,EAAW,OAAO,EAI5BD,GAAWI,EAAe,SAC7BG,EAAA,EACAH,EAAe,QAAU,IAGzBH,EAAW,QAAU,WAAW,IAAM,CAChCD,GACJO,EAAA,EAEDH,EAAe,QAAU,EAC1B,EAAGL,CAAK,CAEV,EACA,CAACA,EAAOC,CAAO,CAAA,CAEjB"}