histomicsui 1.7.3.dev16__tar.gz → 1.7.3.dev40__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 (187) hide show
  1. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/.circleci/config.yml +0 -15
  2. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/.pre-commit-config.yaml +1 -1
  3. {histomicsui-1.7.3.dev16/histomicsui.egg-info → histomicsui-1.7.3.dev40}/PKG-INFO +3 -4
  4. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/README.rst +1 -1
  5. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/saveAnnotation.js +28 -0
  6. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/AnnotationSelector.js +3 -1
  7. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/saveAnnotation.pug +1 -0
  8. histomicsui-1.7.3.dev40/histomicsui/web_client/vue/components/AnnotationHistoryBrowser.vue +104 -0
  9. histomicsui-1.7.3.dev40/histomicsui/web_client/vue/components/AnnotationHistoryBrowserContainer.vue +162 -0
  10. histomicsui-1.7.3.dev40/histomicsui/web_client/vue/components/AnnotationHistoryGroup.vue +128 -0
  11. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40/histomicsui.egg-info}/PKG-INFO +3 -4
  12. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui.egg-info/SOURCES.txt +3 -0
  13. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/setup.py +1 -2
  14. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/.editorconfig +0 -0
  15. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/.git-blame-ignore-revs +0 -0
  16. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/.gitignore +0 -0
  17. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/LICENSE +0 -0
  18. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/MANIFEST.in +0 -0
  19. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/NOTICE +0 -0
  20. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/codecov.yml +0 -0
  21. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/config_options.rst +0 -0
  22. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/controls.rst +0 -0
  23. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/images/difference.gif +0 -0
  24. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/images/intersect.gif +0 -0
  25. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/images/union.gif +0 -0
  26. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/images/xor.gif +0 -0
  27. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/docs/slicer_cli_plugins.rst +0 -0
  28. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/__init__.py +0 -0
  29. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/constants.py +0 -0
  30. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/handlers.py +0 -0
  31. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/__init__.py +0 -0
  32. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/aperio.py +0 -0
  33. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/case.py +0 -0
  34. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/cohort.py +0 -0
  35. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/image.py +0 -0
  36. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/meta.py +0 -0
  37. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/pathology.py +0 -0
  38. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/models/slide.py +0 -0
  39. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/rest/__init__.py +0 -0
  40. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/rest/aperio.py +0 -0
  41. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/rest/hui_resource.py +0 -0
  42. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/rest/image_browse_resource.py +0 -0
  43. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/rest/system.py +0 -0
  44. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/rest/tcga.py +0 -0
  45. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/app.js +0 -0
  46. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/collections/StyleCollection.js +0 -0
  47. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/collections/UserCollection.js +0 -0
  48. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/collections/index.js +0 -0
  49. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/confirmDialog.js +0 -0
  50. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/editElement.js +0 -0
  51. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/editRegionOfInterest.js +0 -0
  52. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/editStyleGroups.js +0 -0
  53. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/index.js +0 -0
  54. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/metadataPlot.js +0 -0
  55. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/openAnnotatedImage.js +0 -0
  56. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/dialogs/openImage.js +0 -0
  57. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/events.js +0 -0
  58. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/index.js +0 -0
  59. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/main.js +0 -0
  60. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/models/StyleModel.js +0 -0
  61. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/models/index.js +0 -0
  62. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/package.json +0 -0
  63. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/DrawWidget.js +0 -0
  64. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/FrameSelectorWidget.js +0 -0
  65. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/MetadataPlot.js +0 -0
  66. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/MetadataWidget.js +0 -0
  67. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/OverviewWidget.js +0 -0
  68. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/RegionSelector.js +0 -0
  69. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/ZoomWidget.js +0 -0
  70. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/panels/index.js +0 -0
  71. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/router.js +0 -0
  72. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/routes.js +0 -0
  73. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/static/favicon.png +0 -0
  74. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/body/configView.styl +0 -0
  75. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/body/image.styl +0 -0
  76. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/dialogs/editStyleGroups.styl +0 -0
  77. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/dialogs/metadataPlot.styl +0 -0
  78. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/dialogs/openAnnotatedImage.styl +0 -0
  79. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/dialogs/saveAnnotation.styl +0 -0
  80. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/layout/header.styl +0 -0
  81. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/layout/headerAnalyses.styl +0 -0
  82. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/layout/headerImage.styl +0 -0
  83. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/layout/layout.styl +0 -0
  84. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/annotationSelector.styl +0 -0
  85. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/drawWidget.styl +0 -0
  86. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/frameSelectorWidget.styl +0 -0
  87. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/metadataPlot.styl +0 -0
  88. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/metadataWidget.styl +0 -0
  89. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/overviewWidget.styl +0 -0
  90. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/regionSelector.styl +0 -0
  91. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/panels/zoomWidget.styl +0 -0
  92. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/popover/annotationContextMenu.styl +0 -0
  93. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/popover/annotationPopover.styl +0 -0
  94. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/views/itemList.styl +0 -0
  95. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/stylesheets/views/searchResultsView.styl +0 -0
  96. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/body/configView.pug +0 -0
  97. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/body/image.pug +0 -0
  98. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/annotatedImageList.pug +0 -0
  99. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/confirmDialog.pug +0 -0
  100. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/editElement.pug +0 -0
  101. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/editRegionOfInterest.pug +0 -0
  102. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/editStyleGroups.pug +0 -0
  103. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/metadataPlot.pug +0 -0
  104. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/openAnnotatedImage.pug +0 -0
  105. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/dialogs/openImage.pug +0 -0
  106. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/layout/header.pug +0 -0
  107. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/layout/headerAnalyses.pug +0 -0
  108. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/layout/headerImage.pug +0 -0
  109. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/layout/headerUser.pug +0 -0
  110. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/layout/layout.pug +0 -0
  111. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/annotationSelector.pug +0 -0
  112. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/drawWidget.pug +0 -0
  113. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/drawWidgetElement.pug +0 -0
  114. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/frameSelectorWidget.pug +0 -0
  115. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/metadataPlot.pug +0 -0
  116. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/metadataWidgetPanel.pug +0 -0
  117. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/overviewWidget.pug +0 -0
  118. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/panel.pug +0 -0
  119. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/regionSelector.pug +0 -0
  120. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/panels/zoomWidget.pug +0 -0
  121. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/popover/annotationContextMenu.pug +0 -0
  122. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/popover/annotationPopover.pug +0 -0
  123. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/popover/annotationPopoverMetadata.pug +0 -0
  124. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/templates/popover/pixelmapContextMenu.pug +0 -0
  125. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/HierarchyWidget.js +0 -0
  126. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/JobDetailsWidget.js +0 -0
  127. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/View.js +0 -0
  128. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/body/ConfigView.js +0 -0
  129. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/body/ImageView.js +0 -0
  130. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/body/index.js +0 -0
  131. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/index.js +0 -0
  132. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/itemList.js +0 -0
  133. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/itemPage.js +0 -0
  134. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/layout/HeaderAnalysesView.js +0 -0
  135. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/layout/HeaderImageView.js +0 -0
  136. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/layout/HeaderUserView.js +0 -0
  137. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/layout/HeaderView.js +0 -0
  138. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/layout/LoginView.js +0 -0
  139. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/layout/index.js +0 -0
  140. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/popover/AnnotationContextMenu.js +0 -0
  141. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/popover/AnnotationPopover.js +0 -0
  142. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/popover/PixelmapContextMenu.js +0 -0
  143. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/popover/index.js +0 -0
  144. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/searchResultsView.js +0 -0
  145. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/views/utils.js +0 -0
  146. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/vue/components/ColorPickerInput.vue +0 -0
  147. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/vue/components/EditHeatmapOrGridData.vue +0 -0
  148. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/vue/components/EditHeatmapOrGridDataContainer.vue +0 -0
  149. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/web_client/webpack.helper.js +0 -0
  150. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui/webroot.mako +0 -0
  151. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui.egg-info/dependency_links.txt +0 -0
  152. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui.egg-info/entry_points.txt +0 -0
  153. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui.egg-info/not-zip-safe +0 -0
  154. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui.egg-info/requires.txt +0 -0
  155. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/histomicsui.egg-info/top_level.txt +0 -0
  156. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/pyproject.toml +0 -0
  157. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/requirements-dev.txt +0 -0
  158. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/ruff.toml +0 -0
  159. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/setup.cfg +0 -0
  160. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/__init__.py +0 -0
  161. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/datastore.py +0 -0
  162. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/girder_utilities.py +0 -0
  163. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_files/.histomicsui_config.yaml +0 -0
  164. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_files/sample.anot +0 -0
  165. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_files/sample.meta +0 -0
  166. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_files/sample_girder_id.anot +0 -0
  167. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_files/test_analysis_detection.xml +0 -0
  168. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_files/test_analysis_features.xml +0 -0
  169. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_handlers.py +0 -0
  170. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_hui_rest.py +0 -0
  171. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_image_browse_endpoints.py +0 -0
  172. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_load.py +0 -0
  173. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_tcga.py +0 -0
  174. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/test_web_client.py +0 -0
  175. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/.eslintrc +0 -0
  176. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/analysisSpec.js +0 -0
  177. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/annotationSpec.js +0 -0
  178. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/girderUISpec.js +0 -0
  179. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/huiSpec.js +0 -0
  180. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/huiTest.js +0 -0
  181. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/itemSpec.js +0 -0
  182. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/metadataPanelSpec.js +0 -0
  183. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/metadataPlotSpec.js +0 -0
  184. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/overviewPanelSpec.js +0 -0
  185. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/panelLayoutSpec.js +0 -0
  186. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tests/web_client_specs/pixelmapCategorySpec.js +0 -0
  187. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev40}/tox.ini +0 -0
