calkit-python 0.33.0__tar.gz → 0.33.1__tar.gz

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 (268) hide show
  1. {calkit_python-0.33.0 → calkit_python-0.33.1}/PKG-INFO +1 -1
  2. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/__init__.py +1 -1
  3. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/jupyterlab/routes.py +11 -31
  4. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/package.json +1 -1
  5. calkit_python-0.33.1/calkit/labextension/static/909.bc803769ea27551457d9.js +1 -0
  6. calkit_python-0.33.0/calkit/labextension/static/remoteEntry.bcc6d3dcc8fe2adee14c.js → calkit_python-0.33.1/calkit/labextension/static/remoteEntry.bc3529435b6f02f41e8d.js +1 -1
  7. calkit_python-0.33.1/calkit/tests/jupyterlab/test_routes.py +16 -0
  8. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_dvc.py +3 -3
  9. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/environment-editor.tsx +199 -91
  10. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/notebook-toolbar.tsx +5 -5
  11. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/sidebar.tsx +1 -1
  12. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/tests/calkit.spec.ts +20 -0
  13. calkit_python-0.33.0/calkit/labextension/static/909.20c9c8cf93c148310982.js +0 -1
  14. calkit_python-0.33.0/calkit/tests/jupyterlab/test_routes.py +0 -23
  15. {calkit_python-0.33.0 → calkit_python-0.33.1}/.gitignore +0 -0
  16. {calkit_python-0.33.0 → calkit_python-0.33.1}/.pre-commit-config.yaml +0 -0
  17. {calkit_python-0.33.0 → calkit_python-0.33.1}/.prettierignore +0 -0
  18. {calkit_python-0.33.0 → calkit_python-0.33.1}/.python-version +0 -0
  19. {calkit_python-0.33.0 → calkit_python-0.33.1}/.yarnrc.yml +0 -0
  20. {calkit_python-0.33.0 → calkit_python-0.33.1}/CITATION.cff +0 -0
  21. {calkit_python-0.33.0 → calkit_python-0.33.1}/CODE_OF_CONDUCT.md +0 -0
  22. {calkit_python-0.33.0 → calkit_python-0.33.1}/CONTRIBUTING.md +0 -0
  23. {calkit_python-0.33.0 → calkit_python-0.33.1}/LICENSE +0 -0
  24. {calkit_python-0.33.0 → calkit_python-0.33.1}/Makefile +0 -0
  25. {calkit_python-0.33.0 → calkit_python-0.33.1}/README.md +0 -0
  26. {calkit_python-0.33.0 → calkit_python-0.33.1}/babel.config.js +0 -0
  27. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/__main__.py +0 -0
  28. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/calc.py +0 -0
  29. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/check.py +0 -0
  30. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/__init__.py +0 -0
  31. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/check.py +0 -0
  32. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/cloud.py +0 -0
  33. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/config.py +0 -0
  34. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/core.py +0 -0
  35. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/describe.py +0 -0
  36. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/import_.py +0 -0
  37. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/latex.py +0 -0
  38. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/list.py +0 -0
  39. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/main.py +0 -0
  40. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/new.py +0 -0
  41. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/notebooks.py +0 -0
  42. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/office.py +0 -0
  43. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/overleaf.py +0 -0
  44. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/slurm.py +0 -0
  45. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cli/update.py +0 -0
  46. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/cloud.py +0 -0
  47. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/conda.py +0 -0
  48. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/config.py +0 -0
  49. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/core.py +0 -0
  50. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/datasets.py +0 -0
  51. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/docker.py +0 -0
  52. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/dvc.py +0 -0
  53. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/environments.py +0 -0
  54. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/git.py +0 -0
  55. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/github.py +0 -0
  56. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/gui.py +0 -0
  57. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/invenio.py +0 -0
  58. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/jupyter.py +0 -0
  59. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/jupyterlab/__init__.py +0 -0
  60. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  61. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  62. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  63. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  64. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  65. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  66. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  67. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  68. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/style.js +0 -0
  69. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/labextension/static/third-party-licenses.json +0 -0
  70. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/licenses.py +0 -0
  71. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/magics.py +0 -0
  72. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/matlab.py +0 -0
  73. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/models/__init__.py +0 -0
  74. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/models/core.py +0 -0
  75. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/models/io.py +0 -0
  76. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/models/iteration.py +0 -0
  77. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/models/pipeline.py +0 -0
  78. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/notebooks.py +0 -0
  79. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/office.py +0 -0
  80. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/ops.py +0 -0
  81. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/overleaf.py +0 -0
  82. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/pipeline.py +0 -0
  83. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/releases.py +0 -0
  84. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/server.py +0 -0
  85. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/__init__.py +0 -0
  86. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/core.py +0 -0
  87. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/__init__.py +0 -0
  88. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/article/paper.tex +0 -0
  89. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/core.py +0 -0
  90. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/jfm/jfm.bst +0 -0
  91. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/jfm/jfm.cls +0 -0
  92. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  93. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/jfm/paper.tex +0 -0
  94. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/templates/latex/jfm/upmath.sty +0 -0
  95. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/__init__.py +0 -0
  96. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/__init__.py +0 -0
  97. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_check.py +0 -0
  98. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_config.py +0 -0
  99. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_import.py +0 -0
  100. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_latex.py +0 -0
  101. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_list.py +0 -0
  102. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_main.py +0 -0
  103. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_new.py +0 -0
  104. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_notebooks.py +0 -0
  105. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/cli/test_overleaf.py +0 -0
  106. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/jupyterlab/__init__.py +0 -0
  107. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/models/__init__.py +0 -0
  108. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/models/test_iteration.py +0 -0
  109. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/models/test_pipeline.py +0 -0
  110. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_calc.py +0 -0
  111. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_check.py +0 -0
  112. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_conda.py +0 -0
  113. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_core.py +0 -0
  114. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_environments.py +0 -0
  115. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_git.py +0 -0
  116. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_invenio.py +0 -0
  117. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_jupyter.py +0 -0
  118. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_magics.py +0 -0
  119. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_notebooks.py +0 -0
  120. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_pipeline.py +0 -0
  121. {calkit_python-0.33.0 → calkit_python-0.33.1}/calkit/tests/test_templates.py +0 -0
  122. {calkit_python-0.33.0 → calkit_python-0.33.1}/conftest.py +0 -0
  123. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/CNAME +0 -0
  124. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/apps.md +0 -0
  125. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/calculations.md +0 -0
  126. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/calkit-yaml.md +0 -0
  127. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/cli-reference.md +0 -0
  128. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/cloud-integration.md +0 -0
  129. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/datasets.md +0 -0
  130. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/dependencies.md +0 -0
  131. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/environments.md +0 -0
  132. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/examples.md +0 -0
  133. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/governance.md +0 -0
  134. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/help.md +0 -0
  135. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/c-to-the-k-white.svg +0 -0
  136. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/calkit-fragmentation-compendium.png +0 -0
  137. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/calkit-no-bg.png +0 -0
  138. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/connect-zenodo.png +0 -0
  139. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/jupyterlab/all-green.png +0 -0
  140. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  141. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/jupyterlab/new-env.png +0 -0
  142. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/jupyterlab/new-notebook.png +0 -0
  143. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  144. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/jupyterlab-params.png +0 -0
  145. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/plos-osi-code-2024-03.png +0 -0
  146. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/img/vscode-nb-params.png +0 -0
  147. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/index.md +0 -0
  148. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/installation.md +0 -0
  149. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/jupyterlab.md +0 -0
  150. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/local-server.md +0 -0
  151. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/notebooks.md +0 -0
  152. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/overleaf.md +0 -0
  153. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/pipeline/index.md +0 -0
  154. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/pipeline/manual-steps.md +0 -0
  155. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/pipeline/running-and-logging.md +0 -0
  156. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/pipeline/slurm.md +0 -0
  157. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/quickstart.md +0 -0
  158. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/references.md +0 -0
  159. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/releases.md +0 -0
  160. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  161. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/conda-envs.md +0 -0
  162. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/existing-project.md +0 -0
  163. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/first-project.md +0 -0
  164. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/github-actions.md +0 -0
  165. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  166. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  167. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  168. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  169. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  170. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  171. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  172. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  173. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  174. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  175. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  176. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  177. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  178. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  179. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  180. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/create-project.png +0 -0
  181. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  182. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/excel-chart.png +0 -0
  183. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/excel-data.png +0 -0
  184. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  185. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/needs-clone.png +0 -0
  186. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/new-stage.png +0 -0
  187. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  188. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  189. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/status-more-rows.png +0 -0
  190. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  191. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/untracked-data.png +0 -0
  192. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/updated-publication.png +0 -0
  193. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  194. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/office/workflow-page.png +0 -0
  195. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/clone.png +0 -0
  196. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/create-project.png +0 -0
  197. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  198. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  199. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  200. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/new-token.png +0 -0
  201. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/reclone.png +0 -0
  202. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  203. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/quick-actions.png +0 -0
  204. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/img/run-proc.png +0 -0
  205. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/index.md +0 -0
  206. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/latex-codespaces.md +0 -0
  207. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/matlab.md +0 -0
  208. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/notebook-pipeline.md +0 -0
  209. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/office.md +0 -0
  210. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/openfoam.md +0 -0
  211. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/tutorials/procedures.md +0 -0
  212. {calkit_python-0.33.0 → calkit_python-0.33.1}/docs/version-control.md +0 -0
  213. {calkit_python-0.33.0 → calkit_python-0.33.1}/install.json +0 -0
  214. {calkit_python-0.33.0 → calkit_python-0.33.1}/jest.config.js +0 -0
  215. {calkit_python-0.33.0 → calkit_python-0.33.1}/jupyter-config/server-config/calkit.json +0 -0
  216. {calkit_python-0.33.0 → calkit_python-0.33.1}/mkdocs.yml +0 -0
  217. {calkit_python-0.33.0 → calkit_python-0.33.1}/package.json +0 -0
  218. {calkit_python-0.33.0 → calkit_python-0.33.1}/pyproject.toml +0 -0
  219. {calkit_python-0.33.0 → calkit_python-0.33.1}/schema/plugin.json +0 -0
  220. {calkit_python-0.33.0 → calkit_python-0.33.1}/scripts/install.ps1 +0 -0
  221. {calkit_python-0.33.0 → calkit_python-0.33.1}/scripts/install.sh +0 -0
  222. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/__tests__/useQueries.spec.ts +0 -0
  223. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/calkit-config.ts +0 -0
  224. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/cell-output-marker.ts +0 -0
  225. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/commit-dialog.tsx +0 -0
  226. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/notebook-registration.tsx +0 -0
  227. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/pipeline-status-bar.tsx +0 -0
  228. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/project-info-editor.tsx +0 -0
  229. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/sidebar-settings.tsx +0 -0
  230. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/components/stage-editor.tsx +0 -0
  231. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/feature-flags.ts +0 -0
  232. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/file-browser-menu.ts +0 -0
  233. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/hooks/__tests__/useQueries.test.tsx +0 -0
  234. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/hooks/useQueries.ts +0 -0
  235. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/icons.ts +0 -0
  236. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/index.ts +0 -0
  237. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/io-tracker.ts +0 -0
  238. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/pipeline-state.ts +0 -0
  239. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/queryClient.ts +0 -0
  240. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/request.ts +0 -0
  241. {calkit_python-0.33.0 → calkit_python-0.33.1}/src/shims-mainmenu.d.ts +0 -0
  242. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/base.css +0 -0
  243. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/cell-output-marker.css +0 -0
  244. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/environment-editor.css +0 -0
  245. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/environment-selector.css +0 -0
  246. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/img/calkit-no-bg.png +0 -0
  247. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/index.css +0 -0
  248. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/index.js +0 -0
  249. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/notebook-toolbar.css +0 -0
  250. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/pipeline-status-bar.css +0 -0
  251. {calkit_python-0.33.0 → calkit_python-0.33.1}/style/sidebar.css +0 -0
  252. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  253. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/nb-julia.ipynb +0 -0
  254. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/nb-params.ipynb +0 -0
  255. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/nb-subdir.ipynb +0 -0
  256. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/pipeline.ipynb +0 -0
  257. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/script.py +0 -0
  258. {calkit_python-0.33.0 → calkit_python-0.33.1}/test/test-log.log +0 -0
  259. {calkit_python-0.33.0 → calkit_python-0.33.1}/tsconfig.json +0 -0
  260. {calkit_python-0.33.0 → calkit_python-0.33.1}/tsconfig.test.json +0 -0
  261. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/.gitignore +0 -0
  262. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/README.md +0 -0
  263. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/jupyter_server_test_config.py +0 -0
  264. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/package.json +0 -0
  265. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/playwright.config.js +0 -0
  266. {calkit_python-0.33.0 → calkit_python-0.33.1}/ui-tests/yarn.lock +0 -0
  267. {calkit_python-0.33.0 → calkit_python-0.33.1}/uv.lock +0 -0
  268. {calkit_python-0.33.0 → calkit_python-0.33.1}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.33.0
3
+ Version: 0.33.1
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -1,4 +1,4 @@
1
- __version__ = "0.33.0"
1
+ __version__ = "0.33.1"
2
2
 
3
3
  from .core import * # noqa: F403, I001
4
4
  from . import git # noqa: F401
@@ -315,38 +315,18 @@ class NotebookEnvironmentRouteHandler(APIHandler):
315
315
  """Set the environment for a notebook."""
316
316
  body = self.get_json_body()
317
317
  if not body:
318
- self.set_status(400)
319
- self.finish(
320
- json.dumps({"error": "Request body must be valid JSON"})
321
- )
322
- return
318
+ return self.error(400, "Request body must be valid JSON")
323
319
  notebook_path = body.get("path")
324
320
  environment_name = body.get("environment")
325
321
  if not notebook_path or not environment_name:
