zenml-nightly 0.84.0.dev20250728__py3-none-any.whl → 0.84.0.dev20250730__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 (217) hide show
  1. zenml/VERSION +1 -1
  2. zenml/client.py +6 -1
  3. zenml/code_repositories/git/local_git_repository_context.py +3 -4
  4. zenml/constants.py +28 -0
  5. zenml/integrations/azure/service_connectors/azure_service_connector.py +20 -9
  6. zenml/integrations/gcp/__init__.py +4 -1
  7. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +20 -1
  8. zenml/integrations/kubernetes/orchestrators/kube_utils.py +80 -3
  9. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +18 -14
  10. zenml/logging/__init__.py +0 -11
  11. zenml/logging/step_logging.py +255 -149
  12. zenml/models/__init__.py +6 -0
  13. zenml/models/v2/core/service_account.py +87 -1
  14. zenml/models/v2/core/step_run.py +13 -0
  15. zenml/models/v2/core/user.py +20 -6
  16. zenml/models/v2/misc/exception_info.py +30 -0
  17. zenml/models/v2/misc/external_user.py +4 -1
  18. zenml/orchestrators/publish_utils.py +10 -0
  19. zenml/orchestrators/step_launcher.py +11 -6
  20. zenml/orchestrators/step_runner.py +26 -1
  21. zenml/utils/exception_utils.py +90 -0
  22. zenml/zen_server/auth.py +138 -27
  23. zenml/zen_server/dashboard/assets/{404-B5cfnwZ1.js → 404-CMbwR10f.js} +1 -1
  24. zenml/zen_server/dashboard/assets/{@radix-C_LirfyT.js → @radix-B1sy0Lhr.js} +1 -1
  25. zenml/zen_server/dashboard/assets/{@react-router-BSsrkPOd.js → @react-router-CHjLNlgw.js} +1 -1
  26. zenml/zen_server/dashboard/assets/{@reactflow-D9hglKLF.js → @reactflow-gbyyU3kq.js} +2 -2
  27. zenml/zen_server/dashboard/assets/{@tanstack-C0SeHZng.js → @tanstack-Dwlisomv.js} +1 -1
  28. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BpLj419i.js +1 -0
  29. zenml/zen_server/dashboard/assets/ButtonGroup-DVhzbQxV.js +1 -0
  30. zenml/zen_server/dashboard/assets/{CodeSnippet-D8iBqOVv.js → CodeSnippet-B7Wd4R8u.js} +1 -1
  31. zenml/zen_server/dashboard/assets/{CollapsibleCard-D0-pQi1n.js → CollapsibleCard-DSZzbjx5.js} +1 -1
  32. zenml/zen_server/dashboard/assets/{ComponentBadge-mw2Ja_ON.js → ComponentBadge-MVT08kBV.js} +1 -1
  33. zenml/zen_server/dashboard/assets/{ComponentIcon-BXgpt-jw.js → ComponentIcon-C9AY8usJ.js} +1 -1
  34. zenml/zen_server/dashboard/assets/DeleteAlertDialog-CzhTVQaC.js +1 -0
  35. zenml/zen_server/dashboard/assets/{DialogItem-DeME0oSt.js → DialogItem-DD_7v3UY.js} +1 -1
  36. zenml/zen_server/dashboard/assets/{DisplayDate-v3KW7oez.js → DisplayDate-57lUNS79.js} +1 -1
  37. zenml/zen_server/dashboard/assets/{EmptyState-DG0m-CGv.js → EmptyState-BMA34iVR.js} +1 -1
  38. zenml/zen_server/dashboard/assets/{Error-DcVLcrLs.js → Error-Cakgjexo.js} +1 -1
  39. zenml/zen_server/dashboard/assets/{ExecutionStatus-C4tlFnlh.js → ExecutionStatus-CQbWovhV.js} +1 -1
  40. zenml/zen_server/dashboard/assets/{Helpbox-C-RGHz3S.js → Helpbox-7FZpmsHB.js} +1 -1
  41. zenml/zen_server/dashboard/assets/{Infobox-DFCWPbMb.js → Infobox-DnduZjNU.js} +1 -1
  42. zenml/zen_server/dashboard/assets/{LeftSideMenu-Czev0KCA.js → LeftSideMenu-D5UEs4vB.js} +1 -1
  43. zenml/zen_server/dashboard/assets/{Lock-CRP5J_su.js → Lock-u8WOoTTd.js} +1 -1
  44. zenml/zen_server/dashboard/assets/NestedCollapsible-0yviIfaA.js +1 -0
  45. zenml/zen_server/dashboard/assets/{NumberBox-CoQjQYDJ.js → NumberBox-C2Pju4PR.js} +1 -1
  46. zenml/zen_server/dashboard/assets/{Pagination-CcDD5yHh.js → Pagination-C1sE5Nzn.js} +1 -1
  47. zenml/zen_server/dashboard/assets/{Partials-DlMzfKgs.js → Partials-DosysQMU.js} +1 -1
  48. zenml/zen_server/dashboard/assets/{PasswordChecker-BZwoeQIm.js → PasswordChecker-DOPLfvg7.js} +1 -1
  49. zenml/zen_server/dashboard/assets/{ProCta-CU2ycJDo.js → ProCta-CUkpV3PJ.js} +1 -1
  50. zenml/zen_server/dashboard/assets/{ProviderIcon-BMAn9Jld.js → ProviderIcon-aQjTuTRX.js} +1 -1
  51. zenml/zen_server/dashboard/assets/{ProviderRadio-D_q9tE3G.js → ProviderRadio-C6pLVNxC.js} +1 -1
  52. zenml/zen_server/dashboard/assets/RunsBody-CZAiSxYK.js +1 -0
  53. zenml/zen_server/dashboard/assets/{SearchField-D_0-uAPj.js → SearchField-Byv1PtST.js} +1 -1
  54. zenml/zen_server/dashboard/assets/{SecretTooltip-BcWMKb9f.js → SecretTooltip-CErfhVgF.js} +1 -1
  55. zenml/zen_server/dashboard/assets/{SetPassword-CaKVSqAL.js → SetPassword-C4OH-cn1.js} +1 -1
  56. zenml/zen_server/dashboard/assets/{SheetHeader-7vwlsY_i.js → SheetHeader-Bb3v9rha.js} +1 -1
  57. zenml/zen_server/dashboard/assets/StackComponentList-D85oab98.js +1 -0
  58. zenml/zen_server/dashboard/assets/StackList-DSAjbVb5.js +1 -0
  59. zenml/zen_server/dashboard/assets/Tabs-2uwqXsdL.js +1 -0
  60. zenml/zen_server/dashboard/assets/Tick-BQ7_xDBl.js +1 -0
  61. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-Da5RndbV.js → UpdatePasswordSchemas-DNkYgzN6.js} +1 -1
  62. zenml/zen_server/dashboard/assets/{Wizard-8aJzxUjb.js → Wizard-2FIi8JNY.js} +1 -1
  63. zenml/zen_server/dashboard/assets/WizardFooter-DQEnlDmZ.js +1 -0
  64. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-gorNNEaT.js → all-pipeline-runs-query-CdvWtiAY.js} +1 -1
  65. zenml/zen_server/dashboard/assets/{arrow-left-hcj2H8HY.js → arrow-left-BFB2mgJo.js} +1 -1
  66. zenml/zen_server/dashboard/assets/{bar-chart-square-check-9siI9icm.js → bar-chart-square-check-_m-oYysN.js} +1 -1
  67. zenml/zen_server/dashboard/assets/{bulk-delete-B5RTlnD_.js → bulk-delete-wdObjfps.js} +2 -2
  68. zenml/zen_server/dashboard/assets/{check-D1bHMJkL.js → check-C9Nye5lR.js} +1 -1
  69. zenml/zen_server/dashboard/assets/{check-circle-mnEgPhPF.js → check-circle-CG6XAdk-.js} +1 -1
  70. zenml/zen_server/dashboard/assets/{chevron-down-Z3nUe-0U.js → chevron-down-Bl7WwQAL.js} +1 -1
  71. zenml/zen_server/dashboard/assets/{chevron-right-double-CbRQKN4Q.js → chevron-right-double-CbMG1dOM.js} +1 -1
  72. zenml/zen_server/dashboard/assets/{clock-BMjHXT3f.js → clock-BnPvxp3D.js} +1 -1
  73. zenml/zen_server/dashboard/assets/{code-browser-DftoiCIg.js → code-browser-CzWvJ4S6.js} +1 -1
  74. zenml/zen_server/dashboard/assets/configuration-form-BbcNBQTO.js +1 -0
  75. zenml/zen_server/dashboard/assets/constants-DfvsDtcH.js +1 -0
  76. zenml/zen_server/dashboard/assets/{create-stack-BruqH_6X.js → create-stack-D4Sf7QpF.js} +1 -1
  77. zenml/zen_server/dashboard/assets/{credit-card-CH1BHrXY.js → credit-card-DfBA6dBb.js} +1 -1
  78. zenml/zen_server/dashboard/assets/{dataflow-2-qHjWt7zp.js → dataflow-2-BLkaTH0Q.js} +1 -1
  79. zenml/zen_server/dashboard/assets/{delete-run-ibBtciMR.js → delete-run-XSre8ru-.js} +1 -1
  80. zenml/zen_server/dashboard/assets/{expand-full-CD4fFvM-.js → expand-full-C8p_0jQv.js} +1 -1
  81. zenml/zen_server/dashboard/assets/{eye-CLNgIh_K.js → eye-BXcQevds.js} +1 -1
  82. zenml/zen_server/dashboard/assets/{file-text-CltVhgwZ.js → file-text-TdPXNd7s.js} +1 -1
  83. zenml/zen_server/dashboard/assets/form-C1jJgRy1.js +1 -0
  84. zenml/zen_server/dashboard/assets/{form-schemas-B9XgTS1V.js → form-schemas-BjWDRvGd.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{help-B0CvBhCm.js → help-CRPfbPTO.js} +1 -1
  86. zenml/zen_server/dashboard/assets/{icon-hDriJUXY.js → icon--Tp6obFZ.js} +1 -1
  87. zenml/zen_server/dashboard/assets/{index-mA8kL088.js → index-B4ZeIaPd.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{index-dCcVgFNl.js → index-BYHxFvoG.js} +1 -1
  89. zenml/zen_server/dashboard/assets/{index-BQWlHo1Y.js → index-BYzR7YrM.js} +1 -1
  90. zenml/zen_server/dashboard/assets/{index-BacoJBEQ.js → index-CO6UN3UX.js} +11 -11
  91. zenml/zen_server/dashboard/assets/{index-B7CRNU8l.js → index-d_QrPL-8.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{index-BRhKF2z-.js → index-g7wOyc86.js} +1 -1
  93. zenml/zen_server/dashboard/assets/index-n_sn2ITN.css +1 -0
  94. zenml/zen_server/dashboard/assets/{index.es-DcVFDpJU.js → index.es-CZMSrR6z.js} +1 -1
  95. zenml/zen_server/dashboard/assets/{index.esm-COnaHLSh.js → index.esm-SBF9nn_P.js} +1 -1
  96. zenml/zen_server/dashboard/assets/{info-CyMih3vQ.js → info-CI2szPUG.js} +1 -1
  97. zenml/zen_server/dashboard/assets/{key-icon-HOx2gazv.js → key-icon-BiV171aI.js} +1 -1
  98. zenml/zen_server/dashboard/assets/layout-Cyc-V16c.js +1 -0
  99. zenml/zen_server/dashboard/assets/{layout-C5dgIReC.js → layout-GIiNvS10.js} +1 -1
  100. zenml/zen_server/dashboard/assets/{login-mutation-CidpsqyH.js → login-mutation-CDgTlQBD.js} +1 -1
  101. zenml/zen_server/dashboard/assets/{logs-DoLoTEfj.js → logs-lNLbZqHL.js} +1 -1
  102. zenml/zen_server/dashboard/assets/{mail-C160gvB0.js → mail-DBJRSzyu.js} +1 -1
  103. zenml/zen_server/dashboard/assets/{message-chat-square-DLz6XmPS.js → message-chat-square-C3CRCQvD.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{package-BhYXGPxF.js → package-pR4bbXJp.js} +1 -1
  105. zenml/zen_server/dashboard/assets/page-1DXG7hp8.js +1 -0
  106. zenml/zen_server/dashboard/assets/{page-BCRXJXC9.js → page-43SWdz4k.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{page-YdWnx9MX.js → page-AOVMuHDc.js} +1 -1
  108. zenml/zen_server/dashboard/assets/page-B4QBxV0B.js +22 -0
  109. zenml/zen_server/dashboard/assets/{page-CvllZMBF.js → page-B8ict_cR.js} +1 -1
  110. zenml/zen_server/dashboard/assets/page-BDre_qCO.js +1 -0
  111. zenml/zen_server/dashboard/assets/page-BbsvGfyi.js +18 -0
  112. zenml/zen_server/dashboard/assets/page-Bi4I23Hs.js +1 -0
  113. zenml/zen_server/dashboard/assets/page-BnAMyQZb.js +1 -0
  114. zenml/zen_server/dashboard/assets/{page-D6cvOG8w.js → page-BnZEAhNn.js} +1 -1
  115. zenml/zen_server/dashboard/assets/page-Bncp08FW.js +1 -0
  116. zenml/zen_server/dashboard/assets/{page-BTDi81N3.js → page-C4Jnp1qP.js} +1 -1
  117. zenml/zen_server/dashboard/assets/page-C7Z2sDHE.js +1 -0
  118. zenml/zen_server/dashboard/assets/page-C8t9qLdV.js +1 -0
  119. zenml/zen_server/dashboard/assets/{page-BByayrO-.js → page-C9IsnFid.js} +2 -2
  120. zenml/zen_server/dashboard/assets/page-CEHZzQ1Q.js +1 -0
  121. zenml/zen_server/dashboard/assets/page-CGtll3Jk.js +1 -0
  122. zenml/zen_server/dashboard/assets/{page-q41JNDWO.js → page-CKPkbOoE.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{page-DF4FVxxW.js → page-CMvcoaSZ.js} +2 -2
  124. zenml/zen_server/dashboard/assets/page-CVwTAlzd.js +1 -0
  125. zenml/zen_server/dashboard/assets/{page-DSZfclXt.js → page-ClqRvz_V.js} +1 -1
  126. zenml/zen_server/dashboard/assets/{page-7CJ4Wq3O.js → page-CzDjN1wE.js} +1 -1
  127. zenml/zen_server/dashboard/assets/{page-BK59rZvf.js → page-D654xHWd.js} +1 -1
  128. zenml/zen_server/dashboard/assets/{page-DcXrWWWh.js → page-DLrYW-Dn.js} +1 -1
  129. zenml/zen_server/dashboard/assets/page-DOnAInjC.js +1 -0
  130. zenml/zen_server/dashboard/assets/{page-Cc8owYXQ.js → page-DQncGJeH.js} +1 -1
  131. zenml/zen_server/dashboard/assets/page-DQzNmXk3.js +1 -0
  132. zenml/zen_server/dashboard/assets/{page-FQxi1Otg.js → page-DSn1Jcvs.js} +1 -1
  133. zenml/zen_server/dashboard/assets/page-DZ5hcS1o.js +1 -0
  134. zenml/zen_server/dashboard/assets/page-DerIbaqa.js +1 -0
  135. zenml/zen_server/dashboard/assets/{page-8U20Tu_8.js → page-DgOEl3Bc.js} +1 -1
  136. zenml/zen_server/dashboard/assets/{page-DgldL5UB.js → page-DgSu4pTE.js} +2 -2
  137. zenml/zen_server/dashboard/assets/page-DgblJuXC.js +1 -0
  138. zenml/zen_server/dashboard/assets/{page-CY0LPcAJ.js → page-Dpw-xP4q.js} +1 -1
  139. zenml/zen_server/dashboard/assets/page-DsFXol8x.js +1 -0
  140. zenml/zen_server/dashboard/assets/page-Du6bFZTS.js +1 -0
  141. zenml/zen_server/dashboard/assets/{page-CeGBDh1Q.js → page-DznxxpKA.js} +1 -1
  142. zenml/zen_server/dashboard/assets/page-E9Mx9_rn.js +1 -0
  143. zenml/zen_server/dashboard/assets/page-HrebZOAM.js +1 -0
  144. zenml/zen_server/dashboard/assets/{page-BX67x4iL.js → page-O5xnz_nW.js} +1 -1
  145. zenml/zen_server/dashboard/assets/{page-DDWW21kl.js → page-hX7NkNdA.js} +1 -1
  146. zenml/zen_server/dashboard/assets/{persist-BKKcL1Kp.js → persist-B3Hb8HDW.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{persist-DxiyfAax.js → persist-Dkbp9MFP.js} +1 -1
  148. zenml/zen_server/dashboard/assets/{pipeline-BJ8liDnl.js → pipeline-CDJSAXrb.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{plus-cI8zD2xh.js → plus-DOrkJCmy.js} +1 -1
  150. zenml/zen_server/dashboard/assets/primary-role-CjkpP9fL.js +1 -0
  151. zenml/zen_server/dashboard/assets/{react-error-boundary.esm-DoXxY4pT.js → react-error-boundary.esm-DgOYA0wh.js} +1 -1
  152. zenml/zen_server/dashboard/assets/{refresh-3EF2R7ja.js → refresh-C8BXS3Fb.js} +1 -1
  153. zenml/zen_server/dashboard/assets/{resource-tyes-list-B5rkZcbc.js → resource-tyes-list-CugyWUAE.js} +1 -1
  154. zenml/zen_server/dashboard/assets/{resource-type-tooltip-E97WGqfk.js → resource-type-tooltip-V-zdiLKz.js} +1 -1
  155. zenml/zen_server/dashboard/assets/{service-B9aVzfAF.js → service-FjqYTmBw.js} +2 -2
  156. zenml/zen_server/dashboard/assets/{service-connectors-DL2-k_E2.js → service-connectors-nF4-OXB9.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{sharedSchema-DyUO09BR.js → sharedSchema-Br1JPr8d.js} +1 -1
  158. zenml/zen_server/dashboard/assets/{slash-circle-D2Lb2FyR.js → slash-circle-B0xMh8q6.js} +1 -1
  159. zenml/zen_server/dashboard/assets/{stack-detail-query-Bc4QKlWg.js → stack-detail-query-DnyMCdVE.js} +1 -1
  160. zenml/zen_server/dashboard/assets/{terminal-BObrvDlO.js → terminal-C2tAF2XG.js} +1 -1
  161. zenml/zen_server/dashboard/assets/{terminal-square-BObrvDlO.js → terminal-square-C2tAF2XG.js} +1 -1
  162. zenml/zen_server/dashboard/assets/{transform-DFpKTKgF.js → transform-S7omcvTm.js} +1 -1
  163. zenml/zen_server/dashboard/assets/{trash-HKxXWbSG.js → trash-D9LA4VFD.js} +1 -1
  164. zenml/zen_server/dashboard/assets/{update-current-user-mutation-DSyUyHVj.js → update-current-user-mutation-B3Dpv3u6.js} +1 -1
  165. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-CdM-Sdds.js → update-server-settings-mutation-s7tlHN8s.js} +1 -1
  166. zenml/zen_server/dashboard/assets/{zod-DgEcN9jD.js → zod-D48zuELD.js} +1 -1
  167. zenml/zen_server/dashboard/index.html +7 -7
  168. zenml/zen_server/rbac/zenml_cloud_rbac.py +8 -4
  169. zenml/zen_server/routers/service_accounts_endpoints.py +71 -12
  170. zenml/zen_stores/base_zen_store.py +0 -19
  171. zenml/zen_stores/migrations/versions/8d4b9ba22c1f_add_user_avatar.py +39 -0
  172. zenml/zen_stores/migrations/versions/d4591f95ac07_step_exception_info.py +43 -0
  173. zenml/zen_stores/schemas/step_run_schemas.py +19 -0
  174. zenml/zen_stores/schemas/user_schemas.py +16 -5
  175. zenml/zen_stores/sql_zen_store.py +5 -1
  176. {zenml_nightly-0.84.0.dev20250728.dist-info → zenml_nightly-0.84.0.dev20250730.dist-info}/METADATA +1 -1
  177. {zenml_nightly-0.84.0.dev20250728.dist-info → zenml_nightly-0.84.0.dev20250730.dist-info}/RECORD +180 -176
  178. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-druRNuO2.js +0 -1
  179. zenml/zen_server/dashboard/assets/ButtonGroup-SF2DlzHV.js +0 -1
  180. zenml/zen_server/dashboard/assets/DeleteAlertDialog-BbyFVnVI.js +0 -1
  181. zenml/zen_server/dashboard/assets/NestedCollapsible-CN9scBUn.js +0 -1
  182. zenml/zen_server/dashboard/assets/RunsBody-BToytB8e.js +0 -1
  183. zenml/zen_server/dashboard/assets/StackComponentList-s7eSfm8o.js +0 -1
  184. zenml/zen_server/dashboard/assets/StackList-Dt0FrIkM.js +0 -1
  185. zenml/zen_server/dashboard/assets/Tabs-B27AHUfo.js +0 -1
  186. zenml/zen_server/dashboard/assets/Tick-DDeDgTuT.js +0 -1
  187. zenml/zen_server/dashboard/assets/WizardFooter-Bt7_UE14.js +0 -1
  188. zenml/zen_server/dashboard/assets/configuration-form-Yz8m0QIG.js +0 -1
  189. zenml/zen_server/dashboard/assets/constants-DeV48DuZ.js +0 -1
  190. zenml/zen_server/dashboard/assets/form-6aSt3tIl.js +0 -1
  191. zenml/zen_server/dashboard/assets/index-eggipFZS.css +0 -1
  192. zenml/zen_server/dashboard/assets/layout-CFLL6-CM.js +0 -1
  193. zenml/zen_server/dashboard/assets/page-6huxSHEu.js +0 -1
  194. zenml/zen_server/dashboard/assets/page-BMpXak4U.js +0 -1
  195. zenml/zen_server/dashboard/assets/page-Bjmcdg64.js +0 -1
  196. zenml/zen_server/dashboard/assets/page-BsAn8p4m.js +0 -1
  197. zenml/zen_server/dashboard/assets/page-BwjPRuaY.js +0 -1
  198. zenml/zen_server/dashboard/assets/page-CDtSVkNc.js +0 -1
  199. zenml/zen_server/dashboard/assets/page-CEDU0L2T.js +0 -1
  200. zenml/zen_server/dashboard/assets/page-COJK90rG.js +0 -1
  201. zenml/zen_server/dashboard/assets/page-C_XMn4GU.js +0 -1
  202. zenml/zen_server/dashboard/assets/page-Cb3KGsPK.js +0 -22
  203. zenml/zen_server/dashboard/assets/page-CiGOVsj3.js +0 -1
  204. zenml/zen_server/dashboard/assets/page-CmLSFMkW.js +0 -1
  205. zenml/zen_server/dashboard/assets/page-CnfCptXq.js +0 -1
  206. zenml/zen_server/dashboard/assets/page-CxzglV3-.js +0 -1
  207. zenml/zen_server/dashboard/assets/page-DVLez4R1.js +0 -1
  208. zenml/zen_server/dashboard/assets/page-Dg7-H_9i.js +0 -1
  209. zenml/zen_server/dashboard/assets/page-Dw7XuiSo.js +0 -18
  210. zenml/zen_server/dashboard/assets/page-XrmOHHg7.js +0 -1
  211. zenml/zen_server/dashboard/assets/page-oRm7D4TC.js +0 -1
  212. zenml/zen_server/dashboard/assets/page-x2GXC8sI.js +0 -1
  213. zenml/zen_server/dashboard/assets/page-z2FXP4GY.js +0 -1
  214. zenml/zen_server/dashboard/assets/primary-role-CPGHymjN.js +0 -1
  215. {zenml_nightly-0.84.0.dev20250728.dist-info → zenml_nightly-0.84.0.dev20250730.dist-info}/LICENSE +0 -0
  216. {zenml_nightly-0.84.0.dev20250728.dist-info → zenml_nightly-0.84.0.dev20250730.dist-info}/WHEEL +0 -0
  217. {zenml_nightly-0.84.0.dev20250728.dist-info → zenml_nightly-0.84.0.dev20250730.dist-info}/entry_points.txt +0 -0
zenml/zen_server/auth.py CHANGED
@@ -63,7 +63,11 @@ from zenml.models import (
63
63
  OAuthDeviceInternalResponse,
64
64
  OAuthDeviceInternalUpdate,
65
65
  OAuthTokenResponse,
66
+ ServiceAccountFilter,
67
+ ServiceAccountInternalRequest,
68
+ ServiceAccountInternalUpdate,
66
69
  UserAuthModel,
70
+ UserFilter,
67
71
  UserRequest,
68
72
  UserResponse,
69
73
  UserUpdate,
@@ -109,7 +113,8 @@ def _fetch_and_verify_api_key(
109
113
  Raises:
110
114
  CredentialsNotValid: If the API key could not be found, is not
111
115
  active, if it could not be verified against the supplied key value
112
- or if the associated service account is not active.
116
+ or if the associated service account is not active or is an
117
+ external service account.
113
118
  """
114
119
  store = zen_store()
115
120
 
@@ -129,6 +134,14 @@ def _fetch_and_verify_api_key(
129
134
  logger.exception(error)
130
135
  raise CredentialsNotValid(error)
131
136
 
137
+ if api_key.service_account.external_user_id:
138
+ error = (
139
+ "Authentication error: cannot use an API key associated with an "
140
+ "external service account to authenticate to the ZenML server"
141
+ )
142
+ logger.exception(error)
143
+ raise CredentialsNotValid(error)
144
+
132
145
  if not api_key.active:
133
146
  error = (
134
147
  f"Authentication error: API key "
@@ -714,37 +727,135 @@ def authenticate_external_user(
714
727
 
715
728
  # Check if the external user already exists in the ZenML server database
716
729
  # If not, create a new user. If yes, update the existing user.
717
- try:
718
- user = store.get_external_user(user_id=external_user.id)
719
-
720
- # Update the user information
721
- user = store.update_user(
722
- user_id=user.id,
723
- user_update=UserUpdate(
724
- name=external_user.email,
725
- full_name=external_user.name or "",
726
- email_opted_in=True,
727
- active=True,
728
- email=external_user.email,
729
- is_admin=external_user.is_admin,
730
+ user: Optional[UserResponse] = None
731
+ if not external_user.is_service_account:
732
+ users = store.list_users(
733
+ UserFilter(
734
+ external_user_id=external_user.id,
730
735
  ),
731
736
  )
732
- except KeyError:
733
- logger.info(
734
- f"External user with ID {external_user.id} not found in ZenML "
735
- f"server database. Creating a new user."
736
- )
737
- user = store.create_user(
738
- UserRequest(
739
- name=external_user.email,
740
- full_name=external_user.name or "",
737
+ if users.items:
738
+ user = users.items[0]
739
+ logger.info(
740
+ f"Found user with ID {user.id} matching the external user ID "
741
+ f"{external_user.id}."
742
+ )
743
+ else:
744
+ logger.info(
745
+ f"User with external user ID {external_user.id} not found."
746
+ )
747
+ # Try finding a user or service account with the same username.
748
+ # This is to handle migration of accounts from ZenML OSS to ZenML
749
+ # Pro: if the server contains an internal account with the same
750
+ # username as the ZenML Pro account, we adopt the existing
751
+ # user/service account.
752
+ users = store.list_users(
753
+ UserFilter(
754
+ name=external_user.username,
755
+ )
756
+ )
757
+ if users.items:
758
+ user = users.items[0]
759
+ logger.info(
760
+ f"Adopting existing user with username {user.name} and "
761
+ f"internal ID {user.id} as external user with ID "
762
+ f"{external_user.id}."
763
+ )
764
+ else:
765
+ service_accounts = store.list_service_accounts(
766
+ ServiceAccountFilter(
741
767
  external_user_id=external_user.id,
742
- email_opted_in=True,
743
- active=True,
744
- email=external_user.email,
745
- is_admin=external_user.is_admin,
746
768
  )
747
769
  )
770
+ if service_accounts.items:
771
+ service_account = service_accounts.items[0]
772
+ logger.info(
773
+ f"Found service account with ID {service_account.id} matching "
774
+ f"the external user ID {external_user.id}."
775
+ )
776
+ user = service_account.to_user_model()
777
+ else:
778
+ logger.info(
779
+ f"Service account with external user ID {external_user.id} "
780
+ f"not found."
781
+ )
782
+ # Try finding a service account with the same username.
783
+ # This is to handle migration of accounts from ZenML OSS to ZenML
784
+ # Pro: if the server contains an internal service account with the
785
+ # same username as the ZenML Pro service account, we adopt the
786
+ # existing service account.
787
+ service_accounts = store.list_service_accounts(
788
+ ServiceAccountFilter(
789
+ name=external_user.username,
790
+ )
791
+ )
792
+ if service_accounts.items:
793
+ service_account = service_accounts.items[0]
794
+ logger.info(
795
+ f"Adopting existing service account with username "
796
+ f"{service_account.name} and internal ID "
797
+ f"{service_account.id} as external service account with "
798
+ f"ID {external_user.id}."
799
+ )
800
+ user = service_account.to_user_model()
801
+
802
+ if user is not None:
803
+ if not user.is_service_account:
804
+ # Update the user information
805
+ user = store.update_user(
806
+ user_id=user.id,
807
+ user_update=UserUpdate(
808
+ name=external_user.username,
809
+ full_name=external_user.name or "",
810
+ email_opted_in=True,
811
+ active=True,
812
+ email=external_user.email,
813
+ is_admin=external_user.is_admin,
814
+ avatar_url=external_user.avatar_url,
815
+ external_user_id=external_user.id,
816
+ ),
817
+ )
818
+ else:
819
+ # Update the service account information
820
+ user = store.update_service_account(
821
+ service_account_name_or_id=user.id,
822
+ service_account_update=ServiceAccountInternalUpdate(
823
+ name=external_user.username,
824
+ full_name=external_user.name or "",
825
+ external_user_id=external_user.id,
826
+ active=True,
827
+ avatar_url=external_user.avatar_url,
828
+ ),
829
+ ).to_user_model()
830
+ else:
831
+ logger.info(
832
+ f"External account with ID {external_user.id} or name "
833
+ f"{external_user.username} not found in ZenML server database. "
834
+ f"Creating a new account."
835
+ )
836
+ if external_user.is_service_account:
837
+ user = store.create_service_account(
838
+ service_account=ServiceAccountInternalRequest(
839
+ name=external_user.username,
840
+ full_name=external_user.name or "",
841
+ external_user_id=external_user.id,
842
+ active=True,
843
+ avatar_url=external_user.avatar_url,
844
+ ),
845
+ ).to_user_model()
846
+ else:
847
+ user = store.create_user(
848
+ UserRequest(
849
+ name=external_user.username,
850
+ full_name=external_user.name or "",
851
+ external_user_id=external_user.id,
852
+ email_opted_in=True,
853
+ active=True,
854
+ email=external_user.email,
855
+ is_admin=external_user.is_admin,
856
+ avatar_url=external_user.avatar_url,
857
+ )
858
+ )
748
859
 
749
860
  with AnalyticsContext() as context:
750
861
  context.user_id = user.id
@@ -1 +1 @@
1
- import{j as e}from"./@radix-C_LirfyT.js";import{B as s,r as t}from"./index-BacoJBEQ.js";import{E as r}from"./EmptyState-DG0m-CGv.js";import{S as a}from"./help-B0CvBhCm.js";import{L as o}from"./@react-router-BSsrkPOd.js";import"./@tanstack-C0SeHZng.js";import"./@reactflow-D9hglKLF.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.projects.overview,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};
1
+ import{j as e}from"./@radix-B1sy0Lhr.js";import{B as s,r as t}from"./index-CO6UN3UX.js";import{E as r}from"./EmptyState-BMA34iVR.js";import{S as a}from"./help-CRPfbPTO.js";import{L as o}from"./@react-router-CHjLNlgw.js";import"./@tanstack-Dwlisomv.js";import"./@reactflow-gbyyU3kq.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.projects.overview,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};
@@ -92,4 +92,4 @@ You can add a description to the \`${Lr}\` by passing a \`${sg}\` component as a
92
92
 
93
93
  Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Lr}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component.
94
94
 
95
- For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return f.useEffect(()=>{var s;document.getElementById((s=n.current)==null?void 0:s.getAttribute("aria-describedby"))||console.warn(i)},[i,n]),null},h1=eg,g1=tg,y1=ng,w1=rg,x1=og,S1=ug,C1=dg,E1=lg,P1=ag;function EP(n,i){return f.useReducer((o,s)=>i[o][s]??o,n)}var uc="ScrollArea",[fg,R1]=$e(uc),[PP,_t]=fg(uc),pg=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,type:s="hover",dir:a,scrollHideDelay:c=600,...p}=n,[v,m]=f.useState(null),[h,y]=f.useState(null),[w,S]=f.useState(null),[E,R]=f.useState(null),[C,T]=f.useState(null),[M,k]=f.useState(0),[I,b]=f.useState(0),[j,W]=f.useState(!1),[V,Q]=f.useState(!1),ee=we(i,he=>m(he)),ue=zr(a);return x.jsx(PP,{scope:o,type:s,dir:ue,scrollHideDelay:c,scrollArea:v,viewport:h,onViewportChange:y,content:w,onContentChange:S,scrollbarX:E,onScrollbarXChange:R,scrollbarXEnabled:j,onScrollbarXEnabledChange:W,scrollbarY:C,onScrollbarYChange:T,scrollbarYEnabled:V,onScrollbarYEnabledChange:Q,onCornerWidthChange:k,onCornerHeightChange:b,children:x.jsx(te.div,{dir:ue,...p,ref:ee,style:{position:"relative","--radix-scroll-area-corner-width":M+"px","--radix-scroll-area-corner-height":I+"px",...n.style}})})});pg.displayName=uc;var vg="ScrollAreaViewport",mg=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,children:s,nonce:a,...c}=n,p=_t(vg,o),v=f.useRef(null),m=we(i,v,p.onViewportChange);return x.jsxs(x.Fragment,{children:[x.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:a}),x.jsx(te.div,{"data-radix-scroll-area-viewport":"",...c,ref:m,style:{overflowX:p.scrollbarXEnabled?"scroll":"hidden",overflowY:p.scrollbarYEnabled?"scroll":"hidden",...n.style},children:x.jsx("div",{ref:p.onContentChange,style:{minWidth:"100%",display:"table"},children:s})})]})});mg.displayName=vg;var Wt="ScrollAreaScrollbar",RP=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=_t(Wt,n.__scopeScrollArea),{onScrollbarXEnabledChange:c,onScrollbarYEnabledChange:p}=a,v=n.orientation==="horizontal";return f.useEffect(()=>(v?c(!0):p(!0),()=>{v?c(!1):p(!1)}),[v,c,p]),a.type==="hover"?x.jsx(TP,{...s,ref:i,forceMount:o}):a.type==="scroll"?x.jsx(_P,{...s,ref:i,forceMount:o}):a.type==="auto"?x.jsx(hg,{...s,ref:i,forceMount:o}):a.type==="always"?x.jsx(cc,{...s,ref:i}):null});RP.displayName=Wt;var TP=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=_t(Wt,n.__scopeScrollArea),[c,p]=f.useState(!1);return f.useEffect(()=>{const v=a.scrollArea;let m=0;if(v){const h=()=>{window.clearTimeout(m),p(!0)},y=()=>{m=window.setTimeout(()=>p(!1),a.scrollHideDelay)};return v.addEventListener("pointerenter",h),v.addEventListener("pointerleave",y),()=>{window.clearTimeout(m),v.removeEventListener("pointerenter",h),v.removeEventListener("pointerleave",y)}}},[a.scrollArea,a.scrollHideDelay]),x.jsx(ze,{present:o||c,children:x.jsx(hg,{"data-state":c?"visible":"hidden",...s,ref:i})})}),_P=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=_t(Wt,n.__scopeScrollArea),c=n.orientation==="horizontal",p=Zl(()=>m("SCROLL_END"),100),[v,m]=EP("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return f.useEffect(()=>{if(v==="idle"){const h=window.setTimeout(()=>m("HIDE"),a.scrollHideDelay);return()=>window.clearTimeout(h)}},[v,a.scrollHideDelay,m]),f.useEffect(()=>{const h=a.viewport,y=c?"scrollLeft":"scrollTop";if(h){let w=h[y];const S=()=>{const E=h[y];w!==E&&(m("SCROLL"),p()),w=E};return h.addEventListener("scroll",S),()=>h.removeEventListener("scroll",S)}},[a.viewport,c,m,p]),x.jsx(ze,{present:o||v!=="hidden",children:x.jsx(cc,{"data-state":v==="hidden"?"hidden":"visible",...s,ref:i,onPointerEnter:H(n.onPointerEnter,()=>m("POINTER_ENTER")),onPointerLeave:H(n.onPointerLeave,()=>m("POINTER_LEAVE"))})})}),hg=f.forwardRef((n,i)=>{const o=_t(Wt,n.__scopeScrollArea),{forceMount:s,...a}=n,[c,p]=f.useState(!1),v=n.orientation==="horizontal",m=Zl(()=>{if(o.viewport){const h=o.viewport.offsetWidth<o.viewport.scrollWidth,y=o.viewport.offsetHeight<o.viewport.scrollHeight;p(v?h:y)}},10);return Fr(o.viewport,m),Fr(o.content,m),x.jsx(ze,{present:s||c,children:x.jsx(cc,{"data-state":c?"visible":"hidden",...a,ref:i})})}),cc=f.forwardRef((n,i)=>{const{orientation:o="vertical",...s}=n,a=_t(Wt,n.__scopeScrollArea),c=f.useRef(null),p=f.useRef(0),[v,m]=f.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),h=xg(v.viewport,v.content),y={...s,sizes:v,onSizesChange:m,hasThumb:h>0&&h<1,onThumbChange:S=>c.current=S,onThumbPointerUp:()=>p.current=0,onThumbPointerDown:S=>p.current=S};function w(S,E){return OP(S,p.current,v,E)}return o==="horizontal"?x.jsx(kP,{...y,ref:i,onThumbPositionChange:()=>{if(a.viewport&&c.current){const S=a.viewport.scrollLeft,E=Vp(S,v,a.dir);c.current.style.transform=`translate3d(${E}px, 0, 0)`}},onWheelScroll:S=>{a.viewport&&(a.viewport.scrollLeft=S)},onDragScroll:S=>{a.viewport&&(a.viewport.scrollLeft=w(S,a.dir))}}):o==="vertical"?x.jsx(NP,{...y,ref:i,onThumbPositionChange:()=>{if(a.viewport&&c.current){const S=a.viewport.scrollTop,E=Vp(S,v);c.current.style.transform=`translate3d(0, ${E}px, 0)`}},onWheelScroll:S=>{a.viewport&&(a.viewport.scrollTop=S)},onDragScroll:S=>{a.viewport&&(a.viewport.scrollTop=w(S))}}):null}),kP=f.forwardRef((n,i)=>{const{sizes:o,onSizesChange:s,...a}=n,c=_t(Wt,n.__scopeScrollArea),[p,v]=f.useState(),m=f.useRef(null),h=we(i,m,c.onScrollbarXChange);return f.useEffect(()=>{m.current&&v(getComputedStyle(m.current))},[m]),x.jsx(yg,{"data-orientation":"horizontal",...a,ref:h,sizes:o,style:{bottom:0,left:c.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:c.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Ql(o)+"px",...n.style},onThumbPointerDown:y=>n.onThumbPointerDown(y.x),onDragScroll:y=>n.onDragScroll(y.x),onWheelScroll:(y,w)=>{if(c.viewport){const S=c.viewport.scrollLeft+y.deltaX;n.onWheelScroll(S),Cg(S,w)&&y.preventDefault()}},onResize:()=>{m.current&&c.viewport&&p&&s({content:c.viewport.scrollWidth,viewport:c.viewport.offsetWidth,scrollbar:{size:m.current.clientWidth,paddingStart:Tl(p.paddingLeft),paddingEnd:Tl(p.paddingRight)}})}})}),NP=f.forwardRef((n,i)=>{const{sizes:o,onSizesChange:s,...a}=n,c=_t(Wt,n.__scopeScrollArea),[p,v]=f.useState(),m=f.useRef(null),h=we(i,m,c.onScrollbarYChange);return f.useEffect(()=>{m.current&&v(getComputedStyle(m.current))},[m]),x.jsx(yg,{"data-orientation":"vertical",...a,ref:h,sizes:o,style:{top:0,right:c.dir==="ltr"?0:void 0,left:c.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Ql(o)+"px",...n.style},onThumbPointerDown:y=>n.onThumbPointerDown(y.y),onDragScroll:y=>n.onDragScroll(y.y),onWheelScroll:(y,w)=>{if(c.viewport){const S=c.viewport.scrollTop+y.deltaY;n.onWheelScroll(S),Cg(S,w)&&y.preventDefault()}},onResize:()=>{m.current&&c.viewport&&p&&s({content:c.viewport.scrollHeight,viewport:c.viewport.offsetHeight,scrollbar:{size:m.current.clientHeight,paddingStart:Tl(p.paddingTop),paddingEnd:Tl(p.paddingBottom)}})}})}),[AP,gg]=fg(Wt),yg=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,sizes:s,hasThumb:a,onThumbChange:c,onThumbPointerUp:p,onThumbPointerDown:v,onThumbPositionChange:m,onDragScroll:h,onWheelScroll:y,onResize:w,...S}=n,E=_t(Wt,o),[R,C]=f.useState(null),T=we(i,ee=>C(ee)),M=f.useRef(null),k=f.useRef(""),I=E.viewport,b=s.content-s.viewport,j=De(y),W=De(m),V=Zl(w,10);function Q(ee){if(M.current){const ue=ee.clientX-M.current.left,he=ee.clientY-M.current.top;h({x:ue,y:he})}}return f.useEffect(()=>{const ee=ue=>{const he=ue.target;(R==null?void 0:R.contains(he))&&j(ue,b)};return document.addEventListener("wheel",ee,{passive:!1}),()=>document.removeEventListener("wheel",ee,{passive:!1})},[I,R,b,j]),f.useEffect(W,[s,W]),Fr(R,V),Fr(E.content,V),x.jsx(AP,{scope:o,scrollbar:R,hasThumb:a,onThumbChange:De(c),onThumbPointerUp:De(p),onThumbPositionChange:W,onThumbPointerDown:De(v),children:x.jsx(te.div,{...S,ref:T,style:{position:"absolute",...S.style},onPointerDown:H(n.onPointerDown,ee=>{ee.button===0&&(ee.target.setPointerCapture(ee.pointerId),M.current=R.getBoundingClientRect(),k.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",E.viewport&&(E.viewport.style.scrollBehavior="auto"),Q(ee))}),onPointerMove:H(n.onPointerMove,Q),onPointerUp:H(n.onPointerUp,ee=>{const ue=ee.target;ue.hasPointerCapture(ee.pointerId)&&ue.releasePointerCapture(ee.pointerId),document.body.style.webkitUserSelect=k.current,E.viewport&&(E.viewport.style.scrollBehavior=""),M.current=null})})})}),Rl="ScrollAreaThumb",MP=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=gg(Rl,n.__scopeScrollArea);return x.jsx(ze,{present:o||a.hasThumb,children:x.jsx(IP,{ref:i,...s})})}),IP=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,style:s,...a}=n,c=_t(Rl,o),p=gg(Rl,o),{onThumbPositionChange:v}=p,m=we(i,w=>p.onThumbChange(w)),h=f.useRef(void 0),y=Zl(()=>{h.current&&(h.current(),h.current=void 0)},100);return f.useEffect(()=>{const w=c.viewport;if(w){const S=()=>{if(y(),!h.current){const E=LP(w,v);h.current=E,v()}};return v(),w.addEventListener("scroll",S),()=>w.removeEventListener("scroll",S)}},[c.viewport,y,v]),x.jsx(te.div,{"data-state":p.hasThumb?"visible":"hidden",...a,ref:m,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...s},onPointerDownCapture:H(n.onPointerDownCapture,w=>{const E=w.target.getBoundingClientRect(),R=w.clientX-E.left,C=w.clientY-E.top;p.onThumbPointerDown({x:R,y:C})}),onPointerUp:H(n.onPointerUp,p.onThumbPointerUp)})});MP.displayName=Rl;var dc="ScrollAreaCorner",wg=f.forwardRef((n,i)=>{const o=_t(dc,n.__scopeScrollArea),s=!!(o.scrollbarX&&o.scrollbarY);return o.type!=="scroll"&&s?x.jsx(DP,{...n,ref:i}):null});wg.displayName=dc;var DP=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,...s}=n,a=_t(dc,o),[c,p]=f.useState(0),[v,m]=f.useState(0),h=!!(c&&v);return Fr(a.scrollbarX,()=>{var w;const y=((w=a.scrollbarX)==null?void 0:w.offsetHeight)||0;a.onCornerHeightChange(y),m(y)}),Fr(a.scrollbarY,()=>{var w;const y=((w=a.scrollbarY)==null?void 0:w.offsetWidth)||0;a.onCornerWidthChange(y),p(y)}),h?x.jsx(te.div,{...s,ref:i,style:{width:c,height:v,position:"absolute",right:a.dir==="ltr"?0:void 0,left:a.dir==="rtl"?0:void 0,bottom:0,...n.style}}):null});function Tl(n){return n?parseInt(n,10):0}function xg(n,i){const o=n/i;return isNaN(o)?0:o}function Ql(n){const i=xg(n.viewport,n.content),o=n.scrollbar.paddingStart+n.scrollbar.paddingEnd,s=(n.scrollbar.size-o)*i;return Math.max(s,18)}function OP(n,i,o,s="ltr"){const a=Ql(o),c=a/2,p=i||c,v=a-p,m=o.scrollbar.paddingStart+p,h=o.scrollbar.size-o.scrollbar.paddingEnd-v,y=o.content-o.viewport,w=s==="ltr"?[0,y]:[y*-1,0];return Sg([m,h],w)(n)}function Vp(n,i,o="ltr"){const s=Ql(i),a=i.scrollbar.paddingStart+i.scrollbar.paddingEnd,c=i.scrollbar.size-a,p=i.content-i.viewport,v=c-s,m=o==="ltr"?[0,p]:[p*-1,0],h=hu(n,m);return Sg([0,p],[0,v])(h)}function Sg(n,i){return o=>{if(n[0]===n[1]||i[0]===i[1])return i[0];const s=(i[1]-i[0])/(n[1]-n[0]);return i[0]+s*(o-n[0])}}function Cg(n,i){return n>0&&n<i}var LP=(n,i=()=>{})=>{let o={left:n.scrollLeft,top:n.scrollTop},s=0;return function a(){const c={left:n.scrollLeft,top:n.scrollTop},p=o.left!==c.left,v=o.top!==c.top;(p||v)&&i(),o=c,s=window.requestAnimationFrame(a)}(),()=>window.cancelAnimationFrame(s)};function Zl(n,i){const o=De(n),s=f.useRef(0);return f.useEffect(()=>()=>window.clearTimeout(s.current),[]),f.useCallback(()=>{window.clearTimeout(s.current),s.current=window.setTimeout(o,i)},[o,i])}function Fr(n,i){const o=De(i);Ue(()=>{let s=0;if(n){const a=new ResizeObserver(()=>{cancelAnimationFrame(s),s=window.requestAnimationFrame(o)});return a.observe(n),()=>{window.cancelAnimationFrame(s),a.unobserve(n)}}},[n,o])}var T1=pg,_1=mg,k1=wg,ru,fc="HoverCard",[Eg,N1]=$e(fc,[Bt]),ql=Bt(),[bP,pc]=Eg(fc),Pg=n=>{const{__scopeHoverCard:i,children:o,open:s,defaultOpen:a,onOpenChange:c,openDelay:p=700,closeDelay:v=300}=n,m=ql(i),h=f.useRef(0),y=f.useRef(0),w=f.useRef(!1),S=f.useRef(!1),[E=!1,R]=dt({prop:s,defaultProp:a,onChange:c}),C=f.useCallback(()=>{clearTimeout(y.current),h.current=window.setTimeout(()=>R(!0),p)},[p,R]),T=f.useCallback(()=>{clearTimeout(h.current),!w.current&&!S.current&&(y.current=window.setTimeout(()=>R(!1),v))},[v,R]),M=f.useCallback(()=>R(!1),[R]);return f.useEffect(()=>()=>{clearTimeout(h.current),clearTimeout(y.current)},[]),x.jsx(bP,{scope:i,open:E,onOpenChange:R,onOpen:C,onClose:T,onDismiss:M,hasSelectionRef:w,isPointerDownOnContentRef:S,children:x.jsx(Uo,{...m,children:o})})};Pg.displayName=fc;var Rg="HoverCardTrigger",Tg=f.forwardRef((n,i)=>{const{__scopeHoverCard:o,...s}=n,a=pc(Rg,o),c=ql(o);return x.jsx(Vr,{asChild:!0,...c,children:x.jsx(te.a,{"data-state":a.open?"open":"closed",...s,ref:i,onPointerEnter:H(n.onPointerEnter,kl(a.onOpen)),onPointerLeave:H(n.onPointerLeave,kl(a.onClose)),onFocus:H(n.onFocus,a.onOpen),onBlur:H(n.onBlur,a.onClose),onTouchStart:H(n.onTouchStart,p=>p.preventDefault())})})});Tg.displayName=Rg;var jP="HoverCardPortal",[A1,FP]=Eg(jP,{forceMount:void 0}),_l="HoverCardContent",_g=f.forwardRef((n,i)=>{const o=FP(_l,n.__scopeHoverCard),{forceMount:s=o.forceMount,...a}=n,c=pc(_l,n.__scopeHoverCard);return x.jsx(ze,{present:s||c.open,children:x.jsx($P,{"data-state":c.open?"open":"closed",...a,onPointerEnter:H(n.onPointerEnter,kl(c.onOpen)),onPointerLeave:H(n.onPointerLeave,kl(c.onClose)),ref:i})})});_g.displayName=_l;var $P=f.forwardRef((n,i)=>{const{__scopeHoverCard:o,onEscapeKeyDown:s,onPointerDownOutside:a,onFocusOutside:c,onInteractOutside:p,...v}=n,m=pc(_l,o),h=ql(o),y=f.useRef(null),w=we(i,y),[S,E]=f.useState(!1);return f.useEffect(()=>{if(S){const R=document.body;return ru=R.style.userSelect||R.style.webkitUserSelect,R.style.userSelect="none",R.style.webkitUserSelect="none",()=>{R.style.userSelect=ru,R.style.webkitUserSelect=ru}}},[S]),f.useEffect(()=>{if(y.current){const R=()=>{E(!1),m.isPointerDownOnContentRef.current=!1,setTimeout(()=>{var T;((T=document.getSelection())==null?void 0:T.toString())!==""&&(m.hasSelectionRef.current=!0)})};return document.addEventListener("pointerup",R),()=>{document.removeEventListener("pointerup",R),m.hasSelectionRef.current=!1,m.isPointerDownOnContentRef.current=!1}}},[m.isPointerDownOnContentRef,m.hasSelectionRef]),f.useEffect(()=>{y.current&&UP(y.current).forEach(C=>C.setAttribute("tabindex","-1"))}),x.jsx(bn,{asChild:!0,disableOutsidePointerEvents:!1,onInteractOutside:p,onEscapeKeyDown:s,onPointerDownOutside:a,onFocusOutside:H(c,R=>{R.preventDefault()}),onDismiss:m.onDismiss,children:x.jsx(Vo,{...h,...v,onPointerDown:H(v.onPointerDown,R=>{R.currentTarget.contains(R.target)&&E(!0),m.hasSelectionRef.current=!1,m.isPointerDownOnContentRef.current=!0}),ref:w,style:{...v.style,userSelect:S?"text":void 0,WebkitUserSelect:S?"text":void 0,"--radix-hover-card-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-hover-card-content-available-width":"var(--radix-popper-available-width)","--radix-hover-card-content-available-height":"var(--radix-popper-available-height)","--radix-hover-card-trigger-width":"var(--radix-popper-anchor-width)","--radix-hover-card-trigger-height":"var(--radix-popper-anchor-height)"}})})}),zP="HoverCardArrow",HP=f.forwardRef((n,i)=>{const{__scopeHoverCard:o,...s}=n,a=ql(o);return x.jsx(Bo,{...a,...s,ref:i})});HP.displayName=zP;function kl(n){return i=>i.pointerType==="touch"?void 0:n()}function UP(n){const i=[],o=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT,{acceptNode:s=>s.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});for(;o.nextNode();)i.push(o.currentNode);return i}var M1=Pg,I1=Tg,D1=_g,vc="Radio",[VP,kg]=$e(vc),[BP,WP]=VP(vc),Ng=f.forwardRef((n,i)=>{const{__scopeRadio:o,name:s,checked:a=!1,required:c,disabled:p,value:v="on",onCheck:m,form:h,...y}=n,[w,S]=f.useState(null),E=we(i,T=>S(T)),R=f.useRef(!1),C=w?h||!!w.closest("form"):!0;return x.jsxs(BP,{scope:o,checked:a,disabled:p,children:[x.jsx(te.button,{type:"button",role:"radio","aria-checked":a,"data-state":Ig(a),"data-disabled":p?"":void 0,disabled:p,value:v,...y,ref:E,onClick:H(n.onClick,T=>{a||m==null||m(),C&&(R.current=T.isPropagationStopped(),R.current||T.stopPropagation())})}),C&&x.jsx(KP,{control:w,bubbles:!R.current,name:s,value:v,checked:a,required:c,disabled:p,form:h,style:{transform:"translateX(-100%)"}})]})});Ng.displayName=vc;var Ag="RadioIndicator",Mg=f.forwardRef((n,i)=>{const{__scopeRadio:o,forceMount:s,...a}=n,c=WP(Ag,o);return x.jsx(ze,{present:s||c.checked,children:x.jsx(te.span,{"data-state":Ig(c.checked),"data-disabled":c.disabled?"":void 0,...a,ref:i})})});Mg.displayName=Ag;var KP=n=>{const{control:i,checked:o,bubbles:s=!0,...a}=n,c=f.useRef(null),p=Bl(o),v=Ol(i);return f.useEffect(()=>{const m=c.current,h=window.HTMLInputElement.prototype,w=Object.getOwnPropertyDescriptor(h,"checked").set;if(p!==o&&w){const S=new Event("click",{bubbles:s});w.call(m,o),m.dispatchEvent(S)}},[p,o,s]),x.jsx("input",{type:"radio","aria-hidden":!0,defaultChecked:o,...a,tabIndex:-1,ref:c,style:{...n.style,...v,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function Ig(n){return n?"checked":"unchecked"}var GP=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],mc="RadioGroup",[YP,O1]=$e(mc,[Wr,kg]),Dg=Wr(),Og=kg(),[XP,QP]=YP(mc),Lg=f.forwardRef((n,i)=>{const{__scopeRadioGroup:o,name:s,defaultValue:a,value:c,required:p=!1,disabled:v=!1,orientation:m,dir:h,loop:y=!0,onValueChange:w,...S}=n,E=Dg(o),R=zr(h),[C,T]=dt({prop:c,defaultProp:a,onChange:w});return x.jsx(XP,{scope:o,name:s,required:p,disabled:v,value:C,onValueChange:T,children:x.jsx(Ou,{asChild:!0,...E,orientation:m,dir:R,loop:y,children:x.jsx(te.div,{role:"radiogroup","aria-required":p,"aria-orientation":m,"data-disabled":v?"":void 0,dir:R,...S,ref:i})})})});Lg.displayName=mc;var bg="RadioGroupItem",jg=f.forwardRef((n,i)=>{const{__scopeRadioGroup:o,disabled:s,...a}=n,c=QP(bg,o),p=c.disabled||s,v=Dg(o),m=Og(o),h=f.useRef(null),y=we(i,h),w=c.value===a.value,S=f.useRef(!1);return f.useEffect(()=>{const E=C=>{GP.includes(C.key)&&(S.current=!0)},R=()=>S.current=!1;return document.addEventListener("keydown",E),document.addEventListener("keyup",R),()=>{document.removeEventListener("keydown",E),document.removeEventListener("keyup",R)}},[]),x.jsx(Lu,{asChild:!0,...v,focusable:!p,active:w,children:x.jsx(Ng,{disabled:p,required:c.required,checked:w,...m,...a,name:c.name,ref:y,onCheck:()=>c.onValueChange(a.value),onKeyDown:H(E=>{E.key==="Enter"&&E.preventDefault()}),onFocus:H(a.onFocus,()=>{var E;S.current&&((E=h.current)==null||E.click())})})})});jg.displayName=bg;var ZP="RadioGroupIndicator",Fg=f.forwardRef((n,i)=>{const{__scopeRadioGroup:o,...s}=n,a=Og(o);return x.jsx(Mg,{...a,...s,ref:i})});Fg.displayName=ZP;var L1=Lg,b1=jg,j1=Fg,hc="Popover",[$g,F1]=$e(hc,[Bt]),Qo=Bt(),[qP,$n]=$g(hc),zg=n=>{const{__scopePopover:i,children:o,open:s,defaultOpen:a,onOpenChange:c,modal:p=!1}=n,v=Qo(i),m=f.useRef(null),[h,y]=f.useState(!1),[w=!1,S]=dt({prop:s,defaultProp:a,onChange:c});return x.jsx(Uo,{...v,children:x.jsx(qP,{scope:i,contentId:gt(),triggerRef:m,open:w,onOpenChange:S,onOpenToggle:f.useCallback(()=>S(E=>!E),[S]),hasCustomAnchor:h,onCustomAnchorAdd:f.useCallback(()=>y(!0),[]),onCustomAnchorRemove:f.useCallback(()=>y(!1),[]),modal:p,children:o})})};zg.displayName=hc;var Hg="PopoverAnchor",JP=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=$n(Hg,o),c=Qo(o),{onCustomAnchorAdd:p,onCustomAnchorRemove:v}=a;return f.useEffect(()=>(p(),()=>v()),[p,v]),x.jsx(Vr,{...c,...s,ref:i})});JP.displayName=Hg;var Ug="PopoverTrigger",Vg=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=$n(Ug,o),c=Qo(o),p=we(i,a.triggerRef),v=x.jsx(te.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":Yg(a.open),...s,ref:p,onClick:H(n.onClick,a.onOpenToggle)});return a.hasCustomAnchor?v:x.jsx(Vr,{asChild:!0,...c,children:v})});Vg.displayName=Ug;var gc="PopoverPortal",[eR,tR]=$g(gc,{forceMount:void 0}),Bg=n=>{const{__scopePopover:i,forceMount:o,children:s,container:a}=n,c=$n(gc,i);return x.jsx(eR,{scope:i,forceMount:o,children:x.jsx(ze,{present:o||c.open,children:x.jsx(Br,{asChild:!0,container:a,children:s})})})};Bg.displayName=gc;var $r="PopoverContent",Wg=f.forwardRef((n,i)=>{const o=tR($r,n.__scopePopover),{forceMount:s=o.forceMount,...a}=n,c=$n($r,n.__scopePopover);return x.jsx(ze,{present:s||c.open,children:c.modal?x.jsx(nR,{...a,ref:i}):x.jsx(rR,{...a,ref:i})})});Wg.displayName=$r;var nR=f.forwardRef((n,i)=>{const o=$n($r,n.__scopePopover),s=f.useRef(null),a=we(i,s),c=f.useRef(!1);return f.useEffect(()=>{const p=s.current;if(p)return bl(p)},[]),x.jsx(Wo,{as:In,allowPinchZoom:!0,children:x.jsx(Kg,{...n,ref:a,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:H(n.onCloseAutoFocus,p=>{var v;p.preventDefault(),c.current||(v=o.triggerRef.current)==null||v.focus()}),onPointerDownOutside:H(n.onPointerDownOutside,p=>{const v=p.detail.originalEvent,m=v.button===0&&v.ctrlKey===!0,h=v.button===2||m;c.current=h},{checkForDefaultPrevented:!1}),onFocusOutside:H(n.onFocusOutside,p=>p.preventDefault(),{checkForDefaultPrevented:!1})})})}),rR=f.forwardRef((n,i)=>{const o=$n($r,n.__scopePopover),s=f.useRef(!1),a=f.useRef(!1);return x.jsx(Kg,{...n,ref:i,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:c=>{var p,v;(p=n.onCloseAutoFocus)==null||p.call(n,c),c.defaultPrevented||(s.current||(v=o.triggerRef.current)==null||v.focus(),c.preventDefault()),s.current=!1,a.current=!1},onInteractOutside:c=>{var m,h;(m=n.onInteractOutside)==null||m.call(n,c),c.defaultPrevented||(s.current=!0,c.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const p=c.target;((h=o.triggerRef.current)==null?void 0:h.contains(p))&&c.preventDefault(),c.detail.originalEvent.type==="focusin"&&a.current&&c.preventDefault()}})}),Kg=f.forwardRef((n,i)=>{const{__scopePopover:o,trapFocus:s,onOpenAutoFocus:a,onCloseAutoFocus:c,disableOutsidePointerEvents:p,onEscapeKeyDown:v,onPointerDownOutside:m,onFocusOutside:h,onInteractOutside:y,...w}=n,S=$n($r,o),E=Qo(o);return Ml(),x.jsx(zo,{asChild:!0,loop:!0,trapped:s,onMountAutoFocus:a,onUnmountAutoFocus:c,children:x.jsx(bn,{asChild:!0,disableOutsidePointerEvents:p,onInteractOutside:y,onEscapeKeyDown:v,onPointerDownOutside:m,onFocusOutside:h,onDismiss:()=>S.onOpenChange(!1),children:x.jsx(Vo,{"data-state":Yg(S.open),role:"dialog",id:S.contentId,...E,...w,ref:i,style:{...w.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),Gg="PopoverClose",oR=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=$n(Gg,o);return x.jsx(te.button,{type:"button",...s,ref:i,onClick:H(n.onClick,()=>a.onOpenChange(!1))})});oR.displayName=Gg;var iR="PopoverArrow",lR=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=Qo(o);return x.jsx(Bo,{...a,...s,ref:i})});lR.displayName=iR;function Yg(n){return n?"open":"closed"}var $1=zg,z1=Vg,H1=Bg,U1=Wg;export{c1 as $,HR as A,UR as B,VC as C,WC as D,KR as E,fR as F,XR as G,QR as H,dR as I,GR as J,YR as K,wR as L,qR as M,JR as N,UC as O,te as P,n1 as Q,Yw as R,In as S,BC as T,o1 as U,WR as V,i1 as W,l1 as X,s1 as Y,a1 as Z,u1 as _,aR as a,d1 as a0,p1 as a1,v1 as a2,w1 as a3,y1 as a4,x1 as a5,E1 as a6,P1 as a7,T1 as a8,_1 as a9,r1 as aA,M1 as aB,I1 as aC,BR as aD,sR as aE,Wm as aF,Hm as aG,Vm as aH,$m as aI,k1 as aa,RP as ab,MP as ac,D1 as ad,L1 as ae,b1 as af,j1 as ag,H1 as ah,U1 as ai,zC as aj,QC as ak,ZC as al,kR as am,mR as an,hR as ao,bR as ap,jR as aq,FR as ar,h1 as as,C1 as at,jm as au,g1 as av,S1 as aw,$1 as ax,z1 as ay,t1 as az,Cu as b,Nn as c,qw as d,$C as e,HC as f,Wp as g,cR as h,RR as i,x as j,TR as k,gR as l,yR as m,xR as n,Eu as o,SR as p,ER as q,f as r,CR as s,PR as t,gt as u,NR as v,AR as w,MR as x,DR as y,$R as z};
95
+ For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return f.useEffect(()=>{var s;document.getElementById((s=n.current)==null?void 0:s.getAttribute("aria-describedby"))||console.warn(i)},[i,n]),null},h1=eg,g1=tg,y1=ng,w1=rg,x1=og,S1=ug,C1=dg,E1=lg,P1=ag;function EP(n,i){return f.useReducer((o,s)=>i[o][s]??o,n)}var uc="ScrollArea",[fg,R1]=$e(uc),[PP,_t]=fg(uc),pg=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,type:s="hover",dir:a,scrollHideDelay:c=600,...p}=n,[v,m]=f.useState(null),[h,y]=f.useState(null),[w,S]=f.useState(null),[E,R]=f.useState(null),[C,T]=f.useState(null),[M,k]=f.useState(0),[I,b]=f.useState(0),[j,W]=f.useState(!1),[V,Q]=f.useState(!1),ee=we(i,he=>m(he)),ue=zr(a);return x.jsx(PP,{scope:o,type:s,dir:ue,scrollHideDelay:c,scrollArea:v,viewport:h,onViewportChange:y,content:w,onContentChange:S,scrollbarX:E,onScrollbarXChange:R,scrollbarXEnabled:j,onScrollbarXEnabledChange:W,scrollbarY:C,onScrollbarYChange:T,scrollbarYEnabled:V,onScrollbarYEnabledChange:Q,onCornerWidthChange:k,onCornerHeightChange:b,children:x.jsx(te.div,{dir:ue,...p,ref:ee,style:{position:"relative","--radix-scroll-area-corner-width":M+"px","--radix-scroll-area-corner-height":I+"px",...n.style}})})});pg.displayName=uc;var vg="ScrollAreaViewport",mg=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,children:s,nonce:a,...c}=n,p=_t(vg,o),v=f.useRef(null),m=we(i,v,p.onViewportChange);return x.jsxs(x.Fragment,{children:[x.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:a}),x.jsx(te.div,{"data-radix-scroll-area-viewport":"",...c,ref:m,style:{overflowX:p.scrollbarXEnabled?"scroll":"hidden",overflowY:p.scrollbarYEnabled?"scroll":"hidden",...n.style},children:x.jsx("div",{ref:p.onContentChange,style:{minWidth:"100%",display:"table"},children:s})})]})});mg.displayName=vg;var Wt="ScrollAreaScrollbar",RP=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=_t(Wt,n.__scopeScrollArea),{onScrollbarXEnabledChange:c,onScrollbarYEnabledChange:p}=a,v=n.orientation==="horizontal";return f.useEffect(()=>(v?c(!0):p(!0),()=>{v?c(!1):p(!1)}),[v,c,p]),a.type==="hover"?x.jsx(TP,{...s,ref:i,forceMount:o}):a.type==="scroll"?x.jsx(_P,{...s,ref:i,forceMount:o}):a.type==="auto"?x.jsx(hg,{...s,ref:i,forceMount:o}):a.type==="always"?x.jsx(cc,{...s,ref:i}):null});RP.displayName=Wt;var TP=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=_t(Wt,n.__scopeScrollArea),[c,p]=f.useState(!1);return f.useEffect(()=>{const v=a.scrollArea;let m=0;if(v){const h=()=>{window.clearTimeout(m),p(!0)},y=()=>{m=window.setTimeout(()=>p(!1),a.scrollHideDelay)};return v.addEventListener("pointerenter",h),v.addEventListener("pointerleave",y),()=>{window.clearTimeout(m),v.removeEventListener("pointerenter",h),v.removeEventListener("pointerleave",y)}}},[a.scrollArea,a.scrollHideDelay]),x.jsx(ze,{present:o||c,children:x.jsx(hg,{"data-state":c?"visible":"hidden",...s,ref:i})})}),_P=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=_t(Wt,n.__scopeScrollArea),c=n.orientation==="horizontal",p=Zl(()=>m("SCROLL_END"),100),[v,m]=EP("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return f.useEffect(()=>{if(v==="idle"){const h=window.setTimeout(()=>m("HIDE"),a.scrollHideDelay);return()=>window.clearTimeout(h)}},[v,a.scrollHideDelay,m]),f.useEffect(()=>{const h=a.viewport,y=c?"scrollLeft":"scrollTop";if(h){let w=h[y];const S=()=>{const E=h[y];w!==E&&(m("SCROLL"),p()),w=E};return h.addEventListener("scroll",S),()=>h.removeEventListener("scroll",S)}},[a.viewport,c,m,p]),x.jsx(ze,{present:o||v!=="hidden",children:x.jsx(cc,{"data-state":v==="hidden"?"hidden":"visible",...s,ref:i,onPointerEnter:H(n.onPointerEnter,()=>m("POINTER_ENTER")),onPointerLeave:H(n.onPointerLeave,()=>m("POINTER_LEAVE"))})})}),hg=f.forwardRef((n,i)=>{const o=_t(Wt,n.__scopeScrollArea),{forceMount:s,...a}=n,[c,p]=f.useState(!1),v=n.orientation==="horizontal",m=Zl(()=>{if(o.viewport){const h=o.viewport.offsetWidth<o.viewport.scrollWidth,y=o.viewport.offsetHeight<o.viewport.scrollHeight;p(v?h:y)}},10);return Fr(o.viewport,m),Fr(o.content,m),x.jsx(ze,{present:s||c,children:x.jsx(cc,{"data-state":c?"visible":"hidden",...a,ref:i})})}),cc=f.forwardRef((n,i)=>{const{orientation:o="vertical",...s}=n,a=_t(Wt,n.__scopeScrollArea),c=f.useRef(null),p=f.useRef(0),[v,m]=f.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),h=xg(v.viewport,v.content),y={...s,sizes:v,onSizesChange:m,hasThumb:h>0&&h<1,onThumbChange:S=>c.current=S,onThumbPointerUp:()=>p.current=0,onThumbPointerDown:S=>p.current=S};function w(S,E){return OP(S,p.current,v,E)}return o==="horizontal"?x.jsx(kP,{...y,ref:i,onThumbPositionChange:()=>{if(a.viewport&&c.current){const S=a.viewport.scrollLeft,E=Vp(S,v,a.dir);c.current.style.transform=`translate3d(${E}px, 0, 0)`}},onWheelScroll:S=>{a.viewport&&(a.viewport.scrollLeft=S)},onDragScroll:S=>{a.viewport&&(a.viewport.scrollLeft=w(S,a.dir))}}):o==="vertical"?x.jsx(NP,{...y,ref:i,onThumbPositionChange:()=>{if(a.viewport&&c.current){const S=a.viewport.scrollTop,E=Vp(S,v);c.current.style.transform=`translate3d(0, ${E}px, 0)`}},onWheelScroll:S=>{a.viewport&&(a.viewport.scrollTop=S)},onDragScroll:S=>{a.viewport&&(a.viewport.scrollTop=w(S))}}):null}),kP=f.forwardRef((n,i)=>{const{sizes:o,onSizesChange:s,...a}=n,c=_t(Wt,n.__scopeScrollArea),[p,v]=f.useState(),m=f.useRef(null),h=we(i,m,c.onScrollbarXChange);return f.useEffect(()=>{m.current&&v(getComputedStyle(m.current))},[m]),x.jsx(yg,{"data-orientation":"horizontal",...a,ref:h,sizes:o,style:{bottom:0,left:c.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:c.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Ql(o)+"px",...n.style},onThumbPointerDown:y=>n.onThumbPointerDown(y.x),onDragScroll:y=>n.onDragScroll(y.x),onWheelScroll:(y,w)=>{if(c.viewport){const S=c.viewport.scrollLeft+y.deltaX;n.onWheelScroll(S),Cg(S,w)&&y.preventDefault()}},onResize:()=>{m.current&&c.viewport&&p&&s({content:c.viewport.scrollWidth,viewport:c.viewport.offsetWidth,scrollbar:{size:m.current.clientWidth,paddingStart:Tl(p.paddingLeft),paddingEnd:Tl(p.paddingRight)}})}})}),NP=f.forwardRef((n,i)=>{const{sizes:o,onSizesChange:s,...a}=n,c=_t(Wt,n.__scopeScrollArea),[p,v]=f.useState(),m=f.useRef(null),h=we(i,m,c.onScrollbarYChange);return f.useEffect(()=>{m.current&&v(getComputedStyle(m.current))},[m]),x.jsx(yg,{"data-orientation":"vertical",...a,ref:h,sizes:o,style:{top:0,right:c.dir==="ltr"?0:void 0,left:c.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Ql(o)+"px",...n.style},onThumbPointerDown:y=>n.onThumbPointerDown(y.y),onDragScroll:y=>n.onDragScroll(y.y),onWheelScroll:(y,w)=>{if(c.viewport){const S=c.viewport.scrollTop+y.deltaY;n.onWheelScroll(S),Cg(S,w)&&y.preventDefault()}},onResize:()=>{m.current&&c.viewport&&p&&s({content:c.viewport.scrollHeight,viewport:c.viewport.offsetHeight,scrollbar:{size:m.current.clientHeight,paddingStart:Tl(p.paddingTop),paddingEnd:Tl(p.paddingBottom)}})}})}),[AP,gg]=fg(Wt),yg=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,sizes:s,hasThumb:a,onThumbChange:c,onThumbPointerUp:p,onThumbPointerDown:v,onThumbPositionChange:m,onDragScroll:h,onWheelScroll:y,onResize:w,...S}=n,E=_t(Wt,o),[R,C]=f.useState(null),T=we(i,ee=>C(ee)),M=f.useRef(null),k=f.useRef(""),I=E.viewport,b=s.content-s.viewport,j=De(y),W=De(m),V=Zl(w,10);function Q(ee){if(M.current){const ue=ee.clientX-M.current.left,he=ee.clientY-M.current.top;h({x:ue,y:he})}}return f.useEffect(()=>{const ee=ue=>{const he=ue.target;(R==null?void 0:R.contains(he))&&j(ue,b)};return document.addEventListener("wheel",ee,{passive:!1}),()=>document.removeEventListener("wheel",ee,{passive:!1})},[I,R,b,j]),f.useEffect(W,[s,W]),Fr(R,V),Fr(E.content,V),x.jsx(AP,{scope:o,scrollbar:R,hasThumb:a,onThumbChange:De(c),onThumbPointerUp:De(p),onThumbPositionChange:W,onThumbPointerDown:De(v),children:x.jsx(te.div,{...S,ref:T,style:{position:"absolute",...S.style},onPointerDown:H(n.onPointerDown,ee=>{ee.button===0&&(ee.target.setPointerCapture(ee.pointerId),M.current=R.getBoundingClientRect(),k.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",E.viewport&&(E.viewport.style.scrollBehavior="auto"),Q(ee))}),onPointerMove:H(n.onPointerMove,Q),onPointerUp:H(n.onPointerUp,ee=>{const ue=ee.target;ue.hasPointerCapture(ee.pointerId)&&ue.releasePointerCapture(ee.pointerId),document.body.style.webkitUserSelect=k.current,E.viewport&&(E.viewport.style.scrollBehavior=""),M.current=null})})})}),Rl="ScrollAreaThumb",MP=f.forwardRef((n,i)=>{const{forceMount:o,...s}=n,a=gg(Rl,n.__scopeScrollArea);return x.jsx(ze,{present:o||a.hasThumb,children:x.jsx(IP,{ref:i,...s})})}),IP=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,style:s,...a}=n,c=_t(Rl,o),p=gg(Rl,o),{onThumbPositionChange:v}=p,m=we(i,w=>p.onThumbChange(w)),h=f.useRef(void 0),y=Zl(()=>{h.current&&(h.current(),h.current=void 0)},100);return f.useEffect(()=>{const w=c.viewport;if(w){const S=()=>{if(y(),!h.current){const E=LP(w,v);h.current=E,v()}};return v(),w.addEventListener("scroll",S),()=>w.removeEventListener("scroll",S)}},[c.viewport,y,v]),x.jsx(te.div,{"data-state":p.hasThumb?"visible":"hidden",...a,ref:m,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...s},onPointerDownCapture:H(n.onPointerDownCapture,w=>{const E=w.target.getBoundingClientRect(),R=w.clientX-E.left,C=w.clientY-E.top;p.onThumbPointerDown({x:R,y:C})}),onPointerUp:H(n.onPointerUp,p.onThumbPointerUp)})});MP.displayName=Rl;var dc="ScrollAreaCorner",wg=f.forwardRef((n,i)=>{const o=_t(dc,n.__scopeScrollArea),s=!!(o.scrollbarX&&o.scrollbarY);return o.type!=="scroll"&&s?x.jsx(DP,{...n,ref:i}):null});wg.displayName=dc;var DP=f.forwardRef((n,i)=>{const{__scopeScrollArea:o,...s}=n,a=_t(dc,o),[c,p]=f.useState(0),[v,m]=f.useState(0),h=!!(c&&v);return Fr(a.scrollbarX,()=>{var w;const y=((w=a.scrollbarX)==null?void 0:w.offsetHeight)||0;a.onCornerHeightChange(y),m(y)}),Fr(a.scrollbarY,()=>{var w;const y=((w=a.scrollbarY)==null?void 0:w.offsetWidth)||0;a.onCornerWidthChange(y),p(y)}),h?x.jsx(te.div,{...s,ref:i,style:{width:c,height:v,position:"absolute",right:a.dir==="ltr"?0:void 0,left:a.dir==="rtl"?0:void 0,bottom:0,...n.style}}):null});function Tl(n){return n?parseInt(n,10):0}function xg(n,i){const o=n/i;return isNaN(o)?0:o}function Ql(n){const i=xg(n.viewport,n.content),o=n.scrollbar.paddingStart+n.scrollbar.paddingEnd,s=(n.scrollbar.size-o)*i;return Math.max(s,18)}function OP(n,i,o,s="ltr"){const a=Ql(o),c=a/2,p=i||c,v=a-p,m=o.scrollbar.paddingStart+p,h=o.scrollbar.size-o.scrollbar.paddingEnd-v,y=o.content-o.viewport,w=s==="ltr"?[0,y]:[y*-1,0];return Sg([m,h],w)(n)}function Vp(n,i,o="ltr"){const s=Ql(i),a=i.scrollbar.paddingStart+i.scrollbar.paddingEnd,c=i.scrollbar.size-a,p=i.content-i.viewport,v=c-s,m=o==="ltr"?[0,p]:[p*-1,0],h=hu(n,m);return Sg([0,p],[0,v])(h)}function Sg(n,i){return o=>{if(n[0]===n[1]||i[0]===i[1])return i[0];const s=(i[1]-i[0])/(n[1]-n[0]);return i[0]+s*(o-n[0])}}function Cg(n,i){return n>0&&n<i}var LP=(n,i=()=>{})=>{let o={left:n.scrollLeft,top:n.scrollTop},s=0;return function a(){const c={left:n.scrollLeft,top:n.scrollTop},p=o.left!==c.left,v=o.top!==c.top;(p||v)&&i(),o=c,s=window.requestAnimationFrame(a)}(),()=>window.cancelAnimationFrame(s)};function Zl(n,i){const o=De(n),s=f.useRef(0);return f.useEffect(()=>()=>window.clearTimeout(s.current),[]),f.useCallback(()=>{window.clearTimeout(s.current),s.current=window.setTimeout(o,i)},[o,i])}function Fr(n,i){const o=De(i);Ue(()=>{let s=0;if(n){const a=new ResizeObserver(()=>{cancelAnimationFrame(s),s=window.requestAnimationFrame(o)});return a.observe(n),()=>{window.cancelAnimationFrame(s),a.unobserve(n)}}},[n,o])}var T1=pg,_1=mg,k1=wg,ru,fc="HoverCard",[Eg,N1]=$e(fc,[Bt]),ql=Bt(),[bP,pc]=Eg(fc),Pg=n=>{const{__scopeHoverCard:i,children:o,open:s,defaultOpen:a,onOpenChange:c,openDelay:p=700,closeDelay:v=300}=n,m=ql(i),h=f.useRef(0),y=f.useRef(0),w=f.useRef(!1),S=f.useRef(!1),[E=!1,R]=dt({prop:s,defaultProp:a,onChange:c}),C=f.useCallback(()=>{clearTimeout(y.current),h.current=window.setTimeout(()=>R(!0),p)},[p,R]),T=f.useCallback(()=>{clearTimeout(h.current),!w.current&&!S.current&&(y.current=window.setTimeout(()=>R(!1),v))},[v,R]),M=f.useCallback(()=>R(!1),[R]);return f.useEffect(()=>()=>{clearTimeout(h.current),clearTimeout(y.current)},[]),x.jsx(bP,{scope:i,open:E,onOpenChange:R,onOpen:C,onClose:T,onDismiss:M,hasSelectionRef:w,isPointerDownOnContentRef:S,children:x.jsx(Uo,{...m,children:o})})};Pg.displayName=fc;var Rg="HoverCardTrigger",Tg=f.forwardRef((n,i)=>{const{__scopeHoverCard:o,...s}=n,a=pc(Rg,o),c=ql(o);return x.jsx(Vr,{asChild:!0,...c,children:x.jsx(te.a,{"data-state":a.open?"open":"closed",...s,ref:i,onPointerEnter:H(n.onPointerEnter,kl(a.onOpen)),onPointerLeave:H(n.onPointerLeave,kl(a.onClose)),onFocus:H(n.onFocus,a.onOpen),onBlur:H(n.onBlur,a.onClose),onTouchStart:H(n.onTouchStart,p=>p.preventDefault())})})});Tg.displayName=Rg;var jP="HoverCardPortal",[A1,FP]=Eg(jP,{forceMount:void 0}),_l="HoverCardContent",_g=f.forwardRef((n,i)=>{const o=FP(_l,n.__scopeHoverCard),{forceMount:s=o.forceMount,...a}=n,c=pc(_l,n.__scopeHoverCard);return x.jsx(ze,{present:s||c.open,children:x.jsx($P,{"data-state":c.open?"open":"closed",...a,onPointerEnter:H(n.onPointerEnter,kl(c.onOpen)),onPointerLeave:H(n.onPointerLeave,kl(c.onClose)),ref:i})})});_g.displayName=_l;var $P=f.forwardRef((n,i)=>{const{__scopeHoverCard:o,onEscapeKeyDown:s,onPointerDownOutside:a,onFocusOutside:c,onInteractOutside:p,...v}=n,m=pc(_l,o),h=ql(o),y=f.useRef(null),w=we(i,y),[S,E]=f.useState(!1);return f.useEffect(()=>{if(S){const R=document.body;return ru=R.style.userSelect||R.style.webkitUserSelect,R.style.userSelect="none",R.style.webkitUserSelect="none",()=>{R.style.userSelect=ru,R.style.webkitUserSelect=ru}}},[S]),f.useEffect(()=>{if(y.current){const R=()=>{E(!1),m.isPointerDownOnContentRef.current=!1,setTimeout(()=>{var T;((T=document.getSelection())==null?void 0:T.toString())!==""&&(m.hasSelectionRef.current=!0)})};return document.addEventListener("pointerup",R),()=>{document.removeEventListener("pointerup",R),m.hasSelectionRef.current=!1,m.isPointerDownOnContentRef.current=!1}}},[m.isPointerDownOnContentRef,m.hasSelectionRef]),f.useEffect(()=>{y.current&&UP(y.current).forEach(C=>C.setAttribute("tabindex","-1"))}),x.jsx(bn,{asChild:!0,disableOutsidePointerEvents:!1,onInteractOutside:p,onEscapeKeyDown:s,onPointerDownOutside:a,onFocusOutside:H(c,R=>{R.preventDefault()}),onDismiss:m.onDismiss,children:x.jsx(Vo,{...h,...v,onPointerDown:H(v.onPointerDown,R=>{R.currentTarget.contains(R.target)&&E(!0),m.hasSelectionRef.current=!1,m.isPointerDownOnContentRef.current=!0}),ref:w,style:{...v.style,userSelect:S?"text":void 0,WebkitUserSelect:S?"text":void 0,"--radix-hover-card-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-hover-card-content-available-width":"var(--radix-popper-available-width)","--radix-hover-card-content-available-height":"var(--radix-popper-available-height)","--radix-hover-card-trigger-width":"var(--radix-popper-anchor-width)","--radix-hover-card-trigger-height":"var(--radix-popper-anchor-height)"}})})}),zP="HoverCardArrow",HP=f.forwardRef((n,i)=>{const{__scopeHoverCard:o,...s}=n,a=ql(o);return x.jsx(Bo,{...a,...s,ref:i})});HP.displayName=zP;function kl(n){return i=>i.pointerType==="touch"?void 0:n()}function UP(n){const i=[],o=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT,{acceptNode:s=>s.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});for(;o.nextNode();)i.push(o.currentNode);return i}var M1=Pg,I1=Tg,D1=_g,vc="Radio",[VP,kg]=$e(vc),[BP,WP]=VP(vc),Ng=f.forwardRef((n,i)=>{const{__scopeRadio:o,name:s,checked:a=!1,required:c,disabled:p,value:v="on",onCheck:m,form:h,...y}=n,[w,S]=f.useState(null),E=we(i,T=>S(T)),R=f.useRef(!1),C=w?h||!!w.closest("form"):!0;return x.jsxs(BP,{scope:o,checked:a,disabled:p,children:[x.jsx(te.button,{type:"button",role:"radio","aria-checked":a,"data-state":Ig(a),"data-disabled":p?"":void 0,disabled:p,value:v,...y,ref:E,onClick:H(n.onClick,T=>{a||m==null||m(),C&&(R.current=T.isPropagationStopped(),R.current||T.stopPropagation())})}),C&&x.jsx(KP,{control:w,bubbles:!R.current,name:s,value:v,checked:a,required:c,disabled:p,form:h,style:{transform:"translateX(-100%)"}})]})});Ng.displayName=vc;var Ag="RadioIndicator",Mg=f.forwardRef((n,i)=>{const{__scopeRadio:o,forceMount:s,...a}=n,c=WP(Ag,o);return x.jsx(ze,{present:s||c.checked,children:x.jsx(te.span,{"data-state":Ig(c.checked),"data-disabled":c.disabled?"":void 0,...a,ref:i})})});Mg.displayName=Ag;var KP=n=>{const{control:i,checked:o,bubbles:s=!0,...a}=n,c=f.useRef(null),p=Bl(o),v=Ol(i);return f.useEffect(()=>{const m=c.current,h=window.HTMLInputElement.prototype,w=Object.getOwnPropertyDescriptor(h,"checked").set;if(p!==o&&w){const S=new Event("click",{bubbles:s});w.call(m,o),m.dispatchEvent(S)}},[p,o,s]),x.jsx("input",{type:"radio","aria-hidden":!0,defaultChecked:o,...a,tabIndex:-1,ref:c,style:{...n.style,...v,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function Ig(n){return n?"checked":"unchecked"}var GP=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],mc="RadioGroup",[YP,O1]=$e(mc,[Wr,kg]),Dg=Wr(),Og=kg(),[XP,QP]=YP(mc),Lg=f.forwardRef((n,i)=>{const{__scopeRadioGroup:o,name:s,defaultValue:a,value:c,required:p=!1,disabled:v=!1,orientation:m,dir:h,loop:y=!0,onValueChange:w,...S}=n,E=Dg(o),R=zr(h),[C,T]=dt({prop:c,defaultProp:a,onChange:w});return x.jsx(XP,{scope:o,name:s,required:p,disabled:v,value:C,onValueChange:T,children:x.jsx(Ou,{asChild:!0,...E,orientation:m,dir:R,loop:y,children:x.jsx(te.div,{role:"radiogroup","aria-required":p,"aria-orientation":m,"data-disabled":v?"":void 0,dir:R,...S,ref:i})})})});Lg.displayName=mc;var bg="RadioGroupItem",jg=f.forwardRef((n,i)=>{const{__scopeRadioGroup:o,disabled:s,...a}=n,c=QP(bg,o),p=c.disabled||s,v=Dg(o),m=Og(o),h=f.useRef(null),y=we(i,h),w=c.value===a.value,S=f.useRef(!1);return f.useEffect(()=>{const E=C=>{GP.includes(C.key)&&(S.current=!0)},R=()=>S.current=!1;return document.addEventListener("keydown",E),document.addEventListener("keyup",R),()=>{document.removeEventListener("keydown",E),document.removeEventListener("keyup",R)}},[]),x.jsx(Lu,{asChild:!0,...v,focusable:!p,active:w,children:x.jsx(Ng,{disabled:p,required:c.required,checked:w,...m,...a,name:c.name,ref:y,onCheck:()=>c.onValueChange(a.value),onKeyDown:H(E=>{E.key==="Enter"&&E.preventDefault()}),onFocus:H(a.onFocus,()=>{var E;S.current&&((E=h.current)==null||E.click())})})})});jg.displayName=bg;var ZP="RadioGroupIndicator",Fg=f.forwardRef((n,i)=>{const{__scopeRadioGroup:o,...s}=n,a=Og(o);return x.jsx(Mg,{...a,...s,ref:i})});Fg.displayName=ZP;var L1=Lg,b1=jg,j1=Fg,hc="Popover",[$g,F1]=$e(hc,[Bt]),Qo=Bt(),[qP,$n]=$g(hc),zg=n=>{const{__scopePopover:i,children:o,open:s,defaultOpen:a,onOpenChange:c,modal:p=!1}=n,v=Qo(i),m=f.useRef(null),[h,y]=f.useState(!1),[w=!1,S]=dt({prop:s,defaultProp:a,onChange:c});return x.jsx(Uo,{...v,children:x.jsx(qP,{scope:i,contentId:gt(),triggerRef:m,open:w,onOpenChange:S,onOpenToggle:f.useCallback(()=>S(E=>!E),[S]),hasCustomAnchor:h,onCustomAnchorAdd:f.useCallback(()=>y(!0),[]),onCustomAnchorRemove:f.useCallback(()=>y(!1),[]),modal:p,children:o})})};zg.displayName=hc;var Hg="PopoverAnchor",JP=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=$n(Hg,o),c=Qo(o),{onCustomAnchorAdd:p,onCustomAnchorRemove:v}=a;return f.useEffect(()=>(p(),()=>v()),[p,v]),x.jsx(Vr,{...c,...s,ref:i})});JP.displayName=Hg;var Ug="PopoverTrigger",Vg=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=$n(Ug,o),c=Qo(o),p=we(i,a.triggerRef),v=x.jsx(te.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":Yg(a.open),...s,ref:p,onClick:H(n.onClick,a.onOpenToggle)});return a.hasCustomAnchor?v:x.jsx(Vr,{asChild:!0,...c,children:v})});Vg.displayName=Ug;var gc="PopoverPortal",[eR,tR]=$g(gc,{forceMount:void 0}),Bg=n=>{const{__scopePopover:i,forceMount:o,children:s,container:a}=n,c=$n(gc,i);return x.jsx(eR,{scope:i,forceMount:o,children:x.jsx(ze,{present:o||c.open,children:x.jsx(Br,{asChild:!0,container:a,children:s})})})};Bg.displayName=gc;var $r="PopoverContent",Wg=f.forwardRef((n,i)=>{const o=tR($r,n.__scopePopover),{forceMount:s=o.forceMount,...a}=n,c=$n($r,n.__scopePopover);return x.jsx(ze,{present:s||c.open,children:c.modal?x.jsx(nR,{...a,ref:i}):x.jsx(rR,{...a,ref:i})})});Wg.displayName=$r;var nR=f.forwardRef((n,i)=>{const o=$n($r,n.__scopePopover),s=f.useRef(null),a=we(i,s),c=f.useRef(!1);return f.useEffect(()=>{const p=s.current;if(p)return bl(p)},[]),x.jsx(Wo,{as:In,allowPinchZoom:!0,children:x.jsx(Kg,{...n,ref:a,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:H(n.onCloseAutoFocus,p=>{var v;p.preventDefault(),c.current||(v=o.triggerRef.current)==null||v.focus()}),onPointerDownOutside:H(n.onPointerDownOutside,p=>{const v=p.detail.originalEvent,m=v.button===0&&v.ctrlKey===!0,h=v.button===2||m;c.current=h},{checkForDefaultPrevented:!1}),onFocusOutside:H(n.onFocusOutside,p=>p.preventDefault(),{checkForDefaultPrevented:!1})})})}),rR=f.forwardRef((n,i)=>{const o=$n($r,n.__scopePopover),s=f.useRef(!1),a=f.useRef(!1);return x.jsx(Kg,{...n,ref:i,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:c=>{var p,v;(p=n.onCloseAutoFocus)==null||p.call(n,c),c.defaultPrevented||(s.current||(v=o.triggerRef.current)==null||v.focus(),c.preventDefault()),s.current=!1,a.current=!1},onInteractOutside:c=>{var m,h;(m=n.onInteractOutside)==null||m.call(n,c),c.defaultPrevented||(s.current=!0,c.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const p=c.target;((h=o.triggerRef.current)==null?void 0:h.contains(p))&&c.preventDefault(),c.detail.originalEvent.type==="focusin"&&a.current&&c.preventDefault()}})}),Kg=f.forwardRef((n,i)=>{const{__scopePopover:o,trapFocus:s,onOpenAutoFocus:a,onCloseAutoFocus:c,disableOutsidePointerEvents:p,onEscapeKeyDown:v,onPointerDownOutside:m,onFocusOutside:h,onInteractOutside:y,...w}=n,S=$n($r,o),E=Qo(o);return Ml(),x.jsx(zo,{asChild:!0,loop:!0,trapped:s,onMountAutoFocus:a,onUnmountAutoFocus:c,children:x.jsx(bn,{asChild:!0,disableOutsidePointerEvents:p,onInteractOutside:y,onEscapeKeyDown:v,onPointerDownOutside:m,onFocusOutside:h,onDismiss:()=>S.onOpenChange(!1),children:x.jsx(Vo,{"data-state":Yg(S.open),role:"dialog",id:S.contentId,...E,...w,ref:i,style:{...w.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),Gg="PopoverClose",oR=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=$n(Gg,o);return x.jsx(te.button,{type:"button",...s,ref:i,onClick:H(n.onClick,()=>a.onOpenChange(!1))})});oR.displayName=Gg;var iR="PopoverArrow",lR=f.forwardRef((n,i)=>{const{__scopePopover:o,...s}=n,a=Qo(o);return x.jsx(Bo,{...a,...s,ref:i})});lR.displayName=iR;function Yg(n){return n?"open":"closed"}var $1=zg,z1=Vg,H1=Bg,U1=Wg;export{c1 as $,HR as A,UR as B,VC as C,WC as D,KR as E,fR as F,XR as G,QR as H,dR as I,GR as J,YR as K,wR as L,qR as M,JR as N,UC as O,te as P,n1 as Q,Yw as R,In as S,BC as T,o1 as U,WR as V,i1 as W,l1 as X,s1 as Y,a1 as Z,u1 as _,aR as a,d1 as a0,p1 as a1,v1 as a2,w1 as a3,y1 as a4,x1 as a5,E1 as a6,P1 as a7,T1 as a8,_1 as a9,r1 as aA,M1 as aB,I1 as aC,BR as aD,sR as aE,Wm as aF,Hm as aG,Vm as aH,$m as aI,k1 as aa,RP as ab,MP as ac,D1 as ad,L1 as ae,b1 as af,j1 as ag,H1 as ah,U1 as ai,zC as aj,QC as ak,ZC as al,kR as am,mR as an,hR as ao,jm as ap,bR as aq,jR as ar,FR as as,h1 as at,C1 as au,g1 as av,S1 as aw,$1 as ax,z1 as ay,t1 as az,Cu as b,Nn as c,qw as d,$C as e,HC as f,Wp as g,cR as h,RR as i,x as j,TR as k,gR as l,yR as m,xR as n,Eu as o,SR as p,ER as q,f as r,CR as s,PR as t,gt as u,NR as v,AR as w,MR as x,DR as y,$R as z};
@@ -1,4 +1,4 @@
1
- import{r as g,R as Yr,a as Gr}from"./@radix-C_LirfyT.js";/**
1
+ import{r as g,R as Yr,a as Gr}from"./@radix-B1sy0Lhr.js";/**
2
2
  * @remix-run/router v1.20.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.