@@ -37,13 +37,6 @@ commands:
37
37
  command: for i in $(seq 1 10); do [ $i -gt 1 ] && echo "retrying $i" && sleep 5; ./codecov --disable search pycov gcov --file .tox/coverage/py_coverage.xml,.tox/coverage/cobertura-coverage.xml && s=0 && break || s=$?; done; (exit $s)
38
38
 
39
39
  jobs:
40
- py38:
41
- executor: toxandnode
42
- steps:
43
- - checkout
44
- - tox:
45
- env: py38
46
- - coverage
47
40
  py39:
48
41
  executor: toxandnode
49
42
  steps:
@@ -107,13 +100,6 @@ workflows:
107
100
  version: 2
108
101
  ci:
109
102
  jobs:
110
- - py38:
111
- filters:
112
- tags:
113
- only: /^v.*/
114
- branches:
115
- ignore:
116
- - gh-pages
117
103
  - py39:
118
104
  filters:
119
105
  tags:
@@ -165,7 +151,6 @@ workflows:
165
151
  - gh-pages
166
152
  - release:
167
153
  requires:
168
- - py38
169
154
  - py39
170
155
  - py310
171
156
  - py311
@@ -73,7 +73,7 @@ repos:
73
73
  hooks:
74
74
  - id: pyupgrade
