@aics/vole-app 3.4.4 → 3.6.0

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 (72) hide show
  1. package/es/aics-image-viewer/components/App/index.js +15 -5
  2. package/es/aics-image-viewer/components/ChannelsWidget.js +3 -1
  3. package/es/aics-image-viewer/components/ChannelsWidgetRow.js +29 -16
  4. package/es/aics-image-viewer/components/ColorPicker/index.js +9 -1
  5. package/es/aics-image-viewer/components/ControlPanel/CopySettingsButton.js +445 -0
  6. package/es/aics-image-viewer/components/ControlPanel/index.js +16 -5
  7. package/es/aics-image-viewer/components/ControlPanel/styles.css +29 -2
  8. package/es/aics-image-viewer/components/StyleProvider/index.js +17 -2
  9. package/es/aics-image-viewer/components/Toolbar/ViewModeRadioButtons.js +1 -1
  10. package/es/aics-image-viewer/components/Toolbar/index.js +1 -1
  11. package/es/aics-image-viewer/components/Toolbar/styles.css +0 -10
  12. package/es/aics-image-viewer/components/{CellViewerCanvasWrapper → ViewerCanvasWrapper}/index.js +3 -2
  13. package/es/aics-image-viewer/components/dimension_sliders/AxisClipSliders.js +21 -8
  14. package/es/aics-image-viewer/components/dimension_sliders/RotationSliders.js +6 -8
  15. package/es/aics-image-viewer/components/dimension_sliders/SliderRows.js +8 -6
  16. package/es/aics-image-viewer/components/shared/ContextualAlert.js +101 -0
  17. package/es/aics-image-viewer/components/shared/ControlPanelRow/index.js +4 -2
  18. package/es/aics-image-viewer/components/shared/ControlPanelRow/styles.css +4 -3
  19. package/es/aics-image-viewer/components/useVolume.js +59 -25
  20. package/es/aics-image-viewer/shared/constants.js +25 -1
  21. package/es/aics-image-viewer/shared/types.js +1 -1
  22. package/es/aics-image-viewer/shared/utils/controlPointsToLut.js +4 -0
  23. package/es/aics-image-viewer/shared/utils/parseSnapshot.js +205 -0
  24. package/es/aics-image-viewer/shared/utils/{urlParsing.js → parseUrl.js} +55 -191
  25. package/es/aics-image-viewer/shared/utils/permissions.js +46 -0
  26. package/es/aics-image-viewer/shared/utils/test/camera.test.js +1 -2
  27. package/es/aics-image-viewer/shared/utils/test/{urlParsing.test.js → parseUrl.test.js} +28 -25
  28. package/es/aics-image-viewer/shared/utils/test/storage.test.js +2 -2
  29. package/es/aics-image-viewer/shared/utils/test/viewerChannelSettings.test.js +1 -1
  30. package/es/aics-image-viewer/state/deserialize.js +443 -331
  31. package/es/aics-image-viewer/state/reset.js +1 -1
  32. package/es/aics-image-viewer/state/serialize.js +168 -78
  33. package/es/aics-image-viewer/state/subscribers.js +1 -1
  34. package/es/aics-image-viewer/state/test/deserialize.test.js +63 -77
  35. package/es/aics-image-viewer/state/test/reset.test.js +2 -2
  36. package/es/aics-image-viewer/state/test/serialize.test.js +42 -43
  37. package/es/aics-image-viewer/state/test/test_data.js +119 -1
  38. package/es/aics-image-viewer/state/types.js +157 -245
  39. package/es/aics-image-viewer/state/util.js +39 -1
  40. package/es/index.js +4 -2
  41. package/package.json +26 -44
  42. package/type-declarations/aics-image-viewer/components/App/types.d.ts +3 -3
  43. package/type-declarations/aics-image-viewer/components/ChannelsWidget.d.ts +3 -0
  44. package/type-declarations/aics-image-viewer/components/ChannelsWidgetRow.d.ts +3 -0
  45. package/type-declarations/aics-image-viewer/components/ControlPanel/CopySettingsButton.d.ts +11 -0
  46. package/type-declarations/aics-image-viewer/components/Toolbar/ViewModeRadioButtons.d.ts +1 -1
  47. package/type-declarations/aics-image-viewer/components/{CellViewerCanvasWrapper → ViewerCanvasWrapper}/index.d.ts +4 -3
  48. package/type-declarations/aics-image-viewer/components/dimension_sliders/AxisClipSliders.d.ts +7 -6
  49. package/type-declarations/aics-image-viewer/components/dimension_sliders/SliderRows.d.ts +1 -2
  50. package/type-declarations/aics-image-viewer/components/shared/ContextualAlert.d.ts +29 -0
  51. package/type-declarations/aics-image-viewer/components/shared/ControlPanelRow/index.d.ts +1 -0
  52. package/type-declarations/aics-image-viewer/components/useVolume.d.ts +3 -0
  53. package/type-declarations/aics-image-viewer/shared/constants.d.ts +2 -2
  54. package/type-declarations/aics-image-viewer/shared/types.d.ts +2 -2
  55. package/type-declarations/aics-image-viewer/shared/utils/controlPointsToLut.d.ts +1 -1
  56. package/type-declarations/aics-image-viewer/shared/utils/parseSnapshot.d.ts +49 -0
  57. package/type-declarations/aics-image-viewer/shared/utils/{urlParsing.d.ts → parseUrl.d.ts} +3 -24
  58. package/type-declarations/aics-image-viewer/shared/utils/permissions.d.ts +7 -0
  59. package/type-declarations/aics-image-viewer/shared/utils/viewerChannelSettings.d.ts +1 -1
  60. package/type-declarations/aics-image-viewer/state/deserialize.d.ts +70 -35
  61. package/type-declarations/aics-image-viewer/state/reset.d.ts +1 -1
  62. package/type-declarations/aics-image-viewer/state/serialize.d.ts +44 -10
  63. package/type-declarations/aics-image-viewer/state/types.d.ts +265 -159
  64. package/type-declarations/aics-image-viewer/state/util.d.ts +3 -1
  65. package/type-declarations/index.d.ts +5 -3
  66. package/es/Globals.d.js +0 -0
  67. package/es/aics-image-viewer/shared/enums.js +0 -18
  68. package/es/aics-image-viewer/shared/utils/firebase/index.js +0 -109
  69. package/type-declarations/aics-image-viewer/shared/enums.d.ts +0 -15
  70. package/type-declarations/aics-image-viewer/shared/utils/firebase/index.d.ts +0 -69
  71. package/type-declarations/aics-image-viewer/shared/utils/math.d.ts +0 -1
  72. /package/es/aics-image-viewer/components/{CellViewerCanvasWrapper → ViewerCanvasWrapper}/styles.css +0 -0