326
- self.set_status(400)
327
- self.finish(
328
- json.dumps(
329
- {
330
- "error": (
331
- "Request body must include 'path' and"
332
- " 'environment'"
333
- )
334
- }
335
- )
322
+ return self.error(
323
+ 400, "Both 'path' and 'environment' are required"
336
324
  )
337
- return
338
325
  ck_info = calkit.load_calkit_info()
339
326
  envs = ck_info.get("environments", {})
340
327
  if environment_name not in envs:
341
- self.set_status(400)
342
- self.finish(
343
- json.dumps(
344
- {
345
- "error": (
346
- f"Environment '{environment_name}' does not exist"
347
- )
348
- }
349
- )
328
+ return self.error(
329
+ 400, f"Environment '{environment_name}' does not exist"
350
330
  )
351
331
  # First see if this notebook is part of a pipeline stage
352
332
  stages = ck_info.get("pipeline", {}).get("stages", {})
@@ -1150,6 +1130,7 @@ class EnvironmentsRouteHandler(APIHandler):
1150
1130
  env_path = body.get("path")
1151
1131
  packages = body.get("packages", [])
1152
1132
  prefix = body.get("prefix")
1133
+ python = body.get("python")
1153
1134
  if env_kind not in ["uv-venv", "venv"]:
1154
1135
  return self.error(400, "Unsupported environment kind")
1155
1136
  if not env_name or not env_kind or not env_path or not packages:
@@ -1161,6 +1142,9 @@ class EnvironmentsRouteHandler(APIHandler):
1161
1142
  # uv-venv, venv, and conda envs can have a prefix defined
1162
1143
  if env_kind in ["uv-venv", "venv", "conda"] and prefix:
1163
1144
  kwargs["prefix"] = prefix
1145
+ # Only uv-venv can have a python version defined here
1146
+ if env_kind == "uv-venv" and python:
1147
+ kwargs["python_version"] = python
1164
1148
  # Use the Calkit CLI to create the environment
1165
1149
  func_to_kind = {
1166
1150
  "uv-venv": new_uv_venv,
@@ -1266,12 +1250,8 @@ class EnvironmentsRouteHandler(APIHandler):
1266
1250
  # Now check the environment
1267
1251
  try:
1268
1252
  calkit.cli.main.check_environment(env_name=updated_name)
1269
- except Exception as e:
1270
- self.set_status(500)
1271
- self.finish(
1272
- json.dumps({"error": f"Environment check failed: {e}"})
1273
- )
1274
- return
1253
+ except Exception:
1254
+ return self.error(400, "Environment check failed.")
1275
1255
  self.log.info(f"Updated environment '{updated_name}' successfully")
1276
1256
  self.finish(json.dumps({"message": "Environment updated"}))
1277
1257
 
@@ -131,7 +131,7 @@
131
131
  "outputDir": "calkit/labextension",
132
132
  "schemaDir": "schema",
133
133
  "_build": {
134
- "load": "static/remoteEntry.bcc6d3dcc8fe2adee14c.js",
134
+ "load": "static/remoteEntry.bc3529435b6f02f41e8d.js",
135
135
  "extension": "./extension",
136
136
  "style": "./style"
137
137
  }
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkcalkit=self.webpackChunkcalkit||[]).push([[909],{4503(e,t,a){a.d(t,{showNotebookRegistration:()=>c});var n=a(3345),i=a.n(n),l=a(14);const o=({mode:e,existingNotebooks:t=[],availableEnvironments:a=[],onCreateEnvironment:l})=>{const[o,s]=(0,n.useState)(""),[c,r]=(0,n.useState)(""),[d,m]=(0,n.useState)(""),[u,p]=(0,n.useState)(""),[v,g]=(0,n.useState)(""),[k,h]=(0,n.useState)(!0),[b,y]=(0,n.useState)([]),[f,E]=(0,n.useState)([]),[N,C]=(0,n.useState)(""),[w,S]=(0,n.useState)(""),x=()=>{N.trim()&&(y([...b,N.trim()]),C(""))},_=()=>{w.trim()&&(E([...f,w.trim()]),S(""))};return i().createElement("div",{className:"calkit-notebook-registration"},"create"===e?i().createElement(i().Fragment,null,i().createElement("p",{className:"calkit-dialog-description"},"Create a new Jupyter notebook and register it with Calkit."),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",{htmlFor:"notebook-path"},"Notebook path:"),i().createElement("input",{id:"notebook-path",type:"text",placeholder:"e.g., analysis.ipynb",value:o,onChange:e=>s(e.target.value),className:"calkit-dialog-input",autoComplete:"off"})),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",{htmlFor:"notebook-title"},"Title (optional):"),i().createElement("input",{id:"notebook-title",type:"text",placeholder:"Descriptive title",value:d,onChange:e=>m(e.target.value),className:"calkit-dialog-input",autoComplete:"off"})),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",{htmlFor:"notebook-description"},"Description (optional):"),i().createElement("textarea",{id:"notebook-description",placeholder:"Brief description of what this notebook does",value:u,onChange:e=>p(e.target.value),className:"calkit-dialog-textarea",rows:3,autoComplete:"off"})),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",{htmlFor:"notebook-environment"},"Environment (optional):"),i().createElement("select",{id:"notebook-environment",value:v,onChange:async e=>{const t=e.target.value;if("__create_new__"===t&&l){const e=await l();e&&g(e)}else g(t)},className:"calkit-dialog-select"},i().createElement("option",{value:""},"None"),a.map(e=>i().createElement("option",{key:e.id,value:e.id},e.label)),i().createElement("option",{value:"__create_new__"},"+ Create New Environment"))),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",{className:"calkit-checkbox-label"},i().createElement("input",{id:"notebook-in-pipeline",type:"checkbox",checked:k,onChange:e=>h(e.target.checked),className:"calkit-dialog-checkbox"}),"Include in pipeline")),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",null,"Input paths (optional):"),i().createElement("div",{className:"calkit-path-list"},b.map((e,t)=>i().createElement("div",{key:t,className:"calkit-path-item"},i().createElement("span",{className:"calkit-path-text"},e),i().createElement("button",{className:"calkit-path-remove",onClick:()=>{return e=t,void y(b.filter((t,a)=>a!==e));var e},type:"button"},"×")))),i().createElement("div",{className:"calkit-path-add"},i().createElement("input",{id:"notebook-new-input",type:"text",placeholder:"Add input path...",value:N,onChange:e=>C(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),x())},className:"calkit-dialog-input",autoComplete:"off"}),i().createElement("button",{onClick:x,disabled:!N.trim(),className:"calkit-path-add-button",type:"button"},"+"))),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",null,"Output paths (optional):"),i().createElement("div",{className:"calkit-path-list"},f.map((e,t)=>i().createElement("div",{key:t,className:"calkit-path-item"},i().createElement("span",{className:"calkit-path-text"},e),i().createElement("button",{className:"calkit-path-remove",onClick:()=>{return e=t,void E(f.filter((t,a)=>a!==e));var e},type:"button"},"×")))),i().createElement("div",{className:"calkit-path-add"},i().createElement("input",{id:"notebook-new-output",type:"text",placeholder:"Add output path...",value:w,onChange:e=>S(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),_())},className:"calkit-dialog-input",autoComplete:"off"}),i().createElement("button",{onClick:_,disabled:!w.trim(),className:"calkit-path-add-button",type:"button"},"+")))):i().createElement(i().Fragment,null,i().createElement("p",{className:"calkit-dialog-description"},"Register an existing notebook with Calkit."),i().createElement("div",{className:"calkit-dialog-field"},i().createElement("label",{htmlFor:"notebook-select"},"Select notebook:"),i().createElement("select",{id:"notebook-select",value:c,onChange:e=>r(e.target.value),className:"calkit-dialog-select"},i().createElement("option",{value:""},"Choose a notebook..."),t.map(e=>i().createElement("option",{key:e,value:e},e))))))};class s extends l.ReactWidget{constructor(e,t=[],a=[],n){super(),this.mode=e,this.existingNotebooks=t,this.availableEnvironments=a,this.onCreateEnvironment=n}render(){return i().createElement(o,{mode:this.mode,existingNotebooks:this.existingNotebooks,availableEnvironments:this.availableEnvironments,onCreateEnvironment:this.onCreateEnvironment})}getValue(){if("create"===this.mode){const e=this.node.querySelector("#notebook-path"),t=this.node.querySelector("#notebook-title"),a=this.node.querySelector("#notebook-description"),n=this.node.querySelector("#notebook-environment"),i=this.node.querySelector("#notebook-in-pipeline"),l=(null==e?void 0:e.value)||"";if(!l.trim())return null;const o=[];this.node.querySelectorAll(".calkit-path-item").forEach((e,t)=>{var a,n;const i=e.closest(".calkit-dialog-field");if(((null===(a=null==i?void 0:i.querySelector("label"))||void 0===a?void 0:a.textContent)||"").includes("Input")){const t=null===(n=e.querySelector(".calkit-path-text"))||void 0===n?void 0:n.textContent;t&&o.push(t)}});const s=[];return this.node.querySelectorAll(".calkit-path-item").forEach((e,t)=>{var a,n;const i=e.closest(".calkit-dialog-field");if(((null===(a=null==i?void 0:i.querySelector("label"))||void 0===a?void 0:a.textContent)||"").includes("Output")){const t=null===(n=e.querySelector(".calkit-path-text"))||void 0===n?void 0:n.textContent;t&&s.push(t)}}),{path:l.trim(),title:(null==t?void 0:t.value.trim())||void 0,description:(null==a?void 0:a.value.trim())||void 0,environment:(null==n?void 0:n.value)||void 0,inPipeline:(null==i?void 0:i.checked)||!1,inputs:o.length>0?o:void 0,outputs:s.length>0?s:void 0}}{const e=this.node.querySelector("#notebook-select"),t=(null==e?void 0:e.value)||"";return t.trim()?{path:t.trim()}:null}}}async function c(e,t=[],a=[],n){const i=new s(e,t,a,n),o="create"===e?"Create New Notebook":"Register Existing Notebook",c=new l.Dialog({title:o,body:i,buttons:[l.Dialog.cancelButton(),l.Dialog.okButton({label:"create"===e?"Create":"Register"})]});return(await c.launch()).button.accept?i.getValue():null}},5015(e,t,a){a.d(t,{A:()=>s});var n=a(1601),i=a.n(n),l=a(6314),o=a.n(l)()(i());o.push([e.id,"/* Pipeline Status Bar Styles */\n\n.calkit-pipeline-status {\n display: flex;\n align-items: center;\n margin-right: 8px;\n}\n\n.calkit-status-bar-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n white-space: nowrap;\n cursor: pointer;\n padding: 2px 8px;\n border-radius: 3px;\n transition: background-color 0.2s ease;\n}\n\n.calkit-status-bar-item:hover {\n background-color: rgba(0, 0, 0, 0.08);\n}\n\n.jp-DarkMode .calkit-status-bar-item:hover {\n background-color: rgba(255, 255, 255, 0.08);\n}\n\n.calkit-status-indicator {\n font-size: 8px;\n display: inline-block;\n}\n\n.calkit-status-indicator.uptodate {\n color: #4caf50;\n animation: none;\n}\n\n.calkit-status-indicator.stale {\n color: #ff9800;\n animation: calkit-pulse 1s infinite;\n}\n\n.calkit-status-indicator.error {\n color: #f44336;\n animation: calkit-pulse 0.6s infinite;\n}\n\n.calkit-status-indicator.running {\n color: #2196f3;\n animation: calkit-spin 1.5s linear infinite;\n display: inline-block;\n}\n\n.calkit-status-label {\n color: var(--jp-ui-font-color1);\n user-select: none;\n cursor: default;\n}\n\n@keyframes calkit-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n@keyframes calkit-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Dark mode adjustments */\n.jp-DarkMode .calkit-status-label {\n color: rgba(255, 255, 255, 0.87);\n}\n\n/* Light mode adjustments */\n.jp-LightMode .calkit-status-label {\n color: rgba(0, 0, 0, 0.87);\n}\n",""]);const s=o},5909(e,t,a){a.r(t),a.d(t,{default:()=>Fe});var n=a(489),i=a(14),l=a(5014),o=a(1247),s=a(3083),c=a(428),r=a(8490),d=a(5614),m=a(2570),u=a(8581),p=a(3205),v=a(6167),g=a(2840);const k=new g.LabIcon({name:"calkit:sidebar",svgstr:'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 -1123.6 1263.7 1145.6" aria-hidden="true">\n <defs>\n <path id="MJX-11-NCM-I-1D436" d="M148 218C148 346 204 476 267 548C318 607 406 666 505 666C609 666 660 587 660 479C660 470 657 438 657 429C657 420 663 415 676 415C681 415 685 416 688 417C693 424 696 431 698 438L760 691C760 700 755 705 745 705C741 705 735 701 727 692L662 619C623 676 568 705 497 705C442 705 388 692 333 667C222 615 141 533 89 421C63 366 50 310 50 253C50 173 75 108 126 56C177 4 242-22 322-22C401-22 473 7 538 64C565 87 588 115 607 146C634 191 648 222 648 241C648 250 643 255 632 255C623 255 618 251 616 242C595 177 562 125 517 88C460 41 400 17 338 17C218 17 148 98 148 218Z" />\n <path id="MJX-11-NCM-I-1D458" d="M409 353C409 327 423 314 450 314C485 314 508 345 508 379C508 418 476 445 437 445C392 445 344 415 291 356C250 311 217 282 190 269L291 679C289 688 287 694 274 694C242 694 166 685 154 684C139 682 132 675 132 660C132 650 141 645 159 645C178 645 204 646 204 632L59 43C56 32 55 25 55 21C55 0 66-11 87-11C104-11 117-3 124 12C129 21 147 92 179 226C231 221 286 196 286 146C286 131 279 101 279 91C279 34 316-11 373-11C431-11 470 41 490 145C490 154 485 159 475 159C466 159 460 152 457 138C435 59 408 19 375 19C357 19 348 33 348 61C348 77 360 131 360 147C360 204 314 239 221 253C244 269 270 292 298 322C326 352 346 371 359 382C386 404 412 415 435 415C445 415 453 413 459 409C432 404 409 379 409 353Z" />\n <path id="MJX-11-NCM-N-2D9" d="M192 604C192 633 168 657 139 657C110 657 85 633 85 604C85 575 109 551 138 551C167 551 192 575 192 604Z" />\n </defs>\n <g fill="currentColor" stroke="none" stroke-width="0" transform="scale(1,-1)">\n <g data-mml-node="math">\n <g data-mml-node="msup" transform="translate(0,0)">\n <use xlink:href="#MJX-11-NCM-I-1D436" />\n <g transform="translate(845.3,413) scale(0.707)">\n <g transform="translate(0,0)">\n <use xlink:href="#MJX-11-NCM-I-1D458" />\n <g transform="translate(249.5,248) translate(-139 0)">\n <use xlink:href="#MJX-11-NCM-N-2D9" />\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n</svg>'}),h=new g.LabIcon({name:"calkit:info-letter",svgstr:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14" fill="currentColor">\n <circle cx="12" cy="7" r="1.5" />\n <rect x="11" y="11" width="2" height="8" />\n</svg>'}),b="calkit_output_type";function y(e,t){const a=E(e);t.node.classList.remove("calkit-output-marked"),"none"!==a&&t.node.classList.add("calkit-output-marked")}function f(e){const t=E(e);["figure","dataset","result","table"].forEach(t=>{e.node.classList.remove(`calkit-output-${t}`)}),"none"!==t&&e.node.classList.add(`calkit-output-${t}`)}function E(e){return e.model.getMetadata(b)||"none"}var N=a(3345),C=a.n(N);const w=({defaultMessage:e,files:t,onUpdate:a})=>{const[n,i]=(0,N.useState)(e),[l,o]=(0,N.useState)(t),[s,c]=(0,N.useState)(!1);C().useEffect(()=>{a({message:n,files:l,pushAfter:s})},[n,l,s,a]);const r=(e,t,a)=>{o(a=>a.map(a=>a.path!==e?a:"git"===t?{...a,stage:!0,store_in_dvc:!1,ignore_forever:!1}:"dvc"===t?{...a,stage:!0,store_in_dvc:!0,ignore_forever:!1}:"ignore_forever"===t?{...a,stage:!1,store_in_dvc:!1,ignore_forever:!0}:{...a,stage:!1,store_in_dvc:!1,ignore_forever:!1}))},d=l.filter(e=>e.stage).length;return C().createElement("div",{className:"calkit-project-info-editor"},C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",{htmlFor:"commit-message"},"Commit message"),C().createElement("textarea",{id:"commit-message",value:n,onChange:e=>i(e.target.value),placeholder:"Describe your changes",autoComplete:"off"})),C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",null,"Files to include (",d," selected)"),C().createElement("div",{className:"calkit-commit-file-list"},C().createElement("div",{className:"calkit-commit-file-header"},C().createElement("span",{className:"calkit-commit-col-path"},"File"),C().createElement("span",{className:"calkit-commit-col-choice",title:"Save with Git"},"Git"),C().createElement("span",{className:"calkit-commit-col-choice",title:"Store in DVC"},"DVC"),C().createElement("span",{className:"calkit-commit-col-choice",title:"Skip this time"},"Ignore"),C().createElement("span",{className:"calkit-commit-col-choice",title:"Add to .gitignore"},"Ignore forever")),0===l.length?C().createElement("div",{className:"calkit-commit-file-empty"},"No files selected"):l.map(e=>C().createElement("div",{key:e.path,className:"calkit-commit-file-row"},C().createElement("span",{className:"calkit-commit-file-path",title:e.path},e.path),C().createElement("label",{className:"calkit-commit-file-choice"},C().createElement("input",{type:"radio",name:`choice-${e.path}`,checked:e.stage&&!e.store_in_dvc,onChange:()=>r(e.path,"git",e.tracked)})),C().createElement("label",{className:"calkit-commit-file-choice"},C().createElement("input",{type:"radio",name:`choice-${e.path}`,disabled:!!e.tracked,checked:e.stage&&!!e.store_in_dvc,onChange:()=>r(e.path,"dvc",e.tracked)})),C().createElement("label",{className:"calkit-commit-file-choice"},C().createElement("input",{type:"radio",name:`choice-${e.path}`,checked:!e.stage&&!e.ignore_forever,onChange:()=>r(e.path,"ignore",e.tracked)})),C().createElement("label",{className:"calkit-commit-file-choice"},C().createElement("input",{type:"radio",name:`choice-${e.path}`,checked:!!e.ignore_forever,onChange:()=>r(e.path,"ignore_forever",e.tracked)})))))),C().createElement("div",{className:"calkit-dialog-field calkit-commit-push-toggle"},C().createElement("label",{className:"calkit-checkbox-label"},C().createElement("input",{type:"checkbox",className:"calkit-dialog-checkbox",checked:s,onChange:e=>c(e.target.checked)}),"Push after commit")))};class S extends i.ReactWidget{constructor(e){super(),this.props=e,this.data={message:"",files:[]},this.addClass("calkit-commit-dialog")}render(){return C().createElement(w,{defaultMessage:this.props.defaultMessage,files:this.props.files,onUpdate:e=>this.data=e})}getData(){return this.data}}async function x(e,t){const a=new S({defaultMessage:e,files:t,onUpdate:()=>{}});if((await new i.Dialog({title:"Save changes",body:a,buttons:[i.Dialog.cancelButton(),i.Dialog.okButton({label:"Commit"})]}).launch()).button.accept){const e=a.getData();return 0===e.files.filter(e=>e.stage).length?null:e}return null}var _=a(7628),P=a.n(_),j=a(3712),O=a(6469),F=a(2830);async function I(e="",t={}){const a=F.ServerConnection.makeSettings(),n=O.URLExt.join(a.baseUrl,"calkit",e);let i;try{i=await F.ServerConnection.makeRequest(n,t,a)}catch(e){throw new F.ServerConnection.NetworkError(e)}let l=await i.text();if(l.length>0)try{l=JSON.parse(l)}catch(e){console.log("Not a JSON response body.",i),console.log("Requested URL:",n),console.log("Response text:",l.substring(0,500))}if(!i.ok){let e;throw e="string"==typeof l?l:l&&"object"==typeof l?l.message||l.error||l.reason||JSON.stringify(l):"An error occurred",new F.ServerConnection.ResponseError(i,e)}return l}const D=new j.QueryClient({defaultOptions:{queries:{staleTime:3e4,gcTime:3e5,retry:1,refetchOnWindowFocus:!1},mutations:{retry:1}}});var A=a(7445),T=a(6897);const q=()=>(0,j.useQuery)({queryKey:["pipeline","status"],queryFn:()=>I("pipeline/status"),staleTime:1e4,refetchInterval:3e3}),M=()=>(0,j.useQuery)({queryKey:["environments"],queryFn:()=>I("environments")}),R=()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("environments",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["project"]}),e.invalidateQueries({queryKey:["environments"]})}})},$=()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("notebook/stage",{method:"PUT",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["project"]}),e.invalidateQueries({queryKey:["notebooks"]})}})};function J(e){if(!e)return"Unknown error occurred. Check the JupyterLab server logs for details.";if("string"==typeof e)return e;if(e instanceof Error&&e.message&&"[object Object]"!==e.message)return e.message;if("object"==typeof e){const t=e;if(t.message&&"object"==typeof t.message){if(t.message.error&&"string"==typeof t.message.error)return t.message.error;if(t.message.message&&"string"==typeof t.message.message)return t.message.message;try{const e=JSON.stringify(t.message,null,2);if(e&&"{}"!==e&&"null"!==e)return e}catch(e){}}if(t.traceback){if("string"==typeof t.traceback&&t.traceback.trim())return t.traceback;if("object"==typeof t.traceback){if(t.traceback.error&&"string"==typeof t.traceback.error)return t.traceback.error;if(t.traceback.message&&"string"==typeof t.traceback.message)return t.traceback.message}}if(t.response&&"object"==typeof t.response){const e=t.response;if(e.message&&"string"==typeof e.message)return e.message;if(e.error&&"string"==typeof e.error)return e.error}const a=[t.error,t.reason];for(const e of a){if(e&&"string"==typeof e&&"[object Object]"!==e)return e;if(e&&"object"==typeof e){if(e.message&&"string"==typeof e.message)return e.message;if(e.error&&"string"==typeof e.error)return e.error}}try{const t=JSON.stringify(e,null,2);if(t&&"{}"!==t&&"null"!==t)return t}catch(e){}}return"An error occurred. Check the JupyterLab server logs for details."}const L=({label:e,labelNode:t,isConfigured:a=!0,isOpen:n,onToggle:i,onClose:l,buttonClassName:o,children:s})=>{const c=(0,N.useRef)(null),r=(0,N.useRef)(null),d=(0,N.useRef)(null),[m,u]=(0,N.useState)(null);(0,N.useEffect)(()=>{if(!n||!r.current)return;const e=()=>{if(!r.current)return;const e=r.current.getBoundingClientRect();u({top:e.bottom+4,left:e.right})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[n]),(0,N.useEffect)(()=>{if(!n)return;const e=e=>{const t=e.target;c.current&&!c.current.contains(t)&&d.current&&!d.current.contains(t)&&l()};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[n,l]);const p=["calkit-badge",a?"":"calkit-badge-unconfigured",o||""].filter(Boolean).join(" ");return C().createElement("div",{className:"calkit-badge-container",ref:c},C().createElement("button",{ref:r,className:p,onClick:i,title:a?e:`${e} (not configured)`},t||e),n&&m&&P().createPortal(C().createElement("div",{ref:d,className:"calkit-badge-dropdown",style:{position:"fixed",top:`${m.top}px`,left:`${m.left}px`,transform:"translateX(-100%)"}},s),document.body))},K=({panel:e})=>{const[t,a]=(0,N.useState)(!1),[n,l]=(0,N.useState)(""),{data:o={},isLoading:s}=M(),c=R(),r=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("environments",{method:"PUT",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["project"]}),e.invalidateQueries({queryKey:["environments"]})}})})(),d=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("notebook/environment",{method:"PUT",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["project"]}),e.invalidateQueries({queryKey:["notebooks"]})}})})(),[m,u]=(0,N.useState)(!1),p=async t=>{if(!t)return;const a=e.context.path;u(!0);try{const n=await I("notebook/kernel",{method:"POST",body:JSON.stringify({path:a,environment:t})}),i=n.kernel_name||n.name||t;await e.sessionContext.changeKernel({name:i})}catch(e){console.error("Failed to switch kernel:",e),await(0,i.showErrorMessage)("Failed to switch kernel for environment","Please check that its specification is valid.")}finally{u(!1)}};(0,N.useEffect)(()=>{(async()=>{var t;const a=e.context.path;try{const e=await I(`notebooks?path=${encodeURIComponent(a)}`);(null===(t=e.environment)||void 0===t?void 0:t.name)?(l(e.environment.name),await p(e.environment.name)):l("")}catch(e){console.warn("Failed to fetch notebook environment:",e),l("")}})()},[e]);const v=async()=>{const t=(e.context.path.split("/").pop()||"").replace(/\.ipynb$/,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");await(0,A.showEnvironmentEditor)({mode:"create",initialName:t,onSubmit:async({name:t,kind:a,path:n,packages:i,prefix:o,python:s})=>{await c.mutateAsync({name:t,kind:a,path:n,packages:i,prefix:o,python:s}),await d.mutateAsync({path:e.context.path,environment:t}),await p(t),l(t)}})},g=Object.keys(o),k=n?o[n]:null,h=(null==k?void 0:k.python)||(null==k?void 0:k.python_version)||"Unknown",b=Array.isArray(null==k?void 0:k.packages)?k.packages:[],y=`calkit-env-select-${e.id||"default"}`,f=n&&g.includes(n),E=""!==n,w=m?"Setting kernel...":E?`Environment: ${n}`:"No environment selected";return C().createElement(L,{label:w,isConfigured:E,isOpen:t,onToggle:()=>a(!t),onClose:()=>a(!1),buttonClassName:m?"calkit-badge-loading":""},s?C().createElement("div",{className:"calkit-dropdown-content"},"Loading..."):C().createElement("div",{className:"calkit-dropdown-content"},C().createElement("div",{className:"calkit-dropdown-section"},C().createElement("h4",null,"Select environment"),0===g.length?C().createElement("div",null,C().createElement("p",null,"No environments available"),C().createElement("button",{className:"calkit-dropdown-button",onClick:v,disabled:m},"Create new environment")):C().createElement("div",{className:"calkit-form-group"},C().createElement("select",{id:y,value:n,onChange:t=>{const n=t.target.value;n&&!m&&("__create__"!==n?(async t=>{const n=e.context.path;a(!1),console.log(`Setting environment for ${n} to ${t}`);try{console.log("Calling PUT notebook/environment");const e=await I("notebook/environment",{method:"PUT",body:JSON.stringify({path:n,environment:t})});console.log("Environment set response:",e),l(t),await p(t),D.invalidateQueries({queryKey:["project"]}),D.invalidateQueries({queryKey:["notebooks"]})}catch(e){await(0,i.showErrorMessage)("Failed to set notebook environment","Please check that its specification is valid.")}})(n):v())},disabled:m||0===g.length},C().createElement("option",{value:""},"Select an environment"),C().createElement("option",{value:"__create__"},"Create new environment..."),n&&!f&&C().createElement("option",{value:n},n," (not listed)"),g.map(e=>C().createElement("option",{key:e,value:e},e)))),k?C().createElement("div",{className:"calkit-env-details"},C().createElement("p",null,C().createElement("strong",null,"Python:")," ",h),C().createElement("div",{className:"calkit-env-packages"},C().createElement("div",{className:"calkit-env-packages-header"},C().createElement("strong",null,"Packages:")),0===b.length?C().createElement("p",{className:"calkit-env-packages-empty"},"No packages"):C().createElement("ul",{className:"calkit-env-packages-list"},b.map((e,t)=>C().createElement("li",{key:t,className:"calkit-env-package-item"},e))))):g.length>0&&C().createElement("p",{className:"calkit-note"},n&&!f?"Current notebook environment is not listed.":"Select an environment to view details.")),C().createElement("div",{className:"calkit-dropdown-divider"}),C().createElement("div",{className:"calkit-dropdown-actions"},C().createElement("button",{className:"calkit-dropdown-button",onClick:async()=>{if(!n)return;const e=o[n]||{};await(0,A.showEnvironmentEditor)({mode:"edit",initialName:n,initialKind:e.kind||"uv-venv",initialPath:e.path,initialPrefix:e.prefix,initialPython:e.python||"3.14",initialPackages:e.packages||[],existingEnvironment:{name:n,kind:e.kind||"uv-venv",path:e.path,prefix:e.prefix,python:e.python||"3.14",packages:e.packages||[]},onSubmit:async({name:t,kind:i,path:o,prefix:s,packages:c,python:d},m)=>{await r.mutateAsync({existing:m||{name:n,kind:e.kind||"uv-venv",path:e.path,prefix:e.prefix,python:e.python||"3.14",packages:e.packages||[]},updated:{name:t,kind:i,path:o,prefix:s,packages:c,python:d}}),l(t),a(!1)}})},disabled:!n||!f},"Edit current environment"))))},Q=({panel:e})=>{const[t,a]=(0,N.useState)(!1),[n,l]=(0,N.useState)(""),[o,s]=(0,N.useState)(!0),[r,d]=(0,N.useState)(""),[m,u]=(0,N.useState)(""),[p,v]=(0,N.useState)(!1),[g,k]=(0,N.useState)(!1),[h,b]=(0,N.useState)("git"),[y,f]=(0,N.useState)("git"),{data:E}=q(),w=$();(0,N.useEffect)(()=>{(async()=>{var t,a,n,i,o;try{const c=e.context.path,r=await I(`notebooks?path=${encodeURIComponent(c)}`),m=(null===(t=r.stage)||void 0===t?void 0:t.name)||"",p=(null===(a=r.environment)||void 0===a?void 0:a.name)||"",g=(null===(n=r.stage)||void 0===n?void 0:n.is_stale)||!1;if(l(m),v(g),b((null===(i=r.stage)||void 0===i?void 0:i.executed_ipynb_storage)||"git"),f((null===(o=r.stage)||void 0===o?void 0:o.html_storage)||"git"),m)d(m);else{const e=(c.split("/").pop()||"").replace(/\.ipynb$/,"");d(`${e}-notebook`)}u(p),s(!1)}catch(e){console.error("Failed to fetch pipeline stages:",e),s(!1)}})()},[e,e.context.path]),(0,N.useEffect)(()=>{var e,t;if(!E||!n)return;const a=E.stale_stages;if(a&&"object"==typeof a)return void v(Boolean(a[n]));const i=null===(t=null===(e=E.pipeline)||void 0===e?void 0:e.stages)||void 0===t?void 0:t[n];if(i){const e=i.is_stale||i.is_outdated||i.outdated||i.needs_run;v(Boolean(e))}else v(!1)},[E,n]);const S=async()=>{var t,n,o;if(!r.trim())return;const s=r.trim(),c=e.context.path;try{let e=m,r=null;if(e||(r=await I(`notebooks?path=${encodeURIComponent(c)}`),e=(null===(t=r.environment)||void 0===t?void 0:t.name)||""),!e)return void await(0,i.showErrorMessage)("Environment required","Please set an environment for this notebook before setting a stage. If this notebook was renamed, you may need to set the environment again.");r||(r=await I(`notebooks?path=${encodeURIComponent(c)}`));const d=(null===(n=r.stage)||void 0===n?void 0:n.inputs)||[],u=(null===(o=r.stage)||void 0===o?void 0:o.outputs)||[];await w.mutateAsync({path:c,stage_name:s,environment:e,inputs:d,outputs:u,executed_ipynb_storage:"none"===h?null:h,html_storage:"none"===y?null:y}),l(s),a(!1),D.invalidateQueries({queryKey:["pipeline","status"]})}catch(e){const t=e instanceof Error?e.message:String(e);console.error("Failed to set pipeline stage:",e),await(0,i.showErrorMessage)("Failed to set notebook stage",t)}},x=""!==n,_=x?`Stage: ${n}`:"Not in pipeline";return C().createElement("div",{className:"calkit-badge-with-action"},C().createElement(L,{label:_,isConfigured:x,isOpen:t,onToggle:()=>a(!t),onClose:()=>a(!1)},o?C().createElement("div",{className:"calkit-dropdown-content"},"Loading..."):C().createElement("div",{className:"calkit-dropdown-content"},C().createElement("h4",null,"Set notebook stage"),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",null,"Stage name"),C().createElement("input",{type:"text",value:r,onChange:e=>d(e.target.value),placeholder:"ex: postprocess",onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),S())},autoComplete:"off"})),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",{htmlFor:"executed-ipynb-storage"},"Executed ipynb storage"),C().createElement("select",{id:"executed-ipynb-storage",value:h,onChange:e=>b(e.target.value)},C().createElement("option",{value:"git"},"Git"),C().createElement("option",{value:"dvc"},"DVC"),C().createElement("option",{value:"none"},"None"))),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",{htmlFor:"html-storage"},"HTML storage"),C().createElement("select",{id:"html-storage",value:y,onChange:e=>f(e.target.value)},C().createElement("option",{value:"git"},"Git"),C().createElement("option",{value:"dvc"},"DVC"),C().createElement("option",{value:"none"},"None"))),C().createElement("div",{className:"calkit-form-actions"},C().createElement("button",{className:"calkit-primary-button",onClick:S,disabled:w.isPending||!r.trim()},w.isPending?"Saving...":"Save")))),x&&C().createElement("button",{className:`calkit-play-button ${p?"calkit-play-button-stale":""} ${g?"calkit-play-button-executing":""}`,onClick:async()=>{var t;k(!0);try{console.log("Saving notebook...");const a=e.context.save();a&&await a,console.log("Notebook saved successfully");const l=e.context.path;console.log("Creating run session...");const o=await I("notebook/stage/run/session",{method:"POST",body:JSON.stringify({notebook_path:l,stage_name:n})});console.log("Session created. Restarting kernel and running cells...");const s=e.sessionContext;(null===(t=s.session)||void 0===t?void 0:t.kernel)&&(await s.session.kernel.restart(),await(async e=>{e&&"idle"!==e.status&&await new Promise(t=>{const a=(i,l)=>{"idle"===l&&(e.statusChanged.disconnect(a),clearTimeout(n),t())},n=setTimeout(()=>{e.statusChanged.disconnect(a),t()},5e3);e.statusChanged.connect(a)})})(s.session.kernel)),await c.NotebookActions.runAll(e.content,s),console.log("All cells executed. Checking for errors...");const r=e.context.save();r&&await r,console.log("Notebook saved after execution");const d=(()=>{var t,a,n;const i=null===(t=e.content.model)||void 0===t?void 0:t.cells;if(!i)return!1;for(let e=0;e<i.length;e++){const t=(null===(n=null===(a=i.get(e).outputs)||void 0===a?void 0:a.toJSON)||void 0===n?void 0:n.call(a))||[],l=Array.isArray(t)?t:[];for(const e of l)if("error"===(null==e?void 0:e.output_type))return!0}return!1})();if(d)console.log("Cells have errors. Skipping session finalization.");else{console.log("No errors detected. Finalizing session...");try{await I("notebook/stage/run/session",{method:"PUT",body:JSON.stringify({notebook_path:l,stage_name:n,dvc_stage:o.dvc_stage,lock_deps:o.lock_deps,lock_outs:o.lock_outs})}),console.log("Stage run completed and cached successfully!")}catch(e){const t=J(e);t.includes("changed since session")||t.includes("have changed since")?(console.warn("Stage configuration changed during execution:",e),await(0,i.showErrorMessage)("Stage configuration changed","The notebook executed successfully, but the stage inputs or outputs were modified during execution. The results were not cached. Please run the stage again to cache the results with the updated configuration.")):(console.error("Failed to finalize session:",e),await(0,i.showErrorMessage)("Failed to cache stage results","The notebook executed successfully, but caching failed. Check the JupyterLab server logs for details."))}D.invalidateQueries({queryKey:["pipeline","status"]}),D.invalidateQueries({queryKey:["notebooks"]})}}catch(e){const t=J(e);await(0,i.showErrorMessage)("Failed to run stage",t)}finally{k(!1)}},disabled:g,title:g?"Executing notebook...":p?"Stage is stale - run to update":"Run stage"},g?C().createElement("span",{className:"calkit-spinner"}):"▶"))},B=({panel:e})=>{const[t,a]=(0,N.useState)(!1),[n,l]=(0,N.useState)([]),[o,s]=(0,N.useState)(""),c=$();(0,N.useEffect)(()=>{(async()=>{var t;try{const a=e.context.path,n=await I(`notebooks?path=${encodeURIComponent(a)}`);l((null===(t=n.stage)||void 0===t?void 0:t.inputs)||[])}catch(e){console.error("Failed to load inputs:",e)}})()},[e]);const r=()=>{o.trim()&&(l([...n,o.trim()]),s(""))},d=`Inputs (${n.length})`;return C().createElement(L,{label:d,isConfigured:!0,buttonClassName:"calkit-badge-gray",isOpen:t,onToggle:()=>a(!t),onClose:()=>a(!1)},C().createElement("div",{className:"calkit-dropdown-content"},C().createElement("h4",null,"Notebook inputs"),(0,T.G7)("autoDetectInputsOutputs")&&C().createElement("button",{className:"calkit-dropdown-button",onClick:async()=>{try{const t=e.context.path,a=await I("notebook/detect-inputs",{method:"POST",body:JSON.stringify({path:t})});l(a.inputs||[])}catch(e){console.error("Failed to auto-detect inputs:",e),alert("Failed to auto-detect inputs")}}},"🔍 Auto-Detect Inputs"),C().createElement("div",{className:"calkit-io-list"},n.map((e,t)=>C().createElement("div",{key:t,className:"calkit-io-item"},C().createElement("span",null,e),C().createElement("button",{className:"calkit-io-remove",onClick:()=>(e=>{l(n.filter((t,a)=>a!==e))})(t)},"×")))),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",null,"Add new input:"),C().createElement("div",{className:"calkit-input-row"},C().createElement("input",{type:"text",value:o,onChange:e=>s(e.target.value),placeholder:"ex: data/raw.csv",onKeyPress:e=>{"Enter"===e.key&&r()},autoComplete:"off"}),C().createElement("button",{onClick:r},"Add"))),C().createElement("div",{className:"calkit-form-actions"},C().createElement("button",{onClick:async()=>{var t,l,o;try{const i=e.context.path,s=await I(`notebooks?path=${encodeURIComponent(i)}`),r=(null===(t=s.stage)||void 0===t?void 0:t.name)||"",d=(null===(l=s.environment)||void 0===l?void 0:l.name)||"";r&&d&&await c.mutateAsync({path:i,stage_name:r,environment:d,inputs:n,outputs:(null===(o=s.stage)||void 0===o?void 0:o.outputs)||[]}),a(!1)}catch(e){const t=e instanceof Error?e.message:String(e);console.error("Failed to save inputs:",e),await(0,i.showErrorMessage)("Failed to save inputs",t)}}},"Save"),C().createElement("button",{onClick:()=>a(!1)},"Close"))))},U=({panel:e})=>{const[t,a]=(0,N.useState)(!1),[n,l]=(0,N.useState)([]),[o,s]=(0,N.useState)(""),c=$();(0,N.useEffect)(()=>{(async()=>{var t;try{const a=e.context.path,n=((null===(t=(await I(`notebooks?path=${encodeURIComponent(a)}`)).stage)||void 0===t?void 0:t.outputs)||[]).map(e=>"string"==typeof e?{path:e,storage:"dvc"}:e);l(n)}catch(e){console.error("Failed to load outputs:",e)}})()},[e]);const r=()=>{o.trim()&&(l([...n,{path:o.trim(),storage:"dvc"}]),s(""))},d=`Outputs (${n.length})`;return C().createElement(L,{label:d,isConfigured:!0,buttonClassName:"calkit-badge-gray",isOpen:t,onToggle:()=>a(!t),onClose:()=>a(!1)},C().createElement("div",{className:"calkit-dropdown-content"},C().createElement("h4",null,"Notebook outputs"),(0,T.G7)("autoDetectInputsOutputs")&&C().createElement("button",{className:"calkit-dropdown-button",onClick:async()=>{try{const t=e.context.path,a=((await I("notebook/detect-outputs",{method:"POST",body:JSON.stringify({path:t})})).outputs||[]).map(e=>"string"==typeof e?{path:e,storage:"dvc"}:e);l(a)}catch(e){console.error("Failed to auto-detect outputs:",e),alert("Failed to auto-detect outputs")}}},"🔍 Auto-Detect Outputs"),C().createElement("div",{className:"calkit-io-list"},n.map((e,t)=>C().createElement("div",{key:t,className:"calkit-io-item"},C().createElement("div",{className:"calkit-io-item-content"},C().createElement("div",{className:"calkit-io-field"},C().createElement("span",{className:"calkit-io-label"},"Path:"),C().createElement("span",{className:"calkit-io-value"},e.path)),C().createElement("div",{className:"calkit-io-field"},C().createElement("label",{className:"calkit-io-label"},"Storage:"),C().createElement("select",{value:e.storage||"",onChange:e=>((e,t)=>{const a=[...n];a[e].storage=t,l(a)})(t,e.target.value),className:"calkit-io-storage-select"},C().createElement("option",{value:"dvc"},"DVC"),C().createElement("option",{value:"git"},"Git"),C().createElement("option",{value:"none"},"None")))),C().createElement("button",{className:"calkit-io-remove",onClick:()=>(e=>{l(n.filter((t,a)=>a!==e))})(t)},"×")))),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",null,"Add new output:"),C().createElement("div",{className:"calkit-input-row"},C().createElement("input",{type:"text",value:o,onChange:e=>s(e.target.value),placeholder:"ex: figures/plot.png",onKeyPress:e=>{"Enter"===e.key&&r()},autoComplete:"off"}),C().createElement("button",{onClick:r},"Add"))),C().createElement("div",{className:"calkit-form-actions"},C().createElement("button",{onClick:async()=>{var t,l,o;try{const i=e.context.path,s=await I(`notebooks?path=${encodeURIComponent(i)}`),r=(null===(t=s.stage)||void 0===t?void 0:t.name)||"",d=(null===(l=s.environment)||void 0===l?void 0:l.name)||"";if(r&&d){const e=n.map(e=>({...e,storage:"none"===e.storage?null:e.storage}));await c.mutateAsync({path:i,stage_name:r,environment:d,inputs:(null===(o=s.stage)||void 0===o?void 0:o.inputs)||[],outputs:e})}a(!1)}catch(e){const t=e instanceof Error?e.message:String(e);console.error("Failed to save outputs:",e),await(0,i.showErrorMessage)("Failed to save outputs",t)}}},"Save"),C().createElement("button",{onClick:()=>a(!1)},"Close"))))},V=({panel:e})=>{const[t,a]=(0,N.useState)(!1),[n,i]=(0,N.useState)(""),[l,o]=(0,N.useState)("");return(0,N.useEffect)(()=>{(async()=>{var t,a;try{const n=e.context.path,l=await I(`notebooks?path=${encodeURIComponent(n)}`);i((null===(t=l.stage)||void 0===t?void 0:t.title)||""),o((null===(a=l.stage)||void 0===a?void 0:a.description)||"")}catch(e){console.error("Failed to load notebook info:",e)}})()},[e]),(0,T.G7)("notebookInfoButton")?C().createElement(L,{label:"Info",labelNode:C().createElement(h.react,{height:14}),isConfigured:!0,buttonClassName:"calkit-badge-icon",isOpen:t,onToggle:()=>a(!t),onClose:()=>a(!1)},C().createElement("div",{className:"calkit-dropdown-content"},C().createElement("h4",null,"Notebook information"),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",null,"Title:"),C().createElement("input",{type:"text",value:n,onChange:e=>i(e.target.value),placeholder:"Notebook title",autoComplete:"off"})),C().createElement("div",{className:"calkit-form-group"},C().createElement("label",null,"Description:"),C().createElement("textarea",{value:l,onChange:e=>o(e.target.value),placeholder:"Describe what this notebook does...",rows:5,autoComplete:"off"})),C().createElement("div",{className:"calkit-form-actions"},C().createElement("button",{onClick:async()=>{try{const t=e.context.path;await I("notebook/set-info",{method:"POST",body:JSON.stringify({path:t,title:n,description:l})}),a(!1)}catch(e){console.error("Failed to save notebook info:",e),alert("Failed to save notebook info")}}},"Save"),C().createElement("button",{onClick:()=>a(!1)},"Close")))):null},G=({panel:e,translator:t})=>C().createElement("div",{className:"calkit-notebook-toolbar"},C().createElement(K,{panel:e,translator:t}),C().createElement(Q,{panel:e,translator:t}),C().createElement(B,{panel:e,translator:t}),C().createElement(U,{panel:e,translator:t}),C().createElement(V,{panel:e,translator:t}));class z extends i.ReactWidget{constructor(e,t){super(),this.panel=e,this.translator=t,this.addClass("calkit-notebook-toolbar-widget")}render(){return C().createElement(j.QueryClientProvider,{client:D},C().createElement(G,{panel:this.panel,translator:this.translator}))}}var W=a(5338);const X=new class{constructor(){this.state={isRunning:!1,isSessionInProgress:!1},this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}getState(){return{...this.state}}setRunning(e,t){this.state.isRunning===e&&this.state.currentOperation===t||(this.state.isRunning=e,t?this.state.currentOperation=t:!1===e&&(this.state.currentOperation=void 0),this.notifyListeners())}setSessionInProgress(e,t){this.state.isSessionInProgress===e&&this.state.currentOperation===t||(this.state.isSessionInProgress=e,t?this.state.currentOperation=t:!1===e&&(this.state.currentOperation=void 0),this.notifyListeners())}notifyListeners(){this.listeners.forEach(e=>{e(this.getState())})}},Y=({onStatusClick:e})=>{const[t,a]=(0,N.useState)(null),[n,i]=(0,N.useState)(X.getState());if((0,N.useEffect)(()=>{let e=!0;const t=async()=>{try{const t=await I("pipeline/status");e&&a(t)}catch(e){console.warn("Failed to fetch pipeline status:",e)}};t();const n=setInterval(()=>{t()},2e3);return()=>{e=!1,clearInterval(n)}},[]),(0,N.useEffect)(()=>X.subscribe(e=>{i(e)}),[]),n.isRunning)return C().createElement("div",{className:"calkit-status-bar-item",title:n.currentOperation||"Pipeline is running...",onClick:e,role:"button",tabIndex:0},C().createElement("span",{className:"calkit-status-indicator running"},"⟳"),C().createElement("span",{className:"calkit-status-label"},"Pipeline: Running"));if(n.isSessionInProgress)return C().createElement("div",{className:"calkit-status-bar-item",title:n.currentOperation||"Session in progress...",onClick:e,role:"button",tabIndex:0},C().createElement("span",{className:"calkit-status-indicator running"},"⟳"),C().createElement("span",{className:"calkit-status-label"},"Pipeline: Session Active"));if(!t)return C().createElement("div",{className:"calkit-status-bar-item",onClick:e,role:"button",tabIndex:0},C().createElement("span",{className:"calkit-status-label"},"Pipeline: —"));let l="",o="",s="";if(t.error)l="Failed",o="error",s=`Pipeline failed: ${t.error}`;else if(t.is_outdated){l="Stale",o="stale";const e=t.stale_stages?Object.keys(t.stale_stages).length:0;s=e>0?`${e} stage${1===e?"":"s"} out of date`:"Pipeline is out of date"}else l="Up-to-date",o="uptodate",s="Pipeline is up-to-date";return C().createElement("div",{className:"calkit-status-bar-item",title:s,onClick:e,role:"button",tabIndex:0},C().createElement("span",{className:`calkit-status-indicator ${o}`},"●"),C().createElement("span",{className:"calkit-status-label"},"Pipeline: ",l))};class H extends o.Widget{constructor(e){super(),this._onStatusClick=null,this._onStatusClick=e||null,this.addClass("calkit-pipeline-status"),this.node.style.display="flex",this.node.style.alignItems="center",this.node.style.paddingRight="8px",this.node.style.cursor="pointer",(0,W.H)(this.node).render(C().createElement(Y,{onStatusClick:this._onStatusClick||void 0}))}dispose(){super.dispose()}}var Z=a(2406),ee=a(9610),te=a(7284);const ae=({sectionDefs:e,visibleSections:t,setVisibleSections:a,showSettingsDropdown:n,setShowSettingsDropdown:i})=>C().createElement("div",{className:"calkit-sidebar-settings-container"},C().createElement("button",{className:"calkit-sidebar-settings-btn",title:"Show/hide categories",onClick:e=>{e.stopPropagation(),i(!n)}},"⚙️"),n&&C().createElement("div",{className:"calkit-settings-dropdown",onClick:e=>{e.stopPropagation()}},e.filter(e=>!1!==e.toggleable).map(e=>C().createElement("div",{key:e.id,className:"calkit-settings-item",onClick:e=>{e.stopPropagation()}},C().createElement("label",{className:"calkit-settings-checkbox-label",onClick:e=>{e.stopPropagation()}},C().createElement("input",{type:"checkbox",checked:t.has(e.id),onChange:n=>{const i=new Set(t);n.target.checked?i.add(e.id):i.delete(e.id),a(i)}}),e.label)))));var ne=a(7034),ie=a(4503);const le=({name:e,title:t,description:a,git_repo_url:n,owner:i,onUpdate:l})=>{const[o,s]=(0,N.useState)(e),[c,r]=(0,N.useState)(t),[d,m]=(0,N.useState)(a),[u,p]=(0,N.useState)(n),[v,g]=(0,N.useState)(i),[k,h]=(0,N.useState)(!1),[b,y]=(0,N.useState)(!1);return C().useEffect(()=>{if(!b&&c){const e=c.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-|-$/g,"");s(e)}},[c,b]),C().useEffect(()=>{l({name:o,title:c,description:d,git_repo_url:u,owner:v})},[o,c,d,u,v,l]),C().createElement("div",{className:"calkit-project-info-editor"},C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",{htmlFor:"project-title"},"Title:"),C().createElement("input",{id:"project-title",type:"text",value:c,onChange:e=>r(e.target.value),placeholder:"My Awesome Project",autoFocus:!0,autoComplete:"off"})),C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",{htmlFor:"project-description"},"Description:"),C().createElement("textarea",{id:"project-description",value:d,onChange:e=>m(e.target.value),placeholder:"ex: A project about awesome things.",rows:4,autoComplete:"off"})),C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",{htmlFor:"project-name"},"Name:"),C().createElement("input",{id:"project-name",type:"text",value:o,onChange:e=>{s(e.target.value),y(!0)},placeholder:"ex: my-awesome-project",autoComplete:"off"})),C().createElement("div",{className:"calkit-project-info-advanced"},C().createElement("button",{className:"calkit-project-info-advanced-toggle",type:"button",onClick:()=>h(!k)},C().createElement("span",{className:"calkit-project-info-chevron "+(k?"expanded":"")},"▼"),"Advanced"),k&&C().createElement("div",{className:"calkit-project-info-advanced-fields"},C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",{htmlFor:"project-owner"},"Owner:"),C().createElement("input",{id:"project-owner",type:"text",value:v,onChange:e=>g(e.target.value),placeholder:"username or organization",autoComplete:"off"})),C().createElement("div",{className:"calkit-dialog-field"},C().createElement("label",{htmlFor:"project-git-url"},"Git repo URL:"),C().createElement("input",{id:"project-git-url",type:"text",value:u,onChange:e=>p(e.target.value),placeholder:"https://github.com/user/repo",autoComplete:"off"})))))};class oe extends i.ReactWidget{constructor(e){super(),this.data={...e},this.addClass("calkit-project-info-dialog")}render(){return C().createElement(le,{...this.data,onUpdate:e=>{this.data=e}})}getData(){return this.data}}const se=[{value:"jupyter-notebook",label:"Jupyter notebook"},{value:"python-script",label:"Python script"},{value:"r-script",label:"R script"},{value:"matlab-script",label:"MATLAB script"},{value:"matlab-command",label:"MATLAB command"},{value:"shell-command",label:"Shell command"},{value:"shell-script",label:"Shell script"},{value:"docker-command",label:"Docker command"},{value:"latex",label:"LaTeX"},{value:"json-to-latex",label:"JSON to LaTeX"},{value:"word-to-pdf",label:"Word to PDF"},{value:"julia-script",label:"Julia script"},{value:"julia-command",label:"Julia command"},{value:"sbatch",label:"Slurm batch"},{value:"map-paths",label:"Map paths"}],ce={"python-script":[{name:"script_path",label:"Script path",type:"text",placeholder:"scripts/run.py"},{name:"args",label:"Args",type:"list",placeholder:"--flag value"}],"r-script":[{name:"script_path",label:"Script path",type:"text",placeholder:"scripts/run.R"},{name:"args",label:"Args",type:"list",placeholder:"--flag value"}],"matlab-script":[{name:"script_path",label:"Script path",type:"text",placeholder:"scripts/run.m"}],"matlab-command":[{name:"command",label:"MATLAB command",type:"text",placeholder:"disp('hi')"}],"shell-command":[{name:"command",label:"Shell command",type:"text",placeholder:"echo hello"},{name:"shell",label:"Shell",type:"select",options:[{value:"bash",label:"bash"},{value:"sh",label:"sh"},{value:"zsh",label:"zsh"}]}],"shell-script":[{name:"script_path",label:"Script path",type:"text",placeholder:"scripts/run.sh"},{name:"args",label:"Args",type:"list",placeholder:"--flag value"},{name:"shell",label:"Shell",type:"select",options:[{value:"bash",label:"bash"},{value:"sh",label:"sh"},{value:"zsh",label:"zsh"}]}],"docker-command":[{name:"command",label:"Docker command",type:"text",placeholder:"docker run ..."}],latex:[{name:"target_path",label:"Target .tex",type:"text",placeholder:"paper/main.tex"},{name:"latexmkrc_path",label:"latexmkrc path",type:"text",placeholder:"latexmkrc"},{name:"verbose",label:"Verbose",type:"boolean"},{name:"force",label:"Force",type:"boolean"},{name:"synctex",label:"Synctex",type:"boolean"}],"json-to-latex":[{name:"command_name",label:"Command name",type:"text"},{name:"format",label:"Format (JSON)",type:"json",placeholder:'{\n "section": "value"\n}'}],"word-to-pdf":[{name:"word_doc_path",label:"Word doc path",type:"text",placeholder:"report.docx"}],"julia-script":[{name:"script_path",label:"Script path",type:"text",placeholder:"scripts/run.jl"},{name:"args",label:"Args",type:"list",placeholder:"--flag value"}],"julia-command":[{name:"command",label:"Julia command",type:"text",placeholder:'println("hi")'}],sbatch:[{name:"script_path",label:"Script path",type:"text",placeholder:"scripts/job.sh"},{name:"args",label:"Args",type:"list",placeholder:"--flag value"},{name:"sbatch_options",label:"sbatch options",type:"list",placeholder:"--gres=gpu:1"},{name:"log_storage",label:"Log storage",type:"select",options:[{value:"git",label:"Git"},{value:"dvc",label:"DVC"}]}],"jupyter-notebook":[{name:"notebook_path",label:"Notebook path",type:"text",placeholder:"notebooks/run.ipynb"},{name:"cleaned_ipynb_storage",label:"Cleaned notebook storage",type:"select",options:[{value:"git",label:"Git"},{value:"dvc",label:"DVC"},{value:"",label:"Unset"}]},{name:"executed_ipynb_storage",label:"Executed notebook storage",type:"select",options:[{value:"dvc",label:"DVC"},{value:"git",label:"Git"},{value:"",label:"Unset"}]},{name:"html_storage",label:"HTML storage",type:"select",options:[{value:"dvc",label:"DVC"},{value:"git",label:"Git"},{value:"",label:"Unset"}]},{name:"language",label:"Notebook language",type:"select",options:[{value:"python",label:"Python"},{value:"matlab",label:"MATLAB"},{value:"julia",label:"Julia"}]},{name:"parameters",label:"Parameters (JSON)",type:"json",placeholder:'{\n "param": 1\n}'}],"map-paths":[{name:"paths",label:"Paths (JSON)",type:"json",placeholder:'[{\n "kind": "file-to-file",\n "src": "input.txt",\n "dest": "out.txt"\n}]'}]},re=({initialName:e="",initialKind:t,initialEnvironment:a="",initialInputs:n,initialOutputs:i,initialAttributes:l={},nameEditable:o,onChange:s})=>{const[c,r]=C().useState(e),[d,m]=C().useState(t),[u,p]=C().useState(a),[v,g]=C().useState(n),[k,h]=C().useState(i),b=ce[d]||[],y=C().useMemo(()=>{var e;const a={};for(const n of ce[t]||[])void 0!==l[n.name]?a[n.name]=l[n.name]:"list"===n.type?a[n.name]=[]:"boolean"===n.type?a[n.name]=!1:"select"===n.type&&(null===(e=n.options)||void 0===e?void 0:e.length)?a[n.name]=n.options[0].value:a[n.name]="";return a},[l,t]),[f,E]=C().useState(y),[N,w]=C().useState(JSON.stringify(l,null,2));C().useEffect(()=>{s({name:c,kind:d,environment:u,inputs:v,outputs:k,fieldValues:f,additionalJson:N})},[c,d,u,v,k,f,N,s]),C().useEffect(()=>{var e;const t={};for(const a of ce[d]||[]){const n=f[a.name];void 0!==n?t[a.name]=n:"list"===a.type?t[a.name]=[]:"boolean"===a.type?t[a.name]=!1:"select"===a.type&&(null===(e=a.options)||void 0===e?void 0:e.length)?t[a.name]=a.options[0].value:t[a.name]=""}E(t)},[d]);const S=(e,t,a)=>{const n=a.trim();n&&t([...e,n])},x=(e,t,a)=>{const n=C().createRef();return C().createElement("div",{className:"calkit-stage-io-list"},0===e.length?C().createElement("div",{className:"calkit-stage-io-empty"},"No items"):e.map((a,n)=>C().createElement("div",{key:n,className:"calkit-stage-io-item"},C().createElement("span",null,a),C().createElement("button",{className:"calkit-stage-io-remove",onClick:()=>{t(e.filter((e,t)=>t!==n))}},"×"))),C().createElement("div",{className:"calkit-stage-io-input-container"},C().createElement("input",{ref:n,type:"text",placeholder:a,onKeyPress:a=>{var i;if("Enter"===a.key){const a=(null===(i=n.current)||void 0===i?void 0:i.value)||"";S(e,t,a),n.current&&(n.current.value="")}},autoComplete:"off"}),C().createElement("button",{className:"calkit-stage-io-add-button",onClick:()=>{var a;const i=(null===(a=n.current)||void 0===a?void 0:a.value)||"";S(e,t,i),n.current&&(n.current.value="")}},"Add")))};return C().createElement("div",{className:"calkit-stage-editor"},C().createElement("div",{className:"calkit-stage-editor-field"},C().createElement("label",null,"Stage name"),C().createElement("input",{type:"text",value:c,onChange:e=>r(e.target.value),placeholder:"e.g., process_data",autoFocus:!0,disabled:!o,autoComplete:"off"})),C().createElement("div",{className:"calkit-stage-editor-field"},C().createElement("label",null,"Stage kind"),C().createElement("select",{value:d,onChange:e=>m(e.target.value)},se.map(e=>C().createElement("option",{key:e.value,value:e.value},e.label)))),C().createElement("div",{className:"calkit-stage-editor-field"},C().createElement("label",null,"Environment"),C().createElement("input",{type:"text",value:u,onChange:e=>p(e.target.value),placeholder:"environment name",autoComplete:"off"})),C().createElement("div",{className:"calkit-stage-editor-field"},C().createElement("label",null,"Inputs"),x(v,g,"path/to/input")),C().createElement("div",{className:"calkit-stage-editor-field"},C().createElement("label",null,"Outputs"),x(k,h,"path/to/output")),b.map(e=>(e=>{const t=f[e.name],a=t=>{E(a=>({...a,[e.name]:t}))};if("text"===e.type)return C().createElement("div",{key:e.name,className:"calkit-stage-editor-field"},C().createElement("label",null,e.label),C().createElement("input",{type:"text",value:null!=t?t:"",placeholder:e.placeholder,onChange:e=>a(e.target.value),autoComplete:"off"}));if("list"===e.type){const n=Array.isArray(t)?t:[],i=e=>{a("function"==typeof e?e(n):e)};return C().createElement("div",{key:e.name,className:"calkit-stage-editor-field"},C().createElement("label",null,e.label),x(n,i,e.placeholder||"value"))}return"select"===e.type?C().createElement("div",{key:e.name,className:"calkit-stage-editor-field"},C().createElement("label",null,e.label),C().createElement("select",{value:null!=t?t:"",onChange:e=>a(e.target.value)},(e.options||[]).map(e=>C().createElement("option",{key:e.value,value:e.value},e.label)))):"boolean"===e.type?C().createElement("div",{key:e.name,className:"calkit-stage-editor-field"},C().createElement("label",null,e.label),C().createElement("input",{type:"checkbox",checked:!!t,onChange:e=>a(e.target.checked)})):"json"===e.type?C().createElement("div",{key:e.name,className:"calkit-stage-editor-field"},C().createElement("label",null,e.label),C().createElement("textarea",{rows:4,value:"string"==typeof t?t:JSON.stringify(t||{},null,2),placeholder:e.placeholder,onChange:e=>a(e.target.value),autoComplete:"off"})):null})(e)),C().createElement("div",{className:"calkit-stage-editor-field"},C().createElement("label",null,"Additional attributes (JSON)"),C().createElement("textarea",{rows:4,value:N,onChange:e=>w(e.target.value),placeholder:'{"custom": true}',autoComplete:"off"})))};async function de(e){var t;const{title:a,stageName:n,kind:l,environment:o,inputs:s=[],outputs:c=[],attributes:r={},onSave:d}=e,m=void 0===n,u=l||se[0].value;let p={name:n||"",kind:u,environment:o||"",inputs:s,outputs:c,fieldValues:{},additionalJson:JSON.stringify(r,null,2)};const v=i.ReactWidget.create(C().createElement(re,{initialName:n,initialKind:u,initialEnvironment:o,initialInputs:s,initialOutputs:c,initialAttributes:r,nameEditable:m,onChange:e=>{p=e}}));if(!(await new i.Dialog({title:a,body:v,buttons:[i.Dialog.cancelButton(),i.Dialog.okButton({label:n?"Save":"Create"})]}).launch()).button.accept)return;const g=null===(t=p.name)||void 0===t?void 0:t.trim();if(!g)return;let k={};const h=p.additionalJson||"";if(h.trim())try{k=JSON.parse(h)}catch(e){return void console.error("Invalid additional attributes JSON:",e)}const b={...k};for(const[e,t]of Object.entries(p.fieldValues||{})){if("string"==typeof t&&(t.trim().startsWith("{")||t.trim().startsWith("[")))try{b[e]=JSON.parse(t);continue}catch(e){}b[e]=t}await d({name:g,kind:p.kind,environment:p.environment||"",inputs:p.inputs,outputs:p.outputs,attributes:b})}const me=[{id:"basicInfo",label:"Basic info",icon:C().createElement(Z.zAZ,null),toggleable:!1},{id:"setup",label:"Setup",icon:"🛠️"},{id:"environments",label:"Environments",icon:C().createElement(ee.nS1,null)},{id:"pipelineStages",label:"Pipeline",icon:C().createElement(Z.DHC,{style:{transform:"rotate(-90deg)"}})},{id:"notebooks",label:"Notebooks",icon:"📓"},{id:"figures",label:"Figures",icon:"📊",defaultVisible:!1},{id:"datasets",label:"Datasets",icon:"📁"},{id:"questions",label:"Questions",icon:"❓"},{id:"history",label:"Save/sync",icon:"🔃",toggleable:!1},{id:"publications",label:"Publications",icon:"📚",defaultVisible:!1},{id:"notes",label:"Notes",icon:"📝",defaultVisible:!1},{id:"models",label:"Models",icon:"🤖",defaultVisible:!1}].filter(e=>{const t={basicInfo:"basicInfo",setup:"setup",environments:"environments",pipelineStages:"pipelineStages",notebooks:"notebooksSidebar",figures:"figures",datasets:"datasets",questions:"questions",history:"history",publications:"publications",notes:"notes",models:"models"}[e.id];return!t||(0,T.G7)(t)}),ue=new Set(me.filter(e=>!1!==e.toggleable&&!1!==e.defaultVisible).map(e=>e.id)),pe=({settings:e,stateDB:t,onStatusChange:a,commands:n,onSetExpandPipelineCallback:l})=>{var o,s,c,r,d,m,u,p,v,k;const h=(0,j.useQuery)({queryKey:["project"],queryFn:()=>I("project")}),b=(0,j.useQuery)({queryKey:["git","status"],queryFn:()=>I("git/status"),staleTime:1e4,refetchInterval:5e3,enabled:(0,T.G7)("history")}),y=q(),f=(0,j.useQuery)({queryKey:["dependencies"],queryFn:()=>I("dependencies"),staleTime:15e3,refetchInterval:1e4,enabled:(0,T.G7)("setup")}),E=(0,j.useQuery)({queryKey:["git","history"],queryFn:()=>I("git/history"),enabled:(0,T.G7)("history")}),w=(0,j.useQuery)({queryKey:["notebooks"],queryFn:()=>I("notebooks")}),S=M(),_=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("notebooks",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["project"]})}})})(),O=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("notebooks",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["project"]})}})})(),F=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("install",{method:"POST",body:JSON.stringify({name:e})}),onSuccess:()=>{e.invalidateQueries({queryKey:["dependencies"]})}})})(),$=R(),J=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:e=>I("git/commit",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["git"]})}})})(),L=(()=>{const e=(0,j.useQueryClient)();return(0,j.useMutation)({mutationFn:()=>I("git/push",{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})})(),[K,Q]=(0,N.useState)(new Set(["setup","basicInfo","environments","notebooks"])),[B,U]=(0,N.useState)(new Set),[V,G]=(0,N.useState)(new Set),[z,W]=(0,N.useState)(new Set),[Y,H]=(0,N.useState)(null),[Z,ee]=(0,N.useState)(null),[ne,le]=(0,N.useState)(null),[ce,re]=(0,N.useState)(null),[pe,ve]=(0,N.useState)(null),[ge,ke]=(0,N.useState)(new Set(ue)),[he,be]=(0,N.useState)(!1),[ye,fe]=(0,N.useState)(new Set(["modified","staged","untracked","history"])),[Ee,Ne]=(0,N.useState)(!1),Ce=(0,N.useCallback)((e,t)=>{var a;return e?{setup:[],environments:Object.entries(e.environments||{}).map(([e,a])=>({id:e,label:e,..."object"==typeof a?a:{},...(null==t?void 0:t[e])?{packages:t[e].packages}:{}})),pipelineStages:Object.entries((null===(a=e.pipeline)||void 0===a?void 0:a.stages)||{}).map(([e,t])=>({id:e,label:e,..."object"==typeof t?t:{}})),notebooks:Array.isArray(e.notebooks)?(e.notebooks||[]).map(e=>{var t,a,n,i,l;return{id:null!==(n=null!==(a=null!==(t=null==e?void 0:e.path)&&void 0!==t?t:null==e?void 0:e.id)&&void 0!==a?a:null==e?void 0:e.name)&&void 0!==n?n:"",label:null!==(l=null!==(i=null==e?void 0:e.path)&&void 0!==i?i:null==e?void 0:e.name)&&void 0!==l?l:"",..."object"==typeof e?e:{}}}):Object.entries(e.notebooks||{}).map(([e,t])=>({id:e,label:e,..."object"==typeof t?t:{}})),datasets:(e.datasets||[]).map((e,t)=>({id:`dataset-${t}`,label:e.title||e.path||`Dataset ${t}`,..."object"==typeof e?e:{}})),questions:(e.questions||[]).map((e,t)=>({id:`question-${t}`,label:"string"==typeof e?e:e.question||`Question ${t}`,..."object"==typeof e?e:{}})),models:Object.entries(e.models||{}).map(([e,t])=>({id:e,label:e,..."object"==typeof t?t:{}})),figures:[],history:[],publications:[],notes:[]}:{setup:[],environments:[],pipelineStages:[],notebooks:[],datasets:[],questions:[],models:[],figures:[],history:[],publications:[],notes:[]}},[]),we=Ce(h.data,S.data);C().useEffect(()=>{var e;(null===(e=h.data)||void 0===e?void 0:e.name)||Q(e=>{const t=new Set(e);return t.add("basicInfo"),t})},[null===(o=h.data)||void 0===o?void 0:o.name]),f.data?we.setup=f.data:we.setup=[],w.data&&Array.isArray(w.data)&&(we.notebooks=w.data.map(e=>({id:e.path,label:e.path,...e})));const Se=h.data?{name:null!==(s=h.data.name)&&void 0!==s?s:"",title:null!==(c=h.data.title)&&void 0!==c?c:"",description:null!==(r=h.data.description)&&void 0!==r?r:"",git_repo_url:null!==(d=h.data.git_repo_url)&&void 0!==d?d:"",owner:null!==(m=h.data.owner)&&void 0!==m?m:""}:{name:"",title:"",description:"",git_repo_url:"",owner:""},xe=b.data||{changed:[],staged:[],untracked:[],tracked:[],sizes:{},ahead:0,behind:0,branch:null,remote:null},_e=y.data,Pe=Boolean((null==_e?void 0:_e.is_outdated)||(null==_e?void 0:_e.pipeline)&&Object.keys(_e.pipeline||{}).length>0),je=((null===(u=xe.changed)||void 0===u?void 0:u.length)||0)>0||((null===(p=xe.untracked)||void 0===p?void 0:p.length)||0)>0||((null===(v=xe.staged)||void 0===v?void 0:v.length)||0)>0,Oe=we.setup||[],Fe=Oe.filter(e=>{if(!1===e.required)return!1;const t=(e.status||"").toLowerCase(),a="ok"===t||"ready"===t||"installed"===t||!0===e.installed,n=!!e.env_var&&!e.value;return!1===e.installed||!1===e.configured||Boolean(e.missing_reason)||n||!a}).length,Ie=(0,T.G7)("pipelineStages")&&Pe,De=(0,T.G7)("history")&&je,Ae=(0,T.G7)("setup")&&Fe>0,Te=Ie||De||Ae;C().useEffect(()=>{null==a||a(Te)},[Te,a]),C().useEffect(()=>{l&&l(()=>{Q(e=>{const t=new Set(e);return t.add("pipelineStages"),t})})},[l]);const qe={};[...xe.changed||[],...xe.untracked||[]].forEach(e=>{var t,a;const n=(xe.tracked||[]).includes(e),i=null!==(a=null===(t=xe.sizes)||void 0===t?void 0:t[e])&&void 0!==a?a:0,l=!n&&i>5242880;qe[e]={stage:!0,storeInDvc:l}});const Me=(null===(k=E.data)||void 0===k?void 0:k.commits)||[],Re=(0,N.useCallback)(e=>{Q(t=>{const a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},[]),$e=(0,N.useCallback)(e=>{U(t=>{const a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},[]),Je=(0,N.useCallback)(e=>{G(t=>{const a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},[]),Le=(0,N.useCallback)(e=>{W(t=>{const a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},[]);C().useEffect(()=>{(async()=>{try{if(t){const e=await t.fetch("calkit:expandedSections");e&&Array.isArray(e)&&Q(new Set(e))}}catch(e){console.warn("Failed to fetch expandedSections from stateDB",e)}})()},[t]),C().useEffect(()=>{(async()=>{var t;try{const a=new Set(me.map(e=>e.id)),n=null===(t=null==e?void 0:e.composite)||void 0===t?void 0:t.visibleSections;if(n&&Array.isArray(n)){const e=n.filter(e=>a.has(e));ke(e.length>0?new Set(e):new Set(ue))}else ke(new Set(ue))}catch(e){console.warn("Failed to initialize visibleSections from settings",e),ke(new Set(ue))}})()},[e]),C().useEffect(()=>{(async()=>{try{t&&await t.save("calkit:expandedSections",[...K])}catch(e){console.warn("Failed to save expandedSections to stateDB",e)}})()},[K,t]),C().useEffect(()=>{(async()=>{try{e&&await e.set("visibleSections",[...ge])}catch(e){console.warn("Failed to save visibleSections to settings",e)}})()},[ge,e]),C().useEffect(()=>{const e=()=>{ee(null),le(null),re(null),ve(null),be(!1)};if((null==Z?void 0:Z.visible)||(null==ne?void 0:ne.visible)||(null==ce?void 0:ce.visible)||(null==pe?void 0:pe.visible)||he)return document.addEventListener("click",e),()=>{document.removeEventListener("click",e)}},[null==Z?void 0:Z.visible,null==ne?void 0:ne.visible,null==ce?void 0:ce.visible,null==pe?void 0:pe.visible,he]);const Ke=(0,N.useCallback)(async e=>{if(e.installable){H(e.name);try{await F.mutateAsync(e.name)}catch(e){console.error("Failed to install dependency:",e)}finally{H(null)}}},[F]),Qe=(0,N.useCallback)(async()=>{const e={...Se};!e.name&&h.data&&(e.name=h.data.suggested_name||Se.name,e.title=h.data.suggested_title||Se.title);const t=await async function(e,t=!1){console.log("showProjectInfoEditor called with options:",e,"isInitialSetup:",t);const a=new oe(e);console.log("ProjectInfoEditorWidget created");const n=new i.Dialog({title:"Set project info",body:a,buttons:[i.Dialog.cancelButton(),i.Dialog.okButton({label:"Save"})]});console.log("Dialog created, about to launch...");const l=await n.launch();if(console.log("Dialog launch completed, result:",l),l.button.accept){console.log("User accepted, getting data from widget...");const e=a.getData();return console.log("Data from widget:",e),e}return console.log("User cancelled or rejected"),null}(e);if(t)try{await I("project",{method:"PUT",body:JSON.stringify(t)}),await D.invalidateQueries({queryKey:["project"]})}catch(e){console.error("Failed to save project info:",e)}},[Se]),Be=(0,N.useCallback)(async()=>{const e=new Set([...xe.tracked||[]]),t=[...xe.changed||[],...xe.untracked||[]].map(t=>{var a;return{path:t,store_in_dvc:!1,stage:!0,tracked:e.has(t),size:null===(a=xe.sizes)||void 0===a?void 0:a[t]}}),a=t.length?`Update ${t.map(e=>e.path).slice(0,5).join(", ")}${t.length>5?", …":""}`:"Update project",n=await x(a,t);if(!n)return;const i=n.files.filter(e=>e.ignore_forever),l=n.files.filter(e=>e.stage);if(i.length>0)try{await I("git/ignore",{method:"POST",body:JSON.stringify({paths:i.map(e=>e.path)})})}catch(e){console.error("Failed to ignore paths:",e)}if(0!==l.length)try{if(await J.mutateAsync({message:n.message,files:l}),n.pushAfter)try{await L.mutateAsync()}catch(e){console.error("Push failed:",e)}}catch(e){console.error("Commit failed:",e)}},[xe.changed,xe.sizes,xe.tracked,xe.untracked,J,L]),Ue=(0,N.useCallback)(async()=>{if(n)try{await n.execute("docmanager:save-all")}catch(e){console.warn("Failed to save all documents:",e)}Ne(!0),X.setRunning(!0,"Running pipeline...");try{await I("pipeline/runs",{method:"POST",body:JSON.stringify({targets:[]})}),await D.refetchQueries({queryKey:["pipelineStatus"]}),await D.invalidateQueries({queryKey:["project"]})}catch(e){const t="See output in the server console for details.";console.error("Failed to run pipeline:",e),await(0,i.showErrorMessage)("Failed to run pipeline",t)}finally{Ne(!1),X.setRunning(!1)}},[n]),Ve=(0,N.useCallback)(async e=>{if(e){X.setRunning(!0,`Running stage: ${e}`);try{await I("pipeline/runs",{method:"POST",body:JSON.stringify({targets:[e]})}),await D.invalidateQueries({queryKey:["project"]}),await D.invalidateQueries({queryKey:["pipelineStatus"]})}catch(e){console.error("Failed to run stage:",e),await(0,i.showErrorMessage)("Failed to run stage","See output in the server terminal for details.")}finally{X.setRunning(!1)}}},[]),Ge=(0,N.useCallback)(async()=>{await de({title:"Create new stage",kind:se[0].value,environment:"",inputs:[],outputs:[],attributes:{},onSave:async({name:e,inputs:t,outputs:a,kind:n,environment:i,attributes:l})=>{if(e.trim())try{await I("pipeline/stage",{method:"PUT",body:JSON.stringify({name:e,kind:n,environment:i,inputs:t,outputs:a,...l})}),await D.invalidateQueries({queryKey:["project"]}),await D.invalidateQueries({queryKey:["pipelineStatus"]})}catch(e){console.error("Failed to create stage:",e)}}})},[]),ze=(0,N.useCallback)(async()=>{console.log("handleCreateEnvironment called"),console.log("About to show environment editor"),await(0,A.showEnvironmentEditor)({mode:"create",onSubmit:async({name:e,kind:t,path:a,packages:n,prefix:i,python:l})=>{console.log("Environment editor submitted"),await $.mutateAsync({name:e,kind:t,path:a,packages:n,prefix:i,python:l})}})},[]),We=(0,N.useCallback)(async()=>{const e=we.environments||[],t=await(0,ie.showNotebookRegistration)("create",[],e.map(e=>({id:e.id,label:e.label})),async()=>{let e=null;return await(0,A.showEnvironmentEditor)({mode:"create",onSubmit:async({name:t,kind:a,path:n,packages:i,prefix:l,python:o})=>{await $.mutateAsync({name:t,kind:a,path:n,packages:i,prefix:l,python:o}),e=t}}),e});if(t)try{await _.mutateAsync(t)}catch(e){console.error("Failed to create notebook:",e)}},[we.environments,_,$]),Xe=(0,N.useCallback)(async()=>{const e=await(0,ie.showNotebookRegistration)("register",[]);if(e)try{await O.mutateAsync(e)}catch(e){console.error("Failed to register notebook:",e)}},[O]),Ye=(0,N.useCallback)(e=>{const t=B.has(e.id),a=e.kind||"unknown",n=e.packages||[],i="uv-venv"===a||"venv"===a||"python"===a||"julia"===a||"conda"===a;return C().createElement("div",{key:e.id},C().createElement("div",{className:"calkit-sidebar-item calkit-env-item",onClick:()=>$e(e.id),onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),ee({visible:!0,x:t.clientX,y:t.clientY,env:e})}},C().createElement("span",{className:"calkit-sidebar-section-icon"},t?"▼":"▶"),C().createElement("span",{className:"calkit-sidebar-item-label"},e.label)),t&&C().createElement("div",{className:"calkit-env-details",onContextMenu:t=>{t.preventDefault(),t.stopPropagation(),ee({visible:!0,x:t.clientX,y:t.clientY,env:e})}},C().createElement("div",{className:"calkit-env-kind-row"},C().createElement("div",{className:"calkit-env-kind"},C().createElement("strong",null,"Kind:")," ",a),C().createElement("button",{className:"calkit-env-edit-btn",title:"Edit environment",onClick:t=>{t.stopPropagation(),(async()=>{await(0,A.showEnvironmentEditor)({mode:"edit",initialName:e.id,initialKind:a,initialPath:e.path,initialPrefix:e.prefix,initialPython:e.python||"3.14",initialPackages:n,existingEnvironment:{name:e.id,kind:a,path:e.path,prefix:e.prefix,python:e.python||"3.14",packages:n},onSubmit:async({name:t,kind:a,path:n,prefix:i,packages:l,python:o},s)=>{try{await I("environments",{method:"PUT",body:JSON.stringify({existing:s||{name:e.id,kind:a,path:e.path,prefix:e.prefix,python:e.python||"3.14",packages:l},updated:{name:t,kind:a,path:n,prefix:i,packages:l,python:o}})}),await D.invalidateQueries({queryKey:["project"]}),await D.invalidateQueries({queryKey:["environments"]})}catch(e){throw console.error("Failed to update environment:",e),e}}})})()}},C().createElement(te.vAr,null))),e.python&&C().createElement("div",{className:"calkit-env-python"},C().createElement("strong",null,"Python:")," ",e.python),i&&C().createElement("div",{className:"calkit-env-packages"},C().createElement("div",{className:"calkit-env-packages-header"},C().createElement("strong",null,"Packages:")),0===n.length?C().createElement("p",{className:"calkit-env-packages-empty"},"No packages"):C().createElement("ul",{className:"calkit-env-packages-list"},n.map((e,t)=>C().createElement("li",{key:t,className:"calkit-env-package-item"},e))))))},[B,$e,we]),He=(0,N.useCallback)(e=>{var t,a;const i=z.has(e.id),l=e.kind||"unknown",o=e.inputs||[],s=(e.outputs||[]).map(e=>"string"==typeof e?e:e.path),c=e.environment||"",r=e.notebook_path||"",d="jupyter-notebook"===l||"notebook"===l,m=(null==_e?void 0:_e.stale_stages)||{};let u=e.id in m;if(!u){const n=null===(a=null===(t=null==_e?void 0:_e.pipeline)||void 0===t?void 0:t.stages)||void 0===a?void 0:a[e.id];n&&(u=Boolean(n.is_stale||n.is_outdated||n.outdated||n.needs_run))}return C().createElement("div",{key:e.id},C().createElement("div",{className:"calkit-sidebar-item calkit-stage-item"+(u?" stale":""),onClick:()=>Le(e.id)},C().createElement("span",{className:"calkit-sidebar-section-icon"},i?"▼":"▶"),C().createElement("span",{className:"calkit-sidebar-item-label"},e.label||e.id)),i&&C().createElement("div",{className:"calkit-stage-details"},C().createElement("div",{className:"calkit-stage-info-item"},C().createElement("span",{className:"calkit-stage-info-label"},"Kind:"),C().createElement("span",{className:"calkit-stage-info-value"},l||"—")),d&&r&&C().createElement("div",{className:"calkit-stage-info-item"},C().createElement("span",{className:"calkit-stage-info-label"},"Notebook:"),C().createElement("div",{className:"calkit-stage-info-value calkit-stage-info-row"},C().createElement("span",{className:"calkit-stage-info-path"},r),C().createElement("button",{className:"calkit-notebook-open-btn",onClick:e=>{e.stopPropagation(),n&&r&&n.execute("docmanager:open",{path:r})},title:"Open notebook"},C().createElement(g.launchIcon.react,{tag:"span"})))),C().createElement("div",{className:"calkit-stage-info-item"},C().createElement("span",{className:"calkit-stage-info-label"},"Environment:"),C().createElement("span",{className:"calkit-stage-info-value"},c||"—")),C().createElement("div",{className:"calkit-stage-info-item"},C().createElement("span",{className:"calkit-stage-info-label"},"Inputs:"),C().createElement("span",{className:"calkit-stage-info-value"},0===o.length?"—":o.map(e=>e).join(", "))),C().createElement("div",{className:"calkit-stage-info-item"},C().createElement("span",{className:"calkit-stage-info-label"},"Outputs:"),C().createElement("span",{className:"calkit-stage-info-value"},0===s.length?"—":s.map(e=>e).join(", ")))))},[z,Le,_e,D,n]),Ze=(0,N.useCallback)(e=>{var t;const a=V.has(e.id);let i="";"string"==typeof e.environment?i=e.environment:e.environment&&"object"==typeof e.environment&&(i=e.environment.name||"");const l=(null===(t=e.stage)||void 0===t?void 0:t.name)||"";return C().createElement("div",{key:e.id},C().createElement("div",{className:"calkit-sidebar-item calkit-notebook-item",onClick:()=>Je(e.id)},C().createElement("span",{className:"calkit-sidebar-section-icon"},a?"▼":"▶"),C().createElement("span",{className:"calkit-sidebar-item-label"},e.label),C().createElement("button",{className:"calkit-notebook-open-btn",onClick:t=>{t.stopPropagation(),n&&n.execute("docmanager:open",{path:e.id})},title:"Open notebook"},C().createElement(g.launchIcon.react,{tag:"span"}))),a&&C().createElement("div",{className:"calkit-notebook-details"},C().createElement("div",{className:"calkit-notebook-info-item"},C().createElement("span",{className:"calkit-notebook-info-label"},"Environment:"),C().createElement("span",{className:"calkit-notebook-info-value"},i||"—")),C().createElement("div",{className:"calkit-notebook-info-item"},C().createElement("span",{className:"calkit-notebook-info-label"},"Pipeline stage:"),C().createElement("span",{className:"calkit-notebook-info-value"},l||"—"))))},[V,Je,we,n]),et=(0,N.useCallback)((e,t,a)=>{var n,i,l,o,s,c,r,d,m,u,p,v,g,k,b,y,E,N,S;const x=K.has(e);let _=we[e]||[];"notebooks"!==e||_&&0!==_.length||!w.data||(_=(w.data||[]).map(e=>({id:e.path,label:e.path,in_pipeline:!!e.stage})));const P="environments"===e||"notebooks"===e&&(0,T.G7)("createNotebook")||"pipelineStages"===e&&(0,T.G7)("createPipelineStage"),j="basicInfo"===e,O="history"===e?(xe.untracked||[]).length:"setup"===e?Fe:0,F="history"===e?new Set([...xe.changed||[],...xe.staged||[]]).size:0,I="history"===e&&xe.behind||0,D=O>0||F>0||I>0,A=I>0?"⬇️":"💾",q=I>0?"Pull changes":"Save";return C().createElement("div",{key:e,className:"calkit-sidebar-section"},C().createElement("div",{className:"calkit-sidebar-section-header",onClick:()=>Re(e),onContextMenu:t=>{"environments"===e?(t.preventDefault(),ee({visible:!0,x:t.clientX,y:t.clientY})):"notebooks"===e?(t.preventDefault(),le({visible:!0,x:t.clientX,y:t.clientY})):"pipelineStages"===e&&(t.preventDefault(),re({visible:!0,x:t.clientX,y:t.clientY}))}},C().createElement("span",{className:"calkit-sidebar-section-icon"},x?"▼":"▶"),C().createElement("span",{className:"calkit-sidebar-section-label"},a),C().createElement("span",{className:"calkit-sidebar-section-title"},t),"history"===e&&C().createElement("button",{className:"calkit-sidebar-section-save"+(D?" has-changes":""),title:q,onClick:e=>{e.stopPropagation(),Be()}},A),"history"===e&&D&&C().createElement("span",{className:"calkit-status-chips"},O>0&&C().createElement("span",{className:"calkit-status-chip new",title:`New (untracked) files: ${O}`},O),F>0&&C().createElement("span",{className:"calkit-status-chip modified",title:`Modified files: ${F}`},F),I>0&&C().createElement("span",{className:"calkit-status-chip pull",title:`Commits to pull: ${I}`},I)),"setup"===e&&O>0&&C().createElement("span",{className:"calkit-status-chips"},C().createElement("span",{className:"calkit-status-chip stale",title:`${O} setup item${1===O?"":"s"} need attention`},O)),"basicInfo"===e&&!(null===(n=h.data)||void 0===n?void 0:n.name)&&C().createElement("span",{className:"calkit-status-chips"},C().createElement("span",{className:"calkit-status-chip missing",title:"Project name is required"},"⚠")),j&&C().createElement("button",{className:"calkit-sidebar-section-edit",onClick:e=>{e.stopPropagation(),Qe()},title:"Edit project info"},C().createElement(te.vAr,null)),P&&C().createElement("button",{className:"calkit-sidebar-section-create",onClick:t=>{t.stopPropagation(),"environments"===e?ze():"notebooks"===e?We():"pipelineStages"===e&&Ge()},title:"environments"===e?"Create new environment":"notebooks"===e?"Create new notebook":"Create new stage"},"+"),"pipelineStages"===e&&(()=>{var t;const a=_e;let n=0;a&&((null==a?void 0:a.stale_stages)&&"object"==typeof a.stale_stages?n=Object.keys(a.stale_stages).length:"number"==typeof(null==a?void 0:a.stages_outdated_count)?n=a.stages_outdated_count:Array.isArray(null==a?void 0:a.outdated_stages)?n=a.outdated_stages.length:(null===(t=null==a?void 0:a.pipeline)||void 0===t?void 0:t.stages)&&"object"==typeof a.pipeline.stages&&(n=Object.values(a.pipeline.stages).filter(e=>(null==e?void 0:e.is_outdated)||(null==e?void 0:e.outdated)||(null==e?void 0:e.needs_run)).length));const i=n>0,l=0===_.length,o=Ee||l;return C().createElement(C().Fragment,null,"pipelineStages"===e&&C().createElement("button",{className:`calkit-sidebar-section-run${Ee?" running":""}${i?" stale":""}${l?" disabled":""}`,title:l?"Create stages before running pipeline":Ee?"Pipeline running...":"Run pipeline",onClick:e=>{e.stopPropagation(),o||Ue()},disabled:o},Ee?C().createElement("span",{className:"calkit-spinner"}):"▶"),n>0&&C().createElement("span",{className:"calkit-status-chip stale",title:`${n} stage${1===n?"":"s"} out of date`},n))})(),C().createElement("span",{className:"calkit-sidebar-section-count"},_.length>0&&`(${_.length})`)),x&&"basicInfo"===e&&C().createElement("div",{className:"calkit-sidebar-section-content"},C().createElement("div",{className:"calkit-basic-info-item"},C().createElement("span",{className:"calkit-basic-info-label"},"Name:"),C().createElement("span",{className:"calkit-basic-info-value"},Se.name||"—")),C().createElement("div",{className:"calkit-basic-info-item"},C().createElement("span",{className:"calkit-basic-info-label"},"Title:"),C().createElement("span",{className:"calkit-basic-info-value"},Se.title||"—")),C().createElement("div",{className:"calkit-basic-info-item"},C().createElement("span",{className:"calkit-basic-info-label"},"Description:"),C().createElement("span",{className:"calkit-basic-info-value"},Se.description||"—")),C().createElement("div",{className:"calkit-basic-info-item"},C().createElement("span",{className:"calkit-basic-info-label"},"Git repo:"),C().createElement("span",{className:"calkit-basic-info-value"},Se.git_repo_url?/^https?:\/\//i.test(Se.git_repo_url)?C().createElement("a",{href:Se.git_repo_url,target:"_blank",rel:"noopener noreferrer",className:"calkit-basic-info-link"},Se.git_repo_url):Se.git_repo_url:"—")),C().createElement("div",{className:"calkit-basic-info-item"},C().createElement("span",{className:"calkit-basic-info-label"},"Calkit URL:"),C().createElement("span",{className:"calkit-basic-info-value"},Se.owner&&Se.name?C().createElement("a",{href:`https://calkit.io/${Se.owner}/${Se.name}`,target:"_blank",rel:"noopener noreferrer",className:"calkit-basic-info-link"},`https://calkit.io/${Se.owner}/${Se.name}`):"—"))),x&&"setup"===e&&C().createElement("div",{className:"calkit-sidebar-section-content"},f.isPending&&C().createElement("div",{className:"calkit-sidebar-section-empty"},"Loading..."),!f.isPending&&0===Oe.length&&C().createElement("div",{className:"calkit-sidebar-section-empty"},"All set!"),!f.isPending&&Oe.length>0&&C().createElement("div",{className:"calkit-setup-list"},Oe.map(e=>{const t=(e.status||"").toLowerCase(),a="ok"===t||"ready"===t||"installed"===t||!0===e.installed,n=e.env_var&&!e.value,i=!1===e.installed||!1===e.configured||Boolean(e.missing_reason)||n||!a;return C().createElement("div",{key:e.name,className:"calkit-setup-item"+(i?" warning":"")},C().createElement("div",{className:"calkit-setup-main"},C().createElement("div",{className:"calkit-setup-name"},e.name),C().createElement("div",{className:"calkit-setup-kind"},e.kind)),C().createElement("div",{className:"calkit-setup-status"},i?C().createElement("span",{className:"calkit-setup-chip warning"},"Needs setup"):C().createElement("span",{className:"calkit-setup-chip ok"},"OK"),e.version&&C().createElement("span",{className:"calkit-setup-version"},e.version),e.missing_reason&&C().createElement("div",{className:"calkit-setup-message"},e.missing_reason),n&&e.env_var&&C().createElement("div",{className:"calkit-setup-message"},"Set ",e.env_var," in .env")),C().createElement("div",{className:"calkit-setup-actions"},e.installable&&C().createElement("button",{className:"calkit-setup-install",disabled:Y===e.name,onClick:()=>Ke(e)},Y===e.name?"Installing...":"Install"),e.env_var&&C().createElement("button",{className:"calkit-setup-install",onClick:()=>{var t;null===(t=navigator.clipboard)||void 0===t||t.writeText(e.env_var||"")}},"Copy env var")))}))),x&&"history"===e&&C().createElement("div",{className:"calkit-sidebar-section-content"},C().createElement("div",{className:"calkit-git-history"},((null===(i=xe.changed)||void 0===i?void 0:i.length)||0)>0&&C().createElement("div",{className:"calkit-git-subsection"},C().createElement("div",{className:"calkit-git-subsection-header",onClick:()=>{fe(e=>{const t=new Set(e);return t.has("modified")?t.delete("modified"):t.add("modified"),t})}},C().createElement("span",{className:"calkit-git-subsection-icon"},ye.has("modified")?"▼":"▶"),C().createElement("span",{className:"calkit-git-subsection-title"},"Modified (",(null===(l=xe.changed)||void 0===l?void 0:l.length)||0,")")),ye.has("modified")&&C().createElement("div",{className:"calkit-git-subsection-items"},null===(o=xe.changed)||void 0===o?void 0:o.slice(0,10).map(e=>C().createElement("div",{key:e,className:"calkit-git-file-item"},e)),((null===(s=xe.changed)||void 0===s?void 0:s.length)||0)>10&&C().createElement("div",{className:"calkit-git-file-more"},"+",((null===(c=xe.changed)||void 0===c?void 0:c.length)||0)-10," more"))),((null===(r=xe.staged)||void 0===r?void 0:r.length)||0)>0&&C().createElement("div",{className:"calkit-git-subsection"},C().createElement("div",{className:"calkit-git-subsection-header",onClick:()=>{fe(e=>{const t=new Set(e);return t.has("staged")?t.delete("staged"):t.add("staged"),t})}},C().createElement("span",{className:"calkit-git-subsection-icon"},ye.has("staged")?"▼":"▶"),C().createElement("span",{className:"calkit-git-subsection-title"},"Staged (",(null===(d=xe.staged)||void 0===d?void 0:d.length)||0,")")),ye.has("staged")&&C().createElement("div",{className:"calkit-git-subsection-items"},null===(m=xe.staged)||void 0===m?void 0:m.slice(0,10).map(e=>C().createElement("div",{key:e,className:"calkit-git-file-item"},e)),((null===(u=xe.staged)||void 0===u?void 0:u.length)||0)>10&&C().createElement("div",{className:"calkit-git-file-more"},"+",((null===(p=xe.staged)||void 0===p?void 0:p.length)||0)-10," more"))),((null===(v=xe.untracked)||void 0===v?void 0:v.length)||0)>0&&C().createElement("div",{className:"calkit-git-subsection"},C().createElement("div",{className:"calkit-git-subsection-header",onClick:()=>{fe(e=>{const t=new Set(e);return t.has("untracked")?t.delete("untracked"):t.add("untracked"),t})}},C().createElement("span",{className:"calkit-git-subsection-icon"},ye.has("untracked")?"▼":"▶"),C().createElement("span",{className:"calkit-git-subsection-title"},"Untracked (",(null===(g=xe.untracked)||void 0===g?void 0:g.length)||0,")")),ye.has("untracked")&&C().createElement("div",{className:"calkit-git-subsection-items"},null===(k=xe.untracked)||void 0===k?void 0:k.slice(0,10).map(e=>C().createElement("div",{key:e,className:"calkit-git-file-item"},e)),((null===(b=xe.untracked)||void 0===b?void 0:b.length)||0)>10&&C().createElement("div",{className:"calkit-git-file-more"},"+",((null===(y=xe.untracked)||void 0===y?void 0:y.length)||0)-10," more"))),0===((null===(E=xe.changed)||void 0===E?void 0:E.length)||0)&&0===((null===(N=xe.staged)||void 0===N?void 0:N.length)||0)&&0===((null===(S=xe.untracked)||void 0===S?void 0:S.length)||0)&&C().createElement("div",{className:"calkit-sidebar-section-empty"},"No changes"),C().createElement("div",{className:"calkit-git-subsection"},C().createElement("div",{className:"calkit-git-subsection-header",onClick:()=>{fe(e=>{const t=new Set(e);return t.has("history")?t.delete("history"):t.add("history"),t})}},C().createElement("span",{className:"calkit-git-subsection-icon"},ye.has("history")?"▼":"▶"),C().createElement("span",{className:"calkit-git-subsection-title"},"Recent history")),ye.has("history")&&C().createElement("div",{className:"calkit-git-subsection-items"},0===Me.length&&C().createElement("div",{className:"calkit-sidebar-section-empty"},"No history"),Me.slice(0,5).map(e=>C().createElement("div",{key:e.hash,className:"calkit-git-history-item"},C().createElement("div",{className:"calkit-git-history-message"},e.message))))))),x&&_.length>0&&"basicInfo"!==e&&"history"!==e&&C().createElement("div",{className:"calkit-sidebar-section-content",onContextMenu:t=>{"environments"===e?(t.preventDefault(),ee({visible:!0,x:t.clientX,y:t.clientY})):"notebooks"===e&&(t.preventDefault(),le({visible:!0,x:t.clientX,y:t.clientY}))}},"environments"===e?_.map(e=>Ye(e)):"notebooks"===e?_.map(e=>Ze(e)):"pipelineStages"===e?_.map(e=>He(e)):_.map(e=>C().createElement("div",{key:e.id,className:"calkit-sidebar-item"},C().createElement("span",{className:"calkit-sidebar-item-label"},e.label)))),x&&0===_.length&&"basicInfo"!==e&&"history"!==e&&C().createElement("div",{className:"calkit-sidebar-section-empty"},"No items found"))},[K,we,Re,Ye,Ze,He,ze,We,Se,Qe,xe,qe,Me,Be]),tt=(0,N.useCallback)(()=>{window.open("https://docs.calkit.org/jupyterlab","_blank")},[]);return C().createElement("div",{className:"calkit-sidebar"},C().createElement("div",{className:"calkit-sidebar-header"},C().createElement("button",{className:"calkit-sidebar-logo",onClick:tt,title:"Open Calkit documentation","aria-label":"Calkit documentation"}),(0,T.G7)("sidebarSectionsMenu")&&C().createElement(ae,{sectionDefs:me,visibleSections:ge,setVisibleSections:ke,showSettingsDropdown:he,setShowSettingsDropdown:be})),C().createElement("div",{className:"calkit-sidebar-content"},me.map(e=>!1===e.toggleable||ge.has(e.id)?et(e.id,e.label,e.icon):null)),(null==Z?void 0:Z.visible)&&P().createPortal(C().createElement("div",{className:"calkit-env-context-menu",style:{left:Z.x,top:Z.y}},Z.env&&C().createElement(C().Fragment,null,C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{const e=Z.env;ee(null),(async()=>{await(0,A.showEnvironmentEditor)({mode:"edit",initialName:e.id,initialKind:e.kind||"unknown",initialPath:e.path,initialPrefix:e.prefix,initialPython:e.python||"3.14",initialPackages:e.packages||[],existingEnvironment:{name:e.id,kind:e.kind||"unknown",path:e.path,prefix:e.prefix,python:e.python||"3.14",packages:e.packages||[]},onSubmit:async({name:t,kind:a,path:n,prefix:i,packages:l,python:o},s)=>{try{await I("environments",{method:"PUT",body:JSON.stringify({existing:s||{name:e.id,kind:e.kind||"unknown",path:e.path,prefix:e.prefix,python:e.python||"3.14",packages:e.packages||[]},updated:{name:t,kind:a,path:n,prefix:i,packages:l,python:o}})}),await D.invalidateQueries({queryKey:["project"]}),await D.invalidateQueries({queryKey:["environments"]})}catch(e){throw console.error("Failed to update environment:",e),e}}})})()}},"Edit environment"),C().createElement("div",{className:"calkit-env-context-separator"})),C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{ee(null),ze()}},"New environment")),document.body),(null==ne?void 0:ne.visible)&&P().createPortal(C().createElement("div",{className:"calkit-env-context-menu",style:{left:ne.x,top:ne.y}},C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{le(null),We()}},"Create new notebook"),C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{le(null),Xe()}},"Register existing notebook")),document.body),(null==ce?void 0:ce.visible)&&P().createPortal(C().createElement("div",{className:"calkit-env-context-menu",style:{left:ce.x,top:ce.y}},C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{re(null),Ge()}},"New stage"),C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{re(null),Ue()}},"Run pipeline")),document.body),(null==pe?void 0:pe.visible)&&pe.stage&&P().createPortal(C().createElement("div",{className:"calkit-env-context-menu",style:{left:pe.x,top:pe.y}},C().createElement("div",{className:"calkit-env-context-item",onClick:()=>{const e=pe.stage;ve(null),Ve(e.id)}},"Run stage")),document.body))};class ve extends i.ReactWidget{constructor(){super(),this._settings=null,this._stateDB=null,this._commands=null,this._hasAttention=!1,this._expandPipelineSectionCallback=null,this._handleStatusChange=e=>{if(this._hasAttention===e)return;this._hasAttention=e;const t=new Set(`${this.title.className||""} calkit-sidebar-tab`.split(/\s+/).filter(Boolean));e?t.add("calkit-sidebar-attention"):t.delete("calkit-sidebar-attention"),this.title.className=Array.from(t).join(" "),this.node.classList.toggle("calkit-sidebar-attention",e)},this.expandPipelineSection=()=>{var e;null===(e=this._expandPipelineSectionCallback)||void 0===e||e.call(this)},this.addClass("calkit-sidebar-widget"),this.title.className="calkit-sidebar-tab"}setSettings(e){this._settings=e,this.update()}setStateDB(e){this._stateDB=e,this.update()}setCommands(e){this._commands=e,this.update()}setExpandPipelineSectionCallback(e){this._expandPipelineSectionCallback=e}render(){return C().createElement(j.QueryClientProvider,{client:D},C().createElement(pe,{settings:this._settings,stateDB:this._stateDB,onStatusChange:this._handleStatusChange,commands:this._commands||void 0,onSetExpandPipelineCallback:this.setExpandPipelineSectionCallback.bind(this)}),P().createPortal(C().createElement(ne.ReactQueryDevtools,{initialIsOpen:!1}),document.body))}}var ge;!function(e){e.labelAsFigure="calkit:label-as-figure",e.labelAsDataset="calkit:label-as-dataset",e.labelAsResult="calkit:label-as-result",e.labelAsTable="calkit:label-as-table",e.removeLabel="calkit:remove-label",e.newNotebookInEnvironment="calkit:new-notebook-in-environment"}(ge||(ge={}));var ke=a(5072),he=a.n(ke),be=a(7825),ye=a.n(be),fe=a(7659),Ee=a.n(fe),Ne=a(5056),Ce=a.n(Ne),we=a(540),Se=a.n(we),xe=a(1113),_e=a.n(xe),Pe=a(5015),je={};je.styleTagTransform=_e(),je.setAttributes=Ce(),je.insert=Ee().bind(null,"head"),je.domAPI=ye(),je.insertStyleElement=Se(),he()(Pe.A,je),Pe.A&&Pe.A.locals&&Pe.A.locals;const Oe={id:"calkit:plugin",description:"A JupyterLab extension for Calkit projects.",autoStart:!0,requires:[n.ILayoutRestorer],optional:[r.ISettingRegistry,d.IStateDB,s.ILauncher,c.INotebookTracker,i.IToolbarWidgetRegistry,m.ITranslator,u.IFileBrowserFactory,p.IMainMenu,l.IStatusBar],activate:(e,t,n,l,s,r,d,u,p,h,E)=>{console.log("JupyterLab extension calkit is activated!");const N=new ve;N.id="calkit-sidebar",N.title.label="",N.title.caption="Calkit",N.title.icon=k,N.setCommands(e.commands),e.shell.add(N,"left");const C=new i.WidgetTracker({namespace:"calkit-sidebar"});if(t.restore(C,{command:"calkit:open-sidebar",name:()=>"calkit-sidebar",args:()=>({})}),C.add(N),e.commands.addCommand("calkit:open-sidebar",{label:"Open Calkit sidebar",execute:()=>{e.shell.activateById(N.id)}}),d&&(0,T.G7)("cellOutputMarking")&&d.addFactory("Cell","calkit-output-marker",e=>{const t=e;if("code"===t.model.type)return function(e,t){const a=(t||m.nullTranslator).load("calkit"),n=new v.CommandRegistry,l=[{value:"none",label:a.__("None")},{value:"figure",label:a.__("Figure")},{value:"dataset",label:a.__("Dataset")},{value:"result",label:a.__("Result")},{value:"table",label:a.__("Table")}];l.forEach(t=>{n.addCommand(`set-output-type-${t.value}`,{label:t.label,execute:()=>{!function(e,t){"none"===t?e.model.deleteMetadata(b):e.model.setMetadata(b,t),f(e)}(e,t.value),y(e,s)}})});const s=new i.ToolbarButton({icon:k,tooltip:a.__("Mark output type"),onClick:()=>{const e=new o.Menu({commands:n});l.forEach(t=>{e.addItem({command:`set-output-type-${t.value}`,args:{}})});const t=s.node.getBoundingClientRect();e.open(t.left,t.bottom)}});return y(e,s),e.model.metadataChanged.connect(()=>{y(e,s),f(e)}),s}(t,u||void 0);const a=new o.Widget;return a.hide(),a}),d&&(0,T.G7)("notebookToolbar")&&d.addFactory("Notebook","calkit-notebook-toolbar",e=>{if(console.log("Creating notebook toolbar for:",e),e instanceof c.NotebookPanel)return function(e,t){return new z(e,t)}(e,u||void 0);console.warn("Widget is not a NotebookPanel:",e);const t=new o.Widget;return t.hide(),t}),h){const{commands:t}=e;t.addCommand("calkit:run-pipeline",{label:"Run pipeline",caption:"Run the current project's pipeline",execute:async()=>{try{X.setRunning(!0,"Running pipeline..."),await I("pipeline/runs",{method:"POST",body:JSON.stringify({targets:[]})}),await D.invalidateQueries({queryKey:["pipeline","status"]}),await D.invalidateQueries({queryKey:["project"]})}catch(e){const t=e instanceof Error?e.message:String(e);console.error("Failed to run pipeline:",t)}finally{X.setRunning(!1)}}}),t.addCommand("calkit:new-notebook",{label:"New notebook",caption:"Create a new notebook in the current folder",isEnabled:()=>!!p,execute:async()=>{var e;const n=null==p?void 0:p.defaultBrowser,i=(null===(e=null==n?void 0:n.model)||void 0===e?void 0:e.path)||"";let l=[];try{const e=await I("environments?notebook_only=1");l=Object.keys(e||{}).map(e=>({id:e,label:e}))}catch(e){console.warn("Failed to fetch environments:",e)}const{showEnvironmentEditor:o}=await Promise.resolve().then(a.bind(a,7445)),{showNotebookRegistration:s}=await Promise.resolve().then(a.bind(a,4503)),c=await s("create",[],l,async()=>{let e=null;return await o({mode:"create",onSubmit:async({name:t,kind:a,path:n,packages:i})=>{await I("environments",{method:"POST",body:JSON.stringify({name:t,kind:a,path:n,packages:i})}),e=t}}),e});if(!c)return;const r=c.path.includes("/")?c.path:[i,c.path].filter(Boolean).join("/");try{await I("notebooks",{method:"POST",body:JSON.stringify({...c,path:r})});const e=await t.execute("docmanager:open",{path:r});try{const t=await I("notebook/kernel",{method:"POST",body:JSON.stringify({path:r,environment:c.environment})});e&&e.sessionContext&&(null==t?void 0:t.name)&&await e.sessionContext.changeKernel({name:t.name})}catch(e){console.warn("Failed to set kernel automatically:",e)}}catch(e){console.error("Failed to create/open notebook:",e)}}}),t.addCommand("calkit:new-pipeline-stage",{label:"New pipeline stage",caption:"Create a new pipeline stage",execute:async()=>{try{await de({title:"Create new stage",kind:se[0].value,environment:"",inputs:[],outputs:[],attributes:{},onSave:async({name:e,inputs:t,outputs:a,kind:n,environment:i,attributes:l})=>{if(e.trim())try{await I("pipeline/stage",{method:"PUT",body:JSON.stringify({name:e,kind:n,environment:i,inputs:t,outputs:a,...l})}),await D.invalidateQueries({queryKey:["project"]}),await D.invalidateQueries({queryKey:["pipeline","status"]})}catch(e){console.error("Failed to create pipeline stage:",e)}}})}catch(e){console.error("Failed to open pipeline stage editor:",e)}}}),t.addCommand("calkit:new-publication",{label:"New publication",caption:"Create a new publication",icon:k,execute:async()=>{console.log("New publication - not yet implemented")}}),t.addCommand("calkit:save-project",{label:"Save project",caption:"Commit project changes",execute:async()=>{try{const e=await I("git/status"),t=new Set([...e.tracked||[]]),a=[...e.changed||[],...e.untracked||[]].map(a=>{var n;return{path:a,store_in_dvc:!1,stage:!0,tracked:t.has(a),size:null===(n=e.sizes)||void 0===n?void 0:n[a]}}),n=a.length?`Update ${a.map(e=>e.path).slice(0,5).join(", ")}${a.length>5?", …":""}`:"Update project",i=await x(n,a);if(!i)return;const l=i.files.filter(e=>e.ignore_forever),o=i.files.filter(e=>e.stage);if(l.length>0&&await I("git/ignore",{method:"POST",body:JSON.stringify({paths:l.map(e=>e.path)})}),0===o.length)return;await I("git/commit",{method:"POST",body:JSON.stringify({message:i.message,files:o})}),i.pushAfter&&await I("git/push",{method:"POST"})}catch(e){console.error("Failed to save project:",e)}}});const n=new o.Menu({commands:t});n.title.label="Calkit",n.addItem({command:"calkit:run-pipeline"}),n.addItem({command:"calkit:new-notebook"}),(0,T.G7)("pipelineStages")&&n.addItem({command:"calkit:new-pipeline-stage"}),(0,T.G7)("publications")&&n.addItem({command:"calkit:new-publication"}),(0,T.G7)("history")&&n.addItem({command:"calkit:save-project"}),n.addItem({type:"separator"}),n.addItem({command:"calkit:open-sidebar"}),(0,T.G7)("calkitActionsMenu")&&h.addMenu(n,{rank:90})}if(s&&(0,T.G7)("launcherItems")&&(s.add({command:"calkit:new-notebook",category:"Calkit",rank:1}),(0,T.G7)("pipelineStages")&&s.add({command:"calkit:new-pipeline-stage",category:"Calkit",rank:2}),(0,T.G7)("publications")&&s.add({command:"calkit:new-publication",category:"Calkit",rank:3})),p&&(0,T.G7)("fileBrowserMenu")){try{!function(e,t,a){const{commands:n}=e,i=(a||m.nullTranslator).load("calkit"),l=()=>{const e=t.tracker.currentWidget;if(!e)return null;const a=Array.from(e.selectedItems());return 1!==a.length?null:a[0].path},o=()=>{const e=t.tracker.currentWidget;return!!e&&1===Array.from(e.selectedItems()).length},s=()=>{const e=t.tracker.currentWidget;if(!e)return!1;const a=Array.from(e.selectedItems());return 1===a.length&&"directory"!==a[0].type};n.addCommand(ge.newNotebookInEnvironment,{label:i.__("New notebook"),icon:k,isEnabled:()=>!!t,execute:async()=>{var a;const n=null==t?void 0:t.defaultBrowser,i=(null===(a=null==n?void 0:n.model)||void 0===a?void 0:a.path)||"",l=t.tracker.currentWidget,o=l?Array.from(l.selectedItems()):[],s=1===o.length&&"directory"===o[0].type?o[0].path:i;let c=[];try{const e=await I("environments?notebook_only=1");c=Object.keys(e||{}).map(e=>({id:e,label:e}))}catch(e){console.warn("Failed to fetch environments:",e)}const r=await(0,ie.showNotebookRegistration)("create",[],c,async()=>{let e=null;return await(0,A.showEnvironmentEditor)({mode:"create",onSubmit:async({name:t,kind:a,path:n,packages:i})=>{await I("environments",{method:"POST",body:JSON.stringify({name:t,kind:a,path:n,packages:i})}),e=t}}),e});if(!r)return;const d=r.path.includes("/")?r.path:[s,r.path].filter(Boolean).join("/");try{await I("notebooks",{method:"POST",body:JSON.stringify({...r,path:d})});const t=await e.commands.execute("docmanager:open",{path:d});try{const e=await I("notebook/kernel",{method:"POST",body:JSON.stringify({path:d,environment:r.environment})});t&&t.sessionContext&&(null==e?void 0:e.name)&&await t.sessionContext.changeKernel({name:e.name})}catch(e){console.warn("Failed to set kernel automatically:",e)}}catch(e){console.error("Failed to create/open notebook:",e)}}}),n.addCommand(ge.labelAsFigure,{label:i.__("Label as figure"),icon:k,execute:async()=>{const e=l();if(e)try{await I("label",{method:"POST",body:JSON.stringify({path:e,label:"figure"})}),console.log(`Labeled ${e} as figure`)}catch(e){console.error("Failed to label file:",e)}},isVisible:s}),n.addCommand(ge.labelAsDataset,{label:i.__("Label as dataset"),icon:k,execute:async()=>{const e=l();if(e)try{await I("label",{method:"POST",body:JSON.stringify({path:e,label:"dataset"})}),console.log(`Labeled ${e} as dataset`)}catch(e){console.error("Failed to label file:",e)}},isVisible:o}),n.addCommand(ge.labelAsResult,{label:i.__("Label as result"),icon:k,execute:async()=>{const e=l();if(e)try{await I("label",{method:"POST",body:JSON.stringify({path:e,label:"result"})}),console.log(`Labeled ${e} as result`)}catch(e){console.error("Failed to label file:",e)}},isVisible:s}),n.addCommand(ge.labelAsTable,{label:i.__("Label as table"),icon:k,execute:async()=>{const e=l();if(e)try{await I("label",{method:"POST",body:JSON.stringify({path:e,label:"table"})}),console.log(`Labeled ${e} as table`)}catch(e){console.error("Failed to label file:",e)}},isVisible:s}),n.addCommand(ge.removeLabel,{label:i.__("Remove label"),execute:async()=>{const e=l();if(e)try{await I("label",{method:"DELETE",body:JSON.stringify({path:e})}),console.log(`Removed label from ${e}`)}catch(e){console.error("Failed to remove label:",e)}},isVisible:o})}(e,p,u||void 0)}catch(e){console.error("calkit: addCommands failed",e)}try{!function(e,t){const a=(t||m.nullTranslator).load("calkit"),n=new g.RankedMenu({commands:e.commands});n.title.label=a.__("Calkit"),n.title.icon=k,n.addItem({command:ge.newNotebookInEnvironment,rank:0}),n.addItem({type:"separator",rank:.5}),e.contextMenu.addItem({type:"submenu",submenu:n,selector:".jp-DirListing-content",rank:3})}(e,u||void 0)}catch(e){console.error("calkit: addContextMenuItems failed",e)}}if(E){e.commands.addCommand("calkit:open-sidebar-pipeline",{label:"Show pipeline status",execute:()=>{var t;e.shell.activateById(N.id),null===(t=N.expandPipelineSection)||void 0===t||t.call(N)}});const t=new H(()=>{e.commands.execute("calkit:open-sidebar-pipeline")});E.registerStatusItem("calkit-pipeline-status",{item:t,align:"left",priority:10})}n&&n.load(Oe.id).then(e=>{console.log("calkit settings loaded:",e.composite),N.setSettings(e)}).catch(e=>{console.error("Failed to load settings for calkit.",e)}),l&&N.setStateDB(l),I("hello").then(e=>{console.log(e)}).catch(e=>{console.error(`The calkit server extension appears to be missing.\n${e}`)})}},Fe=Oe},6897(e,t,a){a.d(t,{G7:()=>i});const n={basicInfo:!0,environments:!0,pipelineStages:!0,notebooks:!0,history:!1,setup:!1,notebookToolbar:!0,advancedEnvironments:!1,cellOutputMarking:!1,fileBrowserMenu:!1,figures:!1,datasets:!1,questions:!1,publications:!1,notes:!1,models:!1,launcherItems:!1,autoDetectInputsOutputs:!1,createNotebook:!1,createPipelineStage:!1,notebookInfoButton:!1,calkitActionsMenu:!1,notebooksSidebar:!1,sidebarSectionsMenu:!1};function i(e){return n[e]}},7445(e,t,a){a.d(t,{showEnvironmentEditor:()=>d});var n=a(3345),i=a.n(n),l=a(14),o=a(6897);const s={PyData:["numpy","scipy","pandas","polars","pyarrow","matplotlib","statsmodels","scikit-learn","seaborn","duckdb","plotly","altair","bokeh"]},c=({initialName:e="",initialKind:t="uv-venv",initialPath:a="",initialPrefix:l="",initialPackages:c=[],initialPython:r="3.14",mode:d,onUpdate:m,onValidityChange:u})=>{const p=i().useCallback((e,t="")=>{switch(e){case"uv-venv":case"venv":return`.calkit/envs/${t||"{name}"}/requirements.txt`;case"conda":return"environment.yml";case"pixi":return"pixi.toml";case"julia":return"project/Project.toml";default:return""}},[]),v=i().useCallback((e,t="")=>{switch(e){case"uv-venv":case"venv":return`.calkit/envs/${t||"{name}"}/.venv`;default:return""}},[]),[g,k]=(0,n.useState)(e),[h,b]=(0,n.useState)(t),[y,f]=(0,n.useState)(a||p(t,e)),[E,N]=(0,n.useState)(l||v(t,e)),[C,w]=(0,n.useState)(r),[S,x]=(0,n.useState)(()=>{const e=c||[];return"uv-venv"!==t&&"venv"!==t||e.includes("ipykernel")?e:["ipykernel",...e]}),[_,P]=(0,n.useState)(""),[j,O]=(0,n.useState)(!1),[F,I]=(0,n.useState)("edit"===d&&!!a),[D,A]=(0,n.useState)("edit"===d&&!!l),T=(0,n.useRef)(null);(0,n.useEffect)(()=>{const e=e=>{"Enter"===e.key&&T.current===document.activeElement&&(e.preventDefault(),e.stopImmediatePropagation(),q())};return document.addEventListener("keydown",e,!0),()=>{document.removeEventListener("keydown",e,!0)}},[_,S]),i().useEffect(()=>{const e=!!g.trim()&&!!(t=g).trim()&&/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(t);var t;u&&u(e)},[g,u]),i().useEffect(()=>{const e={name:g,kind:h,path:y,packages:S};"uv-venv"!==h&&"venv"!==h||(e.prefix=E,e.python=C,S.includes("ipykernel")||(e.packages=[...S,"ipykernel"])),m(e)},[g,h,y,E,S,C,m]),i().useEffect(()=>{"create"===d&&(F||f(p(h,g)),D||N(v(h,g)))},[g,h,d,F,D,p,v]);const q=()=>{_.trim()&&!S.includes(_.trim())&&(x([...S,_.trim()]),P(""))},M="uv-venv"===h||"venv"===h||"julia"===h||"conda"===h;return i().createElement("div",{className:"calkit-env-editor"},i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",{htmlFor:"env-name"},"Name:"),i().createElement("input",{id:"env-name",type:"text",value:g,onChange:e=>k(e.target.value),disabled:"edit"===d,placeholder:"ex: analysis",autoFocus:"create"===d,autoComplete:"off"})),i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",{htmlFor:"env-kind"},"Kind:"),i().createElement("select",{id:"env-kind",value:h,onChange:e=>{return t=e.target.value,b(t),void("create"===d&&(F||f(p(t,g)),D||N(v(t,g))));var t}},i().createElement("option",{value:"uv-venv"},"uv-venv (Python)"),i().createElement("option",{value:"venv"},"venv (Python)"),(0,o.G7)("advancedEnvironments")&&i().createElement(i().Fragment,null,i().createElement("option",{value:"julia"},"Julia"),i().createElement("option",{value:"conda"},"Conda"),i().createElement("option",{value:"docker"},"Docker")))),M&&i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",null,"Packages:"),i().createElement("div",{className:"calkit-env-packages-list"},S.map(e=>i().createElement("div",{key:e,className:"calkit-env-package-item"},i().createElement("span",{className:"calkit-env-package-name"},e),i().createElement("button",{type:"button",className:"calkit-env-package-remove",onClick:()=>(e=>{x(S.filter(t=>t!==e))})(e),title:"Remove package"},"×")))),i().createElement("div",{className:"calkit-env-package-input-container"},i().createElement("input",{ref:T,type:"text",value:_,onChange:e=>P(e.target.value),placeholder:"Add package...",className:"calkit-env-package-add-input",autoComplete:"off"}),i().createElement("button",{type:"button",onClick:()=>{var e;q(),null===(e=T.current)||void 0===e||e.focus()},className:"calkit-env-package-add-button",disabled:!_.trim()},"+"))),M&&i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",null,"Package groups:"),i().createElement("div",{className:"calkit-env-package-groups"},Object.keys(s).map(e=>i().createElement("button",{key:e,type:"button",className:"calkit-env-package-group-btn",onClick:()=>(e=>{const t=s[e]||[],a=new Set([...S,...t,..."uv-venv"===h||"venv"===h||"conda"===h||"julia"===h?["ipykernel"]:[]]);x(Array.from(a).sort())})(e),title:`Add packages from ${e}: ${s[e].join(", ")}`},"+ ",e)))),("uv-venv"===h||"venv"===h)&&i().createElement("div",{className:"calkit-env-editor-advanced"},i().createElement("div",{className:"calkit-env-editor-advanced-toggle",onClick:()=>O(!j)},i().createElement("span",{className:"calkit-env-editor-chevron"},j?"▼":"▶"),i().createElement("span",null,"Advanced")),j&&i().createElement("div",{className:"calkit-env-editor-advanced-fields"},i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",{htmlFor:"env-python"},"Python version:"),i().createElement("input",{id:"env-python",type:"text",value:C,onChange:e=>w(e.target.value),placeholder:"3.14",title:"Python version for the environment",autoComplete:"off"})),i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",{htmlFor:"env-path"},"Path:"),i().createElement("input",{id:"env-path",type:"text",value:y,onChange:e=>{f(e.target.value),I(!0)},placeholder:p(h,g),title:"Path to requirements/environment file",autoComplete:"off"})),i().createElement("div",{className:"calkit-env-editor-field"},i().createElement("label",{htmlFor:"env-prefix"},"Virtual environment prefix:"),i().createElement("input",{id:"env-prefix",type:"text",value:E,onChange:e=>{N(e.target.value),A(!0)},placeholder:v(h,g),title:"Path to virtual environment directory",autoComplete:"off"})))))};class r extends l.ReactWidget{constructor(e){super(),this.isValid=!1,this.addClass("calkit-environment-editor-dialog"),this.mode=e.mode;const t=e.initialName||"",a=e.initialKind||"uv-venv",n=((e,t="")=>{switch(e){case"uv-venv":case"venv":return`.calkit/envs/${t||"{name}"}/requirements.txt`;case"conda":return"environment.yml";case"pixi":return"pixi.toml";case"julia":return"project/Project.toml";default:return""}})(a,t),i=((e,t="")=>{switch(e){case"uv-venv":case"venv":return`.calkit/envs/${t||"{name}"}/.venv`;default:return""}})(a,t),l=e.initialPath||n,o=e.initialPrefix||("uv-venv"===a||"venv"===a?i:"");this.initialData={name:t,kind:a,path:l,prefix:o,packages:e.initialPackages||[],python:e.initialPython||"3.14"},this.data={...this.initialData}}render(){return i().createElement(c,{initialName:this.data.name,initialKind:this.data.kind,initialPath:this.data.path,initialPrefix:this.data.prefix,initialPackages:this.data.packages,initialPython:this.data.python,mode:this.mode,onUpdate:e=>{this.data=e},onValidityChange:e=>{this.isValid=e,this.onValidityChange&&this.onValidityChange(e)}})}getData(){return this.data}getInitialData(){return this.initialData}getIsValid(){return this.isValid}}async function d(e){const t=new r(e),a=new l.Dialog({title:"create"===e.mode?"Create environment":"Edit environment",body:t,buttons:[l.Dialog.cancelButton(),l.Dialog.okButton({label:"create"===e.mode?"Create":"Save"})]});t.onValidityChange=e=>{var t;const n=null===(t=a.node)||void 0===t?void 0:t.querySelector(".jp-mod-accept");n&&(n.disabled=!e)};const n=new MutationObserver(()=>{var i,l,o;if(null===(i=a.node)||void 0===i?void 0:i.isConnected){n.disconnect(),(()=>{var e;const n=null===(e=a.node)||void 0===e?void 0:e.querySelector(".jp-mod-accept");n&&(n.disabled=!t.getIsValid())})();const i=null===(l=a.node)||void 0===l?void 0:l.querySelector(".jp-mod-accept");if(i){const n=i.cloneNode(!0);null===(o=i.parentNode)||void 0===o||o.replaceChild(n,i),n.addEventListener("click",async n=>{var i,l;n.preventDefault(),n.stopPropagation();const o=t.getData(),s=t.getInitialData();if(!o.name.trim()||!(c=o.name).trim()||!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(c))return;var c;if(("uv-venv"===o.kind||"venv"===o.kind)&&0===o.packages.length)return;const r=null===(i=a.node)||void 0===i?void 0:i.querySelector(".jp-mod-accept"),d=null===(l=a.node)||void 0===l?void 0:l.querySelector(".jp-mod-reject");if(r){r.disabled=!0;const e=document.createElement("span");e.className="jp-Spinner",e.setAttribute("role","progressbar"),r.textContent="",r.appendChild(e)}d&&(d.disabled=!0);try{"edit"===e.mode?await e.onSubmit(o,s):await e.onSubmit(o),a.resolve(0)}catch(t){if(r){r.disabled=!1;const t=r.querySelector(".jp-Spinner");t&&t.remove(),r.textContent="create"===e.mode?"Create":"Save"}d&&(d.disabled=!1);const n="See the server console for details.",i="create"===e.mode?"create":"update",l=document.createElement("div");l.className="calkit-error-overlay",l.style.cssText="\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n ";const o=document.createElement("div");o.style.cssText="\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n padding: 20px;\n min-width: 300px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n ";const s=document.createElement("h3");s.textContent=`Failed to ${i} environment`,s.style.cssText="\n margin: 0 0 12px 0;\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n font-weight: 600;\n ";const c=document.createElement("p");c.textContent=n,c.style.cssText="\n margin: 0 0 16px 0;\n color: var(--jp-ui-font-color1);\n ";const m=document.createElement("div");m.style.cssText="\n display: flex;\n justify-content: flex-end;\n ";const u=document.createElement("button");if(u.textContent="OK",u.type="button",u.className="jp-Dialog-button jp-mod-styled jp-mod-accept",u.style.cssText="\n background: var(--jp-brand-color1);\n color: var(--jp-ui-inverse-font-color1);\n border: none;\n border-radius: 3px;\n padding: 6px 16px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 60px;\n ",u.addEventListener("click",e=>(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),l.remove(),!1),!1),m.appendChild(u),o.appendChild(s),o.appendChild(c),o.appendChild(m),l.appendChild(o),l.addEventListener("click",e=>{e.target===l&&e.stopPropagation()},!1),a.node&&a.node.parentNode){const e=a.node.parentNode,t=a.node.getBoundingClientRect();l.style.position="fixed",l.style.top=t.top+"px",l.style.left=t.left+"px",l.style.width=t.width+"px",l.style.height=t.height+"px",e.appendChild(l)}else a.node&&a.node.appendChild(l)}})}}});n.observe(document.body,{childList:!0,subtree:!0}),await a.launch()}}}]);
@@ -1 +1 @@
1
- var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,l,u,f,s,d,c,p,h,b,v,m,y,g,j,w,k,S={4717(e,r,t){var a={"./index":()=>Promise.all([t.e(867),t.e(345),t.e(909)]).then(()=>()=>t(5909)),"./extension":()=>Promise.all([t.e(867),t.e(345),t.e(909)]).then(()=>()=>t(5909)),"./style":()=>t.e(502).then(()=>()=>t(502))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},P={};function E(e){var r=P[e];if(void 0!==r)return r.exports;var t=P[e]={id:e,exports:{}};return S[e](t,t.exports,E),t.exports}E.m=S,E.c=P,E.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return E.d(r,{a:r}),r},E.d=(e,r)=>{for(var t in r)E.o(r,t)&&!E.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},E.f={},E.e=e=>Promise.all(Object.keys(E.f).reduce((r,t)=>(E.f[t](e,r),r),[])),E.u=e=>e+"."+{502:"9a2c5772a15466e923ef",695:"2c41003a452d43d2b358",867:"a42a046aa5108f54f8fb",909:"20c9c8cf93c148310982",946:"050af2abf7845cfbdbd2"}[e]+".js?v="+{502:"9a2c5772a15466e923ef",695:"2c41003a452d43d2b358",867:"a42a046aa5108f54f8fb",909:"20c9c8cf93c148310982",946:"050af2abf7845cfbdbd2"}[e],E.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),E.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="calkit:",E.l=(t,a,n,o)=>{if(e[t])e[t].push(a);else{var i,l;if(void 0!==n)for(var u=document.getElementsByTagName("script"),f=0;f<u.length;f++){var s=u[f];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+n){i=s;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",E.nc&&i.setAttribute("nonce",E.nc),i.setAttribute("data-webpack",r+n),i.src=t),e[t]=[a];var d=(r,a)=>{i.onerror=i.onload=null,clearTimeout(c);var n=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},c=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},E.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{E.S={};var e={},r={};E.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];E.o(E.S,t)||(E.S[t]={});var o=E.S[t],i="calkit",l=(e,r,t,a)=>{var n=o[e]=o[e]||{},l=n[r];(!l||!l.loaded&&(!a!=!l.eager?a:i>l.from))&&(n[r]={get:t,from:i,eager:!!a})},u=[];return"default"===t&&(l("@tanstack/react-query-devtools","5.91.1",()=>E.e(695).then(()=>()=>E(6695))),l("@tanstack/react-query","5.90.12",()=>Promise.all([E.e(946),E.e(345)]).then(()=>()=>E(5946))),l("calkit","0.1.0",()=>Promise.all([E.e(867),E.e(345),E.e(909)]).then(()=>()=>E(5909)))),e[t]=u.length?Promise.all(u).then(()=>e[t]=1):1}}})(),(()=>{var e;E.g.importScripts&&(e=E.g.location+"");var r=E.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),E.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},a=(e,r)=>{e=t(e),r=t(r);for(var a=0;;){if(a>=e.length)return a<r.length&&"u"!=(typeof r[a])[0];var n=e[a],o=(typeof n)[0];if(a>=r.length)return"u"==o;var i=r[a],l=(typeof i)[0];if(o!=l)return"o"==o&&"n"==l||"s"==l||"u"==o;if("o"!=o&&"u"!=o&&n!=i)return n<i;a++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o<e.length;o++)a--,t+="u"==(typeof(l=e[o]))[0]?"-":(a>0?".":"")+(a=2,l);return t}var i=[];for(o=1;o<e.length;o++){var l=e[o];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():n(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var a=e[0],n=a<0;n&&(a=-a-1);for(var i=0,l=1,u=!0;;l++,i++){var f,s,d=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(f=r[i]))[0]))return!u||("u"==d?l>a&&!n:""==d!=n);if("u"==s){if(!u||"u"!=d)return!1}else if(u)if(d==s)if(l<=a){if(f!=e[l])return!1}else{if(n?f>e[l]:f<e[l])return!1;f!=e[l]&&(u=!1)}else if("s"!=d&&"n"!=d){if(n||l<=a)return!1;u=!1,l--}else{if(l<=a||s<d!=n)return!1;u=!1}else"s"!=d&&"n"!=d&&(u=!1,l--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var h=e[i];c.push(1==h?p()|p():2==h?p()&p():h?o(h,r):!p())}return!!p()},i=(e,r)=>e&&E.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),f=(e,r,t,n)=>{var i=n?u(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},s=(e,r,t)=>{var n=t?u(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},d=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(a)+")",c=(e,r,t,a,o)=>{var i=e[t];return"No satisfying version ("+n(a)+")"+(o?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map(e=>e+" from "+i[e].from).join(", ")},p=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(b=e=>function(r,t,a,n,o){var i=E.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,E.S[r],t,!1,n,o)):e(r,E.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!i(r,t))return v(e,t,o);var u=f(r,t,n,a);return u?l(u):o?o():void p(c(r,e,t,n,a))}),y=b((e,r,t,a,n,u)=>{if(!i(r,t))return v(e,t,u);var f=s(r,t,a);return o(n,f)||h(d(r,t,f,n)),l(r[t][f])}),g={},j={3345:()=>y("default","react",!1,[1,18,2,0]),14:()=>y("default","@jupyterlab/apputils",!1,[1,4,6,2]),428:()=>y("default","@jupyterlab/notebook",!1,[1,4,5,2]),489:()=>y("default","@jupyterlab/application",!1,[1,4,5,2]),1247:()=>y("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",1]),2570:()=>y("default","@jupyterlab/translation",!1,[1,4,5,2]),2830:()=>y("default","@jupyterlab/services",!1,[1,7,5,2]),2840:()=>y("default","@jupyterlab/ui-components",!1,[1,4,5,2]),3083:()=>y("default","@jupyterlab/launcher",!1,[1,4,5,2]),3205:()=>y("default","@jupyterlab/mainmenu",!1,[1,4,5,2]),3712:()=>m("default","@tanstack/react-query",!1,[1,5,32,0],()=>E.e(946).then(()=>()=>E(5946))),5014:()=>y("default","@jupyterlab/statusbar",!1,[1,4,5,2]),5614:()=>y("default","@jupyterlab/statedb",!1,[1,4,5,2]),6167:()=>y("default","@lumino/commands",!1,[1,2,0,1]),6469:()=>y("default","@jupyterlab/coreutils",!1,[1,6,5,2]),7034:()=>m("default","@tanstack/react-query-devtools",!1,[1,5,32,0],()=>E.e(695).then(()=>()=>E(6695))),7628:()=>y("default","react-dom",!1,[1,18,2,0]),8490:()=>y("default","@jupyterlab/settingregistry",!1,[1,4,5,2]),8581:()=>y("default","@jupyterlab/filebrowser",!1,[1,4,5,2])},w={345:[3345],909:[14,428,489,1247,2570,2830,2840,3083,3205,3712,5014,5614,6167,6469,7034,7628,8490,8581]},k={},E.f.consumes=(e,r)=>{E.o(w,e)&&w[e].forEach(e=>{if(E.o(g,e))return r.push(g[e]);if(!k[e]){var t=r=>{g[e]=0,E.m[e]=t=>{delete E.c[e],t.exports=r()}};k[e]=!0;var a=r=>{delete g[e],E.m[e]=t=>{throw delete E.c[e],r}};try{var n=j[e]();n.then?r.push(g[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{E.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={371:0};E.f.j=(r,t)=>{var a=E.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(345!=r){var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=E.p+E.u(r),i=new Error;E.l(o,t=>{if(E.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}else e[r]=0};var r=(r,t)=>{var a,n,[o,i,l]=t,u=0;if(o.some(r=>0!==e[r])){for(a in i)E.o(i,a)&&(E.m[a]=i[a]);l&&l(E)}for(r&&r(t);u<o.length;u++)n=o[u],E.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunkcalkit=self.webpackChunkcalkit||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),E.nc=void 0;var T=E(4717);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB).calkit=T})();
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,l,u,f,s,d,c,p,h,b,v,m,y,g,j,w,k,S={4717(e,r,t){var a={"./index":()=>Promise.all([t.e(867),t.e(345),t.e(909)]).then(()=>()=>t(5909)),"./extension":()=>Promise.all([t.e(867),t.e(345),t.e(909)]).then(()=>()=>t(5909)),"./style":()=>t.e(502).then(()=>()=>t(502))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},P={};function E(e){var r=P[e];if(void 0!==r)return r.exports;var t=P[e]={id:e,exports:{}};return S[e](t,t.exports,E),t.exports}E.m=S,E.c=P,E.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return E.d(r,{a:r}),r},E.d=(e,r)=>{for(var t in r)E.o(r,t)&&!E.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},E.f={},E.e=e=>Promise.all(Object.keys(E.f).reduce((r,t)=>(E.f[t](e,r),r),[])),E.u=e=>e+"."+{502:"9a2c5772a15466e923ef",695:"2c41003a452d43d2b358",867:"a42a046aa5108f54f8fb",909:"bc803769ea27551457d9",946:"050af2abf7845cfbdbd2"}[e]+".js?v="+{502:"9a2c5772a15466e923ef",695:"2c41003a452d43d2b358",867:"a42a046aa5108f54f8fb",909:"bc803769ea27551457d9",946:"050af2abf7845cfbdbd2"}[e],E.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),E.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="calkit:",E.l=(t,a,n,o)=>{if(e[t])e[t].push(a);else{var i,l;if(void 0!==n)for(var u=document.getElementsByTagName("script"),f=0;f<u.length;f++){var s=u[f];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==r+n){i=s;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",E.nc&&i.setAttribute("nonce",E.nc),i.setAttribute("data-webpack",r+n),i.src=t),e[t]=[a];var d=(r,a)=>{i.onerror=i.onload=null,clearTimeout(c);var n=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},c=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},E.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{E.S={};var e={},r={};E.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];E.o(E.S,t)||(E.S[t]={});var o=E.S[t],i="calkit",l=(e,r,t,a)=>{var n=o[e]=o[e]||{},l=n[r];(!l||!l.loaded&&(!a!=!l.eager?a:i>l.from))&&(n[r]={get:t,from:i,eager:!!a})},u=[];return"default"===t&&(l("@tanstack/react-query-devtools","5.91.1",()=>E.e(695).then(()=>()=>E(6695))),l("@tanstack/react-query","5.90.12",()=>Promise.all([E.e(946),E.e(345)]).then(()=>()=>E(5946))),l("calkit","0.1.0",()=>Promise.all([E.e(867),E.e(345),E.e(909)]).then(()=>()=>E(5909)))),e[t]=u.length?Promise.all(u).then(()=>e[t]=1):1}}})(),(()=>{var e;E.g.importScripts&&(e=E.g.location+"");var r=E.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),E.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},a=(e,r)=>{e=t(e),r=t(r);for(var a=0;;){if(a>=e.length)return a<r.length&&"u"!=(typeof r[a])[0];var n=e[a],o=(typeof n)[0];if(a>=r.length)return"u"==o;var i=r[a],l=(typeof i)[0];if(o!=l)return"o"==o&&"n"==l||"s"==l||"u"==o;if("o"!=o&&"u"!=o&&n!=i)return n<i;a++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,o=1;o<e.length;o++)a--,t+="u"==(typeof(l=e[o]))[0]?"-":(a>0?".":"")+(a=2,l);return t}var i=[];for(o=1;o<e.length;o++){var l=e[o];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():n(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var a=e[0],n=a<0;n&&(a=-a-1);for(var i=0,l=1,u=!0;;l++,i++){var f,s,d=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(s=(typeof(f=r[i]))[0]))return!u||("u"==d?l>a&&!n:""==d!=n);if("u"==s){if(!u||"u"!=d)return!1}else if(u)if(d==s)if(l<=a){if(f!=e[l])return!1}else{if(n?f>e[l]:f<e[l])return!1;f!=e[l]&&(u=!1)}else if("s"!=d&&"n"!=d){if(n||l<=a)return!1;u=!1,l--}else{if(l<=a||s<d!=n)return!1;u=!1}else"s"!=d&&"n"!=d&&(u=!1,l--)}}var c=[],p=c.pop.bind(c);for(i=1;i<e.length;i++){var h=e[i];c.push(1==h?p()|p():2==h?p()&p():h?o(h,r):!p())}return!!p()},i=(e,r)=>e&&E.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),f=(e,r,t,n)=>{var i=n?u(e[r]):e[r];return(r=Object.keys(i).reduce((e,r)=>!o(t,r)||e&&!a(e,r)?e:r,0))&&i[r]},s=(e,r,t)=>{var n=t?u(e[r]):e[r];return Object.keys(n).reduce((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e,0)},d=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(a)+")",c=(e,r,t,a,o)=>{var i=e[t];return"No satisfying version ("+n(a)+")"+(o?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map(e=>e+" from "+i[e].from).join(", ")},p=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>p("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(b=e=>function(r,t,a,n,o){var i=E.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,E.S[r],t,!1,n,o)):e(r,E.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!i(r,t))return v(e,t,o);var u=f(r,t,n,a);return u?l(u):o?o():void p(c(r,e,t,n,a))}),y=b((e,r,t,a,n,u)=>{if(!i(r,t))return v(e,t,u);var f=s(r,t,a);return o(n,f)||h(d(r,t,f,n)),l(r[t][f])}),g={},j={3345:()=>y("default","react",!1,[1,18,2,0]),14:()=>y("default","@jupyterlab/apputils",!1,[1,4,6,2]),428:()=>y("default","@jupyterlab/notebook",!1,[1,4,5,2]),489:()=>y("default","@jupyterlab/application",!1,[1,4,5,2]),1247:()=>y("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",1]),2570:()=>y("default","@jupyterlab/translation",!1,[1,4,5,2]),2830:()=>y("default","@jupyterlab/services",!1,[1,7,5,2]),2840:()=>y("default","@jupyterlab/ui-components",!1,[1,4,5,2]),3083:()=>y("default","@jupyterlab/launcher",!1,[1,4,5,2]),3205:()=>y("default","@jupyterlab/mainmenu",!1,[1,4,5,2]),3712:()=>m("default","@tanstack/react-query",!1,[1,5,32,0],()=>E.e(946).then(()=>()=>E(5946))),5014:()=>y("default","@jupyterlab/statusbar",!1,[1,4,5,2]),5614:()=>y("default","@jupyterlab/statedb",!1,[1,4,5,2]),6167:()=>y("default","@lumino/commands",!1,[1,2,0,1]),6469:()=>y("default","@jupyterlab/coreutils",!1,[1,6,5,2]),7034:()=>m("default","@tanstack/react-query-devtools",!1,[1,5,32,0],()=>E.e(695).then(()=>()=>E(6695))),7628:()=>y("default","react-dom",!1,[1,18,2,0]),8490:()=>y("default","@jupyterlab/settingregistry",!1,[1,4,5,2]),8581:()=>y("default","@jupyterlab/filebrowser",!1,[1,4,5,2])},w={345:[3345],909:[14,428,489,1247,2570,2830,2840,3083,3205,3712,5014,5614,6167,6469,7034,7628,8490,8581]},k={},E.f.consumes=(e,r)=>{E.o(w,e)&&w[e].forEach(e=>{if(E.o(g,e))return r.push(g[e]);if(!k[e]){var t=r=>{g[e]=0,E.m[e]=t=>{delete E.c[e],t.exports=r()}};k[e]=!0;var a=r=>{delete g[e],E.m[e]=t=>{throw delete E.c[e],r}};try{var n=j[e]();n.then?r.push(g[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{E.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={371:0};E.f.j=(r,t)=>{var a=E.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(345!=r){var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=E.p+E.u(r),i=new Error;E.l(o,t=>{if(E.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}else e[r]=0};var r=(r,t)=>{var a,n,[o,i,l]=t,u=0;if(o.some(r=>0!==e[r])){for(a in i)E.o(i,a)&&(E.m[a]=i[a]);l&&l(E)}for(r&&r(t);u<o.length;u++)n=o[u],E.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunkcalkit=self.webpackChunkcalkit||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),E.nc=void 0;var T=E(4717);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB).calkit=T})();
@@ -0,0 +1,16 @@
1
+ """Tests for JupyterLab extension server routes."""
2
+
3
+ import json
4
+
5
+
6
+ async def test_hello(jp_fetch):
7
+ response = await jp_fetch("calkit", "hello")
8
+ assert response.code == 200
9
+ payload = json.loads(response.body)
10
+ assert payload == {
11
+ "data": (
12
+ "Hello, world!"
13
+ " This is the '/calkit/hello' endpoint."
14
+ " Try visiting me in your browser!"
15
+ ),
16
+ }
@@ -39,9 +39,9 @@ def test_get_remotes(tmp_dir):
39
39
 
40
40
 
41
41
  def test_hash_directory():
42
- res = calkit.dvc.hash_directory("test/dvc-md5-dir")
43
- print("CWD:", os.getcwd())
44
- print("Contents:", os.listdir("test/dvc-md5-dir"))
42
+ this_dir = os.path.dirname(__file__)
43
+ fpath = os.path.join(this_dir, "..", "..", "test", "dvc-md5-dir")
44
+ res = calkit.dvc.hash_directory(fpath)
45
45
  assert res["nfiles"] == 1
46
46
  assert res["size"] == 1226
47
47
  assert res["hash"] == "md5"