75
75
  args:
76
- - --py38-plus
76
+ - --py39-plus
77
77
  - --keep-percent-format
78
78
  - repo: https://github.com/pre-commit/mirrors-autopep8
79
79
  rev: v2.0.4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: histomicsui
3
- Version: 1.7.3.dev16
3
+ Version: 1.7.3.dev40
4
4
  Summary: Organize, visualize, and analyze histology images.
5
5
  Home-page: https://github.com/DigitalSlideArchive/histomicsui
6
6
  Author: Kitware, Inc.
@@ -11,13 +11,12 @@ Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Programming Language :: Python :: 3.13
20
- Requires-Python: >=3.8
19
+ Requires-Python: >=3.9
21
20
  Description-Content-Type: text/x-rst
22
21
  License-File: LICENSE
23
22
  License-File: NOTICE
@@ -81,7 +80,7 @@ Installation
81
80
  Linux
82
81
  =====
83
82
 
84
- In linux with Python 3.8 or newer:
83
+ In linux with Python 3.9 or newer:
85
84
 
86
85
  Prerequisites:
87
86
 
@@ -39,7 +39,7 @@ Installation
39
39
  Linux
40
40
  =====
41
41
 
42
- In linux with Python 3.8 or newer:
42
+ In linux with Python 3.9 or newer:
43
43
 