@@ -7,10 +7,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
7
7
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8
8
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
9
9
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10
- import { describe, expect, it } from "@jest/globals";
10
+ import { describe, expect, it } from "vitest";
11
11
  import { getDefaultCameraState, getDefaultChannelState, getDefaultViewerState } from "../../shared/constants";
12
- import { ImageType, RenderMode, ViewMode } from "../../shared/enums";
13
12
  import { useViewerState } from "../store";
13
+ import { ImageType, RenderMode, ViewMode } from "../types";
14
14
  var arbitraryViewerState = function arbitraryViewerState() {
15
15
  return {
16
16
  viewMode: ViewMode.xy,
@@ -4,54 +4,48 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
4
4
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
6
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ import { describe, expect, it } from "vitest";
7
8
  import { getDefaultCameraState } from "../../shared/constants";
8
- import { serializeCameraState, serializeViewerChannelSetting, serializeViewerState } from "../serialize";
9
- import { CUSTOM_TEST_VIEWER_STATE, DEFAULT_TEST_CHANNEL_STATE, DEFAULT_TEST_VIEWER_STATE, SERIALIZED_CUSTOM_TEST_VIEWER_STATE, SERIALIZED_DEFAULT_TEST_CHANNEL_STATE, SERIALIZED_DEFAULT_TEST_VIEWER_STATE } from "./test_data";
10
- describe("serializeViewerChannelSetting", function () {
9
+ import { cameraStateToSnapshot, channelStateToSnapshot, channelStateToStringSnapshot, objectToKeyValueList, stringifyCameraStateSnapshot, viewerStateToSnapshot, viewerStateToStringSnapshot } from "../serialize";
10
+ import { CUSTOM_TEST_CHANNEL_STATE, CUSTOM_TEST_VIEWER_STATE, DEFAULT_TEST_CHANNEL_STATE, DEFAULT_TEST_VIEWER_STATE, SERIALIZED_CUSTOM_TEST_CHANNEL_STATE, SERIALIZED_CUSTOM_TEST_VIEWER_STATE, SERIALIZED_DEFAULT_TEST_CHANNEL_STATE, SERIALIZED_DEFAULT_TEST_VIEWER_STATE, STRINGIFIED_CUSTOM_TEST_CHANNEL_STATE, STRINGIFIED_CUSTOM_TEST_VIEWER_STATE, STRINGIFIED_DEFAULT_TEST_CHANNEL_STATE, STRINGIFIED_DEFAULT_TEST_VIEWER_STATE } from "./test_data";
11
+ describe("channelStateToSnapshot", function () {
11
12
  it("serializes channel settings", function () {
12
- expect(serializeViewerChannelSetting(DEFAULT_TEST_CHANNEL_STATE, false)).toEqual(SERIALIZED_DEFAULT_TEST_CHANNEL_STATE);
13
+ var serialized = channelStateToSnapshot(DEFAULT_TEST_CHANNEL_STATE, false);
14
+ expect(serialized).toEqual(SERIALIZED_DEFAULT_TEST_CHANNEL_STATE);
13
15
  });
14
16
  it("serializes custom channel settings", function () {
15
- var customChannelState = {
16
- name: "a",
17
- displayName: "a",
18
- color: [3, 255, 157],
19
- volumeEnabled: false,
20
- isosurfaceEnabled: false,
21
- isovalue: 0,
22
- opacity: 0.54,
23
- colorizeEnabled: false,
24
- colorizeAlpha: 1.0,
25
- useControlPoints: false,
26
- controlPoints: [],
27
- ramp: [0, 255],
28
- // TODO: the settings below are not serialized. should they be? (see #384)
29
- plotMin: 0,
30
- plotMax: 255,
31
- keepIntensityRange: false
32
- };
33
- var serializedCustomChannelState = {
34
- col: "03ff9d",
35
- ven: "0",
36
- sen: "0",
37
- isv: "0",
38
- isa: "0.54",
39
- clz: "0",
40
- cza: "1",
41
- cpe: "0",
42
- cpt: "",
43
- ram: "0:255",
44
- pin: "0"
45
- };
46
- expect(serializeViewerChannelSetting(customChannelState, false)).toEqual(serializedCustomChannelState);
17
+ var serialized = channelStateToSnapshot(CUSTOM_TEST_CHANNEL_STATE, false);
18
+ expect(serialized).toEqual(SERIALIZED_CUSTOM_TEST_CHANNEL_STATE);
19
+ });
20
+ });
21
+ describe("channelStateToStringSnapshot", function () {
22
+ it("serializes channel settings", function () {
23
+ var serialized = channelStateToStringSnapshot(DEFAULT_TEST_CHANNEL_STATE, false);
24
+ expect(serialized).toEqual(STRINGIFIED_DEFAULT_TEST_CHANNEL_STATE);
25
+ });
26
+ it("serializes custom channel settings", function () {
27
+ var serialized = channelStateToStringSnapshot(CUSTOM_TEST_CHANNEL_STATE, false);
28
+ expect(serialized).toEqual(STRINGIFIED_CUSTOM_TEST_CHANNEL_STATE);
47
29
  });
48
30
  });
49
- describe("serializeViewerState", function () {
31
+ describe("viewerStateToSnapshot", function () {
50
32
  it("serializes the default viewer settings", function () {
51
- expect(serializeViewerState(DEFAULT_TEST_VIEWER_STATE, false)).toEqual(SERIALIZED_DEFAULT_TEST_VIEWER_STATE);
33
+ var serialized = viewerStateToSnapshot(DEFAULT_TEST_VIEWER_STATE, false);
34
+ expect(serialized).toEqual(SERIALIZED_DEFAULT_TEST_VIEWER_STATE);
52
35
  });
53
36
  it("serializes custom viewer settings", function () {
54
- expect(serializeViewerState(CUSTOM_TEST_VIEWER_STATE, false)).toEqual(SERIALIZED_CUSTOM_TEST_VIEWER_STATE);
37
+ var serialized = viewerStateToSnapshot(CUSTOM_TEST_VIEWER_STATE, false);
38
+ expect(serialized).toEqual(SERIALIZED_CUSTOM_TEST_VIEWER_STATE);
39
+ });
40
+ });
41
+ describe("viewerStateToStringSnapshot", function () {
42
+ it("serializes the default viewer settings", function () {
43
+ var serialized = viewerStateToStringSnapshot(DEFAULT_TEST_VIEWER_STATE, false);
44
+ expect(serialized).toEqual(STRINGIFIED_DEFAULT_TEST_VIEWER_STATE);
45
+ });
46
+ it("serializes custom viewer settings", function () {
47
+ var serialized = viewerStateToStringSnapshot(CUSTOM_TEST_VIEWER_STATE, false);
48
+ expect(serialized).toEqual(STRINGIFIED_CUSTOM_TEST_VIEWER_STATE);
55
49
  });
56
50
  it("shortens long numbers in the slice and region parameters", function () {
57
51
  // Floats should be rounded to 7 significant digits or less
@@ -67,20 +61,25 @@ describe("serializeViewerState", function () {
67
61
  z: 0.677402
68
62
  }
69
63
  };
70
- var serializedState = serializeViewerState(state, true);
64
+ var serializedState = viewerStateToStringSnapshot(state, true);
71
65
  expect(serializedState.reg).toEqual("0.4566667:0.8667332,0.5:0.8999999,0.3:0.1646788");
72
66
  expect(serializedState.slice).toEqual("0.4111119,0.5,0.677402");
73
67
  });
74
68
  });
75
69
  describe("Camera state", function () {
76
70
  it("uses default camera state when choosing elements to exclude/ignore", function () {
77
- var cameraState = _objectSpread({}, getDefaultCameraState());
71
+ var cameraState = getDefaultCameraState();
78
72
  // No changes from default
79
- expect(serializeCameraState(cameraState, true)).toEqual(undefined);
73
+ expect(cameraStateToSnapshot(cameraState, true)).toEqual(undefined);
80
74
  cameraState = _objectSpread(_objectSpread({}, cameraState), {}, {
81
75
  position: [1, 2, 3]
82
76
  });
83
- expect(serializeCameraState(cameraState, true)).toEqual("pos:1:2:3");
77
+ var snapshot = cameraStateToSnapshot(cameraState, true);
78
+ expect(snapshot).toEqual({
79
+ pos: [1, 2, 3]
80
+ });
81
+ var stringified = stringifyCameraStateSnapshot(snapshot);
82
+ expect(objectToKeyValueList(stringified)).toEqual("pos:1:2:3");
84
83
  });
85
84
  it("default camera state has not been changed", function () {
86
85
  // The default camera state should NOT change unless backwards compatibility
@@ -1,4 +1,4 @@
1
- import { ImageType, RenderMode, ViewMode } from "../../shared/enums";
1
+ import { ImageType, ImageTypeSnapshot, RenderMode, RenderModeSnapshot, ViewMode, ViewModeSnapshot } from "../types";
2
2
  export var DEFAULT_TEST_VIEWER_STATE = {
3
3
  viewMode: ViewMode.threeD,
4
4
  // "XY", "XZ", "YZ"
@@ -34,6 +34,29 @@ export var DEFAULT_TEST_VIEWER_STATE = {
34
34
  scaleLevelIndex: 0
35
35
  };
36
36
  export var SERIALIZED_DEFAULT_TEST_VIEWER_STATE = {
37
+ mode: RenderModeSnapshot.volumetric,
38
+ view: ViewModeSnapshot.threeD,
39
+ image: ImageTypeSnapshot.segmentedCell,
40
+ axes: false,
41
+ bb: false,
42
+ bgcol: "000000",
43
+ bbcol: "ffffff",
44
+ rot: false,
45
+ mask: 0,
46
+ bright: 70,
47
+ dens: 50,
48
+ lvl: [35, 140, 255],
49
+ interp: true,
50
+ reg: [[0, 1], [0, 1], [0, 1]],
51
+ slice: [0.5, 0.5, 0.5],
52
+ t: 0,
53
+ scene: 0,
54
+ scm: false,
55
+ sci: 0,
56
+ esl: false,
57
+ scl: 0
58
+ };
59
+ export var STRINGIFIED_DEFAULT_TEST_VIEWER_STATE = {
37
60
  mode: "volumetric",
38
61
  view: "3D",
39
62
  image: "cell",
@@ -95,6 +118,36 @@ export var CUSTOM_TEST_VIEWER_STATE = {
95
118
  }
96
119
  };
97
120
  export var SERIALIZED_CUSTOM_TEST_VIEWER_STATE = {
121
+ mode: RenderModeSnapshot.pathTrace,
122
+ view: ViewModeSnapshot.xy,
123
+ image: ImageTypeSnapshot.fullField,
124
+ axes: true,
125
+ bb: true,
126
+ bgcol: "ff0000",
127
+ bbcol: "00ff00",
128
+ rot: true,
129
+ mask: 55,
130
+ bright: 100,
131
+ dens: 75,
132
+ lvl: [0, 250, 251],
133
+ interp: false,
134
+ reg: [[0, 0.5], [0, 1], [0, 1]],
135
+ slice: [0.25, 0.75, 0.5],
136
+ t: 100,
137
+ scene: 3,
138
+ scm: true,
139
+ sci: 3,
140
+ esl: true,
141
+ scl: 3,
142
+ cam: {
143
+ pos: [-1.05, -4, 45],
144
+ tar: [0, 0, 0],
145
+ up: [0, 1, 0],
146
+ ort: 3.534,
147
+ fov: 43.5
148
+ }
149
+ };
150
+ export var STRINGIFIED_CUSTOM_TEST_VIEWER_STATE = {
98
151
  mode: "pathtrace",
99
152
  view: "Z",
100
153
  image: "fov",
@@ -144,6 +197,27 @@ export var DEFAULT_TEST_CHANNEL_STATE = {
144
197
  keepIntensityRange: false
145
198
  };
146
199
  export var SERIALIZED_DEFAULT_TEST_CHANNEL_STATE = {
200
+ col: "ff0000",
201
+ ven: true,
202
+ sen: true,
203
+ isv: 128,
204
+ isa: 0.75,
205
+ clz: true,
206
+ cza: 0.5,
207
+ cpe: false,
208
+ cpt: [{
209
+ x: 0,
210
+ opacity: 0.5,
211
+ color: "1"
212
+ }, {
213
+ x: 255,
214
+ opacity: 1,
215
+ color: "326496"
216
+ }],
217
+ ram: [0, 255],
218
+ pin: false
219
+ };
220
+ export var STRINGIFIED_DEFAULT_TEST_CHANNEL_STATE = {
147
221
  col: "ff0000",
148
222
  ven: "1",
149
223
  sen: "1",
@@ -156,6 +230,50 @@ export var SERIALIZED_DEFAULT_TEST_CHANNEL_STATE = {
156
230
  ram: "0:255",
157
231
  pin: "0"
158
232
  };
233
+ export var CUSTOM_TEST_CHANNEL_STATE = {
234
+ name: "a",
235
+ displayName: "a",
236
+ color: [3, 255, 157],
237
+ volumeEnabled: false,
238
+ isosurfaceEnabled: false,
239
+ isovalue: 0,
240
+ opacity: 0.54,
241
+ colorizeEnabled: false,
242
+ colorizeAlpha: 1.0,
243
+ useControlPoints: false,
244
+ controlPoints: [],
245
+ ramp: [0, 255],
246
+ // TODO: the settings below are not serialized. should they be? (see #384)
247
+ plotMin: 0,
248
+ plotMax: 255,
249
+ keepIntensityRange: false
250
+ };
251
+ export var SERIALIZED_CUSTOM_TEST_CHANNEL_STATE = {
252
+ col: "03ff9d",
253
+ ven: false,
254
+ sen: false,
255
+ isv: 0,
256
+ isa: 0.54,
257
+ clz: false,
258
+ cza: 1,
259
+ cpe: false,
260
+ cpt: [],
261
+ ram: [0, 255],
262
+ pin: false
263
+ };
264
+ export var STRINGIFIED_CUSTOM_TEST_CHANNEL_STATE = {
265
+ col: "03ff9d",
266
+ ven: "0",
267
+ sen: "0",
268
+ isv: "0",
269
+ isa: "0.54",
270
+ clz: "0",
271
+ cza: "1",
272
+ cpe: "0",
273
+ cpt: "",
274
+ ram: "0:255",
275
+ pin: "0"
276
+ };
159
277
  export var DEFAULT_TEST_VIEWER_CHANNEL_SETTING = {
160
278
  match: 0,
161
279
  color: undefined,