@aics/vole-app 3.1.1 → 3.2.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.
- package/es/aics-image-viewer/components/App/ChannelUpdater.js +17 -7
- package/es/aics-image-viewer/components/ChannelsWidget.js +81 -13
- package/es/aics-image-viewer/components/ChannelsWidgetRow/index.js +35 -20
- package/es/aics-image-viewer/components/ChannelsWidgetRow/styles.css +26 -14
- package/es/aics-image-viewer/components/{ColorPicker.js → ColorPicker/index.js} +16 -43
- package/es/aics-image-viewer/components/ColorPicker/styles.css +17 -0
- package/es/aics-image-viewer/components/ControlPanel/index.js +24 -7
- package/es/aics-image-viewer/components/ControlPanel/styles.css +70 -17
- package/es/aics-image-viewer/components/CustomizeWidget.js +6 -13
- package/es/aics-image-viewer/components/GlobalVolumeControls.js +1 -2
- package/es/aics-image-viewer/components/useVolume.js +9 -1
- package/es/aics-image-viewer/shared/constants.js +4 -1
- package/es/aics-image-viewer/shared/utils/sceneStore.js +9 -1
- package/es/aics-image-viewer/shared/utils/test/urlParsing.test.js +19 -3
- package/es/aics-image-viewer/shared/utils/urlParsing.js +22 -4
- package/es/aics-image-viewer/state/store.js +3 -1
- package/es/aics-image-viewer/state/test/reset.test.js +2 -0
- package/package.json +2 -2
- package/type-declarations/aics-image-viewer/components/{ColorPicker.d.ts → ColorPicker/index.d.ts} +2 -1
- package/type-declarations/aics-image-viewer/shared/constants.d.ts +1 -1
- package/type-declarations/aics-image-viewer/shared/utils/urlParsing.d.ts +7 -1
- package/type-declarations/aics-image-viewer/state/types.d.ts +2 -0
|
@@ -13,8 +13,9 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
13
13
|
import { Lut } from "@aics/vole-core";
|
|
14
14
|
import { useEffect } from "react";
|
|
15
15
|
import { useShallow } from "zustand/shallow";
|
|
16
|
+
import { SINGLE_CHANNEL_MODE_COLOR } from "../../shared/constants";
|
|
16
17
|
import { binIndexedControlPointsToLut, rampToControlPoints } from "../../shared/utils/controlPointsToLut";
|
|
17
|
-
import { useViewerState } from "../../state/store";
|
|
18
|
+
import { select, useViewerState } from "../../state/store";
|
|
18
19
|
/**
|
|
19
20
|
* A component that doesn't render anything, but reacts to the provided `ChannelState`
|
|
20
21
|
* and keeps it in sync with the viewer.
|
|
@@ -28,6 +29,8 @@ var ChannelUpdater = function ChannelUpdater(_ref) {
|
|
|
28
29
|
return state.channelSettings[index];
|
|
29
30
|
});
|
|
30
31
|
var channelState = useViewerState(channelStateSelector);
|
|
32
|
+
var singleChannelMode = useViewerState(select("singleChannelMode"));
|
|
33
|
+
var singleChannelIndex = useViewerState(select("singleChannelIndex"));
|
|
31
34
|
var volumeEnabled = channelState.volumeEnabled,
|
|
32
35
|
isosurfaceEnabled = channelState.isosurfaceEnabled,
|
|
33
36
|
isovalue = channelState.isovalue,
|
|
@@ -50,17 +53,23 @@ var ChannelUpdater = function ChannelUpdater(_ref) {
|
|
|
50
53
|
// enable/disable channel can't be dependent on channel load state because it may trigger the channel to load
|
|
51
54
|
useEffect(function () {
|
|
52
55
|
if (image) {
|
|
53
|
-
|
|
56
|
+
var enabled = volumeEnabled;
|
|
57
|
+
if (singleChannelMode) {
|
|
58
|
+
// if this is the focused channel in single-channel mode, enable volume unless *only* isosurface is enabled
|
|
59
|
+
enabled = index === singleChannelIndex && !(!volumeEnabled && isosurfaceEnabled);
|
|
60
|
+
}
|
|
61
|
+
view3d.setVolumeChannelEnabled(image, index, enabled);
|
|
54
62
|
view3d.updateLuts(image);
|
|
55
63
|
}
|
|
56
|
-
}, [image, volumeEnabled, index, view3d]);
|
|
64
|
+
}, [image, volumeEnabled, index, view3d, singleChannelMode, singleChannelIndex, isosurfaceEnabled]);
|
|
57
65
|
useEffect(function () {
|
|
58
66
|
if (image) {
|
|
67
|
+
var enabled = isosurfaceEnabled && (!singleChannelMode || singleChannelIndex === index);
|
|
59
68
|
view3d.setVolumeChannelOptions(image, index, {
|
|
60
|
-
isosurfaceEnabled:
|
|
69
|
+
isosurfaceEnabled: enabled
|
|
61
70
|
});
|
|
62
71
|
}
|
|
63
|
-
}, [image, isosurfaceEnabled, index, view3d]);
|
|
72
|
+
}, [image, isosurfaceEnabled, index, view3d, singleChannelMode, singleChannelIndex]);
|
|
64
73
|
useImageEffect(function (currentImage) {
|
|
65
74
|
return view3d.setVolumeChannelOptions(currentImage, index, {
|
|
66
75
|
isovalue: isovalue
|
|
@@ -72,11 +81,12 @@ var ChannelUpdater = function ChannelUpdater(_ref) {
|
|
|
72
81
|
});
|
|
73
82
|
}, [opacity, index, view3d]);
|
|
74
83
|
useImageEffect(function (currentImage) {
|
|
84
|
+
var finalColor = singleChannelMode ? SINGLE_CHANNEL_MODE_COLOR : color;
|
|
75
85
|
view3d.setVolumeChannelOptions(currentImage, index, {
|
|
76
|
-
color:
|
|
86
|
+
color: finalColor
|
|
77
87
|
});
|
|
78
88
|
view3d.updateLuts(currentImage);
|
|
79
|
-
}, [color, index, view3d]);
|
|
89
|
+
}, [color, index, view3d, singleChannelMode]);
|
|
80
90
|
var controlPoints = channelState.controlPoints,
|
|
81
91
|
ramp = channelState.ramp,
|
|
82
92
|
useControlPoints = channelState.useControlPoints;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
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; }
|
|
3
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
4
|
+
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); }
|
|
5
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
6
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
8
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
2
9
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
3
10
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
11
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
12
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
13
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
7
14
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
8
|
-
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; }
|
|
9
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
10
|
-
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); }
|
|
11
15
|
import { Collapse, List } from "antd";
|
|
12
16
|
import React from "react";
|
|
13
17
|
import { useShallow } from "zustand/shallow";
|
|
@@ -37,6 +41,66 @@ var ChannelsWidget = function ChannelsWidget(props) {
|
|
|
37
41
|
var volumeEnabled = useViewerState(selectVolumeEnabled);
|
|
38
42
|
var isosurfaceEnabled = useViewerState(selectIsosurfaceEnabled);
|
|
39
43
|
var channelNames = useViewerState(selectNames);
|
|
44
|
+
var singleChannelMode = useViewerState(select("singleChannelMode"));
|
|
45
|
+
var singleChannelIndex = useViewerState(select("singleChannelIndex"));
|
|
46
|
+
var changeViewerSetting = useViewerState(select("changeViewerSetting"));
|
|
47
|
+
var _React$useState = React.useState([Object.keys(channelGroupedByType)[0]]),
|
|
48
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
49
|
+
openGroups = _React$useState2[0],
|
|
50
|
+
setOpenGroups = _React$useState2[1];
|
|
51
|
+
var collapseClass = singleChannelMode ? "single-channel-mode" : "";
|
|
52
|
+
|
|
53
|
+
// Switch between channels in single-channel mode with arrow keys
|
|
54
|
+
React.useEffect(function () {
|
|
55
|
+
if (singleChannelMode) {
|
|
56
|
+
var handleKeyPress = function handleKeyPress(_ref2) {
|
|
57
|
+
var key = _ref2.key;
|
|
58
|
+
// We only care about arrow keys!
|
|
59
|
+
if (!(key === "ArrowUp" || key === "ArrowDown" || key === "ArrowLeft" || key === "ArrowRight")) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Only navigate with arrow keys if no unrelated input element has focus
|
|
64
|
+
// (special case for checkboxes: they don't use arrow keys, and the user just clicked one to enter this mode)
|
|
65
|
+
var _document = document,
|
|
66
|
+
activeEl = _document.activeElement,
|
|
67
|
+
body = _document.body;
|
|
68
|
+
if (activeEl !== body && !(activeEl instanceof HTMLInputElement && activeEl.type === "checkbox")) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Channels appear in the order determined by grouping props, not index order
|
|
73
|
+
var channelGroups = Object.values(channelGroupedByType);
|
|
74
|
+
var channelOrder = channelGroups.flat();
|
|
75
|
+
var currentIndex = channelOrder.indexOf(singleChannelIndex);
|
|
76
|
+
var delta = key === "ArrowUp" || key === "ArrowLeft" ? -1 : 1;
|
|
77
|
+
var nextIndex = (currentIndex + channelOrder.length + delta) % channelOrder.length;
|
|
78
|
+
changeViewerSetting("singleChannelIndex", channelOrder[nextIndex]);
|
|
79
|
+
|
|
80
|
+
// Which group is the new channel in?
|
|
81
|
+
var nextGroupIndex = 0;
|
|
82
|
+
var accumulator = 0;
|
|
83
|
+
while (accumulator + channelGroups[nextGroupIndex].length <= nextIndex) {
|
|
84
|
+
accumulator += channelGroups[nextGroupIndex].length;
|
|
85
|
+
nextGroupIndex += 1;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// If the new channel is in a closed group, open it
|
|
89
|
+
var nextGroupName = Object.keys(channelGroupedByType)[nextGroupIndex];
|
|
90
|
+
setOpenGroups(function (currentOpenGroups) {
|
|
91
|
+
if (!currentOpenGroups.includes(nextGroupName)) {
|
|
92
|
+
return [].concat(_toConsumableArray(currentOpenGroups), [nextGroupName]);
|
|
93
|
+
}
|
|
94
|
+
return currentOpenGroups;
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
window.addEventListener("keydown", handleKeyPress);
|
|
98
|
+
return function () {
|
|
99
|
+
return window.removeEventListener("keydown", handleKeyPress);
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}, [singleChannelMode, singleChannelIndex, channelGroupedByType, changeViewerSetting]);
|
|
40
104
|
var createCheckboxHandler = function createCheckboxHandler(key) {
|
|
41
105
|
return function (value, channelArray) {
|
|
42
106
|
changeChannelSetting(channelArray, _defineProperty({}, key, value));
|
|
@@ -45,6 +109,9 @@ var ChannelsWidget = function ChannelsWidget(props) {
|
|
|
45
109
|
var showVolumes = createCheckboxHandler("volumeEnabled");
|
|
46
110
|
var showSurfaces = createCheckboxHandler("isosurfaceEnabled");
|
|
47
111
|
var renderVisibilityControls = function renderVisibilityControls(channelArray) {
|
|
112
|
+
if (singleChannelMode) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
48
115
|
var volChecked = [];
|
|
49
116
|
var isoChecked = [];
|
|
50
117
|
channelArray.forEach(function (channelIndex) {
|
|
@@ -81,16 +148,15 @@ var ChannelsWidget = function ChannelsWidget(props) {
|
|
|
81
148
|
saveIsosurface: props.saveIsosurface
|
|
82
149
|
}) : null;
|
|
83
150
|
};
|
|
84
|
-
var
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
channelArray = _ref3[1];
|
|
151
|
+
var rows = channelDataChannels && Object.entries(channelGroupedByType).filter(function (_ref3) {
|
|
152
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
153
|
+
key = _ref4[0],
|
|
154
|
+
channelArray = _ref4[1];
|
|
89
155
|
return channelArray.length > 0 && (!filterFunc || filterFunc(key));
|
|
90
|
-
}).map(function (
|
|
91
|
-
var
|
|
92
|
-
key =
|
|
93
|
-
channelArray =
|
|
156
|
+
}).map(function (_ref5) {
|
|
157
|
+
var _ref6 = _slicedToArray(_ref5, 2),
|
|
158
|
+
key = _ref6[0],
|
|
159
|
+
channelArray = _ref6[1];
|
|
94
160
|
var children = /*#__PURE__*/React.createElement(List, {
|
|
95
161
|
itemLayout: "horizontal",
|
|
96
162
|
dataSource: channelArray,
|
|
@@ -104,9 +170,11 @@ var ChannelsWidget = function ChannelsWidget(props) {
|
|
|
104
170
|
};
|
|
105
171
|
});
|
|
106
172
|
return /*#__PURE__*/React.createElement(Collapse, {
|
|
173
|
+
className: collapseClass,
|
|
107
174
|
bordered: false,
|
|
108
|
-
defaultActiveKey: firstKey,
|
|
109
175
|
items: rows,
|
|
176
|
+
activeKey: openGroups,
|
|
177
|
+
onChange: setOpenGroups,
|
|
110
178
|
collapsible: "icon"
|
|
111
179
|
});
|
|
112
180
|
};
|
|
@@ -15,15 +15,25 @@ import "./styles.css";
|
|
|
15
15
|
var ChannelsWidgetRow = function ChannelsWidgetRow(props) {
|
|
16
16
|
var index = props.index,
|
|
17
17
|
saveIsosurface = props.saveIsosurface;
|
|
18
|
-
var _useState = useState(false),
|
|
19
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
20
|
-
controlsOpen = _useState2[0],
|
|
21
|
-
setControlsOpen = _useState2[1];
|
|
22
18
|
var changeChannelSetting = useViewerState(select("changeChannelSetting"));
|
|
19
|
+
var changeViewerSetting = useViewerState(select("changeViewerSetting"));
|
|
23
20
|
var channelState = useViewerState(function (_ref) {
|
|
24
21
|
var channelSettings = _ref.channelSettings;
|
|
25
22
|
return channelSettings[props.index];
|
|
26
23
|
});
|
|
24
|
+
var singleChannelMode = useViewerState(select("singleChannelMode"));
|
|
25
|
+
var singleChannelIndex = useViewerState(select("singleChannelIndex"));
|
|
26
|
+
var _useState = useState(false),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
_controlsOpen = _useState2[0],
|
|
29
|
+
setControlsOpen = _useState2[1];
|
|
30
|
+
// Don't show controls in single-channel mode
|
|
31
|
+
var controlsOpen = _controlsOpen && !singleChannelMode;
|
|
32
|
+
var onClickChannel = useCallback(function () {
|
|
33
|
+
if (singleChannelMode) {
|
|
34
|
+
changeViewerSetting("singleChannelIndex", index);
|
|
35
|
+
}
|
|
36
|
+
}, [singleChannelMode, changeViewerSetting, index]);
|
|
27
37
|
var changeSettingForThisChannel = useCallback(function (value) {
|
|
28
38
|
return changeChannelSetting(index, value);
|
|
29
39
|
}, [changeChannelSetting, index]);
|
|
@@ -58,7 +68,12 @@ var ChannelsWidgetRow = function ChannelsWidgetRow(props) {
|
|
|
58
68
|
width: 18
|
|
59
69
|
});
|
|
60
70
|
};
|
|
61
|
-
var
|
|
71
|
+
var thisChannelOnly = singleChannelMode && singleChannelIndex === index;
|
|
72
|
+
var visibilityControls = singleChannelMode ? /*#__PURE__*/React.createElement("div", {
|
|
73
|
+
className: "channel-visibility-controls".concat(thisChannelOnly ? " single-channel" : "")
|
|
74
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
75
|
+
className: "single-channel-text"
|
|
76
|
+
}, thisChannelOnly ? "Showing this volume only" : "")) : /*#__PURE__*/React.createElement("div", {
|
|
62
77
|
className: "channel-visibility-controls"
|
|
63
78
|
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
64
79
|
checked: channelState.volumeEnabled,
|
|
@@ -79,7 +94,16 @@ var ChannelsWidgetRow = function ChannelsWidgetRow(props) {
|
|
|
79
94
|
title: "Open channel settings",
|
|
80
95
|
type: "text"
|
|
81
96
|
}));
|
|
82
|
-
var
|
|
97
|
+
var renderControls = function renderControls() {
|
|
98
|
+
var showEditor = singleChannelMode ? singleChannelIndex === index : channelState.volumeEnabled || channelState.isosurfaceEnabled;
|
|
99
|
+
if (!showEditor) {
|
|
100
|
+
return /*#__PURE__*/React.createElement("h4", {
|
|
101
|
+
style: {
|
|
102
|
+
fontStyle: "italic"
|
|
103
|
+
}
|
|
104
|
+
}, "Not currently visible");
|
|
105
|
+
}
|
|
106
|
+
|
|
83
107
|
// TODO this is most of `channelState`... should `TfEditor` just get `channelState`?
|
|
84
108
|
var controlPoints = channelState.controlPoints,
|
|
85
109
|
colorizeEnabled = channelState.colorizeEnabled,
|
|
@@ -105,25 +129,16 @@ var ChannelsWidgetRow = function ChannelsWidgetRow(props) {
|
|
|
105
129
|
keepIntensityRange: channelState.keepIntensityRange,
|
|
106
130
|
isovalue: isovalue,
|
|
107
131
|
opacity: channelState.opacity,
|
|
108
|
-
volumeEnabled: channelState.volumeEnabled,
|
|
109
|
-
isosurfaceEnabled: channelState.isosurfaceEnabled,
|
|
132
|
+
volumeEnabled: singleChannelMode ? singleChannelIndex === index : channelState.volumeEnabled,
|
|
133
|
+
isosurfaceEnabled: channelState.isosurfaceEnabled && !singleChannelMode,
|
|
110
134
|
saveIsosurface: saveThisIsosurface
|
|
111
135
|
});
|
|
112
136
|
};
|
|
113
|
-
var
|
|
114
|
-
if (!channelState.volumeEnabled && !channelState.isosurfaceEnabled) {
|
|
115
|
-
return /*#__PURE__*/React.createElement("h4", {
|
|
116
|
-
style: {
|
|
117
|
-
fontStyle: "italic"
|
|
118
|
-
}
|
|
119
|
-
}, "Not currently visible");
|
|
120
|
-
}
|
|
121
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, (channelState.volumeEnabled || channelState.isosurfaceEnabled) && createTFEditor());
|
|
122
|
-
};
|
|
123
|
-
var rowClass = controlsOpen ? "channel-row" : "channel-row controls-closed";
|
|
137
|
+
var rowClass = "channel-row".concat(controlsOpen ? "" : " controls-closed").concat(thisChannelOnly ? " single-channel" : "");
|
|
124
138
|
return /*#__PURE__*/React.createElement(List.Item, {
|
|
125
139
|
key: index,
|
|
126
|
-
className: rowClass
|
|
140
|
+
className: rowClass,
|
|
141
|
+
onClick: onClickChannel
|
|
127
142
|
}, /*#__PURE__*/React.createElement(List.Item.Meta, {
|
|
128
143
|
title: props.name,
|
|
129
144
|
avatar: createColorPicker()
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
.
|
|
2
|
-
|
|
3
|
-
border-bottom:1px solid var(--color-controlpanel-border);
|
|
4
|
-
flex-flow:row wrap;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.channel-rows-list .ant-list-item.channel-row .ant-list-item-meta-title,
|
|
8
|
-
.channel-rows-list .ant-list-item.channel-row .ant-checkbox-wrapper{
|
|
1
|
+
.control-panel-content .ant-list-item.channel-row .ant-list-item-meta-title,
|
|
2
|
+
.control-panel-content .ant-list-item.channel-row .ant-checkbox-wrapper{
|
|
9
3
|
color:var(--color-controlpanel-text);
|
|
10
4
|
}
|
|
11
5
|
|
|
12
|
-
.
|
|
6
|
+
.control-panel-content .ant-list-item.channel-row .ant-list-item-meta{
|
|
7
|
+
align-items:center;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.control-panel-content .ant-list-item.channel-row .ant-btn-text{
|
|
13
11
|
color:var(--color-button-icon-activated-text);
|
|
14
12
|
transition:color 0.3s;
|
|
15
13
|
}
|
|
16
14
|
|
|
17
|
-
.
|
|
18
|
-
.
|
|
15
|
+
.control-panel-content .ant-list-item.channel-row .ant-btn-text:hover,
|
|
16
|
+
.control-panel-content .ant-list-item.channel-row .ant-btn-text:focus-visible{
|
|
19
17
|
color:var(--color-button-tertiary-hover-text) !important;
|
|
20
18
|
}
|
|
21
19
|
|
|
22
|
-
.
|
|
20
|
+
.control-panel-content .ant-list-item.channel-row .button-row{
|
|
23
21
|
margin-top:16px;
|
|
24
22
|
display:flex;
|
|
25
23
|
justify-content:start;
|
|
@@ -27,10 +25,24 @@
|
|
|
27
25
|
gap:5px;
|
|
28
26
|
}
|
|
29
27
|
|
|
30
|
-
.
|
|
28
|
+
.control-panel-content .ant-list-item.channel-row .button-row .ant-btn.ant-btn-sm{
|
|
31
29
|
padding:12px 8px;
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
.
|
|
32
|
+
.control-panel-content .ant-list-item.channel-row.controls-closed .ant-btn-text:not(:focus-visible){
|
|
35
33
|
color:var(--color-controlpanel-text);
|
|
36
34
|
}
|
|
35
|
+
|
|
36
|
+
.control-panel-content .ant-list-item.channel-row.single-channel{
|
|
37
|
+
background-color:var(--color-button-primary-bg);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.control-panel-content .ant-list-item.channel-row.single-channel .channel-visibility-controls,
|
|
41
|
+
.control-panel-content .ant-list-item.channel-row.single-channel .ant-list-item-meta-title{
|
|
42
|
+
color:var(--color-button-primary-text);
|
|
43
|
+
font-weight:600;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.control-panel-content .ant-list-item.channel-row.single-channel .color-picker .color-picker-swatch{
|
|
47
|
+
border-color:var(--color-button-primary-text);
|
|
48
|
+
}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
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
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
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
1
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
8
2
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
3
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
@@ -13,6 +7,8 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
13
7
|
import { map } from "lodash";
|
|
14
8
|
import React from "react";
|
|
15
9
|
import { SketchPicker } from "react-color";
|
|
10
|
+
import "./styles.css";
|
|
11
|
+
|
|
16
12
|
// if there are fewer than this many screen pixels below the swatch but more above, open above the swatch
|
|
17
13
|
var OPEN_ABOVE_MARGIN = 310;
|
|
18
14
|
var DEFAULT_COLOR = {
|
|
@@ -61,29 +57,31 @@ var ColorPicker = function ColorPicker(props) {
|
|
|
61
57
|
}, [props.color]);
|
|
62
58
|
var width = props.width || 36;
|
|
63
59
|
var popoverDirectionStyle = openAboveSwatch ? {
|
|
64
|
-
bottom: "
|
|
60
|
+
bottom: "18px"
|
|
65
61
|
} : {
|
|
66
|
-
top: "
|
|
62
|
+
top: "3px"
|
|
67
63
|
};
|
|
68
|
-
return /*#__PURE__*/React.createElement("div",
|
|
69
|
-
|
|
70
|
-
ref: swatchRef,
|
|
71
|
-
onClick: handleClick
|
|
64
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
className: "color-picker"
|
|
72
66
|
}, /*#__PURE__*/React.createElement("div", {
|
|
73
|
-
|
|
67
|
+
ref: swatchRef,
|
|
68
|
+
onClick: handleClick,
|
|
69
|
+
className: "color-picker-swatch",
|
|
70
|
+
style: {
|
|
74
71
|
width: "".concat(width, "px"),
|
|
75
72
|
background: "rgba(".concat(map(currentColor, function (ele) {
|
|
76
73
|
return ele;
|
|
77
74
|
}), ")")
|
|
78
|
-
}
|
|
79
|
-
})
|
|
75
|
+
}
|
|
76
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
80
77
|
style: {
|
|
81
78
|
position: "absolute"
|
|
82
79
|
}
|
|
83
80
|
}, isOpen ? /*#__PURE__*/React.createElement("div", {
|
|
84
|
-
|
|
81
|
+
className: "color-picker-popover",
|
|
82
|
+
style: popoverDirectionStyle
|
|
85
83
|
}, /*#__PURE__*/React.createElement("div", {
|
|
86
|
-
|
|
84
|
+
className: "color-picker-cover",
|
|
87
85
|
onClick: handleClose
|
|
88
86
|
}), /*#__PURE__*/React.createElement(SketchPicker, {
|
|
89
87
|
color: currentColor,
|
|
@@ -92,29 +90,4 @@ var ColorPicker = function ColorPicker(props) {
|
|
|
92
90
|
disableAlpha: props.disableAlpha
|
|
93
91
|
})) : null));
|
|
94
92
|
};
|
|
95
|
-
export default ColorPicker;
|
|
96
|
-
var STYLES = {
|
|
97
|
-
color: {
|
|
98
|
-
height: "14px",
|
|
99
|
-
margin: "3px",
|
|
100
|
-
borderRadius: "2px"
|
|
101
|
-
},
|
|
102
|
-
swatch: {
|
|
103
|
-
borderRadius: "3px",
|
|
104
|
-
border: "1px solid var(--color-controlpanel-border)",
|
|
105
|
-
display: "inline-block",
|
|
106
|
-
cursor: "pointer",
|
|
107
|
-
verticalAlign: "middle"
|
|
108
|
-
},
|
|
109
|
-
popover: {
|
|
110
|
-
position: "absolute",
|
|
111
|
-
zIndex: "9999"
|
|
112
|
-
},
|
|
113
|
-
cover: {
|
|
114
|
-
position: "fixed",
|
|
115
|
-
top: "0px",
|
|
116
|
-
right: "0px",
|
|
117
|
-
bottom: "0px",
|
|
118
|
-
left: "0px"
|
|
119
|
-
}
|
|
120
|
-
};
|
|
93
|
+
export default ColorPicker;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
.color-picker .color-picker-swatch{
|
|
2
|
+
height:15px;
|
|
3
|
+
border-radius:3px;
|
|
4
|
+
border:1px solid var(--color-controlpanel-border);
|
|
5
|
+
cursor:pointer;
|
|
6
|
+
}
|
|
7
|
+
.color-picker .color-picker-popover{
|
|
8
|
+
position:absolute;
|
|
9
|
+
z-index:9999;
|
|
10
|
+
}
|
|
11
|
+
.color-picker .color-picker-cover{
|
|
12
|
+
position:fixed;
|
|
13
|
+
top:0;
|
|
14
|
+
right:0;
|
|
15
|
+
bottom:0;
|
|
16
|
+
left:0;
|
|
17
|
+
}
|
|
@@ -9,7 +9,7 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
9
9
|
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; }
|
|
10
10
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
11
11
|
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); }
|
|
12
|
-
import { Button, Collapse, Dropdown, Flex, Tooltip } from "antd";
|
|
12
|
+
import { Button, Checkbox, Collapse, Dropdown, Flex, Tooltip } from "antd";
|
|
13
13
|
import React from "react";
|
|
14
14
|
import { PRESET_COLOR_MAP } from "../../shared/constants";
|
|
15
15
|
import { select, useViewerState } from "../../state/store";
|
|
@@ -25,7 +25,7 @@ var ControlTab = /*#__PURE__*/function (ControlTab) {
|
|
|
25
25
|
ControlTab[ControlTab["Metadata"] = 2] = "Metadata";
|
|
26
26
|
return ControlTab;
|
|
27
27
|
}(ControlTab || {});
|
|
28
|
-
var ControlTabNames = _defineProperty(_defineProperty(_defineProperty({}, ControlTab.Channels, "Channel
|
|
28
|
+
var ControlTabNames = _defineProperty(_defineProperty(_defineProperty({}, ControlTab.Channels, "Channel settings"), ControlTab.Advanced, "Advanced settings"), ControlTab.Metadata, "Metadata");
|
|
29
29
|
function ControlPanel(props) {
|
|
30
30
|
var _React$useState = React.useState(ControlTab.Channels),
|
|
31
31
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
@@ -36,6 +36,8 @@ function ControlPanel(props) {
|
|
|
36
36
|
props.setCollapsed(false);
|
|
37
37
|
};
|
|
38
38
|
var resetToDefaultViewerState = useViewerState(select("resetToDefaultViewerState"));
|
|
39
|
+
var singleChannelMode = useViewerState(select("singleChannelMode"));
|
|
40
|
+
var changeViewerSetting = useViewerState(select("changeViewerSetting"));
|
|
39
41
|
var controlPanelContainerRef = React.useRef(null);
|
|
40
42
|
var getDropdownContainer = controlPanelContainerRef.current ? function () {
|
|
41
43
|
return controlPanelContainerRef.current;
|
|
@@ -50,7 +52,7 @@ function ControlPanel(props) {
|
|
|
50
52
|
var key = _ref.key;
|
|
51
53
|
return props.onApplyColorPresets(PRESET_COLOR_MAP[key].colors);
|
|
52
54
|
};
|
|
53
|
-
var
|
|
55
|
+
var renderChannelSettingsHeader = function renderChannelSettingsHeader() {
|
|
54
56
|
var dropDownMenuProps = {
|
|
55
57
|
items: PRESET_COLOR_MAP.map(function (preset, index) {
|
|
56
58
|
return {
|
|
@@ -60,8 +62,9 @@ function ControlPanel(props) {
|
|
|
60
62
|
}),
|
|
61
63
|
onClick: makeTurnOnPresetFn
|
|
62
64
|
};
|
|
65
|
+
var singleChannelTitle = singleChannelMode ? "Turn off single channel mode" : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", null, "Turn on single channel mode"), /*#__PURE__*/React.createElement("div", null, "Use arrow keys to navigate"));
|
|
63
66
|
return /*#__PURE__*/React.createElement("div", {
|
|
64
|
-
className: "
|
|
67
|
+
className: "channel-settings-header"
|
|
65
68
|
}, /*#__PURE__*/React.createElement(Dropdown, {
|
|
66
69
|
trigger: ["click"],
|
|
67
70
|
menu: dropDownMenuProps,
|
|
@@ -78,7 +81,21 @@ function ControlPanel(props) {
|
|
|
78
81
|
style: {
|
|
79
82
|
fontSize: "14px"
|
|
80
83
|
}
|
|
81
|
-
}))))
|
|
84
|
+
})))), /*#__PURE__*/React.createElement("div", {
|
|
85
|
+
style: {
|
|
86
|
+
alignSelf: "end",
|
|
87
|
+
width: "40%"
|
|
88
|
+
}
|
|
89
|
+
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
90
|
+
title: singleChannelTitle
|
|
91
|
+
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
92
|
+
name: "Single channel mode",
|
|
93
|
+
checked: singleChannelMode,
|
|
94
|
+
onChange: function onChange(_ref2) {
|
|
95
|
+
var target = _ref2.target;
|
|
96
|
+
return changeViewerSetting("singleChannelMode", target.checked);
|
|
97
|
+
}
|
|
98
|
+
}, "Single channel mode"))));
|
|
82
99
|
};
|
|
83
100
|
var renderTab = function renderTab(thisTab, icon) {
|
|
84
101
|
return /*#__PURE__*/React.createElement(Tooltip, _extends({
|
|
@@ -164,8 +181,8 @@ function ControlPanel(props) {
|
|
|
164
181
|
}
|
|
165
182
|
}, /*#__PURE__*/React.createElement("h2", {
|
|
166
183
|
className: "control-panel-title"
|
|
167
|
-
}, ControlTabNames[tab]), visibleControls.colorPresetsDropdown && tab === ControlTab.Channels &&
|
|
168
|
-
className: "
|
|
184
|
+
}, ControlTabNames[tab]), visibleControls.colorPresetsDropdown && tab === ControlTab.Channels && renderChannelSettingsHeader(), hasImage && /*#__PURE__*/React.createElement("div", {
|
|
185
|
+
className: "control-panel-content"
|
|
169
186
|
}, tab === ControlTab.Channels && /*#__PURE__*/React.createElement(ChannelsWidget, {
|
|
170
187
|
channelDataChannels: props.channelDataChannels,
|
|
171
188
|
channelGroupedByType: props.channelGroupedByType,
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
border-right:1px solid var(--color-controlpanel-border);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
.control-panel-col-container .ant-checkbox-wrapper{
|
|
12
|
+
align-items:center;
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
.control-panel-col-container .control-panel-tab-col{
|
|
12
16
|
text-align:center;
|
|
13
17
|
}
|
|
@@ -64,38 +68,47 @@
|
|
|
64
68
|
font-size:1.4em;
|
|
65
69
|
}
|
|
66
70
|
|
|
67
|
-
.control-panel-col-container .control-panel-col .
|
|
71
|
+
.control-panel-col-container .control-panel-col .channel-settings-header{
|
|
68
72
|
margin:0 16px 16px;
|
|
73
|
+
display:flex;
|
|
74
|
+
justify-content:space-between;
|
|
69
75
|
}
|
|
70
76
|
|
|
71
|
-
.control-panel-col-container .control-panel-col .channel-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.control-panel-col-container .control-panel-col .channel-rows-list .ant-list-item-meta{
|
|
76
|
-
align-items:center;
|
|
77
|
+
.control-panel-col-container .control-panel-col .channel-settings-header .ant-checkbox-wrapper{
|
|
78
|
+
color:var(--color-controlpanel-text);
|
|
77
79
|
}
|
|
78
80
|
|
|
79
|
-
.control-panel-col-container .control-panel-col .
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
.control-panel-col-container .control-panel-col .ant-checkbox-wrapper:hover .ant-checkbox-inner{
|
|
82
|
+
border-color:white;
|
|
83
|
+
}
|
|
82
84
|
|
|
83
|
-
.control-panel-col-container .control-panel-col .
|
|
84
|
-
|
|
85
|
+
.control-panel-col-container .control-panel-col .control-panel-content{
|
|
86
|
+
border-top:1px solid var(--color-controlpanel-border);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.control-panel-col-container .control-panel-col .control-panel-content .ant-list-item-meta .ant-list-item-meta-title{
|
|
90
|
+
margin:0;
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
.control-panel-col-container .control-panel-col .
|
|
88
|
-
.control-panel-col-container .control-panel-col .
|
|
93
|
+
.control-panel-col-container .control-panel-col .control-panel-content .channel-visibility-controls,
|
|
94
|
+
.control-panel-col-container .control-panel-col .control-panel-content .ant-collapse-extra{
|
|
89
95
|
width:40%;
|
|
90
96
|
display:flex;
|
|
91
97
|
}
|
|
92
98
|
|
|
93
|
-
.control-panel-col-container .control-panel-col .
|
|
99
|
+
.control-panel-col-container .control-panel-col .control-panel-content .channel-visibility-controls .ant-checkbox-wrapper,
|
|
100
|
+
.control-panel-col-container .control-panel-col .control-panel-content .channel-visibility-controls .single-channel-text,
|
|
101
|
+
.control-panel-col-container .control-panel-col .control-panel-content .ant-collapse-extra .ant-checkbox-wrapper,
|
|
102
|
+
.control-panel-col-container .control-panel-col .control-panel-content .ant-collapse-extra .single-channel-text{
|
|
94
103
|
flex:4;
|
|
95
104
|
}
|
|
96
105
|
|
|
97
|
-
.control-panel-col-container .control-panel-col .channel-
|
|
98
|
-
|
|
106
|
+
.control-panel-col-container .control-panel-col .control-panel-content .channel-visibility-controls .single-channel-text{
|
|
107
|
+
font-size:11px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.control-panel-col-container .control-panel-col .control-panel-content .ant-collapse-content-box{
|
|
111
|
+
padding:0;
|
|
99
112
|
}
|
|
100
113
|
|
|
101
114
|
.control-panel-col-container .control-panel-col .ant-collapse{
|
|
@@ -107,6 +120,46 @@
|
|
|
107
120
|
background-color:var(--color-controlpanel-section-bg);
|
|
108
121
|
}
|
|
109
122
|
|
|
123
|
+
.control-panel-col-container .control-panel-col .ant-collapse.single-channel-mode .ant-list{
|
|
124
|
+
cursor:pointer;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.control-panel-col-container .control-panel-col .ant-collapse .ant-collapse-item:not(.ant-collapse-item-active):last-child{
|
|
128
|
+
border-bottom:1px solid var(--color-controlpanel-border);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.control-panel-col-container .control-panel-col .ant-list-item,
|
|
132
|
+
.control-panel-col-container .control-panel-col .color-picker-row{
|
|
133
|
+
padding:0 16px;
|
|
134
|
+
border-bottom:none;
|
|
135
|
+
display:flex;
|
|
136
|
+
flex-flow:row wrap;
|
|
137
|
+
color:var(--color-controlpanel-text);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.control-panel-col-container .control-panel-col .ant-list-item::after, .control-panel-col-container .control-panel-col .color-picker-row::after{
|
|
141
|
+
content:"";
|
|
142
|
+
margin-top:22px;
|
|
143
|
+
width:100%;
|
|
144
|
+
border-bottom:1px solid var(--color-controlpanel-border);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.control-panel-col-container .control-panel-col .ant-list-item{
|
|
148
|
+
padding-top:22px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.control-panel-col-container .control-panel-col .ant-list-item::after{
|
|
152
|
+
margin-top:22px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.control-panel-col-container .control-panel-col .color-picker-row{
|
|
156
|
+
padding-top:16px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.control-panel-col-container .control-panel-col .color-picker-row::after{
|
|
160
|
+
margin-top:16px;
|
|
161
|
+
}
|
|
162
|
+
|
|
110
163
|
.control-panel-col-container .control-panel-col .noUi-horizontal .noUi-handle{
|
|
111
164
|
box-shadow:none;
|
|
112
165
|
cursor:pointer;
|
|
@@ -7,9 +7,13 @@ var ColorPickerRow = function ColorPickerRow(_ref) {
|
|
|
7
7
|
_onColorChange = _ref.onColorChange,
|
|
8
8
|
children = _ref.children;
|
|
9
9
|
return /*#__PURE__*/React.createElement("div", {
|
|
10
|
-
|
|
10
|
+
className: "color-picker-row"
|
|
11
11
|
}, /*#__PURE__*/React.createElement("span", {
|
|
12
|
-
style:
|
|
12
|
+
style: {
|
|
13
|
+
marginRight: "16px",
|
|
14
|
+
display: "flex",
|
|
15
|
+
alignItems: "center"
|
|
16
|
+
}
|
|
13
17
|
}, /*#__PURE__*/React.createElement(ColorPicker, {
|
|
14
18
|
color: colorArrayToObject(color),
|
|
15
19
|
onColorChange: function onColorChange(color) {
|
|
@@ -36,15 +40,4 @@ var CustomizeWidget = function CustomizeWidget(props) {
|
|
|
36
40
|
}
|
|
37
41
|
}, "Bounding box color", !showBoundingBox && /*#__PURE__*/React.createElement("i", null, " - bounding box turned off")));
|
|
38
42
|
};
|
|
39
|
-
var STYLES = {
|
|
40
|
-
colorPickerRow: {
|
|
41
|
-
padding: "14px 0",
|
|
42
|
-
display: "flex",
|
|
43
|
-
borderBottom: "1px solid #6e6e6e",
|
|
44
|
-
color: "var(--color-controlpanel-text)"
|
|
45
|
-
},
|
|
46
|
-
colorPicker: {
|
|
47
|
-
marginRight: "16px"
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
43
|
export default CustomizeWidget;
|
|
@@ -24,8 +24,7 @@ var GlobalVolumeControls = function GlobalVolumeControls(props) {
|
|
|
24
24
|
var showControls = props.visibleControls;
|
|
25
25
|
return /*#__PURE__*/React.createElement("div", {
|
|
26
26
|
style: {
|
|
27
|
-
|
|
28
|
-
paddingBottom: 22
|
|
27
|
+
padding: "18px 16px 22px"
|
|
29
28
|
}
|
|
30
29
|
}, showControls.alphaMaskSlider && createSliderRow("mask cell", maskAlpha, 100, "maskAlpha"), showControls.brightnessSlider && createSliderRow("brightness", brightness, 100, "brightness"), showControls.densitySlider && createSliderRow("density", density, 100, "density"), showControls.levelsSliders && createSliderRow("levels", levels, 255, "levels"), showControls.interpolationControl && /*#__PURE__*/React.createElement(SliderRow, {
|
|
31
30
|
label: "interpolate",
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
function _regeneratorRuntime() { "use strict";
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
|
|
3
|
+
function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
|
|
4
|
+
function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
|
|
5
|
+
function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
|
|
6
|
+
function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
|
|
7
|
+
function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
|
|
8
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
9
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
10
|
+
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
3
11
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
4
12
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
5
13
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -25,7 +25,8 @@ export var
|
|
|
25
25
|
LEVELS_SLIDER_DEFAULT = [35.0, 140.0, 255.0],
|
|
26
26
|
INTERPOLATION_ENABLED_DEFAULT = true,
|
|
27
27
|
OTHER_CHANNEL_KEY = "Other",
|
|
28
|
-
SINGLE_GROUP_CHANNEL_KEY = "Channels"
|
|
28
|
+
SINGLE_GROUP_CHANNEL_KEY = "Channels",
|
|
29
|
+
SINGLE_CHANNEL_MODE_COLOR = [255, 255, 255];
|
|
29
30
|
export var TFEDITOR_DEFAULT_COLOR = [255, 255, 255];
|
|
30
31
|
export var TFEDITOR_MAX_BIN = 255;
|
|
31
32
|
export var CACHE_MAX_SIZE = 1000000000;
|
|
@@ -163,6 +164,8 @@ export var getDefaultViewerState = function getDefaultViewerState() {
|
|
|
163
164
|
},
|
|
164
165
|
time: 0,
|
|
165
166
|
scene: 0,
|
|
167
|
+
singleChannelMode: false,
|
|
168
|
+
singleChannelIndex: 0,
|
|
166
169
|
// Do not override camera position, target, etc. by default;
|
|
167
170
|
// instead, let the viewer apply default camera settings based on the view mode.
|
|
168
171
|
// This prevents a bug where the camera's position and view mode are set to
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
function _regeneratorRuntime() { "use strict";
|
|
1
|
+
function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
|
|
2
|
+
function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
|
|
3
|
+
function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
|
|
4
|
+
function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
|
|
5
|
+
function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
|
|
6
|
+
function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
|
|
7
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
8
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
9
|
+
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
2
10
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
11
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
4
12
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
2
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
3
|
-
function _regeneratorRuntime() { "use strict";
|
|
3
|
+
function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
|
|
4
|
+
function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
|
|
5
|
+
function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
|
|
6
|
+
function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
|
|
7
|
+
function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
|
|
8
|
+
function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
|
|
9
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
10
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
11
|
+
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
4
12
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
5
13
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
6
14
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
@@ -428,7 +436,9 @@ describe("Viewer state", function () {
|
|
|
428
436
|
},
|
|
429
437
|
time: 0,
|
|
430
438
|
scene: 0,
|
|
431
|
-
cameraState: undefined
|
|
439
|
+
cameraState: undefined,
|
|
440
|
+
singleChannelMode: false,
|
|
441
|
+
singleChannelIndex: 0
|
|
432
442
|
};
|
|
433
443
|
var SERIALIZED_DEFAULT_VIEWER_STATE = {
|
|
434
444
|
mode: "volumetric",
|
|
@@ -447,7 +457,9 @@ describe("Viewer state", function () {
|
|
|
447
457
|
reg: "0:1,0:1,0:1",
|
|
448
458
|
slice: "0.5,0.5,0.5",
|
|
449
459
|
t: "0",
|
|
450
|
-
scene: "0"
|
|
460
|
+
scene: "0",
|
|
461
|
+
scm: "0",
|
|
462
|
+
sci: "0"
|
|
451
463
|
};
|
|
452
464
|
var CUSTOM_VIEWER_STATE = {
|
|
453
465
|
renderMode: RenderMode.pathTrace,
|
|
@@ -475,6 +487,8 @@ describe("Viewer state", function () {
|
|
|
475
487
|
},
|
|
476
488
|
time: 100,
|
|
477
489
|
scene: 3,
|
|
490
|
+
singleChannelMode: true,
|
|
491
|
+
singleChannelIndex: 3,
|
|
478
492
|
cameraState: {
|
|
479
493
|
position: [-1.05, -4, 45],
|
|
480
494
|
target: [0, 0, 0],
|
|
@@ -501,6 +515,8 @@ describe("Viewer state", function () {
|
|
|
501
515
|
slice: "0.25,0.75,0.5",
|
|
502
516
|
t: "100",
|
|
503
517
|
scene: "3",
|
|
518
|
+
scm: "1",
|
|
519
|
+
sci: "3",
|
|
504
520
|
cam: "pos:-1.05:-4:45,tar:0:0:0,up:0:1:0,ort:3.534,fov:43.5"
|
|
505
521
|
};
|
|
506
522
|
describe("serializeViewerState", function () {
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
var _ViewerChannelSetting, _ViewerChannelSetting2, _ViewerChannelSetting3, _ViewerChannelSetting4, _ViewerChannelSetting5, _ViewerChannelSetting6, _ViewerChannelSetting7, _ViewerChannelSetting8, _ViewerChannelSetting9, _ViewerChannelSetting10, _ViewerChannelSetting11, _ViewerChannelSetting12, _ViewerChannelSetting13, _ViewerChannelSetting14, _ViewerStateKeys$View, _ViewerStateKeys$Mode, _ViewerStateKeys$Mask, _ViewerStateKeys$Imag, _ViewerStateKeys$Axes, _ViewerStateKeys$Boun, _ViewerStateKeys$Boun2, _ViewerStateKeys$Back, _ViewerStateKeys$Auto, _ViewerStateKeys$Brig, _ViewerStateKeys$Dens, _ViewerStateKeys$Leve, _ViewerStateKeys$Inte, _ViewerStateKeys$Regi, _ViewerStateKeys$Slic, _ViewerStateKeys$Time, _ViewerStateKeys$Scen, _ViewerStateKeys$Came;
|
|
3
|
-
function _regeneratorRuntime() { "use strict";
|
|
2
|
+
var _ViewerChannelSetting, _ViewerChannelSetting2, _ViewerChannelSetting3, _ViewerChannelSetting4, _ViewerChannelSetting5, _ViewerChannelSetting6, _ViewerChannelSetting7, _ViewerChannelSetting8, _ViewerChannelSetting9, _ViewerChannelSetting10, _ViewerChannelSetting11, _ViewerChannelSetting12, _ViewerChannelSetting13, _ViewerChannelSetting14, _ViewerStateKeys$View, _ViewerStateKeys$Mode, _ViewerStateKeys$Mask, _ViewerStateKeys$Imag, _ViewerStateKeys$Axes, _ViewerStateKeys$Boun, _ViewerStateKeys$Sing, _ViewerStateKeys$Sing2, _ViewerStateKeys$Boun2, _ViewerStateKeys$Back, _ViewerStateKeys$Auto, _ViewerStateKeys$Brig, _ViewerStateKeys$Dens, _ViewerStateKeys$Leve, _ViewerStateKeys$Inte, _ViewerStateKeys$Regi, _ViewerStateKeys$Slic, _ViewerStateKeys$Time, _ViewerStateKeys$Scen, _ViewerStateKeys$Came;
|
|
3
|
+
function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
|
|
4
|
+
function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
|
|
5
|
+
function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
|
|
6
|
+
function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
|
|
7
|
+
function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
|
|
8
|
+
function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
|
|
9
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
10
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
11
|
+
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
4
12
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
5
13
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
6
14
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -103,6 +111,8 @@ export var ViewerStateKeys = /*#__PURE__*/function (ViewerStateKeys) {
|
|
|
103
111
|
ViewerStateKeys["Time"] = "t";
|
|
104
112
|
ViewerStateKeys["Scene"] = "scene";
|
|
105
113
|
ViewerStateKeys["CameraState"] = "cam";
|
|
114
|
+
ViewerStateKeys["SingleChannelMode"] = "scm";
|
|
115
|
+
ViewerStateKeys["SingleChannelIndex"] = "sci";
|
|
106
116
|
return ViewerStateKeys;
|
|
107
117
|
}({});
|
|
108
118
|
export var CameraTransformKeys = /*#__PURE__*/function (CameraTransformKeys) {
|
|
@@ -249,6 +259,8 @@ _ViewerStateKeys$Mask = ViewerStateKeys.Mask;
|
|
|
249
259
|
_ViewerStateKeys$Imag = ViewerStateKeys.Image;
|
|
250
260
|
_ViewerStateKeys$Axes = ViewerStateKeys.Axes;
|
|
251
261
|
_ViewerStateKeys$Boun = ViewerStateKeys.BoundingBox;
|
|
262
|
+
_ViewerStateKeys$Sing = ViewerStateKeys.SingleChannelMode;
|
|
263
|
+
_ViewerStateKeys$Sing2 = ViewerStateKeys.SingleChannelIndex;
|
|
252
264
|
_ViewerStateKeys$Boun2 = ViewerStateKeys.BoundingBoxColor;
|
|
253
265
|
_ViewerStateKeys$Back = ViewerStateKeys.BackgroundColor;
|
|
254
266
|
_ViewerStateKeys$Auto = ViewerStateKeys.Autorotate;
|
|
@@ -279,6 +291,10 @@ export var ViewerStateParams = /*#__PURE__*/_createClass(function ViewerStatePar
|
|
|
279
291
|
_defineProperty(this, _ViewerStateKeys$Axes, undefined);
|
|
280
292
|
/** Whether to show the bounding box. "1" is enabled. Disabled by default. */
|
|
281
293
|
_defineProperty(this, _ViewerStateKeys$Boun, undefined);
|
|
294
|
+
/** Whether single-channel mode is active. "1" is active. Inactive by default. */
|
|
295
|
+
_defineProperty(this, _ViewerStateKeys$Sing, undefined);
|
|
296
|
+
/** If single-channel mode is active, which channel index is shown. Defaults to 0. */
|
|
297
|
+
_defineProperty(this, _ViewerStateKeys$Sing2, undefined);
|
|
282
298
|
/** The color of the bounding box, as a 6-digit hex color. */
|
|
283
299
|
_defineProperty(this, _ViewerStateKeys$Boun2, undefined);
|
|
284
300
|
/** The background color, as a 6-digit hex color. */
|
|
@@ -934,6 +950,8 @@ export function deserializeViewerState(params) {
|
|
|
934
950
|
time: parseStringInt(params[ViewerStateKeys.Time], 0, Number.POSITIVE_INFINITY),
|
|
935
951
|
scene: parseStringInt(params[ViewerStateKeys.Scene], 0, Number.POSITIVE_INFINITY),
|
|
936
952
|
renderMode: parseStringEnum(params[ViewerStateKeys.Mode], RenderMode),
|
|
953
|
+
singleChannelMode: parseStringBoolean(params[ViewerStateKeys.SingleChannelMode]),
|
|
954
|
+
singleChannelIndex: parseStringInt(params[ViewerStateKeys.SingleChannelIndex], 0, Number.POSITIVE_INFINITY),
|
|
937
955
|
cameraState: parseCameraState(params[ViewerStateKeys.CameraState])
|
|
938
956
|
};
|
|
939
957
|
|
|
@@ -965,11 +983,11 @@ export function deserializeViewerState(params) {
|
|
|
965
983
|
* @returns A `ViewerStateParams` object with the serialized parameters. Undefined values are removed.
|
|
966
984
|
*/
|
|
967
985
|
export function serializeViewerState(state, removeDefaults) {
|
|
968
|
-
var _state$maskAlpha, _state$brightness, _state$density, _state$levels, _state$time, _state$scene, _result;
|
|
986
|
+
var _state$maskAlpha, _state$brightness, _state$density, _state$levels, _state$time, _state$scene, _state$singleChannelI, _result;
|
|
969
987
|
if (removeDefaults) {
|
|
970
988
|
state = removeMatchingProperties(state, getDefaultViewerState());
|
|
971
989
|
}
|
|
972
|
-
var result = (_result = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_result, ViewerStateKeys.Mode, state.renderMode), ViewerStateKeys.Mask, (_state$maskAlpha = state.maskAlpha) === null || _state$maskAlpha === void 0 ? void 0 : _state$maskAlpha.toString()), ViewerStateKeys.Image, state.imageType), ViewerStateKeys.Axes, serializeBoolean(state.showAxes)), ViewerStateKeys.BoundingBox, serializeBoolean(state.showBoundingBox)), ViewerStateKeys.BoundingBoxColor, state.boundingBoxColor && colorArrayToHex(state.boundingBoxColor)), ViewerStateKeys.BackgroundColor, state.backgroundColor && colorArrayToHex(state.backgroundColor)), ViewerStateKeys.Autorotate, serializeBoolean(state.autorotate)), ViewerStateKeys.Brightness, (_state$brightness = state.brightness) === null || _state$brightness === void 0 ? void 0 : _state$brightness.toString()), ViewerStateKeys.Density, (_state$density = state.density) === null || _state$density === void 0 ? void 0 : _state$density.toString()), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_result, ViewerStateKeys.Interpolation, serializeBoolean(state.interpolationEnabled)), ViewerStateKeys.Region, state.region && serializeRegion(state.region)), ViewerStateKeys.Slice, state.slice && serializeSlice(state.slice)), ViewerStateKeys.Levels, (_state$levels = state.levels) === null || _state$levels === void 0 ? void 0 : _state$levels.join(",")), ViewerStateKeys.Time, (_state$time = state.time) === null || _state$time === void 0 ? void 0 : _state$time.toString()), ViewerStateKeys.Scene, (_state$scene = state.scene) === null || _state$scene === void 0 ? void 0 : _state$scene.toString()), ViewerStateKeys.CameraState, state.cameraState && serializeCameraState(state.cameraState, removeDefaults, state.viewMode)));
|
|
990
|
+
var result = (_result = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_result, ViewerStateKeys.Mode, state.renderMode), ViewerStateKeys.Mask, (_state$maskAlpha = state.maskAlpha) === null || _state$maskAlpha === void 0 ? void 0 : _state$maskAlpha.toString()), ViewerStateKeys.Image, state.imageType), ViewerStateKeys.Axes, serializeBoolean(state.showAxes)), ViewerStateKeys.BoundingBox, serializeBoolean(state.showBoundingBox)), ViewerStateKeys.BoundingBoxColor, state.boundingBoxColor && colorArrayToHex(state.boundingBoxColor)), ViewerStateKeys.BackgroundColor, state.backgroundColor && colorArrayToHex(state.backgroundColor)), ViewerStateKeys.Autorotate, serializeBoolean(state.autorotate)), ViewerStateKeys.Brightness, (_state$brightness = state.brightness) === null || _state$brightness === void 0 ? void 0 : _state$brightness.toString()), ViewerStateKeys.Density, (_state$density = state.density) === null || _state$density === void 0 ? void 0 : _state$density.toString()), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_result, ViewerStateKeys.Interpolation, serializeBoolean(state.interpolationEnabled)), ViewerStateKeys.Region, state.region && serializeRegion(state.region)), ViewerStateKeys.Slice, state.slice && serializeSlice(state.slice)), ViewerStateKeys.Levels, (_state$levels = state.levels) === null || _state$levels === void 0 ? void 0 : _state$levels.join(",")), ViewerStateKeys.Time, (_state$time = state.time) === null || _state$time === void 0 ? void 0 : _state$time.toString()), ViewerStateKeys.Scene, (_state$scene = state.scene) === null || _state$scene === void 0 ? void 0 : _state$scene.toString()), ViewerStateKeys.SingleChannelMode, serializeBoolean(state.singleChannelMode)), ViewerStateKeys.SingleChannelIndex, (_state$singleChannelI = state.singleChannelIndex) === null || _state$singleChannelI === void 0 ? void 0 : _state$singleChannelI.toString()), ViewerStateKeys.CameraState, state.cameraState && serializeCameraState(state.cameraState, removeDefaults, state.viewMode)));
|
|
973
991
|
var viewModeToViewParam = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, ViewMode.threeD, "3D"), ViewMode.xy, "Z"), ViewMode.xz, "Y"), ViewMode.yz, "X");
|
|
974
992
|
result[ViewerStateKeys.View] = state.viewMode && viewModeToViewParam[state.viewMode];
|
|
975
993
|
return removeUndefinedProperties(result);
|
|
@@ -75,7 +75,9 @@ export var selectViewerSettings = function selectViewerSettings(store) {
|
|
|
75
75
|
slice: store.slice,
|
|
76
76
|
time: store.time,
|
|
77
77
|
scene: store.scene,
|
|
78
|
-
cameraState: store.cameraState
|
|
78
|
+
cameraState: store.cameraState,
|
|
79
|
+
singleChannelMode: store.singleChannelMode,
|
|
80
|
+
singleChannelIndex: store.singleChannelIndex
|
|
79
81
|
};
|
|
80
82
|
};
|
|
81
83
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aics/vole-app",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "web view of cell volume images",
|
|
5
5
|
"main": "es/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"author": "Megan Riel-Mehan",
|
|
46
46
|
"license": "ISC",
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@aics/vole-core": "^4.
|
|
48
|
+
"@aics/vole-core": "^4.6.4",
|
|
49
49
|
"@ant-design/icons": "^5.2.5",
|
|
50
50
|
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
|
51
51
|
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
package/type-declarations/aics-image-viewer/components/{ColorPicker.d.ts → ColorPicker/index.d.ts}
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { ColorObject } from "
|
|
2
|
+
import type { ColorObject } from "../../shared/utils/colorRepresentations";
|
|
3
|
+
import "./styles.css";
|
|
3
4
|
type ColorChangeHandler = (currentColor: ColorObject, prevColor?: ColorObject, idx?: number) => void;
|
|
4
5
|
interface ColorPickerProps {
|
|
5
6
|
color: ColorObject;
|
|
@@ -5,7 +5,7 @@ import type { AxisName } from "./types";
|
|
|
5
5
|
import type { ColorArray } from "./utils/colorRepresentations";
|
|
6
6
|
import type { ViewerChannelSettings } from "./utils/viewerChannelSettings";
|
|
7
7
|
export declare const // Control panel will automatically close if viewport is less than this width
|
|
8
|
-
CONTROL_PANEL_CLOSE_WIDTH = 970, CLIPPING_PANEL_HEIGHT_DEFAULT = 200, CLIPPING_PANEL_HEIGHT_TALL = 235, BACKGROUND_COLOR_DEFAULT: ColorArray, BOUNDING_BOX_COLOR_DEFAULT: ColorArray, AXIS_MARGIN_DEFAULT: [number, number], SCALE_BAR_MARGIN_DEFAULT: [number, number], LUT_MIN_PERCENTILE = 0.5, LUT_MAX_PERCENTILE = 0.983, ALPHA_MASK_SLIDER_DEFAULT = 0, BRIGHTNESS_SLIDER_LEVEL_DEFAULT = 70, DENSITY_SLIDER_LEVEL_DEFAULT = 50, LEVELS_SLIDER_DEFAULT: ColorArray, INTERPOLATION_ENABLED_DEFAULT = true, OTHER_CHANNEL_KEY = "Other", SINGLE_GROUP_CHANNEL_KEY = "Channels";
|
|
8
|
+
CONTROL_PANEL_CLOSE_WIDTH = 970, CLIPPING_PANEL_HEIGHT_DEFAULT = 200, CLIPPING_PANEL_HEIGHT_TALL = 235, BACKGROUND_COLOR_DEFAULT: ColorArray, BOUNDING_BOX_COLOR_DEFAULT: ColorArray, AXIS_MARGIN_DEFAULT: [number, number], SCALE_BAR_MARGIN_DEFAULT: [number, number], LUT_MIN_PERCENTILE = 0.5, LUT_MAX_PERCENTILE = 0.983, ALPHA_MASK_SLIDER_DEFAULT = 0, BRIGHTNESS_SLIDER_LEVEL_DEFAULT = 70, DENSITY_SLIDER_LEVEL_DEFAULT = 50, LEVELS_SLIDER_DEFAULT: ColorArray, INTERPOLATION_ENABLED_DEFAULT = true, OTHER_CHANNEL_KEY = "Other", SINGLE_GROUP_CHANNEL_KEY = "Channels", SINGLE_CHANNEL_MODE_COLOR: ColorArray;
|
|
9
9
|
export declare const TFEDITOR_DEFAULT_COLOR: ColorArray;
|
|
10
10
|
export declare const TFEDITOR_MAX_BIN = 255;
|
|
11
11
|
export declare const CACHE_MAX_SIZE = 1000000000;
|
|
@@ -48,7 +48,9 @@ export declare enum ViewerStateKeys {
|
|
|
48
48
|
Slice = "slice",
|
|
49
49
|
Time = "t",
|
|
50
50
|
Scene = "scene",
|
|
51
|
-
CameraState = "cam"
|
|
51
|
+
CameraState = "cam",
|
|
52
|
+
SingleChannelMode = "scm",
|
|
53
|
+
SingleChannelIndex = "sci"
|
|
52
54
|
}
|
|
53
55
|
export declare enum CameraTransformKeys {
|
|
54
56
|
/** Camera position in 3D coordinates. */
|
|
@@ -194,6 +196,10 @@ export declare class ViewerStateParams {
|
|
|
194
196
|
[ViewerStateKeys.Axes]?: string;
|
|
195
197
|
/** Whether to show the bounding box. "1" is enabled. Disabled by default. */
|
|
196
198
|
[ViewerStateKeys.BoundingBox]?: string;
|
|
199
|
+
/** Whether single-channel mode is active. "1" is active. Inactive by default. */
|
|
200
|
+
[ViewerStateKeys.SingleChannelMode]?: string;
|
|
201
|
+
/** If single-channel mode is active, which channel index is shown. Defaults to 0. */
|
|
202
|
+
[ViewerStateKeys.SingleChannelIndex]?: string;
|
|
197
203
|
/** The color of the bounding box, as a 6-digit hex color. */
|
|
198
204
|
[ViewerStateKeys.BoundingBoxColor]?: string;
|
|
199
205
|
/** The background color, as a 6-digit hex color. */
|