44
44
  Prerequisites:
45
45
 
@@ -8,6 +8,8 @@ import AccessWidget from '@girder/core/views/widgets/AccessWidget';
8
8
  // import MetadataWidget from '@girder/core/views/widgets/MetadataWidget';
9
9
  import View from '@girder/core/views/View';
10
10
 
11
+ import AnnotationHistoryBrowserContainer from '../vue/components/AnnotationHistoryBrowserContainer.vue';
12
+
11
13
  import MetadataWidget from '../panels/MetadataWidget';
12
14
  import '../stylesheets/dialogs/saveAnnotation.styl';
13
15
  import saveAnnotation from '../templates/dialogs/saveAnnotation.pug';
@@ -332,6 +334,23 @@ var SaveAnnotation = View.extend({
332
334
 
333
335
  this.$el.find('.modal-dialog').addClass('hui-save-annotation-dialog');
334
336
  this._updateFuncValues();
337
+
338
+ // Mount Vue component for annotation history if editing an existing annotation
339
+ const historyBrowserElement = this.$('.vue-component-annotation-history').get(0);
340
+ if (historyBrowserElement) {
341
+ const historyBrowser = new AnnotationHistoryBrowserContainer({
342
+ historyBrowserElement,
343
+ propsData: {
344
+ annotationId: this.annotation.id,
345
+ parentView: this,
346
+ defaultGroup: this.options.defaultGroup || 'default'
347
+ }
348
+ });
349
+ historyBrowser.$mount();
350
+ historyBrowserElement.appendChild(historyBrowser.$el);
351
+ this.historyBrowser = historyBrowser;
352
+ }
353
+
335
354
  return this;
336
355
  },
337
356
 
@@ -425,6 +444,15 @@ var SaveAnnotation = View.extend({
425
444
  return setValue;
426
445
  },
427
446
 
447
+ onRevert() {
448
+ if (this.annotation) {
449
+ delete this.annotation._meta;
450
+ delete this.annotation._styleFuncs;
451
+ }
452
+ this.annotation.trigger('h:revert:annotation', this.annotation, {});
453
+ this.$el.modal('hide');
454
+ },
455
+
428
456
  /**
429
457
  * Respond to form submission. Triggers a `g:save` event on the
430
458
  * AnnotationModel.
@@ -57,6 +57,7 @@ var AnnotationSelector = Panel.extend({
57
57
  this.listenTo(eventStream, 'g:eventStream.start', this._refreshAnnotations);
58
58
  this.listenTo(eventStream, 'g:event.large_image_annotation.create', this._refreshAnnotations);
59
59
  this.listenTo(eventStream, 'g:event.large_image_annotation.remove', this._refreshAnnotations);
60
+ this.listenTo(this.collection, 'h:revert:annotation', this._refreshAnnotations);
60
61
  this.listenTo(this.collection, 'change:annotation change:groups', this._saveAnnotation);
61
62
  this.listenTo(girderEvents, 'g:login', () => {
62
63
  this.collection.reset();
@@ -238,8 +239,9 @@ var AnnotationSelector = Panel.extend({
238
239
  editAnnotationMetadata(evt) {
239
240
  const id = $(evt.currentTarget).parents('.h-annotation').data('id');
240
241
  const model = this.collection.get(id);
242
+ const defaultGroup = this.parentView._defaultGroup;
241
243
  this.listenToOnce(
242
- showSaveAnnotationDialog(model, {title: 'Edit annotation', viewer: this.viewer}),
244
+ showSaveAnnotationDialog(model, {title: 'Edit annotation', viewer: this.viewer, defaultGroup}),
243
245
  'g:submit',
244
246
  () => {
245
247
  if (model.get('displayed')) {
@@ -91,6 +91,7 @@ mixin functional(name, key, title, color)
91
91
  = ' '
92
92
  i.icon-angle-circled-down
93
93
  | Global Version: #{model.get('_version')}
94
+ .vue-component-annotation-history
94
95
  .hui-annotation-metadata.hui-annotation-metadata-dialog
95
96
  if showStyleEditor
96
97
  hr
@@ -0,0 +1,104 @@
1
+ <script>
2
+ import AnnotationHistoryGroup from './AnnotationHistoryGroup.vue';
3
+ export default {
4
+ components: {
5
+ AnnotationHistoryGroup
6
+ },
7
+ props: ['annotationHistory', 'loading', 'userMap', 'defaultGroup'],
8
+ emits: ['revert'],
9
+ data() {
10
+ return {
11
+ collapsed: true
12
+ };
13
+ },
14
+ computed: {
15
+ annotationGroups() {
16
+ if (!this.annotationHistory.length) {
17
+ return [];
18
+ }
19
+ const annotationGroups = [];
20
+ let currentGroup = [this.annotationHistory[0]];
21
+ let lastTime = new Date(this.annotationHistory[0].updated);
22
+ this.annotationHistory.slice(1).forEach((annotation) => {
23
+ const updatedTime = new Date(annotation.updated);
24
+ const timeDiff = Math.abs(updatedTime - lastTime);
25
+ if (timeDiff >= 60 * 60 * 1000) {
26
+ // Start a new group
27
+ annotationGroups.push(currentGroup);
28
+ currentGroup = [annotation];
29
+ } else {
30
+ currentGroup.push(annotation);
31
+ }
32
+ lastTime = updatedTime;
33
+ });
34
+ annotationGroups.push(currentGroup);
35
+ return annotationGroups;
36
+ },
37
+ annotationHistoryEnabled() {
38
+ if (!this.annotationHistory || this.annotationHistory.length === 0) {
39
+ return undefined;
40
+ }
41
+ if (this.annotationHistory.length > 1) {
42
+ return true;
43
+ }
44
+ const firstVersion = this.annotationHistory[0];
45
+ return firstVersion.created === firstVersion.updated;
46
+ }
47
+ },
48
+ methods: {
49
+ handleRevert(version) {
50
+ this.$emit('revert', version);
51
+ }
52
+ }
53
+ };
54
+ </script>
55
+
56
+ <template>
57
+ <div>
58
+ <div class="history-header">
59
+ <span
60
+ class="history-container-toggle"
61
+ @click="collapsed = !collapsed"
62
+ >
63
+ <i :class="collapsed ? 'icon-right-open' : 'icon-down-open'" />
64
+ Annotation Edit History
65
+ </span>
66
+ </div>
67
+ <div v-if="!collapsed">
68
+ <div v-if="!annotationHistoryEnabled">
69
+ <span>Ensure annotation history is turned on to track previous versions.</span>
70
+ </div>
71
+ <div v-else>
72
+ <div
73
+ class="history-body"
74
+ >
75
+ <div v-if="!annotationHistory || loading">
76
+ <i class="icon-spin4 animate-spin" />
77
+ Loading...
78
+ </div>
79
+ <div v-else>
80
+ <annotation-history-group
81
+ v-for="(group, index) in annotationGroups"
82
+ :key="index"
83
+ :history-group="group"
84
+ :user-id-map="userMap"
85
+ :allow-revert-initial="index !== 0"
86
+ :default-group="defaultGroup"
87
+ @revertToAnnotation="handleRevert"
88
+ />
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </template>
95
+
96
+ <style scoped>
97
+ .history-container-toggle:hover {
98
+ cursor: pointer;
99
+ }
100
+
101
+ .history-body {
102
+ margin-left: 20px;
103
+ }
104
+ </style>
@@ -0,0 +1,162 @@
1
+ <script>
2
+ import _ from 'underscore';
3
+ import Vue from 'vue';
4
+
5
+ import UserModel from '@girder/core/models/UserModel';
6
+ import {getCurrentUser} from '@girder/core/auth';
7
+ import {restRequest} from '@girder/core/rest';
8
+
9
+ import AnnotationHistoryBrowser from './AnnotationHistoryBrowser.vue';
10
+
11
+ const Promise = require('bluebird');
12
+
13
+ export default Vue.extend({
14
+ components: {
15
+ AnnotationHistoryBrowser
16
+ },
17
+ props: ['annotationId', 'parentView', 'defaultGroup'],
18
+ data() {
19
+ return {
20
+ annotationCopy: _.clone(this.annotation || {}),
21
+ history: null,
22
+ loading: false,
23
+ userIdToLogin: null,
24
+ waitingForRevert: false
25
+ };
26
+ },
27
+ mounted() {
28
+ this.positionShield();
29
+ this.updateAnnotationHistory();
30
+ },
31
+ methods: {
32
+ makeUserMap(shouldRefresh) {
33
+ this.loading = true;
34
+ const userMap = {};
35
+ // First, see if we can use the logged in user
36
+ const currentUser = getCurrentUser();
37
+ userMap[currentUser.id] = currentUser.get('login');
38
+ // Then, get all annotation editor IDs that aren't the logged in user
39
+ const userRequestPromises = [];
40
+ const uniqueUserIds = new Set([currentUser.id]);
41
+ this.history.forEach((annotation) => {
42
+ if (!uniqueUserIds.has(annotation.updatedId)) {
43
+ uniqueUserIds.add(annotation.updatedId);
44
+ const user = new UserModel();
45
+ user.id = annotation.updatedId;
46
+ userRequestPromises.push(user.fetch());
47
+ }
48
+ });
49
+ Promise.all(userRequestPromises).then((users) => {
50
+ users.forEach((user) => {
51
+ userMap[user._id] = user.login;
52
+ });
53
+ this.userIdToLogin = userMap;
54
+ this.loading = false;
55
+ this.waitingForRevert = false;
56
+ if (shouldRefresh) {
57
+ this.parentView.onRevert();
58
+ }
59
+ return true;
60
+ });
61
+ },
62
+ updateAnnotationHistory(shouldRefresh) {
63
+ if (!this.annotationId) {
64
+ return;
65
+ }
66
+ this.loading = true;
67
+ restRequest({
68
+ url: `annotation/${this.annotationId}/history`,
69
+ method: 'GET',
70
+ error: null
71
+ }).done((annotationHistory) => {
72
+ this.history = annotationHistory;
73
+ this.makeUserMap(shouldRefresh);
74
+ });
75
+ },
76
+ positionShield() {
77
+ const shield = this.$refs.shield;
78
+ if (shield && shield.parentNode !== document.body) {
79
+ document.body.appendChild(shield);
80
+ }
81
+ },
82
+ onRevert(version) {
83
+ this.loading = true;
84
+ // If an annotation takes > 1 second to be reverted, throw up a loading screen
85
+ setTimeout(() => {
86
+ if (this.loading) {
87
+ this.waitingForRevert = true;
88
+ this.$nextTick(() => {
89
+ this.positionShield();
90
+ });
91
+ }
92
+ }, 1000);
93
+ restRequest({
94
+ url: `annotation/${this.annotationId}/history/revert`,
95
+ method: 'PUT',
96
+ data: {version},
97
+ error: null
98
+ }).done(() => {
99
+ this.updateAnnotationHistory(true);
100
+ });
101
+ }
102
+ }
103
+ });
104
+ </script>
105
+
106
+ <template>
107
+ <div>
108
+ <div
109
+ v-if="waitingForRevert"
110
+ ref="shield"
111
+ class="loading-shield"
112
+ >
113
+ <div class="shield-content">
114
+ <i class="icon-spin3 animate-spin" />
115
+ Reverting to previous version. This may some time...
116
+ </div>
117
+ </div>
118
+ <annotation-history-browser
119
+ :annotation-history="history"
120
+ :loading="loading"
121
+ :user-map="userIdToLogin"
122
+ :default-group="defaultGroup"
123
+ @revert="onRevert"
124
+ />
125
+ </div>
126
+ </template>
127
+
128
+ <style scoped>
129
+ .loading-shield {
130
+ position: fixed;
131
+ top: 0;
132
+ left: 0;
133
+ width: 100vw;
134
+ height: 100vh;
135
+ background-color: rgba(0, 0, 0, 0.4);
136
+ z-index: 9999;
137
+ pointer-events: all;
138
+ cursor: wait;
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+
143
+ animation: fadeIn 0.3s ease-out;
144
+ }
145
+ .shield-content {
146
+ padding: 24px;
147
+ background-color: white;
148
+ }
149
+ .loading-shield > i, span {
150
+ font-size: 24px;
151
+ z-index: 9999;
152
+ }
153
+
154
+ @keyframes fadeIn {
155
+ from {
156
+ opacity: 0;
157
+ }
158
+ to {
159
+ opacity: 1;
160
+ }
161
+ }
162
+ </style>
@@ -0,0 +1,128 @@
1
+ <script>
2
+ import {formatDate, DATE_SECOND} from '@girder/core/misc';
3
+ export default {
4
+ props: ['historyGroup', 'userIdMap', 'allowRevertInitial', 'defaultGroup'],
5
+ emits: ['revertToAnnotation'],
6
+ data() {
7
+ return {
8
+ collapsed: this.allowRevertInitial
9
+ };
10
+ },
11
+ computed: {
12
+ startingAnnotation() {
13
+ return this.historyGroup[0];
14
+ },
15
+ hiddenAnnotations() {
16
+ return this.historyGroup.slice(1);
17
+ },
18
+ iconClass() {
19
+ const classes = ['hidden-version-toggle'];
20
+ if (this.collapsed) {
21
+ classes.push('icon-right-open');
22
+ } else {
23
+ classes.push('icon-down-open');
24
+ }
25
+ if (!this.hiddenAnnotations.length) {
26
+ classes.push('display-none');
27
+ }
28
+ return classes;
29
+ }
30
+ },
31
+ methods: {
32
+ displayDate(dateString) {
33
+ return formatDate(dateString, DATE_SECOND);
34
+ },
35
+ displayGroups(annotationVersion) {
36
+ return annotationVersion.groups.map((group) => (
37
+ group === null ? this.defaultGroup : group
38
+ )).join(', ');
39
+ },
40
+ getUser(userId) {
41
+ return (this.userIdMap && this.userIdMap[userId]) ? this.userIdMap[userId] : userId;
42
+ }
43
+ }
44
+ };
45
+ </script>
46
+
47
+ <template>
48
+ <div>
49
+ <span class="history-group-header attribute-block">
50
+ <i
51
+ v-if="hiddenAnnotations.length"
52
+ :class="iconClass"
53
+ @click="collapsed = !collapsed"
54
+ />
55
+ <span
56
+ v-else
57
+ class="hidden-version-toggle"
58
+ />
59
+ <span class="attribute-display">Edited: {{ displayDate(startingAnnotation.updated) }}</span>
60
+ <span class="attribute-display">Author: {{ getUser(startingAnnotation.updatedId) }}</span>
61
+ <span class="attribute-display">Version: {{ startingAnnotation._version }}</span>
62
+ <span
63
+ class="attribute-display"
64
+ :title="displayGroups(startingAnnotation)"
65
+ >
66
+ Groups: {{ displayGroups(startingAnnotation) }}
67
+ </span>
68
+ <i
69
+ v-if="allowRevertInitial"
70
+ class="revert-button icon-ccw"
71
+ @click="$emit('revertToAnnotation', startingAnnotation._version)"
72
+ />
73
+ </span>
74
+ <div
75
+ v-if="!collapsed && hiddenAnnotations.length"
76
+ class="hidden-version-container"
77
+ >
78
+ <div
79
+ v-for="entry in hiddenAnnotations"
80
+ :key="entry._version"
81
+ class="hidden-version-entry attribute-block"
82
+ >
83
+ <span class="hidden-version-toggle" />
84
+ <span class="attribute-display">Edited: {{ displayDate(entry.updated) }}</span>
85
+ <span class="attribute-display">Author: {{ getUser(entry.updatedId) }}</span>
86
+ <span class="attribute-display">Version: {{ entry._version }}</span>
87
+ <span
88
+ class="attribute-display"
89
+ :title="displayGroups(startingAnnotation)"
90
+ >
91
+ Groups: {{ displayGroups(entry) }}
92
+ </span>
93
+ <i
94
+ class="revert-button icon-ccw"
95
+ @click="$emit('revertToAnnotation', entry._version)"
96
+ />
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </template>
101
+
102
+ <style scoped>
103
+ .hidden-version-toggle {
104
+ display: inline-block;
105
+ min-width: 20px;
106
+ }
107
+ .hidden-version-toggle:hover {
108
+ cursor: pointer;
109
+ }
110
+ .revert-button:hover {
111
+ cursor:pointer;
112
+ }
113
+ .attribute-block > span, i {
114
+ max-width: 250px;
115
+ overflow: hidden;
116
+ white-space: nowrap;
117
+ text-overflow: ellipses;
118
+ }
119
+ .attribute-block {
120
+ display: flex;
121
+ }
122
+ .attribute-block > span {
123
+ padding-right: 8px;
124
+ }
125
+ .display-none {
126
+ display: none;
127
+ }
128
+ </style>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: histomicsui
3
- Version: 1.7.3.dev16
3
+ Version: 1.7.3.dev40
4
4
  Summary: Organize, visualize, and analyze histology images.
5
5
  Home-page: https://github.com/DigitalSlideArchive/histomicsui
6
6
  Author: Kitware, Inc.
@@ -11,13 +11,12 @@ Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Programming Language :: Python :: 3.13
20
- Requires-Python: >=3.8
19
+ Requires-Python: >=3.9
21
20
  Description-Content-Type: text/x-rst
22
21
  License-File: LICENSE
23
22
  License-File: NOTICE
@@ -81,7 +80,7 @@ Installation
81
80
  Linux
82
81
  =====
83
82
 
84
- In linux with Python 3.8 or newer:
83
+ In linux with Python 3.9 or newer:
85
84
 
86
85
  Prerequisites:
87
86
 
@@ -151,6 +151,9 @@ histomicsui/web_client/views/popover/AnnotationContextMenu.js
151
151
  histomicsui/web_client/views/popover/AnnotationPopover.js
152
152
  histomicsui/web_client/views/popover/PixelmapContextMenu.js
153
153
  histomicsui/web_client/views/popover/index.js
154
+ histomicsui/web_client/vue/components/AnnotationHistoryBrowser.vue
155
+ histomicsui/web_client/vue/components/AnnotationHistoryBrowserContainer.vue
156
+ histomicsui/web_client/vue/components/AnnotationHistoryGroup.vue
154
157
  histomicsui/web_client/vue/components/ColorPickerInput.vue
155
158
  histomicsui/web_client/vue/components/EditHeatmapOrGridData.vue
156
159
  histomicsui/web_client/vue/components/EditHeatmapOrGridDataContainer.vue
@@ -35,7 +35,6 @@ setup(
35
35
  'License :: OSI Approved :: Apache Software License',
36
36
  'Natural Language :: English',
37
37
  'Programming Language :: Python :: 3',
38
- 'Programming Language :: Python :: 3.8',
39
38
  'Programming Language :: Python :: 3.9',
40
39
  'Programming Language :: Python :: 3.10',
41
40
  'Programming Language :: Python :: 3.11',
@@ -59,7 +58,7 @@ setup(
59
58
  packages=find_packages(exclude=['test', 'test.*']),
60
59
  url='https://github.com/DigitalSlideArchive/histomicsui',
61
60
  zip_safe=False,
62
- python_requires='>=3.8',
61
+ python_requires='>=3.9',
63
62
  entry_points={
64
63
  'girder.plugin': [
65
64
  'histomicsui = histomicsui:GirderPlugin',