diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 72a07b2592..e4b2674d54 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -11,6 +11,7 @@ For upgrade instructions, please check the [migration guide](MIGRATIONS.released [Commits](https://github.com/scalableminds/webknossos/compare/24.11.1...HEAD) ### Added +- It is now possible to start a split-merger evaluation when starting a neuron inference. [#8221](https://github.com/scalableminds/webknossos/pull/8221) - When exploring remote URIs pasted from Neuroglancer, the format prefixes like `precomputed://` are now ignored, so users don’t have to remove them. [#8195](https://github.com/scalableminds/webknossos/pull/8195) ### Changed diff --git a/app/controllers/JobController.scala b/app/controllers/JobController.scala index 4ccfdea0bd..f963b61a4f 100644 --- a/app/controllers/JobController.scala +++ b/app/controllers/JobController.scala @@ -223,7 +223,13 @@ class JobController @Inject()( def runInferNeuronsJob(datasetId: String, layerName: String, bbox: String, - newDatasetName: String): Action[AnyContent] = + newDatasetName: String, + doSplitMergerEvaluation: Boolean, + annotationId: Option[String], + evalUseSparseTracing: Option[Boolean], + evalMaxEdgeLength: Option[String], + evalSparseTubeThresholdNm: Option[String], + evalMinMergerPathLengthNm: Option[String]): Action[AnyContent] = sil.SecuredAction.async { implicit request => log(Some(slackNotificationService.noticeFailedJobRequest)) { for { @@ -245,6 +251,12 @@ class JobController @Inject()( "new_dataset_name" -> newDatasetName, "layer_name" -> layerName, "bbox" -> bbox, + "do_split_merger_evaluation" -> doSplitMergerEvaluation, + "annotation_id" -> annotationId, + "eval_use_sparse_tracing" -> evalUseSparseTracing, + "eval_max_edge_length" -> evalMaxEdgeLength, + "eval_sparse_tube_threshold_nm" -> evalSparseTubeThresholdNm, + "eval_min_merger_path_length_nm" -> evalMinMergerPathLengthNm, ) job <- jobService.submitJob(command, commandArgs, request.identity, dataset._dataStore) ?~> "job.couldNotRunNeuronInferral" js <- jobService.publicWrites(job) diff --git a/app/models/job/Job.scala b/app/models/job/Job.scala index d3c181d460..751f7f5f19 100644 --- a/app/models/job/Job.scala +++ b/app/models/job/Job.scala @@ -54,6 +54,7 @@ case class Job( def datasetId: Option[String] = argAsStringOpt("dataset_id") private def argAsStringOpt(key: String) = (commandArgs \ key).toOption.flatMap(_.asOpt[String]) + private def argAsBooleanOpt(key: String) = (commandArgs \ key).toOption.flatMap(_.asOpt[Boolean]) def resultLink(organizationId: String): Option[String] = if (effectiveState != JobState.SUCCESS) None @@ -66,6 +67,8 @@ case class Job( }.getOrElse(datasetName.map(name => s"datasets/$organizationId/$name/view")) case JobCommand.export_tiff | JobCommand.render_animation => Some(s"/api/jobs/${this._id}/export") + case JobCommand.infer_neurons if this.argAsBooleanOpt("do_evaluation").getOrElse(false) => + returnValue.map { resultAnnotationLink => resultAnnotationLink} case JobCommand.infer_nuclei | JobCommand.infer_neurons | JobCommand.materialize_volume_annotation | JobCommand.infer_with_model | JobCommand.infer_mitochondria | JobCommand.align_sections => // Old jobs before the dataset renaming changes returned the output dataset name. diff --git a/conf/application.conf b/conf/application.conf index 751fcd1e5a..6c871ef628 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -151,8 +151,8 @@ features { taskReopenAllowedInSeconds = 30 allowDeleteDatasets = true # to enable jobs for local development, use "yarn enable-jobs" to also activate it in the database - jobsEnabled = false - voxelyticsEnabled = false + jobsEnabled = true + voxelyticsEnabled = true # For new users, the dashboard will show a banner which encourages the user to check out the following dataset. # If isWkorgInstance == true, `/createExplorative/hybrid/true` is appended to the URL so that a new tracing is opened. # If isWkorgInstance == false, `/view` is appended to the URL so that it's opened in view mode (since the user might not diff --git a/conf/webknossos.latest.routes b/conf/webknossos.latest.routes index 76e22722a2..b2ee0318d8 100644 --- a/conf/webknossos.latest.routes +++ b/conf/webknossos.latest.routes @@ -265,7 +265,7 @@ POST /jobs/run/computeMeshFile/:datasetId POST /jobs/run/computeSegmentIndexFile/:datasetId controllers.JobController.runComputeSegmentIndexFileJob(datasetId: String, layerName: String) POST /jobs/run/exportTiff/:datasetId controllers.JobController.runExportTiffJob(datasetId: String, bbox: String, additionalCoordinates: Option[String], layerName: Option[String], mag: Option[String], annotationLayerName: Option[String], annotationId: Option[String], asOmeTiff: Boolean) POST /jobs/run/inferNuclei/:datasetId controllers.JobController.runInferNucleiJob(datasetId: String, layerName: String, newDatasetName: String) -POST /jobs/run/inferNeurons/:datasetId controllers.JobController.runInferNeuronsJob(datasetId: String, layerName: String, bbox: String, newDatasetName: String) +POST /jobs/run/inferNeurons/:datasetId controllers.JobController.runInferNeuronsJob(datasetId: String, layerName: String, bbox: String, newDatasetName: String, doSplitMergerEvaluation: Boolean, annotationId: Option[String], evalUseSparseTracing: Option[Boolean], evalMaxEdgeLength: Option[String], evalSparseTubeThresholdNm: Option[String], evalMinMergerPathLengthNm: Option[String]) POST /jobs/run/inferMitochondria/:datasetId controllers.JobController.runInferMitochondriaJob(datasetId: String, layerName: String, bbox: String, newDatasetName: String) POST /jobs/run/alignSections/:datasetId controllers.JobController.runAlignSectionsJob(datasetId: String, layerName: String, newDatasetName: String, annotationId: Option[String]) POST /jobs/run/materializeVolumeAnnotation/:datasetId controllers.JobController.runMaterializeVolumeAnnotationJob(datasetId: String, fallbackLayerName: String, annotationId: String, annotationType: String, newDatasetName: String, outputSegmentationLayerName: String, mergeSegments: Boolean, volumeLayerName: Option[String]) diff --git a/frontend/javascripts/admin/api/jobs.ts b/frontend/javascripts/admin/api/jobs.ts index 3327d61884..b26a25c74a 100644 --- a/frontend/javascripts/admin/api/jobs.ts +++ b/frontend/javascripts/admin/api/jobs.ts @@ -179,12 +179,37 @@ export function startNeuronInferralJob( layerName: string, bbox: Vector6, newDatasetName: string, + doSplitMergerEvaluation: boolean, + annotationId?: string, + useSparseTracing?: boolean, + evalMaxEdgeLength?: number, + evalSparseTubeThresholdNm?: number, + evalMinMergerPathLengthNm?: number, ): Promise { const urlParams = new URLSearchParams({ layerName, bbox: bbox.join(","), newDatasetName, + doSplitMergerEvaluation: doSplitMergerEvaluation.toString(), }); + if (doSplitMergerEvaluation) { + if (!annotationId) { + throw new Error("annotationId is required when doEvaluation is true"); + } + urlParams.append("annotationId", `${annotationId}`); + if (useSparseTracing != null) { + urlParams.append("evalUseSparseTracing", `${useSparseTracing}`); + } + if (evalMaxEdgeLength != null) { + urlParams.append("evalMaxEdgeLength", `${evalMaxEdgeLength}`); + } + if (evalSparseTubeThresholdNm != null) { + urlParams.append("evalSparseTubeThresholdNm", `${evalSparseTubeThresholdNm}`); + } + if (evalMinMergerPathLengthNm != null) { + urlParams.append("evalMinMergerPathLengthNm", `${evalMinMergerPathLengthNm}`); + } + } return Request.receiveJSON(`/api/jobs/run/inferNeurons/${datasetId}?${urlParams.toString()}`, { method: "POST", }); diff --git a/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx b/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx index d560ec0299..92ccfe80a0 100644 --- a/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx @@ -15,6 +15,9 @@ import { Switch, type FormInstance, Checkbox, + Collapse, + Col, + InputNumber, } from "antd"; import { startNucleiInferralJob, @@ -98,6 +101,7 @@ type StartJobFormProps = Props & { jobApiCall: (arg0: JobApiCallArgsType, form: FormInstance) => Promise; jobName: keyof typeof jobNameToImagePath; description: React.ReactNode; + jobSpecificInputFields?: React.ReactNode | undefined; isBoundingBoxConfigurable?: boolean; chooseSegmentationLayer?: boolean; suggestedDatasetSuffix: string; @@ -523,11 +527,85 @@ function ShouldUseTreesFormItem() { ); } +function CollapsibleSplitMergersplitMergerEvaluationSettings({ + isActive = false, + setActive, +}: { isActive: boolean; setActive: (active: boolean) => void }) { + return ( + setActive(!isActive)} + expandIcon={() => } + items={[ + { + key: "evaluation", + label: "Evaluation Settings", + children: ( + + + + + + + + + + + + + + + + ), + }, + ]} + activeKey={isActive ? "evaluation" : []} + /> + ); +} + function StartJobForm(props: StartJobFormProps) { const isBoundingBoxConfigurable = props.isBoundingBoxConfigurable || false; const isSkeletonSelectable = props.isSkeletonSelectable || false; const chooseSegmentationLayer = props.chooseSegmentationLayer || false; - const { handleClose, jobName, jobApiCall, fixedSelectedLayer, title, description } = props; + const { + handleClose, + jobName, + jobApiCall, + fixedSelectedLayer, + title, + description, + jobSpecificInputFields, + } = props; const [form] = Form.useForm(); const rawUserBoundingBoxes = useSelector((state: OxalisState) => getUserBoundingBoxesFromState(state), @@ -650,6 +728,7 @@ function StartJobForm(props: StartJobFormProps) { onChangeSelectedBoundingBox={(bBoxId) => form.setFieldsValue({ boundingBoxId: bBoxId })} value={form.getFieldValue("boundingBoxId")} /> + {jobSpecificInputFields} {isSkeletonSelectable && } {props.showWorkflowYaml ? ( state.dataset); + const hasSkeletonAnnotation = useSelector((state: OxalisState) => state.tracing.skeleton != null); const dispatch = useDispatch(); + const [doSplitMergerEvaluation, setDoSplitMergerEvaluation] = React.useState(false); return ( dispatch(setAIJobModalStateAction("invisible"))} @@ -710,13 +791,40 @@ export function NeuronSegmentationForm() { title="AI Neuron Segmentation" suggestedDatasetSuffix="with_reconstructed_neurons" isBoundingBoxConfigurable - jobApiCall={async ({ newDatasetName, selectedLayer: colorLayer, selectedBoundingBox }) => { - if (!selectedBoundingBox) { + jobApiCall={async ( + { newDatasetName, selectedLayer: colorLayer, selectedBoundingBox, annotationId }, + form: FormInstance, + ) => { + const splitMergerEvaluationSettings = form.getFieldValue("splitMergerEvaluationSettings"); + if ( + !selectedBoundingBox || + (doSplitMergerEvaluation && splitMergerEvaluationSettings == null) + ) { return; } const bbox = computeArrayFromBoundingBox(selectedBoundingBox.boundingBox); - return startNeuronInferralJob(dataset.id, colorLayer.name, bbox, newDatasetName); + if (!doSplitMergerEvaluation) { + return startNeuronInferralJob( + dataset.id, + colorLayer.name, + bbox, + newDatasetName, + doSplitMergerEvaluation, + ); + } + return startNeuronInferralJob( + dataset.id, + colorLayer.name, + bbox, + newDatasetName, + doSplitMergerEvaluation, + annotationId, + splitMergerEvaluationSettings.useSparseTracing, + splitMergerEvaluationSettings.maxEdgeLength, + splitMergerEvaluationSettings.sparseTubeThresholdInNm, + splitMergerEvaluationSettings.minimumMergerPathLengthInNm, + ); }} description={ <> @@ -731,6 +839,14 @@ export function NeuronSegmentationForm() { } + jobSpecificInputFields={ + hasSkeletonAnnotation && ( + + ) + } /> ); } diff --git a/package.json b/package.json index 48eef700af..a8c9b30564 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,7 @@ "@tanstack/react-query-persist-client": "4.36.1", "@zip.js/zip.js": "^2.7.32", "ansi-to-react": "^6.1.6", - "antd": "5.17.4", + "antd": "5.18", "ball-morphology": "^0.1.0", "base64-js": "^1.2.1", "beautiful-react-hooks": "^3.11.1", diff --git a/yarn.lock b/yarn.lock index f1575bb6d8..4837bd8dac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -47,9 +47,9 @@ __metadata: languageName: node linkType: hard -"@ant-design/cssinjs@npm:^1.19.1": - version: 1.21.1 - resolution: "@ant-design/cssinjs@npm:1.21.1" +"@ant-design/cssinjs@npm:^1.21.0": + version: 1.22.0 + resolution: "@ant-design/cssinjs@npm:1.22.0" dependencies: "@babel/runtime": "npm:^7.11.1" "@emotion/hash": "npm:^0.8.0" @@ -57,11 +57,11 @@ __metadata: classnames: "npm:^2.3.1" csstype: "npm:^3.1.3" rc-util: "npm:^5.35.0" - stylis: "npm:^4.3.3" + stylis: "npm:^4.3.4" peerDependencies: react: ">=16.0.0" react-dom: ">=16.0.0" - checksum: 10c0/9dca7fa851ae59d084cfe6787937536a601e16e3b4f82f6a63a5eb4098d83b36a5b88a1ff9128a8d8cd2bd3336734e14248e427f0875c37cbf94a70fb0d29e50 + checksum: 10c0/f06aa27efba605caffb2e0684479ee5b7b5a6ed558aab52825e889c208e4fc1f1b669abbbc4aa483ce12155ae9d09e7c4abedeff8ef0bd0697900d9821dcd7bf languageName: node linkType: hard @@ -300,7 +300,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.24.5, @babel/runtime@npm:^7.24.8, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.24.8, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.9.2": version: 7.25.6 resolution: "@babel/runtime@npm:7.25.6" dependencies: @@ -309,6 +309,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.24.7": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 + languageName: node + linkType: hard + "@babel/template@npm:^7.22.5": version: 7.22.5 resolution: "@babel/template@npm:7.22.5" @@ -1549,6 +1558,23 @@ __metadata: languageName: node linkType: hard +"@rc-component/trigger@npm:^2.2.0": + version: 2.2.5 + resolution: "@rc-component/trigger@npm:2.2.5" + dependencies: + "@babel/runtime": "npm:^7.23.2" + "@rc-component/portal": "npm:^1.1.0" + classnames: "npm:^2.3.2" + rc-motion: "npm:^2.0.0" + rc-resize-observer: "npm:^1.3.1" + rc-util: "npm:^5.38.0" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10c0/829704ab59b19f669b1ff4b0af23c573e714dfc04ebe37d74a46d0ffc88ba2f8d29dffb17863b5e39f3984f534bdc72a091fd61c164f9fe173894f6499bbb69f + languageName: node + linkType: hard + "@react-dnd/asap@npm:^5.0.1": version: 5.0.2 resolution: "@react-dnd/asap@npm:5.0.2" @@ -3263,62 +3289,62 @@ __metadata: languageName: node linkType: hard -"antd@npm:5.17.4": - version: 5.17.4 - resolution: "antd@npm:5.17.4" +"antd@npm:5.18": + version: 5.18.3 + resolution: "antd@npm:5.18.3" dependencies: "@ant-design/colors": "npm:^7.0.2" - "@ant-design/cssinjs": "npm:^1.19.1" + "@ant-design/cssinjs": "npm:^1.21.0" "@ant-design/icons": "npm:^5.3.7" "@ant-design/react-slick": "npm:~1.1.2" - "@babel/runtime": "npm:^7.24.5" + "@babel/runtime": "npm:^7.24.7" "@ctrl/tinycolor": "npm:^3.6.1" "@rc-component/color-picker": "npm:~1.5.3" "@rc-component/mutate-observer": "npm:^1.1.0" "@rc-component/tour": "npm:~1.15.0" - "@rc-component/trigger": "npm:^2.1.1" + "@rc-component/trigger": "npm:^2.2.0" classnames: "npm:^2.5.1" copy-to-clipboard: "npm:^3.3.3" - dayjs: "npm:^1.11.10" + dayjs: "npm:^1.11.11" qrcode.react: "npm:^3.1.0" rc-cascader: "npm:~3.26.0" rc-checkbox: "npm:~3.3.0" rc-collapse: "npm:~3.7.3" - rc-dialog: "npm:~9.4.0" - rc-drawer: "npm:~7.1.0" + rc-dialog: "npm:~9.5.2" + rc-drawer: "npm:~7.2.0" rc-dropdown: "npm:~4.2.0" - rc-field-form: "npm:~2.0.1" - rc-image: "npm:~7.6.0" + rc-field-form: "npm:~2.2.1" + rc-image: "npm:~7.9.0" rc-input: "npm:~1.5.1" rc-input-number: "npm:~9.1.0" - rc-mentions: "npm:~2.13.1" + rc-mentions: "npm:~2.14.0" rc-menu: "npm:~9.14.0" - rc-motion: "npm:^2.9.1" - rc-notification: "npm:~5.4.0" + rc-motion: "npm:^2.9.2" + rc-notification: "npm:~5.6.0" rc-pagination: "npm:~4.0.4" rc-picker: "npm:~4.5.0" rc-progress: "npm:~4.0.0" - rc-rate: "npm:~2.12.0" + rc-rate: "npm:~2.13.0" rc-resize-observer: "npm:^1.4.0" rc-segmented: "npm:~2.3.0" rc-select: "npm:~14.14.0" rc-slider: "npm:~10.6.2" rc-steps: "npm:~6.0.1" rc-switch: "npm:~4.1.0" - rc-table: "npm:~7.45.6" - rc-tabs: "npm:~15.1.0" + rc-table: "npm:~7.45.7" + rc-tabs: "npm:~15.1.1" rc-textarea: "npm:~1.7.0" rc-tooltip: "npm:~6.2.0" - rc-tree: "npm:~5.8.7" + rc-tree: "npm:~5.8.8" rc-tree-select: "npm:~5.21.0" rc-upload: "npm:~4.5.2" - rc-util: "npm:^5.41.0" + rc-util: "npm:^5.43.0" scroll-into-view-if-needed: "npm:^3.1.0" throttle-debounce: "npm:^5.0.0" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/2ea5853bf72c2ec2b409b53b730c633d97ce409807aa65cc607813f20647b9b4c10ec7fc43fb56e1d0298628b3d852aebe1835e1a63365664ac16dde6dae53cf + checksum: 10c0/da0420ef3c22ad205e5198d83da0e3df672ee3e7a9e64ec60e77c51537d6c2e955f223c48d3d8479b4617a8470db2f2de4ecf9611dddf475da47b5959bd78aa1 languageName: node linkType: hard @@ -4850,7 +4876,7 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:^1.11.10, dayjs@npm:^1.11.13": +"dayjs@npm:^1.11.11, dayjs@npm:^1.11.13": version: 1.11.13 resolution: "dayjs@npm:1.11.13" checksum: 10c0/a3caf6ac8363c7dade9d1ee797848ddcf25c1ace68d9fe8678ecf8ba0675825430de5d793672ec87b24a69bf04a1544b176547b2539982275d5542a7955f35b7 @@ -10639,9 +10665,9 @@ __metadata: languageName: node linkType: hard -"rc-dialog@npm:~9.4.0": - version: 9.4.0 - resolution: "rc-dialog@npm:9.4.0" +"rc-dialog@npm:~9.5.2": + version: 9.5.2 + resolution: "rc-dialog@npm:9.5.2" dependencies: "@babel/runtime": "npm:^7.10.1" "@rc-component/portal": "npm:^1.0.0-8" @@ -10651,13 +10677,13 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/22804e44d7cf5952cce29d92bd180f86bffc9c182165144911e40f209169850aece8ec76a532867ad14272fe5e1ca1b59313af0f62bd7d0f3e37fe2695757677 + checksum: 10c0/e5854b2b99d4336f8c1125f63bb66da6b25959502866fb74c32cede5cad4ee6aa62dba6de79a16082812605193d83d99409f6372b161c2b906e68b9645d7031e languageName: node linkType: hard -"rc-drawer@npm:~7.1.0": - version: 7.1.0 - resolution: "rc-drawer@npm:7.1.0" +"rc-drawer@npm:~7.2.0": + version: 7.2.0 + resolution: "rc-drawer@npm:7.2.0" dependencies: "@babel/runtime": "npm:^7.23.9" "@rc-component/portal": "npm:^1.1.1" @@ -10667,7 +10693,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/7a27192518f853e1d410391a687c2aae7a8760dbdd9bd0a9d864b83aac9b1253517517f89acd389c11bd7d682f557f6515c5405317e5c2010763f4e0de7dbfc6 + checksum: 10c0/d6814998983100193d6a521745324a94fa8d65cbb979b2764d1d48a78d6b6e22f9d078ebb68545b68a0cc38f062298d11ed3635e93d004a60415d384330a8573 languageName: node linkType: hard @@ -10686,9 +10712,9 @@ __metadata: languageName: node linkType: hard -"rc-field-form@npm:~2.0.1": - version: 2.0.1 - resolution: "rc-field-form@npm:2.0.1" +"rc-field-form@npm:~2.2.1": + version: 2.2.1 + resolution: "rc-field-form@npm:2.2.1" dependencies: "@babel/runtime": "npm:^7.18.0" "@rc-component/async-validator": "npm:^5.0.3" @@ -10696,24 +10722,24 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/432028af840d51f12a723dd7b317a457637b888ebd057e5089bf116365898de3c8d56be3326845e9f713d2ed2b05b963b5f6b6583228a80621a2b4fde7ce8528 + checksum: 10c0/59911ef8222b08df561ea32bf0cc8d0731c796a06de95be9faacd8399be24e9c82343ceb52201df13c061bf75713b43e8d3963de33c41be35b735991c8f0f500 languageName: node linkType: hard -"rc-image@npm:~7.6.0": - version: 7.6.0 - resolution: "rc-image@npm:7.6.0" +"rc-image@npm:~7.9.0": + version: 7.9.0 + resolution: "rc-image@npm:7.9.0" dependencies: "@babel/runtime": "npm:^7.11.2" "@rc-component/portal": "npm:^1.0.2" classnames: "npm:^2.2.6" - rc-dialog: "npm:~9.4.0" + rc-dialog: "npm:~9.5.2" rc-motion: "npm:^2.6.2" rc-util: "npm:^5.34.1" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/ed9b0a8815de05ee582f89d062a4116cc85a1b920b125e9fc305d4f6f25da615338b47ebcca04f98fbe546c9822557c986cc30c9456057cd2e48f02673cd57a1 + checksum: 10c0/fd04b8b66447d6c55f6fb298723582b80e51ddf364d7ae9560431f3f6a11622b97f1870755014d22994fadfbaaa21dda80444eee717409300853c1f65764d5b1 languageName: node linkType: hard @@ -10747,9 +10773,9 @@ __metadata: languageName: node linkType: hard -"rc-mentions@npm:~2.13.1": - version: 2.13.2 - resolution: "rc-mentions@npm:2.13.2" +"rc-mentions@npm:~2.14.0": + version: 2.14.0 + resolution: "rc-mentions@npm:2.14.0" dependencies: "@babel/runtime": "npm:^7.22.5" "@rc-component/trigger": "npm:^2.0.0" @@ -10761,7 +10787,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/971f1ceefbe1329e75a2d6b8d6facf9a20cfb1690d3d4a4b86872cb2db38a11557d5320a68507143ea7a9fbd56b0dd49b800af37b67baf3a34e7124c8a9e45fc + checksum: 10c0/43e3da8d736b5656fd2bb1073f81be5b494178123a1ca7834168e596cc2156827bee1d63a780c4338bd71a43368ae4fa445e8174b2ba1f3b29cb5ce70ad1adb4 languageName: node linkType: hard @@ -10782,7 +10808,7 @@ __metadata: languageName: node linkType: hard -"rc-motion@npm:^2.0.0, rc-motion@npm:^2.0.1, rc-motion@npm:^2.3.0, rc-motion@npm:^2.3.4, rc-motion@npm:^2.4.3, rc-motion@npm:^2.4.4, rc-motion@npm:^2.6.1, rc-motion@npm:^2.6.2, rc-motion@npm:^2.9.0, rc-motion@npm:^2.9.1": +"rc-motion@npm:^2.0.0, rc-motion@npm:^2.0.1, rc-motion@npm:^2.3.0, rc-motion@npm:^2.3.4, rc-motion@npm:^2.4.3, rc-motion@npm:^2.4.4, rc-motion@npm:^2.6.1, rc-motion@npm:^2.6.2, rc-motion@npm:^2.9.0": version: 2.9.2 resolution: "rc-motion@npm:2.9.2" dependencies: @@ -10796,9 +10822,23 @@ __metadata: languageName: node linkType: hard -"rc-notification@npm:~5.4.0": - version: 5.4.0 - resolution: "rc-notification@npm:5.4.0" +"rc-motion@npm:^2.9.2": + version: 2.9.3 + resolution: "rc-motion@npm:2.9.3" + dependencies: + "@babel/runtime": "npm:^7.11.1" + classnames: "npm:^2.2.1" + rc-util: "npm:^5.43.0" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10c0/d83981e8a4e4adf51c80174d7a2ff1461659b84522c70941e74e7b52450f7a4af49992606349d8a5a56237271b6cb38613137266a193501e8442934950ecf9df + languageName: node + linkType: hard + +"rc-notification@npm:~5.6.0": + version: 5.6.2 + resolution: "rc-notification@npm:5.6.2" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:2.x" @@ -10807,7 +10847,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/f8709d9dfc357a8f12a6f40ad1a5f7c40e06ee3d8936e0f4e68cd7f03f91efb9c3bb69ee992070103f91c9acb241fb70a3fc01b72a4a1359fa110d5dfb5a926a + checksum: 10c0/ce4237ac23a04e6e07ec2610544938c64f08b3035360dccda6f17b6a6494f71fc8a588ae39542c5e06fa1ba96fc95084290a34b7f47f245ee8a23f944376d69c languageName: node linkType: hard @@ -10884,9 +10924,9 @@ __metadata: languageName: node linkType: hard -"rc-rate@npm:~2.12.0": - version: 2.12.0 - resolution: "rc-rate@npm:2.12.0" +"rc-rate@npm:~2.13.0": + version: 2.13.0 + resolution: "rc-rate@npm:2.13.0" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:^2.2.5" @@ -10894,7 +10934,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/871bb040ec1de727c9b83e0d5db68877c22ef7494f82ce6dedbe655fc7894d7db63e99bed96584eed122e8845270df0b08e2a97a4cc5600e652ce229d561ace5 + checksum: 10c0/3e2c15ee41d20837e820b6a1b83bf83e74ecb36c1da05c9e32c22d864586e7a826c961ba8159468ac9c9ac2fcb03b91a812070a5eb8119e77c2248ef95d6febd languageName: node linkType: hard @@ -10988,7 +11028,7 @@ __metadata: languageName: node linkType: hard -"rc-table@npm:~7.45.6": +"rc-table@npm:~7.45.7": version: 7.45.7 resolution: "rc-table@npm:7.45.7" dependencies: @@ -11005,7 +11045,7 @@ __metadata: languageName: node linkType: hard -"rc-tabs@npm:~15.1.0": +"rc-tabs@npm:~15.1.1": version: 15.1.1 resolution: "rc-tabs@npm:15.1.1" dependencies: @@ -11069,7 +11109,7 @@ __metadata: languageName: node linkType: hard -"rc-tree@npm:~5.8.1, rc-tree@npm:~5.8.7": +"rc-tree@npm:~5.8.1, rc-tree@npm:~5.8.8": version: 5.8.8 resolution: "rc-tree@npm:5.8.8" dependencies: @@ -11099,7 +11139,7 @@ __metadata: languageName: node linkType: hard -"rc-util@npm:^5.0.1, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.2.0, rc-util@npm:^5.20.1, rc-util@npm:^5.21.0, rc-util@npm:^5.24.4, rc-util@npm:^5.25.2, rc-util@npm:^5.27.0, rc-util@npm:^5.30.0, rc-util@npm:^5.31.1, rc-util@npm:^5.32.2, rc-util@npm:^5.34.1, rc-util@npm:^5.35.0, rc-util@npm:^5.36.0, rc-util@npm:^5.37.0, rc-util@npm:^5.38.0, rc-util@npm:^5.38.1, rc-util@npm:^5.40.1, rc-util@npm:^5.41.0, rc-util@npm:^5.43.0": +"rc-util@npm:^5.0.1, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.2.0, rc-util@npm:^5.20.1, rc-util@npm:^5.21.0, rc-util@npm:^5.24.4, rc-util@npm:^5.25.2, rc-util@npm:^5.27.0, rc-util@npm:^5.30.0, rc-util@npm:^5.31.1, rc-util@npm:^5.32.2, rc-util@npm:^5.34.1, rc-util@npm:^5.35.0, rc-util@npm:^5.36.0, rc-util@npm:^5.37.0, rc-util@npm:^5.38.0, rc-util@npm:^5.38.1, rc-util@npm:^5.40.1, rc-util@npm:^5.43.0": version: 5.43.0 resolution: "rc-util@npm:5.43.0" dependencies: @@ -12775,7 +12815,7 @@ __metadata: languageName: node linkType: hard -"stylis@npm:^4.3.3": +"stylis@npm:^4.3.4": version: 4.3.4 resolution: "stylis@npm:4.3.4" checksum: 10c0/4899c2674cd2538e314257abd1ba7ea3c2176439659ddac6593c78192cfd4a06f814a0a4fc69bc7f8fcc6b997e13d383dd9b578b71074746a0fb86045a83e42d @@ -13928,7 +13968,7 @@ __metadata: "@zip.js/zip.js": "npm:^2.7.32" abort-controller: "npm:^3.0.0" ansi-to-react: "npm:^6.1.6" - antd: "npm:5.17.4" + antd: "npm:5.18" ava: "npm:^6.1.3" ball-morphology: "npm:^0.1.0" base64-js: "npm:^1.2.1"