@ohif/app 3.13.0-beta.116 → 3.13.0-beta.117

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 (47) hide show
  1. package/dist/{1206.bundle.47f070e2254d128c.js → 1206.bundle.e04ca1efe6f987ba.js} +1 -1
  2. package/dist/1483.bundle.ab1e3a882b58eb79.js +470 -0
  3. package/dist/{1602.bundle.097ec19e8e61516f.js → 1602.bundle.ea4c1b43123dd2b3.js} +2 -2
  4. package/dist/{7701.bundle.945445d6681ddd20.js → 2343.bundle.48839e1b3fa4505e.js} +990 -7
  5. package/dist/{3500.bundle.1e063b7b4910d6cf.js → 3500.bundle.da69a02594beccc8.js} +1 -1
  6. package/dist/{3760.bundle.6c7eeb4b7f1583ca.js → 3760.bundle.e406b1c3fadf2a3b.js} +2 -2
  7. package/dist/{5448.bundle.1e50777e4c4e122a.js → 5448.bundle.5686ebb99c379f64.js} +1 -1
  8. package/dist/{5696.bundle.9f0366ad867385bc.js → 5696.bundle.4e44ce1f590134eb.js} +7 -4
  9. package/dist/{5910.bundle.5561806884c95754.js → 5910.bundle.0f19608f3e76859b.js} +2 -2
  10. package/dist/{419.bundle.9d0e6a72e1e3a17b.js → 6749.bundle.8c3dd9258f09df24.js} +288 -62
  11. package/dist/{7248.bundle.f761b21f343d4b9f.js → 7248.bundle.11ec7ee7e10b0a34.js} +2 -2
  12. package/dist/{7295.bundle.4d4b6de4d2bb8856.js → 7499.bundle.0f065214db09a60b.js} +502 -5
  13. package/dist/{781.bundle.efb0a6981676cebb.js → 781.bundle.3c1a02ca26d4565a.js} +2 -2
  14. package/dist/{8423.bundle.5d1b3092bc9562c9.js → 8423.bundle.f8e7d0f1eba7e178.js} +2 -2
  15. package/dist/8492.bundle.de58afbc98ce7972.js +504 -0
  16. package/dist/8595.css +2 -0
  17. package/dist/{899.bundle.e786f8dfb66d74ca.js → 899.bundle.50c16f860acbc848.js} +2 -2
  18. package/dist/{9068.bundle.cd36fcb4e15a153e.js → 9068.bundle.95f1e638ef694ea9.js} +2 -2
  19. package/dist/{9402.bundle.6549cc304496cd5c.js → 9402.bundle.6a8a324e963b4099.js} +2 -2
  20. package/dist/{9415.bundle.2a970c71de4014bf.js → 9415.bundle.20fee612b3b3dbfd.js} +2 -2
  21. package/dist/{9437.bundle.0fff227a859992ea.js → 9437.bundle.f3f5aff637471ac4.js} +107 -123
  22. package/dist/app-config.js +1 -1
  23. package/dist/{app.bundle.55057e411d635dc3.js → app.bundle.a73ad7e598640adf.js} +203 -36
  24. package/dist/customizations/index.html +400 -0
  25. package/dist/customizations/segmentation/segmentationAnnotationTools.jsonc +48 -0
  26. package/dist/customizations/segmentation/segmentationEditing.jsonc +59 -0
  27. package/dist/customizations/{ctPresets.jsonc → tools/ctPresets.jsonc} +1 -1
  28. package/dist/customizations/{measurementLabels.jsonc → tools/measurementLabels.jsonc} +1 -1
  29. package/dist/customizations/{smoothRotate.jsonc → tools/smoothRotate.jsonc} +1 -1
  30. package/dist/customizations/veterinary/veterinary.jsonc +5 -0
  31. package/dist/customizations/{veterinaryOverlay.jsonc → veterinary/veterinaryOverlay.jsonc} +3 -3
  32. package/dist/customizations/{patientBirthDate.jsonc → worklist/patientBirthDate.jsonc} +2 -2
  33. package/dist/index.html +1 -1
  34. package/dist/sw.js +1 -1
  35. package/package.json +5 -5
  36. package/dist/4834.bundle.a91450199d0f45e4.js +0 -900
  37. package/dist/6001.bundle.0789789db5410764.js +0 -1529
  38. package/dist/customizations/veterinary.jsonc +0 -5
  39. /package/dist/{100.bundle.ac04a425c0851574.js → 100.bundle.ec5ee3b5f479a217.js} +0 -0
  40. /package/dist/{1180.bundle.c19c443fe8d26719.js → 1180.bundle.9bed26c1a1e75389.js} +0 -0
  41. /package/dist/{2779.bundle.dca036a18399be96.js → 2779.bundle.2a225a69fb65c30d.js} +0 -0
  42. /package/dist/{4556.bundle.b705ab15473128c7.js → 4556.bundle.735ccc9efdad0052.js} +0 -0
  43. /package/dist/{4683.bundle.5d12928efa9f70f4.js → 4683.bundle.e5d3182f0f4347af.js} +0 -0
  44. /package/dist/{7295.css → 8492.css} +0 -0
  45. /package/dist/{8832.bundle.ede981706cac8e15.js → 8832.bundle.1cb57aab32daeab8.js} +0 -0
  46. /package/dist/{9116.bundle.225e003c28c550c1.js → 9116.bundle.fffb2ff349a3c452.js} +0 -0
  47. /package/dist/{9290.bundle.a18c40b82772a3c6.js → 9290.bundle.82cf4e74ab3fa20a.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["rspackChunk"] = globalThis["rspackChunk"] || []).push([[7701], {
2
+ (globalThis["rspackChunk"] = globalThis["rspackChunk"] || []).push([[2343], {
3
3
  2242(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
4
4
 
5
5
  // EXPORTS
@@ -1628,7 +1628,7 @@ function useViewportSegmentations({
1628
1628
  }
1629
1629
 
1630
1630
  },
1631
- 28772(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1631
+ 86714(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1632
1632
 
1633
1633
  // EXPORTS
1634
1634
  __webpack_require__.d(__webpack_exports__, {
@@ -8956,12 +8956,16 @@ const toolbarSections = {
8956
8956
  };
8957
8957
 
8958
8958
  /**
8959
- * Customizations registered (at default scope) by the cornerstone extension:
8960
- * - `cornerstone.toolbarButtons` – the default toolbar button definitions
8961
- * - `cornerstone.toolbarSections` – the default toolbar layout (section -> button ids)
8959
+ * Capability packs registered (at default scope) by the cornerstone extension:
8960
+ * - `cornerstone.toolbarButtons` – the general toolbar button definitions
8961
+ * - `cornerstone.toolbarSections` – the general toolbar layout (section -> button ids)
8962
8962
  *
8963
- * Modes read these by name in `onModeEnter`; URL `?customization=` modules can
8964
- * extend them with immutability-helper commands (e.g. `$push` a new button).
8963
+ * These are pure "what can exist" packs — they carry no mode identity. Modes
8964
+ * compose them with `{ $reference }` markers in their own `toolbarButtons` /
8965
+ * `toolbarSections` instance arrays, which the mode route seeds into the Mode
8966
+ * customization scope on enter; URL `?customization=` modules extend the result
8967
+ * through the `mode` phase (e.g.
8968
+ * `mode.basic.toolbarButtons: { $push: [{ $reference: '...' }] }`).
8965
8969
  */
8966
8970
  const toolbarButtonsCustomization = {
8967
8971
  'cornerstone.toolbarButtons': toolbarButtonsCustomization_toolbarButtons,
@@ -8969,6 +8973,979 @@ const toolbarButtonsCustomization = {
8969
8973
  };
8970
8974
 
8971
8975
  /* export default */ const customizations_toolbarButtonsCustomization = (toolbarButtonsCustomization);
8976
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/customizations/segmentationToolbarCustomization.ts
8977
+
8978
+
8979
+ const {
8980
+ TOOLBAR_SECTIONS: segmentationToolbarCustomization_TOOLBAR_SECTIONS
8981
+ } = core_src/* .ToolbarService */.hx;
8982
+ const MIN_SEGMENTATION_DRAWING_RADIUS = 0.5;
8983
+ const MAX_SEGMENTATION_DRAWING_RADIUS = 99.5;
8984
+ const segmentationToolbarCustomization_setToolActiveToolbar = (/* unused pure expression or super */ null && ({
8985
+ commandName: 'setToolActiveToolbar',
8986
+ commandOptions: {
8987
+ toolGroupIds: ['default', 'mpr', 'SRToolGroup', 'volume3d']
8988
+ }
8989
+ }));
8990
+ const segmentationToolbarCustomization_callbacks = toolName => [{
8991
+ commandName: 'setViewportForToolConfiguration',
8992
+ commandOptions: {
8993
+ toolName
8994
+ }
8995
+ }];
8996
+
8997
+ /**
8998
+ * Segmentation editing toolbar buttons: the toolbox section containers plus
8999
+ * the labelmap / contour editing tools and utilities. These complement the
9000
+ * general buttons in `cornerstone.toolbarButtons`; together they are the
9001
+ * default button set for the segmentation mode, and modes such as basic /
9002
+ * longitudinal can pull them in via a customization (see
9003
+ * `segmentationEditing.jsonc`).
9004
+ */
9005
+ const segmentationToolbarButtons = [
9006
+ // section containers for the nested toolboxes and toolbars
9007
+ {
9008
+ id: 'BrushTools',
9009
+ uiType: 'ohif.toolBoxButtonGroup',
9010
+ props: {
9011
+ buttonSection: true
9012
+ }
9013
+ }, {
9014
+ id: 'LabelMapUtilities',
9015
+ uiType: 'ohif.Toolbar',
9016
+ props: {
9017
+ buttonSection: true
9018
+ }
9019
+ }, {
9020
+ id: 'ContourUtilities',
9021
+ uiType: 'ohif.Toolbar',
9022
+ props: {
9023
+ buttonSection: true
9024
+ }
9025
+ }, {
9026
+ id: 'LabelMapTools',
9027
+ uiType: 'ohif.toolBoxButtonGroup',
9028
+ props: {
9029
+ buttonSection: true
9030
+ }
9031
+ }, {
9032
+ id: 'ContourTools',
9033
+ uiType: 'ohif.toolBoxButtonGroup',
9034
+ props: {
9035
+ buttonSection: true
9036
+ }
9037
+ },
9038
+ // tool defs
9039
+ {
9040
+ id: 'PlanarFreehandContourSegmentationTool',
9041
+ uiType: 'ohif.toolBoxButton',
9042
+ props: {
9043
+ icon: 'icon-tool-freehand-roi',
9044
+ label: i18next/* ["default"].t */.A.t('Buttons:Freehand Segmentation'),
9045
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Freehand Segmentation'),
9046
+ evaluate: [{
9047
+ name: 'evaluate.cornerstone.segmentation',
9048
+ toolNames: ['PlanarFreehandContourSegmentationTool'],
9049
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9050
+ }, {
9051
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9052
+ segmentationRepresentationType: 'Contour'
9053
+ }],
9054
+ commands: [{
9055
+ commandName: 'setToolActiveToolbar',
9056
+ commandOptions: {
9057
+ bindings: [{
9058
+ mouseButton: 1 // Left Click
9059
+ }, {
9060
+ mouseButton: 1,
9061
+ // Left Click+Shift to create a hole
9062
+ modifierKey: 16 // Shift
9063
+ }]
9064
+ }
9065
+ }, {
9066
+ commandName: 'activateSelectedSegmentationOfType',
9067
+ commandOptions: {
9068
+ segmentationRepresentationType: 'Contour'
9069
+ }
9070
+ }],
9071
+ options: [{
9072
+ name: i18next/* ["default"].t */.A.t('Buttons:Interpolate Contours'),
9073
+ type: 'switch',
9074
+ id: 'planarFreehandInterpolateContours',
9075
+ value: false,
9076
+ commands: {
9077
+ commandName: 'setInterpolationToolConfiguration'
9078
+ }
9079
+ }]
9080
+ }
9081
+ }, {
9082
+ id: 'LivewireContourSegmentationTool',
9083
+ uiType: 'ohif.toolBoxButton',
9084
+ props: {
9085
+ icon: 'icon-tool-livewire',
9086
+ label: i18next/* ["default"].t */.A.t('Buttons:Livewire Contour'),
9087
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Livewire Contour'),
9088
+ evaluate: [{
9089
+ name: 'evaluate.cornerstone.segmentation',
9090
+ toolNames: ['LivewireContourSegmentationTool'],
9091
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9092
+ }, {
9093
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9094
+ segmentationRepresentationType: 'Contour'
9095
+ }],
9096
+ commands: [{
9097
+ commandName: 'setToolActiveToolbar',
9098
+ commandOptions: {
9099
+ bindings: [{
9100
+ mouseButton: 1 // Left Click
9101
+ }, {
9102
+ mouseButton: 1,
9103
+ // Left Click+Shift to create a hole
9104
+ modifierKey: 16 // Shift
9105
+ }]
9106
+ }
9107
+ }, {
9108
+ commandName: 'activateSelectedSegmentationOfType',
9109
+ commandOptions: {
9110
+ segmentationRepresentationType: 'Contour'
9111
+ }
9112
+ }],
9113
+ options: [{
9114
+ name: i18next/* ["default"].t */.A.t('Buttons:Interpolate Contours'),
9115
+ type: 'switch',
9116
+ id: 'livewireInterpolateContours',
9117
+ value: false,
9118
+ commands: {
9119
+ commandName: 'setInterpolationToolConfiguration'
9120
+ }
9121
+ }]
9122
+ }
9123
+ }, {
9124
+ id: 'SplineContourSegmentationTool',
9125
+ uiType: 'ohif.toolBoxButton',
9126
+ props: {
9127
+ icon: 'icon-tool-spline-roi',
9128
+ label: i18next/* ["default"].t */.A.t('Buttons:Spline Contour Segmentation Tool'),
9129
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Spline Contour Segmentation Tool'),
9130
+ evaluate: [{
9131
+ name: 'evaluate.cornerstone.segmentation',
9132
+ toolNames: ['CatmullRomSplineROI', 'LinearSplineROI', 'BSplineROI'],
9133
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9134
+ }, {
9135
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9136
+ segmentationRepresentationType: 'Contour'
9137
+ }],
9138
+ commands: [{
9139
+ commandName: 'activateSelectedSegmentationOfType',
9140
+ commandOptions: {
9141
+ segmentationRepresentationType: 'Contour'
9142
+ }
9143
+ }],
9144
+ options: [{
9145
+ name: i18next/* ["default"].t */.A.t('Buttons:Spline Type'),
9146
+ type: 'select',
9147
+ id: 'splineTypeSelect',
9148
+ value: 'CatmullRomSplineROI',
9149
+ values: [{
9150
+ id: 'CatmullRomSplineROI',
9151
+ value: 'CatmullRomSplineROI',
9152
+ label: i18next/* ["default"].t */.A.t('Buttons:Catmull Rom Spline')
9153
+ }, {
9154
+ id: 'LinearSplineROI',
9155
+ value: 'LinearSplineROI',
9156
+ label: i18next/* ["default"].t */.A.t('Buttons:Linear Spline')
9157
+ }, {
9158
+ id: 'BSplineROI',
9159
+ value: 'BSplineROI',
9160
+ label: i18next/* ["default"].t */.A.t('Buttons:B-Spline')
9161
+ }],
9162
+ commands: {
9163
+ commandName: 'setToolActiveToolbar',
9164
+ commandOptions: {
9165
+ bindings: [{
9166
+ mouseButton: 1 // Left Click
9167
+ }, {
9168
+ mouseButton: 1,
9169
+ // Left Click+Shift to create a hole
9170
+ modifierKey: 16 // Shift
9171
+ }]
9172
+ }
9173
+ }
9174
+ }, {
9175
+ name: i18next/* ["default"].t */.A.t('Buttons:Simplified Spline'),
9176
+ type: 'switch',
9177
+ id: 'simplifiedSpline',
9178
+ value: true,
9179
+ commands: {
9180
+ commandName: 'setSimplifiedSplineForSplineContourSegmentationTool'
9181
+ }
9182
+ }, {
9183
+ name: i18next/* ["default"].t */.A.t('Buttons:Interpolate Contours'),
9184
+ type: 'switch',
9185
+ id: 'splineInterpolateContours',
9186
+ value: false,
9187
+ commands: {
9188
+ commandName: 'setInterpolationToolConfiguration',
9189
+ commandOptions: {
9190
+ toolNames: ['CatmullRomSplineROI', 'LinearSplineROI', 'BSplineROI']
9191
+ }
9192
+ }
9193
+ }]
9194
+ }
9195
+ }, {
9196
+ id: 'SculptorTool',
9197
+ uiType: 'ohif.toolBoxButton',
9198
+ props: {
9199
+ icon: 'icon-tool-sculptor',
9200
+ label: i18next/* ["default"].t */.A.t('Buttons:Sculptor Tool'),
9201
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Sculptor Tool'),
9202
+ evaluate: [{
9203
+ name: 'evaluate.cornerstone.segmentation',
9204
+ toolNames: ['SculptorTool'],
9205
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9206
+ }, {
9207
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9208
+ segmentationRepresentationType: 'Contour'
9209
+ }],
9210
+ commands: ['setToolActiveToolbar', {
9211
+ commandName: 'activateSelectedSegmentationOfType',
9212
+ commandOptions: {
9213
+ segmentationRepresentationType: 'Contour'
9214
+ }
9215
+ }],
9216
+ options: [{
9217
+ name: i18next/* ["default"].t */.A.t('Buttons:Dynamic Cursor Size'),
9218
+ type: 'switch',
9219
+ id: 'dynamicCursorSize',
9220
+ value: true,
9221
+ commands: {
9222
+ commandName: 'setDynamicCursorSizeForSculptorTool'
9223
+ }
9224
+ }]
9225
+ }
9226
+ }, {
9227
+ id: 'Brush',
9228
+ uiType: 'ohif.toolBoxButton',
9229
+ props: {
9230
+ icon: 'icon-tool-brush',
9231
+ label: i18next/* ["default"].t */.A.t('Buttons:Brush'),
9232
+ evaluate: [{
9233
+ name: 'evaluate.cornerstone.segmentation',
9234
+ toolNames: ['CircularBrush', 'SphereBrush'],
9235
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9236
+ }, {
9237
+ name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
9238
+ radiusOptionId: 'brush-radius'
9239
+ }, {
9240
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9241
+ segmentationRepresentationType: 'Labelmap'
9242
+ }],
9243
+ commands: {
9244
+ commandName: 'activateSelectedSegmentationOfType',
9245
+ commandOptions: {
9246
+ segmentationRepresentationType: 'Labelmap'
9247
+ }
9248
+ },
9249
+ options: [{
9250
+ name: i18next/* ["default"].t */.A.t('Buttons:Radius (mm)'),
9251
+ id: 'brush-radius',
9252
+ type: 'range',
9253
+ explicitRunOnly: true,
9254
+ min: MIN_SEGMENTATION_DRAWING_RADIUS,
9255
+ max: MAX_SEGMENTATION_DRAWING_RADIUS,
9256
+ step: 0.5,
9257
+ value: 25,
9258
+ commands: [{
9259
+ commandName: 'setBrushSize',
9260
+ commandOptions: {
9261
+ toolNames: ['CircularBrush', 'SphereBrush']
9262
+ }
9263
+ }]
9264
+ }, {
9265
+ name: i18next/* ["default"].t */.A.t('Buttons:Shape'),
9266
+ type: 'radio',
9267
+ id: 'brush-mode',
9268
+ value: 'CircularBrush',
9269
+ values: [{
9270
+ value: 'CircularBrush',
9271
+ label: i18next/* ["default"].t */.A.t('Buttons:Circle')
9272
+ }, {
9273
+ value: 'SphereBrush',
9274
+ label: i18next/* ["default"].t */.A.t('Buttons:Sphere')
9275
+ }],
9276
+ commands: ['setToolActiveToolbar']
9277
+ }]
9278
+ }
9279
+ }, {
9280
+ id: 'InterpolateLabelmap',
9281
+ uiType: 'ohif.toolButton',
9282
+ props: {
9283
+ icon: 'actions-interpolate',
9284
+ label: i18next/* ["default"].t */.A.t('Buttons:Interpolate Labelmap'),
9285
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Automatically fill in missing slices between drawn segments. Use brush or threshold tools on at least two slices, then click to interpolate across slices. Works in any direction. Volume must be reconstructable.'),
9286
+ evaluate: [{
9287
+ name: 'evaluate.cornerstone.segmentation'
9288
+ }, {
9289
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9290
+ segmentationRepresentationType: 'Labelmap'
9291
+ }, {
9292
+ name: 'evaluate.displaySetIsReconstructable',
9293
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:The current viewport cannot handle interpolation.')
9294
+ }],
9295
+ commands: [{
9296
+ commandName: 'activateSelectedSegmentationOfType',
9297
+ commandOptions: {
9298
+ segmentationRepresentationType: 'Labelmap'
9299
+ }
9300
+ }, 'interpolateLabelmap']
9301
+ }
9302
+ }, {
9303
+ id: 'SegmentBidirectional',
9304
+ uiType: 'ohif.toolButton',
9305
+ props: {
9306
+ icon: 'actions-bidirectional',
9307
+ label: i18next/* ["default"].t */.A.t('Buttons:Segment Bidirectional'),
9308
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Automatically detects the largest length and width across slices for the selected segment and displays a bidirectional measurement.'),
9309
+ evaluate: [{
9310
+ name: 'evaluate.cornerstone.segmentation',
9311
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9312
+ }, {
9313
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9314
+ segmentationRepresentationType: 'Labelmap'
9315
+ }],
9316
+ commands: [{
9317
+ commandName: 'activateSelectedSegmentationOfType',
9318
+ commandOptions: {
9319
+ segmentationRepresentationType: 'Labelmap'
9320
+ }
9321
+ }, 'runSegmentBidirectional']
9322
+ }
9323
+ }, {
9324
+ id: 'RegionSegmentPlus',
9325
+ uiType: 'ohif.toolBoxButton',
9326
+ props: {
9327
+ icon: 'icon-tool-click-segment',
9328
+ label: i18next/* ["default"].t */.A.t('Buttons:One Click Segment'),
9329
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Detects segmentable regions with one click. Hover for visual feedback—click when a plus sign appears to auto-segment the lesion.'),
9330
+ evaluate: [{
9331
+ name: 'evaluate.cornerstone.segmentation',
9332
+ toolNames: ['RegionSegmentPlus'],
9333
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable this tool.')
9334
+ }, {
9335
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9336
+ segmentationRepresentationType: 'Labelmap'
9337
+ }],
9338
+ commands: ['setToolActiveToolbar', {
9339
+ commandName: 'activateSelectedSegmentationOfType',
9340
+ commandOptions: {
9341
+ segmentationRepresentationType: 'Labelmap'
9342
+ }
9343
+ }]
9344
+ }
9345
+ }, {
9346
+ id: 'LabelmapSlicePropagation',
9347
+ uiType: 'ohif.toolBoxButton',
9348
+ props: {
9349
+ icon: 'icon-labelmap-slice-propagation',
9350
+ label: i18next/* ["default"].t */.A.t('Buttons:Labelmap Assist'),
9351
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Toggle AI assistance for segmenting nearby slices. After drawing on a slice, scroll to preview predictions. Press Enter to accept or Esc to skip.'),
9352
+ evaluate: ['evaluate.cornerstoneTool.toggle', {
9353
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9354
+ segmentationRepresentationType: 'Labelmap'
9355
+ }],
9356
+ listeners: {
9357
+ [core_src/* .ViewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED */.sI.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: segmentationToolbarCustomization_callbacks('LabelmapSlicePropagation'),
9358
+ [core_src/* .ViewportGridService.EVENTS.VIEWPORTS_READY */.sI.EVENTS.VIEWPORTS_READY]: segmentationToolbarCustomization_callbacks('LabelmapSlicePropagation')
9359
+ },
9360
+ commands: [{
9361
+ commandName: 'activateSelectedSegmentationOfType',
9362
+ commandOptions: {
9363
+ segmentationRepresentationType: 'Labelmap'
9364
+ }
9365
+ }, 'toggleEnabledDisabledToolbar']
9366
+ }
9367
+ }, {
9368
+ id: 'MarkerLabelmap',
9369
+ uiType: 'ohif.toolBoxButton',
9370
+ props: {
9371
+ icon: 'icon-marker-labelmap',
9372
+ label: i18next/* ["default"].t */.A.t('Buttons:Marker Guided Labelmap'),
9373
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Use include/exclude markers to guide AI (SAM) segmentation. Click to place markers, Enter to accept results, Esc to reject, and N to go to the next slice while keeping markers.'),
9374
+ evaluate: [{
9375
+ name: 'evaluate.cornerstone.segmentation',
9376
+ toolNames: ['MarkerLabelmap', 'MarkerInclude', 'MarkerExclude']
9377
+ }, {
9378
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9379
+ segmentationRepresentationType: 'Labelmap'
9380
+ }],
9381
+ commands: ['setToolActiveToolbar', {
9382
+ commandName: 'activateSelectedSegmentationOfType',
9383
+ commandOptions: {
9384
+ segmentationRepresentationType: 'Labelmap'
9385
+ }
9386
+ }],
9387
+ listeners: {
9388
+ [core_src/* .ViewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED */.sI.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: segmentationToolbarCustomization_callbacks('MarkerLabelmap'),
9389
+ [core_src/* .ViewportGridService.EVENTS.VIEWPORTS_READY */.sI.EVENTS.VIEWPORTS_READY]: segmentationToolbarCustomization_callbacks('MarkerLabelmap')
9390
+ },
9391
+ options: [{
9392
+ name: i18next/* ["default"].t */.A.t('Buttons:Marker Mode'),
9393
+ type: 'radio',
9394
+ id: 'marker-mode',
9395
+ value: 'markerInclude',
9396
+ values: [{
9397
+ value: 'markerInclude',
9398
+ label: i18next/* ["default"].t */.A.t('Buttons:Include')
9399
+ }, {
9400
+ value: 'markerExclude',
9401
+ label: i18next/* ["default"].t */.A.t('Buttons:Exclude')
9402
+ }],
9403
+ commands: ({
9404
+ commandsManager,
9405
+ options
9406
+ }) => {
9407
+ const markerModeOption = options.find(option => option.id === 'marker-mode');
9408
+ if (markerModeOption.value === 'markerInclude') {
9409
+ commandsManager.run('setToolActive', {
9410
+ toolName: 'MarkerInclude'
9411
+ });
9412
+ } else {
9413
+ commandsManager.run('setToolActive', {
9414
+ toolName: 'MarkerExclude'
9415
+ });
9416
+ }
9417
+ }
9418
+ }, {
9419
+ name: i18next/* ["default"].t */.A.t('Buttons:Clear Markers'),
9420
+ type: 'button',
9421
+ id: 'clear-markers',
9422
+ commands: 'clearMarkersForMarkerLabelmap'
9423
+ }]
9424
+ }
9425
+ }, {
9426
+ id: 'Eraser',
9427
+ uiType: 'ohif.toolBoxButton',
9428
+ props: {
9429
+ icon: 'icon-tool-eraser',
9430
+ label: i18next/* ["default"].t */.A.t('Buttons:Eraser'),
9431
+ evaluate: [{
9432
+ name: 'evaluate.cornerstone.segmentation',
9433
+ toolNames: ['CircularEraser', 'SphereEraser']
9434
+ }, {
9435
+ name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
9436
+ radiusOptionId: 'eraser-radius'
9437
+ }, {
9438
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9439
+ segmentationRepresentationType: 'Labelmap'
9440
+ }],
9441
+ options: [{
9442
+ name: i18next/* ["default"].t */.A.t('Buttons:Radius (mm)'),
9443
+ id: 'eraser-radius',
9444
+ type: 'range',
9445
+ explicitRunOnly: true,
9446
+ min: MIN_SEGMENTATION_DRAWING_RADIUS,
9447
+ max: MAX_SEGMENTATION_DRAWING_RADIUS,
9448
+ step: 0.5,
9449
+ value: 25,
9450
+ commands: {
9451
+ commandName: 'setBrushSize',
9452
+ commandOptions: {
9453
+ toolNames: ['CircularEraser', 'SphereEraser']
9454
+ }
9455
+ }
9456
+ }, {
9457
+ name: i18next/* ["default"].t */.A.t('Buttons:Shape'),
9458
+ type: 'radio',
9459
+ id: 'eraser-mode',
9460
+ value: 'CircularEraser',
9461
+ values: [{
9462
+ value: 'CircularEraser',
9463
+ label: i18next/* ["default"].t */.A.t('Buttons:Circle')
9464
+ }, {
9465
+ value: 'SphereEraser',
9466
+ label: i18next/* ["default"].t */.A.t('Buttons:Sphere')
9467
+ }],
9468
+ commands: 'setToolActiveToolbar'
9469
+ }],
9470
+ commands: {
9471
+ commandName: 'activateSelectedSegmentationOfType',
9472
+ commandOptions: {
9473
+ segmentationRepresentationType: 'Labelmap'
9474
+ }
9475
+ }
9476
+ }
9477
+ }, {
9478
+ id: 'Threshold',
9479
+ uiType: 'ohif.toolBoxButton',
9480
+ props: {
9481
+ icon: 'icon-tool-threshold',
9482
+ label: i18next/* ["default"].t */.A.t('Buttons:Threshold Tool'),
9483
+ evaluate: [{
9484
+ name: 'evaluate.cornerstone.segmentation',
9485
+ toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush', 'ThresholdCircularBrushDynamic', 'ThresholdSphereBrushDynamic']
9486
+ }, {
9487
+ name: 'evaluate.cornerstone.segmentation.synchronizeDrawingRadius',
9488
+ radiusOptionId: 'threshold-radius'
9489
+ }, {
9490
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9491
+ segmentationRepresentationType: 'Labelmap'
9492
+ }],
9493
+ commands: {
9494
+ commandName: 'activateSelectedSegmentationOfType',
9495
+ commandOptions: {
9496
+ segmentationRepresentationType: 'Labelmap'
9497
+ }
9498
+ },
9499
+ options: [{
9500
+ name: i18next/* ["default"].t */.A.t('Buttons:Radius (mm)'),
9501
+ id: 'threshold-radius',
9502
+ type: 'range',
9503
+ explicitRunOnly: true,
9504
+ min: MIN_SEGMENTATION_DRAWING_RADIUS,
9505
+ max: MAX_SEGMENTATION_DRAWING_RADIUS,
9506
+ step: 0.5,
9507
+ value: 25,
9508
+ commands: {
9509
+ commandName: 'setBrushSize',
9510
+ commandOptions: {
9511
+ toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush', 'ThresholdCircularBrushDynamic', 'ThresholdSphereBrushDynamic']
9512
+ }
9513
+ }
9514
+ }, {
9515
+ name: i18next/* ["default"].t */.A.t('Buttons:Shape'),
9516
+ type: 'radio',
9517
+ id: 'threshold-shape',
9518
+ value: 'ThresholdCircularBrush',
9519
+ values: [{
9520
+ value: 'ThresholdCircularBrush',
9521
+ label: i18next/* ["default"].t */.A.t('Buttons:Circle')
9522
+ }, {
9523
+ value: 'ThresholdSphereBrush',
9524
+ label: i18next/* ["default"].t */.A.t('Buttons:Sphere')
9525
+ }],
9526
+ commands: ({
9527
+ value,
9528
+ commandsManager,
9529
+ options
9530
+ }) => {
9531
+ const optionsDynamic = options.find(option => option.id === 'dynamic-mode');
9532
+ if (optionsDynamic.value === 'ThresholdDynamic') {
9533
+ commandsManager.run('setToolActive', {
9534
+ toolName: value === 'ThresholdCircularBrush' ? 'ThresholdCircularBrushDynamic' : 'ThresholdSphereBrushDynamic'
9535
+ });
9536
+ } else {
9537
+ commandsManager.run('setToolActive', {
9538
+ toolName: value
9539
+ });
9540
+ }
9541
+ }
9542
+ }, {
9543
+ name: i18next/* ["default"].t */.A.t('Buttons:Threshold'),
9544
+ type: 'radio',
9545
+ id: 'dynamic-mode',
9546
+ value: 'ThresholdDynamic',
9547
+ values: [{
9548
+ value: 'ThresholdDynamic',
9549
+ label: i18next/* ["default"].t */.A.t('Buttons:Dynamic')
9550
+ }, {
9551
+ value: 'ThresholdRange',
9552
+ label: i18next/* ["default"].t */.A.t('Buttons:Range')
9553
+ }],
9554
+ commands: ({
9555
+ value,
9556
+ commandsManager,
9557
+ options
9558
+ }) => {
9559
+ const thresholdRangeOption = options.find(option => option.id === 'threshold-shape');
9560
+ if (value === 'ThresholdDynamic') {
9561
+ commandsManager.run('setToolActiveToolbar', {
9562
+ toolName: thresholdRangeOption.value === 'ThresholdCircularBrush' ? 'ThresholdCircularBrushDynamic' : 'ThresholdSphereBrushDynamic'
9563
+ });
9564
+ } else {
9565
+ commandsManager.run('setToolActiveToolbar', {
9566
+ toolName: thresholdRangeOption.value
9567
+ });
9568
+ const thresholdRangeValue = options.find(option => option.id === 'threshold-range').value;
9569
+ commandsManager.run('setThresholdRange', {
9570
+ toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush'],
9571
+ value: thresholdRangeValue
9572
+ });
9573
+ }
9574
+ }
9575
+ }, {
9576
+ name: 'ThresholdRange',
9577
+ type: 'double-range',
9578
+ id: 'threshold-range',
9579
+ min: -1000,
9580
+ max: 1000,
9581
+ step: 1,
9582
+ value: [50, 600],
9583
+ condition: ({
9584
+ options
9585
+ }) => options.find(option => option.id === 'dynamic-mode').value === 'ThresholdRange',
9586
+ commands: {
9587
+ commandName: 'setThresholdRange',
9588
+ commandOptions: {
9589
+ toolNames: ['ThresholdCircularBrush', 'ThresholdSphereBrush']
9590
+ }
9591
+ }
9592
+ }]
9593
+ }
9594
+ }, {
9595
+ id: 'Shapes',
9596
+ uiType: 'ohif.toolBoxButton',
9597
+ props: {
9598
+ icon: 'icon-tool-shape',
9599
+ label: i18next/* ["default"].t */.A.t('Buttons:Shapes'),
9600
+ evaluate: [{
9601
+ name: 'evaluate.cornerstone.segmentation',
9602
+ toolNames: ['CircleScissor', 'SphereScissor', 'RectangleScissor'],
9603
+ disabledText: i18next/* ["default"].t */.A.t('Buttons:Create new segmentation to enable shapes tool.')
9604
+ }, {
9605
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9606
+ segmentationRepresentationType: 'Labelmap'
9607
+ }],
9608
+ commands: {
9609
+ commandName: 'activateSelectedSegmentationOfType',
9610
+ commandOptions: {
9611
+ segmentationRepresentationType: 'Labelmap'
9612
+ }
9613
+ },
9614
+ options: [{
9615
+ name: i18next/* ["default"].t */.A.t('Buttons:Shape'),
9616
+ type: 'radio',
9617
+ value: 'CircleScissor',
9618
+ id: 'shape-mode',
9619
+ values: [{
9620
+ value: 'CircleScissor',
9621
+ label: i18next/* ["default"].t */.A.t('Buttons:Circle')
9622
+ }, {
9623
+ value: 'SphereScissor',
9624
+ label: i18next/* ["default"].t */.A.t('Buttons:Sphere')
9625
+ }, {
9626
+ value: 'RectangleScissor',
9627
+ label: i18next/* ["default"].t */.A.t('Buttons:Rectangle')
9628
+ }],
9629
+ commands: 'setToolActiveToolbar'
9630
+ }]
9631
+ }
9632
+ }, {
9633
+ id: 'SimplifyContours',
9634
+ uiType: 'ohif.toolButton',
9635
+ props: {
9636
+ icon: 'actions-simplify',
9637
+ label: 'Simplify Contours',
9638
+ tooltip: 'Simplify Contours',
9639
+ commands: ['toggleActiveSegmentationUtility'],
9640
+ evaluate: [{
9641
+ name: 'cornerstone.isActiveSegmentationUtility'
9642
+ }],
9643
+ options: 'cornerstone.SimplifyContourOptions'
9644
+ }
9645
+ }, {
9646
+ id: 'SmoothContours',
9647
+ uiType: 'ohif.toolButton',
9648
+ props: {
9649
+ icon: 'actions-smooth',
9650
+ label: 'Smooth Contours',
9651
+ tooltip: 'Smooth Contours',
9652
+ commands: ['toggleActiveSegmentationUtility'],
9653
+ evaluate: [{
9654
+ name: 'cornerstone.isActiveSegmentationUtility'
9655
+ }],
9656
+ options: 'cornerstone.SmoothContoursOptions'
9657
+ }
9658
+ }, {
9659
+ id: 'LogicalContourOperations',
9660
+ uiType: 'ohif.toolButton',
9661
+ props: {
9662
+ icon: 'actions-combine',
9663
+ label: 'Combine Contours',
9664
+ tooltip: 'Combine Contours',
9665
+ commands: ['toggleActiveSegmentationUtility'],
9666
+ evaluate: [{
9667
+ name: 'cornerstone.isActiveSegmentationUtility'
9668
+ }],
9669
+ options: 'cornerstone.LogicalContourOperationsOptions'
9670
+ }
9671
+ }, {
9672
+ id: 'LabelMapEditWithContour',
9673
+ uiType: 'ohif.toolBoxButton',
9674
+ props: {
9675
+ icon: 'tool-labelmap-edit-with-contour',
9676
+ label: i18next/* ["default"].t */.A.t('Buttons:Labelmap Edit with Contour Tool'),
9677
+ tooltip: i18next/* ["default"].t */.A.t('Buttons:Labelmap Edit with Contour Tool'),
9678
+ commands: ['setToolActiveToolbar', {
9679
+ commandName: 'activateSelectedSegmentationOfType',
9680
+ commandOptions: {
9681
+ segmentationRepresentationType: 'Labelmap'
9682
+ }
9683
+ }],
9684
+ evaluate: [{
9685
+ name: 'evaluate.cornerstone.segmentation',
9686
+ toolNames: ['LabelMapEditWithContour'],
9687
+ disabledText: 'Create new segmentation to enable this tool.'
9688
+ }, {
9689
+ name: 'evaluate.cornerstone.hasSegmentationOfType',
9690
+ segmentationRepresentationType: 'Labelmap'
9691
+ }]
9692
+ }
9693
+ }];
9694
+
9695
+ /**
9696
+ * The toolbox / utilities section wiring for segmentation editing. These are
9697
+ * the sections rendered by the `panelSegmentationWithTools*` panels, so any
9698
+ * mode that shows those panels can merge this block into its toolbar sections.
9699
+ */
9700
+ const segmentationToolboxSections = {
9701
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.labelMapSegmentationToolbox]: ['LabelMapTools'],
9702
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.contourSegmentationToolbox]: ['ContourTools'],
9703
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.labelMapSegmentationUtilities]: ['LabelMapUtilities'],
9704
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.contourSegmentationUtilities]: ['ContourUtilities'],
9705
+ LabelMapTools: ['LabelmapSlicePropagation', 'BrushTools', 'MarkerLabelmap', 'RegionSegmentPlus', 'Shapes', 'LabelMapEditWithContour'],
9706
+ ContourTools: ['PlanarFreehandContourSegmentationTool', 'SculptorTool', 'SplineContourSegmentationTool', 'LivewireContourSegmentationTool'],
9707
+ LabelMapUtilities: ['InterpolateLabelmap', 'SegmentBidirectional'],
9708
+ ContourUtilities: ['LogicalContourOperations', 'SimplifyContours', 'SmoothContours'],
9709
+ BrushTools: ['Brush', 'Eraser', 'Threshold']
9710
+ };
9711
+
9712
+ /**
9713
+ * The segmentation mode's main toolbar layout (primary bar and viewport
9714
+ * action corners). Kept separate from the toolbox wiring above so other modes
9715
+ * can adopt segmentation editing without adopting this mode layout.
9716
+ */
9717
+ const segmentationModeToolbarSections = {
9718
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.primary]: ['WindowLevel', 'Pan', 'Zoom', 'TrackballRotate', 'Capture', 'Layout', 'Crosshairs', 'MoreTools'],
9719
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.viewportActionMenu.topLeft]: ['orientationMenu', 'dataOverlayMenu'],
9720
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.viewportActionMenu.bottomMiddle]: ['AdvancedRenderingControls'],
9721
+ AdvancedRenderingControls: ['windowLevelMenuEmbedded', 'voiManualControlMenu', 'Colorbar', 'opacityMenu', 'thresholdMenu'],
9722
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.viewportActionMenu.topRight]: ['modalityLoadBadge', 'trackingStatus', 'navigationComponent'],
9723
+ [segmentationToolbarCustomization_TOOLBAR_SECTIONS.viewportActionMenu.bottomLeft]: ['windowLevelMenu'],
9724
+ MoreTools: ['Reset', 'rotate-right', 'flipHorizontal', 'ReferenceLines', 'ImageOverlayViewer', 'StackScroll', 'invert', 'Cine', 'Magnify', 'TagBrowser']
9725
+ };
9726
+
9727
+ /**
9728
+ * Segmentation capability packs registered (at default scope) by the
9729
+ * cornerstone extension. These are pure "what can exist" packs and carry no
9730
+ * mode identity:
9731
+ * - `cornerstone.segmentationToolbarButtons` – segmentation editing button definitions
9732
+ * - `cornerstone.segmentationToolbarSections` – toolbox/utilities section wiring
9733
+ * - `cornerstone.segmentationModeToolbarSections` – a reusable segmentation-mode toolbar layout
9734
+ *
9735
+ * Modes compose these by name in their own `toolbarButtons` /
9736
+ * `toolbarSections` instance arrays; `?customization=` modules extend the
9737
+ * result through the `mode` phase.
9738
+ */
9739
+ const segmentationToolbarCustomization = {
9740
+ 'cornerstone.segmentationToolbarButtons': segmentationToolbarButtons,
9741
+ 'cornerstone.segmentationToolbarSections': segmentationToolboxSections,
9742
+ 'cornerstone.segmentationModeToolbarSections': segmentationModeToolbarSections
9743
+ };
9744
+
9745
+ /* export default */ const customizations_segmentationToolbarCustomization = (segmentationToolbarCustomization);
9746
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/customizations/toolGroupToolsCustomization.ts
9747
+
9748
+
9749
+
9750
+ /**
9751
+ * Reusable tool group "capability blocks", registered as default
9752
+ * customizations so modes and `?customization=` JSON modules can add them to
9753
+ * a tool group by name via a mode's `toolGroupAdditions` customization, e.g.
9754
+ *
9755
+ * "mode": {
9756
+ * "basic": {
9757
+ * "toolGroupAdditions": {
9758
+ * "default": { "$push": [{ "$reference": "cornerstone.segmentationTools" }] }
9759
+ * }
9760
+ * }
9761
+ * }
9762
+ *
9763
+ * Each block is a `{ active/passive/enabled/disabled }` object suitable for
9764
+ * `toolGroupService.addToolsToToolGroup`.
9765
+ */
9766
+ function getToolGroupToolsCustomization({
9767
+ commandsManager
9768
+ }) {
9769
+ const brushInstances = [{
9770
+ toolName: 'CircularBrush',
9771
+ parentTool: 'Brush',
9772
+ configuration: {
9773
+ activeStrategy: 'FILL_INSIDE_CIRCLE',
9774
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9775
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS
9776
+ }
9777
+ }, {
9778
+ toolName: 'CircularEraser',
9779
+ parentTool: 'Brush',
9780
+ configuration: {
9781
+ activeStrategy: 'ERASE_INSIDE_CIRCLE',
9782
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9783
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS
9784
+ }
9785
+ }, {
9786
+ toolName: 'SphereBrush',
9787
+ parentTool: 'Brush',
9788
+ configuration: {
9789
+ activeStrategy: 'FILL_INSIDE_SPHERE',
9790
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9791
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS
9792
+ }
9793
+ }, {
9794
+ toolName: 'SphereEraser',
9795
+ parentTool: 'Brush',
9796
+ configuration: {
9797
+ activeStrategy: 'ERASE_INSIDE_SPHERE',
9798
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9799
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS
9800
+ }
9801
+ }, {
9802
+ toolName: 'ThresholdCircularBrush',
9803
+ parentTool: 'Brush',
9804
+ configuration: {
9805
+ activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
9806
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9807
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS
9808
+ }
9809
+ }, {
9810
+ toolName: 'ThresholdSphereBrush',
9811
+ parentTool: 'Brush',
9812
+ configuration: {
9813
+ activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
9814
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9815
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS
9816
+ }
9817
+ }, {
9818
+ toolName: 'ThresholdCircularBrushDynamic',
9819
+ parentTool: 'Brush',
9820
+ configuration: {
9821
+ activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
9822
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9823
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
9824
+ threshold: {
9825
+ isDynamic: true,
9826
+ dynamicRadius: 3
9827
+ }
9828
+ }
9829
+ }, {
9830
+ toolName: 'ThresholdSphereBrushDynamic',
9831
+ parentTool: 'Brush',
9832
+ configuration: {
9833
+ activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
9834
+ minRadius: MIN_SEGMENTATION_DRAWING_RADIUS,
9835
+ maxRadius: MAX_SEGMENTATION_DRAWING_RADIUS,
9836
+ threshold: {
9837
+ isDynamic: true,
9838
+ dynamicRadius: 3
9839
+ }
9840
+ }
9841
+ }];
9842
+ const splineInstances = [{
9843
+ toolName: 'CatmullRomSplineROI',
9844
+ parentTool: initCornerstoneTools_toolNames.SplineContourSegmentation,
9845
+ configuration: {
9846
+ spline: {
9847
+ type: 'CATMULLROM',
9848
+ enableTwoPointPreview: true
9849
+ }
9850
+ }
9851
+ }, {
9852
+ toolName: 'LinearSplineROI',
9853
+ parentTool: initCornerstoneTools_toolNames.SplineContourSegmentation,
9854
+ configuration: {
9855
+ spline: {
9856
+ type: 'LINEAR',
9857
+ enableTwoPointPreview: true
9858
+ }
9859
+ }
9860
+ }, {
9861
+ toolName: 'BSplineROI',
9862
+ parentTool: initCornerstoneTools_toolNames.SplineContourSegmentation,
9863
+ configuration: {
9864
+ spline: {
9865
+ type: 'BSPLINE',
9866
+ enableTwoPointPreview: true
9867
+ }
9868
+ }
9869
+ }];
9870
+ return {
9871
+ /**
9872
+ * The segmentation editing tools (labelmap brushes/scissors and contour
9873
+ * segmentation tools), matching the buttons in
9874
+ * `cornerstone.segmentationToolbarButtons`.
9875
+ */
9876
+ 'cornerstone.segmentationTools': {
9877
+ passive: [...brushInstances, {
9878
+ toolName: initCornerstoneTools_toolNames.LabelmapSlicePropagation
9879
+ }, {
9880
+ toolName: initCornerstoneTools_toolNames.MarkerLabelmap
9881
+ }, {
9882
+ toolName: initCornerstoneTools_toolNames.RegionSegmentPlus
9883
+ }, {
9884
+ toolName: initCornerstoneTools_toolNames.LabelMapEditWithContourTool
9885
+ }, {
9886
+ toolName: initCornerstoneTools_toolNames.SegmentSelect
9887
+ }, {
9888
+ toolName: initCornerstoneTools_toolNames.CircleScissors
9889
+ }, {
9890
+ toolName: initCornerstoneTools_toolNames.RectangleScissors
9891
+ }, {
9892
+ toolName: initCornerstoneTools_toolNames.SphereScissors
9893
+ }, {
9894
+ toolName: initCornerstoneTools_toolNames.LivewireContourSegmentation
9895
+ }, {
9896
+ toolName: initCornerstoneTools_toolNames.SculptorTool
9897
+ }, ...splineInstances]
9898
+ },
9899
+ /**
9900
+ * The measurement/annotation tools, matching the `MeasurementTools`
9901
+ * buttons in `cornerstone.toolbarButtons`. Useful for adding annotations
9902
+ * to modes (such as segmentation) whose tool groups omit them.
9903
+ */
9904
+ 'cornerstone.annotationTools': {
9905
+ passive: [{
9906
+ toolName: initCornerstoneTools_toolNames.Length
9907
+ }, {
9908
+ toolName: initCornerstoneTools_toolNames.ArrowAnnotate,
9909
+ configuration: {
9910
+ getTextCallback: (callback, eventDetails) => {
9911
+ commandsManager.runCommand('arrowTextCallback', {
9912
+ callback,
9913
+ eventDetails
9914
+ });
9915
+ },
9916
+ changeTextCallback: (data, eventDetails, callback) => {
9917
+ commandsManager.runCommand('arrowTextCallback', {
9918
+ callback,
9919
+ data,
9920
+ eventDetails
9921
+ });
9922
+ }
9923
+ }
9924
+ }, {
9925
+ toolName: initCornerstoneTools_toolNames.Bidirectional
9926
+ }, {
9927
+ toolName: initCornerstoneTools_toolNames.Probe
9928
+ }, {
9929
+ toolName: initCornerstoneTools_toolNames.DragProbe
9930
+ }, {
9931
+ toolName: initCornerstoneTools_toolNames.EllipticalROI
9932
+ }, {
9933
+ toolName: initCornerstoneTools_toolNames.CircleROI
9934
+ }, {
9935
+ toolName: initCornerstoneTools_toolNames.RectangleROI
9936
+ }, {
9937
+ toolName: initCornerstoneTools_toolNames.Angle
9938
+ }, {
9939
+ toolName: initCornerstoneTools_toolNames.CobbAngle
9940
+ }, {
9941
+ toolName: initCornerstoneTools_toolNames.SplineROI
9942
+ }, {
9943
+ toolName: initCornerstoneTools_toolNames.LivewireContour
9944
+ }]
9945
+ }
9946
+ };
9947
+ }
9948
+ /* export default */ const toolGroupToolsCustomization = (getToolGroupToolsCustomization);
8972
9949
  // EXTERNAL MODULE: ../../../node_modules/react-dropzone/dist/es/index.js + 4 modules
8973
9950
  var dist_es = __webpack_require__(2721);
8974
9951
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
@@ -9784,6 +10761,8 @@ function getViewportScrollbarCustomization() {
9784
10761
 
9785
10762
 
9786
10763
 
10764
+
10765
+
9787
10766
  function getCustomizationModule({
9788
10767
  commandsManager,
9789
10768
  servicesManager,
@@ -9807,6 +10786,10 @@ function getCustomizationModule({
9807
10786
  ...modalityColorMapCustomization,
9808
10787
  ...windowLevelPresetsCustomization,
9809
10788
  ...customizations_toolbarButtonsCustomization,
10789
+ ...customizations_segmentationToolbarCustomization,
10790
+ ...toolGroupToolsCustomization({
10791
+ commandsManager
10792
+ }),
9810
10793
  ...miscCustomization,
9811
10794
  ...captureViewportModalCustomization,
9812
10795
  ...viewportDownloadWarningCustomization,